Unite 2017 Shanghai于5月11日-13日在上海·国际会议中心召开,汇聚了来自全球的Unity开发者,发行商,培训家和爱好者们,Unity技术经理鲍健运分享《运用Unity开发HoloLens实战技巧》。
他介绍,目前HoloLens的官方制定应用引擎为Unity;开发HoloLens只能使用64 位 Windows 10专业版、企业版、教育版;在场景设计方面,HoloLens理想的空间是在2米-3米;最后鲍健运为大家分享了Unity开发者学习资源。
以下是VR陀螺整理的演讲内容(略有删减):
鲍健运:我是Unity的技术经理,主要负责技术推广的工作。
HoloLens大家都知道,是微软出品的一款设备,有很多很有意思的功能,Unity提供很多性给大家去开发HoloLens的应用。
今天分享的内容主要分为五个部分。
一:HoloLens与Unity
Unity是微软HoloLens的官方制定应用开发引擎,普天之下别无二家,只能用Unity开发HoloLens,这也是我们与微软合作的比较好的表现。
HoloLens在Unity5.5版本的时候已经可以正式开发了。
二:怎么在Unity系统环境准备开发HoloLens的应用
你首先要有64 位 Windows 10 专业版、企业版或教育版,很多家里用的电脑都是Windows的个人版,但是开发HoloLens不能使用个人版,只能使用专业版、企业版、教育版。4 核及以上 64 位 CPU,8G 及以上内存,配置虚拟化与 Hyper-V。GPU 支持 DirectX 11.0 或以上,WDDM 1.2 驱动及以上的版本。
接下来是需要安装什么样的软件,第一现在最新发布的Unity5.6可以安装一下。Visual Studio 2015 Update 3,当然现在也支持2017的版本,但我这里首先是2015版本。Tools (1.4) 和 Windows 10 SDK (特别标注是10.0.10586,这是比较稳定的版本,可以帮助大家很好地开发)还有Windows Device Portal,可以通过它把HoloLens应用和硬件设备连接起来,也可以适当做些调试,但是你有Portal的话可以很便捷地开发。有必要的话你也可以安装HoloLens的模拟器。
三:项目搭建
怎么搭建最简单、快速的项目能够做出HoloLens的应用。
大家知道最简单的就是创建项目。
我们要对主相机进行调整,Hierarchy 中找到Main Camera,设置 Transform 的 Position 为 (0,0,0),对摄像机的Clear Flags 为 Solid Color,Background 为黑色,即 RGBA 为 (0,0,0,0),这是为什么呢?因为我们开发HoloLens应用的同时肯定是要有与现实融合的功能在里面,我们在底层怎么做融合的呢?我们取HoloLens Clear Flags的黑色,可以跟现实进行想象。就像我们玩虚拟游戏的绿幕一样,只不过这里是黑色的。Clipping Planes 的 Near 为 0.3 ~ 0.85 之间的值,因为Clipping Planes Near可以调到比较合适的距离。
为什么需要0.85米的范围呢?我们体验HoloLens最理想的距离是在近端1.25米和2米之内,其实2米是最合适的体验距离,这样你放很近的东西在眼前也不会有不舒服的影响。
设置品质,可以找到Unity 编辑器菜单栏 Edit → Project Settings → Quality
找到 Windows Store 列,在 Default 选择 Fastest确认 Fastest 为绿色的勾。这是为什么呢?主要是提高光性的,毕竟是用到摄像机采集以及和显示的产品进行融合,首先要保证流畅,再做其他的优化。
等你创建完好的项目做构建的时候还有些设计需要做。你可以找到Unity 编辑器菜单栏 File → Build Settings,选择 Platform 中的 Windows Store,选择 SDK 为 Universal 10,Target device 为 HoloLens,才能生成正常的能够使用的。UWP Build Type 为 D3D,等一下我会解释一下为什么是D3D。
UWP SDK 为 10.0.10586.0,Build and Run on 选择 Local Machine,就是在本地进行编译并且打包运行的效果,你需要勾选 Unity C# Projects,这样会生成工程,能够在VS里面打开,进行额外的编辑。当然肯定需要 Add Open Scenes,有一个场景能够让你编辑,将当前 Scene 添加到 Scenes In Build。
首先解释一下D3D的含义,如果开发了解windows知道有两种应用模式,一种是3D视图应用,另一种是XAML,2D的视图应用。针对HoloLens这两种都可以,产生的问题就是你要用XAML只能做出2D的面板、虚拟键盘,你要获取很好的体验的话,还是选择3D的,所以我推荐大家使用D3D的模式。
UWP SDK有这几个选项,Latest installed Unity 5.6 自动对应现有最新的SDK版本 10.0.15063,还有一个版本是10.0.10240.0,这是最早的,支持HoloLens的SDK版本,很多功能不能使用。有一个是0.0.10586.0 —— 推荐最低版本,支持 .Net 3.5。
这样大多数的HoloLens都能进行支持,如果设备没有进行更新的话,还是可以继续使用的。还有一个版本是0.0.14393.0,Anniversary 版本,但很多应用不支持。所以我推荐是10586这个版本。
开发选项的设置在 Build Settings 窗口点击 Player Settings,打开之后填写 名称Company Name 与 Product Name,选择 Windows Store 选项卡,展开 Other Settings 标签,有几个选项需要勾选,首先要勾选 Virtual Reality SDKs,添加 Windows Holographic,这样你开发出来的应用是针对HoloLens。如果你不去勾选的话是生成不了HoloLens应用的。
Depth Format是用来深度缓冲区的深度。有两个效果,一个是16-bit depth,精度较低,物体非常接近时,会产生 Z buffer fighting 闪烁,因为你设计的值不够。24-bit depth,这个是推荐大家使用的,精度较高。
这是我们Unity开发AR、VR所用到的功能,Single Pass Instanced,单通道立体渲染。原有的模式是先画完左眼再画右眼,单通道是可以有多个指令,左边画完以后右边也会同时画,两个眼睛之间不会有先后顺序,几乎达到同时的渲染效果,对体验者来说有很好的体验效果。
之后在 Build Settings 窗口点击 Build,第一次要求你创建文件夹,这里面会放所有生成的项目,命名为App,导出 HoloLens 的 Visual Studio 项目文件夹。
在VS的模拟器当中怎么用呢?打开VS,设置Target 为 Release,架构用X86架构。
我们可以在Unity编辑器环境当中进行模拟的调试,但是有个前提你需要安装window10 Anniversary及以上的版本,这样在5.6可以看到会多出来一个选项,全息模拟器窗口。
对开发者来说大大节省了迭代时间,也可以帮助开发者有比较好的设计体验。
模拟有几种模式,首先是模拟模式。一个是Room,就是默认的客厅、简单卧室、普通卧室。
在微软提供的这一套环境当中做了搭建,在设计当中会有默认空间的客厅,有桌子和椅子放置在里面,帮助你们在模拟器环境里面调试。
还有Gesture Hand。像左摇杆是控制里面有个虚拟人物前后左右的移动,右摇杆是控制虚拟任务抬头、低头、左转、右转。D-pad是控制虚拟人物上下移动,左右转头,以及左右有扳机键,A键模拟手掌点击,Y键可以重置虚拟人物。
远程模式Remote Machine,HoloLens 的局域网地址,把地址输入到选项里面,可以直接通过Unity使用。Enable Video/Audio就是启用视/音频输入,Max Bitrate。最大比特率以及Connection Status连接状态。当然这需要用到一个软件,微软提供的Holographic Remoting Player。
模拟模式大多数的手柄都支持,但推荐的是 Xbox 360 或 Xbox One。
可以执行图像捕捉,但因为图像捕捉会使用本地相机(例如网络摄像头),无法使用HoloLens对应的TryGetProjectionMatrix 或者 TryGetCameraToWorldMatrix来获得矩阵的方式。
远程模式不支持语音(PhraseRecognizer语音识别),而是获取编辑器所在主机的语音。不是通过HoloLens这个硬件获取到语音信息,而是我这台电脑能获得的信息,主机PC端所有的音频将重定向到设备上(而不仅是来自应用方的)。
四:HoloLens交互开发功能
接下来会介绍一些HoloLens特有的交互开发的功能,会有比较重要的几个。
比如说凝视,大家开发过VR应用的话都会知道凝视的功能别家设备也有,但有几个东西是其他几家没有的,比如说Gesture以及Voice语音控制,你可以说出单词,HoloLens可以进行判断。
还有特别的空间扫描、空间音效以及世界坐标器转换。这里会推荐一个软件HoloToolkit-Unity,它里面简化了一些方法,写了一些API,能帮助开发者更容易地开发HoloLens应用。
首先讲一下凝视的功能,在Unity的API里面很简单。在HoloToolkit API里面会有几个Gaze的开发方式,比如说GazeManager, GazeStabilizer, BasicCursor。这里面有几点需要注意的,凝视是根据头部的移动,而不是跟随你的眼睛。
可以使用“光标”或者其他视听的提示帮助使用者进行交互。比如说有些AR和VR应用当中也会看到,你在环境当中找到目标的时候屏幕中间会出现箭头,提示你把头往那个方向转,或者有声音提示你往那边走,这也是帮助凝视的操作。
这个和我前面提到的HoloLens最佳体验范围也是相关的,2米是最好的范围,物体的大小尽量控制在5到10厘米之间,这样会有比较好的凝视体验。视锥角度也就在1.5到3度之间,会帮助开发者省掉不少的麻烦。
这是比较典型的使用凝视的例子,当它移动到立方体上的时候,物体就变得高亮,这就变成类似选中的状态。
Gesture,Unity有专门的API,会在UnityEngine.VR.WSA.Input里面找到相关的API,有针对GestureRecognizer和HoloToolkit的东西。
手势的操作有这几种。Tap:空中点击,Hold:抓住对象,Manipulation:操纵对象 —— 移动控制,Navigation:导航操作——轴向操作。
怎么去创建手势呢?第一步肯定是创建,然后制定,然后再进行事件的绑定。
以Tapped为例,开始去捕捉手势,当我觉得差不多的时候就停止捕捉。
语音控制是HoloLens最有意思的地方,用的最多就是选择某一样东西的时候可以把眼睛放在上面,这样解放了很多操作方式,不单单是用手来操作,可以用语音来进行操作。
怎么使用呢?首先你得引用,你要用到using UnityEngine.Windows.Speech,做新建和关键字字典的准备,你要创建KeywordRecognizer ,你要放入语音识别的单词,不太建议大家使用中文,因为这块的识别还不是特别好。
接下来是初始化识别器,还有很有意思的事情叫“措辞”事件,当识别完之后就可以启用了。操作差不多的时候可以点Stop,必须也要进行解绑。
语音控制必须要有“麦克风”,才能让所有的API生效,没有API的话都没有用。大家要使用语音功能的话必须保持正常稳定的联网状态,除了“Select”这个单词以外,其他都需要用到语音助手去分析语音词,所以在无网络状态下不要去怪我说一堆词它没有分析出来,因Cortana语音助理需要去分析你的词。
HoloLens也支持听写的功能,但是听写跟语音功能两者是排它的,你两者只能取其一。
空间映射会用到比较基本的,像UnityAPI里面会有UnityEngine.VR.WSA。HoloToolkit API里面会有SpatialMappingManager, SpatialUnderstanding。
可以是比较特殊的地形表面,这边都已经有很多方法准备好了。
SurfaceChangedDelegate会识别表面的变化,当然也要注意空间映射识别的功能不是万能的。
首先需要可感知的空间,而且是比较封闭的场景。大家记不记得我前面所说的,HoloLens理想的范围应该是5米以内的空间,比较理想的空间应该是在2米到3米左右,这样封闭空间并不是特别大,所以你不需要找特别大的场景做感知。
还有一点,一定要做优化,不做优化的话你的空间扫描数据量特别大。一定要用到遮挡、剔除这些功能,这会提升你HoloLens的体验。
空间音效是在整个HoloLens设计里面最简单的,因为Unity本来就支持很好的3D音效,你需要对AudioManager做简单的设置,必须用48000 系统采样率以及Microsoft HRTF 声场定位技术。
HoloToolkit API就是专门用这个的,用到UAudioManager。空间音效在 MR/VR 沉浸式环境中非常重要,帮助你达到很好的空间感。
空间坐标,UnityAPI里面有WorldAnchor。而HoloToolkit API里面有TapToPlace, WorldAnchorManager.
我建议组合内容使用单一的锚点。还有较远距离对象的锚点坐标系尽量在 3 米以内,这和我前面说的理想的HoloLens大小空间体验是相关的。
五:学习资源
大家如果有兴趣接触,进行Microsoft Hololens开发可以通过学习资源获得更多的了解。
说到这里可以给大家介绍学习资源,只是你们不知道HoloLens有好用的地方。官方手册里面有专门讲windowsholographic的章节,有专门的API文档可以去查。
还有微软自己官方的Holographic Academy里面有很多详细的用例。
谢谢大家!
投稿/爆料:tougao@youxituoluo.com
稿件/商务合作: 六六(微信 13138755620)
加入行业交流群:六六(微信 13138755620)