2. 人眼生理基础:眼球结构、视网膜与中央凹、视锥细胞与视杆细胞、视觉感知特性
做眼动追踪这些年,我越来越觉得——你如果不了解人眼,就别谈什么光学设计。说白了,我们做的所有近眼显示方案,最终都是要跟这颗眼球打交道。它可不是一个简单的摄像头,它是一个极其精密、非线性、还带点“脾气”的光学系统。
这一节,我就带你从工程师的视角,把眼球拆开看看。嗯,咱们不搞医学解剖那套,而是从光学和信号处理的角度,理解它到底是怎么工作的。
2.1 眼球结构:一个活着的“光学模组”
先看整体。眼球直径大约24mm,形状像个球,但前后径略长。我个人习惯把它类比成一个“自动对焦+自动光圈+曲面传感器”的集成模组。
- 角膜:最外层的透明组织,提供约2/3的屈光力。相当于镜头的前组镜片,曲率半径约7.8mm。
- 虹膜与瞳孔:自动光圈。瞳孔直径在2-8mm之间变化,光照强时缩小,暗时放大。做眼动追踪时,瞳孔大小直接影响红外光的反射强度。
- 晶状体:变焦镜头。通过睫状肌调节曲率,实现远近对焦。年龄大了调节能力下降,就是老花。
- 玻璃体:填充眼球内部的胶状物质,折射率约1.336。嗯,这里要注意,它会影响光线路径。
- 视网膜:曲面传感器。后面重点讲。
避坑指南:我曾经在早期设计眼动追踪光路时,把眼球当成标准球面模型来算。结果实际测试偏差很大。后来才发现,角膜并非完美球面,而是非球面,中央区域更陡,边缘更平。这个差异在离轴追踪时尤其明显。
下面这张图,是我习惯用来跟团队讲眼球结构的框架。它把眼球拆成了“光学层”和“感知层”两部分。
2.2 视网膜与中央凹:曲面传感器上的“像素岛”
视网膜不是均匀的。你想想看,如果整块传感器都是同样密度,那数据量得有多大?人眼进化出的方案是——只在中央区域堆高密度像素,周边区域稀疏采样。
中央凹(Fovea):直径约1.5mm的区域,位于视网膜正中央。这里只有视锥细胞,没有视杆细胞。每个视锥细胞几乎都单独连接一根神经纤维,所以空间分辨率极高。你阅读这段文字时,其实就是在用中央凹逐字扫描。
我做过一个实验:让受试者盯着屏幕中心,然后在周边区域显示一个很小的光点。结果发现,偏离中央凹2°以外,人眼对细节的分辨能力就急剧下降。这直接影响了我们做注视点渲染(Foveated Rendering)的策略——中央凹区域必须全分辨率渲染,周边可以大幅降采样。
实战技巧:在设计眼动追踪系统时,我建议把中央凹的角分辨率作为基准。人眼中央凹的角分辨率大约1弧分(0.0167°)。这意味着,如果你的显示系统PPD(每度像素数)低于60,人眼就能看出像素感。嗯,这就是为什么高端VR头显都在往这个方向卷。
2.3 视锥细胞与视杆细胞:双模传感器
视网膜上有两种感光细胞,它们分工明确:
| 特性 | 视锥细胞 | 视杆细胞 |
|---|---|---|
| 数量 | 约600万 | 约1.2亿 |
| 分布 | 中央凹密集,周边稀疏 | 中央凹无,周边密集 |
| 灵敏度 | 低(需要强光) | 高(可感知单个光子) |
| 色彩 | 彩色(S/M/L三种) | 黑白(只有一种) |
| 响应速度 | 快(约10ms) | 慢(约100ms) |
| 主要功能 | 明视觉、细节、色彩 | 暗视觉、运动检测 |
视锥细胞有三种类型,分别对短波(S,蓝)、中波(M,绿)、长波(L,红)敏感。它们的峰值波长大约在420nm、530nm、560nm。有意思的是,L和M的响应曲线有很大重叠,所以人眼对红绿之间的差异最敏感,对蓝黄之间的差异次之。
视杆细胞只有一种,对波长约500nm的蓝绿光最敏感。这就是为什么在暗光环境下,我们看东西是偏蓝绿色的——说白了,视杆细胞在加班,视锥细胞已经下班了。
注意:视杆细胞的响应速度比视锥细胞慢一个数量级。这意味着在暗光环境下做眼动追踪时,瞳孔反应和眼球运动的采样率需要相应降低。我曾经在低光照条件下用240fps的相机做追踪,结果发现视杆细胞的滞后导致瞳孔中心定位出现系统性偏差。后来把帧率降到120fps,配合更长的曝光时间,反而更准了。
2.4 视觉感知特性:人眼不是线性系统
做近眼显示,光懂解剖结构还不够。你得理解人眼是怎么“感知”世界的。这里有几个关键特性,直接影响我们的光学设计:
2.4.1 对比度敏感度函数(CSF)
人眼对不同空间频率的对比度敏感度不一样。对中频(约4-8 cpd)最敏感,低频和高频都差一些。这意味着,你在显示系统中引入的高频噪声(比如像素网格),人眼其实没那么在意。但中频的伪影(比如摩尔纹)就非常明显。
2.4.2 视觉暂留与临界闪烁频率
人眼有约20-30ms的视觉暂留。当闪烁频率超过约60Hz时,人眼就感觉不到闪烁了。但这是针对中央凹的。周边视野对闪烁更敏感,临界频率可以到80-90Hz。所以做VR头显时,我建议把刷新率做到90Hz以上,否则周边视野的闪烁感会让人头晕。
2.4.3 亮度感知的非线性
人眼对亮度的感知是近似对数的。也就是说,在暗区,你能分辨很小的亮度差异;在亮区,你需要更大的亮度差才能感觉到变化。这就是为什么HDR显示需要10bit甚至12bit的色深——在暗部区域,8bit的量化步长太大了,会出现条带效应。
核心总结:人眼不是一台均匀的相机。它是一台“中央高分辨率、周边低分辨率、对中频敏感、对暗部细节挑剔”的智能传感器。我们做眼动追踪和光学联动,本质上就是在跟这些特性打交道。理解它们,你才能设计出真正“看着舒服”的近眼显示系统。
好了,这一节就到这里。记住我刚才说的那些坑——角膜非球面、视杆细胞滞后、CSF曲线——下次做设计时,你会感谢自己现在花时间理解了这些基础。
公众号:蓝海资料掘金营,微信deep3321