diff options
| -rw-r--r-- | Editor/tooner.cs | 23 | ||||
| -rw-r--r-- | feature_macros.cginc | 1 | ||||
| -rw-r--r-- | globals.cginc | 6 | ||||
| -rw-r--r-- | rorschach.cginc | 25 | ||||
| -rw-r--r-- | tooner.shader | 8 | ||||
| -rw-r--r-- | tooner_lighting.cginc | 7 |
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 = |
