本文件由
TODO.md压缩生成,日期 2026-08-02。 2026-08-06 按最终目标重新收敛剩余工作:只保留直接声、间接声、Bake、A/B 波形和可交互实时验收相关条目。 旧的 Task 1–8 技术拆分已从剩余 TODO 中移除;历史实现和验证证据保留在IMPLEMENTATION_STATUS.md、USAGE.md和progress_log.md。
用户于 2026-07-22 对最新录音完成人耳复核,结论是:处理结果基本听不出原始音频。原来的四模式录音门禁只能证明 WAV 有能量和模式之间形状不同,不能证明输入内容仍可辨识,因此该门禁及监听补偿路线已回退。
后续坚持以下原则:
- 保留
UERayTracingAudioSDK / UERayTracingAudio / UERayTracingAudioEditor三模块结构,以及已经接通的 UE Ray Tracing RHI、Direct/Indirect、DSP 和 Bake 核心。 - 优先完成真实功能,再补完整测试;测试框架可以先简化,但默认必须提供 Editor 界面验证。
- 不再用合成短脉冲、RMS 下限或任意监听增益替代真实输入音频和人耳验收。
- 每个“完成”结论必须同时有代码、构建、运行时、可辨识录音和人耳证据。
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 距离样本增益从错误的
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、插件全量 Automation38/38和固定硬件运行时验证。
- 复现门禁缺陷:最新目录只有 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覆盖,不修改用户配置。
- 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 离线渲染结果,不做逐模式归一化。
- Editor 实际场景提供 Clear / Soft Occluded / Hard Occluded 三个严格等距 2 m 预设,中央实体墙控制遮挡。
- 使用同一原始 MarchingBand 完成 Clear / Soft / Hard 三档自动配对:Reference 字节一致、距离/距离衰减一致、visibility
1→0→0、Direct gain0.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% 差异门禁。
- 封闭实际房间完成 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.114308、over_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 音频均为非零。
- 从 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 单独负责。
- 当前 Python
50/50、UE 音频 Automation23/23、插件全量 Automation38/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.0Beta 交付包内容、版本号和已知限制,见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.md、USAGE.md、progress_log.md,并在本文件把对应项勾成[x]。 - Python 回归:
uv run python -m unittest discover -s script/tests -v。
目的:停止继续执行过期的“Task 1–8”工程拆分,把验收范围收回到最终目标本身。
以下过期拆分不再作为 TODO 保留:
- 项目物理设置 / 纯值 SDK context;
- 按
UWorld作用域的 Listener 与声学场景状态; - 实时安全三频 Direct DSP;
- Direct 连续性诊断与公开运行时 setter;
- 纯 Direct 扫掠轨迹、F6、启动器 parser 门禁;
- Editor Direct 夹具控件;
- 文档、Shipping 隔离与最终验证。
这些条目与最终目标有间接关系,但已属于技术实现/验证细分项;当前文档和日志显示它们已经被后续实现、验证或技术 ledger 关闭,不应再作为未完成工作驱动自动编程。
验收:
- 确认
IMPLEMENTATION_STATUS.md、USAGE.md、progress_log.md中仍保留这些已完成技术项的历史证据。
对应最终目标:支持直达声、遮挡;确保 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对应最终目标:支持反射、混响;完成多 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对应最终目标:支持 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对应最终目标:提供带界面的 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对应最终目标:自动测试可以继续使用固定相机模式,但不得替代可交互实时验收。
- 固定相机自动测试通过,但只作为回归基线。
- 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 具有可听辨差异。
目的:把当前基于到达方向的 Stereo panning/方向性 IR 升级为适合耳机监听的真正双耳渲染。当前左右声道存在差异不等于已经实现 HRTF,也不能据此宣称前后、上下和头部转动定位已经完成。
- 明确双耳技术路线:接入 UE/第三方 HRTF,或实现可加载 SOFA/HRTF 数据集的插件内渲染器;定义许可、采样率、插值和平台边界。HRTF(头相关传输函数)
- Direct 使用左右耳 HRTF 滤波,不再只依赖 equal-power stereo pan;覆盖方位角、仰角、距离和遮挡后的频谱变化。
- Indirect/Baked IR 保留可用于双耳解码的方向信息;明确采用逐方向 HRTF、FOA/更高阶 Ambisonics 解码或其它方向场表示,不能把 FOA 单通道复制到左右耳作为完成。
- Listener 头部旋转能连续更新双耳结果;仅改变朝向时不应强制重新进行完整场景光追或清空卷积尾声。
- 为扬声器输出提供明确回退路径,避免对非耳机设备无条件应用 HRTF。
目的:把当前组件注册时生成的临时声学几何快照,升级为可检查、可复用、可序列化的 Acoustic Mesh 数据管线。UE 已负责 FBX/glTF 等通用模型文件导入;本插件应聚焦把 UE Mesh 转换成声学几何,以及导入/导出插件自己的声学数据。
- 提供拟议接口
CreateAcousticMesh(source, options):从场景模型、UStaticMesh指定 LOD、简单/复杂碰撞体、Bounding Box 或自定义几何生成声学 Mesh,并返回具有明确所有权和生命周期的稳定meshId。 - 导入稳定的顶点、索引、局部到世界变换和材质槽;CPU Mesh Data 不可用、退化三角形、无效索引或空过滤结果必须给出可诊断失败或显式 fallback,不能静默全部降级为 Bounding Box。
- 提供拟议接口
SetMeshMaterial(meshId, material):设置三频吸声、透射和散射参数,并支持整个 Mesh、子网格/Section 或单面粒度的材质绑定,服务于不同表面材质的声学表现。 - 定义材质覆盖优先级、无材质默认值、参数有限值/范围归一化,以及 UE Material/Physical Material 到声学材质的映射边界;材质修改必须使 Scene signature 和相关 Bake 资产正确失效。
- 提供拟议接口
BakeAcousticMesh(meshId, bakeOptions):构建可持久化或可缓存的 BLAS/BVH、体素、探针或其它声学加速数据,降低实时射线求交和离线声学烘焙成本。 - 明确哪些结构由 UE RHI 管理、哪些属于插件资产,定义缓存键、版本、平台/RHI 兼容性、增量重建、取消、失败回退和过期检测;不能把“构建 Mesh 加速结构”与“完成房间 IR Bake”混为同一状态。
- 提供拟议接口
UpdateAcousticMesh(meshId, transformOrGeometry):区分仅 Transform 更新、顶点形变和拓扑变化,并尽量采用 TLAS 更新、BLAS refit 或局部重建,而不是无条件重建整个声学场景。 - 明确静态场景、Movable 门窗、载具、动态障碍物、蒙皮/形变物体和运行时生成 Mesh 分别支持到什么程度;更新期间不得让音频线程等待 RHI,旧快照应保持有效直到新版本原子发布。
- 提供拟议接口
QueryAcousticMesh(query):支持射线命中、遮挡、距离、法线、材质、Section/Face 和加速结构状态查询,服务于效果计算、自动验证和问题定位。 - 提供拟议接口
DrawAcousticMesh(mode):可视化三角形/Bounds、Direct/Indirect 掩码、材质频带、BLAS/TLAS 状态、命中点、射线路径和被过滤/降级的几何,服务于参数验证和问题排查。
- 定义插件拥有的
AcousticMesh资产或版本化二进制格式,保存坐标系、单位、拓扑、材质映射、内容哈希、来源和格式版本,避免只依赖进程内临时GeometryExport。 - 提供 Editor 导出和重新导入入口;重新导入后应能在不读取原始
UStaticMeshCPU 数据的情况下用于 Scene、硬件加速结构和 IR Bake。 - 增加 round-trip 验证:导入前后顶点/索引、变换、材质参数、bounds、scene signature、射线命中和遮挡结果一致;性能验收记录创建、更新、查询、内存/显存和大场景增量重建成本。
- 旧 Task 1–8 拆分:这些是实现阶段的技术分解,不是当前最终验收清单。已完成的部分保留在
IMPLEMENTATION_STATUS.md、USAGE.md和progress_log.md;未形成最终目标必要条件的部分不再驱动 v1。 - true multi-PIE hardware isolation:属于附加覆盖,不是当前最终目标列出的 v1 功能。
- Shipping 字符串/验证入口隔离复查:属于发布质量审计,不是直接声、间接声、Bake、A/B 和运行时切换的功能验收项。
- 独立 parser/脚本扩展项:只有在
build_and_validate.py或launch_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 未完成目标驱动自动编程。 |
- T0:冻结旧 Task 1–8,不再继续扩展实现阶段技术拆分。
- T1:确认 Direct、遮挡、原音保真和 direct/wet 差异。
- T2:确认多 bounce 反射、混响和方向性。
- T3:确认 Realtime / Baked / Hybrid IR 与 Bake 闭环。
- T4:确认 Reference / Direct / Wet / Full 同起点 A/B 与波形对比。
- T5:完成一次可交互实时验收;固定相机自动测试只作为回归基线。
- 每个主要特性完成后运行
build_and_validate.py与launch_runtime_validation.py,修复所有错误,并更新TODO.md、USAGE.md、progress_log.md。