This repository has been archived on 2024-08-16. You can view files and clone it, but cannot push or open issues or pull requests.
sota/RunningLateGame/Assets/Forst/CTI Runtime Components/CTI Runtime Components URP 14plus/Shaders/Includes/CTI URP SG BillboardFragment.hlsl

63 lines
1.8 KiB
HLSL
Raw Normal View History

2024-08-13 15:06:54 +00:00
// URP uses _half
void CTIBillboardFragment_half (
in float4 UV,
in real2 BlendCv,
in float4 ScreenPosRaw,
out real3 o_Albedo,
out real o_Alpha,
out real3 o_NormalTS,
out real o_Smoothness,
out real o_Occlusion,
out real o_Thickness
) {
real4 sampleA = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, UV.xy);
real4 n_sampleA = SAMPLE_TEXTURE2D(_BumpSpecMap, sampler_BumpSpecMap, UV.xy);
real blend = saturate(1.0 - BlendCv.x);
if (_BlendBB)
{
real4 sampleB = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, UV.zw);
real4 n_sampleB = SAMPLE_TEXTURE2D(_BumpSpecMap, sampler_BumpSpecMap, UV.zw);
// Dither
if (_BlendBBDithering)
{
float2 screenPos = floor( (ScreenPosRaw.xy / ScreenPosRaw.w) * _ScreenParams.xy);
real alphaClip = InterleavedGradientNoise(float4(screenPos, ScreenPosRaw.zw), (real)0.0);
// real alphaClip = GenerateHashedRandomFloat( asuint((int2)screenPos.xy) );
real blend = BlendCv.x;
blend = saturate( ((real)1.0 - blend - alphaClip) * (real)1000.0);
}
sampleA.a = sampleA.a * blend;
sampleB.a = sampleB.a * (1.0 - blend);
sampleA.rgb = sampleA.rgb * blend;
sampleA.rgb += sampleB.rgb * (1.0 - blend);
//n_sampleA = n_sampleA * blend + n_sampleB * (1.0 - blend); // Needs dithering!
n_sampleA = lerp(n_sampleA, n_sampleB, sampleB.aaaa);
sampleA.a += sampleB.a;
}
// Up is flipped!
n_sampleA.g = 1.0 - n_sampleA.g;
real3 normalTS = UnpackNormalAG(n_sampleA, _BumpScale);
// Alpha Leak
o_Occlusion = (sampleA.a <= _AlphaLeak) ? (real)1.0 : sampleA.a; // Eliminate alpha leaking into ao
// Add Color Variation
o_Albedo = lerp(sampleA.rgb, (sampleA.rgb + _HueVariation.rgb) * (real)0.5, (BlendCv.y * _HueVariation.a).xxx );
o_Alpha = sampleA.a;
o_NormalTS = normalTS;
o_Smoothness = n_sampleA.b * _Smoothness;
o_Thickness = n_sampleA.r * _ThicknessRemap;
}