diff options
| author | yum <yum.food.vr@gmail.com> | 2026-03-28 18:33:34 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2026-03-28 18:33:34 -0700 |
| commit | e2b73113001219b1b1e1debf5c8d86699c627951 (patch) | |
| tree | ea40b8877b1b101e328776af863f7b37ca6b2b6c | |
| parent | b7c4d1bf622f057cf8e88754a089157300818ae3 (diff) | |
Add more channels to burley tiling
| -rwxr-xr-x | 3ner.shader | 26 | ||||
| -rwxr-xr-x | features.cginc | 3 | ||||
| -rwxr-xr-x | globals.cginc | 12 | ||||
| -rwxr-xr-x | pbr.cginc | 53 |
4 files changed, 76 insertions, 18 deletions
diff --git a/3ner.shader b/3ner.shader index 9065554..18fc303 100755 --- a/3ner.shader +++ b/3ner.shader @@ -669,9 +669,33 @@ Shader "yum_food/3ner" [ThryToggle(_BURLEY_TILING)] _Burley_Tiling_Enabled("Enable", Float) = 0 _Burley_Tiling_Input_Scale("Input scale", Range(0, 1)) = 0.5 _Burley_Tiling_Output_Scale("Output scale", Range(0, 1)) = 0.5 - _Burley_Tiling_Blend_Gamma("Blend gamma", Range(0.1, 4)) = 1.0 + _Burley_Tiling_Blend_Gamma("Blend gamma", Range(0.1, 8)) = 2.0 _Burley_Tiling_Maintex("Base color", 2D) = "white" {} _Burley_Tiling_Maintex_LUT("Base color LUT", 2D) = "white" {} + + //ifex _Burley_Tiling_Smoothness_Enabled==0 + [HideInInspector] m_start_Burley_Tiling_Smoothness("Smoothness", Float) = 0 + [ThryToggle(_BURLEY_TILING_SMOOTHNESS)] _Burley_Tiling_Smoothness_Enabled("Enable", Float) = 0 + _Burley_Tiling_Smoothness_Map("Texture", 2D) = "white" {} + _Burley_Tiling_Smoothness_Map_LUT("LUT", 2D) = "white" {} + + //ifex _Burley_Tiling_Smoothness_Invert_Enabled==0 + [HideInInspector] m_start_Burley_Tiling_Smoothness_Invert("Invert", Float) = 0 + [ThryToggle(_BURLEY_TILING_SMOOTHNESS_INVERT)] _Burley_Tiling_Smoothness_Invert_Enabled("Enable", Float) = 0 + [HideInInspector] m_end_Burley_Tiling_Smoothness_Invert("Invert", Float) = 0 + //endex + [HideInInspector] m_end_Burley_Tiling_Smoothness("Smoothness", Float) = 0 + //endex + + //ifex _Burley_Tiling_Normal_Enabled==0 + [HideInInspector] m_start_Burley_Tiling_Normal("Normal", Float) = 0 + [ThryToggle(_BURLEY_TILING_NORMAL)] _Burley_Tiling_Normal_Enabled("Enable", Float) = 0 + _Burley_Tiling_Normal_Map("Texture", 2D) = "bump" {} + _Burley_Tiling_Normal_Map_LUT("LUT", 2D) = "white" {} + _Burley_Tiling_Normal_Strength("Strength", Range(0, 10)) = 1 + [HideInInspector] m_end_Burley_Tiling_Normal("Normal", Float) = 0 + //endex + [HideInInspector] m_end_Burley_Tiling("Burley Tiling", Float) = 0 //endex diff --git a/features.cginc b/features.cginc index b30fe8f..93cc8e2 100755 --- a/features.cginc +++ b/features.cginc @@ -238,6 +238,9 @@ //ifex _Burley_Tiling_Enabled==0 #pragma shader_feature_local _BURLEY_TILING +#pragma shader_feature_local _BURLEY_TILING_SMOOTHNESS +#pragma shader_feature_local _BURLEY_TILING_SMOOTHNESS_INVERT +#pragma shader_feature_local _BURLEY_TILING_NORMAL //endex #endif // __FEATURES_INC diff --git a/globals.cginc b/globals.cginc index cf9e97f..95d16ee 100755 --- a/globals.cginc +++ b/globals.cginc @@ -616,8 +616,18 @@ float _Burley_Tiling_Input_Scale; float _Burley_Tiling_Output_Scale; float _Burley_Tiling_Blend_Gamma; texture2D _Burley_Tiling_Maintex; -float4 _Burley_Tiling_Maintex_ST; texture2D _Burley_Tiling_Maintex_LUT; #endif // _BURLEY_TILING +#if defined(_BURLEY_TILING_SMOOTHNESS) +texture2D _Burley_Tiling_Smoothness_Map; +texture2D _Burley_Tiling_Smoothness_Map_LUT; +#endif // _BURLEY_TILING_SMOOTHNESS + +#if defined(_BURLEY_TILING_NORMAL) +texture2D _Burley_Tiling_Normal_Map; +texture2D _Burley_Tiling_Normal_Map_LUT; +float _Burley_Tiling_Normal_Strength; +#endif // _BURLEY_TILING_NORMAL + #endif // __GLOBALS_INC @@ -226,17 +226,17 @@ float3 burley_apply_soft_clipping(float3 gaussian_color, float3 weights) { return burley_soft_clipping_contrast(gaussian_color, w_hat); } -float3 burley_degaussianize(float3 gaussian_color) { +float3 burley_degaussianize(texture2D lut, float3 gaussian_color) { float2 uv_r = float2(gaussian_color.r, 0.5f); float2 uv_g = float2(gaussian_color.g, 0.5f); float2 uv_b = float2(gaussian_color.b, 0.5f); - float lut_r = _Burley_Tiling_Maintex_LUT.Sample(linear_clamp_s, uv_r).r; - float lut_g = _Burley_Tiling_Maintex_LUT.Sample(linear_clamp_s, uv_g).g; - float lut_b = _Burley_Tiling_Maintex_LUT.Sample(linear_clamp_s, uv_b).b; + float lut_r = lut.Sample(linear_clamp_s, uv_r).r; + float lut_g = lut.Sample(linear_clamp_s, uv_g).g; + float lut_b = lut.Sample(linear_clamp_s, uv_b).b; return srgb_to_linear(float3(lut_r, lut_g, lut_b)); } -float4 burley_sample_patch(float2 uv, float2 uv_dx, float2 uv_dy, float2 tri_vertex, +float4 burley_sample_patch(texture2D tex, float2 uv, float2 uv_dx, float2 uv_dy, float2 tri_vertex, float input_scale) { float3 cube_id = float3(tri_vertex.x, tri_vertex.y, -tri_vertex.x - tri_vertex.y); float3 tile_rand3 = hash33_fast(cube_id); @@ -262,15 +262,12 @@ float4 burley_sample_patch(float2 uv, float2 uv_dx, float2 uv_dy, float2 tri_ver // Finally, remap onto [0, 1]. local_uv += 0.5f; - float2 sample_uv = local_uv * _Burley_Tiling_Maintex_ST.xy + _Burley_Tiling_Maintex_ST.zw; - sample_dx *= _Burley_Tiling_Maintex_ST.xy; - sample_dy *= _Burley_Tiling_Maintex_ST.xy; - return _Burley_Tiling_Maintex.SampleGrad( - aniso4_trilinear_repeat_s, sample_uv, sample_dx, sample_dy); + return tex.SampleGrad( + aniso4_trilinear_repeat_s, local_uv, sample_dx, sample_dy); } #endif // _BURLEY_TILING -void apply_burley_tiling(v2f i, inout Pbr pbr) { +void apply_burley_tiling(v2f i, inout Pbr pbr, inout float3 normal_tangent) { #if defined(_BURLEY_TILING) // Center at 0. float2 uv = i.uv01.xy - 0.5; @@ -301,11 +298,35 @@ void apply_burley_tiling(v2f i, inout Pbr pbr) { float3 weights = burley_apply_blend_gamma(baryc, _Burley_Tiling_Blend_Gamma); float2 uv_dx = ddx(uv); float2 uv_dy = ddy(uv); - float4 patch_0 = burley_sample_patch(uv, uv_dx, uv_dy, vertex_0, input_scale); - float4 patch_1 = burley_sample_patch(uv, uv_dx, uv_dy, vertex_1, input_scale); - float4 patch_2 = burley_sample_patch(uv, uv_dx, uv_dy, vertex_2, input_scale); + + float4 patch_0 = burley_sample_patch(_Burley_Tiling_Maintex, uv, uv_dx, uv_dy, vertex_0, input_scale); + float4 patch_1 = burley_sample_patch(_Burley_Tiling_Maintex, uv, uv_dx, uv_dy, vertex_1, input_scale); + float4 patch_2 = burley_sample_patch(_Burley_Tiling_Maintex, uv, uv_dx, uv_dy, vertex_2, input_scale); float4 gaussian_blend = patch_0 * weights.x + patch_1 * weights.y + patch_2 * weights.z; - pbr.albedo.xyz = burley_degaussianize(burley_apply_soft_clipping(gaussian_blend.rgb, weights)); + pbr.albedo.xyz = burley_degaussianize(_Burley_Tiling_Maintex_LUT, burley_apply_soft_clipping(gaussian_blend.rgb, weights)); + +#if defined(_BURLEY_TILING_SMOOTHNESS) + float patch_0_smoothness = burley_sample_patch(_Burley_Tiling_Smoothness_Map, uv, uv_dx, uv_dy, vertex_0, input_scale); + float patch_1_smoothness = burley_sample_patch(_Burley_Tiling_Smoothness_Map, uv, uv_dx, uv_dy, vertex_1, input_scale); + float patch_2_smoothness = burley_sample_patch(_Burley_Tiling_Smoothness_Map, uv, uv_dx, uv_dy, vertex_2, input_scale); + float smoothness_blend = patch_0_smoothness * weights.x + patch_1_smoothness * weights.y + patch_2_smoothness * weights.z; +#if defined(_BURLEY_TILING_SMOOTHNESS_INVERT) + smoothness_blend = 1.0f - smoothness_blend; +#endif // _BURLEY_TILING_SMOOTHNESS_INVERT + pbr.smoothness = burley_degaussianize(_Burley_Tiling_Smoothness_Map_LUT, burley_apply_soft_clipping(smoothness_blend, weights)).r; +#endif // _BURLEY_TILING_SMOOTHNESS + +#if defined(_BURLEY_TILING_NORMAL) + // TODO whiteout blending? + float4 patch_0_normal = burley_sample_patch(_Burley_Tiling_Normal_Map, uv, uv_dx, uv_dy, vertex_0, input_scale); + float4 patch_1_normal = burley_sample_patch(_Burley_Tiling_Normal_Map, uv, uv_dx, uv_dy, vertex_1, input_scale); + float4 patch_2_normal = burley_sample_patch(_Burley_Tiling_Normal_Map, uv, uv_dx, uv_dy, vertex_2, input_scale); + float4 normal_blend = patch_0_normal * weights.x + patch_1_normal * weights.y + patch_2_normal * weights.z; + normal_tangent = burley_degaussianize(_Burley_Tiling_Normal_Map_LUT, burley_apply_soft_clipping(normal_blend.rgb, weights)); + normal_tangent.xy *= _Burley_Tiling_Normal_Strength; + normal_tangent = normalize(normal_tangent); +#endif // _BURLEY_TILING_NORMAL + #endif // _BURLEY_TILING } @@ -355,7 +376,7 @@ Pbr getPbr(v2f i) { apply_marble(i.worldPos, pbr.albedo.xyz); apply_kintsugi(i.worldPos, pbr.albedo.xyz, pbr.smoothness, pbr.metallic); apply_letter_grid(i, pbr); - apply_burley_tiling(i, pbr); + apply_burley_tiling(i, pbr, normal_tangent); applyDecals(i, pbr, normal_tangent); |
