summaryrefslogtreecommitdiffstats
path: root/tooner_lighting.cginc
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2024-10-25 15:05:56 -0700
committeryum <yum.food.vr@gmail.com>2024-10-25 15:05:56 -0700
commit94f37fa8dd94137a910df4ebc80f98db2d685f08 (patch)
tree4a4b77203f1f4fa911ea4fa9a351a1d6ed911f2d /tooner_lighting.cginc
parent1705cd25f5bcd796a560bcce22ef91d190a94900 (diff)
Add features for constant rim lighting view direction
Add vector to control rim lighting view dir (y does nothing) and toggle to enable doing reflection calculation in world space.
Diffstat (limited to 'tooner_lighting.cginc')
-rw-r--r--tooner_lighting.cginc40
1 files changed, 36 insertions, 4 deletions
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 +