ue4.26 Translucency->Render After DOF
横竖放两个带法线半透明片,lighting model选前向透明,将横片的Translucency Sort Priority设为1,竖片的Translucency Sort Priority设为0,以确保先画竖片后画横片(其实都设为0也行,因为Translucency Sort Priority相同的actor,会按距离远近自动排序),横片折射率设为1.05,竖片折射率设为1.2。
如果材质上RenderAfterDOF去掉勾选,则效果如下:
可见,有两个问题:
1,不但扭曲了背景,而且扭曲了自己。
2,后画的竖片把先画的横片给扭曲了。
截帧看会更清楚:
(1)Translucency pass:
先画较远的竖片:
再画较近的横片:
(2)Distortion pass:
根据法线和折射率画横片的扭曲偏移:
(注意,由于偏移值比较小,需要将Range最大值调得比较小才能看清)
画竖片的扭曲偏移:
注意对于扭曲偏移来说,先画横片还是先画竖片无所谓,因为从pipline state可以看到,画扭曲偏移时用的blendfunc是add one one:
然后将扭曲偏移应用到背景:
可见,正是由于扭曲偏移是通过add得到,所以横片的扭曲偏移会混入竖片的扭曲偏移,从而导致横片会被竖片扭曲。
再看背景图的来源,可以通过跳转来找到:
跳到了之前的Translucency pass的Standard末尾:
所以背景图是带有这两个片本身的,所以不但会扭曲背景,也会扭曲自己。
如果材质上勾选RenderAfterDOF,则效果如下(正常多了):
此时截帧可以看到:
画Translucency pass中画两个片不是在Standard下,而是改到了AfterDOF下的SeparateTransluency下:
注:其实Render After DOF对应的变量就是bEnableSeparateTranslucency:
扭曲偏移不变:
但背景图是不带两个片自身的了:
----补充:
renderDoc的+Scene条,点击可以展开,显示出当前位置所属的pass:
展开前:
展开后: