Files
ToriaAssets/Imports/Beautify addon/Runtime/Resources/EdgeFusion/Shaders/EdgeFusionBlendPass.hlsl
T

52 lines
1.4 KiB
HLSL
Raw Normal View History

2026-08-13 16:49:22 +02:00
#ifndef EDGE_FUSION_BLEND_PASS_INCLUDED
#define EDGE_FUSION_BLEND_PASS_INCLUDED
#include "EdgeFusionBlendLibrary.hlsl"
float4 FragBlendEdges(EFVaryings i) : SV_Target
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
float2 uv = UnityStereoTransformScreenSpaceTex(i.texcoord);
float4 c0 = SampleColor(uv);
float2 uvSurfaceB;
float edgeFactor = FindEdgeNeighbour(uv, uvSurfaceB);
if (edgeFactor <= 0.0) return c0;
#if EDGE_FUSION_MSAA_EDGE_FIX
float2 dir = normalize(uvSurfaceB - uv) * _SrcColorTexture_TexelSize.xy * MSAA_FIX_POWER;
c0 = SampleColor(uv - dir);
float4 surf0 = SampleColor(uvSurfaceB + dir);
#else
float4 surf0 = SampleColor(uvSurfaceB);
#endif
float fallOff = 2;
// screen-edge "vignette" fade
float2 distUV = min(uv, 1.0 - uv);
float edgeFade = min(distUV.x, distUV.y);
float2 distUVB = min(uvSurfaceB, 1.0 - uvSurfaceB);
float edgeFadeB = min(distUVB.x, distUVB.y);
edgeFade = min(edgeFade, edgeFadeB);
edgeFade = 1 - smoothstep(0, 0.05, edgeFade);
fallOff += edgeFade * 4.0;
// avoid brightening shadows
float lumaBase = GetLuma(c0.rgb);
float invLuma2 = rcp(lumaBase * lumaBase + 1e-6);
fallOff += clamp( SHADOW_PROTECTION * invLuma2, 0, 16);
// apply falloff
float blendAmount = pow(edgeFactor, fallOff);
// blend
blendAmount *= GLOBAL_INTENSITY * 0.5;
float3 blended = ColorLerp(c0.rgb, surf0.rgb, blendAmount);
return float4(blended, c0.a);
}
#endif // EDGE_FUSION_BLEND_PASS_INCLUDED