关于耐德佳
欢迎,希望您能通过我们的网站,更进一步了解耐德佳
第一章 绪论
- 1 -
人眼的自然视觉
了解透镜成像原理的人都知道,人眼可以看作是一个相机,这个相机的镜头就是人眼的晶状体(lens),光圈就是人眼的瞳孔(pupil),而胶片就是人眼的视网膜(retina)。人眼和相机最核心的相似之处就在于,它们的成像过程都符合透镜成像原理,即光线被瞳孔/光圈所限制,经晶状体/镜头折射后在视网膜/胶片上成一个倒立的实像。
人眼结构(图片来源:维基百科)
不同于小孔成像,透镜成像遵循斯涅尔定律(Snell's Law),即从物点发出的光线,经过镜头的折射后能够重新聚焦在像点上,物点和像点之间的位置和强度都是一一对应的关系,且物距和像距满足倒数之和等于焦距的倒数(这就是高斯光学(Gaussian optics)的基础)。对于固定焦距的光学系统来说,一旦物距发生变化(如增大),像距则相应地跟着变化(如减小)。相机便是根据这个原理对不同深度处的物体进行聚焦。但人眼具有相对稳定的生理结构,不能像相机镜头似地“拉风箱”。那么,人眼如何对不同深度处的物点成像呢?
答案是改变人眼的焦距。健康的人眼,可以通过不同程度地收缩睫状肌(ciliary muscle)来控制晶状体的形状,从而改变其焦距。使得相同的像距可以对应不同的物距,以看清不同距离处的物点。总而言之,这属于人眼产生深度视觉时所发挥的聚焦(accommodation)机能。
对于250mm至无穷远距离处的物点,健康的人眼可以几乎不费力地调节晶状体以看清它们。而250mm以内的物点,人眼想要看清它就得费点劲了,我们可以明显地感受到睫状肌的发力。这就是为什么我们从小就被提倡写字时眼睛距离课桌“一尺远”,因为这对眼睛来说是最“自然”的状态。
人类(乃至大部分动物)都具有两只眼睛。这为我们产生深度视觉提供了另一种能力——双目视觉。由于左右眼位于不同的位置,因此看到的画面则略有差异。对于同一个物点而言,它所发出的光线各有一部分被左右两只眼睛所分别接收。这两部分光线中,经过两个瞳孔中心的光线(主光线)存在一定夹角。很显然,距离人眼越近的物点,对应的光线夹角越大,即视角差异越明显。而距离人眼越远的物点,对应的光线夹角越小,乃至近似平行,即视角差异越不明显。这就是为什么我们可以很明确地辨别空中的羽毛球离我们究竟有多远,但总觉得夕阳“落在”山头上。这种双目视觉成为了我们产生深度视觉时所发挥的辐辏(vergence)机能。这是最快且最准确的一种深度视觉机能。一个很简单的例子就是,闭上一只眼,去拿桌上的笔,你会发现,你几乎无法一伸手就拿到它,因为没有了双目视觉,你对它的深度估计非常不精确。
食肉动物大多都长着一双朝前的眼镜,以获得更好的双目视觉,从而更准确地定位猎物的位置。(图片来源:Pinterest)
- 2 -
仿真状态下的视觉
显示技术是人类在丰富视觉信息方面所做的一大发明。高度概括地描述,可以说显示技术即让光以特定的参数(波长、强度、位置、方向、偏振、相位)承载我们所需要的信息而进入人眼。这些参数中能够为我们提供深度视觉的,最核心的就是方向。就聚焦机能而言,不同方向的光线进入晶状体,那些最终在视网膜上形成一个点的,其进入晶状体前必先交于某个特定位置的物点上。同理,就辐辏机能而言,那些形成特定夹角的主光线,其反向延长线也必先相较于某个特定位置的物点上。
问题就在于此——如果辐辏对应的那个物点和聚焦对应的那个物点不是同一个,会发生什么情况?
VAC 示意图
绝大多数的 VR/AR 中,像源(可能是微显示屏或手机屏)被光学系统成一个放大的虚像存在于较远位置处,也许是三米,也许是无穷远。但对于一套光学系统而言,既然焦距和物距都固定了,那么这个虚像面的位置当然也就固定了。如此一来,人眼的聚焦机能无法发挥,因为对于晶状体而言,任何一个虚物点都位于固定深度处,与聚焦相对应的深度信息丢失了。而辐辏则承担了所有立体视觉的产生机能(前面说了双目视觉是最快最准确的深度视觉机能)。从辐辏的角度来看,只要调整左目和右目图像中对应点的距离,就可以改变辐辏角,从而产生不同的深度感。这就是目前大多数 VR/AR 设备所面临的问题——辐辏-聚焦矛盾(vergence-accommodation conflict, VAC),即立体视觉中辐辏和聚焦状态的不一致。
- 3 -
VR/AR 中的 VAC 问题
当我们在使用 Occulus Rift 或 HoloLens 这些VR/AR设备时,我们通常会感到强烈的沉浸感和临场感。没错,这是立体视觉带给我们的真实感——这归功于辐辏机能。那么此时,你能感到VAC所给你带来的明显不适吗?我相信如果我不刻意提及它,你是觉察不到的。因为聚焦机能虽然也对立体视觉产生影响,但相比于辐辏机能,它的影响的确不很明显。并且,也许你会发现,绝大多数优秀的 VR/AR 场景都尽量避免了辐辏和聚焦差异很大的情形。虚拟物体一般都被渲染在距离人眼较远的位置,通常至少是250mm明视距离以外。这样的物距相对于晶状体25mm的平均焦距而言,足够其在仿真视觉和自然视觉的状态间较为舒适地切换。而如果你想再凑近观察那些虚拟物体,嗯,贴心的 HoloLens 开发者表示不建议你这么做,并对离你很近的虚拟物体进行了消隐,使你不得不在比较远的距离处去观察它们(事实上 Hololens 的立体视觉机能还包含了运动视差,这个是通过 SLAM 实现的,同样不容忽视。)。如果没有这个消隐处理,而任由你凑近去看这些虚拟物体的话,你会开始感觉到不自然,比如眼睛开始发涨,这就是 VAC 对你开出的条件:如果想要舒适,那就把虚拟物体放得远一点。
视觉不适感只是 VAC 的影响之一。VAC 的另一个重要影响就是视觉上的深度偏差。以理想成像在无穷远处的光学系统为例,由于虚拟物体的光线经过出瞳出射后总是平行的,因此人眼根据辐辏所感知到的虚拟物体的距离和人眼的瞳距成比例,也就是说,瞳距更大的人,会认为虚拟物体其实位在更远处,同理瞳距更小的人会把虚拟物体看得更近。这就导致了尽管在开发者看来,虚拟物体已经在一个准确的位置了,但用户却禁不住怀疑开发者是不是瞎。更要命的是,当我们用 SLAM 技术引入运动视差来产生立体感时,虚拟物体的深度对于任何观察者来说都是一样的。所以运动视差和双目辐辏所引发的深度感知在多数情况下也就不一致,除非 AR 头显专人专用,并且每个用户在使用前都做一个精确的标定,否则辐辏和运动视差的矛盾也没法解决。所以这下你就晕吧,辐辏、聚焦、运动视差,三者所引发的深度感知两两不一致,头号玩家?不存在的!
在单个无穷远像面的光学系统中,对于同一个像点,不同人眼的辐辏角相同,因此瞳距越大,看到的虚拟像点就越远。
对“运动视差所引发的深度感知”最直观的理解就是苹果的 ARkit 或 谷歌的 ARcore 这样基于移动设备显示的 AR。在用 ARkit 或 ARcore 所开发的应用中,如果只是举着手机,并且不参考虚实物体内容上存在的逻辑关系,我们是无法感受到虚拟物体在真实空间中的具体位置的,但一旦我们把手机运动起来,使我们能从不同的位置和方向去观察虚拟物体时,我们立刻就能直观地感受到这些虚拟物体其实就在真实空间中的一个固定位置处,栩栩如生,活灵活现。
Win10 “混合现实查看器”中的应用场景。运动视差使我们确信恐龙位于桌面上的一个固定位置处。
看到这里你可能对目前的 VR/AR 设备都绝望了,消除眩晕是不可能消除了,这辈子不可能消除掉了。不过让我们感到宽慰的是,以上两段提到的 VAC 问题,如果标定做得好的话,在虚拟物体距离人眼较远位置时是不那么严重的。所以 HoloLens 那样对近处虚拟物体消隐的方法简直是政治正确。但我们做 AR 肯定不能甘心止步于显示远处物体,我们还想让虚拟信息稳定地叠加在桌面上、书本上、手掌上,因此,VAC 问题肯定不能视而不见。于是,光场显示便呼之欲出了。
(待续)