summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2024-08-28 14:29:23 -0700
committeryum <yum.food.vr@gmail.com>2024-08-28 14:29:23 -0700
commit699da7b756aec0d361c4a6d84fa41e8183ef1d12 (patch)
tree39cdae51faea62904ac0a330074a3deb66484af0
parent6eaf7c8ec43d4d6ce5d2c67e9ef032f182fbfa25 (diff)
Add second HSV slot
Helps with animation.
-rw-r--r--Editor/tooner.cs76
-rw-r--r--feature_macros.cginc3
-rw-r--r--globals.cginc23
-rw-r--r--tooner.shader19
-rw-r--r--tooner_lighting.cginc55
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