summaryrefslogtreecommitdiff
path: root/VRCSDK3AvatarsLegacy/Assets/Avatars/Auri/materials/OptimizedShaders/332c2ca0/Includes/CGI_PoiVert.cginc
blob: eb333c99df96ab55da7e0ae7a2bd82e3da6706d4 (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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#ifndef POI_VERT
    #define POI_VERT
    
    float _VertexManipulationHeightUV;
    float _VertexUnwrap;
    
    #define PM UNITY_MATRIX_P
    
    inline float4 CalculateFrustumCorrection()
    {
        float x1 = -PM._31 / (PM._11 * PM._34);
        float x2 = -PM._32 / (PM._22 * PM._34);
        return float4(x1, x2, 0, PM._33 / PM._34 + x1 * PM._13 + x2 * PM._23);
    }
    
    v2f vert(appdata v)
    {
        UNITY_SETUP_INSTANCE_ID(v);
        v2f o;
        #ifdef _COLOROVERLAY_ON
            v.vertex.xyz = lerp(v.vertex.xyz, float3(v.uv0.x - .5, v.uv0.y - .5, 0), float(0));
        #endif
        #ifdef RALIV_PENETRATION
            applyRalivDynamicOrifaceSystem(v);
        #endif
        #ifdef AUTO_EXPOSURE
            applyLocalVertexTransformation(v.normal, v.tangent, v.vertex);
        #endif
        
        UNITY_INITIALIZE_OUTPUT(v2f, o);
        UNITY_TRANSFER_INSTANCE_ID(v, o);
        UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
        
        
        #ifdef _REQUIRE_UV2 //POI_MIRROR
            applyMirrorRenderVert(v.vertex);
        #endif
        
        TANGENT_SPACE_ROTATION;
        o.localPos = v.vertex;
        o.worldPos = mul(unity_ObjectToWorld, o.localPos);
        o.normal = UnityObjectToWorldNormal(v.normal);
        
        #ifdef RALIV_PENETRATION
            applyRalivDynamicPenetrationSystem(o.localPos.rgb, o.normal.rgb, v);
        #endif
        
        //o.localPos.x *= -1;
        //o.localPos.xz += sin(o.localPos.y * 100 + _Time.y * 5) * .0025;
        
        float2 uvToUse = 0;
        
        if (float(0) == 0)
        {
            uvToUse = v.uv0.xy;
        }
        
        if(float(0) == 1)
        {
            uvToUse = v.uv1.xy;
        }
        
        if(float(0) == 2)
        {
            uvToUse = v.uv2.xy;
        }
        
        if(float(0) == 3)
        {
            uvToUse = v.uv3.xy;
        }
        #ifdef AUTO_EXPOSURE
            applyWorldVertexTransformation(o.worldPos, o.localPos, o.normal, uvToUse);
        #endif
        applyVertexGlitching(o.worldPos, o.localPos);
        applySpawnInVert(o.worldPos, o.localPos, v.uv0.xy);
        #ifdef AUTO_EXPOSURE
            applyVertexRounding(o.worldPos, o.localPos);
        #endif
        o.pos = UnityObjectToClipPos(o.localPos);
        o.grabPos = ComputeGrabScreenPos(o.pos);
        o.uv0.xy = v.uv0.xy;
        o.uv0.zw = v.uv1.xy;
        o.uv1.xy = v.uv2.xy;
        o.uv1.zw = v.uv3.xy;
        o.vertexColor = v.color;
        o.modelPos = mul(unity_ObjectToWorld, float4(0, 0, 0, 1));
        o.tangent = float4(UnityObjectToWorldDir(v.tangent.xyz), v.tangent.w);
        
        #ifdef POI_BULGE
            bulgyWolgy(o);
        #endif
        
        
        o.angleAlpha = 1;
        #ifdef _SUNDISK_NONE //POI_RANDOM
            o.angleAlpha = ApplyAngleBasedRendering(o.modelPos, o.worldPos);
        #endif
        
        #if defined(LIGHTMAP_ON)
            o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw;
        #endif
        #ifdef DYNAMICLIGHTMAP_ON
            o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw;
        #endif
        
        UNITY_TRANSFER_SHADOW(o, o.uv0.xy);
        UNITY_TRANSFER_FOG(o, o.pos);
        
        #if defined(_PARALLAXMAP) // POI_PARALLAX
            v.tangent.xyz = normalize(v.tangent.xyz);
            v.normal = normalize(v.normal);
            float3x3 objectToTangent = float3x3(
                v.tangent.xyz,
                cross(v.normal, v.tangent.xyz) * v.tangent.w,
                v.normal
            );
            o.tangentViewDir = mul(objectToTangent, ObjSpaceViewDir(v.vertex));
        #endif
        
        #ifdef POI_META_PASS
            o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST);
        #endif
        
        #if defined(GRAIN)
            float4 worldDirection;
            
            worldDirection.xyz = o.worldPos.xyz - _WorldSpaceCameraPos;
            worldDirection.w = dot(o.pos, CalculateFrustumCorrection());
            o.worldDirection = worldDirection;
        #endif
        
        return o;
    }
#endif