From 738312d48be32093283841c2368fe4b919da6580 Mon Sep 17 00:00:00 2001 From: yum Date: Thu, 20 Feb 2025 01:00:43 -0800 Subject: Add ability to quantize NoL Also add 2 more rim lighting slots --- 2ner.shader | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- features.cginc | 16 +++++++++++ globals.cginc | 40 +++++++++++++++++++++++++++ matcaps.cginc | 64 +++++++++++++++++++++++++++++++++--------- yum_lighting.cginc | 3 ++ 5 files changed, 188 insertions(+), 16 deletions(-) diff --git a/2ner.shader b/2ner.shader index f4c4db9..0619ddb 100644 --- a/2ner.shader +++ b/2ner.shader @@ -77,8 +77,8 @@ Shader "yum_food/2ner" [HideInInspector] m_end_Matcap0("Matcaps", Float) = 0 [HideInInspector] m_end_Matcaps("Matcaps", Float) = 0 //endex - //ifex _Rim_Lighting0_Enabled==0 [HideInInspector] m_start_Rim_Lighting("Rim lighting", Float) = 0 + //ifex _Rim_Lighting0_Enabled==0 [HideInInspector] m_start_Rim_Lighting0("Rim lighting 0", Float) = 0 [ThryToggle(_RIM_LIGHTING0)]_Rim_Lighting0_Enabled("Enable", Float) = 0 _Rim_Lighting0_Center("Center", Range(0, 0.5)) = 0.5 @@ -102,8 +102,10 @@ Shader "yum_food/2ner" [ThryToggle(_RIM_LIGHTING0_QUANTIZATION)]_Rim_Lighting0_Quantization_Enabled("Enable", Float) = 0 _Rim_Lighting0_Quantization_Steps("Steps", Float) = 1 [HideInInspector] m_end_Rim_Lighting0_Quantization("Quantization", Float) = 0 - [HideInInspector] m_end_Rim_Lighting0("Rim lighting", Float) = 0 + //endex + + //ifex _Rim_Lighting1_Enabled==0 [HideInInspector] m_start_Rim_Lighting1("Rim lighting 1", Float) = 0 [ThryToggle(_RIM_LIGHTING1)]_Rim_Lighting1_Enabled("Enable", Float) = 0 _Rim_Lighting1_Center("Center", Range(0, 0.5)) = 0.5 @@ -116,9 +118,76 @@ Shader "yum_food/2ner" [ThryToggle(_RIM_LIGHTINg1_MASK)]_Rim_Lighting1_Mask_Enabled("Enable", Float) = 0 _Rim_Lighting1_Mask("Mask", 2D) = "white" {} [HideInInspector] m_end_Rim_Lighting1_Mask("Mask", Float) = 0 + + [HideInInspector] m_start_Rim_Lighting1_Angle_Limit("Angle limit", Float) = 0 + [ThryToggle(_RIM_LIGHTING1_ANGLE_LIMIT)]_Rim_Lighting1_Angle_Limit_Enabled("Enable", Float) = 0 + _Rim_Lighting1_Angle_Limit_Target_Vector("Target vector", Vector) = (0, -1, 0, 0) + _Rim_Lighting1_Angle_Limit_Power("Power", Float) = 1 + [HideInInspector] m_end_Rim_Lighting1_Angle_Limit("Angle limit", Float) = 0 + + [HideInInspector] m_start_Rim_Lighting1_Quantization("Quantization", Float) = 0 + [ThryToggle(_RIM_LIGHTING1_QUANTIZATION)]_Rim_Lighting1_Quantization_Enabled("Enable", Float) = 0 + _Rim_Lighting1_Quantization_Steps("Steps", Float) = 1 + [HideInInspector] m_end_Rim_Lighting1_Quantization("Quantization", Float) = 0 [HideInInspector] m_end_Rim_Lighting1("Rim lighting", Float) = 0 + //endex + + //ifex _Rim_Lighting2_Enabled==0 + [HideInInspector] m_start_Rim_Lighting2("Rim lighting 2", Float) = 0 + [ThryToggle(_RIM_LIGHTING2)]_Rim_Lighting2_Enabled("Enable", Float) = 0 + _Rim_Lighting2_Center("Center", Range(0, 0.5)) = 0.5 + _Rim_Lighting2_Power("Power", Float) = 5 + _Rim_Lighting2_Color("Color", Color) = (1, 1, 1, 1) + _Rim_Lighting2_Brightness("Brightness", Float) = 1 + [ThryWideEnum(Replace, 0, Add, 1, Multiply, 2, Subtract, 3, AddProduct, 4)] + _Rim_Lighting2_Mode("Mode", Int) = 0 + [HideInInspector] m_start_Rim_Lighting2_Mask("Mask", Float) = 0 + [ThryToggle(_RIM_LIGHTING2_MASK)]_Rim_Lighting2_Mask_Enabled("Enable", Float) = 0 + _Rim_Lighting2_Mask("Mask", 2D) = "white" {} + [HideInInspector] m_end_Rim_Lighting2_Mask("Mask", Float) = 0 + + [HideInInspector] m_start_Rim_Lighting2_Angle_Limit("Angle limit", Float) = 0 + [ThryToggle(_RIM_LIGHTING2_ANGLE_LIMIT)]_Rim_Lighting2_Angle_Limit_Enabled("Enable", Float) = 0 + _Rim_Lighting2_Angle_Limit_Target_Vector("Target vector", Vector) = (0, -1, 0, 0) + _Rim_Lighting2_Angle_Limit_Power("Power", Float) = 1 + [HideInInspector] m_end_Rim_Lighting2_Angle_Limit("Angle limit", Float) = 0 + + [HideInInspector] m_start_Rim_Lighting2_Quantization("Quantization", Float) = 0 + [ThryToggle(_RIM_LIGHTING2_QUANTIZATION)]_Rim_Lighting2_Quantization_Enabled("Enable", Float) = 0 + _Rim_Lighting2_Quantization_Steps("Steps", Float) = 1 + [HideInInspector] m_end_Rim_Lighting2_Quantization("Quantization", Float) = 0 + [HideInInspector] m_end_Rim_Lighting2("Rim lighting", Float) = 0 + //endex + + //ifex _Rim_Lighting3_Enabled==0 + [HideInInspector] m_start_Rim_Lighting3("Rim lighting 3", Float) = 0 + [ThryToggle(_RIM_LIGHTING3)]_Rim_Lighting3_Enabled("Enable", Float) = 0 + _Rim_Lighting3_Center("Center", Range(0, 0.5)) = 0.5 + _Rim_Lighting3_Power("Power", Float) = 5 + _Rim_Lighting3_Color("Color", Color) = (1, 1, 1, 1) + _Rim_Lighting3_Brightness("Brightness", Float) = 1 + [ThryWideEnum(Replace, 0, Add, 1, Multiply, 2, Subtract, 3, AddProduct, 4)] + _Rim_Lighting3_Mode("Mode", Int) = 0 + [HideInInspector] m_start_Rim_Lighting3_Mask("Mask", Float) = 0 + [ThryToggle(_RIM_LIGHTING3_MASK)]_Rim_Lighting3_Mask_Enabled("Enable", Float) = 0 + _Rim_Lighting3_Mask("Mask", 2D) = "white" {} + [HideInInspector] m_end_Rim_Lighting3_Mask("Mask", Float) = 0 + + [HideInInspector] m_start_Rim_Lighting3_Angle_Limit("Angle limit", Float) = 0 + [ThryToggle(_RIM_LIGHTING3_ANGLE_LIMIT)]_Rim_Lighting3_Angle_Limit_Enabled("Enable", Float) = 0 + _Rim_Lighting3_Angle_Limit_Target_Vector("Target vector", Vector) = (0, -1, 0, 0) + _Rim_Lighting3_Angle_Limit_Power("Power", Float) = 1 + [HideInInspector] m_end_Rim_Lighting3_Angle_Limit("Angle limit", Float) = 0 + + [HideInInspector] m_start_Rim_Lighting3_Quantization("Quantization", Float) = 0 + [ThryToggle(_RIM_LIGHTING3_QUANTIZATION)]_Rim_Lighting3_Quantization_Enabled("Enable", Float) = 0 + _Rim_Lighting3_Quantization_Steps("Steps", Float) = 1 + [HideInInspector] m_end_Rim_Lighting3_Quantization("Quantization", Float) = 0 + [HideInInspector] m_end_Rim_Lighting3("Rim lighting", Float) = 0 + //endex + [HideInInspector] m_end_Rim_Lighting("Rim lighting", Float) = 0 - //endex + //ifex _Vertex_Domain_Warping_Enabled==0 [HideInInspector] m_start_Vertex_Domain_Warping("Vertex domain warping", Float) = 0 [ThryToggle(_VERTEX_DOMAIN_WARPING)]_Vertex_Domain_Warping_Enabled("Enable", Float) = 0 @@ -154,6 +223,12 @@ Shader "yum_food/2ner" _Min_Brightness("Value", Range(0, 1)) = 0 [HideInInspector] m_end_Min_Brightness("Minimum brightness", Float) = 0 //endex + //ifex _Quantize_NoL_Enabled==0 + [HideInInspector] m_start_Quantize_NoL("Quantize NoL", Float) = 0 + [ThryToggle(_QUANTIZE_NOL)] _Quantize_NoL_Enabled("Enable", Float) = 0 + _Quantize_NoL_Steps("Steps", Float) = 1 + [HideInInspector] m_end_Quantize_NoL("Quantize NoL", Float) = 0 + //endex [HideInInspector] m_renderingOptions("Rendering Options", Float) = 0 [Enum(UnityEngine.Rendering.CullMode)] _Cull("Cull", Float) = 2 diff --git a/features.cginc b/features.cginc index 718b63f..51b25f8 100644 --- a/features.cginc +++ b/features.cginc @@ -13,6 +13,10 @@ #pragma shader_feature_local _MIN_BRIGHTNESS //endex +//ifex _Quantize_NoL_Enabled==0 +#pragma shader_feature_local _QUANTIZE_NOL +//endex + //ifex _Outlines_Enabled==0 #pragma shader_feature_local _OUTLINES //endex @@ -37,6 +41,18 @@ #pragma shader_feature_local _RIM_LIGHTING1_ANGLE_LIMIT #pragma shader_feature_local _RIM_LIGHTING1_QUANTIZATION //endex +//ifex _Rim_Lighting2_Enabled==0 +#pragma shader_feature_local _RIM_LIGHTING2 +#pragma shader_feature_local _RIM_LIGHTING2_MASK +#pragma shader_feature_local _RIM_LIGHTING2_ANGLE_LIMIT +#pragma shader_feature_local _RIM_LIGHTING2_QUANTIZATION +//endex +//ifex _Rim_Lighting3_Enabled==0 +#pragma shader_feature_local _RIM_LIGHTING3 +#pragma shader_feature_local _RIM_LIGHTING3_MASK +#pragma shader_feature_local _RIM_LIGHTING3_ANGLE_LIMIT +#pragma shader_feature_local _RIM_LIGHTING3_QUANTIZATION +//endex //ifex _Vertex_Domain_Warping_Enabled==0 #pragma shader_feature_local _VERTEX_DOMAIN_WARPING diff --git a/globals.cginc b/globals.cginc index 14ec4aa..c5b7b29 100644 --- a/globals.cginc +++ b/globals.cginc @@ -31,6 +31,10 @@ float _Wrap_NoL_Specular_Strength; float _Min_Brightness; #endif +#if defined(_QUANTIZE_NOL) +float _Quantize_NoL_Steps; +#endif + float _Clip; int _Mode; float _Smoothness; @@ -101,6 +105,42 @@ float _Rim_Lighting1_Quantization_Steps; #endif #endif +#if defined(_RIM_LIGHTING2) +uint _Rim_Lighting2_Mode; +float _Rim_Lighting2_Center; +float _Rim_Lighting2_Power; +float3 _Rim_Lighting2_Color; +float _Rim_Lighting2_Brightness; +#if defined(_RIM_LIGHTING2_MASK) +texture2D _Rim_Lighting2_Mask; +#endif +#if defined(_RIM_LIGHTING2_ANGLE_LIMIT) +float2 _Rim_Lighting2_Angle_Limit_Target_Vector; +float _Rim_Lighting2_Angle_Limit_Power; +#endif +#if defined(_RIM_LIGHTING2_QUANTIZATION) +float _Rim_Lighting2_Quantization_Steps; +#endif +#endif + +#if defined(_RIM_LIGHTING3) +uint _Rim_Lighting3_Mode; +float _Rim_Lighting3_Center; +float _Rim_Lighting3_Power; +float3 _Rim_Lighting3_Color; +float _Rim_Lighting3_Brightness; +#if defined(_RIM_LIGHTING3_MASK) +texture2D _Rim_Lighting3_Mask; +#endif +#if defined(_RIM_LIGHTING3_ANGLE_LIMIT) +float2 _Rim_Lighting3_Angle_Limit_Target_Vector; +float _Rim_Lighting3_Angle_Limit_Power; +#endif +#if defined(_RIM_LIGHTING3_QUANTIZATION) +float _Rim_Lighting3_Quantization_Steps; +#endif +#endif + #if defined(_VERTEX_DOMAIN_WARPING) float _Vertex_Domain_Warping_Spatial_Strength; float _Vertex_Domain_Warping_Spatial_Scale; diff --git a/matcaps.cginc b/matcaps.cginc index 78f2cce..9feea8b 100644 --- a/matcaps.cginc +++ b/matcaps.cginc @@ -68,39 +68,77 @@ void applyMatcapsAndRimLighting(v2f i, inout YumPbr pbr) { #if defined(_RIM_LIGHTING0) || defined(_RIM_LIGHTING1) float rl_radius = length(muv - 0.5); #endif + #if defined(_RIM_LIGHTING0) float rl0_dist = exp2(-_Rim_Lighting0_Power * abs(rl_radius - _Rim_Lighting0_Center)); +#if defined(_RIM_LIGHTING0_ANGLE_LIMIT) + rl0_dist *= getAngleAttenuation(muv, _Rim_Lighting0_Angle_Limit_Target_Vector, + _Rim_Lighting0_Angle_Limit_Power); +#endif +#if defined(_RIM_LIGHTING0_QUANTIZATION) + rl0_dist = floor(rl0_dist * _Rim_Lighting0_Quantization_Steps) / _Rim_Lighting0_Quantization_Steps; +#endif float3 rl0 = _Rim_Lighting0_Color * _Rim_Lighting0_Brightness * rl0_dist; #if defined(_RIM_LIGHTING0_MASK) float rl0_mask = _Rim_Lighting0_Mask.Sample(linear_repeat_s, i.uv01.xy); #else float rl0_mask = 1; -#endif -#if defined(_RIM_LIGHTING0_ANGLE_LIMIT) - rl0 *= getAngleAttenuation(muv, _Rim_Lighting0_Angle_Limit_Target_Vector, - _Rim_Lighting0_Angle_Limit_Power); -#endif -#if defined(_RIM_LIGHTING0_QUANTIZATION) - rl0 = floor(rl0 * _Rim_Lighting0_Quantization_Steps) / _Rim_Lighting0_Quantization_Steps; #endif applyMatcap(pbr, rl0, _Rim_Lighting0_Mode, rl0_mask); #endif + #if defined(_RIM_LIGHTING1) float rl1_dist = exp2(-_Rim_Lighting1_Power * abs(rl_radius - _Rim_Lighting1_Center)); +#if defined(_RIM_LIGHTING1_ANGLE_LIMIT) + rl1_dist *= getAngleAttenuation(muv, _Rim_Lighting1_Angle_Limit_Target_Vector, + _Rim_Lighting1_Angle_Limit_Power); +#endif +#if defined(_RIM_LIGHTING1_QUANTIZATION) + rl1_dist = floor(rl1_dist * _Rim_Lighting1_Quantization_Steps) / _Rim_Lighting1_Quantization_Steps; +#endif float3 rl1 = _Rim_Lighting1_Color * _Rim_Lighting1_Brightness * rl1_dist; #if defined(_RIM_LIGHTING1_MASK) float rl1_mask = _Rim_Lighting1_Mask.Sample(linear_repeat_s, i.uv01.xy); #else float rl1_mask = 1; #endif -#if defined(_RIM_LIGHTING1_ANGLE_LIMIT) - rl1 *= getAngleAttenuation(muv, _Rim_Lighting1_Angle_Limit_Target_Vector, - _Rim_Lighting1_Angle_Limit_Power); + applyMatcap(pbr, rl1, _Rim_Lighting1_Mode, rl1_mask); #endif -#if defined(_RIM_LIGHTING1_QUANTIZATION) - rl1 = floor(rl1 * _Rim_Lighting1_Quantization_Steps) / _Rim_Lighting1_Quantization_Steps; + +#if defined(_RIM_LIGHTING2) + float rl2_dist = exp2(-_Rim_Lighting2_Power * abs(rl_radius - _Rim_Lighting2_Center)); +#if defined(_RIM_LIGHTING2_ANGLE_LIMIT) + rl2_dist *= getAngleAttenuation(muv, _Rim_Lighting2_Angle_Limit_Target_Vector, + _Rim_Lighting2_Angle_Limit_Power); #endif - applyMatcap(pbr, rl1, _Rim_Lighting1_Mode, rl1_mask); +#if defined(_RIM_LIGHTING2_QUANTIZATION) + rl2_dist = floor(rl2_dist * _Rim_Lighting2_Quantization_Steps) / _Rim_Lighting2_Quantization_Steps; +#endif + float3 rl2 = _Rim_Lighting2_Color * _Rim_Lighting2_Brightness * rl2_dist; +#if defined(_RIM_LIGHTING2_MASK) + float rl2_mask = _Rim_Lighting2_Mask.Sample(linear_repeat_s, i.uv01.xy); +#else + float rl2_mask = 1; +#endif + applyMatcap(pbr, rl2, _Rim_Lighting2_Mode, rl2_mask); +#endif + +#if defined(_RIM_LIGHTING3) + float rl3_dist = exp2(-_Rim_Lighting3_Power * abs(rl_radius - _Rim_Lighting3_Center)); +#if defined(_RIM_LIGHTING3_ANGLE_LIMIT) + rl3_dist *= getAngleAttenuation(muv, _Rim_Lighting3_Angle_Limit_Target_Vector, + _Rim_Lighting3_Angle_Limit_Power); +#endif +#if defined(_RIM_LIGHTING3_QUANTIZATION) + rl3_dist = floor(rl3_dist * _Rim_Lighting3_Quantization_Steps) / _Rim_Lighting3_Quantization_Steps; +#endif + float3 rl3 = _Rim_Lighting3_Color * _Rim_Lighting3_Brightness * rl3_dist; +#if defined(_RIM_LIGHTING3_MASK) + float rl3_mask = _Rim_Lighting3_Mask.Sample(linear_repeat_s, i.uv01.xy); +#else + float rl3_mask = 1; +#endif + applyMatcap(pbr, rl3, _Rim_Lighting3_Mode, rl3_mask); #endif } diff --git a/yum_lighting.cginc b/yum_lighting.cginc index e34ec10..604133f 100644 --- a/yum_lighting.cginc +++ b/yum_lighting.cginc @@ -133,6 +133,9 @@ YumLighting GetYumLighting(v2f i, YumPbr pbr) { light.specular = getIndirectSpecular(i, pbr, light.view_dir); light.NoL = saturate(dot(pbr.normal, light.dir)); +#if defined(_QUANTIZE_NOL) + light.NoL = floor(light.NoL * _Quantize_NoL_Steps) / _Quantize_NoL_Steps; +#endif #if defined(_WRAPPED_LIGHTING) light.NoL_wrapped_s = wrapNoL(light.NoL, _Wrap_NoL_Specular_Strength); light.NoL_wrapped_d = wrapNoL(light.NoL, _Wrap_NoL_Diffuse_Strength); -- cgit v1.2.3