我有一个 png 图像,我想用作透明蒙版,它在场景中将完全透明,但不会显示其后面的 3D 对象(类似于 sprite 蒙版,但需要使用 3D 对象).
所以我在我的 3D 场景中将图像添加为 sprite(点 - 无过滤器)并且我已经将着色器应用于 sprite Material ,但它无法正常工作。看起来像素在边框中没有被“正确切割”。
我使用这种方法是因为 unity 内置的“2D sprite mask”仅影响使用 Sprite Renderer 的对象(如此处解释 https://docs.unity3d.com/Manual/class-SpriteMask.html ),但我希望它影响 3D 对象。
所以这是着色器:
Shader "Masked/Mask" {
SubShader {
Tags {"Queue" = "Geometry+10" }
ColorMask 0
ZWrite On
Pass {}
}
}
这是用作 mask 的 Sprite (png 图像): sprite mask
这些是我想要的结果与我得到的结果: results compared
我不擅长着色器,所以我想知道是否可以更改代码以改善结果。我已经为 sprite 图像尝试了不同的格式(png、tif、压缩),但结果是一样的。
最佳答案
我已经使用“透明”3D 遮挡器和渲染优先级做了类似的事情,我想它会与 sprites 类似...
- 渲染不可遮挡的几何体(包括 Sprite){"Queue"= "Geometry"}
- 渲染可遮挡几何体 {"Queue"= "Geometry+1"}
严格来说,如果遮挡物( Sprite )始终透明,则它只需要渲染到深度 (Z) 缓冲区。
关于unity3d - 在 Unity 中使用 Sprite mask 3D 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63367443/