如何低成本的打造HTC Vive虚拟演播室直播MR视频?
http://m.toutiao.com/i6298923859378700802/?tt_from=weixin&utm_campaign=client_share&from=groupmessage&app=news_article&utm_source=weixin&isappinstalled=0&iid=4586947087&utm_medium=toutiao_ios&wxshare_count=1
如果你关心虚拟现实行业,肯定知道大名鼎鼎的HTC Vive,而除了游戏领域的应用外,我们正在尝试通过『虚拟现实头显+手柄+Lighthouse基站定位装置』来创造出更有趣的行业应用,接下来星佳就结合国外大神和圈内从业者们一起折腾出的宝贵经验和大家分享下如何低成本的打造虚拟演播室,同时利用直播软件直接可以直播MR视频:
什么是MR(Mixed Reality)视频?
Mixed Reality视频就是VR影像+人的影像合成的视频。相比普通录制电脑屏幕游戏画面和游戏者录像实拍分屏显示的假VR视频,Mixed Reality视频更适合用来做游戏直播和制作虚拟现实应用宣传视频,比如著名的google tilt bursh绘画程序,而由此带来了很多新的可能,比如教育,多人互动,科普等等行业应用。
上面这个视频截图就是HTC Vive官方宣传片的一个Mixed Reality视频,画面来源于官方赠送的一款叫做"The Lab"的射箭体验游戏,而游戏者人的画面是由一台摄像机配合第三只实体Vive手柄实时捕捉的。
因为人的影像摆放的位置,透视关系和玩家在虚拟场景中的位置,映射坐标都一样,摄像机拍摄画面中手拿手柄的位置和游戏画面中虚拟手柄的位置是完全一样的,看起来就像体验者身临其境走进了一个虚拟世界,并用双手借助实体手柄直接和游戏虚拟环境互动。
了解了理论知识,接下来星佳要帮大家解决的问题,原理和方案到底是如何实现的?
需要准备什么?
硬件部分:
摄影棚:墙和地面铺上绿布,大概6m*6m即可,同时为了实时抠像,需要布光,如果没有专业经验请专业的灯光师帮忙吧,星佳也是折腾了很久,因为预算有限没办法做到足够完美。
幻想拥有的巨资打造的摄影棚
实际情况预算条件下搭建出的摄影棚
摄像机:
两种方案:
像星佳一样的穷人用网络摄像头就行,比如网吧的聊天摄像头,五百块左右的罗技就挺好,例如Logitech Webcam C930e
而如果你是土豪朋友可以买得起专业的摄像机和视频采集卡,那么无非效果会更赞,当然成本就贵了。看下图:
斯坦尼康稳定器和单反相机的土豪方案
穷逼星佳的支架单反方案(Gopro支架很好用)
星佳托朋友借了台佳能70D,又买不起视频采集卡(由于主机插槽不够用,还得买外置巨贵的采集卡),所以情急之下,星佳把相机通过usb直接连接PC主机的USB3.0口,配合佳能官方的实时摄影调节套件直接可以在电脑端软件实时调节相机参数捕捉拍摄画面,真是小聪明啊,虽然可能烧了CMOS。
高性能主机+第三只Vive手柄(USB延长线连接电脑):第三只手柄的作用如上图,绑定在佳能相机上,手柄作为作为游戏里的虚拟摄像机和物理环境的真实摄像机同步位置和焦距视野等数据,即可拍到正确位置的体验者。
软件部分:
目前只有Unity3D制作的虚拟现实程序支持MR模式,我们期待Value能够早日携手UE4放出来Unreal Engine for SteamVR的程序,当然SteamVR的版本得至少是1.0.8或以上哦。
OBS或者其他视频合成软件,用于实时获取应用窗口和简单抠图。
干货来了,实际拍摄教程:
找到Steam安装路径下的config目录,新建文件名:steamvr.vrsettings
代码段如下:
{"camera" : {"enableCamera" : true, "enableCameraForCollisionBounds" : true, "enableCameraInDashboard" : true}, "collisionBounds" : {"CollisionBoundsColorGammaA" : 169, "CollisionBoundsColorGammaB" : 0, "CollisionBoundsColorGammaG" : 255, "CollisionBoundsColorGammaR" : 163, "CollisionBoundsGroundPerimeterOn" : false, "CollisionBoundsStyle" : 0}, "jsonid" : "vrsettings", "keyboard" : {"TutorialCompletions" : 1}, "notifications" : {"DoNotDisturb" : true}, "perfcheck" : {"heuristicActive" : true}, "steamvr" : {"allowReprojection" : true, "background" : "C:\\Program Files (x86)\\Steam\\steamapps\\common\\SteamVR\\resources\\backgrounds\\viveNight.png"}, "version" : "1"},{"steamvr" : { "activateMultipleDrivers" : true } }
2.解压压缩包里的后缀为driver_null.dll的文件覆盖到指定文件夹,
目录C:\Program Files (x86)\ViveSetup\SteamVR\drivers\null\bin\win32 :
3.以上两步工作做完后,启动SteamVR软件,在成功识别两只手柄后,通过USB延长线连接第三只手柄和PC,成功出现如下的SteamVR画面即代表配置文件生效:
4.生成externalcamera.cfg文件:
运行压缩包里的cameraAgn.exe文件,之后可以戴上头盔拿起两个手柄可以在虚拟世界里看到第三只绑在摄像机上的手柄,按照程序要求配置各项参数即可生成cfg文件,之后把cfg文件放在可执行游戏程序的同目录下即可生成传说中的四分屏。
cameraAgn.exe运行后的四分屏界面
externalcamera.cfg文件内容:
x=0
y=0
z=0
rx=0
ry=0
rz=0
fov=60
near=0.1
far=100
以上参数只是默认值,最终要用什么数和虚拟摄像机的参数及摄像机和第三只手柄的摆放有关,需要在cameraAgn程序里进行仔细的调节,同时注意在运行房间教程的时候头盔和电脑画面正面和反面的不同结果哦。
5.星佳测试成功的切西瓜游戏的MR视频截图:
出现四分屏画面后,基本就成功了一大半,目前此方式还只支持unity开发的程序,所以不能保证所有游戏应用都可以通过此办法来实现四分屏,视频演示地址:http://dwz.cn/xingjia55220 (点击阅读原文也可以,或者微博搜索@星佳是个小人物)
备注:
通过四分屏最终实现输出的影像由三个影像合成:
摄像机捕捉人的影像,覆盖在背景上(合成视频的背景,虚拟摄像机控制的画面),合成视频的前景覆盖在背景上即可。
6.成功之后在OBS中添加视频源(直播利用OSB设置推流地址即可成功):
①前景:
a.视频来源选择裁剪游戏窗口,区域和四分屏的左上角画面重合。
b.设置黑色为色键,扣除前景画面(注意看透视关系,游戏画面前景成功的遮罩住了人)
获取正确的前景画面后的遮罩关系图
②摄像机捕捉:
a.视频来源选择摄像机画面输入或者视频采集卡
b.设置绿色为色键(和绿幕颜色一样),扣出人像
③背景:
视频来源选择裁剪游戏窗口,裁剪区域为虚拟摄像机第三只手柄的控制画面
实践成果:
测试成功的tilt brush画画应用
测试成功的切西瓜应用
多说几句:
星佳已经和HTC官方沟通过,他们也在尝试把Lighthouse基站定位装置的能力第一时间开放给开发者,查看API文档可以获悉SteamVR最多可以获取八只实体手柄在Lighthouse范围内的位置,由此带来了更大的想象空间给开发者,尤其是传统行业的影视,CG,广告片,游戏直播等,而配合全身动作捕捉设备到底可以革新哪些行业,各位可以大开脑洞哦。
除此之外,在实际探索过程中还有一些细节问题还需要解决,比如单反的焦距和算法里的焦距可能存在差距,导致透视关系和比例显示有时会存在小问题,而高品质的视频输出还需要4K屏幕,为了屏幕可以放得下多个1080P窗口等等问题还需要和各位行内人探讨。
到了这里,初级版的低成本教程就结束了,希望借助可能是国内第一个揭秘MR视频拍摄的教程,星佳可以连接到更多的开发者,和那些助推虚拟现实行业普及的从业者们,当然如果你在MR视频的研究中也有宝贵的经验,欢迎联系星佳哦。
最后放上来国外的同行们一些工作成果,希望国内的行内人士多多探索交流。
我们正在考虑建设一个高标准的虚拟现实实验室,包括演播室,硬抠设备,工作站,VR,AR内容研发,MR视频制作,硬件设备体验等,所以如果你的公司有这方面的案例和技术研发团队,硬件供应商和设备整体解决方案提供商,欢迎联系星佳哦。
微信:xingjia10086
微博:@星佳是个小人物
文中部分图片来源于网络,如转载请获取星佳允许,谢谢。
如何低成本的打造HTC Vive虚拟演播室直播MR视频?的更多相关文章
- 如何透过HTC Vive拍摄Mixed Reality (混合现实)影片
https://www.vive.com/cn/forum/1706?extra=page%3D1 也许你是一位开发者,想为自己的HTC Vive游戏制作酷炫的宣传片:或者你是游戏主播,想为观众带来高 ...
- HTC Vive的定位技术
Lighthouse空间定位,chaperone系统避免实际障碍物 HTC vive所用的Lighthouse技术属于激光定位技术,Oculus Rift以及索尼PlayStation VR所用的定位 ...
- 用 Unity 和 HTC Vive 实现高级 VR 机制(1)
原文:Advanced VR Mechanics With Unity and the HTC Vive Part 1 作者:Eric Van de Kerckhove 译者:kmyhy VR 从来没 ...
- 头显HTC Vive北美直降100美元,中国区降价活动今日公布
如果你现在想要购买一台VR头显,591ARVR资讯网www.591arvr.com的小编提醒大家可以等一等,在即将到来的年末促销中各种VR设备都将迎来大力度降价.目前北美市场的HTC Vive已经直降 ...
- HTC Vive 与Leap Motion 出现位置错误的问题
Leap Motion已经支持VR, 但是官方没有支持HTC Vive的例子. 按照官方的文档, 其实是有问题的: https://developer.leapmotion.com/documenta ...
- Unity正式发布首个“实验性”VR编辑器,支持HTC Vive和Oculus Rift
Unity今天正式推出"实验性"VR编辑器.据悉,EditorVR是Unity游戏引擎中的一个组件,可让开发者在虚拟现实环境中开发游戏.为何要称之为"实验性"? ...
- 用Unity开发HTC VIVE——手柄控制篇
写这篇文章的原因主要是因为现在虚拟现实非常的火爆但目前主流的虚拟现实设备(HTC VIVE)的教程却少的可怜,这个我深有体会.所以,我想将我平时开发中遇到的问题以及解决方法记录下来,分享给大家,若其中 ...
- unity htc vive使用
本文介绍如何在Unity中使用HTC vive设备,当前VR作为市场比较火热的热点,HTC VIVE设备作为三大供应商之一,许多人购买了该设备,却不知道如何使用,本文通过图文并茂的形式,进行手把手的讲 ...
- HTC Vive开发笔记之手柄控制
怎么安装设备,配置环境我就不说了,自行百度,教程很多也很简单.接下来说下Vive手柄的控制. 手柄是HTC Vive的重要交互手段,我们通过第一个图片应该对其有一个直观的了解了,总共是九个按钮: 第一 ...
随机推荐
- Java反射的三种实现方式
Foo foo = new Foo(); 第一种:通过Object类的getClass方法 Class cla = foo.getClass(); 第二种:通过对象实例方法获取对象 Class cla ...
- ionic实现手机检测app是否安装,未安装则下载安装包,已安装则打开app(未实现iOS平台)
插件需求(上cordova官网下载): com.lampa.startapp cordova-plugin-appavailability cordova-plugin-inappbrowser 代码 ...
- For,Function,Lazy
package com.dtgroup.study import scala.io.Source object ForFunctionLazy { def main(args: Array[Strin ...
- Oracle 正则表达式函数-REGEXP_LIKE 使用例子
原文在这 戳 REGEXP_LIKE 3个参数 第一个是输入的字符串 第二个是正则表达式 第三个是取值范围: i:大小写不敏感: c:大小写敏感: n:点号 . 不匹配换行符号: m:多行模式: x: ...
- 4Web Service中的几个重要术语
4.1WSDL: web service definition language 直译:Webservice定义语言 1.对应一种类型的文件.wsdl 2.定义了webservice的服务端与客户端应 ...
- 新建Java文件的 文档注释
/** * <br> * ============================================= * * @author : Liuyc * @company : 版权 ...
- Code First is a bad name,这些年我们对Code First的理解都错了 !很震惊吧?
当看到这个时,我也很震惊.估计绝大多数的人和我一样,这些年来,一直不知道Code Fisrt的真实意义.下面是一篇讲述此情况的译文,欢迎围观,若有翻译不当的地方,请指正,谢谢.如果被惊到了,请点赞!, ...
- javascript的类、委托、事件
javascript中的类: javascript中的类 ); p2.show(); //注:Javascript中没有真正的方法重载 看起来很简单吧 ...
- JS去掉数组的重复项
自己知道思路怎么去,但是就是自己不会写,在网上找了一些来看,有些还是没有怎么看明白.学习到了这么一种方法 var a=['ss','dd','ss','cc','dd',1,2,1] var b={} ...
- 2016 ACM/ICPC Asia Regional Dalian Online
1009 Sparse Graph(hdu5876) 由于每条边的权值都为1,所以最短路bfs就够了,只是要求转置图的最短路,所以得用两个set来维护,一个用来存储上次扩散还没访问的点,一个用来存储这 ...