#T#PoiRimLightProperties
// Rim Lighting
[HideInInspector] m_start_rimLightOptions ("Rim Lighting--{reference_property:_EnableRimLighting}", Float) = 0
[HideInInspector][ThryToggle(_GLOSSYREFLECTIONS_OFF)]_EnableRimLighting ("Enable Rim Lighting", Float) = 0
[KeywordEnum(Poiyomi, UTS2)] _RimStyle ("Style", Float) = 0
[Enum(vertex, 0, pixel, 1)] _Is_NormalMapToRimLight ("Normal Select", Int) = 1

[ToggleUI]_RimLightingInvert ("Invert Rim Lighting--{ condition_showS:_RimStyle==0}", Float) = 0
_RimLightColor ("Rim Color--{reference_property:_RimLightColorThemeIndex}", Color) = (1, 1, 1, 1)
[HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _RimLightColorThemeIndex ("", Int) = 0
_RimWidth ("Rim Width--{ condition_showS:_RimStyle==0}", Range(0, 1)) = 0.8
_RimSharpness ("Rim Sharpness--{ condition_showS:_RimStyle==0}", Range(0, 1)) = .25
_RimStrength ("Rim Emission--{ condition_showS:_RimStyle==0}", Range(0, 20)) = 0
_RimBrighten ("Rim Color Brighten--{ condition_showS:_RimStyle==0}", Range(0, 3)) = 0
_RimLightColorBias ("Rim Color Bias--{ condition_showS:_RimStyle==0}", Range(0, 1)) = 1
_RimHideInShadow ("Hide In Shadow--{ condition_showS:_RimStyle==0}", Range(0, 1)) = 0
_RimTex ("Rim Texture--{reference_properties:[_RimTexPan, _RimTexUV], condition_showS:_RimStyle==0}", 2D) = "white" { }
[HideInInspector][Vector2]_RimTexPan ("Panning", Vector) = (0, 0, 0, 0)
[HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos XZ, 5, Polar UV, 6, Distorted UV, 7)] _RimTexUV ("UV", Int) = 0
_RimMask ("Rim Mask--{reference_properties:[_RimMaskPan, _RimMaskUV], condition_showS:_RimStyle==0}", 2D) = "white" { }
[HideInInspector][Vector2]_RimMaskPan ("Panning", Vector) = (0, 0, 0, 0)
[HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos XZ, 5, Polar UV, 6, Distorted UV, 7)] _RimMaskUV ("UV", Int) = 0

_RimLightColor ("Color", Color) = (1, 1, 1, 1)
_Is_LightColor_RimLight ("Mix Light Color", Range(0, 1)) = 1
_RimLight_Power ("Rim Power", Range(0, 1)) = 0.1
_RimLight_InsideMask ("Inside Mask", Range(0.0001, 1)) = 0.0001
[Toggle(_)] _RimLight_FeatherOff ("Feather Off", Float) = 0
[ThryToggleUI(true)] _LightDirection_MaskOn ("<size=13><b>  Light Direction Mask</b></size>", Float) = 0
_Tweak_LightDirection_MaskLevel ("Light Dir Mask Level--{ condition_showS:_LightDirection_MaskOn==1}", Range(0, 0.5)) = 0
[ThryToggleUI(true)] _Add_Antipodean_RimLight ("<size=13><b>  Antipodean(Ap) Rim</b></size>--{ condition_showS:_LightDirection_MaskOn==1}", Float) = 0
_Is_LightColor_Ap_RimLight ("Ap Light Color Mix--{ condition_showS:_LightDirection_MaskOn==1&&_Add_Antipodean_RimLight==1}", Range(0, 1)) = 1
_Ap_RimLightColor ("Ap Color--{reference_property:_RimApColorThemeIndex, condition_showS:_LightDirection_MaskOn==1&&_Add_Antipodean_RimLight==1}", Color) = (1, 1, 1, 1)
[HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _RimApColorThemeIndex ("", Int) = 0
_Ap_RimLight_Power ("Ap Power--{ condition_showS:_LightDirection_MaskOn==1&&_Add_Antipodean_RimLight==1}", Range(0, 1)) = 0.1
[Toggle(_)] _Ap_RimLight_FeatherOff ("Ap Feather Off--{ condition_showS:_LightDirection_MaskOn==1&&_Add_Antipodean_RimLight==1}", Float) = 0
_Set_RimLightMask ("Set_RimLightMask--{ condition_showS:_LightDirection_MaskOn==1}", 2D) = "white" { }
_Tweak_RimLightMaskLevel ("Tweak_RimLightMaskLevel--{ condition_showS:_LightDirection_MaskOn==1}", Range(-1, 1)) = 0

[Space(10)]
[ThryToggleUI(true)] _RimHueShiftEnabled ("<size=13><b>  Hue Shift</b></size>", Float) = 0
_RimHueShiftSpeed ("Shift Speed--{condition_showS:(_RimHueShiftEnabled==1)}", Float) = 0
_RimHueShift ("Hue Shift--{condition_showS:(_RimHueShiftEnabled==1)}", Range(0, 1)) = 0
[HideInInspector] m_start_RimAudioLink ("Audio Link ♫--{ condition_showS:_EnableAudioLink==1}", Float) = 0
[Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3)] _AudioLinkRimWidthBand ("Width Add Band", Int) = 0
[Vector2] _AudioLinkRimWidthAdd ("Width Add (XMin, YMax)", Vector) = (0, 0, 0, 0)
[Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3)] _AudioLinkRimEmissionBand ("Emission Add Band", Int) = 0
[Vector2] _AudioLinkRimEmissionAdd ("Emission Add (XMin, YMax)", Vector) = (0, 0, 0, 0)
[Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3)] _AudioLinkRimBrightnessBand ("Brightness Band", Int) = 0
[Vector2] _AudioLinkRimBrightnessAdd ("Brightness Add (XMin, YMax)", Vector) = (0, 0, 0, 0)
[HideInInspector] m_end_RimAudioLink ("Audio Link", Float) = 0
[HideInInspector] m_end_rimLightOptions ("Rim Lighting", Float) = 0

