diff options
| author | yum <yum.food.vr@gmail.com> | 2026-01-20 23:30:08 -0800 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2026-01-20 23:30:08 -0800 |
| commit | c9342de5bd708d309cd0df1e65fe668ecbb9a16a (patch) | |
| tree | 38a76d878f93dc2d3ca18a957b2929bac7aca433 /yum_pbr.cginc | |
| parent | a54b415ab89302cf1f74f78360595ec0eff8fc7b (diff) | |
Fur: add depth-based ao
Diffstat (limited to 'yum_pbr.cginc')
| -rw-r--r-- | yum_pbr.cginc | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/yum_pbr.cginc b/yum_pbr.cginc index ef07553..a9e65d6 100644 --- a/yum_pbr.cginc +++ b/yum_pbr.cginc @@ -137,14 +137,25 @@ void applySeaFoam(v2f i, inout YumPbr pbr) { } #endif -YumPbr GetYumPbr(v2f i, f2f f, float3x3 tangentToWorld) { - YumPbr result = (YumPbr)0; - +// Returns fur thickness on [0, 1], 0 = no fur, 1 = max fur. +float FurClip(v2f i, f2f f, inout YumPbr result) { #if defined(_FUR) float fur_layer = i.vertexLight.w; - float fur_thickness = _Fur_Heightmap.SampleBias(trilinear_aniso4_repeat_s, i.uv01.xy * _Fur_Heightmap_ST.xy, _Fur_Heightmap_Mip_Bias).r; + float2 fur_uv = i.uv01.xy * _Fur_Heightmap_ST.xy; + float fur_thickness = _Fur_Heightmap.SampleBias( + trilinear_aniso4_repeat_s, fur_uv, + _Fur_Heightmap_Mip_Bias).r; clip(fur_thickness - fur_layer / _Fur_Layers); + return fur_thickness; +#else + return 0; #endif +} + +YumPbr GetYumPbr(v2f i, f2f f, float3x3 tangentToWorld) { + YumPbr result = (YumPbr)0; + + float fur_thickness = FurClip(i, f, result); float2 raw_uv = i.uv01.xy; #if defined(_UV_DOMAIN_WARPING) @@ -246,6 +257,10 @@ YumPbr GetYumPbr(v2f i, f2f f, float3x3 tangentToWorld) { result.ao = 1; #endif +#if defined(_FUR) + result.ao = lerp(result.ao, 0, fur_thickness * _Fur_AO_Strength); +#endif + applyDecals(i, result.albedo, normal_tangent, result.metallic, result.smoothness, result.emission); const float min_roughness_perceptual = 0.045f; result.smoothness = min(1.0f - min_roughness_perceptual, result.smoothness); |
