diff options
| -rw-r--r-- | Editor/tooner.cs | 23 | ||||
| -rw-r--r-- | feature_macros.cginc | 8 | ||||
| -rw-r--r-- | globals.cginc | 12 | ||||
| -rw-r--r-- | tooner.shader | 12 | ||||
| -rw-r--r-- | tooner_lighting.cginc | 40 |
5 files changed, 91 insertions, 4 deletions
diff --git a/Editor/tooner.cs b/Editor/tooner.cs index bd98d37..deb2357 100644 --- a/Editor/tooner.cs +++ b/Editor/tooner.cs @@ -936,6 +936,29 @@ public class ToonerGUI : ShaderGUI { EditorGUI.indentLevel -= 1; } + bc = FindProperty($"_Rim_Lighting{i}_Custom_View_Vector_Enabled"); + enabled = bc.floatValue > 1E-6; + EditorGUI.BeginChangeCheck(); + enabled = Toggle("Custom view vector", enabled); + EditorGUI.EndChangeCheck(); + bc.floatValue = enabled ? 1.0f : 0.0f; + SetKeyword($"_RIM_LIGHTING{i}_CUSTOM_VIEW_VECTOR", enabled); + + if (enabled) { + EditorGUI.indentLevel += 1; + bc = FindProperty($"_Rim_Lighting{i}_Custom_View_Vector"); + VectorProperty(bc, "Vector"); + EditorGUI.indentLevel -= 1; + } + + bc = FindProperty($"_Rim_Lighting{i}_Reflect_In_World_Space"); + enabled = bc.floatValue > 1E-6; + EditorGUI.BeginChangeCheck(); + enabled = Toggle("Reflect in world space", enabled); + EditorGUI.EndChangeCheck(); + bc.floatValue = enabled ? 1.0f : 0.0f; + SetKeyword($"_RIM_LIGHTING{i}_REFLECT_IN_WORLD", enabled); + EditorGUI.indentLevel -= 1; show_ui.RemoveAt(show_ui.Count - 1); } diff --git a/feature_macros.cginc b/feature_macros.cginc index 1cb3233..c7ac050 100644 --- a/feature_macros.cginc +++ b/feature_macros.cginc @@ -37,24 +37,32 @@ #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_LIGHTING0_CUSTOM_VIEW_VECTOR +#pragma shader_feature_local _ _RIM_LIGHTING0_REFLECT_IN_WORLD #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_LIGHTING1_CUSTOM_VIEW_VECTOR +#pragma shader_feature_local _ _RIM_LIGHTING1_REFLECT_IN_WORLD #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_LIGHTING2_CUSTOM_VIEW_VECTOR +#pragma shader_feature_local _ _RIM_LIGHTING2_REFLECT_IN_WORLD #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 _ _RIM_LIGHTING3_CUSTOM_VIEW_VECTOR +#pragma shader_feature_local _ _RIM_LIGHTING3_REFLECT_IN_WORLD #pragma shader_feature_local _ _OKLAB #pragma shader_feature_local _ _HSV0 #pragma shader_feature_local _ _HSV1 diff --git a/globals.cginc b/globals.cginc index 3a9616b..f1a7fc3 100644 --- a/globals.cginc +++ b/globals.cginc @@ -430,6 +430,9 @@ float _Rim_Lighting0_PolarMask_Enabled; float _Rim_Lighting0_PolarMask_Theta; float _Rim_Lighting0_PolarMask_Power; #endif +#if defined(_RIM_LIGHTING0_CUSTOM_VIEW_VECTOR) +float4 _Rim_Lighting0_Custom_View_Vector; +#endif #endif #if defined(_RIM_LIGHTING1) @@ -459,6 +462,9 @@ float _Rim_Lighting1_PolarMask_Enabled; float _Rim_Lighting1_PolarMask_Theta; float _Rim_Lighting1_PolarMask_Power; #endif +#if defined(_RIM_LIGHTING1_CUSTOM_VIEW_VECTOR) +float4 _Rim_Lighting1_Custom_View_Vector; +#endif #endif #if defined(_RIM_LIGHTING2) @@ -488,6 +494,9 @@ float _Rim_Lighting2_PolarMask_Enabled; float _Rim_Lighting2_PolarMask_Theta; float _Rim_Lighting2_PolarMask_Power; #endif +#if defined(_RIM_LIGHTING2_CUSTOM_VIEW_VECTOR) +float4 _Rim_Lighting2_Custom_View_Vector; +#endif #endif #if defined(_RIM_LIGHTING3) @@ -517,6 +526,9 @@ float _Rim_Lighting3_PolarMask_Enabled; float _Rim_Lighting3_PolarMask_Theta; float _Rim_Lighting3_PolarMask_Power; #endif +#if defined(_RIM_LIGHTING3_CUSTOM_VIEW_VECTOR) +float4 _Rim_Lighting3_Custom_View_Vector; +#endif #endif #if defined(_OKLAB) diff --git a/tooner.shader b/tooner.shader index 55ec40c..db54d6e 100644 --- a/tooner.shader +++ b/tooner.shader @@ -344,7 +344,10 @@ Shader "yum_food/tooner" _Rim_Lighting0_PolarMask_Enabled("Rim lighting polar mask enabled", Float) = 0 _Rim_Lighting0_PolarMask_Theta("Rim lighting polar mask - theta", Float) = 0 _Rim_Lighting0_PolarMask_Power("Rim lighting polar mask - power", Float) = 3 + _Rim_Lighting0_Custom_View_Vector_Enabled("custom view vector", Float) = 0 + _Rim_Lighting0_Custom_View_Vector("custom view vector", Vector) = (1, 0, 0, 0) _Rim_Lighting0_Center_Eye_Fix("Enable center eye fix", Float) = 0 + _Rim_Lighting0_Reflect_In_World_Space("Reflect in world space", Float) = 0 _Rim_Lighting1_Enabled("Enable rim lighting", Float) = 0 _Rim_Lighting1_Mode("Rim lighting mode", Float) = 0 @@ -367,7 +370,10 @@ Shader "yum_food/tooner" _Rim_Lighting1_PolarMask_Enabled("Rim lighting polar mask enabled", Float) = 0 _Rim_Lighting1_PolarMask_Theta("Rim lighting polar mask - theta", Float) = 0 _Rim_Lighting1_PolarMask_Power("Rim lighting polar mask - power", Float) = 3 + _Rim_Lighting1_Custom_View_Vector_Enabled("custom view vector", Float) = 0 + _Rim_Lighting1_Custom_View_Vector("custom view vector", Vector) = (1, 0, 0, 0) _Rim_Lighting1_Center_Eye_Fix("Enable center eye fix", Float) = 0 + _Rim_Lighting1_Reflect_In_World_Space("Reflect in world space", Float) = 0 _Rim_Lighting2_Enabled("Enable rim lighting", Float) = 0 _Rim_Lighting2_Mode("Rim lighting mode", Float) = 0 @@ -390,7 +396,10 @@ Shader "yum_food/tooner" _Rim_Lighting2_PolarMask_Enabled("Rim lighting polar mask enabled", Float) = 0 _Rim_Lighting2_PolarMask_Theta("Rim lighting polar mask - theta", Float) = 0 _Rim_Lighting2_PolarMask_Power("Rim lighting polar mask - power", Float) = 3 + _Rim_Lighting2_Custom_View_Vector_Enabled("custom view vector", Float) = 0 + _Rim_Lighting2_Custom_View_Vector("custom view vector", Vector) = (1, 0, 0, 0) _Rim_Lighting2_Center_Eye_Fix("Enable center eye fix", Float) = 0 + _Rim_Lighting2_Reflect_In_World_Space("Reflect in world space", Float) = 0 _Rim_Lighting3_Enabled("Enable rim lighting", Float) = 0 _Rim_Lighting3_Mode("Rim lighting mode", Float) = 0 @@ -413,7 +422,10 @@ Shader "yum_food/tooner" _Rim_Lighting3_PolarMask_Enabled("Rim lighting polar mask enabled", Float) = 0 _Rim_Lighting3_PolarMask_Theta("Rim lighting polar mask - theta", Float) = 0 _Rim_Lighting3_PolarMask_Power("Rim lighting polar mask - power", Float) = 3 + _Rim_Lighting3_Custom_View_Vector_Enabled("custom view vector", Float) = 0 + _Rim_Lighting3_Custom_View_Vector("custom view vector", Vector) = (1, 0, 0, 0) _Rim_Lighting3_Center_Eye_Fix("Enable center eye fix", Float) = 0 + _Rim_Lighting3_Reflect_In_World_Space("Reflect in world space", Float) = 0 _OKLAB_Enabled("Enable OKLAB", Float) = 0.0 _OKLAB_Mask("Mask", 2D) = "white" {} diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc index bcad86a..1b306ce 100644 --- a/tooner_lighting.cginc +++ b/tooner_lighting.cginc @@ -1708,10 +1708,18 @@ float4 effect(inout v2f i, out float depth) #if defined(_RIM_LIGHTING0) { float3 rl_view_dir = VIEW_DIR(_Rim_Lighting0_Center_Eye_Fix); +#if defined(_RIM_LIGHTING0_CUSTOM_VIEW_VECTOR) + rl_view_dir.xz = normalize(_Rim_Lighting0_Custom_View_Vector).xz; +#endif float2 rl_uv; { +#if defined(_RIM_LIGHTING0_REFLECT_IN_WORLD) + const float3 cam_normal = normal; + const float3 cam_view_dir = rl_view_dir; +#else const float3 cam_normal = normalize(mul(UNITY_MATRIX_V, float4(normal, 0))); const float3 cam_view_dir = normalize(mul(UNITY_MATRIX_V, float4(rl_view_dir, 0))); +#endif const float3 cam_refl = -reflect(cam_view_dir, cam_normal); float m = 2.0 * sqrt( cam_refl.x * cam_refl.x + @@ -1723,7 +1731,7 @@ float4 effect(inout v2f i, out float depth) float rl = length(rl_uv - 0.5); rl = pow(2, -_Rim_Lighting0_Power * abs(rl - _Rim_Lighting0_Center)); float q = _Rim_Lighting0_Quantization; - if (q > -1) { + if (q > 0) { rl = floor(rl * q) / q; } float3 matcap = rl * _Rim_Lighting0_Color * _Rim_Lighting0_Strength; @@ -1798,11 +1806,19 @@ float4 effect(inout v2f i, out float depth) #endif // _RIM_LIGHTING0 #if defined(_RIM_LIGHTING1) { - float3 rl_view_dir = VIEW_DIR(_Rim_Lighting0_Center_Eye_Fix); + float3 rl_view_dir = VIEW_DIR(_Rim_Lighting1_Center_Eye_Fix); +#if defined(_RIM_LIGHTING1_CUSTOM_VIEW_VECTOR) + rl_view_dir.xz = normalize(_Rim_Lighting1_Custom_View_Vector).xz; +#endif float2 rl_uv; { +#if defined(_RIM_LIGHTING1_REFLECT_IN_WORLD) + const float3 cam_normal = normal; + const float3 cam_view_dir = rl_view_dir; +#else const float3 cam_normal = normalize(mul(UNITY_MATRIX_V, float4(normal, 0))); const float3 cam_view_dir = normalize(mul(UNITY_MATRIX_V, float4(rl_view_dir, 0))); +#endif const float3 cam_refl = -reflect(cam_view_dir, cam_normal); float m = 2.0 * sqrt( cam_refl.x * cam_refl.x + @@ -1889,11 +1905,19 @@ float4 effect(inout v2f i, out float depth) #endif // _RIM_LIGHTING1 #if defined(_RIM_LIGHTING2) { - float3 rl_view_dir = VIEW_DIR(_Rim_Lighting0_Center_Eye_Fix); + float3 rl_view_dir = VIEW_DIR(_Rim_Lighting2_Center_Eye_Fix); +#if defined(_RIM_LIGHTING2_CUSTOM_VIEW_VECTOR) + rl_view_dir.xz = normalize(_Rim_Lighting2_Custom_View_Vector).xz; +#endif float2 rl_uv; { +#if defined(_RIM_LIGHTING2_REFLECT_IN_WORLD) + const float3 cam_normal = normal; + const float3 cam_view_dir = rl_view_dir; +#else const float3 cam_normal = normalize(mul(UNITY_MATRIX_V, float4(normal, 0))); const float3 cam_view_dir = normalize(mul(UNITY_MATRIX_V, float4(rl_view_dir, 0))); +#endif const float3 cam_refl = -reflect(cam_view_dir, cam_normal); float m = 2.0 * sqrt( cam_refl.x * cam_refl.x + @@ -1980,11 +2004,19 @@ float4 effect(inout v2f i, out float depth) #endif // _RIM_LIGHTING2 #if defined(_RIM_LIGHTING3) { - float3 rl_view_dir = VIEW_DIR(_Rim_Lighting0_Center_Eye_Fix); + float3 rl_view_dir = VIEW_DIR(_Rim_Lighting3_Center_Eye_Fix); +#if defined(_RIM_LIGHTING3_CUSTOM_VIEW_VECTOR) + rl_view_dir.xz = normalize(_Rim_Lighting3_Custom_View_Vector).xz; +#endif float2 rl_uv; { +#if defined(_RIM_LIGHTING3_REFLECT_IN_WORLD) + const float3 cam_normal = normal; + const float3 cam_view_dir = rl_view_dir; +#else const float3 cam_normal = normalize(mul(UNITY_MATRIX_V, float4(normal, 0))); const float3 cam_view_dir = normalize(mul(UNITY_MATRIX_V, float4(rl_view_dir, 0))); +#endif const float3 cam_refl = -reflect(cam_view_dir, cam_normal); float m = 2.0 * sqrt( cam_refl.x * cam_refl.x + |
