프로젝트

일반

사용자정보

통계
| 개정판:

t1 / TFDContents / Assets / KinectDemos / VisualizerDemo / Shaders / HoloTriangles.shader @ 3

이력 | 보기 | 이력해설 | 다운로드 (4.02 KB)

1
// 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
	}