Skip to content

Latest commit

 

History

History
293 lines (213 loc) · 24.7 KB

File metadata and controls

293 lines (213 loc) · 24.7 KB

UERayTracingAudio 交付路线

本文件由 TODO.md 压缩生成,日期 2026-08-02。 2026-08-06 按最终目标重新收敛剩余工作:只保留直接声、间接声、Bake、A/B 波形和可交互实时验收相关条目。 旧的 Task 1–8 技术拆分已从剩余 TODO 中移除;历史实现和验证证据保留在 IMPLEMENTATION_STATUS.mdUSAGE.mdprogress_log.md

当前决策

用户于 2026-07-22 对最新录音完成人耳复核,结论是:处理结果基本听不出原始音频。原来的四模式录音门禁只能证明 WAV 有能量和模式之间形状不同,不能证明输入内容仍可辨识,因此该门禁及监听补偿路线已回退。

后续坚持以下原则:

  • 保留 UERayTracingAudioSDK / UERayTracingAudio / UERayTracingAudioEditor 三模块结构,以及已经接通的 UE Ray Tracing RHI、Direct/Indirect、DSP 和 Bake 核心。
  • 优先完成真实功能,再补完整测试;测试框架可以先简化,但默认必须提供 Editor 界面验证。
  • 不再用合成短脉冲、RMS 下限或任意监听增益替代真实输入音频和人耳验收。
  • 每个“完成”结论必须同时有代码、构建、运行时、可辨识录音和人耳证据。

Definition of Done

v1 必须同时满足:

  • UE 5.7 / Win64 测试工程与独立插件无编译错误。
  • Static Mesh 声学场景优先走硬件 Ray Tracing RHI;fallback 原因和统计可观察。
  • 实时音频线程不访问 UObject,Direct/Indirect 查询跨帧完成且无逐 source flush。
  • Bake 窗口能把用户选择的真实 SoundWave 与硬件光追 IR 卷积,保存并重新播放空间音频资产。
  • 固定 Editor 测试场景有 Listener、真实音频 Source、遮挡墙、封闭房间和可操作界面。
  • 自动验收以原始参考音频为基准,校验采样对齐、dry 保留、异常噪声、削波和模式语义。
  • Direct 输出保留可辨识原始内容,并正确表现距离、空气吸收、遮挡与方向 → 由 T1 验收。
  • 目标耳机/扬声器上的可交互实时验收通过,并记录设备、输入资产、场景和结论 → 由 T5 验收。

已完成:持续 Direct 与间接声修复

  • 把 Direct 距离样本增益从错误的 1/r² 改为线性声压 1/r,增加 1 m / 2 m / 4 m 持续非零回归。
  • Clear / Soft / Hard 运行时预设统一为 2 m;Soft 保留透声下限,Hard 才允许完全遮挡静音。
  • Reference / Direct / Wet / Full Editor Preview 统一循环,并同步 Stop、替换和面板销毁状态。
  • Realtime IR 使用 last-wins pending kernel,当前卷积预热、交叉淡化和尾音不被高频 generation 重置。
  • Baked 检查后恢复 HybridReverb;Realtime / Hybrid 要求 parametric tail 实际启用。
  • 数据源门禁增加持续性要求:总缓冲和输入有效缓冲均至少 24,Wet presence >= 80%,最长完全静音段 <= 20%,窗口积分及最大 Wet/Input RMS 均 >= 5%
  • Python 回归 50/50
  • 重新完成 UE 5.7 项目/插件完整构建、UE 音频 Automation 23/23、插件全量 Automation 38/38 和固定硬件运行时验证。

