Phase 2 演出与音频
Phase 2 把「能读」推进到「能演」:资源管线从最小取用扩展到纹理解码、流式音频、字体子集与失效管理;舞台承担背景、立绘、图层合成、转场与镜头;音频提供分通道混音;剧本播放补齐历史回看、已读、自动播放与快进。
状态:已完成(2026-11-04 出口核验通过)。
立绘双向切换、内置资产整体替换、机制改写与回滚均已闭合。完整真实章节、真实信任页与原生磁盘验收在 Windows WebView2 和 Android 各通过 409 项检查;Android 13/WebView 109 的主显示器截图可见实际背景与模型,视觉证据已闭合。CDP 截图省略 WebGL 层时以实际显示器截图为准,不据此误报业务渲染失败。
目标与非目标
目标
- 完成 Asset 的交付形态:
texture、stream、font,并支持变体、预算、缓存失效与字体子集化。 - 让背景、立绘、图层合成、特效、转场与镜头成为可替换的实现位。
- 提供 BGM、音效、语音、环境音四通道混音,以及语音与文本的协同。
- 补齐历史回看、已读、自动播放与快进等阅读控制。
- 完成排版、断行与运行时 i18n 的最小闭环。
- 验证 Mod 能通过机制插槽改写演出,并在审计后回滚。
非目标
- 不实现战斗、地图、养成、图鉴与第三方玩法模块。
- 不实现云存档、跨端同步与孤儿 GC 完整版。
- 不实现账号、热更新、支付等在线能力。
- 不追求与任何特定输入源一致的演出参数;参数由内容与实现位共同决定。
覆盖的大插件
| 大插件 | 本阶段职责 |
|---|---|
| Asset | 完整资源管线:纹理解码、流式 PCM、字体、变体、预算、失效、子集化 |
| Stage | 背景、立绘、图层合成、特效、转场、镜头 |
| Audio | 四通道混音、语音音量、播放控制 |
| ScriptPlay | 历史回看、已读、自动播放、快进、演出指令派发 |
| Text | 排版、断行、字素簇、i18n 与字体选择 |
交付内容清单
| 交付 | 大插件 | 关键接口或产物 | 状态 |
|---|---|---|---|
| Asset 完整版 | Asset | asset:variant-producer@1、asset:on-invalidate、预算与缓存 | 已完成 |
| 立绘渲染与表情差分 | Stage | stage:cast-renderer@1;image 已实现,l2d 为仓库外私有插件 | 已完成 |
| 背景、CG 与图层合成 | Stage | stage:compositor@1、stage:compose | 已完成 |
| 特效、转场与镜头 | Stage | stage:resolve-effect、stage:camera | 已完成 |
| 音频混音 | Audio | audio:mixer、audio:channel、audio:output@1 | 已完成 |
| 历史回看、已读、自动与快进 | ScriptPlay | history:view@1、autoplay:policy@1 | 已完成 |
| 排版、断行与 i18n | Text | text:shaper@1、i18n:runtime、字体子集 | 已完成 |
| 演出指令派发 | ScriptPlay | script:resolve-presentation | 已完成 |
出口条件
- [x] 能播放一个含语音、立绘演出、转场与多语言的完整章节。
- [x] image 与 l2d 两种立绘实现可切换,且两者都判定为插件(2026-11-04 验收,范围见下文)。
- [x] 全部内置演出资产可被资源包整体替换(逐路径核验,见下文)。
- [x] 一个 Mod 能通过
script:resolve-presentation改写演出机制。 - [x] 上述改写经过审计留痕,并能在回滚后恢复原行为。
- [x] Phase 2 实现后的 Windows WebView2 与 Android 共用契约已有复跑记录(范围见下文)。
- [x] Windows WebView2 与 Android 上的真实内容出口复跑完成,并与功能性出口逐项对应。两端各 409 项通过,Android 13/WebView 109 的实际显示器截图可见背景与模型。
以上出口条件均已逐项核验,阶段状态为「已完成」。已知范围限制与采集边界见下文。
当前状态与证据
2026-11-04 的当前工作树复跑中,Windows WebView2 157 与 MuMu Android 15/WebView 110 的共用契约各为 413 项通过、2 项按条件跳过,均含 Battle S5 首批与内置资产整体替换。立绘切换另在系统 Edge 和这两种真实宿主中各执行 86 项检查。更早记录见当前状态与测试;契约通过不替代真实内容的出口验收。
| 证据类型 | 位置或内容 | 结论 |
|---|---|---|
| Asset 媒体形态 | test/contract/asset-media.test.ts、asset.test.ts | 通过 |
| 内置资产整体替换 | test/contract/asset-replacement.test.ts | Node、系统 Edge、Windows WebView2 157 与 MuMu Android 15/WebView 110 均逐路径通过 |
| 立绘实现切换 | 仓库外私有 image、l2d 单元与一个真实模型 | 系统 Edge、Windows WebView2 157、MuMu Android 15/WebView 110 各 86 项通过;两者均分类为插件,同一立绘 ID 双向切换、模型像素与覆盖后重新挂载通过,三类错误均为零 |
| Stage | test/contract/stage.test.ts、renderer-plugin.test.ts | 通过 |
| Audio | test/contract/audio.test.ts | 通过 |
| 文本与字体 | test/contract/text.test.ts、text-fonts.test.ts | 通过 |
| 阅读控制 | test/contract/autoplay.test.ts、playback-renderers.test.ts | 通过 |
| 演出派发与审计 | test/contract/presentation.test.ts | 通过 |
| 宿主冒烟 | test/host/playback-smoke.js、web-smoke.js | 已执行 |
| 测试记录 | 见当前状态与测试 | Windows WebView2 与 Android 的共用契约、立绘切换、完整真实章节及实际显示证据均已闭合 |
立绘双向切换和内置资产整体替换均已闭合。完整真实章节在两种真实宿主各通过 409 项检查,覆盖两条分支、6 次真实信任批准及三组原生产物的逐文件读回。双语证据按既定范围来自两张各 451 条的前端语言表,不把本章字面量台词称为双语。Android 13/WebView 109 的实际显示器截图可见背景与真实模型。工具和结果留在仓库外。
范围限制与采集边界
| 项目 | 说明 |
|---|---|
| l2d 热失效 | 广播存在,但当前私有插件不自动重取模型;重新挂载才使用覆盖来源,不能记为热替换完成。 |
| 截图采集 | CDP 截图可能省略 WebGL 立绘层,不能据此判定业务合成失败;实际显示器截图已确认 Android 画面。Linux Tauri 原生与 macOS/iOS 尚未覆盖。 |
| 性能基线 | 合成、特效与字体子集化的性能分级属于 Phase 4;本阶段只保证功能正确。 |
| 内容范围 | 出口使用选定真实章节和两张前端语言表,不代表全部内容、全部模型或实际音频听感均已验证。 |