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