日期:2026-09-05。目标方案见 开放世界重设计。本轮交付统一架构方案与 M0 代码,不代表 M1–M6 或完整商业引擎已完成。
- CPU 作业基础:
Core/Jobs/JobSystem.h/.cpp持久 worker pool,预分配有界环队列;ParallelFor现有模型/CLOD 调用直接接入。调用线程参与、队满减少派发、嵌套内联、全部参与者完成后回传原始异常。保留非 copyable 回调兼容性;不改变 CPU payload/GPU promotion 的线程归属。 - 渲染帧边界:
RenderSceneSnapshot冻结本帧 GPU refs、参数与时间;主光栅、PT shading、EditorSelection 使用显式 const 输入。独立保留 Mesh 的具体 payload buffer/texture,避免只持有可被重导入替换内容的 FMesh 地址。IBL、PT 累积、Tonemap 输出进入 RenderGraph 声明/accessor;IBL 写→Lighting 读具备真实图依赖。 - 构图成本与 RHI 约束:每 Pass 的资源访问通过稀疏索引查重,消除大量 bindless 输入带来的 O(U²) setup 查找。常量/UPLOAD buffer 的合法只读访问维持
GENERIC_READ,禁止错误的 native barrier 和写访问。 - 编辑器工作区:World 默认 Scene/Viewport/Details/Content,底栏不拆 Console;Analyze 打开 Settings/Trace/Console 和常驻渲染/捕获/帧耗时工具。菜单与命令面板可以应用预设。保留已有 V4 布局;显式应用预设才重排,当前工作区/面板开关以原子文件保存。Content 隐藏
.meta/.tmp。 - 恢复启动场景:真实 smoke 发现
LoadDefaultSceneOnce只有定义没有宿主调用。现在 RuntimeState 在创建 Scene 后、暴露 UI 前唯一加载;缺文件可为空场景,加载失败保留原文档并沿既有生命周期清理。当前无 Asset Registry resolver 时仍使用 source hint。 - 验证基建:新增 Jobs 并发测试、同负载旧/新调度基准和
Tools/Validation/SmokeEditor.ps1。Smoke 把当前二进制与最小资源复制到独立 source-layout fixture,生成测试场景,隔离场景、缓存、布局和 LOCALAPPDATA,不修改用户项目内容,只向自己启动的 PID 请求正常关闭。 - RenderDoc 默认关闭:按用户要求取消自动加载,只有启动前设置
WAVE_ENABLE_RENDERDOC=1才进入 DLL 查找/加载。指定WAVE_RENDERDOC_PATH不会隐式开启。Capture 能力保留,默认禁用。
- Visual Studio 2022 x64 重新配置;Debug/Release
WaveEditor、相关测试均构建通过,第一方 warnings-as-errors 保持。 - Debug/Release CTest 3/3 通过:PluginSystem、EditorPluginSystem、JobSystem。
- Jobs 覆盖:空/串行、每项仅执行一次、线程上限、worker 复用、同池/跨池嵌套、非标准异常与恢复、确定性队列饱和、8 个并发提交者、move-only 回调。
- Debug Cube/World smoke 通过:场景含一个实际 Meshlet,DX12 初始化、GPU validation、IBL/持续渲染、WM_CLOSE、exit 0、Viewport/Docking 保存和本次日志检查均通过。
- Debug Cube/Analyze 光栅与 Path Tracing smoke 均通过,分别观察到 IBL / RT pipeline、连续 6 秒运行、正常退出及干净日志。报告分别在
.tmp/Validation/867460c33fa54222a4b4f32fdd26ccf6/result.json和.tmp/Validation/bab1ad0d05f64ec28180fa8ba78555be/result.json。 - Release Empty/World smoke 在就绪检查阶段超时,保留失败报告
.tmp/Validation/e02a9ed791c64e9586bb0fa3f37e0f3b/result.json,未计为通过;脚本已发送正常关闭请求,随后确认该进程已退出。只读诊断确定脚本误要求 Release 输出仅GRAPHICS_DEBUG才有的InitD3DDevice:日志;已有设备/空场景/IBL 和布局记录。脚本修正后尚未重跑,因此仍保留为未通过的验证项。 - World 窗口截图可见 Cube 正常绘制,但截图受到 DPI 裁切影响,不能作为完整布局验收。截图脚本的 DPI 修正尚未运行验证。
- 用户随后要求停止 RenderDoc,以免影响游戏。已停止所有引擎/GPU 运行验证;确认无 WaveEditor/RenderDoc 进程,系统 AppInit 全局注入未启用。默认关闭 RenderDoc 的最后修改已重新配置并构建 Debug/Release,未重新启动验证。上述 GPU smoke 对应关闭 RenderDoc 修改之前的二进制,报告保留 SHA256。窗口出现本身不作为通过条件。
- 验证结束后已将当前 Build 的
WAVE_BUILD_TESTS/WAVE_BUILD_BENCHMARKS恢复为原来的 OFF;源码选项默认值未改变。
调度微基准为本机 32 逻辑线程、Release、MaxThreads=8、预热 8 次、每种实现采样 50 次,交错顺序并比对每个输出值。没有时间断言,以下是一次当前测量:
| 负载 | 原每次创建线程:平均 | 持久池:平均 | 原/新 p95 | 平均加速比 |
|---|---|---|---|---|
| 256 项 × 64 轮整数运算 | 358.002 µs | 33.214 µs | 485.400 / 51.100 µs | 10.779× |
| 4096 项 × 128 轮整数运算 | 508.172 µs | 246.642 µs | 573.400 / 295.900 µs | 2.060× |
这是 CPU 循环调度对比,不是整机渲染 FPS、流送延迟或开放世界规模证明。快照构图增加完整资源依赖,尚未做大型场景的帧时间回归。
cmake -S . -B Build -G "Visual Studio 17 2022" -A x64 -DWAVE_BUILD_TESTS=ON -DWAVE_BUILD_BENCHMARKS=ON
cmake --build Build --config Debug --target WaveEditor WavePluginTests WaveEditorPluginTests WaveJobSystemTests
ctest --test-dir Build -C Debug --output-on-failure
cmake --build Build --config Release --target WaveEditor WavePluginTests WaveEditorPluginTests WaveJobSystemTests WaveJobSystemBenchmark
ctest --test-dir Build -C Release --output-on-failure
& .\Build\Release\WaveJobSystemBenchmark.exe
& .\Tools\Validation\SmokeEditor.ps1 -Scene Cube -Workspace World
& .\Tools\Validation\SmokeEditor.ps1 -Scene Cube -Workspace Analyze
& .\Tools\Validation\SmokeEditor.ps1 -Scene Cube -Workspace Analyze -RenderMode PathTracing当前环境 cmake 不在 PATH,实际使用 C:\Program Files\CMake\bin\cmake.exe 和同目录 ctest.exe。Smoke 生成 .tmp/Validation/<run-id>/result.json,包含本次 exe SHA256、PID、退出码、启动证据、完整日志路径及失败原因。其 %LOCALAPPDATA% 指向 fixture/User,因此测试日志位于 fixture/User/WaveEngine/Logs,不覆盖日常编辑器日志。
- 移除 Scene 间接 include 后三个 Pass 缺共享数据直接头文件,首次构建暴露后补齐。
- 独立 HLSL 对照确认 IndexBuffer 也是 bindless 输入,加入几何快照声明/保活。
- 空快照场景的 CBV 空指针检查补齐。
- 完整 Import 放大原构图查重复杂度,改为 handle 索引;保持 vector 顺序与访问合并语义。
- Cube smoke 未见几何日志,定位并修复默认场景加载未接线;首次失败保留报告,未以历史结果替代当前验证。
FScene 仍共享逻辑/GPU 数据,float 坐标和全量 GPUScene 更新仍存在;snapshot 每帧仍扫描实例。IBL 由 Scene 拥有,PT AS/累积状态仍有显式可修改边界;历史未 per-view 化。任务池没有统一两条导入入口,也没有 IO、payload 字节、上传与 VRAM 硬预算。
工作区是预设重排并保存当前布局,不分别记忆两个布局;World 视口仍可选 Meshlet/GroupId。未做完整 DPI/快捷键/拖拽/Undo 回归、在途重导入压力测试或 GPU 图像差异验收。
下一阶段优先落地稳定 Entity/Render ID、世界 double/渲染相对坐标、GPU Scene 增量上传与可复现相机回放,然后才接世界分区和分块驻留流送。PT 构建开关、资产逻辑视图、Player/Cooker 均在路线图中。