summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2024-09-07 03:15:44 -0700
committeryum <yum.food.vr@gmail.com>2024-09-07 03:16:28 -0700
commit489fadcbd2cff45e0f6e38eefb0d9d6766b701bb (patch)
tree6c5e275786329615a0907c4cbc549ff472852515
parent2cf50223c6a88a6cbea64e3128c7b847dba1f8f2 (diff)
add a bunch of parameters to rorschach gimmick
-rw-r--r--Editor/tooner.cs23
-rw-r--r--feature_macros.cginc1
-rw-r--r--globals.cginc6
-rw-r--r--rorschach.cginc25
-rw-r--r--tooner.shader8
-rw-r--r--tooner_lighting.cginc7
6 files changed, 65 insertions, 5 deletions
diff --git a/Editor/tooner.cs b/Editor/tooner.cs
index 97b0f1e..910098d 100644
--- a/Editor/tooner.cs
+++ b/Editor/tooner.cs
@@ -1448,6 +1448,29 @@ public class ToonerGUI : ShaderGUI {
editor.FloatProperty(bc, "Count (x)");
bc = FindProperty("_Rorschach_Count_Y");
editor.FloatProperty(bc, "Count (y)");
+ bc = FindProperty("_Rorschach_Center_Randomization");
+ editor.FloatProperty(bc, "Center randomization");
+ bc = FindProperty("_Rorschach_Radius");
+ editor.FloatProperty(bc, "Radius");
+ bc = FindProperty("_Rorschach_Emission_Strength");
+ editor.FloatProperty(bc, "Emission strength");
+ bc = FindProperty("_Rorschach_Speed");
+ editor.FloatProperty(bc, "Speed");
+ bc = FindProperty("_Rorschach_Mask");
+ editor.TexturePropertySingleLine(
+ MakeLabel(bc, "Mask"),
+ bc);
+ SetKeyword("_RORSCHACH_MASK", bc.textureValue);
+ if (bc.textureValue) {
+ EditorGUI.indentLevel += 1;
+ bc = FindProperty("_Rorschach_Mask_Invert");
+ enabled = bc.floatValue > 1E-6;
+ EditorGUI.BeginChangeCheck();
+ enabled = EditorGUILayout.Toggle("Invert", enabled);
+ EditorGUI.EndChangeCheck();
+ bc.floatValue = enabled ? 1.0f : 0.0f;
+ EditorGUI.indentLevel -= 1;
+ }
EditorGUI.indentLevel -= 1;
}
diff --git a/feature_macros.cginc b/feature_macros.cginc
index 8dca391..ad3af14 100644
--- a/feature_macros.cginc
+++ b/feature_macros.cginc
@@ -143,6 +143,7 @@
#pragma shader_feature_local _ _TROCHOID
#pragma shader_feature_local _ _FACE_ME_WORLD_Y
#pragma shader_feature_local _ _RORSCHACH
+#pragma shader_feature_local _ _RORSCHACH_MASK
#pragma shader_feature_local _ _CLEARCOAT
#pragma shader_feature_local _ _CLEARCOAT_MASK
#pragma shader_feature_local _ _CLEARCOAT_MASK2
diff --git a/globals.cginc b/globals.cginc
index c1f142a..7e7c8f7 100644
--- a/globals.cginc
+++ b/globals.cginc
@@ -599,6 +599,12 @@ float _FaceMeWorldY_Enable_Z;
float _Rorschach_Enable_Dynamic;
float _Rorschach_Count_X;
float _Rorschach_Count_Y;
+float _Rorschach_Center_Randomization;
+float _Rorschach_Radius;
+float _Rorschach_Emission_Strength;
+float _Rorschach_Speed;
+texture2D _Rorschach_Mask;
+float _Rorschach_Mask_Invert;
#endif
#endif
diff --git a/rorschach.cginc b/rorschach.cginc
index bfa550d..3c27494 100644
--- a/rorschach.cginc
+++ b/rorschach.cginc
@@ -14,10 +14,16 @@ struct RorschachPBR {
float map_sdf(float3 p, float2 e, float3 period)
{
- float r = 1 * min(period.x, min(period.y, period.z));
- float st = sin(_Time[1] * e.y * e.y + e.x * 3.14159265 * 2);
+ float r = _Rorschach_Radius * min(period.x, min(period.y, period.z));
+ float st = sin(_Time[1] * _Rorschach_Speed * e.y * e.y + e.x * 3.14159265 * 2);
r *= st;
- return distance_from_sphere(p, r);
+ float3 o = float3(
+ (e.x - 0.5) * period.x,
+ (e.y - 0.5) * period.y,
+ 0);
+ //o *= _SinTime[1];
+ o *= _Rorschach_Center_Randomization;
+ return distance_from_sphere(p + o, r);
}
float map_dr(
@@ -74,6 +80,19 @@ RorschachPBR get_rorschach(v2f i)
d *= 3;
d = saturate(d);
+#if defined(_RORSCHACH_MASK)
+ float mask = _Rorschach_Mask.SampleLevel(linear_repeat_s, i.uv0.xy, /*lod=*/0);
+ mask = _Rorschach_Mask_Invert ? 1 - mask : mask;
+ float mask_e = 0.1;
+ // map mask onto [mask_e, 1 - mask_e]
+ mask = clamp(mask, mask_e, 1.0 - mask_e);
+ // map mask onto [0, 1 - 2 * mask_e]
+ mask -= mask_e;
+ // map mask onto [0, 1]
+ mask /= (1 - 2 * mask_e);
+ d *= mask;
+#endif
+
result.albedo.rgb = d;
return result;
diff --git a/tooner.shader b/tooner.shader
index a0b61ea..23151e1 100644
--- a/tooner.shader
+++ b/tooner.shader
@@ -3,7 +3,7 @@ Shader "yum_food/tooner"
// Unity fucking sucks ass and sometimes incorrectly uses an old cached
// version of the shader. Bump the nonce below to encourage it to use the
// current version.
- // Build nonce: 0
+ // Build nonce: 8
Properties
{
_Color("Base color", Color) = (0.8, 0.8, 0.8, 1)
@@ -474,6 +474,12 @@ Shader "yum_food/tooner"
_Rorschach_Enable_Dynamic("Enable rorschach gimmick", Float) = 0.0
_Rorschach_Count_X("Enable rorschach gimmick", Float) = 2
_Rorschach_Count_Y("Enable rorschach gimmick", Float) = 2
+ _Rorschach_Center_Randomization("Center randomization", Float) = 0
+ _Rorschach_Radius("Radius", Float) = 1
+ _Rorschach_Emission_Strength("Emission", Float) = 0
+ _Rorschach_Speed("Speed", Float) = 1
+ _Rorschach_Mask("Mask", 2D) = "white" {}
+ _Rorschach_Mask_Invert("Mask invert", Float) = 0
_Enable_SSR("Enable SSR", Float) = 0
_SSRStrength("SSR Strength", Float) = 1
diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc
index 3c2874b..5d73b47 100644
--- a/tooner_lighting.cginc
+++ b/tooner_lighting.cginc
@@ -1162,8 +1162,10 @@ float4 effect(inout v2f i)
#endif
#if defined(_RORSCHACH)
+ float4 rorschach_albedo = 0;
if (_Rorschach_Enable_Dynamic) {
- albedo = get_rorschach(i).albedo;
+ rorschach_albedo = get_rorschach(i).albedo;
+ albedo = rorschach_albedo;
}
#endif
@@ -1910,6 +1912,9 @@ float4 effect(inout v2f i)
_Global_Emission_Factor * _Emission1Multiplier;
}
#endif
+#if defined(_RORSCHACH)
+ result.rgb += rorschach_albedo.rgb * _Rorschach_Emission_Strength;
+#endif
#if defined(_EXPLODE) && defined(_AUDIOLINK)
if (AudioLinkIsAvailable() && _Explode_Phase > 1E-6) {
float4 al_color =