12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- Shader "DX11/GreenScreenShader" {
- SubShader {
- Pass {
- CGPROGRAM
- #pragma target 5.0
- #pragma vertex vert
- #pragma fragment frag
- #include "UnityCG.cginc"
- Texture2D _MainTex;
- sampler SampleType;
- struct vs_input {
- float4 pos : POSITION;
- float2 tex : TEXCOORD0;
- };
- StructuredBuffer<float2> depthCoordinates;
- StructuredBuffer<float> bodyIndexBuffer;
- struct ps_input {
- float4 pos : SV_POSITION;
- float2 tex : TEXCOORD0;
- };
- ps_input vert (vs_input v)
- {
- ps_input o;
- o.pos = mul (UNITY_MATRIX_MVP, v.pos);
- o.tex = v.tex;
- // Flip x texture coordinate to mimic mirror.
- o.tex.x = 1 - v.tex.x;
- return o;
- }
- float4 frag (ps_input i, in uint id : SV_InstanceID) : COLOR
- {
- float4 o;
-
- int colorWidth = (int)(i.tex.x * (float)1920);
- int colorHeight = (int)(i.tex.y * (float)1080);
- int colorIndex = (int)(colorWidth + colorHeight * (float)1920);
-
- o = float4(0, 1, 0, 1);
-
- if ((!isinf(depthCoordinates[colorIndex].x) && !isnan(depthCoordinates[colorIndex].x) && depthCoordinates[colorIndex].x != 0) ||
- !isinf(depthCoordinates[colorIndex].y) && !isnan(depthCoordinates[colorIndex].y) && depthCoordinates[colorIndex].y != 0)
- {
- // We have valid depth data coordinates from our coordinate mapper. Find player mask from corresponding depth points.
- float player = bodyIndexBuffer[(int)depthCoordinates[colorIndex].x + (int)(depthCoordinates[colorIndex].y * 512)];
- if (player != 255)
- {
- o = _MainTex.Sample(SampleType, i.tex);
- }
- }
-
- return o;
- }
- ENDCG
- }
- }
- Fallback Off
- }
|