1、视差基础:什么是视差?人眼立体视觉原理、视差与深度的关系
各位同学好,我是老张。在3D显示这个行当摸爬滚打了十几年,今天咱们来聊聊最基础、也最核心的一个概念——视差。
说白了,没有视差,就没有立体感。你看到的那些3D电影、VR眼镜里的沉浸世界,追根溯源,都是靠视差“骗”过你的眼睛。
1.1 什么是视差?一个简单的实验
先别急着看公式。我建议你做个动作:伸出一根手指,竖在眼前30厘米处。然后轮流闭上左眼和右眼。
看到了吗?手指的位置在“跳”。
当你用左眼看时,手指在背景的左边;换成右眼,手指就“跑”到了右边。这个左右眼看到的、物体在背景上位置的差异,就是视差。
核心定义:视差(Parallax)是指由于观察位置不同,同一物体在视网膜上成像位置的差异。单位通常用像素或角度(弧分)表示。
我在早期做裸眼3D手机项目时,就遇到过一个问题:屏幕分辨率不够,视差算出来只有几个像素。结果呢?用户戴上眼镜看,立体感很弱,像在看纸片。嗯,这里要注意,视差太小,立体感就出不来。
1.2 人眼立体视觉原理:大脑是个“三角测量仪”
为什么会这样?因为人眼不是摄像机,而是一对双目传感器。
你想想看,我们两只眼睛之间大约有6-7厘米的间距,这叫瞳距(IPD, Interpupillary Distance)。正是这个间距,让左右眼看到了两个略有不同的画面。
大脑收到这两张“照片”后,会做一件事:匹配对应点,计算差异。这个差异就是视差。然后,大脑根据视差的大小,反推出物体的深度。
这个过程,本质上就是三角测量。
个人经验:我记得有一次调试VR头显,瞳距设置错了5毫米。结果用户戴上后,说看东西有重影,而且头晕。后来我强制校准了IPD参数,问题立刻解决。所以,瞳距是立体视觉的物理基础,千万别忽略。
人眼立体视觉的完整链条是这样的:
- 物理输入:物体反射光线,进入左右眼。
- 视网膜成像:左右眼视网膜上形成略有偏移的二维图像。
- 神经传输:视神经将信号传给大脑视觉皮层。
- 大脑融合:大脑找到左右眼图像的对应点,计算视差。
- 深度感知:大脑根据视差映射出深度,产生立体感。
这个过程非常快,快到你自己都意识不到。但一旦视差计算错误,大脑就会“打架”,轻则立体感消失,重则眩晕呕吐。
1.3 视差与深度的关系:一个反比公式
好,现在咱们来点硬核的。视差和深度到底是什么关系?
我直接给结论:视差与深度成反比。
公式很简单:
视差 (d) = (瞳距 (B) × 焦距 (f)) / 深度 (Z)
其中:
- B:瞳距,约6.5cm
- f:眼睛的焦距,约17mm
- Z:物体到眼睛的距离(深度)
你看,Z在分母上。这意味着:
- 物体越近(Z小),视差越大。比如手指在眼前30cm,视差很明显。
- 物体越远(Z大),视差越小。比如看远处的山,左右眼看到的几乎一样。
避坑指南:我曾经在开发3D游戏时,把远处物体的视差设成了0。结果玩家说“远处的山像贴图,没有立体感”。后来我意识到,即使物体在无穷远,视差也不应该为0,而是趋近于0。如果硬设为0,大脑会认为那个物体是“无限远”,反而产生不自然感。
为了让你更直观地理解,我画了一张图:
从这张图你可以看到:近处的红色物体,左右眼光路夹角大,视差大;远处的绿色物体,光路夹角小,视差小。这就是视差与深度反比关系的直观体现。
1.4 视差的分类:正视差、负视差与零视差
在3D显示中,视差不是随便给的。根据物体在屏幕前后的位置,视差分为三种:
| 类型 | 定义 | 视觉感受 | 典型应用 |
|---|---|---|---|
| 正视差 | 物体在屏幕后方,左右眼图像交叉点在屏幕后 | 物体“陷入”屏幕内部 | 3D电影中的背景、远景 |
| 负视差 | 物体在屏幕前方,左右眼图像交叉点在屏幕前 | 物体“飞出”屏幕 | 3D电影中向你飞来的物体 |
| 零视差 | 物体正好在屏幕平面上,左右眼图像重合 | 物体与屏幕平齐 | 字幕、UI界面 |
关键点:零视差平面(ZPS, Zero Parallax Setting)是3D内容制作的基准面。我建议你在设计3D场景时,先把主要物体放在零视差平面上,然后根据深度需求,向正负方向扩展。这样能最大程度减少视觉疲劳。
举个例子:在制作3D电影《阿凡达》时,导演卡梅隆就严格控制了负视差的幅度。他规定,负视差不能超过瞳距的1/30,否则观众会感到眼睛“对不上焦”。这个经验值,后来成了行业标准。
1.5 视差与景深的关系:一个实用的表格
最后,我整理了一个表格,帮你快速理解视差、深度、景深三者的关系:
| 参数 | 定义 | 与视差的关系 | 实际影响 |
|---|---|---|---|
| 视差 | 左右眼图像对应点的位置差 | — | 决定立体感的强弱 |
| 深度 | 物体到观察者的实际距离 | 反比:深度越大,视差越小 | 决定物体看起来的远近 |
| 景深 | 人眼能清晰感知的深度范围 | 正比:视差范围越大,景深越宽 | 决定立体空间的“厚度” |
嗯,这里要注意:景深不是越大越好。我在测试一款裸眼3D显示器时,为了追求“震撼”,把视差范围拉得很大。结果呢?用户看了10分钟就说眼睛酸胀。后来我查了资料,发现人眼舒适的视差范围大约在±1.5度(弧分)以内。超过这个范围,大脑就需要强行“辐辏-调节”分离,容易疲劳。
个人习惯:我现在做3D内容时,会先用一个“视差标尺”工具,把场景中所有物体的视差控制在±1度以内。这样既能保证立体感,又能让用户长时间观看不累。你可以试试。
好了,这一章的内容就到这里。视差是3D显示的基石,理解它,后面的内容就顺了。