怎样让HoloLens的成像视野中做到真实物体遮挡住虚拟物体

技术方面举个 Holodesk 的例子。图中蓝绿色的全息小球被实体的碗遮住一半,这种『遮挡』在CV中叫 occlusion 。被遮挡住是什么感觉呢?我们回忆一下自己学PS的时候,如果想P一张照片去骗别人,比如和某人的合影,去某地的旅游,往往需要你学会PS的『蒙版』功能。而这里正是用到了 DepthWriteMask ,就像用蒙版挡住了后面的图层一样~而挡住全息小球的,正是 spatial surface !在图中就是碗的 spatial surface 挡住了全息小球的一部分。这里用到了深度缓存(depth buffer),就是将小球的深度算出来,但是被遮挡的部分不渲染,于是有了『遮挡』的效果。 而它的目的就是让用户觉得:啊,原来即使我把它挡住了,全息的小球依然在那里~从而产生 presence。然后还有个好处就是让用户知道那个东西在那里,从而很好地定位它的位置。怎样让HoloLens的成像视野中做到真实物体遮挡住虚拟物体

怎样让HoloLens的成像视野中做到真实物体遮挡住虚拟物体

怎样让HoloLens的成像视野中做到真实物体遮挡住虚拟物体

根据物体离摄像头的距离算出深度信息,而不同深度的物体,就像不同图层的画面,相互遮挡。摄像头离物体的距离就叫 depth buffer 。越靠近你的深度摄像头的物体,越优先显示。怎样让HoloLens的成像视野中做到真实物体遮挡住虚拟物体

—————————————————————————————————————应用方面如果问你『你最熟悉的环境和空间是哪里?』你肯定回答说是你经常居住的地方,正如Magic leap 那句『世界是你的新桌面。』现实中你最熟悉的交互空间就是你住的地方,你最熟悉的交互就是使用你住处的物品。而 hololens 最重要的一个功能就是将全息影像呈现在你所在的空间上,正所谓『自然人机界面。』将虚拟的物体放在现实空间上,营造出一种它们确实在那里的感觉。怎样让HoloLens的成像视野中做到真实物体遮挡住虚拟物体

全息影像遮挡住了在现实中物体的表面,反过来,如果让它消失,可以让它藏在墙或柜子的后面。怎样让HoloLens的成像视野中做到真实物体遮挡住虚拟物体

学过三维的同学都知道有个词叫做『刚体碰撞』,因为有了 mesh ,所以虚拟物体和现实物体发生接触时,我们希望看到它们之间『碰撞』而不是一下就『穿过去』了。不过因为技术的限制,我们现在看到的更多是现实物体对虚拟物体的影响,而很少有虚拟物体对现实物体的影响。(图片来自《Young Conker》)怎样让HoloLens的成像视野中做到真实物体遮挡住虚拟物体

怎样让HoloLens的成像视野中做到真实物体遮挡住虚拟物体

但是,因为人不是四维动物,所以在三维中的遮挡,比如全息影像被现实物体所遮住的时候,而用户又想与它交互的时候,他就会感觉不爽。所以,一般『藏』在真实物体后面的全息影像,我们用降低全息影像透明度的方法告诉用户『它藏在那个物体后面』,用户想和它交互的时候随时可以过去找它。
■网友
这个很简单啊 你首先要清楚3D空间在你眼前的呈现形式,是经过剪切和坐标变换渲染到2D空间的,而在虚拟的空间里,这种互相遮挡的关系,是通过深度值(比如opengl的深度测试)来实现的。


推荐阅读