Files
vrsub/docs/VR双目字幕景深与遮挡调查报告.md
T
cat-shark 2e8bbb15a4 feat: ASS字幕移到顶部安全区并加透明度(零视差不变)
- srt-to-dual-eye-ass: an2底部→an8顶部对齐,MarginV改为可配margin_top(默认120),
  字幕避开画面中央人脸高发区(B-1顶部安全区)
- 文字填充&H80FFFFFF→&HB3FFFFFF(约70%透明),描边纯黑→&H80000000半透明黑
- A-1零视差保持不变:左右眼水平相对位置一致,字幕固定屏幕平面
- 新增3条测试(顶部对齐/自定义margin_top/invoke读参数),ass节点覆盖率100%
- 新增docs/调查报告:双目视觉景深原理、字幕深度配置公式与遮挡解决方案
2026-09-05 21:03:55 +08:00

402 lines
25 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# VR 双目字幕景深与遮挡问题调查报告
> 调查日期:2026-09
> 范围:`vrsub` 单体版 `srt-to-dual-eye-ass` 节点(`nodes/ass.py`)生成的 VR 双眼
> 字幕在头显中"景深/位置漂移、挡住人脸"问题的原理与配置/解决方案。
> 文档性质:原理调查报告 + 可选配置方案;**不含代码改动**(改动需另行评审)。
---
## 1. 问题现象与现状定位
### 1.1 用户观察到的现象
用 VR 头显观看 SBS(左右眼各半幅并排)双目视频时:
1. 字幕在虚拟环境中"自带"一个深度位置,时常与视频主体(人脸/近景物体)**不在同一景深**,
眼睛在字幕与画面主体之间来回对焦、会聚,有"飘浮感"或疲劳感;
2. 字幕有时**正好压在人物面部**上,遮挡人脸,影响观看。
### 1.2 当前生成逻辑(代码事实)
`nodes/ass.py` 的做法是:
- 输出一个 `PlayResX×PlayResY`(默认 `3840x1920`)的 ASS 画布;
- 为**同一句字幕文案**生成两条 Dialogue,分别套用 `LeftEye` / `RightEye` 两个样式;
- `LeftEye` 样式的文本区域落在**左半幅**`MarginL=50, MarginR=1920`),
`RightEye` 落在**右半幅**`MarginL=1920, MarginR=50`);
- 两眼的垂直位置完全一致(`MarginV = height/2 + 60``{\an2}` 底部中央对齐);
- 左右两半幅中的字幕**横向相对位置也完全一致**。
播放器把 SBS 帧的左半幅给左眼、右半幅给右眼后,左右眼画面中字幕落在各自视野的
**同一方向角**上——这正是"零视差 / 屏幕平面"的定义(详见 §2)。
结论:**当前实现把字幕固定渲染在"屏幕平面"上**(即双眼融合位置 = 头显虚拟屏幕所在
深度,通常约 1.3~2 m 光学距离)。而 VR 视频内容本身带有左右视差:人脸、近景道具等
可能凸出屏幕(负视差/交叉视差,视觉上更近)或陷入屏幕后(正视差,更远)。于是:
- 当画面主体在屏幕前或屏幕后较远时,主体与字幕不在同一深度 —— 这就是"景深不匹配"
- 当画面主体(人脸)位于屏幕中央附近、字幕恰好也画在中央(当前 `MarginV` 使字幕位于
画面中部偏下)时,二者在屏幕坐标上重叠 —— 这就是"挡脸"。
> 也就是说:**"景深不匹配"与"挡脸"是两个不同层面的问题**。
> 前者由"字幕双眼视差 ≠ 画面主体双眼视差"引起(深度维度);
> 后者由"字幕与主体占用同一块屏幕二维坐标"引起(平面维度)。
> 解决方案必须分别处理,不能混为一谈(见 §4、§5)。
---
## 2. 双目视觉与立体显示的基本原理
### 2.1 人眼如何感知深度
人眼判断深度依赖多类线索,立体显示主要利用的是**双眼线索**:
- **双眼视差(binocular disparity**:左右眼从不同位置观察同一物体,成像在视网膜上
存在水平位置差。大脑通过视差量级与符号判断物体的相对距离。
- **会聚(vergence)**:双眼注视近处物体时眼球向内转(会聚),看远处时近乎平行。
会聚角直接由注视距离决定,是一个**肌肉本体感受**线索。
- **调节(accommodation)**:晶状体通过改变曲率把注视点清晰成像在视网膜,调节量对应
注视距离,也是一个**肌肉线索**。
- 视差又分两类:
- **交叉视差(负视差 / crossed / 出屏)**:物体在屏幕前方,左右眼看到的像互相"交叉",
双眼会聚于屏幕**前**
- **非交叉视差(正视差 / uncrossed / 入屏)**:物体在屏幕后方,双眼会聚于屏幕**后**。
- 物体恰好在屏幕平面时视差为零,双眼会聚点正好落在屏幕上。
在自然世界中,**调节与会聚指向同一距离**:看多近就聚焦多远、双眼就转多近。二者联动
且有同一套肌肉反馈。立体显示器(含 VR 头显)打破了这个联动,见 §2.2。
### 2.2 会聚-调节冲突(VAC)是立体观看疲劳的根源
Hoffman 等人(2008J Vis 8(3):33PMID 18484839)在"会聚-调节冲突损害视觉表现并
造成视觉疲劳"一文中指出:
> 立体显示器把所有图像呈现在**同一个物理表面**上,因此**调节与模糊线索始终指向屏幕
> (或头显透镜的固定光学距离)**,而会聚却被双眼视差拉向画面内容所在的深度。两者被
> 强制解耦,导致:(a) 需要更长的时间才能识别立体刺激;(b) 限时任务的立体敏锐度下降;
> (c) 感知深度失真;(d) 疲劳与不适增加。
**VR 头显的特殊性**:HMD 的每只眼睛通过透镜观看一块近屏,光学上等效于把屏幕放在一个
**固定距离**(多数消费级头显约 1.3~2 m,部分早期设备更近),并且**没有真实环境参照**,
眼睛无法通过"看屏幕以外的东西"来放松调节。因此 HMD 中 VAC 是持续存在的(Kramida,
IEEE TVCG 2016 对此有综述)。画面中任何"深度偏离屏幕平面较远"的内容,都会让使用者
承受相应大小的调节-会聚冲突。
Shibata、Kim、Hoffman、Banks2011J Vis 11(8):11PMID 21778252)进一步量化了
"舒适区(zone of comfort"
> 对**给定观看距离**,存在一个能让绝大多数人不感到不适的**有限深度范围**;冲突的屈光度
> 越大越不适,且"内容在屏幕前"与"内容在屏幕后"在不同观看距离下不适程度不对称。
> 临床上的融合/调节测量(隐斜、单眼清晰融像范围)可以预测个体的易感性。
工程上常引用的经验结论是:在立体显示器上把内容深度限制在屏幕前后约 **±0.3~0.5 屈光度
D**(约屏幕前后 0.2~0.6 m,取决于观看距离)以内,绝大多数观众可舒适观看;超出此
范围疲劳与融像失败显著上升。注意**这是对常规直视型显示器**的结论,对 HMD 同样适用、
甚至更严格(因为 HMD 完全没有真实环境放松调节的途径)。
### 2.3 视觉疲劳研究的其他关键结论
- **Yano 等(Displays 2004**"立体 HDTV 图像视觉疲劳的两个因素"——疲劳与
① 会聚-调节冲突的累积、② 画面内大视差/快速视差变化都有关系;视差越大、变化越快越疲劳。
- **Speranza 等(Proc. SPIE 6055, 2006**:立体图像中**大视差与画面运动叠加**会显著
降低舒适度——即使单帧视差不大,运动中反复跨越会聚点也使人疲劳。
- **Lambooij 等(J. Imaging Sci. Technol. 2009,综述)**:系统地总结了立体显示
不适/疲劳的诱因:过大的视差、过快的视差变化、会聚-调节冲突、观看时间、个体差异等。
对**字幕**的启示(结合上述原理与行业实践,如 SMPTE ST 428-10/429-12 的数字影院
字幕惯例、各 3D 电影制作规范):
1. **文本是"强调节刺激"**:阅读要求眼睛持续、精确地聚焦在字符上。把字幕放在零视差
(屏幕平面)时,调节与会聚指向同一处,阅读负担最低、字符最清晰;
2. **字幕若带视差**(放在场景深度),会让观众在"读字"与"看场景"之间来回切换会聚点,
且字幕常常持续整句数秒——属于"长时间、恒定的大视差",正踩中疲劳研究的雷区;
3. 因此,3D 电影/电视的字幕在**绝大多数情况下被放在零视差平面**,只有少数"叙事性
字幕/内嵌文字"会随物体入画。
> **核心结论 A(对应"景深不匹配")**:字幕在虚拟空间中的"位置/景深"完全由**左右眼
> 字幕渲染的水平错位(视差)**决定,与字幕在屏幕上画在哪里(上下左右)是**两回事**。
> 想要"把字幕放到某个深度",唯一要改的就是**左右眼各自字幕的水平位置差**。
---
## 3. 把"深度配置"落到 ASS 几何上
### 3.1 SBS 视频的字幕如何变成"双眼视差"
设 SBS 帧总宽为 `W`,左半幅给左眼、右半幅给右眼;`w = W/2` 为每眼半幅宽。
当前 ASS 以 `PlayRes = 3840x1920`(等于两条 1920 宽的半幅)建模:
- 字幕在左半幅中的水平位置记为 `xL`0..w),右半幅中记为 `xR`0..w);
- 当前代码:`xL == xR`(两半幅内相对位置相同)⇒ 两眼中字幕位于**同一方向角** ⇒
**零视差,字幕在屏幕平面**
- 若想让字幕**比屏幕更近(出屏)**:左眼图像中的字幕应**向右**移,右眼图像中的字幕应
**向左**移,即 `xL > xR`(交叉视差,双眼会聚点移到屏幕前);
- 若想让字幕**比屏幕更远(入屏)**:反过来 `xL < xR`(非交叉视差,会聚点移到屏幕后)。
> 方向上的一句话记忆:**"左眼看得偏左、右眼看得偏右" ⇒ 物体比屏幕近**;
> **"左眼看得偏右、右眼看得偏左" ⇒ 物体比屏幕远**。
> 与真实世界一致:近物在左右眼视网膜上位置相反(交叉),远物相同方向。
### 3.2 从"目标深度"反推每眼要偏移多少像素
设:
- `S` = 虚拟屏幕距离(≈ 头显光学焦距对应的观看距离,通常 1.3~2 m,可查头显规格);
- `C` = 想让字幕出现的深度距离(`C < S` 出屏更近,`C > S` 入屏更远);
- `IPD` = 瞳距,成人均值约 0.063~0.065 m
- `p` = **单眼像素的角宽度**(度/像素)= 单眼水平视场角 ÷ 每眼水平分辨率。
例如某头显单眼水平 FOV ≈ 100°、每眼 2048 px ⇒ `p ≈ 0.049 °/px`(等距柱状画面中央
区域近似;边缘因投影会拉伸,但字幕通常位于画面中央,近似够用)。
两步换算:
1. **需要的双眼视差角**(小角度近似):
`η (rad) ≈ IPD × (1/C 1/S)`,转为度数 `× 180/π`
例:`IPD=0.065 m, S=1.6 m, C=1.1 m`(比屏幕近 0.5 m)⇒
`η ≈ 0.065 × (0.909 0.625) = 0.0185 rad ≈ 1.06°`
又例:`C=2.2 m`(比屏幕远 0.6 m)⇒ `η ≈ 0.065 × (0.455 0.625) = 0.0111 rad ≈ 0.63°`
2. **每眼水平平移量**:让左眼画面右移 `δ` 像素、右眼画面左移 `δ` 像素,会产生约
`2δ·p` 的双眼视差角,所以:
`δ (px) ≈ η(度) / (2p)`
接上例(`p=0.049°/px`):`η=1.06° ⇒ δ ≈ 10.8 px``η=0.63° ⇒ δ ≈ 6.4 px`
> 必须提醒:**`p` 因头显与播放器而异**(不同 FOV、是否等距柱状重投影、画面是否被
> "拉近"播放)。因此最稳妥的工程做法是**把"深度"暴露成可调参数而不是写死像素值**,
> 让用户在自己设备上微调一次即可(见 §4.2)。本节公式只用于给出合理初值。
### 3.3 舒适区边界对应的像素量级(实用参考)
`|Δ = 1/S 1/C|`(屈光度差)限制在约 0.3 D 内作为**舒适初值**,以
`IPD=0.065 m, S=1.6 m, p=0.049°/px` 测算:
| 字幕目标深度 C | 相对屏幕 | 视差方向 | 双眼视差角 | 每眼偏移 δ |
| --- | --- | --- | --- | --- |
| 1.6 m | 屏幕平面(0 | 零视差 | 0° | 0 px |
| ≈1.22 m | 出屏约 0.38 m+0.19 D | 交叉(近) | ≈ +0.73° | ≈ +7 px |
| ≈1.08 m | 出屏约 0.52 m+0.30 D,舒适初值上限) | 交叉(近) | ≈ +1.12° | ≈ +11 px |
| ≈2.3 m | 入屏约 0.7 m(−0.19 D | 非交叉(远) | ≈ 0.71° | ≈ 7 px |
| ≈3.05 m | 入屏约 1.45 m(−0.30 D,舒适初值上限) | 非交叉(远) | ≈ −1.11° | ≈ 11 px |
**量级结论**:让字幕"明显换一个深度",通常只需**每眼 5~15 个像素的水平错位**;
±1° 双眼视差(每眼约 ±10 px @2048 半幅)就已是"明显出屏/入屏"的观感,同时也是
多数观众能长时间舒适融合的边界附近。做配置时**不要一上来就给几十上百像素的错位**。
### 3.4 在 ASS 里如何表达这个水平错位(可行性说明)
当前实现让左/右眼字幕各自居中于半幅,水平位置由样式的 `MarginL/MarginR` 决定。
要加入视差偏移,有两种**不改变协议、不动播放链路**的表达方式:
- **按样式偏移**:给 `LeftEye` 样式的文本区整体右移 `δ``RightEye` 整体左移 `δ`
(即在各自半幅内把 `MarginL/MarginR` 同时平移),实现"整片字幕一个深度";
- **按句偏移**:在 Dialogue 的文本前缀使用 `{\an2\pos(xL+δ, y)}` / `{\an2\pos(xR−δ, y)}`
覆盖水平位置,实现**逐句不同的深度**(例如对白在屏幕平面、需要强调/场景绑定字幕
放到特定深度)。
垂直方向(上下)只影响"放在画面哪里",**不影响深度**。
---
## 4. 方案 A:让字幕处于"正确"的深度
目标:消除"字幕景深与视频主体不匹配"的漂移感,同时把疲劳风险压到最低。
### 4.1 A-1 默认零视差(屏幕平面)——推荐的保守默认
- 做法:维持现状(`xL == xR`),把字幕放零视差平面。
- 理由:
1. 文本是强调节刺激,字幕放在屏幕平面时**调节=会聚**,阅读最轻松(§2.2/§2.3);
2. VR 视频观看距离固定,屏幕平面本来就处在头显最舒适的深度区(VAC 为 0);
3. 字幕与所有"也在屏幕平面的内容"深度一致,漂移感最小;
4. 全行业 3D 字幕的主流做法。
- 适用:绝大多数对白字幕。
- **它与当前代码的差别**:当前实现其实**已经是零视差**,但有两个真正的缺陷需要修:
- 播放器若以"整帧平面"方式渲染 ASS(很多播放器把字幕贴在全景帧上)没问题;但如果
播放器把字幕当作 **2D 悬浮层**叠加在 SBS 帧之外,深度由播放器决定,与 ASS 无关——
此时需要确认播放链路(见 §6 局限);
- 垂直位置默认在画面中部(`MarginV = height/2+60`),导致挡脸高发——见 §5。
### 4.2 A-2 "贴合主体深度"模式(可调参数,谨慎使用)
若希望字幕"跟随"视频主体所在的深度(例如大部分时间人物位于屏幕前约 0.5 m),可让字幕
带一个**固定的、小的、与主体同方向的视差**,把字幕放到主体的平均深度附近:
-`srt-to-dual-eye-ass` 节点增加可选参数,例如:
- `depth_mode``screen`(零视差,默认)| `scene_fixed`(固定目标深度)|
`per_scene`(逐场景,需深度估计,远期);
- `target_depth_m` / `depth_diopter`:目标深度或相对屏幕的屈光度差(推荐用屈光度,
因为它与屏幕距离无关、头显间可移植性好);
- 运行时按 §3.2 换算成每眼偏移像素,写入样式或逐句 `\pos`
约束(否则会重蹈"疲劳"覆辙):
- **把相对屏幕的屈光度差限制在约 0.3 D 以内**(对照 §3.3,即每眼偏移几像素到十几像素);
- **出屏(近)方向比入屏(远)方向更易疲劳**(Shibata 2011:近距离处正/负冲突不对称),
字幕尽量别比人脸更近;
- **不要给单条长字幕恒定大视差**:一条字幕通常停留 2~6 秒,等于让眼睛长时间固定在一个
偏离屏幕的会聚点上(Yano 2004 的"累积疲劳")。
- **需要先估计主体的平均深度**。无深度图时可用近似规则:
- VR 成人/剧情类视频大量为"人物近景、脸出屏 0.2~0.5 m"构图,可设
`target_depth_m = S 0.3` 起步并允许用户微调;
- 镜头/人物位置多变时,"固定一个深度"反而可能与某些镜头不匹配——此时建议退回零视差。
### 4.3 A-3 动态/逐场景深度(远期路线)
更高阶做法是给字幕逐句/逐场景分配深度:
- 用深度估计(如 MiDaS/双目立体匹配)或预置的视差图,求每句字幕对应时间段内
"画面主体/安全区"的平均视差,把字幕深度绑定到主体深度(或主体稍后 0.1~0.2 D);
- 通过既有 OCR/抽帧流水线就能拿到关键帧,**人脸检测 + 主体视差估计**可以组合起来(见 §5);
- 每句之间视差**平滑过渡**,禁止突跳(Speranza 2006 的"运动+视差变化"是疲劳来源)。
路线建议:**A-1 打底 → A-2 固定深度参数(近期可做)→ A-3 动态深度(远期)**。
---
## 5. 方案 B:解决"字幕挡住人脸"
挡脸是**二维平面重叠**问题,深度方案救不了它——把人脸放到不同深度也不能让字幕"穿
过"人脸不遮挡视线(在立体显示中,若字幕深度比人脸更近,观感是字幕盖在人脸前;若更
远,则是人脸挡住字幕,同样干扰阅读)。因此主力方案是**二维位置避让 + 视觉降噪**。
### 5.1 B-1 默认位置下移:避开人脸高频区(零成本,先做)
当前字幕画在画面**中部偏下**`an2` + `MarginV = height/2 + 60`)。VR 人物近景构图里
人脸常处于画面中央区域,这是挡脸高发的直接原因。
- 把默认垂直位置改为**贴近底部安全区**(如 `MarginV ≈ 80~150`,可配参数);
- 若视频主体/对白字幕本来就常出现在底部(少见,但可配 `top` 模式放到顶部),给
`position: bottom|top|center``margin_v` 两个可选参数;
- 注意:VR 全景视频的画面**底部可能是地面/近景道具**,顶部可能是天花板/光斑——
没有"永远安全"的固定位置,所以还需要 B-2/B-3 的动态手段。
### 5.2 B-2 半透明底框 + 描边(视觉降噪,成本低)
挡脸的另一半观感来自"字压内容"。采用:
- ASS 样式:`BorderStyle=1`(描边)+ `Shadow`,必要时用 `BorderStyle=3`(不透明框)
或增大 `BackColour` 透明度做半透明底板;
- 可同时**轻微缩小字号**、限制每行字数(中文字幕建议单行 ≤ 14~16 字),减小覆盖面积;
- 底框颜色选择接近视频暗部、半透明,观感为"字幕浮在画面上方"而非"糊在人脸上"。
这不能消除遮挡,但能显著降低"看不清人脸/看不清字幕"的双输观感,成本几乎为零。
### 5.3 B-3 人脸/主体检测驱动的动态避让(推荐的中期方案)
在**字幕生成阶段**做一次"占位冲突检测",复用项目已有的抽帧与 OCR 基础设施:
1. 对每条字幕的起止时间段,从视频抽取 1~3 个关键帧;
2. 用人脸检测(或显著性/主体检测)得到每帧人脸包围盒,映射到 ASS 画布坐标;
3. 若字幕默认摆放位置与该时间段内的人脸框重叠,则按优先级移动:
- ① 垂直移到对侧安全带(顶部/底部);
- ② 同一侧上下微调避开具体人脸框;
- ③ 仍冲突则缩短/分行/加底框兜底;
4. 对移动做**时间平滑**(相邻句子的位置不要跳来跳去),每句只需知道"前一句的位置"。
- 与现有代码衔接点:`subtitle-ocr`/`frame-extract` 已产出 `frames_manifest` 与帧图,
人脸检测可插在抽帧后;也可以做成独立可选节点(`face-aware-place`),不污染对白链路。
- 检测失败(无 GPU/无模型)时自动回退 B-1 的底部默认,保证可用性。
- 进阶:把"人脸框的中心深度"作为 A-3 动态深度的输入(§4.3),让字幕即不挡脸又贴合景深。
### 5.4 B-4 字幕与人物"绑视差"(针对对白语义的高级玩法,谨慎)
对"对白字幕"可考虑让字幕深度**跟随当前说话人**(把字幕放到说话人所在深度、且稍微偏下
避开嘴部)。但这要求精确的主体视差/深度追踪,工程量大、且若说话人贴近屏幕(0.5 m 内)
字幕被迫也出屏很多,反而违背舒适区原则。**不推荐作为默认**,仅作为特殊场景的可选项。
### 5.5 B-5 方案对比小结
| 方案 | 成本 | 解决程度 | 说明 |
| --- | --- | --- | --- |
| B-1 默认下移到底部安全区 | 极低(改默认参数) | 中 | 先做,立刻降低挡脸频率 |
| B-2 半透明底框+描边+字号/行数限制 | 低 | 中(观感) | 与 B-1 组合默认启用 |
| B-3 人脸检测动态避让 | 中(人脸模型+调度逻辑) | 高 | 推荐中期实现 |
| B-4 字幕绑说话人视差 | 高 | 中高但疲劳风险 | 仅特殊场景 |
| A-2/A-3 深度贴靠 | 中-高 | 解决"景深不匹配" | 与 B 系列正交,组合使用 |
---
## 6. 局限与需要注意的链路问题
1. **播放器如何渲染 ASS 决定一切**。当前假设"播放器把 ASS 渲染进 SBS 帧后分眼"。
若用户使用的 VR 播放器把字幕作为**头显 2D 悬浮 UI**(固定渲染在屏幕平面上、不随
视频视差移动),则 ASS 里任何深度配置都无效,只能靠播放器自身的字幕位置设置;
验证方法:在某句字幕上故意加 20 px 视差看是否产生出屏/入屏效果。
2. **SBS / 上下 / 帧封装格式**:本报告按 SBS(左右各半幅)推导;若是上下格式(TB)则
视差仍为水平方向,但需要把"半幅"概念换成上下半幅,且左右眼各自的水平错位关系不变。
3. **等距柱状投影的角分辨率不均**:画面中央角分辨率高、边缘被拉伸;字幕若放在画面边缘,
§3.2 的 `p` 不准确。字幕通常放中央/下部,影响有限,但精确配置建议按"字幕所在区域"
校准 `p`
4. **个体差异**:舒适视差范围因人而异(Shibata 2011 用隐斜测量预测个体易感性)。
参数化 + 允许用户微调,比"一刀切最佳值"更实际。
5. **动态内容**:镜头运动、人物出入画会改变主体视差;任何"固定深度/固定避让"都可能在
部分镜头失效——这正是 A-3/B-3 动态方案存在的意义,也是建议先做保守默认的原因。
6. **本报告不构成代码改动**:以上参数化(`depth_mode``position``margin_v`
底框样式、人脸避让节点)都尚未实现,需要时另行按仓库 TDD 流程开发。
---
## 7. 建议的落地优先级(结论)
1. **立刻可做(无新模型/无协议改动)**
- 字幕默认垂直位置从"画面中部"改到**底部安全区**,并暴露
`position`/`margin_v` 参数(对应 B-1);
- 增加**半透明底框 + 描边**样式并限制单行字数(B-2);
- 明确记录"当前实现 = 零视差/屏幕平面"这一事实到 AGENTS.md 与 ass 节点注释。
2. **近期可做(少量参数 + 换算函数)**
-`srt-to-dual-eye-ass` 增加 `depth_mode``screen` 默认 / `scene_fixed`)、
`depth_diopter` 参数,按 §3.2 公式换算每眼像素偏移(A-2);
- 配换算与边界检查(限制 |Δ| ≤ ~0.3 D、输出像素偏移范围、防越界);
- 100% 覆盖率的单测(纯函数,可测)。
3. **中期可做**
- 人脸检测驱动的动态避让节点(B-3);
- 场景主体深度估计 + 动态深度(A-3),二者可共享同一套关键帧与检测基础设施。
4. **设计原则**(沿用仓库北极星):
- 深度/位置全部是**节点参数与 ASS 数据**,不写死业务代码;
- 节点保持无状态、只经产物 URI 交换;
- 任何新的"检测"能力做成独立可复用节点,不绑定单一工作流。
---
## 8. 参考文献
以下文献的关键结论均经过原文/摘要核验(PubMed/Crossref/arXiv):
1. Hoffman DM, Girshick AR, Akeley K, Banks MS. **Vergence-accommodation conflicts
hinder visual performance and cause visual fatigue.** J Vis. 2008;8(3):33.
doi:10.1167/8.3.33. PMID 18484839.
—— 会聚-调节冲突损害视觉表现并导致疲劳;显示器的调节线索固定指向屏幕。
2. Shibata T, Kim J, Hoffman DM, Banks MS. **The zone of comfort: Predicting visual
discomfort with stereo displays.** J Vis. 2011;11(8):11. doi:10.1167/11.8.11.
PMID 21778252.
—— 定义并量化"舒适区";冲突大小与正/负方向、观看距离、个体差异对不适的影响。
3. Lambooij M, IJsselsteijn W, Fortuin M, Heynderickx I. **Visual discomfort and
visual fatigue of stereoscopic displays: A review.** J Imaging Sci Technol.
2009;53(3):030201. doi:10.2352/J.ImagingSci.Technol.2009.53.3.030201.
—— 立体显示视觉不适/疲劳诱因综述(视差幅度、视差变化率、观看时间等)。
4. Yano S, Emoto M, Mitsuhashi T. **Two factors in visual fatigue caused by
stereoscopic HDTV images.** Displays. 2004;25(4):141-150.
doi:10.1016/j.displa.2004.09.002.
—— 大/持续视差与视差变动是疲劳的两个主要因素。
5. Speranza F, Tam WJ, Renaud R, Hur N. **Effect of disparity and motion on visual
comfort of stereoscopic images.** Proc SPIE 6055 (Stereoscopic Displays and
Virtual Reality Systems XIII). 2006. doi:10.1117/12.640865.
—— 视差与画面运动叠加显著降低立体观看舒适度。
6. Kramida G. **Resolving the vergence-accommodation conflict in head-mounted
displays.** IEEE Trans Vis Comput Graph. 2016;22(7):1912-1931.
doi:10.1109/TVCG.2015.2476178.
—— HMD 中 VAC 的机制与解决路线综述(调节固定 ⇒ VAC 持续存在)。
7. **Dynamic lens and monovision 3D displays to improve viewer comfort.** arXiv,
2015Banks 组)。
—— 常规 S3D 显示调节线索错误、造成调节-会聚不匹配的机制说明。
8. SMPTE ST 428-10 / ST 429-12D-Cinema Distribution Master / Packaging —
Closed Caption and Closed Subtitle)。
—— 数字影院字幕/隐藏字幕以平面叠加呈现的行业惯例(非深度规定,仅作惯例佐证)。
> 免责:第 3.2/3.3 节的换算公式与数值为**面向本项目场景的工程推导**(IPD、观看距离、
> 角分辨率取典型值),用于给出可操作初值,并非某篇论文的直接结论;实际参数应以
> 目标头显规格与主观验证为准。