t1 / TFDContents / Assets / KinectDemos / VisualizerDemo / Shaders / HoloTriangles.shader @ 3
이력 | 보기 | 이력해설 | 다운로드 (4.02 KB)
1 | 3 | KTH | // Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld' |
---|---|---|---|
2 | // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' |
||
3 | |||
4 | Shader "Custom/HoloTriangles" { |
||
5 | Properties |
||
6 | { |
||
7 | _Color("Main Color", Color) = (0.2, 0.5, 1.0) |
||
8 | _Speed("Speed", Range(0.01, 10)) = 1 |
||
9 | _TrianglesScale("Triangles Scale", Range(0.01, 10)) = 1 |
||
10 | _RangeScale("Range Scale", Range(0.01, 10)) = 1 |
||
11 | _Center("Center", Vector) = (0.0, -1.0, 3.0, 1.0) |
||
12 | |||
13 | _MainTex ("Base (RGB)", 2D) = "white" {} |
||
14 | } |
||
15 | SubShader |
||
16 | { |
||
17 | Tags{ "RenderType" = "Opaque" } |
||
18 | Blend SrcAlpha OneMinusSrcAlpha |
||
19 | LOD 100 |
||
20 | |||
21 | Pass |
||
22 | { |
||
23 | CGPROGRAM |
||
24 | #pragma target 5.0 |
||
25 | #pragma vertex vert |
||
26 | #pragma fragment frag |
||
27 | #include "UnityCG.cginc" |
||
28 | |||
29 | #define pi 3.14159265358979 |
||
30 | #define reciproce_sqrt3 0.57735026918962576450914878050196 |
||
31 | |||
32 | half3 _Color; |
||
33 | float _Speed; |
||
34 | float _TrianglesScale; |
||
35 | float _RangeScale; |
||
36 | float4 _Center; |
||
37 | |||
38 | sampler2D _MainTex; |
||
39 | |||
40 | struct appdata |
||
41 | { |
||
42 | float4 vertex : POSITION; |
||
43 | float2 uv : TEXCOORD0; |
||
44 | }; |
||
45 | |||
46 | struct v2f |
||
47 | { |
||
48 | float4 vertex : SV_POSITION; |
||
49 | float4 world : TEXCOORD1; |
||
50 | }; |
||
51 | |||
52 | v2f vert(appdata v) |
||
53 | { |
||
54 | v2f o; |
||
55 | o.vertex = UnityObjectToClipPos(v.vertex); // UnityObjectToClipPos(v.vertex); |
||
56 | o.world = mul(unity_ObjectToWorld, v.vertex); // mul(unity_ObjectToWorld, v.vertex); |
||
57 | return o; |
||
58 | } |
||
59 | |||
60 | float planeDistance = 0.2; |
||
61 | float offset; |
||
62 | |||
63 | float r(float n) |
||
64 | { |
||
65 | return frac(abs(sin(n*55.753)*367.34)); |
||
66 | } |
||
67 | |||
68 | float r(float2 n) |
||
69 | { |
||
70 | return r(dot(n, float2(2.46, -1.21))); |
||
71 | } |
||
72 | |||
73 | float3 smallTrianglesColor(float3 pos) |
||
74 | { |
||
75 | float a = (radians(60.0)); |
||
76 | float zoom = 0.125; |
||
77 | float2 c = (pos.xy + float2(0.0, pos.z)) * float2(sin(a), 1.0) / _TrianglesScale;//scaled coordinates |
||
78 | c = ((c + float2(c.y, 0.0)*cos(a)) / zoom) + float2(floor((c.x - c.y*cos(a)) / zoom*4.0) / 4.0, 0.0);//Add rotations |
||
79 | float type = (r(floor(c*4.0))*0.2 + r(floor(c*2.0))*0.3 + r(floor(c))*0.5);//Randomize type |
||
80 | type += 0.3 * sin(_Time.y*5.0*type); |
||
81 | |||
82 | float l = min(min((1.0 - (2.0 * abs(frac((c.x - c.y)*4.0) - 0.5))), |
||
83 | (1.0 - (2.0 * abs(frac(c.y * 4.0) - 0.5)))), |
||
84 | (1.0 - (2.0 * abs(frac(c.x * 4.0) - 0.5)))); |
||
85 | l = smoothstep(0.06, 0.04, l); |
||
86 | |||
87 | return lerp(type, l, 0.3); |
||
88 | } |
||
89 | |||
90 | float3 largeTrianglesColor(float3 pos) |
||
91 | { |
||
92 | float a = (radians(60.0)); |
||
93 | float zoom = 0.5; |
||
94 | float2 c = (pos.xy + float2(0.0, pos.z)) * float2(sin(a), 1.0) / _TrianglesScale;//scaled coordinates |
||
95 | c = ((c + float2(c.y, 0.0)*cos(a)) / zoom) + float2(floor((c.x - c.y*cos(a)) / zoom*4.0) / 4.0, 0.0);//Add rotations |
||
96 | |||
97 | float l = min(min((1.0 - (2.0 * abs(frac((c.x - c.y)*4.0) - 0.5))), |
||
98 | (1.0 - (2.0 * abs(frac(c.y * 4.0) - 0.5)))), |
||
99 | (1.0 - (2.0 * abs(frac(c.x * 4.0) - 0.5)))); |
||
100 | l = smoothstep(0.03, 0.02, l); |
||
101 | |||
102 | return lerp(0.01, l, 1.0); |
||
103 | } |
||
104 | |||
105 | //--------------------------------------------------------------- |
||
106 | // Material |
||
107 | // |
||
108 | // Defines the material (colors, shading, pattern, texturing) of the model |
||
109 | // at every point based on its position and normal. In this case, it simply |
||
110 | // returns a constant yellow color. |
||
111 | //------------------------------------------------------------------------ |
||
112 | float3 doMaterial(in float3 pos, in float3 midPos) |
||
113 | { |
||
114 | float d = length(pos.xz - midPos.xz) + pos.y - midPos.y; |
||
115 | d /= _RangeScale; |
||
116 | float border = fmod(_Time.y * _Speed, 5.0); |
||
117 | |||
118 | float3 c1 = largeTrianglesColor(pos); |
||
119 | float3 c2 = smallTrianglesColor(pos); |
||
120 | |||
121 | // Small rim |
||
122 | float3 c = float3(1.0, 1.0, 1.0) * smoothstep(border - 0.2, border, d); |
||
123 | // Large Triangles to all |
||
124 | c += c1; |
||
125 | // Small triangle slightly after front |
||
126 | c += c2 * smoothstep(border - 0.4, border - 0.6, d); |
||
127 | // Cutoff front |
||
128 | c *= smoothstep(border, border - 0.05, d); |
||
129 | // Cutoff back |
||
130 | c *= smoothstep(border - 3.0, border - 0.5, d); |
||
131 | // fade out |
||
132 | c *= smoothstep(5.0, 4.0, border); |
||
133 | |||
134 | return c *_Color; |
||
135 | } |
||
136 | |||
137 | fixed4 frag(v2f i) : SV_Target |
||
138 | { |
||
139 | float3 c = doMaterial(i.world.xyz, _Center.xyz); |
||
140 | return float4(c, length(c)); |
||
141 | } |
||
142 | ENDCG |
||
143 | } |
||
144 | } |
||
145 | } |