summaryrefslogtreecommitdiff
path: root/VRCSDK3AvatarsLegacy/Assets/Avatars/Naro/Materials/OptimizedShaders/BlackShoe/CGI_PoiMetal.cginc
blob: cc30ecad82b847d8458998a9c10a5b8e5b17e59e (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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#ifndef POI_METAL
    #define POI_METAL
    samplerCUBE _CubeMap;
    float _SampleWorld;
    POI_TEXTURE_NOSAMPLER(_MetallicMask);
    POI_TEXTURE_NOSAMPLER(_SmoothnessMask);
    float _Metallic;
    float _InvertSmoothness;
    float _Smoothness;
    float _EnableMetallic;
    float3 _MetalReflectionTint;
    POI_TEXTURE_NOSAMPLER(_MetallicTintMap);
    float3 finalreflections;
    float metalicMap;
    float3 reflection;
    float roughness;
    float lighty_boy_uwu_var;
    bool shouldMetalHappenBeforeLighting()
    {
        float4 envSample = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, poiCam.reflectionDir, roughness * UNITY_SPECCUBE_LOD_STEPS);
        bool probeExists = !(unity_SpecCube0_HDR.a == 0 && envSample.a == 0);
        return probeExists && !float(1);
    }
    float3 fresnelRelflection(in float4 albedo)
    {
        half3 dotNV = 1 - abs(poiLight.nDotV);
        half f = dotNV * dotNV * dotNV * dotNV;
        return lerp(lerp(DielectricSpec.rgb, albedo.rgb, metalicMap), saturate(1 - roughness + metalicMap), f);
    }
    void calculateMetallicness()
    {
        metalicMap = POI2D_SAMPLER_PAN(_MetallicMask, _MainTex, poiMesh.uv[float(0)], float4(0,0,0,0)) * float(1);
    }
    void ApplyMetallics(inout float4 finalColor, in float4 albedo)
    {
        #ifdef FORWARD_BASE_PASS
            float smoothnessMap = (POI2D_SAMPLER_PAN(_SmoothnessMask, _MainTex, poiMesh.uv[float(0)], float4(0,0,0,0)));
            #ifdef POI_BLACKLIGHT
                if (_BlackLightMaskMetallic != 4)
                {
                    metalicMap *= blackLightMask[_BlackLightMaskMetallic];
                    smoothnessMap *= blackLightMask[_BlackLightMaskMetallic];
                }
            #endif
            if(float(1) == 1)
            {
                smoothnessMap = 1 - smoothnessMap;
            }
            smoothnessMap *= float(1);
            roughness = 1 - smoothnessMap;
            Unity_GlossyEnvironmentData envData;
            envData.roughness = roughness;
            envData.reflUVW = BoxProjection(
                poiCam.reflectionDir, poiMesh.worldPos.xyz,
                unity_SpecCube0_ProbePosition,
                unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax
            );
            float3 probe0 = Unity_GlossyEnvironment(
                UNITY_PASS_TEXCUBE(unity_SpecCube0), unity_SpecCube0_HDR, envData
            );
            envData.reflUVW = BoxProjection(
                poiCam.reflectionDir, poiMesh.worldPos.xyz,
                unity_SpecCube1_ProbePosition,
                unity_SpecCube1_BoxMin, unity_SpecCube1_BoxMax
            );
            float interpolator = unity_SpecCube0_BoxMin.w;
            
            if(interpolator < 0.99999)
            {
                float3 probe1 = Unity_GlossyEnvironment(
                    UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0),
                    unity_SpecCube0_HDR, envData
                );
                reflection = lerp(probe1, probe0, interpolator);
            }
            else
            {
                reflection = probe0;
            }
            float reflecty_lighty_boy_uwu_var_2 = 1.0 / (roughness * roughness + 1.0);
            half4 tintMap = POI2D_SAMPLER_PAN(_MetallicTintMap, _MainTex, poiMesh.uv[float(0)], float4(0,0,0,0));
            finalColor.rgb *= (1 - metalicMap * tintMap.a);
            finalColor.rgb += reflecty_lighty_boy_uwu_var_2 * reflection.rgb * fresnelRelflection(albedo) * float4(1,1,1,1) * tintMap.rgb * tintMap.a;
        #endif
    }
    void ApplyMetallicsFake(inout float4 finalColor, in float4 albedo)
    {
        #ifdef FORWARD_BASE_PASS
            metalicMap = POI2D_SAMPLER_PAN(_MetallicMask, _MainTex, poiMesh.uv[float(0)], float4(0,0,0,0)) * float(1);
            float smoothnessMap = (POI2D_SAMPLER_PAN(_SmoothnessMask, _MainTex, poiMesh.uv[float(0)], float4(0,0,0,0)));
            #ifdef POI_BLACKLIGHT
                if(_BlackLightMaskMetallic != 4)
                {
                    metalicMap *= blackLightMask[_BlackLightMaskMetallic];
                    smoothnessMap *= blackLightMask[_BlackLightMaskMetallic];
                }
            #endif
            if(float(1) == 1)
            {
                smoothnessMap = 1 - smoothnessMap;
            }
            smoothnessMap *= float(1);
            roughness = 1 - smoothnessMap;
            reflection = texCUBElod(_CubeMap, float4(poiCam.reflectionDir, roughness * UNITY_SPECCUBE_LOD_STEPS));
            float reflecty_lighty_boy_uwu_var_2 = 1.0 / (roughness * roughness + 1.0);
            half4 tintMap = POI2D_SAMPLER_PAN(_MetallicTintMap, _MainTex, poiMesh.uv[float(0)], float4(0,0,0,0));
            finalColor.rgb *= (1 - metalicMap * tintMap.a);
            finalColor.rgb += reflecty_lighty_boy_uwu_var_2 * reflection.rgb * fresnelRelflection(albedo) * float4(1,1,1,1) * tintMap.rgb * tintMap.a;
        #endif
    }
#endif