#T#PoiRimLightKeywords
#pragma shader_feature _GLOSSYREFLECTIONS_OFF
#pragma shader_feature_local _RIMSTYLE_POIYOMI _RIMSTYLE_UTS2
#T#PoiRimLightVariables
#ifdef _GLOSSYREFLECTIONS_OFF
    float _Is_NormalMapToRimLight;
    float _RimLightColorThemeIndex;
    #ifdef _RIMSTYLE_POIYOMI
        float4 _RimLightColor;
        float _RimLightingInvert;
        float _RimWidth;
        float _RimStrength;
        float _RimSharpness;
        float _RimLightColorBias;
        float _ShadowMix;
        float _ShadowMixThreshold;
        float _ShadowMixWidthMod;
        float _EnableRimLighting;
        float _RimBrighten;
        float _RimWidthNoiseStrength;
        float _RimHideInShadow;

        #if defined(PROP_RIMTEX) || !defined(OPTIMIZER_ENABLED)
            Texture2D _RimTex;
        #endif
        float4 _RimTex_ST;
        float2 _RimTexPan;
        float _RimTexUV;
        #if defined(PROP_RIMMASK) || !defined(OPTIMIZER_ENABLED)
            Texture2D _RimMask;
        #endif
        float4 _RimMask_ST;
        float2 _RimMaskPan;
        float _RimMaskUV;
        #if defined(PROP_RIMWIDTHNOISETEXTURE) || !defined(OPTIMIZER_ENABLED)
            Texture2D _RimWidthNoiseTexture;
        #endif
        float4 _RimWidthNoiseTexture_ST;
        float2 _RimWidthNoiseTexturePan;
        float _RimWidthNoiseTextureUV;

        #ifdef POI_AUDIOLINK
            half _AudioLinkRimWidthBand;
            float2 _AudioLinkRimWidthAdd;
            half _AudioLinkRimEmissionBand;
            float2 _AudioLinkRimEmissionAdd;
            half _AudioLinkRimBrightnessBand;
            float2 _AudioLinkRimBrightnessAdd;
        #endif
    #endif

    #ifdef _RIMSTYLE_UTS2
        float _RimLight;
        float4 _RimLightColor;
        float _Is_LightColor_RimLight;
        float _RimLight_Power;
        float _RimLight_InsideMask;
        float _RimLight_FeatherOff;
        float _LightDirection_MaskOn;
        float _Tweak_LightDirection_MaskLevel;
        float _Add_Antipodean_RimLight;
        float4 _Ap_RimLightColor;
        float _RimApColorThemeIndex;
        float _Is_LightColor_Ap_RimLight;
        float _Ap_RimLight_Power;
        float _Ap_RimLight_FeatherOff;
        #if defined(PROP_SET_RIMLIGHTMASK) || !defined(OPTIMIZER_ENABLED)
            Texture2D _Set_RimLightMask;
            float4 _Set_RimLightMask_ST;
            float2 _Set_RimLightMaskPan;
            float _Set_RimLightMaskUV;
        #endif
        float _Tweak_RimLightMaskLevel;
    #endif

    float _RimHueShiftEnabled;
    float _RimHueShiftSpeed;
    float _RimHueShift;
