【Unity渲染】URP透明物体自身渲染穿插异常问题

背景:

对于URP中的某个物体,我们如果希望他正反面都可以被渲染。

通常会有两种解决方案:

1.将网格设置为双面网格。(此种情况Mesh.RecalculateNormals计算结果可能会异常,解决可参考网格法线生成异常解决

2.将材质设置为双面材质Render Face设置为Both
在这里插入图片描述

期望的结果:

图1
图2

异常结果

图3
很明显,可以看出渲染顺序按照1,2,3的顺序渲染了,导致显示异常问题。

异常原因

经测试后发现,如果勾选了材质球的双面渲染,在透明模式下,会按照网格中三角形标号,从前往后进行面片渲染。

导致排序靠后的面片,渲染在了前面。

而不是按照我们的期望,先渲染RenderFace=Back的情况,再渲染RenderFace=Front的情况。

结合图3和图4可已看出, 1面渲染在了最上面,2面渲染在中间,3面渲染在了最后面。对应着网格中三角形标号的先后顺序。
图4

解决方案

1.不再将材质球设置为双面渲染, 改为只渲染正面(RenderFace=Front)

2.增加网格面,将网格设置为双面网格。(需要注意,设置为双面网格可能会导致自动生成法线接口Mesh.RecalculateNormals计算结果异常,解决可参考网格法线生成异常解决

即可解决透明物体自身渲染的异常问题。
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/boyZhenGui/article/details/130288259