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:

展开前:

 展开后:

 

posted on 2024-04-28 01:10  wantnon  阅读(115)  评论(0编辑  收藏  举报

导航