【问题标题】:Unity3D Custom Shader Prevent Light Addition?Unity3D自定义着色器防止加光?
【发布时间】:2020-12-08 04:49:32
【问题描述】:

我使用 Unity 投影仪和自定义着色器来创建来自投影仪的自定义图像形状的效果。它工作得很好,除非投影仪的光与项目的另一个副本的光接触,光的颜色会结合在一起。我不希望这种情况发生,所以如果我为两台投影机指定绿色,并且光线相互接触,两台投影机的光线应该重叠并保持绿色。这是我的意思的图片:

我是着色器新手,在网上找到了这个着色器。任何有关如何修改着色器以实现我的目标的帮助将不胜感激。或者,如果有另一种方法可以实现这一目标,那就太好了。我尝试将每台投影仪放入一个图层,并告诉每个投影仪在投射光线时忽略该图层,但这没有效果。谢谢。

Shader "Custom/MyProjectorShader" {
Properties{
    _Color("Tint Color", Color) = (1,1,1,1)
    _Attenuation("Falloff", Range(0.0, 1.0)) = 1.0
    _ShadowTex("Cookie", 2D) = "gray" {}
}
Subshader{
    Tags{ "Queue" = "Transparent" }
    Pass{
        ZWrite Off
        ColorMask RGB
        Blend SrcAlpha One // Additive blending
        Offset -1, -1

        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #include "UnityCG.cginc"

        struct v2f {
            float4 uvShadow : TEXCOORD0;
            float4 pos : SV_POSITION;
        };

        float4x4 unity_Projector;
        float4x4 unity_ProjectorClip;

        v2f vert(float4 vertex : POSITION)
        {
            v2f o;
            o.pos = UnityObjectToClipPos(vertex);
            o.uvShadow = mul(unity_Projector, vertex);
            return o;
        }

        sampler2D _ShadowTex;
        fixed4 _Color;
        float _Attenuation;

        fixed4 frag(v2f i) : SV_Target
        {
            // Apply alpha mask
            fixed4 texCookie = tex2Dproj(_ShadowTex, UNITY_PROJ_COORD(i.uvShadow));
            fixed4 outColor = _Color * texCookie.a;
            // Attenuation
            float depth = i.uvShadow.z; // [-1 (near), 1 (far)]
            return outColor * clamp(1.0 - abs(depth) + _Attenuation, 0.0, 1.0);
        }
        ENDCG
    }
}
}

【问题讨论】:

    标签: unity3d shader


    【解决方案1】:
    Blend SrcAlpha OneMinusSrcAlpha
    

    与评论所说的不同,Blend One One 是常规的加法(线性减淡)混合模式。使用这种新的混合模式,您需要确保您的纹理也具有 Alpha 通道。

    https://docs.unity3d.com/Manual/SL-Blend.html

    【讨论】:

      【解决方案2】:

      Blend One OneMinusSrcAlpha 在这种情况下可能会更好地工作,因为它还可以避免剩余的边框切口。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-28
        • 2012-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多