已完成:R0 回退失败的试听验收路线

  • 复现门禁缺陷:最新目录只有 4 个处理结果,没有原始参考 WAV,无法验证原音可辨识。
  • 确认验证输入是代码生成的三频短脉冲,不是用户原始音频。
  • 移除 Occlusion OutputGain、90× component gain、16× output gain。
  • 移除合成四模式录音状态机、波形假通过脚本和交互式假验收脚本。
  • 保留固定硬件场景、RHI/CPU 数值对照、Bake 重复性和 Editor 启动流程。
  • 回退后的 Python 测试、UE 构建与固定运行时验证全部通过。
  • 复现固定启动黑屏,确认根因是加载空的 /Engine/Maps/Entry,并改为实际 First Person 关卡。
  • 固定 Game 验证中生成可见封闭声学房间、遮挡墙、Listener/Source 标记、灯光、相机和硬件状态叠层。
  • 明确蓝/橙密闭空间的实时语义:橙色是 Primary Source、蓝色是 Listener;-game/PIE 版本在 BeginPlay 后播放真实输入并使用 Realtime IR,Editor A/B 版本仅是 Bake 夹具,不能冒充实时验收。
  • 固定相机自动测试与可交互实时验收已拆分:交互模式由 First Person Pawn 驱动 Listener,主屏显示当前模式;F1/F2/F5 切换 Realtime/Baked/Hybrid,F3 在同步的 Rendered Direct+Wet 与 Original Unrendered 之间 A/B,F4 返回烘焙原点,F8 切换视角。
  • 自动交互 smoke 已覆盖 Pawn 移动、Listener/相机逐帧跟随、F1/F2/F5、F3 Rendered/Original、F4 烘焙原点和 F8 双视角;最近结果为移动 50.900 cm、Listener/相机与 F4 即时原点误差均 0 cm、A/B 重启 0。F4 后的合法交互位移单独诊断,不再误报为复位失败。
  • 修复固定启动器偶发静音:UE 5.7 默认 [Audio] UnfocusedVolumeMultiplier=0.0,工具启动的 Game 窗口失焦时会令 AudioDevice 主音量为 0、pre-distance 输入全零;固定 Game/Editor 命令现使用进程内 -ini:Engine:[Audio]:UnfocusedVolumeMultiplier=1.0 覆盖,不修改用户配置。

已完成:R1 验收基础设施(不等于人耳通过)

  • Bake 面板支持显式选择 Source、Listener、Geometry 和真实输入 SoundWave。
  • 一次后台渲染生成同起点、同长度的 Reference / Direct / Wet / Full,并对四种模式只应用一个记录在 manifest 中的公共安全缩放系数。
  • 面板支持四模式播放、Reference↔Direct/Full A/B、重播、停止和 Human Pass/Fail JSON 记录。
  • UE Automation 覆盖四 WAV 存在/等长、Direct/Full dry correlation、公共缩放和 manifest。
  • 固定 Editor 流程创建可见且可操作的实际 A/B 场景:1 个 Source、1 个 Listener、7 个声学几何体、封闭房间、中央遮挡墙、灯光、相机和 Bake UI。
  • 使用原始项目资产 /Game/FirstPerson/Audio/MarchingBand.MarchingBand 完成一次硬件 IR Bake,保存 IR、Reference / Direct / Wet / Full 四个 SoundWave、四个 WAV 和 manifest;生成资产不会被递归选作下一次输入。
  • 固定 Editor A/B 流程会把自动生成并导入的四个 SoundWave 交给已打开的 Bake 面板;Listening Acceptance 控件位于首屏,只有四资产全部加载后才启用,启动器要求 human_verdict=enabled 标记。
  • 录制未经过插件处理的 reference,以及 direct、wet、full;四段来自同一资产和同一采样起点。
  • 验收录音禁止逐模式补偿;四种模式只应用同一个记录在 manifest 中的公共安全缩放系数。
  • 自动门禁检查 reference 存在、格式/长度一致、起点对齐、Direct/Full dry 保留、电平比例、公共缩放、有限样本、零削波、活动窗零掉音、Direct 时间残差、Full 混音残差和模式差异。
  • 在 UI 中提供逐段播放、A/B 切换、重播和通过/失败记录。
  • 在 UI 中提供 Reference / Direct / Wet / Full 四条同时间轴、同 full-scale 的波形对比;波形直接来自本次 PCM16 离线渲染结果,不做逐模式归一化。

已完成:R2 Direct 声学行为

  • Editor 实际场景提供 Clear / Soft Occluded / Hard Occluded 三个严格等距 2 m 预设,中央实体墙控制遮挡。
  • 使用同一原始 MarchingBand 完成 Clear / Soft / Hard 三档自动配对:Reference 字节一致、距离/距离衰减一致、visibility 1→0→0、Direct gain 0.249667→0.087383→0,三侧硬件湿声、安全门禁和非黑截图通过。
  • 静态 Clear/Soft/Hard 已证明零削波、零意外掉音窗和零异常时间/混音残差。
  • 检查 Occlusion 到 Spatialization 的 direct/wet 拆分与重组;实际离线证据中 Direct dry correlation 为 1.0,遮挡只按明确的 Soft floor 改变 Direct gain。
  • 增加低能量 IR 重建、16 kHz 高分辨率 CPU fallback 和硬件/CPU path/gain/IR energy ≤5% 差异门禁。

