From 699da7b756aec0d361c4a6d84fa41e8183ef1d12 Mon Sep 17 00:00:00 2001 From: yum Date: Wed, 28 Aug 2024 14:29:23 -0700 Subject: Add second HSV slot Helps with animation. --- Editor/tooner.cs | 76 ++++++++++++++++++++++++++------------------------- feature_macros.cginc | 3 +- globals.cginc | 23 +++++++++++----- tooner.shader | 19 +++++++++---- tooner_lighting.cginc | 55 +++++++++++++++++++++++++------------ 5 files changed, 108 insertions(+), 68 deletions(-) diff --git a/Editor/tooner.cs b/Editor/tooner.cs index 8d4221a..f35090d 100644 --- a/Editor/tooner.cs +++ b/Editor/tooner.cs @@ -789,43 +789,45 @@ public class ToonerGUI : ShaderGUI { void DoHSV() { MaterialProperty bc; - bc = FindProperty("_HSV_Enabled"); - bool enabled = bc.floatValue > 1E-6; - EditorGUI.BeginChangeCheck(); - enabled = EditorGUILayout.Toggle("Enable", enabled); - EditorGUI.EndChangeCheck(); - bc.floatValue = enabled ? 1.0f : 0.0f; - - SetKeyword("_HSV", enabled); - - if (enabled) { - bc = FindProperty("_HSV_Mask"); - editor.TexturePropertySingleLine( - MakeLabel(bc, "Mask"), - bc); - - if (bc.textureValue) { - bc = FindProperty("_HSV_Mask_Invert"); - enabled = bc.floatValue > 1E-6; - EditorGUI.BeginChangeCheck(); - enabled = EditorGUILayout.Toggle("Invert", enabled); - EditorGUI.EndChangeCheck(); - bc.floatValue = enabled ? 1.0f : 0.0f; - } - - bc = FindProperty("_HSV_Hue_Shift"); - editor.RangeProperty( - bc, - "Hue shift"); - bc = FindProperty("_HSV_Sat_Shift"); - editor.RangeProperty( - bc, - "Saturation shift"); - bc = FindProperty("_HSV_Val_Shift"); - editor.RangeProperty( - bc, - "Value shift"); - } + for (int i = 0; i < 2; i++) { + bc = FindProperty($"_HSV{i}_Enabled"); + bool enabled = bc.floatValue > 1E-6; + EditorGUI.BeginChangeCheck(); + enabled = EditorGUILayout.Toggle($"Enable slot {i}", enabled); + EditorGUI.EndChangeCheck(); + bc.floatValue = enabled ? 1.0f : 0.0f; + + SetKeyword($"_HSV{i}", enabled); + + if (enabled) { + bc = FindProperty($"_HSV{i}_Mask"); + editor.TexturePropertySingleLine( + MakeLabel(bc, "Mask"), + bc); + + if (bc.textureValue) { + bc = FindProperty($"_HSV{i}_Mask_Invert"); + enabled = bc.floatValue > 1E-6; + EditorGUI.BeginChangeCheck(); + enabled = EditorGUILayout.Toggle("Invert", enabled); + EditorGUI.EndChangeCheck(); + bc.floatValue = enabled ? 1.0f : 0.0f; + } + + bc = FindProperty($"_HSV{i}_Hue_Shift"); + editor.RangeProperty( + bc, + "Hue shift"); + bc = FindProperty($"_HSV{i}_Sat_Shift"); + editor.RangeProperty( + bc, + "Saturation shift"); + bc = FindProperty($"_HSV{i}_Val_Shift"); + editor.RangeProperty( + bc, + "Value shift"); + } + } } void DoClones() { diff --git a/feature_macros.cginc b/feature_macros.cginc index 2afe253..2cd9965 100644 --- a/feature_macros.cginc +++ b/feature_macros.cginc @@ -50,7 +50,8 @@ #pragma shader_feature_local _ _RIM_LIGHTING3_SAMPLER_REPEAT #pragma shader_feature_local _ _RIM_LIGHTING3_SAMPLER_CLAMP #pragma shader_feature_local _ _OKLAB -#pragma shader_feature_local _ _HSV +#pragma shader_feature_local _ _HSV0 +#pragma shader_feature_local _ _HSV1 #pragma shader_feature_local _ _CLONES #pragma shader_feature_local _ _PBR_OVERLAY0 #pragma shader_feature_local _ _PBR_OVERLAY0_BASECOLOR_MAP diff --git a/globals.cginc b/globals.cginc index 9702a65..c09bf04 100644 --- a/globals.cginc +++ b/globals.cginc @@ -477,13 +477,22 @@ float _OKLAB_Chroma_Shift; float _OKLAB_Hue_Shift; #endif -#if defined(_HSV) -float _HSV_Enabled; -texture2D _HSV_Mask; -float _HSV_Mask_Invert; -float _HSV_Hue_Shift; -float _HSV_Sat_Shift; -float _HSV_Val_Shift; +#if defined(_HSV0) +float _HSV0_Enabled; +texture2D _HSV0_Mask; +float _HSV0_Mask_Invert; +float _HSV0_Hue_Shift; +float _HSV0_Sat_Shift; +float _HSV0_Val_Shift; +#endif + +#if defined(_HSV1) +float _HSV1_Enabled; +texture2D _HSV1_Mask; +float _HSV1_Mask_Invert; +float _HSV1_Hue_Shift; +float _HSV1_Sat_Shift; +float _HSV1_Val_Shift; #endif #if defined(_CLONES) diff --git a/tooner.shader b/tooner.shader index dbc4ed7..fefff33 100644 --- a/tooner.shader +++ b/tooner.shader @@ -362,12 +362,19 @@ Shader "yum_food/tooner" _OKLAB_Chroma_Shift("OKLAB chroma shift", Range(-0.37, 0.37)) = 0.0 _OKLAB_Hue_Shift("OKLAB hue shift", Range(0, 6.283185307)) = 0.0 - _HSV_Enabled("Enable HSV", Float) = 0.0 - _HSV_Mask("Mask", 2D) = "white" {} - _HSV_Mask_Invert("Mask invert", Float) = 0.0 - _HSV_Hue_Shift("HSV hue shift", Range(0.0, 1.0)) = 0.0 - _HSV_Sat_Shift("HSV saturation shift", Range(-1.0, 1.0)) = 0.0 - _HSV_Val_Shift("HSV value shift", Range(-1.0, 1.0)) = 0.0 + _HSV0_Enabled("Enable HSV", Float) = 0.0 + _HSV0_Mask("Mask", 2D) = "white" {} + _HSV0_Mask_Invert("Mask invert", Float) = 0.0 + _HSV0_Hue_Shift("HSV hue shift", Range(0.0, 1.0)) = 0.0 + _HSV0_Sat_Shift("HSV saturation shift", Range(-1.0, 1.0)) = 0.0 + _HSV0_Val_Shift("HSV value shift", Range(-1.0, 1.0)) = 0.0 + + _HSV1_Enabled("Enable HSV", Float) = 0.0 + _HSV1_Mask("Mask", 2D) = "white" {} + _HSV1_Mask_Invert("Mask invert", Float) = 0.0 + _HSV1_Hue_Shift("HSV hue shift", Range(0.0, 1.0)) = 0.0 + _HSV1_Sat_Shift("HSV saturation shift", Range(-1.0, 1.0)) = 0.0 + _HSV1_Val_Shift("HSV value shift", Range(-1.0, 1.0)) = 0.0 _Clones_Enabled("Enable clones", Float) = 0.0 _Clones_Count("Clones count", Range(0,16)) = 0.0 diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc index a2a3269..7d8ec72 100644 --- a/tooner_lighting.cginc +++ b/tooner_lighting.cginc @@ -1768,24 +1768,45 @@ float4 effect(inout v2f i) } #endif -#if defined(_HSV) - // Do hue shift in perceptually uniform color space so it doesn't look like - // shit. - float hsv_mask = _HSV_Mask.SampleBias(linear_repeat_s, i.uv0, _Global_Sample_Bias); - if (_HSV_Mask_Invert) { - hsv_mask = 1 - hsv_mask; +#if defined(_HSV0) + { + float hsv_mask = _HSV0_Mask.SampleBias(linear_repeat_s, i.uv0, _Global_Sample_Bias); + if (_HSV0_Mask_Invert) { + hsv_mask = 1 - hsv_mask; + } + if (hsv_mask > 0.01 && + (_HSV0_Hue_Shift > 1E-6 || + abs(_HSV0_Sat_Shift) > 1E-6 || + abs(_HSV0_Val_Shift) > 1E-6)) { + float3 c = albedo.rgb; + c = RGBtoHSV(c); + c += float3(_HSV0_Hue_Shift, _HSV0_Sat_Shift, _HSV0_Val_Shift); + c.x = glsl_mod(c.x, 1.0); + c.yz = saturate(c.yz); + c = HSVtoRGB(c); + albedo.rgb = c; + } } - if (hsv_mask > 0.01 && - (_HSV_Hue_Shift > 1E-6 || - abs(_HSV_Sat_Shift) > 1E-6 || - abs(_HSV_Val_Shift) > 1E-6)) { - float3 c = albedo.rgb; - c = RGBtoHSV(c); - c += float3(_HSV_Hue_Shift, _HSV_Sat_Shift, _HSV_Val_Shift); - c.x = glsl_mod(c.x, 1.0); - c.yz = saturate(c.yz); - c = HSVtoRGB(c); - albedo.rgb = c; +#endif + +#if defined(_HSV1) + { + float hsv_mask = _HSV1_Mask.SampleBias(linear_repeat_s, i.uv0, _Global_Sample_Bias); + if (_HSV1_Mask_Invert) { + hsv_mask = 1 - hsv_mask; + } + if (hsv_mask > 0.01 && + (_HSV1_Hue_Shift > 1E-6 || + abs(_HSV1_Sat_Shift) > 1E-6 || + abs(_HSV1_Val_Shift) > 1E-6)) { + float3 c = albedo.rgb; + c = RGBtoHSV(c); + c += float3(_HSV1_Hue_Shift, _HSV1_Sat_Shift, _HSV1_Val_Shift); + c.x = glsl_mod(c.x, 1.0); + c.yz = saturate(c.yz); + c = HSVtoRGB(c); + albedo.rgb = c; + } } #endif -- cgit v1.2.3