Shader "Custom/URP_Dissolve" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossiness ("Smoothness", Range(0,1)) = 0.5 _Metallic ("Metallic", Range(0,1)) = 0.0 _DissolveTexture("Dissolve Texture", 2D) = "white" {} _Amount("Amount", Range(0,1)) = 0 _DissolveColor ("Dissolve Color", Color) = (1,1,1,1) _DissolveColorAlpha ("Dissolve Color Alpha", Range(0,1)) = 0.0 } SubShader { Tags { "RenderType"="Opaque" } LOD 200 Cull Off Pass { Name "FORWARD" Tags { "LightMode" = "UniversalForward" } HLSLPROGRAM #pragma vertex vert #pragma fragment frag #pragma multi_compile_fog #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" struct Attributes { float4 positionOS : POSITION; float2 uv : TEXCOORD0; }; struct Varyings { float4 positionHCS : SV_POSITION; float2 uv : TEXCOORD0; float fogFactor : TEXCOORD1; }; CBUFFER_START(UnityPerMaterial) float4 _Color; float _Glossiness; float _Metallic; float4 _DissolveColor; float _DissolveColorAlpha; float _Amount; CBUFFER_END TEXTURE2D(_MainTex); SAMPLER(sampler_MainTex); TEXTURE2D(_DissolveTexture); SAMPLER(sampler_DissolveTexture); Varyings vert(Attributes IN) { Varyings OUT; OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz); OUT.uv = IN.uv; OUT.fogFactor = ComputeFogFactor(OUT.positionHCS.z / OUT.positionHCS.w); return OUT; } float4 frag(Varyings IN) : SV_Target { float dissolve_value = SAMPLE_TEXTURE2D(_DissolveTexture, sampler_DissolveTexture, IN.uv).r; clip(dissolve_value - _Amount); float4 albedo = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, IN.uv) * _Color; // Simple metallic/smoothness (not PBR, but for effect) float3 emission = _DissolveColor.rgb * step(dissolve_value - _Amount, _DissolveColorAlpha); float3 color = albedo.rgb + emission; float alpha = albedo.a; color = MixFog(color, IN.fogFactor); return float4(color, alpha); } ENDHLSL } } FallBack "Universal Forward" }