已完成:R3 Indirect 与空间化

  • 封闭实际房间完成 1-bounce / 8-bounce 对照:8 次反射增加有效路径、IR 能量、平均延迟、方向 delay bin 和非零晚期尾声;GPU/CPU 指标一致,并生成具有可测左右差异的 Stereo 湿声。
  • GPU EnergyField 保留每条路径的监听者到达方向并回读到 delay-bin direction;Bake IR、离线 Wet/Full WAV 与运行时 Baked 卷积均保留左右声道,不再把方向统计压回 Mono。
  • Full 使用明确的 Wet Send 语义:Full = Direct + WetSend × Wet;新 Source 默认 1.0、范围 0..4,切换时平滑。双声道 Spatialization-bypass 与单声道最终 L/R 都有峰值诊断;最新三模式 full_peak=0.032985/0.033651/0.114308over_unit=0/0/0
  • Realtime、Baked、Hybrid 三种数据源使用独立左右核;Hybrid 同时渲染互补 Baked early 与 Realtime tail。Automation 覆盖切换/关闭无瞬时跳变;固定实际 Game 使用真实项目 SoundWave /Game/FirstPerson/Audio/MarchingBand.MarchingBand,证明三模式输入与 Wet 均非静音、核数 2/2/4、非有限样本为 0,并要求源增益和 pre-distance 音频均为非零。

已完成:R4 硬件光追 IR Bake 闭环

  • 从 Editor 选择真实 Source、Listener、Geometry 和输入 SoundWave。
  • 异步生成、保存、加载 Stereo IR 资产;运行时校验 world、scene/material signature 与 Source/Listener placement 并公开 stale 状态。Editor Bake 完成后把资产绑定到所选 Source,默认切到 Hybrid。
  • 用硬件 IR 卷积真实输入,导入新的 Reference / Direct / Wet / Full SoundWave,并能够在 Editor 中播放和 A/B。
  • 对同一场景重复硬件 Stereo Bake:两次均为 4000 samples / 0.25 s,能量相对差和逐样本相对 RMS 差均为 0;最终可听结论仍由 Human Pass 单独负责。

已完成:R5 测试、性能与发布

  • 当前 Python 50/50、UE 音频 Automation 23/23、插件全量 Automation 38/38;覆盖工作区内测试项目发现、交互 smoke、低能量方向/早晚分界、Directional Stereo、Occlusion/Spatialization 重叠缓冲、最终 Full 峰值两条路径、真实 Prepared Renderer 路径、实时卷积预算/切换容量/公平服务,以及失焦导致 pre-distance 静音的启动器拒绝回归。
  • 完成 hard-real-time 安全收敛:音频回调通过 lock-free 快照读取,不再经过注册表 FRWLock;卷积 kernel 与切换状态在非音频线程预备,回调只采用预备状态;静态审计覆盖 31 个关键函数/32 个函数体,并由运行时 callbacks / callback_capacity_misses / convolution_prepare_drops 门禁证明本次验证为 197 / 0 / 0
  • 为实时卷积设置确定性预算:每声道最多 4 × 1024 = 4096 个 IR 样本;保留完整 Baked/离线 IR,超出实时头部的尾声能量由 parametric late reverb 承接。Bridge 预备池按活动声道提供切换余量,并以 512 MiB 实际工作区上限拒绝超额状态。
  • 记录 8/16/32 source 的 Game、Render、GPU、AudioMixer 与显存数据;三档均在实际可见场景中通过真实输入三模式门禁,完整结果见 Saved/Packages/UERayTracingAudio-0.2.0-Win64/PERFORMANCE.md
  • Development Editor、Development Game、Shipping Game 均通过;BuildPlugin 使用 -StrictIncludes 完成 NoPCH / non-unity 三配置构建。
  • 审计 Win64 0.2.0 Beta 交付包内容、版本号和已知限制,见 Saved/Packages/UERayTracingAudio-0.2.0-Win64/PACKAGE_AUDIT.md

剩余工作(按最终目标收敛)

通用规则(每条任务都适用)

  • 只改 ue-audio-plugin,不要直接改 TestProject/UeVersion1/Plugins/UERayTracingAudio 同步副本。
  • 构建前固定执行 uv run script\build_and_validate.py;不要直接调 UnrealBuildTool。
  • 构建通过后固定执行 uv run script\launch_runtime_validation.py
  • 崩溃立即进入 workflow\crash-debugging.md
  • 音频回调内禁止加锁、分配、阻塞、写日志、访问 UObject。
  • SDK 模块保持无 UObject 依赖。
  • 每个主要特性完成后更新 IMPLEMENTATION_STATUS.mdUSAGE.mdprogress_log.md,并在本文件把对应项勾成 [x]
  • Python 回归:uv run python -m unittest discover -s script/tests -v

