|
文/胡痴儿2.0
在VR游戏开发中,如何充分利用视觉系统对深度的感知从而营造更强的立体感与深度感是一门很深的学问。这里涉及到一个术语,叫做深度感知(Depth perception)。
按照《三体3》的说法,人类是三维动物,所以对二维事物或空间具有绝对控制,也就是当人面对二维事物时,能够一览无余地看到上面所有的信息,就像手机或电脑的屏幕,就像我们长达千年的在纸面上写字画画,我把这些叫做X、Y轴。
X、Y轴上的二维的移动,二维的位置……这些都无法逃过我们的眼睛。
而当面对三维事物,到了VR,Z轴就来了,简单的理解,这个Z轴就是感知你距离物体的远近。
而Z轴,正是人类感知深度(或者距离),它通过很多信息组合在一起,视觉系统经过计算后才能判断大致的深度。
所以,一个双目视觉加上一个头的六自由度移动转动,就已经让你感到很强的立体感了。
而,深度信息越多,大脑越能准确判断物体的Z轴。当然,这也是信息发展的趋势,即用户们说自己感受到了立体感(stereoscopic effect),觉得VR中看起来真实、看起来爽,其实是因为VR还原了三个维度的信息,而传统手机和电脑只还原了两个维度的信息。
人类感知深度的方式分为静态的双眼感知深度、单眼感知深度,以及动态的转动头部产生运动视差感知深度线索(depth cue)。
值得补充的是,在VR中我们常听说的accommodation和convergence,正是人眼感知距离的绝对距离信息(absolute distance information),accommodation是人眼告诉视觉系统它聚焦在多远的地方,而convergence则是双眼视线所形成的角度,这些都有绝对的距离,视觉系统可以算出它离你多远。
而其它的所有深度信息都是相对距离信息(relative distance information),视觉系统通过判断两个物体之间的深度信息,然后做比较:哪个离你近?哪个离你远?
双眼深度暗示
在讲双目视觉之前,我想先讲讲几种生物。
第一种是以斑马为代表的开放式平原食草生物(open-plains herbivores)。
偶蹄类食草动物(hoofed grazers)
它们的双眼是开放式的,FOV接近360°,所以当它们在吃草时,能够从任何方向发现进攻它们的捕食者。
而发展处双目视觉的,只有捕食者(predators)
当它们发现猎物时,它们通过双目视觉来判断和猎物之间的距离。一个猛扑或者俯冲之下将猎物扑倒在地。
所以……全景视觉是防守性策略,而双目视觉是攻击性的。
所以,双目视觉的进化优势,就在于它可以判断距离。
1、立体感(Stereopsis)→双眼视差(binocular disparity)又称 binocular parallax。
所谓视差(parallax),无论是双目视差(binocular parallax)还是运动视差(motion parallax)从本质上来说,是双眼因为相隔一个瞳距,处于不同位置,有不同的视角(viewpoints),当看同一个物体时左右眼看到该物体的不同角度,然后这两张看到的画面被大脑所融合(fuse)。
左右眼通过不同的图像判定两个物体的距离。
左眼看到的
右眼看到的
比如双眼看到的图像差别越大,视差越大,大脑则告诉我们物体离我们很近,反之,当双眼看到的图像差别越小,视差越小,大脑则告诉我们物体离我们很远,所以在VR中离我们很远的物体我们可以直接放在一张三自由度的全景图上……这也是我们说的双眼的三角定位,先以被用在双目摄像头上。
双眼同时看到两张不同的二维图像,转动头部、移动头部看到的不同的连续的图像,每一次你都能看见不同角度和不同位置的图像,而这些图像被大脑整合成、还原成『大脑以为的样子』。
双眼看到不同的图像:
大脑融合图像
三维显示(3D Display)的技术也因此而来:
比如现在的VR就是给左右眼两个相隔一个瞳距的VR中的镜头看到的图像:
在VR出现以前,我们一般采用过滤的方法(filtering methods),就是滤出两个不同的层让双眼看到。
比如最早的红蓝立体眼镜:
vergence——两只眼睛朝内或朝外转动,双眼的视线相交于一个深度的点上。
而这种vergence受瞳距(inter-pupillary distance )影响,瞳距越大,两只眼睛看到的图像差别越大,深度感也就越强,当瞳距大于用户的瞳距时,则会产生超立体(hyperstereo)的效果。
而VR中的瞳距小于现实中的瞳距则会产生次立体(hypostereo)的效果,图像看起来偏扁平。
物体在不同的距离会有不同的视差量(Parallax Amount),可以用双眼视线所形成的角度来表示,一般来说,眼睛看的东西越远,双眼视线所汇聚的角度越小,晶状体压得越扁,反之,眼睛看的东西越近,双眼视线所汇聚的角度越大,眼睛晶状体拉得越长。
但是如果视线所成角为0,即双眼视线平行,则要求物体距离视线无穷远,其实是不可能的。
目前用HMD成像的VR,将离你眼睛距离很近的屏幕通过菲涅尔透镜成一个2-3米的虚像,而如果这个物体的刚好在成像距离上,则为0 parallax,你的眼睛聚焦过去还很舒适,但是它固定在离你眼睛2-3米的固定距离上,不能动。
如图,一个物体+ parallx可以成像在屏幕之后,但是因为HMD只能成像在屏幕上,所以眼睛辐辏冲突不舒服;同理,一个物体-parallx,成像在屏幕之前,则不仅会因为辐辏而不舒服,还有可能让视线难以聚焦。
上面这幅图中,铅笔线为accommodation,墨兰水笔线为convergence,我们可以看到。
当且仅当物体刚好落在虚像上(即屏幕上的像素透过菲涅尔透镜在2-3米处产生的虚像)时,accommodation和convergence才重合,此时用户是舒适的。换句话说,parallax越接近0,用户观看越舒适。
这给我们的VR内容提了一个要求,即需要用户聚焦的内容,最好出现在2-3米内,但是其实是做不到的,因为需要用户伸手去抓,用手柄去交互的部分大部分在半米内,所以无法真正避免,只有等待光场投影。
而超过屏幕虚像的成像距离,虽然也会引起辐辏,但是一般用户不会没事去看那些距离自己很远的物体,这不符合现代人的用眼习惯。
但是VR中有些移动的物体,从离你10米的距离移动到离你半米的距离,这时晶状体由convergence神经调节带动引起变化,辐辏就会相当剧烈。
或者说,convergence看屏幕的视线和accommodation真正聚焦的视线差别越大辐辏也就越强烈。比如+ parallax时,眼睛看远处,convergence让眼睛转动,双眼视线的交点处于该物体上,但是实际却交在了屏幕上,convergence因神经调节带动accommodation压扁晶状体,却无法聚焦上,于是你的眼睛不断颤抖,眼压很大。
我们通常所说的视差都是水平视差(horizontal parallax),因为人习惯左右水平转动头部,更因为人的双眼水平地分布在左右两侧,所以看到的是左右两张图像,它们是水平的。
但还有一种是垂直视差(Vertical Parallax)常被我们忽略,而产生垂直视差的方法则是扭动你的脖子。
你可以看那些jump或surround拍出来的360立体视频,然后用垂直视差(倾斜头部)的方法试验,然后视觉系统会发现它们只是两个球面。
在下面的镜头看到的:
在上面的镜头看到的:
上下镜头融合后看到的图像:
当然,真实的情境中我们应该是水平视差和垂直视差结合的,头部自由转动、眼球自由转动……的一种复杂的场景。
立体阴影(Shadow Stereopsis)
VR和真正的双目视觉差距的另一个问题就在于视场角过小,导致视觉范围内显示的东西少,比如一个物体因为双目视差,只有一只眼睛看到了它,而出了另一只眼睛的FOV,此时就只能用单目来判定深度信息了。
我们说VR中判定深度主要的方法是双目视差,而到了单目,某些用户很可能很难判定深度,从而出现一个物体在那里,你却无法感知它的深度的感觉。
|
|