summaryrefslogtreecommitdiff
path: root/VRCSDK3Worlds/Assets/_PoiyomiShaders/Shaders/Pro/Includes/CGI_PoiAlphaToCoverage.cginc
blob: 3abae3939a9798193e10b1fe603aec511587dfa3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#ifndef POI_ALPHA_TO_COVERAGE
    #define POI_ALPHA_TO_COVERAGE
    
    half _MainMipScale;
    float _MainAlphaToCoverage;
    
    float CalcMipLevel(float2 texture_coord)
    {
        float2 dx = ddx(texture_coord);
        float2 dy = ddy(texture_coord);
        float delta_max_sqr = max(dot(dx, dx), dot(dy, dy));
        
        return 0.5 * log2(delta_max_sqr);
    }
    
    void ApplyAlphaToCoverage(inout float4 finalColor)
    {
        // Force Model Opacity to 1 if desired
        UNITY_BRANCH
        if (_Mode == 1)
        {
            UNITY_BRANCH
            if(_MainAlphaToCoverage)
            {
                // rescale alpha by mip level
                finalColor.a *= 1 + max(0, CalcMipLevel(poiMesh.uv[0] * _MainTex_TexelSize.zw)) * _MainMipScale;
                // rescale alpha by partial derivative
                finalColor.a = (finalColor.a - _Cutoff) / max(fwidth(finalColor.a), 0.0001) + _Cutoff;
            }
        }
    }
#endif