T0:冻结并确认当前功能闭环

目的:停止继续执行过期的“Task 1–8”工程拆分,把验收范围收回到最终目标本身。

以下过期拆分不再作为 TODO 保留:

  • 项目物理设置 / 纯值 SDK context;
  • UWorld 作用域的 Listener 与声学场景状态;
  • 实时安全三频 Direct DSP;
  • Direct 连续性诊断与公开运行时 setter;
  • 纯 Direct 扫掠轨迹、F6、启动器 parser 门禁;
  • Editor Direct 夹具控件;
  • 文档、Shipping 隔离与最终验证。

这些条目与最终目标有间接关系,但已属于技术实现/验证细分项;当前文档和日志显示它们已经被后续实现、验证或技术 ledger 关闭,不应再作为未完成工作驱动自动编程。

验收:

  • 确认 IMPLEMENTATION_STATUS.mdUSAGE.mdprogress_log.md 中仍保留这些已完成技术项的历史证据。

T1:Direct、遮挡与原音保真

对应最终目标:支持直达声、遮挡;确保 direct 与 wet 确实具有可听辨差异;完成 Direct、遮挡与原音保真和对比。

  • Reference 与 Direct 使用同一输入、同一起点、同一公共安全缩放。2026-08-06 的 Clear/Soft/Hard 配对还确认三个 Reference WAV 字节一致。
  • Direct 能保留原始主体内容,不再被距离、遮挡或空气吸收压成不可辨识输出。
  • Clear / Soft / Hard 能听出合理遮挡差异,Hard 可明显遮挡,Soft 保留透声下限。
  • 移动穿墙或等价可交互场景中,遮挡变化连续,无明显 click/pop、掉音或时间跳变。

验收命令:

uv run script\build_and_validate.py
uv run script\launch_runtime_validation.py

T2:多 bounce 反射、混响和方向性

对应最终目标:支持反射、混响;完成多 bounce 反射、混响和方向性。

  • Full = Direct + Wet 的组合能保持原始主体,同时具有可听空间差异。
  • 封闭空间、靠墙、开放空间或等价环境之间的 Wet/Full 差异合理。
  • 2026-08-06 当前工作树的 32-bounce 硬件环境矩阵通过:OpenSpace / NearWall / Enclosed 有效路径为 0 / 618 / 20351,Wet/Reference RMS 比例为 0 / 0.219827 / 0.567596,Enclosed late reverb 非零;12/12 WAV 哈希与 PCM16 头一致。证据:TestProject/UeVersion1/Saved/UERayTracingAudio/ListeningAcceptance/ReflectionEnvironmentMatrix/20260806-192007/ReflectionEnvironmentMatrix_Manifest.json
  • 左右声道方向性存在可视化/数值证据,不退化为无差异 mono;最新 Clear hardware artifact 的 Wet stereo normalized difference 为 0.506958

验收命令:

uv run script\build_and_validate.py
uv run script\launch_runtime_validation.py

T3:Realtime / Baked / Hybrid IR 与 Bake 闭环

对应最终目标:支持 IR 烘焙;应能使用实时光追渲染和烘焙。

  • Bake 面板能选择 Source、Listener、Geometry 和输入 SoundWave。
  • 硬件光追 IR 能生成、保存、加载,并绑定到所选 Source。
  • Realtime / Baked / Hybrid 三种模式可通过运行时快捷键切换;自动交互 smoke 已覆盖 F1/F2/F5。
  • 主屏能显示当前声音渲染模式;自动交互 smoke 与 HUD marker 已覆盖。

验收命令:

uv run script\build_and_validate.py
uv run script\launch_runtime_validation.py

T4:Reference / Direct / Wet / Full 同起点 A/B 与波形对比

