#T#PoiInternalParallaxProperties
//ifex _PoiInternalParallax==0
[HideInInspector] m_start_internalparallax (" Internal Parallax--{reference_property:_PoiInternalParallax}", Float) = 0
[HideInInspector][ThryToggle(POI_INTERNALPARALLAX)]_PoiInternalParallax ("Enable", Float) = 0

[Enum(Basic, 0, HeightMap, 1)] _ParallaxInternalHeightmapMode ("Parallax Mode", Int) = 0
[ToggleUI]_ParallaxInternalHeightFromAlpha ("HeightFromAlpha", Float) = 0

[sRGBWarning(true)][ThryTexture]_ParallaxInternalMap ("Internal Map--{reference_properties:[_ParallaxInternalMapPan]}", 2D) = "black" { }
[HideInInspector][Vector2]_ParallaxInternalMapPan ("Panning", Vector) = (0, 0, 0, 0)

[sRGBWarning][ThryTexture]_ParallaxInternalMapMask ("Mask--{reference_properties:[_ParallaxInternalMapMaskPan, _ParallaxInternalMapMaskUV, _ParallaxInternalMapMaskChannel]}", 2D) = "white" { }
[HideInInspector][Vector2]_ParallaxInternalMapMaskPan ("Panning", Vector) = (0, 0, 0, 0)
[HideInInspector][Enum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, distorteduv0, 4)] _ParallaxInternalMapMaskUV ("UV", Int) = 0
[HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3)]_ParallaxInternalMapMaskChannel ("Channel", Float) = 0
[IntRange]_ParallaxInternalIterations ("Parallax Internal Iterations", Range(1, 50)) = 4
_ParallaxInternalMinDepth ("Min Depth", Float) = 0
_ParallaxInternalMaxDepth ("Max Depth", Float) = 0.1
_ParallaxInternalMinFade ("Min Depth Brightness", Range(0, 5)) = 1.0
_ParallaxInternalMaxFade ("Max Depth Brightness", Range(0, 5)) = 0.1
_ParallaxInternalMinColor ("Min Depth Color--{reference_property:_ParallaxInternalMinColorThemeIndex}", 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)] _ParallaxInternalMinColorThemeIndex ("", Int) = 0
_ParallaxInternalMaxColor ("Max Depth Color--{reference_property:_ParallaxInternalMaxColorThemeIndex}", 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)] _ParallaxInternalMaxColorThemeIndex ("", Int) = 0
// [Vector2]_ParallaxInternalPanSpeed ("Pan Speed", Vector) = (0, 0, 0, 0)
[Vector2]_ParallaxInternalPanDepthSpeed ("Per Level Speed Multiplier", Vector) = (0, 0, 0, 0)

[Space(4)]
[ThryToggleUI(true)]_ParallaxInternalHueShiftEnabled ("<size=13><b>  Hue Shift</b></size>", Float) = 0
_ParallaxInternalHueShift ("Hue Shift--{condition_showS:(_ParallaxInternalHueShiftEnabled==1)}", Range(0, 1)) = 0
_ParallaxInternalHueShiftSpeed ("Hue Shift Speed--{condition_showS:(_ParallaxInternalHueShiftEnabled==1)}", Float) = 0
_ParallaxInternalHueShiftPerLevel ("Hue Shift Per Level--{condition_showS:(_ParallaxInternalHueShiftEnabled==1)}", Float) = 0
// _ParallaxInternalHueShiftPerLevelSpeed ("Hue Shift Per Level Speed--{condition_showS:(_ParallaxInternalHueShiftEnabled==1)}", Float) = 0

[HideInInspector] m_end_internalparallax ("Internal Parallax", Float) = 0
//endex

#T#PoiInternalParallaxKeywords
//ifex _PoiInternalParallax==0
#pragma shader_feature_local POI_INTERNALPARALLAX
//endex

#T#PoiInternalParallaxVariables
//ifex _PoiInternalParallax==0
#ifdef POI_INTERNALPARALLAX
    #if defined(PROP_PARALLAXINTERNALMAP) || !defined(OPTIMIZER_ENABLED)
        Texture2D _ParallaxInternalMap;
    #endif
    float4 _ParallaxInternalMap_ST;
    float2 _ParallaxInternalMapPan;

    #if defined(PROP_PARALLAXINTERNALMAPMASK) || !defined(OPTIMIZER_ENABLED)
        Texture2D _ParallaxInternalMapMask;
    #endif
    float4 _ParallaxInternalMapMask_ST;
    float2 _ParallaxInternalMapMaskPan;
    float _ParallaxInternalMapMaskUV;
    float _ParallaxInternalMapMaskChannel;

    float _ParallaxInternalIterations;
    float _ParallaxInternalMinDepth;
    float _ParallaxInternalMaxDepth;
    float _ParallaxInternalMinFade;
    float _ParallaxInternalMaxFade;
    float4 _ParallaxInternalMinColor;
    float4 _ParallaxInternalMaxColor;
    float _ParallaxInternalMinColorThemeIndex;
    float _ParallaxInternalMaxColorThemeIndex;
    // float4 _ParallaxInternalPanSpeed;
    float4 _ParallaxInternalPanDepthSpeed;
    float _ParallaxInternalHeightmapMode;
    float _ParallaxInternalHeightFromAlpha;

    float _ParallaxInternalHueShiftEnabled;
    float _ParallaxInternalHueShift;
    float _ParallaxInternalHueShiftSpeed;
    float _ParallaxInternalHueShiftPerLevel;
    // float _ParallaxInternalHueShiftPerLevelSpeed;
