unity Kinect v2 with MS-SDK20绿屏抠像shader修改 透明背景

用的是kinect2.0

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
} 

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 15:57:37

unity Kinect v2 with MS-SDK20绿屏抠像shader修改 透明背景的相关文章

Kinect V2程序设计(C++) Color篇

Kinect SDK v2预览版,获取数据的基本流程的说明.以及取得Color图像的示例程序的介绍. 上一节,是关于当前型号Kinect for Windows(后面称作Kinect v1)和次世代型的Kinect for Windows的开发者预览版(后面称作Kinect v2 预览版)的配置比较和介绍. 从这一节开始,是Kinect的各种数据的取得方法的比较和介绍. Color Camera Kinect和通常的Web摄像头一样,搭载了 Color Camera,可以取得Color图像.关于

【Unity/Kinect】手势识别Gesture

在Unity的AssetStore官方商店下载Kinect v2 Examples案例包,参考KinectDemos/GestureDemo这个文件夹下的例子. 自定义一个类,实现KinectGestures.GestureListenerInterface接口.参考案例中的CubeGestureListener中的用法.下面演示监听SwipeLeft向左划,SwipeRight向右划,SwipeUp向上划的手势Gesture.其中包含了一些修改界面UI显示当前手势状态等功能,如不需要可以去掉(

【翻译】Kinect v2程序设计(C++-) AudioBeam篇

Kinect v2,Microphone Array可以用来对于水平面音源方向的推测(AudioBeam)和语音识别(Speech Recognition).这一节是介绍如何取得AudioBeam. 上一节,介绍如何使用通过Kinect SDK v2预览版,从Kinect v2预览版的Color Camera和Depth 传感器中获取数据的方法. 本节,将介绍从Kinect的Microphone Array中取得AudioBeam(水平面音源方向的推测)的方法. Microphone Array

Kinect v1和Kinect v2的彻底比较

本连载主要是比较Kinect for Windows的现行版(v1)和次世代型的开发者预览版(v2),以C++开发者为背景介绍进化的硬件和软件.本文主要是对传感的配置和运行条件进行彻底的比较. 本连载介绍的Kinect for Windows Developer Preview是暂定的,软件.硬件以及API有可能因为最终的产品版发生变更,还请谅解. 关于本连载 本连载主要是比较次世代型的Kinect for Windows(后面称作Kinect v2预览版)和现行型的Kinect for Win

Kinect v2程序设计(C++) Body 篇

Kinect SDK v2预览版的主要功能的使用介绍,基本上完成了.这次,是关于取得Body(人体姿势)方法的说明. 上一节,是使用Kinect SDK v2预览版从Kinect v2预览版取得BodyIndex(人体区域)的方法. 这一节,介绍从Kinect取得Body(人体姿势)的方法. Body 到目前为止,Kinect能取得Depth(通过传感器的距离信息)和BodyIndex(人体区域).并且,基于这些数据可以取得人体姿势. Kinect的人体姿势,是向学习了基于庞大数量的姿势信息的识

标定Kinect v2彩色摄像头:使用iai_kinect2,采用qhd(960*540)大小的彩色图像

开篇一作,这篇博文是纯应用的,没有任何理论说明,就当是一个实践提醒啦. 安装kinect v2相机驱动和标定程序得益于下面二位前辈的引荐工作: http://www.cnblogs.com/gaoxiang12/p/5161223.html http://www.cnblogs.com/hitcm/p/5118196.html 十分感谢! 请读者先按照上面前辈的博文安装好libfreenect2和iai_kinect2. 在iai_kinect2标定步骤中(https://github.com/

【翻译】Kinect v2程序设计(C++) BodyIndex篇

通过Kinect SDK v2预览版,取得BodyIndex(人体区域)的方法和示例代码. 上一节,介绍了从Kinect v2预览版用Kinect SDK v2预览版获取Depth数据的方法. 这一节,介绍从Kinect取得BodyIndex(人体区域)的方法. BodyIndex 基于从Kinect取得的Depth数据(传感器的距离信息)获取人体区域. 因为人体区域基于Depth数据,同时也依赖Depth传感器的分辨率.像上一节介绍的一样,因为Kinect v2 预览版(512×424)的De

【翻译】Kinect v2程序设计(C++) Depth编

Kinect SDK v2预览版,取得Depth数据的方法说明. 上一节,介绍了通过使用Kinect for Windows SDK v2预览版(以下简称为,Kinect SDK v2预览版)从Kinect for Windows v2开发者预览版(后面称,Kinect v2 预览版)取得Color的方法. 这一节,介绍的是从Kinect取得Depth数据的方法. Depth传感器 Kinect搭载Depth传感器,可以取得Depth数据(和传感器的距离信息). Kinect v1,可以读取投射

ubuntu14.04下 Kinect V2+Ros接口安装

1. 首先git下载代码,放到主文件夹下面 git clone https://github.com/OpenKinect/libfreenect2.git 2. 然后安装依赖项如下,最好事先编译安装好OpenCV sudo apt-get install build-essential cmake pkg-config libturbojpeg libjpeg-turbo8-dev mesa-common-dev freeglut3-dev libxrandr-dev libxi-dev 3.