查看原文
其他

在Unity中如何利用真实物理空间校正虚拟世界

2017-07-02 Unity官方 Unity官方平台

Unity每年会举办Hack Week活动,全球的Unity技术工程师们齐聚一堂,以小组为单位进行头脑风暴,来制作一些好玩又实用的小作品。今天要为大家分享的,就是2017年在丹麦举办的Unity Hack Week其中一个项目,利用HTC Vive的追踪器来探索物理与VR世界的交互。

 

此项目设想的场景为应用启动时会先进行快速校正,并将现实世界的图像扫描到虚拟世界之中。然后实现一种完全沉浸式的VR体验,虚拟物体及其表面可以与现实世界的真实对象结合。

 

HTC Vive设备有一个相机,用户可以在SteamVR中激活相机以显示真实世界的视频,还可以激活“Tron Mode”,也就是开启相机进行边界检测的设置“Allow Camera for Chaperone Bounds ”,它会检测并高亮显示物体边界。



此项目的目标就是让玩家可以直接对真实的物理世界进行“绘制”:

  • 在HTC Vive其中一个手柄旁渲染一个矩形来显示真实世界的视频,就像SteamVR控制面板一样;



  • 启用Tron Mode;

  • 在Tron Mode下渲染真实世界的视频图像。


这些功能需要通过编程来实现,以代码来控制HTC Vive的相机以及“Allow Camera for Chaperone Bounds ”设置。下面就为大家分享实现过程。


在控制器旁添加面片来渲染视频并不难,SteamVR Unity插件中就提供了示例场景,SteamVR-Extras文件夹下的SteamVR_TestTrackedCamera 场景就已实现该功能。只要将游戏对象TrackedCamera 移动到其中一个手柄下方作为其子对象即可,控制该游戏对象是否激活即可控制视频是否显示。


启用或禁用Tron Mode可以通过OpenVR设置中的SetBool实现,代码如下:

(详细代码请点击原文阅读进行官方社区获得)


 

然后定义枚举来表示不同的视频模式,在菜单按钮被按下时调用函数来关闭或显示视频。新建脚本绑定到游戏对象TrackedCamera ,脚本代码如下:

 


下面的视频展示了在运行时动态切换视频模式的场景,切换视频模式的脚本再结合由Josh Naylor编写的建模工具,就可以在VR环境下创建立方体,将其与现实世界中的真实物体合并。创建虚拟立方体后关闭视频,然后可以看到虚拟世界也通过现实世界进行了物理空间校正。

 

https://v.qq.com/txp/iframe/player.html?vid=v0517jszhz6&width=500&height=375&auto=0

本文展示的代码片段仅仅是来自Hack Week其中一个项目的部分功能,如果在实际应用中,开发者可能希望能够单独设置视频模式,或者添加一些其它的功能,例如设置视频画面的大小等。


我们发现手柄旁边的面片用来显示中小型物体的轮廓就已经足够了,这对于一些专业的用户交互设计师来说可能非常有帮助,某些情况下可能使用Tron Mode会更加合适,或者视频与Tron Mode结合使用,利用真实世界的物理空间与交互对虚拟世界进行校正。大家可以将本文作为一个基本参考,来探索更加强大而酷炫的VR功能。


官方活动


活动一:分享Unity技术文章,Unity带你亲临王者荣耀KPL总决赛


活动二:7月Unity技术路演,Unity技术路演将从沿海深入腹地,即将来到武汉和西安,为当地开发者带来引擎新功能介绍演示和2个不同主题的Workshop内容。报名火热进行中!


更多Unity相关技术文章

Unity中可用于VR环境的空间化音效

Unity 5.6中的混合光照

Unity实验预览版支持为macOS开发VR及AR内容

基于Animation Instancing的大规模人群模拟


点击“阅读原文”进入Unity官方中文社区

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存