URP 溶解着色器

Shader "Custom/DissolveURP" {
    Properties {
        _MainTex ("Texture", 2D) = "white" {}
        _DissolveTex ("Dissolve Texture", 2D) = "white" {}
        _DissolveColor ("Dissolve Color", Color) = (1,1,1,1)
        _DissolveAmount ("Dissolve Amount", Range(0,1)) = 0.5
    }

    SubShader {
        Tags { "Queue"="Transparent" "RenderType"="Transparent" }

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

            struct appdata {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            sampler2D _MainTex;
            sampler2D _DissolveTex;
            float4 _DissolveColor;
            float _DissolveAmount;

            v2f vert (appdata v) {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                return o;
            }

            fixed4 frag (v2f i) : SV_Target {
                float4 tex = tex2D(_MainTex, i.uv);
                float4 dissolve = tex2D(_DissolveTex, i.uv);
                float4 dissolveColor = lerp(tex, _DissolveColor, dissolve.r * _DissolveAmount);
                dissolveColor.a = tex.a;
                return dissolveColor;
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
}

半卡通着色器

Shader "Custom/HalfToon" {
    Properties {
        _MainTex ("Texture", 2D) = "white" {}
        _Color ("Color", Color) = (1,1,1,1)
        _RampTex ("Ramp Texture", 2D) = "white" {}
        _ShadowColor ("Shadow Color", Color) = (0,0,0,1)
    }

    SubShader {
        Tags { "Queue"="Transparent" "RenderType"="Transparent" }

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

            struct appdata {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            sampler2D _MainTex;
            sampler2D _RampTex;
            float4 _Color;
            float4 _ShadowColor;

            v2f vert (appdata v) {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                return o;
            }

            fixed4 frag (v2f i) : SV_Target {
                float4 tex = tex2D(_MainTex, i.uv);
                float4 ramp = tex2D(_RampTex, float2(tex.r, 0.5));
                float4 color = _Color * tex;
                float4 shadow = _ShadowColor * (1 - ramp.r);
                return color + shadow;
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
}

使用说明:

  1. 将上述代码复制到 Unity 的 Shader 文件中。
  2. 将材质应用到游戏物体上,并根据需要调整材质属性。
  3. 运行游戏,即可查看效果。

注意:

  • 以上代码仅供参考,可以根据需要进行修改和调整。
  • 溶解着色器需要一个纹理作为溶解图,该纹理的灰度值将影响溶解效果。
  • 半卡通着色器需要一个纹理作为色阶图,该纹理的灰度值将影响阴影效果。
URP 溶解着色器和半卡通着色器代码示例

原文地址: https://www.cveoy.top/t/topic/obA0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录