summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--2ner.shader45
-rw-r--r--decals.cginc4
-rw-r--r--features.cginc18
-rw-r--r--globals.cginc27
-rw-r--r--yum_pbr.cginc56
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