summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-x3ner.shader26
-rwxr-xr-xfeatures.cginc3
-rwxr-xr-xglobals.cginc12
-rwxr-xr-xpbr.cginc53
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
diff --git a/pbr.cginc b/pbr.cginc
index ecfd083..7973994 100755
--- a/pbr.cginc
+++ b/pbr.cginc
@@ -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);