diff options
| -rw-r--r-- | 2ner.shader | 45 | ||||
| -rw-r--r-- | decals.cginc | 4 | ||||
| -rw-r--r-- | features.cginc | 18 | ||||
| -rw-r--r-- | globals.cginc | 27 | ||||
| -rw-r--r-- | yum_pbr.cginc | 56 |
5 files changed, 146 insertions, 4 deletions
diff --git a/2ner.shader b/2ner.shader index d395abf..c66f470 100644 --- a/2ner.shader +++ b/2ner.shader @@ -971,6 +971,51 @@ Shader "yum_food/2ner" [HideInInspector] m_end_Gradient_Normals_0("Gradient 0", Float) = 0 //endex + + //ifex _Gradient_Normals_1_Vertical_Enabled==0 + [HideInInspector] m_start_Gradient_Normals_1("Vertical displacement gradient 1", Float) = 0 + [ThryToggle(_GRADIENT_NORMALS_1_VERTICAL)] _Gradient_Normals_1_Vertical_Enabled("Enable", Float) = 0 + _Gradient_Normals_1_Vertical("(dfy/dx, dfy/dz)", 2D) = "black" {} + + //ifex _Gradient_Normals_1_Horizontal_Enabled==0 + [HideInInspector] m_start_Gradient_Normals_1_Horizontal("Horizontal displacement gradient", Float) = 0 + [ThryToggle(_GRADIENT_NORMALS_1_HORIZONTAL)] _Gradient_Normals_1_Horizontal_Enabled("Enable", Float) = 0 + _Gradient_Normals_1_Horizontal("(dfx/dx, dfz/dz)", 2D) = "black" {} + [HideInInspector] m_end_Gradient_Normals_1_Horizontal("Horizontal displacement gradient", Float) = 0 + //endex + + [HideInInspector] m_end_Gradient_Normals_1("Gradient 1", Float) = 0 + //endex + + //ifex _Gradient_Normals_2_Vertical_Enabled==0 + [HideInInspector] m_start_Gradient_Normals_2("Vertical displacement gradient 2", Float) = 0 + [ThryToggle(_GRADIENT_NORMALS_2_VERTICAL)] _Gradient_Normals_2_Vertical_Enabled("Enable", Float) = 0 + _Gradient_Normals_2_Vertical("(dfy/dx, dfy/dz)", 2D) = "black" {} + + //ifex _Gradient_Normals_2_Horizontal_Enabled==0 + [HideInInspector] m_start_Gradient_Normals_2_Horizontal("Horizontal displacement gradient", Float) = 0 + [ThryToggle(_GRADIENT_NORMALS_2_HORIZONTAL)] _Gradient_Normals_2_Horizontal_Enabled("Enable", Float) = 0 + _Gradient_Normals_2_Horizontal("(dfx/dx, dfz/dz)", 2D) = "black" {} + [HideInInspector] m_end_Gradient_Normals_2_Horizontal("Horizontal displacement gradient", Float) = 0 + //endex + + [HideInInspector] m_end_Gradient_Normals_2("Gradient 2", Float) = 0 + //endex + + //ifex _Gradient_Normals_3_Vertical_Enabled==0 + [HideInInspector] m_start_Gradient_Normals_3("Vertical displacement gradient 3", Float) = 0 + [ThryToggle(_GRADIENT_NORMALS_3_VERTICAL)] _Gradient_Normals_3_Vertical_Enabled("Enable", Float) = 0 + _Gradient_Normals_3_Vertical("(dfy/dx, dfy/dz)", 2D) = "black" {} + + //ifex _Gradient_Normals_3_Horizontal_Enabled==0 + [HideInInspector] m_start_Gradient_Normals_3_Horizontal("Horizontal displacement gradient", Float) = 0 + [ThryToggle(_GRADIENT_NORMALS_3_HORIZONTAL)] _Gradient_Normals_3_Horizontal_Enabled("Enable", Float) = 0 + _Gradient_Normals_3_Horizontal("(dfx/dx, dfz/dz)", 2D) = "black" {} + [HideInInspector] m_end_Gradient_Normals_3_Horizontal("Horizontal displacement gradient", Float) = 0 + //endex + + [HideInInspector] m_end_Gradient_Normals_3("Gradient 3", Float) = 0 + //endex [HideInInspector] m_end_Gradient_Normals("Gradient Normals", Float) = 0 //endex diff --git a/decals.cginc b/decals.cginc index f396b69..8311b4a 100644 --- a/decals.cginc +++ b/decals.cginc @@ -100,12 +100,8 @@ float4 getDecalColor(DecalParams params, float2 uv) { // The fwidth+smoothstep anti-aliases the glyph outline. See
// "Noise is Beautiful" by Gustavson around page 34 for an
// explanation of this trick.
-#if 1
float step_wd = fwidth(sd) * 0.5;
sd = smoothstep(params.sdf_threshold - step_wd, params.sdf_threshold + step_wd, sd);
-#else
- sd = step(params.sdf_threshold, sd);
-#endif
return params.color * sd;
}
diff --git a/features.cginc b/features.cginc index 54d492b..b090113 100644 --- a/features.cginc +++ b/features.cginc @@ -249,6 +249,24 @@ //ifex _Gradient_Normals_0_Horizontal_Enabled==0 #pragma shader_feature_local _GRADIENT_NORMALS_0_HORIZONTAL //endex +//ifex _Gradient_Normals_1_Vertical_Enabled==0 +#pragma shader_feature_local _GRADIENT_NORMALS_1_VERTICAL +//endex +//ifex _Gradient_Normals_1_Horizontal_Enabled==0 +#pragma shader_feature_local _GRADIENT_NORMALS_1_HORIZONTAL +//endex +//ifex _Gradient_Normals_2_Vertical_Enabled==0 +#pragma shader_feature_local _GRADIENT_NORMALS_2_VERTICAL +//endex +//ifex _Gradient_Normals_2_Horizontal_Enabled==0 +#pragma shader_feature_local _GRADIENT_NORMALS_2_HORIZONTAL +//endex +//ifex _Gradient_Normals_3_Vertical_Enabled==0 +#pragma shader_feature_local _GRADIENT_NORMALS_3_VERTICAL +//endex +//ifex _Gradient_Normals_3_Horizontal_Enabled==0 +#pragma shader_feature_local _GRADIENT_NORMALS_3_HORIZONTAL +//endex //ifex _3D_SDF_Enabled==0 #pragma shader_feature_local _3D_SDF diff --git a/globals.cginc b/globals.cginc index 65dea1b..2b65fc0 100644 --- a/globals.cginc +++ b/globals.cginc @@ -342,6 +342,33 @@ texture2D _Gradient_Normals_0_Horizontal; float4 _Gradient_Normals_0_Horizontal_ST;
#endif
+#if defined(_GRADIENT_NORMALS_1_VERTICAL)
+texture2D _Gradient_Normals_1_Vertical;
+float4 _Gradient_Normals_1_Vertical_ST;
+#endif
+#if defined(_GRADIENT_NORMALS_1_HORIZONTAL)
+texture2D _Gradient_Normals_1_Horizontal;
+float4 _Gradient_Normals_1_Horizontal_ST;
+#endif
+
+#if defined(_GRADIENT_NORMALS_2_VERTICAL)
+texture2D _Gradient_Normals_2_Vertical;
+float4 _Gradient_Normals_2_Vertical_ST;
+#endif
+#if defined(_GRADIENT_NORMALS_2_HORIZONTAL)
+texture2D _Gradient_Normals_2_Horizontal;
+float4 _Gradient_Normals_2_Horizontal_ST;
+#endif
+
+#if defined(_GRADIENT_NORMALS_3_VERTICAL)
+texture2D _Gradient_Normals_3_Vertical;
+float4 _Gradient_Normals_3_Vertical_ST;
+#endif
+#if defined(_GRADIENT_NORMALS_3_HORIZONTAL)
+texture2D _Gradient_Normals_3_Horizontal;
+float4 _Gradient_Normals_3_Horizontal_ST;
+#endif
+
#if defined(_VERTEX_DOMAIN_WARPING)
texture3D _Vertex_Domain_Warping_Noise;
float _Vertex_Domain_Warping_Strength;
diff --git a/yum_pbr.cginc b/yum_pbr.cginc index cbcac8f..ec5bedb 100644 --- a/yum_pbr.cginc +++ b/yum_pbr.cginc @@ -17,6 +17,14 @@ void propagateRoughness(in float smoothness, out float roughness_perceptual, out roughness = roughness_perceptual * roughness_perceptual; } +// Shitty hacky filtering, not in any way robust or mathematically sound. +void filterGradient(v2f i, inout float2 g) +{ + float3 normal = normalize(float3(-g.x, 1.0f, -g.y)); + float dn = length(fwidth(normal)); + g *= saturate(0.05 / dn); +} + #if defined(_GRADIENT_NORMALS) void applyGradientNormals(v2f i, inout YumPbr pbr) { float2 uv = i.uv01.xy; @@ -24,6 +32,7 @@ void applyGradientNormals(v2f i, inout YumPbr pbr) { // Math lifted from "Ocean waves simulation with Fast Fourier transform" by // Jump Trajectory. float2 gradient = 0; + #if defined(_GRADIENT_NORMALS_0_VERTICAL) float2 g0_uv = uv * _Gradient_Normals_0_Vertical_ST.xy; float2 g0_dfy = _Gradient_Normals_0_Vertical.SampleLevel(bilinear_repeat_s, g0_uv, 0).rg; @@ -34,11 +43,58 @@ void applyGradientNormals(v2f i, inout YumPbr pbr) { g0_dfy[0] / (1 + g0_dfxz[0]), g0_dfy[1] / (1 + g0_dfxz[1]) ); + filterGradient(i, g0); #endif // _GRADIENT_NORMALS_0_HORIZONTAL gradient += g0; #endif // _GRADIENT_NORMALS_0_VERTICAL +#if defined(_GRADIENT_NORMALS_1_VERTICAL) + float2 g1_uv = uv * _Gradient_Normals_1_Vertical_ST.xy; + float2 g1_dfy = _Gradient_Normals_1_Vertical.SampleLevel(bilinear_repeat_s, g1_uv, 0).rg; + float2 g1 = g1_dfy; +#if defined(_GRADIENT_NORMALS_1_HORIZONTAL) + float2 g1_dfxz = _Gradient_Normals_1_Horizontal.SampleLevel(bilinear_repeat_s, g1_uv, 0).rg; + g1 = float2( + g1_dfy[0] / (1 + g1_dfxz[0]), + g1_dfy[1] / (1 + g1_dfxz[1]) + ); + filterGradient(i, g1); +#endif // _GRADIENT_NORMALS_1_HORIZONTAL + gradient += g1; +#endif // _GRADIENT_NORMALS_1_VERTICAL + +#if defined(_GRADIENT_NORMALS_2_VERTICAL) + float2 g2_uv = uv * _Gradient_Normals_2_Vertical_ST.xy; + float2 g2_dfy = _Gradient_Normals_2_Vertical.SampleLevel(bilinear_repeat_s, g2_uv, 0).rg; + float2 g2 = g2_dfy; +#if defined(_GRADIENT_NORMALS_2_HORIZONTAL) + float2 g2_dfxz = _Gradient_Normals_2_Horizontal.SampleLevel(bilinear_repeat_s, g2_uv, 0).rg; + g2 = float2( + g2_dfy[0] / (1 + g2_dfxz[0]), + g2_dfy[1] / (1 + g2_dfxz[1]) + ); +#endif // _GRADIENT_NORMALS_2_HORIZONTAL + gradient += g2; +#endif // _GRADIENT_NORMALS_2_VERTICAL + +#if defined(_GRADIENT_NORMALS_3_VERTICAL) + float2 g3_uv = uv * _Gradient_Normals_3_Vertical_ST.xy; + float2 g3_dfy = _Gradient_Normals_3_Vertical.SampleLevel(bilinear_repeat_s, g3_uv, 0).rg; + float2 g3 = g3_dfy; +#if defined(_GRADIENT_NORMALS_3_HORIZONTAL) + float2 g3_dfxz = _Gradient_Normals_3_Horizontal.SampleLevel(bilinear_repeat_s, g3_uv, 0).rg; + g3 = float2( + g3_dfy[0] / (1 + g3_dfxz[0]), + g3_dfy[1] / (1 + g3_dfxz[1]) + ); + filterGradient(i, g2); +#endif // _GRADIENT_NORMALS_3_HORIZONTAL + + gradient += g3; +#endif // _GRADIENT_NORMALS_3_VERTICAL + float3 gradient_normal = normalize(float3(-gradient.x, 1.0f, -gradient.y)); + pbr.normal = gradient_normal; } #endif |