对应最终目标:提供带界面的 reference/direct/wet/full 同起点 A/B 验收;给出渲染前和渲染后的声波对比。

  • Reference / Direct / Wet / Full 四段来自同一输入、同一起点、同长度。
  • 四模式使用同一个公共安全缩放,不做逐模式补偿。
  • UI 能播放、停止、重播和 A/B 切换;四轨 Preview 从采样零点循环且共享切换状态。
  • UI 显示四条同时间轴、同 full-scale 的波形;2026-08-06 已以 direct-clear-waveforms-ready.png 目视确认,启动器要求 waveforms=ready
  • HumanAcceptance 记录升级为 schema v3:必须填写目标监听设备并成功启动 Reference / Direct / Wet / Full;PASS 还必须逐项确认 Direct 保真、Wet/Full 可听差异、移动遮挡连续性、运行时模式切换连续性和环境差异。记录从 manifest 固化输入资产、Source、Listener、场景、Direct 预设和反射环境;严格校验器拒绝旧 schema、缺模式、缺确认和来源不一致的记录。
  • Direct 与 Wet/Full 的差异既能听到,也能在波形或 manifest 中看到;2026-08-06 矩阵截图和 manifest 已完成可视/数值半项,仍待目标设备听感确认。

验收命令:

uv run script\build_and_validate.py
uv run script\launch_runtime_validation.py

T5:可交互实时验收

对应最终目标:自动测试可以继续使用固定相机模式,但不得替代可交互实时验收。

  • 固定相机自动测试通过,但只作为回归基线。
  • Editor / PIE 可交互场景可用。
  • WASD/鼠标移动正常,Listener 跟随正确;自动 smoke 的 Listener/相机误差为 0 cm
  • F1/F2/F5 能切换 Realtime / Baked / Hybrid。
  • F3 能切换 Rendered / Original A/B,并保持原 IR 数据源。
  • F4 能返回烘焙原点;2026-08-06 受控复验确认即时误差 0 cm,返回后的继续移动不会污染该门禁。
  • F8 能切换视角。
  • 主屏当前模式文字正确。
  • Editor Human Pass/Fail 会记录目标设备、试听备注、已试听模式、五项结构化人工确认和 manifest 来源;空设备不能记录,Human Pass 在四模式与五项确认全部完成前保持禁用,Human Fail 可在发现首个问题后提前记录。
  • 目标耳机/扬声器上确认 direct、wet、full 具有可听辨差异。

T6:双耳渲染

目的:把当前基于到达方向的 Stereo panning/方向性 IR 升级为适合耳机监听的真正双耳渲染。当前左右声道存在差异不等于已经实现 HRTF,也不能据此宣称前后、上下和头部转动定位已经完成。

  • 明确双耳技术路线:接入 UE/第三方 HRTF,或实现可加载 SOFA/HRTF 数据集的插件内渲染器;定义许可、采样率、插值和平台边界。HRTF(头相关传输函数)
  • Direct 使用左右耳 HRTF 滤波,不再只依赖 equal-power stereo pan;覆盖方位角、仰角、距离和遮挡后的频谱变化。
  • Indirect/Baked IR 保留可用于双耳解码的方向信息;明确采用逐方向 HRTF、FOA/更高阶 Ambisonics 解码或其它方向场表示,不能把 FOA 单通道复制到左右耳作为完成。
  • Listener 头部旋转能连续更新双耳结果;仅改变朝向时不应强制重新进行完整场景光追或清空卷积尾声。
  • 为扬声器输出提供明确回退路径,避免对非耳机设备无条件应用 HRTF。

T7:Acoustic Mesh 导入/导出(新增待办,版本归属待确认)

目的:把当前组件注册时生成的临时声学几何快照,升级为可检查、可复用、可序列化的 Acoustic Mesh 数据管线。UE 已负责 FBX/glTF 等通用模型文件导入;本插件应聚焦把 UE Mesh 转换成声学几何,以及导入/导出插件自己的声学数据。

T7.1 声学 Mesh 创建

  • 提供拟议接口 CreateAcousticMesh(source, options):从场景模型、UStaticMesh 指定 LOD、简单/复杂碰撞体、Bounding Box 或自定义几何生成声学 Mesh,并返回具有明确所有权和生命周期的稳定 meshId
  • 导入稳定的顶点、索引、局部到世界变换和材质槽;CPU Mesh Data 不可用、退化三角形、无效索引或空过滤结果必须给出可诊断失败或显式 fallback,不能静默全部降级为 Bounding Box。

T7.2 声学材质绑定

  • 提供拟议接口 SetMeshMaterial(meshId, material):设置三频吸声、透射和散射参数,并支持整个 Mesh、子网格/Section 或单面粒度的材质绑定,服务于不同表面材质的声学表现。
  • 定义材质覆盖优先级、无材质默认值、参数有限值/范围归一化,以及 UE Material/Physical Material 到声学材质的映射边界;材质修改必须使 Scene signature 和相关 Bake 资产正确失效。

