一般录制这类MR视频都需要用到绿幕,就像拍**那种绿幕,用来抠出人像方便制作特效,VR游戏录制MR视频也是这个原理,布景如下图:
不过对于一般个人玩家来讲,家里的环境很难允许放置一大坨绿布,别墅大佬除外 这就有了本文的主题,利用景深相机搭配Liv的相关软件来虚拟绿幕实现抠像最后混合VR画面实现MR视频。进入正题之前感谢D总的视频,感谢钦总(暗潮污水)给予的帮助,感谢Liv提供了这么优秀的软件,感谢Liv DiscordNo-green-screen频道玩家ragesaq提供的整套流程说明,后期Liv会提供整合好的无绿幕版专用软件会省掉不少工作,到时再提供方法。下面开始本次教程!
准备工作
一台kinect20以及适配器套件kinect20
可以是xbox one的,也可以是windows专用版,无所谓,不推荐kinect10也就是360带的那个,18年前的东西了性能不行。10和20比较,未来Liv提供的整合版会支持更多的景深摄像头,下图是适配器,记得别买成XBOX的电源适配器了。如果本身有X1,那可以直接把kinect拿出来用,只要再配个适配器,奶东大概350块左右可以买到,如果买kinect20 for windows全套某宝大概1300多可以买到。
高性能主机
因为过程中需要3款软件配合虚拟摄像并输出,对CPU压力非常大,楼主的i5 4570明显垮了,开启MR画面捕捉后CPU已经90%占用,玩游戏都很卡了,更别说再录制视频,所以一个高性能超线程CPU是必须的,推荐i7 4790起。至于显卡大家玩VR的想必都不差就不再多说了。
相关软件
连接与安装
把Kinect2按照适配器的说明书连接好PC,注意适配器需要机箱背面的USB30接口,前置的USB可能会导致画面捕获不稳定
安装OBS,然后再安装虚拟摄像头插件,都默认即可,安装完可以在工具菜单看到虚拟摄像头插件
解压Kinect2GreenScreenzip,CoordinateMappingBasics-WPFexe是我们制造绿幕的主程序
Steam安装liv和vivr,安装完Liv点右键属性,在测试里面选择公共测试版本,这对录制Beat Saver有帮助,对应的Beat Saver也选择beta版本
运行程序(重点来了)
首先把kinect2放在一个适合录制的位置和角度,要在vr定位器能够捕捉到的地方,打开KinectV2GreenScreen主程序,如kinect2连接没有问题,左下角能够看到Running,在摄像头面前晃悠下能够捕捉到你的人像并成功去背景。
运行OBS,左边如果没有场景就新建一个并改名成容易识别的名字,比如green。然后在来源里面点击+,选择窗口捕获。
在窗口中选择KinectV2GreenScreen的主程序。
添加好来源对捕获到的KinectV2GreenScreen窗口点右键,选择变换→编辑变换,在裁剪里面我们可以上下左右进行裁剪,把没用的白边去掉。
裁剪掉白边拉大窗口,应该差不多正好覆盖1920x1080的背景,不够就拉大一点。
接着新建一个场景,我这里命名为camera,来源选择视频捕获设备,设备里面选择kinect V2。
顶部工具条点开工具→VirtualCam,勾选自动开始,水平翻转(kinect默认捕获的画面是反的),然后点start,这就打开了虚拟摄像头,crop裁剪可以禁用。
析:身体以及各个关节点的位置定义了一个姿势。更具体的来说,是某些关节点相对于其他关节点的位置定义了一个姿势。 姿势的类型和复杂度决定了识别算法的复杂度。 通过关节点位置的交叉或者关节点之间的角度都可以进行姿势识别。
通过关节点交叉进行姿势识别就是对关节点进行命中测试。
我们可以确定某一个关节点的位置是否在 UI 界面上某一个可视化元素的有效范围内。我们可以对关节点做同样的测试。 但是需要的工作量要少的多,
因为所有的关节点都是在同一个坐标空间中, 这使得计算相对容易。 例如叉腰动作(hand-on-hip) ,
可以从骨骼追踪的数据获取左右髋关节和左右手的位置。然后计算左手和左髋关节的位置。如果这个距离小于某一个阈值,就认为这两个点相交。那么,这样就变得
简单多了。
但是,由于Kinect的精度问题,但即使通过一些平滑参数设置,从 Kinect
中获取的关节点数据要完全匹配也不太现实。另外,不可能期望用户做出一些连贯一致的动作, 或者保持一个姿势一段时间。 简而言之,
用户运动的精度以及数据的精度使得这种简单计算不适用。 因此, 计算两个点的长度, 并测试长度是否在一个阈值内是唯一的选择。角度原理也与之类似。
当两个关节点比较接近时, 会导致关节点位置精度进一步下降,
这使得使用骨骼追踪引擎判断一个关节点的开始是否是另一个关节点的结束点变得困难。比如,很难将手放在脸的前面,手放在头上,
和手捂住耳朵这几个姿势区分开来。 要摆出一个确切的姿势也很困难, 用户是否会按照程序显示的姿势来做也是一个问题。
一些姿势使用其他方法识别精度会更高。例如,用户伸开双臂和肩膀在一条线上这个姿势,称之为 T
姿势。可以使用节点相交技术,判断手、肘、以及肩膀是否在 Y
轴上处于近乎相同的位置。另一种方法是计算某些关节点连线之间的角度。骨骼追踪引擎能够识别多达20个关节点数据。任何三个关节点就可以组成一个三角形。使用三角几何就可以计算出他们之间的角度。
没用过unity3d
不过要控制鼠标的话,kinect的skeletal view程序里面会提供人的骨架 其中有左右手的深度信息,所以用这个就可以控制鼠标了。不过你要想精确控制,并且还识别手势什么的。。光靠这个肯定做不到。。。
不能说完全没有PC版的kinect体感游戏,但可能题主你会在近期内会失望,起码最近一两年不会有。
首先,微软现在开发的是kinect的SDK,不算严格意义上的驱动程序。微软的目的在于,让kinect在民间的智慧下发掘更多的利用空间,重点是开发游戏以外的用途,最终也是对微软最有利。
其次,kinect的官方支持平台还是XBOX360,起码微软没有打算把kinect上的“XBOX360”标志去掉。这样的话,各大游戏开发商,开发的游戏大作都只会在官方支持的平台上面运行,不会冒险去开发未得到官方支持的平台,如PC。
最后,微软推出了kinect,最终目的还是为了赚钱。如果让kinect的体感游戏独占在XBOX360上,微软赚的钱会多很多。因此,微软不会轻易将kinect的体感游戏移植到PC上。
不过,开放了SDK后,民间很多高手会开放好玩的小游戏。所以不一定没有PC版的体感游戏,只是及不上X360的体感游戏了。
1Kinect原理:
kinect1:Prime Sense公司的Light Coding技术作为原理,给不可见光打码,然后检测打码后的光束,判断物体的方位。
kinect2:TOF原理(精度、灵敏度和分辨率都更高),根据光反射回来的时间判断物体的方位,当然检测光的飞行速度是几乎不能实现的,所以发射一道强弱随时间变化的正弦光束,然后计算其回来的相位差值,所以使用场景尽量避免反射物以及不要移动Kinect,不然会有问题。
2可供研究开源库:Openni,KinectSDK,手势库NITE,Kinect-ms-sdk。由于我是新手,而且比较熟悉的Kinect的SDK,所以就从这个开始总结,其他的有机会再来详细分析。
3首先你用Kinect,首先要了解它能干什么,能获得哪些数据
其实看他的SDK就知道它能获取的数据包括:语音,彩色图像,深度图像,骨骼数据(这个是根据深度和彩色通过算法识别提供给开发者使用的)。而又这几种数据又能扩展出什么新的数据,开发出什么有趣的功能完全是由开发者们的能力和对世界的好奇。(官方SDK已提供了表情,脸部建模,语音识别,手势判断等,其他的估计不会那么快提供出来)
4Kinect的使用程序流程:
开始程序-获取kinect摄像机-打开读取器-打开Kinect-获取读取器的相关帧数据-使用帧数据-关闭帧-关闭读取器-关闭Kinect-关闭程序
这就是Kinect的一个完整的工作流程,无论是彩色,深度,骨骼的数据获取都需要这个流程的,而我们主要 *** 作是在使用帧数据的这个阶段。其他基本是不变的。
41 kinect的开启很简单:在程序开始时,也就是unity的Start函数里写下
_Sensor = KinectSensorGetDefault();
if (_Sensor != null)
{
_Reader = _SensorColorFrameSourceOpenReader();
if (!_SensorIsOpen)
{
_SensorOpen();
}
}
这样就能成功开启Kinect传感器和读取器了。
42 程序的关闭
要注意的是没获取完数据不要随意进行Kinect的关闭 *** 作,不然数据会不准确,一般kinect的关闭是在你准备要关闭程序的时候进行的,在unity上的mono类里有专门的OnApplicationQuit(),在这里进行关闭kinect的 *** 作。
代码如下:
void OnApplicationQuit()
{
if (_Reader != null)
{
_ReaderDispose();
_Reader = null;
}
if (_Sensor != null)
{
if (_SensorIsOpen)
{
_SensorClose();
}
_Sensor = null;
}
}
中间的数据获取和数据的使用会占很大的篇幅,会在后续的博客里一个个分析
以上就是关于如何录制MR画面全部的内容,包括:如何录制MR画面、C#编程 人体关节坐标获取、unity3d+kinect怎么用手去控制鼠标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)