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   wantnon  阅读(177)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
历史上的今天:
2016-04-28 unity, Graphics.Blit (null, null, mat,0);

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示