struct InputData { float4 vertex : POSITION; float4 color : COLOR; //Vertex Color float2 uvd : TEXCOORD0; //DisplayUV float2 uvs : TEXCOORD1; //ShadeUV UNITY_VERTEX_INPUT_INSTANCE_ID }; struct v2f { //SV so the Console devs don't complain lol float4 vertex : SV_POSITION; float4 color : COLOR; float2 uvd : TEXCOORD0; float2 uvs : TEXCOORD1; UNITY_VERTEX_INPUT_INSTANCE_ID }; v2f vert(InputData i) { v2f o; //Use vertex program indexed for this object UNITY_SETUP_INSTANCE_ID(i); //Get all instanced variables float irot = UNITY_ACCESS_INSTANCED_PROP(Props, _ItemRot); float ipx = UNITY_ACCESS_INSTANCED_PROP(Props, _ItemPosX); float ipy = UNITY_ACCESS_INSTANCED_PROP(Props, _ItemPosY); float iscl = UNITY_ACCESS_INSTANCED_PROP(Props, _ItemScale); //transfer info from host to GPU as instance UNITY_TRANSFER_INSTANCE_ID(i, o); float r = radians(irot); float s = sin(r); float c = cos(r); //Rotation matrix (y) float3x3 vmat = { c,0,s,0,1,0,-s,0,c }; i.vertex.xyz = mul(vmat, i.vertex.xyz); //Animation offset i.vertex.xz += float2(ipx, ipy) - 0.5; o.vertex = UnityObjectToClipPos(i.vertex * iscl); o.uvd = TRANSFORM_TEX(i.uvd, _DispTex); o.uvs = TRANSFORM_TEX(i.uvs, _ShadeTex); o.color = i.color; return o; }