Files
3d-qiaozha/Assets/Fresnel.shader
2026-03-10 10:07:11 +08:00

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
}
}
}