本文作者张静是前微软上海Xbox ATG软件工程师 在前一篇文章《微软HoloLens技术解谜(上):如何还原三维场景》中我介绍了自己对于 HoloLens 背后的建模技术的看法,虽然之前在微软的 Xbox 部门工作过,但是和大家一样也是上周才知道 HoloLens 这个好玩的设备。当前微软官方对于 HoloLens 透露出来的信息非常有限,最核心的两个组件深度传感器以及全息屏幕的原理依然充满着迷题。文章发表后,在微软HoloLens技术解谜(上):如何还原三维场景的留言中读者提出了一些问题。 读者提问之“HoloLens 的深度传感器有没有可能是基于 TOF?”先介绍下背景知识,市面上常见的有三种类型的深度传感器:
我认为 HoloLens 没有使用 TOF 技术的原因是因为如果这四个摄像头的位置放的是 TOF 传感器,那么还缺少一个朝前的 RGB 摄像头用于视频聊天类 App。读者提到的中间部分我认为是微型的投影仪,HoloLens 使用微投在“挡风玻璃”上显示全息的画面。参见 Wired 的这篇报道http://www.wired.com/2015/01/microsoft-nadella/ 至于这个问题的标准答案,还得等微软发布新的信息。 读者提问之“HoloLens 能不能当 VR 用?这个问题很好,的确可以这么玩,NASA 与微软的的火星合作计划基本上是一个虚拟现实的应用,它无视了真实的环境。如果 HoloLens 可以提供调节“挡风玻璃”透光度的 API,那么调成完全不透光时就好比戴着 Oculus Rift 的头盔,是另一种体验 VR 的途径。可是朋友们,这是在浪费 HoloLens 的机能啊! 那么,作为未来的应用开发者,应该怎样充分榨干它的机能呢?这是本篇文章的重点。 正文部分首先让我脑洞开一会,为大家“介绍”下 Holo SDK。按照微软的偏好,SDK 标配的语言肯定有 C++ 和 C#,因此要进行开发,这两门语言你至少得会一门。 然后,这个 SDK 里有哪些功能呢?根据官方 demo 中的场景,我觉得基本功能至少有:
这一篇只讲“伪全息的传统应用”这种类型的应用对于传统开发者而言最容易上手,几乎不需要修改代码,自然也不需要拥有 3D 图形学的知识。大部分人会从这种应用入手开始 Holo 开发。 如果不需要 3D 知识就能实现 3D 的界面,那么 3D 的效果是哪来的呢?那就是 Windows 10 引入的全息窗口管理器 —— explorer3d.exe。我们平时启动 Windows 看到的“桌面”是窗口管理器(explorer.exe)的一部分,把“桌面”想像成三维的就行了,很简单是吧?
以视频播放器为例,播放器并不会直接将视频画面显示到桌面上,而是画到一个缓存区域,经过一系列我不知道的步骤后,explorer.exe 再将画面以“2D 的方式拷贝”到能被我们看到的地方。而 explorer3d.exe 用的是“3D 的方式”。 所谓“3D 的方式”就是使用 Direct3D 做一些“会的人嫌我讲得啰嗦,不会的人看了还是不会”的事…… 也就是在初始化应用的时候:
在应用运行时:
在应用退出时:
不用担心,这些都是 explorer3d.exe 会负责的。 细心的读者会发现我们没有用到一个很重要的功能:
要解释它我必须讲解 world、view、projection 三个矩阵,还要讲解矩阵的乘法以及 dot product 的公式等等,这些完全是图形学的知识了,一时半会讲不完,我会再专门为它们写一个系列。我打算用一句话解释下,explorer3d.exe 会维护一个全局的 global_matrix,它等于 world * view * projection,view 的值由功能 (d) 中的信息可以得到。global_matrix 的作用就好比第一人称射击游戏中的鼠标,写到这里我发现把 explorer3d.exe 视作一个 3D 游戏会简单很多,3D 游戏场景里的电视机也能播放视频,其实是一样的道理。 总结一下,这个类型的应用程序员几乎不需要修改代码,由 explorer3d.exe 负责调用 Direct3D 将传统应用的内容转换成 3D 的贴图。 |