您可能已经使用 Unity 开发了许多应用程序,并且您可能尝试过发布到 iOS、Android 甚至 UWP。 然而,作为开发HoloLens应用的Unity项目,究竟有何神秘的独特之处呢?
相机
首先要关注的是相机。
有VR/AR概念的开发者一定知道,为了将不同的画面展现在用户眼前,我们可能需要两个独立的摄像头。 那么,在Unity工程中,我们如何配置它来实现呢?
答案是:什么都不做。
你只需要像其他任何应用程序一样创建一个主摄像头(实际上,在创建场景时,通常会默认创建),其他的你不需要关心。 发布为HoloLens项目后,HoloLens会找到标记为主摄像头的摄像头并接管其控制,然后根据HoloLens的实际位置自动设置摄像头的位置,并在两者的屏幕上渲染合适的图像眼睛。 观看者可以立即看到非常真实的全息场景。 (当然,必要的设置还是要做的,比如需要在工程设置中勾选VR Support,具体的设置方法后面再说。)
另一方面,由于主摄像头将由 HoloLens 接管,这也意味着尝试自行设置主摄像头位置、旋转等 - 无济于事。 但相机的其他参数仍然有效,例如视野(Field of View)、图层蒙版等。
另外,由于HoloLens的特殊性,我们需要对主摄像头做一些必要的设置——一点点。 包括:
为什么要设置成纯黑色呢? 这就涉及到HoloLens的成像原理。
从画面表现来看,HoloLens 是一款“增光”全息设备,只能增加用户眼睛的光线,而不会减少。 这也意味着用户看到的画面只会比现实更亮,而不会更暗。
看到这里,你一定明白HoloLens不能显示黑色了吧! 因为黑色是没有光,所以必须降低光以显示黑色。 事实上,在 HoloLens 中,所有的黑色都会被视为透明,这也是为什么主摄像头的背景颜色被设置为黑色——这样主摄像头就没有背景了。 想象一下,如果你把主摄像头的ClearType设置为天空盒,贴上一片美丽的天空,你在HoloLens中会看到什么效果? (有HoloLens的朋友音乐音效,真心建议你试试看~)
因为HoloLens不能显示黑色,所以我们实际上不能做阴影,所有的阴影都会变成透明——透明就是直接显示为真实世界的亮度。 但是,也许您已经在 HoloLens 上看到过带有阴影的应用程序,是的,这需要一些技巧。
首先,HoloLens眼镜有一个彩色外壳,会在一定程度上降低世界的亮度,就像一副浅色太阳镜。 亮度降低后,会产生一种黑色的感觉。 即使真实背景更亮,黑色显示仍有一点空间。 之后3D场景,在应用程序中要创建阴影的地方,将阴影投射到一些较亮的虚拟对象上。 当显示在全息镜头上时,会通过亮度对比产生一些阴影效果——实际上,阴影图像被剪掉了unity 物体跟随鼠标,显露出黑化的真实世界。 因为周围的虚拟物体比较亮,所以会产生阴影的感觉。
同样,被黑色覆盖的物体会显得透明——这是值得利用的! 比如你要显示一个窗口,在电脑上,你可能需要用Shader或者RenderTexture来把物体限制在一个区域,但是在HoloLens上,你只需要做一些黑框来挡住你想要的东西不想被看见,自然消失! 当然,不要因为太开心而过度使用这个技巧,别忘了这个技巧在HoloLens以外的设备上是行不通的,如果你恰好需要同时发布app到iOS……你会发现之前的努力都得到了回报 东流了。
相互影响
HoloLens 是一种 MR 设备,其主要用途之一就是解放双手。 因此,它不需要使用移动设备标配的键盘、鼠标和触摸屏来操作。
那么,您如何与 HoloLens 交互? 主要有以下三种方法:
1 凝视
Gaze操作其实是VR/AR的通用操作,也是目前使用最多的VR交互方式,这里不再赘述。 但是这里需要提醒的是,人的视线不是很稳定,所以视线很容易发生偏差。 在设计 UI 和交互对象时必须考虑到这一点。 如果注视对象经常偏离,交互体验会很差。 舒服的。
考虑的方式包括但不限于:
2个手势
手势是徒手操作的重要方式,也是众多VR/AR产品竞相开发的内容,HoloLens也不例外。 然而,HoloLens 只支持两种手势。 其中,Bloom手势是系统使用的,不能在我们的开发应用中使用。 因此,我们实际可以使用的手势只有两种:Air Tap/Tap and Hold。
Air Tap/Tap and Hold是两个非常简单易学的手势,而且因为HoloLens只支持这两个手势,调整优化非常到位,这个手势的识别度非常高,错误率相当低. 它也远远领先于其他设备。
Air Tap/Tap and Hold的具体使用就不详细介绍了,请参考内容。
值得一提的是,Unity 自带的 UGUI 已经很好地支持注视和手势,UI 交互可以简单地放入你的 HoloLens 应用程序中,无需任何额外的开发工作。 需要注意的是unity 物体跟随鼠标,如果要在HoloLens中使用UGUI,必须将UGUI的Canvas中的坐标系设置调整为世界坐标系。 HoloLens无法显示屏幕坐标系下的UGUI。
3个语音命令
基于微软多年在语音识别方面的积累,改造成Cortana的语音识别软件几乎可以说是目前最好的语音识别工具,对英文的识别度很高。 目前,HoloLens 上的 Cortana 不支持除英语以外的语言识别,但相信这些都会在未来得到改善。
至此,我们已经谈到了HoloLens的Unity项目在摄像头和交互方面的特殊性。 下一次我们将深入探讨HoloLens的核心——SLAM在Unity中是如何体现的。