63 lines
1.8 KiB
HLSL
63 lines
1.8 KiB
HLSL
|
// 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;
|
||
|
}
|