From 4ed9ed040230f62a1144936df36afddf4a5208bb Mon Sep 17 00:00:00 2001 From: yum Date: Sun, 29 Mar 2026 16:10:25 -0700 Subject: Roughly integrate glitter into brdf --- brdf.cginc | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'brdf.cginc') diff --git a/brdf.cginc b/brdf.cginc index de222e7..8bd0061 100755 --- a/brdf.cginc +++ b/brdf.cginc @@ -101,7 +101,7 @@ float G_Estevez(float roughness, float NoL, float NoV) { return 1.0 / ((1.0 + lambda_l + lambda_v) * 4.0 * NoL * NoV); } -float4 brdf(Pbr pbr, LightData data, out BrdfData bd) { +float4 brdf(v2f i, Pbr pbr, LightData data, out BrdfData bd) { bd = (BrdfData)0; float3 specular = 0; float3 diffuse = 0; @@ -177,14 +177,27 @@ float4 brdf(Pbr pbr, LightData data, out BrdfData bd) { direct_diffuse *= remainder; direct_diffuse = max(0, direct_diffuse); diffuse += direct_diffuse; +#else + float3 direct_energy = energy_comp; + bd.direct_g = G_GGXSmith(pbr.roughness, data.direct.NoL, data.common.NoV); +#if defined(_GLITTER) + float2 glitter_uv = frac(i.uv01.xy); + float2x2 glitter_uv_J = uv_ellipsoid(mat2_from_cols(ddx(glitter_uv), ddy(glitter_uv))); + float3 H_tangent = mul(data.direct.H, transpose(pbr.tbn)); + const float glitter_filter_size = 0.7f; + float glitter_N = 8.0e5f * pow(10.0f, _Glitter_Amount * 6.0f - 2.0f); + bd.direct_f = F_Schlick(data.direct.LoH, 0.96f, 1.0f); + bd.direct_d = D_Kemppinen(H_tangent, pbr.roughness, _Glitter_Roughness, + glitter_uv, glitter_uv_J, glitter_N, glitter_filter_size); + direct_energy = 1.0f; #else bd.direct_f = F_Schlick(data.direct.LoH, f0_color, f90); bd.direct_d = D_GGX(pbr.roughness, data.direct.NoH); - bd.direct_g = G_GGXSmith(pbr.roughness, data.direct.NoL, data.common.NoV); +#endif float3 direct_specular = (bd.direct_d * bd.direct_g) * bd.direct_f; direct_specular *= data.direct.color * data.direct.NoL; - direct_specular *= energy_comp; + direct_specular *= direct_energy; direct_specular *= remainder; specular += direct_specular; -- cgit v1.2.3