T7.3 Mesh 烘焙与加速结构

  • 提供拟议接口 BakeAcousticMesh(meshId, bakeOptions):构建可持久化或可缓存的 BLAS/BVH、体素、探针或其它声学加速数据,降低实时射线求交和离线声学烘焙成本。
  • 明确哪些结构由 UE RHI 管理、哪些属于插件资产,定义缓存键、版本、平台/RHI 兼容性、增量重建、取消、失败回退和过期检测;不能把“构建 Mesh 加速结构”与“完成房间 IR Bake”混为同一状态。

T7.4 动态 Mesh 更新

  • 提供拟议接口 UpdateAcousticMesh(meshId, transformOrGeometry):区分仅 Transform 更新、顶点形变和拓扑变化,并尽量采用 TLAS 更新、BLAS refit 或局部重建,而不是无条件重建整个声学场景。
  • 明确静态场景、Movable 门窗、载具、动态障碍物、蒙皮/形变物体和运行时生成 Mesh 分别支持到什么程度;更新期间不得让音频线程等待 RHI,旧快照应保持有效直到新版本原子发布。

T7.5 声学查询与调试

  • 提供拟议接口 QueryAcousticMesh(query):支持射线命中、遮挡、距离、法线、材质、Section/Face 和加速结构状态查询,服务于效果计算、自动验证和问题定位。
  • 提供拟议接口 DrawAcousticMesh(mode):可视化三角形/Bounds、Direct/Indirect 掩码、材质频带、BLAS/TLAS 状态、命中点、射线路径和被过滤/降级的几何,服务于参数验证和问题排查。

T7.6 资产、导入导出与验收

  • 定义插件拥有的 AcousticMesh 资产或版本化二进制格式,保存坐标系、单位、拓扑、材质映射、内容哈希、来源和格式版本,避免只依赖进程内临时 GeometryExport
  • 提供 Editor 导出和重新导入入口;重新导入后应能在不读取原始 UStaticMesh CPU 数据的情况下用于 Scene、硬件加速结构和 IR Bake。
  • 增加 round-trip 验证:导入前后顶点/索引、变换、材质参数、bounds、scene signature、射线命中和遮挡结果一致;性能验收记录创建、更新、查询、内存/显存和大场景增量重建成本。

明确移出 v1

  • 旧 Task 1–8 拆分:这些是实现阶段的技术分解,不是当前最终验收清单。已完成的部分保留在 IMPLEMENTATION_STATUS.mdUSAGE.mdprogress_log.md;未形成最终目标必要条件的部分不再驱动 v1。
  • true multi-PIE hardware isolation:属于附加覆盖,不是当前最终目标列出的 v1 功能。
  • Shipping 字符串/验证入口隔离复查:属于发布质量审计,不是直接声、间接声、Bake、A/B 和运行时切换的功能验收项。
  • 独立 parser/脚本扩展项:只有在 build_and_validate.pylaunch_runtime_validation.py 实际失败时才作为缺陷修复,不再作为预置 TODO。

保留/删除判断

条目 判断 原因
Direct、遮挡、原音保真 保留 最终目标核心功能。
多 bounce 反射、混响、方向性 保留 最终目标核心功能。
Realtime / Baked / Hybrid IR 与 Bake 保留 最终目标核心功能。
Reference / Direct / Wet / Full A/B 与波形 保留 最终目标明确要求。
运行时快捷键与主屏模式显示 保留 最终目标明确要求。
可交互实时验收 保留 最终目标明确要求固定相机不能替代。
项目物理设置、World-scoped state、三频 DSP、setter、F6、parser、Shipping 隔离等 Task 1–8 从剩余 TODO 删除 它们是实现阶段技术分解或发布审计项,不应继续作为 v1 未完成目标驱动自动编程。

执行顺序

  1. T0:冻结旧 Task 1–8,不再继续扩展实现阶段技术拆分。
  2. T1:确认 Direct、遮挡、原音保真和 direct/wet 差异。
  3. T2:确认多 bounce 反射、混响和方向性。
  4. T3:确认 Realtime / Baked / Hybrid IR 与 Bake 闭环。
  5. T4:确认 Reference / Direct / Wet / Full 同起点 A/B 与波形对比。
  6. T5:完成一次可交互实时验收;固定相机自动测试只作为回归基线。
  7. 每个主要特性完成后运行 build_and_validate.pylaunch_runtime_validation.py,修复所有错误,并更新 TODO.mdUSAGE.mdprogress_log.md