summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Editor/tooner.cs23
-rw-r--r--feature_macros.cginc8
-rw-r--r--globals.cginc12
-rw-r--r--tooner.shader12
-rw-r--r--tooner_lighting.cginc40
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 +