diff options
| -rw-r--r-- | Editor/tooner.cs | 19 | ||||
| -rw-r--r-- | feature_macros.cginc | 8 | ||||
| -rw-r--r-- | globals.cginc | 8 | ||||
| -rw-r--r-- | tooner.shader | 10 | ||||
| -rw-r--r-- | tooner_lighting.cginc | 32 |
5 files changed, 71 insertions, 6 deletions
diff --git a/Editor/tooner.cs b/Editor/tooner.cs index 7610e5b..e0a8bfc 100644 --- a/Editor/tooner.cs +++ b/Editor/tooner.cs @@ -528,12 +528,31 @@ public class ToonerGUI : ShaderGUI { SetKeyword($"_RIM_LIGHTING{i}_MASK", bc.textureValue); if (bc.textureValue) { + EditorGUI.indentLevel += 1; + bc = FindProperty($"_Rim_Lighting{i}_Mask_Invert"); enabled = bc.floatValue > 1E-6; EditorGUI.BeginChangeCheck(); enabled = EditorGUILayout.Toggle("Invert mask", enabled); EditorGUI.EndChangeCheck(); bc.floatValue = enabled ? 1.0f : 0.0f; + + bc = FindProperty($"_Rim_Lighting{i}_Mask_UV_Select"); + editor.RangeProperty( + bc, + "UV channel"); + + bc = FindProperty($"_Rim_Lighting{i}_Mask_Sampler_Mode"); + SamplerMode sampler_mode = (SamplerMode) Math.Round(bc.floatValue); + sampler_mode = (SamplerMode) EditorGUILayout.EnumPopup( + MakeLabel("Sampler mode"), sampler_mode); + EditorGUI.EndChangeCheck(); + bc.floatValue = (int) sampler_mode; + + SetKeyword($"_RIM_LIGHTING{i}_SAMPLER_REPEAT", sampler_mode == SamplerMode.Repeat); + SetKeyword($"_RIM_LIGHTING{i}_SAMPLER_CLAMP", sampler_mode == SamplerMode.Clamp); + + EditorGUI.indentLevel -= 1; } EditorGUI.BeginChangeCheck(); diff --git a/feature_macros.cginc b/feature_macros.cginc index 2903d2b..8f15a6d 100644 --- a/feature_macros.cginc +++ b/feature_macros.cginc @@ -27,18 +27,26 @@ #pragma shader_feature_local _ _RIM_LIGHTING0_MASK #pragma shader_feature_local _ _RIM_LIGHTING0_GLITTER #pragma shader_feature_local _ _RIM_LIGHTING0_POLAR_MASK +#pragma shader_feature_local _ _RIM_LIGHTING0_SAMPLER_REPEAT +#pragma shader_feature_local _ _RIM_LIGHTING0_SAMPLER_CLAMP #pragma shader_feature_local _ _RIM_LIGHTING1 #pragma shader_feature_local _ _RIM_LIGHTING1_MASK #pragma shader_feature_local _ _RIM_LIGHTING1_GLITTER #pragma shader_feature_local _ _RIM_LIGHTING1_POLAR_MASK +#pragma shader_feature_local _ _RIM_LIGHTING1_SAMPLER_REPEAT +#pragma shader_feature_local _ _RIM_LIGHTING1_SAMPLER_CLAMP #pragma shader_feature_local _ _RIM_LIGHTING2 #pragma shader_feature_local _ _RIM_LIGHTING2_MASK #pragma shader_feature_local _ _RIM_LIGHTING2_GLITTER #pragma shader_feature_local _ _RIM_LIGHTING2_POLAR_MASK +#pragma shader_feature_local _ _RIM_LIGHTING2_SAMPLER_REPEAT +#pragma shader_feature_local _ _RIM_LIGHTING2_SAMPLER_CLAMP #pragma shader_feature_local _ _RIM_LIGHTING3 #pragma shader_feature_local _ _RIM_LIGHTING3_MASK #pragma shader_feature_local _ _RIM_LIGHTING3_GLITTER #pragma shader_feature_local _ _RIM_LIGHTING3_POLAR_MASK +#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 _ _CLONES #pragma shader_feature_local _ _PBR_OVERLAY0 diff --git a/globals.cginc b/globals.cginc index 497e52b..9a5a130 100644 --- a/globals.cginc +++ b/globals.cginc @@ -322,6 +322,8 @@ float _Rim_Lighting0_Mode; float3 _Rim_Lighting0_Color; texture2D _Rim_Lighting0_Mask; float _Rim_Lighting0_Mask_Invert; +float _Rim_Lighting0_Mask_UV_Select; +float _Rim_Lighting0_Mask_Sampler_Mode; float _Rim_Lighting0_Center; float _Rim_Lighting0_Power; float _Rim_Lighting0_Strength; @@ -347,6 +349,8 @@ float _Rim_Lighting1_Mode; float3 _Rim_Lighting1_Color; texture2D _Rim_Lighting1_Mask; float _Rim_Lighting1_Mask_Invert; +float _Rim_Lighting1_Mask_UV_Select; +float _Rim_Lighting1_Mask_Sampler_Mode; float _Rim_Lighting1_Center; float _Rim_Lighting1_Power; float _Rim_Lighting1_Strength; @@ -372,6 +376,8 @@ float _Rim_Lighting2_Mode; float3 _Rim_Lighting2_Color; texture2D _Rim_Lighting2_Mask; float _Rim_Lighting2_Mask_Invert; +float _Rim_Lighting2_Mask_UV_Select; +float _Rim_Lighting2_Mask_Sampler_Mode; float _Rim_Lighting2_Center; float _Rim_Lighting2_Power; float _Rim_Lighting2_Strength; @@ -397,6 +403,8 @@ float _Rim_Lighting3_Mode; float3 _Rim_Lighting3_Color; texture2D _Rim_Lighting3_Mask; float _Rim_Lighting3_Mask_Invert; +float _Rim_Lighting3_Mask_UV_Select; +float _Rim_Lighting3_Mask_Sampler_Mode; float _Rim_Lighting3_Center; float _Rim_Lighting3_Power; float _Rim_Lighting3_Strength; diff --git a/tooner.shader b/tooner.shader index abdec1a..7ae6a85 100644 --- a/tooner.shader +++ b/tooner.shader @@ -231,6 +231,8 @@ Shader "yum_food/tooner" _Rim_Lighting0_Mode("Rim lighting mode", Float) = 0 _Rim_Lighting0_Mask("Rim lighting mask", 2D) = "white" {} _Rim_Lighting0_Mask_Invert("Invert rim lighting mask", Float) = 0.0 + _Rim_Lighting0_Mask_UV_Select("mask UV select", Range(0, 1)) = 0.0 + _Rim_Lighting0_Mask_Sampler_Mode("mask sampler mode", Range(0, 1)) = 0.0 _Rim_Lighting0_Color("Rim lighting color", Color) = (1, 1, 1, 1) _Rim_Lighting0_Center("Rim lighting center", Float) = 0.5 _Rim_Lighting0_Power("Rim lighting power", Float) = 2.0 @@ -250,6 +252,8 @@ Shader "yum_food/tooner" _Rim_Lighting1_Mode("Rim lighting mode", Float) = 0 _Rim_Lighting1_Mask("Rim lighting mask", 2D) = "white" {} _Rim_Lighting1_Mask_Invert("Invert rim lighting mask", Float) = 0.0 + _Rim_Lighting1_Mask_UV_Select("mask UV select", Range(0, 1)) = 0.0 + _Rim_Lighting1_Mask_Sampler_Mode("mask sampler mode", Range(0, 1)) = 0.0 _Rim_Lighting1_Color("Rim lighting color", Color) = (1, 1, 1, 1) _Rim_Lighting1_Center("Rim lighting center", Float) = 0.5 _Rim_Lighting1_Power("Rim lighting power", Float) = 2.0 @@ -269,6 +273,8 @@ Shader "yum_food/tooner" _Rim_Lighting2_Mode("Rim lighting mode", Float) = 0 _Rim_Lighting2_Mask("Rim lighting mask", 2D) = "white" {} _Rim_Lighting2_Mask_Invert("Invert rim lighting mask", Float) = 0.0 + _Rim_Lighting2_Mask_UV_Select("mask UV select", Range(0, 1)) = 0.0 + _Rim_Lighting2_Mask_Sampler_Mode("mask sampler mode", Range(0, 1)) = 0.0 _Rim_Lighting2_Color("Rim lighting color", Color) = (1, 1, 1, 1) _Rim_Lighting2_Center("Rim lighting center", Float) = 0.5 _Rim_Lighting2_Power("Rim lighting power", Float) = 2.0 @@ -288,6 +294,8 @@ Shader "yum_food/tooner" _Rim_Lighting3_Mode("Rim lighting mode", Float) = 0 _Rim_Lighting3_Mask("Rim lighting mask", 2D) = "white" {} _Rim_Lighting3_Mask_Invert("Invert rim lighting mask", Float) = 0.0 + _Rim_Lighting3_Mask_UV_Select("mask UV select", Range(0, 1)) = 0.0 + _Rim_Lighting3_Mask_Sampler_Mode("mask sampler mode", Range(0, 1)) = 0.0 _Rim_Lighting3_Color("Rim lighting color", Color) = (1, 1, 1, 1) _Rim_Lighting3_Center("Rim lighting center", Float) = 0.5 _Rim_Lighting3_Power("Rim lighting power", Float) = 2.0 @@ -453,7 +461,6 @@ Shader "yum_food/tooner" #include "tooner_lighting.cginc" ENDCG } - /* Pass { Tags { "RenderType" = "Opaque" @@ -524,7 +531,6 @@ Shader "yum_food/tooner" #include "mochie_shadow_caster.cginc" ENDCG } - */ } CustomEditor "ToonerGUI" } diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc index 631f911..0bc067e 100644 --- a/tooner_lighting.cginc +++ b/tooner_lighting.cginc @@ -548,6 +548,26 @@ float2 matcap_distortion0(float2 matcap_uv) { #elif defined(_PBR_OVERLAY3_SAMPLER_CLAMP) #define GET_SAMPLER_OV3 linear_clamp_s #endif +#if defined(_RIM_LIGHTING0_SAMPLER_REPEAT) +#define GET_SAMPLER_RL0 linear_repeat_s +#elif defined(_RIM_LIGHTING0_SAMPLER_CLAMP) +#define GET_SAMPLER_RL0 linear_clamp_s +#endif +#if defined(_RIM_LIGHTING1_SAMPLER_REPEAT) +#define GET_SAMPLER_RL1 linear_repeat_s +#elif defined(_RIM_LIGHTING1_SAMPLER_CLAMP) +#define GET_SAMPLER_RL1 linear_clamp_s +#endif +#if defined(_RIM_LIGHTING2_SAMPLER_REPEAT) +#define GET_SAMPLER_RL2 linear_repeat_s +#elif defined(_RIM_LIGHTING2_SAMPLER_CLAMP) +#define GET_SAMPLER_RL2 linear_clamp_s +#endif +#if defined(_RIM_LIGHTING3_SAMPLER_REPEAT) +#define GET_SAMPLER_RL3 linear_repeat_s +#elif defined(_RIM_LIGHTING3_SAMPLER_CLAMP) +#define GET_SAMPLER_RL3 linear_clamp_s +#endif struct PbrOverlay { #if defined(_PBR_OVERLAY0) @@ -1433,7 +1453,8 @@ float4 effect(inout v2f i) float3 matcap = rl * _Rim_Lighting0_Color * _Rim_Lighting0_Strength; #if defined(_RIM_LIGHTING0_MASK) - float4 matcap_mask_raw = _Rim_Lighting0_Mask.SampleGrad(linear_repeat_s, i.uv0.xy, iddx, iddy); + float4 matcap_mask_raw = _Rim_Lighting0_Mask.SampleGrad(GET_SAMPLER_RL0, + GET_UV_BY_CHANNEL(i, _Rim_Lighting0_Mask_UV_Select), iddx, iddy); float matcap_mask = matcap_mask_raw.r; matcap_mask = (bool) round(_Rim_Lighting0_Mask_Invert) ? 1 - matcap_mask : matcap_mask; matcap_mask *= matcap_mask_raw.a; @@ -1496,7 +1517,8 @@ float4 effect(inout v2f i) } float3 matcap = rl * _Rim_Lighting1_Color * _Rim_Lighting1_Strength; #if defined(_RIM_LIGHTING1_MASK) - float4 matcap_mask_raw = _Rim_Lighting1_Mask.SampleGrad(linear_repeat_s, i.uv0.xy, iddx, iddy); + float4 matcap_mask_raw = _Rim_Lighting1_Mask.SampleGrad(GET_SAMPLER_RL1, + GET_UV_BY_CHANNEL(i, _Rim_Lighting1_Mask_UV_Select), iddx, iddy); float matcap_mask = matcap_mask_raw.r; matcap_mask = (bool) round(_Rim_Lighting1_Mask_Invert) ? 1 - matcap_mask : matcap_mask; matcap_mask *= matcap_mask_raw.a; @@ -1563,7 +1585,8 @@ float4 effect(inout v2f i) } float3 matcap = rl * _Rim_Lighting2_Color * _Rim_Lighting2_Strength; #if defined(_RIM_LIGHTING2_MASK) - float4 matcap_mask_raw = _Rim_Lighting2_Mask.SampleGrad(linear_repeat_s, i.uv0.xy, iddx, iddy); + float4 matcap_mask_raw = _Rim_Lighting2_Mask.SampleGrad(GET_SAMPLER_RL2, + GET_UV_BY_CHANNEL(i, _Rim_Lighting2_Mask_UV_Select), iddx, iddy); float matcap_mask = matcap_mask_raw.r; matcap_mask = (bool) round(_Rim_Lighting2_Mask_Invert) ? 1 - matcap_mask : matcap_mask; matcap_mask *= matcap_mask_raw.a; @@ -1630,7 +1653,8 @@ float4 effect(inout v2f i) } float3 matcap = rl * _Rim_Lighting3_Color * _Rim_Lighting3_Strength; #if defined(_RIM_LIGHTING3_MASK) - float4 matcap_mask_raw = _Rim_Lighting3_Mask.SampleGrad(linear_repeat_s, i.uv0.xy, iddx, iddy); + float4 matcap_mask_raw = _Rim_Lighting3_Mask.SampleGrad(GET_SAMPLER_RL3, + GET_UV_BY_CHANNEL(i, _Rim_Lighting3_Mask_UV_Select), iddx, iddy); float matcap_mask = matcap_mask_raw.r; matcap_mask = (bool) round(_Rim_Lighting3_Mask_Invert) ? 1 - matcap_mask : matcap_mask; matcap_mask *= matcap_mask_raw.a; |
