《基于Unity与SteamVR构建虚拟世界》 —3.5.6 设置VR摄像机装置

举报
华章计算机 发表于 2019/11/24 15:35:46 2019/11/24
【摘要】 本节书摘来自华章计算机《基于Unity与SteamVR构建虚拟世界》一书中第3章,第3.5.6节,作者是[美] 杰夫·W.默里(Jeff.W. Murray) ,吴 彬 陈 寿 张雅玲 林 薇 苏晓航 译。

3.5.6 设置VR摄像机装置

点击Hierarchy中的主摄像机,按Delete键(或者右键单击GameObject并在下拉列表中选择Delete),Game view将显示没有摄像机场景的消息,如果你现在点击Play,就不会有摄像机渲染任何东西,它只会显示一个空白的屏幕。接下来我们将添加VR摄像机。

SteamVR资源包包含预设体以方便操作,其中就有摄像机设备,其所有设置都准备就绪。“装置”术语被开发人员用来描述一种设置,此设置由游戏对象和附加到它们的组件和配置组成。

在项目浏览器中,找到SteamVR下的Prefabs。在文件夹里找到名为[CameraRig]的预设体,拖动[CameraRig]到Hierarchy中的空白处,即可在场景中添加新的摄像机组件。这样就可以让SteamVR在场景中工作。在继续之前,快速查看[CameraRig]包含的内容以及运行原理。

1)探究SteamVR摄像机装置

按住Alt键点击Hierarchy中[CameraRig]左边的小箭头,将[CameraRig]的子对象显示在面板中。面板呈现如下:

[CameraRig]

    Controller (left)

        Model

    Controller (right)

        Model

    Camera (head)

        Camera (eye)

        Camera (ears)

顶部是[CameraRig]游戏对象本身,它包含一个名为SteamVR_Controller Manager的管理控制器的组件,还有一个SteamVR_Play Area组件允许用户在移动的区域进行蓝框绘制。在HTC Vive中Chaperone系统可以独立运行完成此项工作,但SteamVR_Play Area组件为编辑器的游戏区提供了一个好的指导。

下一个游戏对象是[CameraRig]下的子控件Controller (left),Controller (left)和Controller

(right)基本相同。它们在HTC Vive虚拟世界中渲染模型来显示控制器Controller (left)和Controller (right)的位置。它们中还附带一个简单的SteamVR_Tracked对象组件,能使虚拟控制器遵循现实世界中的控制器。

装置足够智能以感知控制器是否已连接,如果未使用,也不会产生任何错误。如果不使用控制器或者你正在开发不使用它们的平台,则Controller游戏对象不会影响性能。

两个Controller游戏对象下面都有一个GameObject的模型。GameObject虽然被命名为模型,但实际上并不包含任何3D网格或模型。在模拟运行时,SteamVR将添加模型。除非你打算使用Vive控制器,否则你不需要知道它是如何工作的。我们将在第9章中详细介绍Vive控制器的使用。

再下面是Camera (head),它是组成GameObject系统的主要部分。Camera (head)包含三个组件(摄像机、SteamVR_Game View和SteamVR_Tracked组件),SteamVR_Game View组件实际上是Unity以前版本留下的,在Unity 5.4或更高版本中Game窗口进行视图渲染时,该组件为可选项,由于它具有编译器时间代码,如果你在较新版本Unity中不再使用它,它将从组件中排除自身。

也有一个SteamVR_Tracked对象组件附加在Camera (head)上,查看附加到控制器(左侧和右侧)的SteamVR_Tracked对象组件时,你会看到索引字段设置为空,因为可能有一个、两个或更多控制器,它们的索引号不会被硬编码,而是由SteamVR_Controller Manager脚本在运行时设置。

对于Camera (head)游戏对象,SteamVR_Tracked对象的索引字段设置为头戴式显示器(HMD)。Camera (head)游戏对象将与头戴式显示器一起移动,SteamVR_Tracked对象组件会确保摄像机装置的顶部位于正确的位置—参照HMD的设备索引来模拟现实世界中头戴式显示器的位置。

在Camera (eye)中可以看到实际头戴式显示器中的虚拟世界,它与Camera (head)对象有着相同的位置,但这里我们有用于渲染视图主要部分的Camera组件。在本书后面将会看到,Camera (eye)是我们添加依赖于视图的组件的地方(例如查看在虚拟世界中查看器查看的内容的组件,或标注图像以帮助定位的组件等),其中包含SteamVR_Camera元素,用于处理视图并将其发送到SteamVR并渲染呈现给头戴式显示器。在运行期间,SteamVR_Camera还会设置一些额外的对象来执行此操作(当你在仿真运行时查看Hierarchy时,你会注意到它的结构会有所变化)。如果曾经为VR制作过自己的摄像机装置,那么你可以通过在场景中添加摄像机并且添加SteamVR_Camera组件来使用VR中的摄像机,从场景到头戴式显示器的传递方式是SteamVR_Camera组件中最为核心的部分。

最后是Camera (ears)游戏对象。它是音频接收的部分,处理场景中的“听觉”并将听到的内容传递给音响系统。SteamVR还包含一个名为SteamVR_Ears的组件,当你使用扬声器时,它将匹配到音频监听器。利用OpenVR库中的一个属性来判断是否在使用扬声器。我假设它将会使用某种内置的属性来检测音频何时通过头戴式显示器,但是如果曾经使用过却无法获得有关SteamVR实际设置值的任何信息。

2)场景测试

按下Play按钮并戴上你的VR头戴式显示器预览场景,是不是感觉自己很小?虚拟世界可能看起来很大,正如在现实世界中时一个昆虫眼中的世界大小!

解决缩放问题的最佳方法是在三维建模软件制作模型时,从一开始就将尺寸设置为正确的比例,将模型导入到引擎之前调整好大小,但在使用已有的项目时这不是很好的解决办法。可以在编辑器内部扩展场景进行快速修复,让你感受到普通人的体型。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。