unity Kinect v2 with MS-SDK20绿屏抠像shader修改 透明背景
2015-08-26 10:21
555 查看
用的是kinect2.0
Kinect v2 with MS-SDK20插件
例子中的默认greenscreen里面是绿色的,要求改成透明的,下面直接上代码
改完后放背景看看吧 是不是透明了
Kinect v2 with MS-SDK20插件
例子中的默认greenscreen里面是绿色的,要求改成透明的,下面直接上代码
改完后放背景看看吧 是不是透明了
Shader "DX11/GreenScreenShader" { SubShader { //透明就需要这个 Blend SrcAlpha OneMinusSrcAlpha Tags {"Queue"="AlphaTest" } 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, 0, 0, 0); //<-- Here I set alpha to zero in my version // to feed into Transparent/cutout/diffuse 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); }else o.a = o.rgb; } // float4 sampler2[9]; // float4 minValue = float4(255,255,255,255); // for (int i = 0; i < 9; ++i) // { //sampler2[i] = texture2D(SampleType, gl_TexCoord[0].st + tc_offset[i]); //minValue = min(minValue, sampler2[i]); // } return o; } ENDCG } } Fallback Off }
相关文章推荐
- 如果在 unity中滚动 3D 骰子
- Unity Game Programming AI(1)人工智能导论
- Unity3D圣典学习【2】之CharacterController
- Unity Notes调制粒子系统的颗粒的最大数目
- Unity 热更新之AssetBundle
- Unity3d动画脚本 Animation Scripting(深入了解游戏引擎中的动画处理原理)
- Unity3D官方案例--太空射击游戏总结
- Unity之弹床(蹦床效果)
- Unity3D中引用Spine2D动画研究学习(一)
- Unity使用Animator实现人物头部朝向鼠标
- Unity中英文字长度
- Unity3D——个人游戏Car的游戏中控制
- Unity Shader之Billboard算法
- Unity3D Terrain
- Unity3D EasyTouch 初步使用教程(详细)
- [Unity3D]unity3d 4.3.7更新之后的bug
- unity3d5.1物体椭圆旋转选择界面实现(一)
- unity3d Mecanim动画系统获取动画层、动画状态等方法
- 在 Unity 中使用 Android SDK
- [Unity3D]Unity3D游戏开发MatchTarget的作用攀登效果实现