所以我使用URP,点燃材料。
我有一个带有单个 fbx 模型的三明治对象,只有一个子网格。三明治的制作顺序是面包 - 番茄 - 奶酪 - 火腿 - 生菜 - 面包
当不透明时,它工作得很好,但是当三明治的材质设置为透明时(但 alpha 已满 1),它的渲染顺序会变得混乱,火腿渲染在所有东西的上面,面包渲染在所有东西的下面。
为什么统一甚至承认它们是单独的对象?从技术上讲,它是具有单一纹理的单一网格。
由于它们是单个对象,我什至无法摆弄渲染队列。有什么办法解决这个问题吗?预先感谢。
您不能真正在具有自相交或重叠的网格上使用透明着色器。这是因为透明着色器不会写入深度缓冲区,而只会检查深度缓冲区,因此透明对象仍然被不透明几何体遮挡。
Unity 首先绘制不透明几何体,然后从前到后对对象进行排序,以避免不必要的过度绘制。
透明对象稍后渲染,并且这些对象被排序为从后到前以遵循画家算法,以便透明混合正常工作。然而,Unity 只对objects 进行排序,而不是对单个三角形进行排序。单个网格的三角形通常按照它们出现在网格的索引缓冲区中的顺序进行渲染。因此,当使用透明着色器渲染完全不透明的对象时,您将得到与所显示的结果完全相同的结果。哪些部分会出现在顶部仅取决于三角形的顺序。一般来说,最后渲染的那些最终会出现在顶部。因此,从哪一方面来看甚至很重要。
你的三明治部分都是 100% 不透明的,但我猜你想在某个时刻淡出网格?如果您只想“淡出”对象,您可以按照我的建议使用点画着色器在这里。 这是我在帖子中引用的博客文章。
这个问题没有简单的解决方案。为了正确渲染您的对象,所有三角形都需要以正确的方式排序。
根据要求,可以使用实际写入深度缓冲区的透明着色器,并以首先渲染“最外层”三角形的方式制作网格。因此,除非您从没有外部三角形阻挡视图的侧面查看网格,否则您将看不到网格的“内部”。尽管这仅适用于可以通过这种方式拆分/排序的对象。