50 lines
1.7 KiB
Plaintext
50 lines
1.7 KiB
Plaintext
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
|
|
}
|
|
}
|
|
} |