#endif
//endex

#T#PoiInternalParallaxFunctions
//ifex _PoiInternalParallax==0
#ifdef POI_INTERNALPARALLAX
    void applyInternalParallax(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods)
    {
        float3 parallax = 0;
        
        for (int j = _ParallaxInternalIterations-1; j >= 0; j --)
        {
            float ratio = saturate((float)j / max(_ParallaxInternalIterations-1, 1));
            float2 parallaxOffset = _Time.y * (_ParallaxInternalMapPan + ratio * _ParallaxInternalPanDepthSpeed);
            float fade = lerp(_ParallaxInternalMinFade, _ParallaxInternalMaxFade, ratio);
            fade = pow(fade, 2.2);
            #if defined(PROP_PARALLAXINTERNALMAP) || !defined(OPTIMIZER_ENABLED)
                float4 parallaxColor = UNITY_SAMPLE_TEX2D_SAMPLER(_ParallaxInternalMap, _MainTex, TRANSFORM_TEX(poiMesh.uv[0], _ParallaxInternalMap) + (lerp(_ParallaxInternalMinDepth, _ParallaxInternalMaxDepth, ratio)) * - (poiCam.tangentViewDir.xy / (poiCam.tangentViewDir.z)) + parallaxOffset);
            #else
                float4 parallaxColor = 0;
            #endif
            float3 minColor = poiThemeColor(poiMods, _ParallaxInternalMinColor.rgb, _ParallaxInternalMinColorThemeIndex);
            float3 maxColor = poiThemeColor(poiMods, _ParallaxInternalMaxColor.rgb, _ParallaxInternalMaxColorThemeIndex);
            float3 parallaxTint = lerp(minColor, maxColor, ratio);
            float parallaxHeight;
            if(_ParallaxInternalHeightFromAlpha)
            {
                parallaxTint *= parallaxColor.rgb;
                parallaxHeight = parallaxColor.a;
            }
            else
            {
                parallaxHeight = parallaxColor.r;
            }
            // parallaxTint = hueShift(parallaxTint, frac((ratio * _ParallaxInternalHueShiftPerLevel) + (ratio * _ParallaxInternalHueShiftPerLevelSpeed * _Time.x)) * _ParallaxInternalHueShiftEnabled);
            parallaxTint = hueShift(parallaxTint, frac(ratio * _ParallaxInternalHueShiftPerLevel) * _ParallaxInternalHueShiftEnabled);
            //float parallaxColor *= lerp(_ParallaxInternalMinColor, _ParallaxInternalMaxColor, 1 - ratio);
            UNITY_BRANCH
            if (_ParallaxInternalHeightmapMode == 1)
            {
                parallax = lerp(parallax, parallaxTint * fade, parallaxHeight >= 1 - ratio);
            }
            else
            {
                parallax += parallaxTint * parallaxHeight * fade;
            }
        }
        parallax = hueShift(parallax, frac(_ParallaxInternalHueShift + _ParallaxInternalHueShiftSpeed * _Time.x) * _ParallaxInternalHueShiftEnabled);
        //parallax /= _ParallaxInternalIterations;
        #if defined(PROP_PARALLAXINTERNALMAPMASK) || !defined(OPTIMIZER_ENABLED)
            poiFragData.baseColor.rgb += parallax * POI2D_SAMPLER_PAN(_ParallaxInternalMapMask, _MainTex, poiUV(poiMesh.uv[_ParallaxInternalMapMaskUV], _ParallaxInternalMapMask_ST), _ParallaxInternalMapMaskPan)[_ParallaxInternalMapMaskChannel];
        #else
            poiFragData.baseColor.rgb += parallax;
        #endif
    }
#endif
//endex

#T#PoiInternalParallaxFunctionCalls
//ifex _PoiInternalParallax==0
#ifdef POI_INTERNALPARALLAX
    applyInternalParallax(poiFragData, poiMesh, poiCam, poiMods);
#endif
//endex