프로젝트

일반

사용자정보

통계
| 개정판:

t1 / TFDContents / Assets / Resources / DepthShader.shader @ 9

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

1
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
2

    
3
Shader "Kinect/DepthShader" {
4
    Properties {
5
        _MainTex ("Base (RGB)", 2D) = "black" {}
6
    }
7
    
8
	SubShader {
9
		Pass {
10
			ZTest Always Cull Off ZWrite Off
11
			Fog { Mode off }
12
		
13
			CGPROGRAM
14
			#pragma target 5.0
15
			//#pragma enable_d3d11_debug_symbols
16

    
17
			#pragma vertex vert
18
			#pragma fragment frag
19

    
20
			#include "UnityCG.cginc"
21

    
22
			uniform sampler2D _MainTex;
23
			uniform float _TexResX;
24
			uniform float _TexResY;
25
			uniform float _TotalPoints;
26
			uniform int _FirstUserIndex;
27

    
28
			StructuredBuffer<float> _DepthBuffer;
29
			StructuredBuffer<float> _HistBuffer;
30
			StructuredBuffer<float> _BodyIndexBuffer;
31

    
32
			struct v2f {
33
				float4 pos : SV_POSITION;
34
			    float2 uv : TEXCOORD0;
35
			};
36

    
37
			v2f vert (appdata_base v)
38
			{
39
				v2f o;
40
				
41
				o.pos = UnityObjectToClipPos (v.vertex);
42
				o.uv = v.texcoord;
43
				
44
				return o;
45
			}
46

    
47
			float4 frag (v2f i) : COLOR
48
			{
49
				int dx = (int)(i.uv.x * _TexResX);
50
				int dy = (int)(i.uv.y * _TexResY);
51
				int di = (int)(dx + dy * _TexResX);
52
				
53
				//float player = tex2D(_MainTex, i.uv).w;
54
				//int playerIndex = (int)(player * 255);
55
				
56
				float playerIndex = (int)_BodyIndexBuffer[di];
57
				
58
				//if (player != 0)
59
				if (playerIndex != 255)
60
				{
61
					int depth = (int)_DepthBuffer[di];
62
					float hist = 1 - (_HistBuffer[depth] / _TotalPoints);
63
					
64
					if((playerIndex % 8) == _FirstUserIndex)
65
					{
66
						return float4(hist, hist, 0, 1);  // yellow
67
					}
68
					else
69
					{
70
						switch(playerIndex % 4)
71
						{
72
							case 0:
73
								return float4(hist, 0, 0, 0.9);  // red
74
							case 1:
75
								return float4(0, hist, 0, 0.9);  // green
76
							case 2:
77
								return float4(0, 0, hist, 0.9);  // blue
78
							case 3:
79
								return float4(hist, 0, hist, 0.9);  // magenta
80
						}
81
					}
82
					
83
					return float4(hist, hist, hist, 1); // white
84
				}
85
//				else
86
//				{
87
//					float depth = _DepthBuffer[di];
88
//					if(depth == 0) depth = 5000;
89
//					float hist = 1 - depth / 5000;
90
//					
91
//					return float4(hist, hist, hist, 1); // gray
92
//				}
93
				
94
				return float4(0, 0, 0, 0);  // invisible
95
			}
96

    
97
			ENDCG
98
		}
99
	}
100

    
101
	Fallback Off
102
}