使用 Unity 标准透明着色器的模型自身重叠

问题描述 投票:0回答:2

正如标题所示,当我使用标准透明着色器时,我的模型会重叠。
我需要一个与排序层兼容的着色器,因为我的游戏是 2D 和 3D 的混合体,这就是我使用这个的原因

这是一个例子,看看腿:
不透明:https://i.stack.imgur.com/eKfem.png
透明:https://i.stack.imgur.com/RpvnQ.png

有什么办法可以解决这个问题吗?

(编辑:从上面看到的另一个例子:
不透明:https://i.stack.imgur.com/3Ap8q.png
透明:https://i.stack.imgur.com/kxYPy.png

unity-game-engine shader rendering
2个回答
0
投票

这是因为透明物体禁用了 Z 测试。解决此问题的一种方法是在主通道之前创建一个具有所谓“深度底漆通道”的自定义着色器。以下是它在子着色器中的外观示例:

Tags {"RenderType"="Transparent" "Queue"="Transparent" }
Blend SrcAlpha OneMinusSrcAlpha
ZWrite Off

Pass {
    ZWrite On
    ColorMask 0
}

CGPROGRAM
#pragma surface surf standard alpha:fade
// The rest is just your standard surface shader

请注意,当两个透明对象相交或位于彼此前面时,这可能会导致一些奇怪的伪像。

如果您没有编写表面着色器的经验,可以查看此链接: https://docs.unity3d.com/Manual/SL-SurfaceShaderExamples.html


0
投票

按照 @Kalle Halvarsson 所说,我设法将代码放入 Unity 的标准着色器中。

Blend SrcAlpha OneMinusSrcAlpha
ZWrite Off
Pass {
    ZWrite On
    ColorMask 0
}

将其粘贴在第一个子着色器中的 LOD 300 下方,可以使透明和淡入淡出正常工作。 Before After

© www.soinside.com 2019 - 2024. All rights reserved.