【问题标题】:Create an Unity transparent shader that hides itself创建一个隐藏自身的 Unity 透明着色器
【发布时间】:2023-03-22 06:05:01
【问题描述】:

我的着色器代码是:

Shader "Custom/Transparent" {
     Properties{
         _Color("Main Color", Color) = (1,1,1,1)
         _MainTex("Base (RGB) Trans (A)", 2D) = "white" {}
     }
     SubShader{
         Tags {"RenderType" = "Transparent" "Queue" = "Transparent" }
         Blend SrcAlpha OneMinusSrcAlpha
         ZTest Always
         Pass {
             ColorMask 0
         }

         UsePass "Transparent/Diffuse/FORWARD"
     }
     Fallback "Transparent/VertexLit"
 }

我只能得到这个结果:

手指指向下方:

我真正想要实现的是: 所以手是透明的,但它不会只显示它背后的物体。我能做什么?

编辑 1: 我尝试将“ZWrite”更改为“On”并重新启动 Unity,但结果相同,手是 Oculus Hands。特别是问题是我有“ZTest Always”,当我删除它时,它已经工作了,但我还需要在固体物体之间可以看到幽灵般的手,所以我不能删除那部分

【问题讨论】:

    标签: unity3d shader transparency shaderlab


    【解决方案1】:

    为此,您需要通过将 ZWrite 选项调整为“关闭”来启用深度缓冲区写入:

    Pass {
             ZWrite On
             ColorMask 0
         }
    

    您可以在此处找到有关该主题的更多阅读内容

    https://docs.unity3d.com/2020.1/Documentation/Manual/SL-CullAndDepth.html

    【讨论】:

    • 我试过了,将“ZWrite”更改为“On”并重新启动 Unity,在编辑器中仍然出现相同的情况,我应该做些什么吗?
    • 我发现了问题,将“ZWrite On”设置为已经有效,但我还必须删除“ZTest Always”,我需要它,因为它会产生通过固体物体可见手的效果, 但是如果我把它放在 Always 中它会取消 ZWrite 的效果
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多