summaryrefslogtreecommitdiff
path: root/VRCSDK3AvatarsLegacy/Assets/Avatars/Auri/materials/OptimizedShaders/nails/Includes/CGI_PoiVert.cginc
blob: a2486f3b29e668a28b21c104c35d5ab9135a04f2 (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
136
137
#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)).xyz;
    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);
    
    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));
    
    #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