#endif

/*
Texture2D ;
float4 _ST;
float2 Pan;
float UV;
*/

#T#PoiRimLightFunction
#ifdef _GLOSSYREFLECTIONS_OFF
    #ifdef _RIMSTYLE_POIYOMI
        void ApplyRimLighting(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight, in PoiMods poiMods)
        {
            #if defined(PROP_RIMWIDTHNOISETEXTURE) || !defined(OPTIMIZER_ENABLED)
                float rimNoise = POI2D_SAMPLER_PAN(_RimWidthNoiseTexture, _MainTex, poiUV(poiMesh.uv[_RimWidthNoiseTextureUV], _RimWidthNoiseTexture_ST), _RimWidthNoiseTexturePan);
            #else
                float rimNoise = 0;
            #endif

            rimNoise = (rimNoise - .5) * _RimWidthNoiseStrength;
            
            float viewDotNormal = saturate(abs(dot(poiCam.viewDir, poiMesh.normals[_Is_NormalMapToRimLight])));

            UNITY_BRANCH
            if (_RimLightingInvert)
            {
                viewDotNormal = 1 - viewDotNormal;
            }
            float rimStrength = _RimStrength;
            float rimBrighten = _RimBrighten;

            float rimWidth = lerp( - .05, 1, _RimWidth);
            
            #ifdef POI_AUDIOLINK
                UNITY_BRANCH
                if (poiMods.audioLinkAvailable)
                {
                    rimWidth = clamp(rimWidth + lerp(_AudioLinkRimWidthAdd.x, _AudioLinkRimWidthAdd.y, poiMods.audioLink[_AudioLinkRimWidthBand]), - .05, 1);
                    rimStrength += lerp(_AudioLinkRimEmissionAdd.x, _AudioLinkRimEmissionAdd.y, poiMods.audioLink[_AudioLinkRimEmissionBand]);
                    rimBrighten += lerp(_AudioLinkRimBrightnessAdd.x, _AudioLinkRimBrightnessAdd.y, poiMods.audioLink[_AudioLinkRimBrightnessBand]);
                }
            #endif

            rimWidth -= rimNoise;
            #if defined(PROP_RIMMASK) || !defined(OPTIMIZER_ENABLED)
                float rimMask = POI2D_SAMPLER_PAN(_RimMask, _MainTex, poiUV(poiMesh.uv[_RimMaskUV], _RimMask_ST), _RimMaskPan);
            #else
                float rimMask = 1;
            #endif
            
            if (_RimHideInShadow)
            {
                rimMask = min(rimMask, lerp(1, poiLight.rampedLightMap, _RimHideInShadow));
            }

            #if defined(PROP_RIMTEX) || !defined(OPTIMIZER_ENABLED)
                float4 rimColor = POI2D_SAMPLER_PAN(_RimTex, _MainTex, poiUV(poiMesh.uv[_RimTexUV], _RimTex_ST), _RimTexPan) * float4(poiThemeColor(poiMods, _RimLightColor.rgb, _RimLightColorThemeIndex), _RimLightColor.a);
            #else
                float4 rimColor = float4(poiThemeColor(poiMods, _RimLightColor.rgb, _RimLightColorThemeIndex), _RimLightColor.a);
            #endif
            
            UNITY_BRANCH
            if (_RimHueShiftEnabled)
            {
                rimColor.rgb = hueShift(rimColor.rgb, _RimHueShift + _Time.x * _RimHueShiftSpeed);
            }
            
            rimWidth = max(lerp(rimWidth, rimWidth * lerp(0, 1, poiLight.lightMap - _ShadowMixThreshold) * _ShadowMixWidthMod, _ShadowMix), 0);
            float rim = 1 - smoothstep(min(_RimSharpness, rimWidth), rimWidth, viewDotNormal);
            rim *= _RimLightColor.a * rimColor.a * rimMask;
            poiFragData.emission += rim * lerp(poiFragData.baseColor, rimColor, _RimLightColorBias) * rimStrength;
            poiFragData.baseColor = lerp(poiFragData.baseColor, lerp(poiFragData.baseColor, rimColor, _RimLightColorBias) + lerp(poiFragData.baseColor, rimColor, _RimLightColorBias) * rimBrighten, rim);
        }
    #endif
    #ifdef _RIMSTYLE_UTS2
        void ApplyRimLighting(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight, in PoiMods poiMods)
        {
            //float3 Set_HighColor = (lerp(saturate((Set_FinalBaseColor - _TweakHighColorMask_var)), Set_FinalBaseColor, lerp(_Is_BlendAddToHiColor, 1.0, _Is_SpecularToHighColor)) + lerp(_HighColor_var, (_HighColor_var * ((1.0 - Set_FinalShadowMask) + (Set_FinalShadowMask * _TweakHighColorOnShadow))), _Is_UseTweakHighColorOnShadow));
            #if defined(PROP_SET_RIMLIGHTMASK) || !defined(OPTIMIZER_ENABLED)
                float4 _Set_RimLightMask_var = POI2D_SAMPLER_PAN(_Set_RimLightMask, _MainTex, poiUV(poiMesh.uv[_Set_RimLightMaskUV], _Set_RimLightMask_ST), _Set_RimLightMaskPan);
            #else
                float4 _Set_RimLightMask_var = float4(1.0, 1.0, 1.0, 1.0);
            #endif
            float3 rimColor = float3(poiThemeColor(poiMods, _RimLightColor.rgb, _RimLightColorThemeIndex));
            float3 _Is_LightColor_RimLight_var = lerp(rimColor, (rimColor * poiLight.directColor), _Is_LightColor_RimLight);
            float _RimArea_var = (1.0 - dot(lerp(poiMesh.normals[0], poiMesh.normals[1], _Is_NormalMapToRimLight), poiCam.viewDir));
            float _RimLightPower_var = pow(_RimArea_var, exp2(lerp(3, 0, _RimLight_Power)));
            float _Rimlight_InsideMask_var = saturate(lerp((0.0 + ((_RimLightPower_var - _RimLight_InsideMask) * (1.0 - 0.0)) / (1.0 - _RimLight_InsideMask)), step(_RimLight_InsideMask, _RimLightPower_var), _RimLight_FeatherOff));
            float _VertHalfLambert_var = 0.5 * dot(poiMesh.normals[0], poiLight.direction) + 0.5;
            float3 _LightDirection_MaskOn_var = lerp((_Is_LightColor_RimLight_var * _Rimlight_InsideMask_var), (_Is_LightColor_RimLight_var * saturate((_Rimlight_InsideMask_var - ((1.0 - _VertHalfLambert_var) + _Tweak_LightDirection_MaskLevel)))), _LightDirection_MaskOn);
            float _ApRimLightPower_var = pow(_RimArea_var, exp2(lerp(3, 0, _Ap_RimLight_Power)));
            float3 ApRimColor = float3(poiThemeColor(poiMods, _Ap_RimLightColor.rgb, _RimApColorThemeIndex));
            float3 _RimLight_var = (saturate((_Set_RimLightMask_var.g + _Tweak_RimLightMaskLevel)) * lerp(_LightDirection_MaskOn_var, (_LightDirection_MaskOn_var + (lerp(ApRimColor, (ApRimColor * poiLight.directColor), _Is_LightColor_Ap_RimLight) * saturate((lerp((0.0 + ((_ApRimLightPower_var - _RimLight_InsideMask) * (1.0 - 0.0)) / (1.0 - _RimLight_InsideMask)), step(_RimLight_InsideMask, _ApRimLightPower_var), _Ap_RimLight_FeatherOff) - (saturate(_VertHalfLambert_var) + _Tweak_LightDirection_MaskLevel))))), _Add_Antipodean_RimLight));
            UNITY_BRANCH
            if (_RimHueShiftEnabled)
            {
                _RimLight_var = hueShift(_RimLight_var, _RimHueShift + _Time.x * _RimHueShiftSpeed);
            }
            poiFragData.baseColor = saturate(poiFragData.baseColor + _RimLight_var);
            //Composition: HighColor and RimLight as _RimLight_var

        }
    #endif
#endif

#T#PoiRimLightFunctionCall
#ifdef _GLOSSYREFLECTIONS_OFF
    ApplyRimLighting(poiFragData, poiMesh, poiCam, poiLight, poiMods);
#endif

