summaryrefslogtreecommitdiff
path: root/VRCSDK3AvatarsLegacy/Assets/_PoiyomiShaders/Shaders/Includes/CGI_PoiVert.cginc
blob: 2b2aaf90481b23791ab770a90245e303bf4bd6dd (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
#ifndef POI_VERT
    #define POI_VERT
    
    uint _VertexManipulationHeightUV;
    float _VertexUnwrap;
    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), _VertexUnwrap);
        #endif
        applyLocalVertexTransformation(v.normal, v.tangent, v.vertex);
        
        
        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);
        //o.localPos.x *= -1;
        //o.localPos.xz += sin(o.localPos.y * 100 + _Time.y * 5) * .0025;
        
        float2 uvToUse = 0;
        UNITY_BRANCH
        if (_VertexManipulationHeightUV == 0)
        {
            uvToUse = v.uv0.xy;
        }
        UNITY_BRANCH
        if(_VertexManipulationHeightUV == 1)
        {
            uvToUse = v.uv1.xy;
        }
        UNITY_BRANCH
        if(_VertexManipulationHeightUV == 2)
        {
            uvToUse = v.uv2.xy;
        }
        UNITY_BRANCH
        if(_VertexManipulationHeightUV == 3)
        {
            uvToUse = v.uv3.xy;
        }
        
        applyWorldVertexTransformation(o.worldPos, o.localPos, o.normal, uvToUse);
        applyVertexGlitching(o.worldPos, o.localPos);
        applySpawnInVert(o.worldPos, o.localPos, v.uv0.xy);
        applyVertexRounding(o.worldPos, o.localPos);
        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
        
        #if defined(GRAIN)
            o.screenPos = ComputeScreenPos(o.pos);
        #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
        
        return o;
    }
#endif