Shader "Custom/EdgeFresnelAdd" { Properties{ _EdgeColor ("Edge Color", Color) = (1,0,0,1) _Intensity ("Intensity", Float) = 5 _Power ("Fresnel Power", Float) = 3 _Alpha ("Overall Alpha", Range(0,1)) = 1 } SubShader{ Tags{ "RenderPipeline"="UniversalRenderPipeline" "Queue"="Transparent" "RenderType"="Transparent" } Blend One One ZWrite Off ZTest LEqual Cull Back Pass{ Name "EdgeAdd" Tags{ "LightMode"="UniversalForward" } HLSLPROGRAM #pragma vertex vert #pragma fragment frag #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" CBUFFER_START(UnityPerMaterial) half4 _EdgeColor; half _Intensity,_Power,_Alpha; CBUFFER_END struct A{ float4 posOS:POSITION; float3 n:NORMAL; }; struct V{ float4 posHCS:SV_POSITION; float3 nWS:TEXCOORD0; float3 vWS:TEXCOORD1; }; V vert(A i){ V o; float3 pWS = TransformObjectToWorld(i.posOS.xyz); o.posHCS = TransformWorldToHClip(pWS); o.nWS = normalize(TransformObjectToWorldNormal(i.n)); o.vWS = normalize(_WorldSpaceCameraPos.xyz - pWS); return o; } half4 frag(V i):SV_Target{ half ndv = saturate(dot(normalize(i.nWS), normalize(i.vWS))); half fres = pow(1.0h - ndv, _Power); half3 glow = _EdgeColor.rgb * _Intensity * fres; return half4(glow, saturate(_Alpha * fres)); } ENDHLSL } } }