1+ Shader "Vertex Shader Image"
2+ {
3+ Subshader
4+ {
5+ Pass
6+ {
7+ Cull Off
8+ CGPROGRAM
9+ #pragma vertex VSMain
10+ #pragma fragment PSMain
11+ #pragma target 5.0
12+
13+ float2 PolarToCartesian (float2 p)
14+ {
15+ return p.x * float2 (cos (p.y),sin (p.y));
16+ }
17+
18+ float2 CartesianToPolar (float2 p)
19+ {
20+ return float2 (length (p), atan2 (p.y, p.x));
21+ }
22+
23+ float3 Pattern (float2 uv)
24+ {
25+ uv = CartesianToPolar (abs (uv));
26+ uv = (12.0 *uv);
27+ uv = PolarToCartesian (uv);
28+ return float3 (4.0 /abs (uv),uv.x/uv.y);
29+ }
30+
31+ float4 VSMain (uint id:SV_VertexID , out float3 color:TEXCOORD0 ) : SV_POSITION
32+ {
33+ float q = floor (float (id) / 6.0 );
34+ float px = fmod (float (id), 2.0 );
35+ float py = (float (id)-6.0 * floor (float (id)/6.0 )) + 6.0 ;
36+ py = sign (126.0 -py*floor (126.0 /py));
37+ float3 center = float3 (fmod (q,1024.0 ), 0.0 , floor (q/1024.0 ));
38+ float error = 0.0000001 ;
39+ float2 uv = float2 (center.x / 1024.0 , center.z / 1024.0 ) + error;
40+ uv = float2 (2.0 *uv-1.0 );
41+ color = Pattern (uv);
42+ float scale = 0.1 ;
43+ return UnityObjectToClipPos (float4 (float3 (sign (px)-0.5 , 0.0 , sign (py)-0.5 ) * scale + center * scale, 1.0 ));
44+ }
45+
46+ float4 PSMain (float4 vertex:SV_POSITION , float3 color:TEXCOORD0 ) : SV_Target
47+ {
48+ return float4 (color, 1.0 );
49+ }
50+
51+ ENDCG
52+ }
53+ }
54+ }
0 commit comments