From d46bf87970cb94bb62640714991352e4249c2ffd Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Thu, 9 Apr 2026 02:59:36 +0800 Subject: [PATCH] Sync editor rendering and UI workspace updates --- CMakeLists.txt | 20 + .../XCUI_NewEditor主线重建计划_2026-04-07.md | 484 +++++++ .../DXR_Volumetric_Rendering_Research_Report.md | 0 docs/plan/毕设/一 体积渲染入门.md | 904 +++++++++++++ docs/plan/毕设/三 体积渲染方程.md | 552 ++++++++ docs/plan/毕设/二 体积渲染实践.md | 924 +++++++++++++ .../任务书-王子文.docx | Bin docs/plan/毕设/初稿/第一章.md | 47 + docs/plan/毕设/初稿/第七章.md | 133 ++ docs/plan/毕设/初稿/第三章.md | 165 +++ docs/plan/毕设/初稿/第二章.md | 70 + docs/plan/毕设/初稿/第五章.md | 143 ++ docs/plan/毕设/初稿/第六章.md | 123 ++ docs/plan/毕设/初稿/第四章.md | 105 ++ .../完整开题报告.md | 0 .../开题报告-王子文.doc | 0 ...科生毕业论文(设计)书写印制规范(2024315).doc | Bin 0 -> 59904 bytes ...学本科生毕业论文(设计)参考模板(2024315).doc | Bin 0 -> 135168 bytes docs/plan/毕设/论文正文大纲.md | 513 ++++++++ .../ComponentEditorRegistry.cpp | 2 + .../VolumeRendererComponentEditor.h | 122 ++ engine/CMakeLists.txt | 14 + .../include/XCEngine/RHI/D3D12/D3D12Shader.h | 1 + .../Builtin/BuiltinPassLayoutUtils.h | 24 + .../Builtin/BuiltinPassMetadataUtils.h | 12 + .../Rendering/Builtin/BuiltinPassTypes.h | 4 + .../Rendering/Caches/RenderResourceCache.h | 18 + .../XCEngine/Resources/BuiltinResources.h | 1 + .../XCEngine/UI/Widgets/UISelectionModel.h | 16 +- engine/src/RHI/D3D12/D3D12Device.cpp | 19 +- engine/src/RHI/D3D12/D3D12Shader.cpp | 116 +- .../Rendering/Caches/RenderResourceCache.cpp | 114 ++ .../src/Rendering/Detail/ShaderVariantUtils.h | 28 + .../BuiltinColorScalePostProcessPass.cpp | 2 + .../BuiltinDepthStylePassBaseResources.cpp | 2 + .../Passes/BuiltinFinalColorPass.cpp | 2 + .../Passes/BuiltinInfiniteGridPass.cpp | 2 + .../Passes/BuiltinObjectIdOutlinePass.cpp | 2 + .../Passes/BuiltinObjectIdPassResources.cpp | 2 + .../Pipelines/BuiltinForwardPipeline.cpp | 24 +- .../BuiltinForwardPipelineResources.cpp | 2 + engine/src/Resources/BuiltinResources.cpp | 20 + engine/src/UI/Widgets/UISelectionModel.cpp | 133 +- project/.xceditor/imgui_layout.ini | 30 +- project/Assets/Materials/VolumeCloud.mat | 13 + project/Assets/Materials/VolumeCloud.mat.meta | 5 + project/Assets/Scenes/Main.xc | 14 +- tests/RHI/D3D12/unit/CMakeLists.txt | 4 + tests/RHI/OpenGL/unit/CMakeLists.txt | 4 + tests/RHI/Vulkan/unit/CMakeLists.txt | 4 + .../unit/test_builtin_forward_pipeline.cpp | 143 ++ .../UI/Core/unit/test_ui_selection_model.cpp | 52 + tests/UI/Editor/integration/CMakeLists.txt | 15 + tests/UI/Editor/integration/README.md | 35 + .../history/20260408_190049_1_startup.png | Bin 0 -> 86092 bytes .../shell/dock_host_basic/captures/latest.png | Bin 0 -> 86092 bytes .../shell/list_view_basic/main.cpp | 4 +- .../list_view_inline_rename/CMakeLists.txt | 31 + .../history/20260409_011602_1_startup.png | Bin 0 -> 83167 bytes .../history/20260409_011741_1_startup.png | Bin 0 -> 83167 bytes .../history/20260409_011820_1_startup.png | Bin 0 -> 83167 bytes .../history/20260409_012145_1_startup.png | Bin 0 -> 82852 bytes .../history/20260409_012151_1_startup.png | Bin 0 -> 82852 bytes .../captures/latest.png | Bin 0 -> 82852 bytes .../shell/list_view_inline_rename/main.cpp | 1172 +++++++++++++++++ .../list_view_multiselect/CMakeLists.txt | 31 + .../history/20260409_001451_1_startup.png | Bin 0 -> 87362 bytes .../list_view_multiselect/captures/latest.png | Bin 0 -> 87362 bytes .../shell/list_view_multiselect/main.cpp | 901 +++++++++++++ .../history/20260408_182141_1_startup.png | Bin 0 -> 59812 bytes .../history/20260408_190049_1_startup.png | Bin 0 -> 59812 bytes .../shell/tab_strip_basic/captures/latest.png | Bin 0 -> 59812 bytes .../shell/tab_strip_basic/main.cpp | 267 ++-- .../history/20260408_174622_1_startup.png | Bin 0 -> 64632 bytes .../shell/tree_view_basic/captures/latest.png | Bin 0 -> 64632 bytes .../shell/tree_view_basic/main.cpp | 118 +- .../tree_view_inline_rename/CMakeLists.txt | 31 + .../history/20260409_023941_1_startup.png | Bin 0 -> 67359 bytes .../captures/latest.png | Bin 0 -> 67359 bytes .../shell/tree_view_inline_rename/main.cpp | 958 ++++++++++++++ .../tree_view_multiselect/CMakeLists.txt | 30 + .../history/20260409_001604_1_startup.png | Bin 0 -> 85132 bytes .../history/20260409_001800_1_startup.png | Bin 0 -> 85123 bytes .../tree_view_multiselect/captures/latest.png | Bin 0 -> 85123 bytes .../shell/tree_view_multiselect/main.cpp | 971 ++++++++++++++ .../history/20260408_190643_1_startup.png | Bin 0 -> 91382 bytes .../captures/latest.png | Bin 0 -> 91382 bytes .../history/20260408_222440_1_startup.png | Bin 0 -> 81691 bytes .../captures/latest.png | Bin 0 -> 81691 bytes .../shell/workspace_shell_compose/main.cpp | 378 +++--- tests/UI/Editor/unit/CMakeLists.txt | 2 + .../test_ui_editor_command_dispatcher.cpp | 2 +- .../unit/test_ui_editor_command_registry.cpp | 2 +- .../test_ui_editor_dock_host_interaction.cpp | 103 ++ .../test_ui_editor_inline_rename_session.cpp | 124 ++ .../Editor/unit/test_ui_editor_list_view.cpp | 2 +- .../test_ui_editor_list_view_interaction.cpp | 194 ++- .../unit/test_ui_editor_property_grid.cpp | 79 ++ ...st_ui_editor_property_grid_interaction.cpp | 116 ++ .../unit/test_ui_editor_shortcut_manager.cpp | 2 +- .../Editor/unit/test_ui_editor_tab_strip.cpp | 2 +- .../test_ui_editor_tab_strip_interaction.cpp | 244 ++++ tests/UI/Editor/unit/test_ui_editor_theme.cpp | 2 +- .../Editor/unit/test_ui_editor_tree_view.cpp | 2 +- .../test_ui_editor_tree_view_interaction.cpp | 390 +++++- .../test_ui_editor_workspace_interaction.cpp | 1 + tests/UI/TEST_SPEC.md | 5 + 107 files changed, 10918 insertions(+), 430 deletions(-) create mode 100644 docs/plan/XCUI_NewEditor主线重建计划_2026-04-07.md rename docs/plan/{开题报告和任务书 => 毕设}/DXR_Volumetric_Rendering_Research_Report.md (100%) create mode 100644 docs/plan/毕设/一 体积渲染入门.md create mode 100644 docs/plan/毕设/三 体积渲染方程.md create mode 100644 docs/plan/毕设/二 体积渲染实践.md rename docs/plan/{开题报告和任务书 => 毕设}/任务书-王子文.docx (100%) create mode 100644 docs/plan/毕设/初稿/第一章.md create mode 100644 docs/plan/毕设/初稿/第七章.md create mode 100644 docs/plan/毕设/初稿/第三章.md create mode 100644 docs/plan/毕设/初稿/第二章.md create mode 100644 docs/plan/毕设/初稿/第五章.md create mode 100644 docs/plan/毕设/初稿/第六章.md create mode 100644 docs/plan/毕设/初稿/第四章.md rename docs/plan/{开题报告和任务书 => 毕设}/完整开题报告.md (100%) rename docs/plan/{开题报告和任务书 => 毕设}/开题报告-王子文.doc (100%) create mode 100644 docs/plan/毕设/武汉大学本科生毕业论文(设计)书写印制规范(2024315).doc create mode 100644 docs/plan/毕设/武汉大学本科生毕业论文(设计)参考模板(2024315).doc create mode 100644 docs/plan/毕设/论文正文大纲.md create mode 100644 editor/src/ComponentEditors/VolumeRendererComponentEditor.h create mode 100644 project/Assets/Materials/VolumeCloud.mat create mode 100644 project/Assets/Materials/VolumeCloud.mat.meta create mode 100644 tests/UI/Editor/integration/shell/dock_host_basic/captures/history/20260408_190049_1_startup.png create mode 100644 tests/UI/Editor/integration/shell/dock_host_basic/captures/latest.png create mode 100644 tests/UI/Editor/integration/shell/list_view_inline_rename/CMakeLists.txt create mode 100644 tests/UI/Editor/integration/shell/list_view_inline_rename/captures/history/20260409_011602_1_startup.png create mode 100644 tests/UI/Editor/integration/shell/list_view_inline_rename/captures/history/20260409_011741_1_startup.png create mode 100644 tests/UI/Editor/integration/shell/list_view_inline_rename/captures/history/20260409_011820_1_startup.png create mode 100644 tests/UI/Editor/integration/shell/list_view_inline_rename/captures/history/20260409_012145_1_startup.png create mode 100644 tests/UI/Editor/integration/shell/list_view_inline_rename/captures/history/20260409_012151_1_startup.png create mode 100644 tests/UI/Editor/integration/shell/list_view_inline_rename/captures/latest.png create mode 100644 tests/UI/Editor/integration/shell/list_view_inline_rename/main.cpp create mode 100644 tests/UI/Editor/integration/shell/list_view_multiselect/CMakeLists.txt create mode 100644 tests/UI/Editor/integration/shell/list_view_multiselect/captures/history/20260409_001451_1_startup.png create mode 100644 tests/UI/Editor/integration/shell/list_view_multiselect/captures/latest.png create mode 100644 tests/UI/Editor/integration/shell/list_view_multiselect/main.cpp create mode 100644 tests/UI/Editor/integration/shell/tab_strip_basic/captures/history/20260408_182141_1_startup.png create mode 100644 tests/UI/Editor/integration/shell/tab_strip_basic/captures/history/20260408_190049_1_startup.png create mode 100644 tests/UI/Editor/integration/shell/tab_strip_basic/captures/latest.png create mode 100644 tests/UI/Editor/integration/shell/tree_view_basic/captures/history/20260408_174622_1_startup.png create mode 100644 tests/UI/Editor/integration/shell/tree_view_basic/captures/latest.png create mode 100644 tests/UI/Editor/integration/shell/tree_view_inline_rename/CMakeLists.txt create mode 100644 tests/UI/Editor/integration/shell/tree_view_inline_rename/captures/history/20260409_023941_1_startup.png create mode 100644 tests/UI/Editor/integration/shell/tree_view_inline_rename/captures/latest.png create mode 100644 tests/UI/Editor/integration/shell/tree_view_inline_rename/main.cpp create mode 100644 tests/UI/Editor/integration/shell/tree_view_multiselect/CMakeLists.txt create mode 100644 tests/UI/Editor/integration/shell/tree_view_multiselect/captures/history/20260409_001604_1_startup.png create mode 100644 tests/UI/Editor/integration/shell/tree_view_multiselect/captures/history/20260409_001800_1_startup.png create mode 100644 tests/UI/Editor/integration/shell/tree_view_multiselect/captures/latest.png create mode 100644 tests/UI/Editor/integration/shell/tree_view_multiselect/main.cpp create mode 100644 tests/UI/Editor/integration/shell/workspace_interaction_basic/captures/history/20260408_190643_1_startup.png create mode 100644 tests/UI/Editor/integration/shell/workspace_interaction_basic/captures/latest.png create mode 100644 tests/UI/Editor/integration/shell/workspace_shell_compose/captures/history/20260408_222440_1_startup.png create mode 100644 tests/UI/Editor/integration/shell/workspace_shell_compose/captures/latest.png create mode 100644 tests/UI/Editor/unit/test_ui_editor_inline_rename_session.cpp create mode 100644 tests/UI/Editor/unit/test_ui_editor_tab_strip_interaction.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b81e3d7..d67a0370 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,6 +13,26 @@ project(XCEngine) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(XCENGINE_NANOVDB_INCLUDE_HINTS + "${CMAKE_SOURCE_DIR}/engine/third_party/nanovdb/include" + "$ENV{VCPKG_ROOT}/installed/x64-windows/include" + "D:/vcpkg/installed/x64-windows/include" +) + +find_path( + XCENGINE_NANOVDB_INCLUDE_DIR + NAMES nanovdb/io/IO.h + HINTS ${XCENGINE_NANOVDB_INCLUDE_HINTS} +) + +if(XCENGINE_NANOVDB_INCLUDE_DIR) + set(XCENGINE_HAS_NANOVDB ON) + message(STATUS "NanoVDB headers found: ${XCENGINE_NANOVDB_INCLUDE_DIR}") +else() + set(XCENGINE_HAS_NANOVDB OFF) + message(STATUS "NanoVDB headers not found; .nvdb source-file support will be disabled") +endif() + enable_testing() option(XCENGINE_ENABLE_MONO_SCRIPTING "Build the Mono-based C# scripting runtime" ON) diff --git a/docs/plan/XCUI_NewEditor主线重建计划_2026-04-07.md b/docs/plan/XCUI_NewEditor主线重建计划_2026-04-07.md new file mode 100644 index 00000000..00e9c48c --- /dev/null +++ b/docs/plan/XCUI_NewEditor主线重建计划_2026-04-07.md @@ -0,0 +1,484 @@ +# XCUI NewEditor主线重建计划 + +日期:2026-04-07 + +## 1. 文档定位 + +本文档用于收口 `XCUI / XCEditor / new_editor` 当前阶段的真实执行主线。 + +它不是重复定义 XCUI 全部架构,而是把“接下来到底怎么做”重新拍板,并覆盖之前已经不再成立的执行假设。 + +本文档与现有文档的关系如下: + +- `docs/plan/XCUI完整架构设计与执行计划.md` + - 继续作为 XCUI 总体架构与三层设计的总纲参考。 +- 本文档 + - 作为 `new_editor` 主线重建的最新执行计划。 + - 优先级高于旧的阶段状态快照与旧执行顺序说明。 + +--- + +## 2. 当前拍板结论 + +当前必须明确以下结论,并作为后续开发硬约束: + +### 2.1 旧 `editor/` 不再作为 XCUI 替换目标 + +- `editor/` 当前 ImGui 版本继续保留。 +- 它是参考实现、行为对照和视觉基线来源。 +- 当前阶段不再把主要精力放在“把 `XCEditor` 回填进旧 `editor/` 并替掉 ImGui”这条路线。 + +### 2.2 `new_editor/` 是未来正式编辑器主线 + +- `new_editor/` 不再只是临时名字上的沙盒。 +- 它应被视为未来正式编辑器的新主线工作区。 +- 后续真正重建编辑器时,应以 `new_editor/` 为宿主和产品主线,而不是回头改旧 `editor/`。 + +### 2.3 `tests/UI` 仍然是基础层唯一实验场 + +- `tests/UI/Core` 只验证 Core 共享能力。 +- `tests/UI/Editor` 只验证 Editor 基础层能力。 +- `tests/UI/Runtime` 只验证 Runtime 层能力。 +- 所有基础层验证、交互试验、截图检查,都优先放在 `tests/UI`。 + +### 2.4 `new_editor/` 当前不承担“实验面板堆场” + +- `new_editor/` 当前只承载: + - `XCEditor` 基础层库 + - `new_editor` 的真实宿主与产品装配代码 +- 在 Editor 基础层收口前,禁止把 `new_editor/` 继续做成杂乱的试验场或验证面板集合。 +- 需要人工操作检查的内容,仍然通过 `tests/UI/*/integration` 提供。 + +### 2.5 当前主线优先级是 `Editor`,不是 `Runtime` + +- `Runtime` 继续按三层设计保留,但不是当前最高优先级。 +- 当前最高优先级是先把 `UI Core + UI Editor` 做成熟,并让其具备支撑 `new_editor` 正式重建的能力。 + +### 2.6 Editor 视觉基线以旧 `editor/` 为准 + +- `XCEditor` 当前默认视觉还没有达到旧 `editor/` 的程度。 +- 后续 `Editor UI` 的默认主题、控件密度、边框、分隔线、状态反馈强度,都要以旧 `editor/` 现有风格为基线。 +- 目标不是做一套“看起来差不多的深色 UI”,而是做出可以承载当前编辑器产品感的正式 Editor 风格。 + +--- + +## 3. 三层边界再次确认 + +### 3.1 Core + +`Core` 负责: + +- retained-mode UI 运行机制 +- layout / input / focus / scroll / popup / text / render contract +- theme / token / style resolve 的通用机制 +- 与 Editor / Runtime 都共享的基础能力 + +`Core` 不负责: + +- Editor 风格语义 +- Runtime screen/player 宿主策略 +- 业务面板 + +### 3.2 Runtime + +`Runtime` 负责: + +- game UI 的 screen / layer / player / system +- runtime 输入路由、阻塞、导航、menu/hud/modal 语义 +- 面向游戏开发者的运行时宿主层 + +`Runtime` 不负责: + +- Editor 专用控件 +- Editor 默认风格 +- 新编辑器重建主线 + +### 3.3 Editor + +`Editor` 负责: + +- editor-only widget +- editor-only shell / dock / workspace / panel session / viewport shell +- editor 风格语义 +- 默认 editor theme token 与资源化样式体系 + +`Editor` 不负责: + +- 旧 `editor/` 的就地替换 +- 直接承担游戏 Runtime UI + +--- + +## 4. 当前状态评估 + +## 4.1 已有基础 + +当前 `XCEditor` 已经具备以下基础: + +- shell 级模型与状态骨架: + - workspace + - dock host + - panel registry + - panel lifecycle + - layout persistence + - shortcut / command 基础路径 +- editor 常用基础件: + - menu bar / popup / context menu + - tab strip + - tree view / list view + - scroll view + - property grid + - viewport shell / viewport slot + - bool / number / enum field +- `tests/UI/Editor` 已形成 `unit + integration` 的基础验证体系。 + +结论: + +- `XCEditor` 已经不是 demo 级玩具。 +- 它已经具备继续作为 `new_editor` 底座推进的资格。 + +## 4.2 当前最突出的缺口 + +当前离“可正式支撑 `new_editor` 重建”的差距主要在以下几点: + +### 4.2.1 Editor 默认样式资源层太薄 + +- 当前 `.xctheme` 只能控制少量颜色、spacing、radius。 +- 远不足以承载旧 editor 那种完整的产品级视觉体系。 +- 目前很多控件仍然只是在通用深色皮肤上运行,不是正式 Editor 风格。 + +### 4.2.2 Widget 视觉参数仍未充分资源化 + +- 仍有大量 palette / metrics / font size / rounding / inset 硬编码在 C++ 里。 +- 这会导致 `.xctheme` 只能“改一点颜色”,无法真正控制 Editor 外观。 + +### 4.2.3 视觉基线还未对齐旧 editor + +- 当前 widget 默认密度偏松。 +- 圆角偏大。 +- 行高偏高。 +- 分隔线与层级关系不够清晰。 +- 菜单栏、面板框架、属性行、tab 等视觉结构还没有贴近旧 editor。 + +### 4.2.4 仍缺少若干 Editor 通用字段件与高级能力 + +- `TextField` +- `Vector2Field` +- `Vector3Field` +- `Vector4Field` +- `ColorField` +- 后续可扩展的 `AssetField / ObjectField` + +### 4.2.5 collection / shell 高级能力还未收口 + +- multi-selection +- inline rename +- drag/drop contract +- virtualization +- icon / glyph 统一语义 +- 更完整的 toolbar / status / shell chrome 体系 + +--- + +## 5. 当前阶段硬规则 + +### 5.1 先做基础层,不提前做业务面板 + +在 Editor 基础层完成收口前: + +- 不开始复刻 Hierarchy / Inspector / Console / Project 这些完整业务面板。 +- 只允许做承载这些面板将来必需的通用 Editor 基础件。 + +### 5.2 Core 能力缺口必须先回补 Core + +凡是发现缺的是: + +- layout +- input +- focus +- popup +- text +- render contract +- shared widget primitive + +都必须优先回补到 `Core` 或 shared 层,而不是在 `Editor` 层写临时绕过实现。 + +### 5.3 Editor 风格必须资源化,但语义归 Editor 层管理 + +- 样式机制归 `Core` +- Editor 默认风格语义归 `Editor` +- 颜色 / spacing / radius / border / density / typography 应尽量走资源化 token +- 控件行为与结构语义仍由 `Editor` 代码层控制 + +### 5.4 `new_editor/` 只做正式产品装配,不做测试堆场 + +- 验证入口继续放在 `tests/UI` +- `new_editor/` 只保留未来正式编辑器真正需要的宿主、装配、资源与业务层结构 + +--- + +## 6. Editor基础层完成标准 + +只有当以下条件基本满足后,才允许进入 `new_editor` 业务面板重建阶段: + +### 6.1 视觉与样式层 + +- 已建立足够厚的 Editor token 体系 +- widget 的 palette / metrics 基本完成 theme 驱动 +- menu / popup / tab / panel / property / list / tree / status / scrollbar / splitter 都已接入 Editor 主题 +- 新主题能稳定逼近旧 editor 的视觉基线 + +### 6.2 字段件层 + +- `BoolField / NumberField / EnumField / TextField / Vector2/3/4Field / ColorField` 可稳定使用 +- `PropertyGrid` 能复用这些字段件,而不是自己硬画假控件 + +### 6.3 collection / shell 层 + +- tree / list / tab / popup / scroll / dock / workspace 都具备稳定基础交互 +- keyboard / focus / shortcut / popup / panel session 契约稳定 +- 关键状态机已通过 `unit` + +### 6.4 验证层 + +- 每个重要基础件都有对应 `unit` +- 每个重要交互点都有对应 `integration exe` +- 截图检查链路可用 +- 中文操作指示和检查重点明确 + +--- + +## 7. 分阶段执行计划 + +## Phase A:Editor主题系统重构 + +### 目标 + +把 `Editor` 当前“薄主题 + 硬编码 widget 视觉”的状态,重构为“厚 token + 统一默认 Editor Theme”。 + +### 任务 + +- 定义 Editor 主题 token 命名规范。 +- 覆盖以下语义槽位: + - workspace + - panel + - header + - footer + - menu bar + - popup + - tab + - property row + - field label/value + - status bar + - splitter + - scrollbar + - selection / hover / active / focus +- 把现有 widget 中的默认 palette / metrics 尽量迁出为 Editor theme 可控项。 +- 建立“旧 editor 风格对齐”的基准场景与截图检查。 + +### 完成标准 + +- 主题资源文件已足够控制主要 Editor 视觉。 +- 修改主题时,不再需要频繁改 widget 绘制代码。 + +## Phase B:字段件体系补齐 + +### 目标 + +补齐 Editor 通用字段件,为后续 Inspector / 面板表单重建打基础。 + +### 任务 + +- 正式完成 `TextField` +- 完成 `Vector2Field` +- 完成 `Vector3Field` +- 完成 `Vector4Field` +- 完成 `ColorField` +- 视需要评估 `AssetField / ObjectField` 的基础契约 +- 让 `PropertyGrid` 正式承接这些字段件 + +### 完成标准 + +- `PropertyGrid` 不再停留在基础标量字段件阶段。 +- 复合字段件已有完整 `unit + integration`。 + +### 当前检查点(2026-04-08) + +- `TextField` 已完成正式接入: + - `XCEditor` 已提供 `UIEditorTextField` 与 `UIEditorTextFieldInteraction` + - `UIEditorTheme` 已补齐 `TextField` theme resolver 与 hosted builder + - `PropertyGrid` 的 `Text` 行已切到正式 `TextField` 复用链路 +- `Vector2Field` 已完成第一批复合字段件接入: + - `XCEditor` 已提供 `UIEditorVector2Field` 与 `UIEditorVector2FieldInteraction` + - `UIEditorTheme` 已补齐 `Vector2Field` theme resolver 与 hosted builder + - `tests/UI/Editor` 已补齐 `Vector2Field` 的 layout / hit-test / interaction / theme 单测 + - `editor_ui_vector2_field_basic_validation` 已可编译、运行、自动截图,并已接入 `editor_ui_integration_tests` +- 当前 `tests/UI/Editor` 中,这两批字段件都遵守同一条验证规范: + - 顶部必须明确写“这个测试验证什么功能” + - 试验面板只放当前批次要检查的控件 + - 保持 Unity 向黑白灰风格,不把业务面板塞进 `new_editor` +- 因此 `Phase B` 当前已正式完成前两项: + 1. `TextField` + 2. `Vector2Field` +- 下一批主线顺序固定为: + 1. `Vector3Field` + 2. `Vector4Field` + 3. `ColorField` + +## Phase C:Collection与交互高级能力收口 + +### 目标 + +让 tree/list/tab/menu/property 进入可长期复用的 Editor 基础件水平。 + +### 任务 + +- multi-selection +- inline rename/edit session +- drag/drop contract +- virtualization 基础设计与第一轮实现 +- icon / glyph / disclosure / dropdown indicator 统一语义 +- collection 与 keyboard navigation/focus 的进一步收口 + +### 完成标准 + +- collection 控件不再只是演示级原型。 +- 已具备支撑真实 editor 面板的核心交互能力。 + +## Phase D:Shell与Workspace正式收口 + +### 目标 + +把 shell 基础层从“能演示”推进到“可作为新编辑器外壳底座”。 + +### 任务 + +- menu bar / popup / context menu 视觉与交互对齐旧 editor 基线 +- panel frame / status bar / tab strip / dock host 进一步主题化和结构收口 +- workspace session / panel lifecycle / shortcut / command / layout persistence 继续补齐 +- viewport shell / viewport input bridge 与 Editor shell 契约继续稳定 + +### 完成标准 + +- shell 基础层达到可承载空业务编辑器外壳的程度。 + +## Phase E:`new_editor` 空壳正式接管 + +### 目标 + +在不引入具体业务面板的前提下,让 `new_editor` 正式使用 `XCEditor` 搭建空编辑器壳层。 + +### 任务 + +- `new_editor` 中装配: + - 主菜单壳层 + - 工具栏占位 + - workspace / dock 壳层 + - status bar + - viewport shell 占位 +- 保持业务内容为空或极简占位,不提前混入具体面板逻辑。 + +### 完成标准 + +- `new_editor` 具备“正式产品空壳”形态。 +- 旧 `editor/` 继续只承担参考作用。 + +## Phase F:业务面板分批重建 + +### 前置条件 + +只有在 Phase A 到 Phase E 基本完成后,才进入本阶段。 + +### 执行原则 + +- 以旧 `editor/` 为行为和视觉参考 +- 以 `new_editor/` 为正式宿主 +- 业务面板按独立垂直切片逐个迁入 + +### 候选顺序 + +- Inspector 基础表单链路 +- Hierarchy +- Console +- Project +- Scene/Game 相关工具壳层 + +--- + +## 8. 测试与验收规则 + +### 8.1 Core 能力进 `tests/UI/Core` + +凡是共享能力,一律在 `tests/UI/Core` 验证: + +- popup overlay primitive +- scroll / focus / keyboard navigation +- text input / style resolve / layout + +### 8.2 Editor-only 能力进 `tests/UI/Editor` + +凡是 editor-only,一律在 `tests/UI/Editor` 验证: + +- field widgets +- property grid +- menu / popup / tab / dock / workspace +- shell state / panel lifecycle / viewport shell + +### 8.3 `new_editor` 不承担测试职责 + +- `new_editor` 只做产品集成冒烟检查 +- 不把验证场景继续塞到 `new_editor` 里 + +### 8.4 每批次收口要求 + +每推进一个 Editor 基础件批次,至少必须完成: + +- 对应 `unit` +- 对应 `integration exe` +- 人工截图检查 +- 风格与交互结论记录 + +--- + +## 9. 与其它计划的关系 + +### 9.1 继续有效的文档 + +- `docs/plan/XCUI完整架构设计与执行计划.md` + - 继续作为 XCUI 总体架构总纲 +- `docs/plan/Material Inspector与Shader属性面板收口计划_2026-04-07.md` + - 继续作为未来业务层计划保留 + - 但执行前提是本计划中的 Editor 基础层先收口 + +### 9.2 已被覆盖的旧结论 + +以下旧结论不再作为当前主线执行依据: + +- “后续主要目标是把 XCUI 直接嵌回旧 `editor/` 并替掉 ImGui” +- “`new_editor/` 长期只作为临时沙盒存在” +- “可以在 `new_editor/` 中继续堆各类试验面板作为主验证入口” + +--- + +补充归档结论: + +- `docs/plan/used/XCUI_Phase_Status_2026-04-05.md` 已转入归档,不再作为当前主线执行依据。 + +## 10. 当前结论 + +当前最重要的不是立刻复刻旧 editor 的具体业务面板,而是先把: + +- `UI Core` +- `UI Editor` +- `new_editor` 正式宿主边界 + +这三者之间的职责彻底做对。 + +正确路径是: + +1. 继续在 `tests/UI` 中把基础层做成熟 +2. 以旧 `editor/` 为风格与行为参考 +3. 以 `new_editor/` 为未来正式编辑器主线 +4. 待基础层达标后,再进入业务面板分批重建 + +这条路线比“直接替换旧 editor 中的 ImGui”风险更低,也更符合当前工程实际。 diff --git a/docs/plan/开题报告和任务书/DXR_Volumetric_Rendering_Research_Report.md b/docs/plan/毕设/DXR_Volumetric_Rendering_Research_Report.md similarity index 100% rename from docs/plan/开题报告和任务书/DXR_Volumetric_Rendering_Research_Report.md rename to docs/plan/毕设/DXR_Volumetric_Rendering_Research_Report.md diff --git a/docs/plan/毕设/一 体积渲染入门.md b/docs/plan/毕设/一 体积渲染入门.md new file mode 100644 index 00000000..2db442dc --- /dev/null +++ b/docs/plan/毕设/一 体积渲染入门.md @@ -0,0 +1,904 @@ +# 一 体积渲染入门 + +**原教程链接:** [https://www.scratchapixel.com/lessons/3d-basic-rendering/volume-rendering-for-developers/intro-volume-rendering.html](https://www.scratchapixel.com/lessons/3d-basic-rendering/volume-rendering-for-developers/intro-volume-rendering.html) + +本课程聚焦于通过**光线步进(ray-marching)技术实现体绘制。虽然该方法未必过时,但现代生产级渲染软件更倾向于使用delta tracking 方法**。不过,光线步进曾长期作为这些软件渲染体积的行业标准,因此将其作为入门学习内容并无不妥。我认为读者可以从此入手,因为它更简单易懂,能帮助大家更好地掌握后续高级方法所依赖的数学基础。 + +体绘制(严格来说,用 “参与介质” 替代 “体积” 这一术语更为准确)是一个与硬表面渲染同样庞大且复杂的领域。它拥有一套独立的方程体系,实际上可以看作是描述光线与固体物质相互作用方程的推广。对于不熟悉复杂数学公式的读者而言,这些内容可能会让人望而生畏。遵循 Scratchapixel 一贯的教学理念,我们采用**“自下而上” 的实践教学法**。也就是说,我们不会从复杂方程入手,而是先编写代码渲染一个简单的**体积球体**,在过程中以直观易懂的方式讲解相关概念,最后在课程末尾对所学内容进行总结和形式化梳理。 + +![](images/2026/02/08/20260208_131118_296.png) + +--- + +# 一、体积渲染 + +## 引言 + +本课程前三章目标是学习如何渲染一个球形体积,该体积由单个光源照射,背景为纯色。这将帮助我们建立对体积的直观认知,并引入用于渲染体积的光线步进算法。在本章中,我们将仅渲染密度均匀的基础体积,暂时忽略物体外部或体积内部投射的阴影,以及密度变化的体积渲染。这些内容将在后续章节中探讨。我们将跳过大量关于体积定义和渲染方程的背景知识,**直接从实践入手**,通过实现过程逐步构建对体绘制的系统性理解。 + +## 内部透射率、吸收、粒子密度与比尔定律 + +当物体反射的光或光源发出的光穿过充满粒子的空间时,其能量会被吸收。体积内的粒子越多,体积就越不透明。基于这一简单观察,我们可以确立体绘制的几个核心概念:**吸收、透射**,以及**体积不透明度**与**内部粒子密度**的关系。本章中,我们假设体积内的粒子密度是均匀的。 + +![](images/2026/02/08/20260208_131118_342.webp) + +当光线穿过体积射向人眼(这正是我们能看到物体成像的原理)时,部分光会被体积吸收,这一现象称为**吸收**。目前我们关注的是背景光穿过体积后的透射量,这一指标被称为**内部透射率**,即光线穿过体积时被吸收后的剩余光量。内部透射率的取值范围为 0 到 1(0 表示体积完全阻挡光线,1 表示在真空环境中光线完全透射)。 + +光线穿过体积的透射量遵循**比尔 - 朗伯定律**(简称比尔定律)。在该定律中,密度的概念通过**吸收系数**(后续章节还会引入散射系数)来体现。本质上,“体积密度越大,吸收系数越高”,而吸收系数越高,体积的不透明度也随之增加。比尔 - 朗伯定律的表达式如下: + +![](images/2026/02/08/20260208_131118_385.webp) + +该定律指出,光线穿过体积的内部透射率($T$)与体积的吸收系数(希腊字母$\sigma$)和**光线在介质中传播的距离(即路径长度)**的乘积呈指数关系。 + +> 注意这里的distance是光线穿过介质的距离! + +由此可得比尔定律的一个性质:**对于分段路径,总透射率等于各段透射率的乘积**。 + +具体来说,如果光线在介质中传播的总距离为 $\text{distance}_2 = \text{distance}_0 + \text{distance}_1$,那么根据比尔定律: + +$$ +T_2 = e^{-\sigma_a \cdot \text{distance}_2} = e^{-\sigma_a \cdot (\text{distance}_0 + \text{distance}_1)} = e^{-\sigma_a \cdot \text{distance}_0} \cdot e^{-\sigma_a \cdot \text{distance}_1} = T_0 \cdot T_1 +$$ + +即总透射率 $T_2$ 等于两段透射率 $T_0$ 和 $T_1$ 的乘积。这体现了光线在介质中传播时,吸收效应具有累积性和可乘性。 + +另外这些系数的单位是**倒数距离**(如$m^{-1}$或$cm^{-1}$),仅涉及尺度差异。理解这一点很重要,因为它能帮助我们直观理解这些系数的物理意义:**吸收系数(以及后续的散射系数)可视为光子在任意位置或距离上发生随机事件(如被吸收或散射)的概率密度。** + +> 注意这里是“概率密度”,后面推导体积渲染方程的时候会再次提到这一点。因为这里实际上是假设了在distance长度的传输距离中吸收系数是恒定的,所以才可以直接用区间长度乘以吸收系数,等到了后面就会发现在非均匀参与介质中这一项实际上是需要积分的。 + +吸收系数和散射系数作为概率密度值,是不限制必须小于1的,这也取决于测量单位。例如,某介质的吸收系数以毫米为单位时可能为0.2,换算为厘米和米则分别为2和20。因此,实际应用中使用大于1的值是完全合理的。 + +> 系数与平均自由程的关系吸收系数和散射系数的单位为倒数距离,这一点至关重要——对系数取倒数(1除以吸收系数或散射系数),即可得到一个距离值,这个距离被称为平均自由程,它代表光子发生随机事件(吸收或散射)的平均传播距离: +> $$ \text{平均自由程} = \frac{1}{\sigma} $$ +> 该值在模拟参与介质中的多重散射时具有重要作用,想了解更多相关内容,可参考次表面散射和高级体绘制课程。 + +![](images/2026/02/08/20260208_131118_565.webp) + +*图1:传播距离越长或密度越大,内部透射率越低。* + +吸收系数或传播距离越大,内部透射率$T$的值越小。比尔-朗伯定律的计算结果始终在0到1之间:当距离或吸收系数为0时,结果为1;当距离或吸收系数极大时,$T$趋近于0。在固定距离下,吸收系数增大,减小;在固定吸收系数下,传播距离增加,$T$同样减小。简言之,光线在体积内传播越远,被吸收的光越多;体积内粒子越多,光被吸收的程度越高。这一规律在图1中得到了直观体现。 + +> 比尔定律与宝石仅存在吸收作用的介质是透明(而非半透明)的,但会使透过的图像变暗,例如啤酒、葡萄酒、宝石和有色玻璃等。 + +## 在纯色背景上渲染体积 + +我们可以从简单场景开始实践。假设有一块厚度为10、密度为0.1的体积板,背景颜色(例如墙面反射的光)为background_color,那么透过体积板看到的背景颜色可通过以下方式计算: + +```hlsl +vec3 background_color {xr, xg, xb}; // 背景颜色 +float sigma_a = 0.1; // 吸收系数 +float distance = 10; // 光线穿过体积的距离 +float T = exp(-distance * sigma_a); // 计算内部透射率 +vec3 background_color_through_volume = T * background_color; // 透过体积的背景色 +``` + +就是这么简单。 + +## 散射 + +到目前为止,我们都假设体积是黑色的,也就是说,我们只是在体积板覆盖的区域将背景色变暗。但体积并非只能是黑色,与固体物体类似,体积也能反射(更准确地说是**散射**)光线。这也是为什么在晴朗的日子里,我们能清晰看到云朵的轮廓,仿佛它是一个固体物体。体积还可以自行发光(例如烛火),这一点我们仅作提及,第一章暂不讨论发光效果。 + +> 反射是 “有规律的定向反弹”,散射是 “无规律的四处散开”,用日常例子就能懂:反射:光线(或声波等)碰到光滑、均匀的表面(比如镜子、平静的水面、抛光的金属),会沿着固定方向 “弹回去”,方向明确、有规律。比如照镜子能看清自己,就是光线反射的结果。散射:光线(或声波等)碰到粗糙表面、微小颗粒(比如墙面、空气分子、灰尘、雾滴),会被拆成无数条 “小光线”,向四面八方无规则散开,没有固定方向。比如天空是蓝色(阳光被空气分子散射)、教室里开灯能照亮整个房间(灯光被墙面 / 灰尘散射),都是散射的效果。 + +假设我们的体积板具有特定颜色**volume_color**,暂时先不深究该颜色的来源,后面会详细解释。我们可以先将其理解为体积物体“反射”(实际并非反射,此处暂以固体物体的反射概念类比)照射光线后呈现的颜色。此时,代码可修改为: + +```cpp +vec3 background_color {xr, xg, xb}; // 背景颜色 +float sigma_a = 0.1; // 吸收系数 +float distance = 10; // 光线穿过体积的距离 +float T = exp(-distance * sigma_a); // 内部透射率 +vec3 volume_color {yr, yg, yb}; // 体积自身颜色 +// 透过体积的最终颜色 = 透射的背景色 + 体积散射的颜色 +vec3 background_color_through_volume = T * background_color + (1 - T) * volume_color; +``` + +这类似于Photoshop等软件中的图像混合(Alpha混合)操作。例如,将图像B叠加到图像A上,其中A是背景图(如蓝色墙面),B是带有透明通道的红色圆盘,混合公式为: + +$$ \text{最终颜色} = \text{透明度} \times A + (1-\text{透明度}) \times B $$ + +此处的“透明度”对应透射率$T$,而B则是体积物体的颜色(即体积散射后射向人眼/相机的光线颜色)。我们将在讲解光线步进算法时再次回顾这一概念,现在请先记住这一混合逻辑。 + +## 渲染第一个体积球体 + +利用上述知识,我们可以渲染出第一幅三维图像。我们将渲染一个充满粒子的球形体积,并将其置于背景之上。原理非常简单:首先检测相机光线与球体是否相交。若不相交,则直接返回背景色;若相交,则计算光线进入和离开球体表面的交点,进而求出光线穿过球体的距离,再应用比尔定律计算光线透过球体后的透射量。这里我们暂时假设球体“反射”(散射)的光是均匀的,光照效果将在后续内容中探讨。 + +![](images/2026/02/08/20260208_131118_782.webp) + +*图2:穿过体积物体的相机光线* + +![](images/2026/02/08/20260208_131118_926.webp) + +*图3:利用相机光线与体积物体的交点,计算光线沿路径上体积的不透明度* + +**实现细节** +从技术上讲,我们无需计算光线进出球体的具体交点,只需用光线与球体相交的参数距离(沿相机光线的参数化距离)相减即可得到穿过距离。以下示例中我们仍计算交点,是为了强调我们关注的是这两个点之间的距离。 + +```cpp +class Sphere : public Object { +public: + // 计算光线与球体的交点 + bool intersect(vec3 ray_origin, vec3 ray_direction, float &t0, float &t1) const { + // 光线与球体相交检测的具体实现 + } + float sigma_a{ 0.1 }; // 吸收系数 + vec3 scatter{ 0.8, 0.1, 0.5 }; // 散射颜色 + vec3 center{ 0, 0, -4 }; // 球体中心坐标 + float radius{ 1 }; // 球体半径 +}; + +// 光线追踪场景 +vec3 traceScene(vec3 ray_origin, vec3 ray_direction, const Sphere *sphere) { + float t0, t1; + vec3 background_color { 0.572, 0.772, 0.921 }; // 背景色(浅蓝色) + if (sphere->intersect(ray_origin, ray_direction, t0, t1)) { + vec3 p1 = ray_origin + ray_direction * t0; // 光线进入球体的点 + vec3 p2 = ray_origin + ray_direction * t1; // 光线离开球体的点 + float distance = (p2 - p1).length(); + // 光线穿过球体的距离(也可直接用t1 - t0计算) + float transmission = exp(-distance * sphere->sigma_a); // 计算透射率 + // 最终颜色 = 透射的背景色 + 球体散射的颜色 + return background_color * transmission + sphere->scatter * (1 - transmission); + } + else { + return background_color; // 无交点时返回背景色 + } +} + +// 渲染图像 +void renderImage() { + Sphere *sphere = new Sphere; + // 遍历图像的每一行和每一列 + for (int y = 0; y < image_height; ++y) { + for (int x = 0; x < image_width; ++x) { + vec3 ray_dir = computeRay(x, y); // 计算当前像素对应的光线方向 + vec3 pixel_color = traceScene(ray_origin, ray_dir, sphere); // 追踪光线获取像素颜色 + image_buffer[y * image_width + x] = pixel_color; // 将颜色存入图像缓冲区 + } + } + saveImage(image_buffer); // 保存图像 + // 其他清理工作... +} +``` + +![](images/2026/02/08/20260208_131119_130.webp) + +很明显,随着密度(吸收系数$\sigma_a$)的增加,透射率逐渐趋近于0,这意味着体积球体的颜色将逐渐盖过背景色。 +从渲染结果可以看出,球体中心区域的不透明度更高,因为光线穿过该区域的距离最长;同时,随着吸收系数$\sigma_a$增大,整个球体的不透明度都会提升。太棒了!你已经成功渲染出第一个体积球体,距离成为体绘制专家又近了一步。 + +## 添加光照!内散射 + +目前我们已经得到了体积球体的基础渲染效果,但光照效果该如何实现呢?当光线照射到体积物体上时,直接暴露在光线下的部分会比阴影区域更亮。与固体物体一样,体积也会被光源照亮,我们该如何在渲染中体现这一点? + +原理其实很简单。想象光源发出的光线穿过体积时,其强度会因吸收而衰减,而衰减程度同样遵循比尔定律。换句话说,若已知光线在体积内传播的距离,就能计算出该距离处的光线强度: + +```cpp +float light_intensity = 10; // 光源强度(任意数值) +// 光线在体积内传播的距离乘以吸收系数,计算透射率 +float T = exp(-distance_travelled_by_light * volume->absorption_coefficient); +float light_intensity_attenuation = T * light_intensity; // 衰减后的光线强度 +``` + +正如我们之前所学,光线在体积内传播时,能量会按照比尔定律逐渐衰减,这一点不难理解。但除此之外,光线沿初始方向传播时,除了被吸收,部分光线还会被散射到其他方向。如果散射方向恰好与人眼观察方向相反,那么这部分光线就会进入人眼或相机传感器。这一过程与光线从固体表面反射类似,但存在一些有趣的差异。 + +由于云朵并非固体物体,光线照射到粒子上时会发生两种情况: + +* 被吸收; +* 被散射。对于体积,我们通常用“散射”而非“反射”来描述这一过程。 + +如果光线没有击中体积内的粒子,自然会沿原方向继续传播。我们暂时无需关注光线被吸收和被散射的概率,目前需要重点关注的是:如果光线被散射到与人眼观察方向相反的方向,那么即使光源发出的初始光线并非朝向人眼,这部分散射光最终仍能进入人眼。这种现象被称为**内散射**,指的是**穿过体积的光线因散射事件而被重新定向至人眼方向的效果**。 + +图4展示了这一过程:散射事件是光子与介质/体积中的粒子或原子相互作用的结果。原子不会吸收光子,而是将其“弹射”到与入射方向不同的方向(如果体积由水或烟雾等原子构成);或者,若烟雾中含有灰尘、煤烟、海盐等微小固体粒子,光线会从这些粒子表面反射(本质也是散射)。后续章节将深入探讨这一现象。 + +![](images/2026/02/08/20260208_131119_367.webp) + +*图4:透过体积物体看到的光线,既来自背景物体(图中蓝色部分),也来自光源。尽管光源发出的初始光线并非射向人眼,但部分光线在穿过体积物体时会因内散射效应被重新定向至人眼。* + +观察图4可以发现,进入人眼的光线(图中蓝色相机光线)由两部分组成:一部分是来自背景的光线,另一部分是光源发出后经内散射射向人眼的光线(图中黄色光线)。 + +体积的外观(即从特定视角观察到的体积形态)是光线吸收与散射共同作用的结果——这里的光线既包括沿视线方向直接穿过体积的背景光,也包括场景中各方向光源照射体积的光线。因此,要生成逼真的云朵图像,必须同时考虑这两种效应。我们已经探讨了吸收现象,接下来需要研究如何在内渲染中加入内散射效果。 + +我们的目标是找到一种方法,测量因内散射效应而沿相机光线射向人眼的光量。但问题在于:**内散射可能发生在光线进出球体的两个交点($t_0$和$t_1$)之间的任意位置,这并非一个离散过程**(即光线粒子不会只在该线段的特定位置发生散射),而是沿整个线段持续发生的吸收与散射现象。那么,我们该如何测量沿一段距离内持续入射的光能呢? + +在探讨解决方案之前,我们先统一**符号定义:用$L_s(\omega)$表示沿人眼方向(用希腊字母$\omega$表示)散射的光量,其单位为**辐射度**,其中$x$代表线段$t_0$到$t_1$上的任意一点。 + +![](images/2026/02/08/20260208_131119_566.webp) + +*图5:需要对相机光线穿过体积物体的线段上,所有因内散射重新定向至人眼的光线进行积分计算。* + +在物理学中,当需要表示沿某段距离或某个体积的能量流入时,我们通常使用**积分**来描述。换句话说,我们需要对函数$L_s(\omega)$在区间$t_0$到$t_1$上进行积分,所得结果即为我们要测量的总散射光量。如果你对积分概念不太熟悉,可以将其理解为“收集沿方向$\omega$的光线在参数距离$t_0$到$t_1$之间的所有散射光能”。若这些量是离散的,我们只需求和即可;但对于$L_s(\omega)$这类连续函数,就需要用积分来表达这一思想。该积分的数学表达式如下: + +![](images/2026/02/08/20260208_131119_751.webp) + +问题在于,我们需要计算的这个积分没有解析解。对于球体等简单形状和简单光照场景,或许存在解析解,但我们需要的是一种适用于任意体积形状(包括后续将介绍的非均匀密度体积)和任意光照场景的通用解决方案,因此解析解并非可行路径。那我们该怎么办? + +我们可以采用实验物理学和计算机图形学(至少在影视或游戏图像制作中,计算结果无需达到科研级精度)中常用的方法——用**黎曼和**来近似计算这个积分。 + +黎曼和的思想很简单:我们可以将曲线下方的面积分解为多个已知面积的简单图形(如矩形,见图7)。通过在曲线上按固定间隔(间隔宽度为$\Delta t$)采样$L_s(\omega)$的值,每个矩形的面积即可表示为采样值$L_s(\omega)$乘以间隔宽度$\Delta t$(采样点取间隔中点)。将所有矩形的面积求和,就能得到曲线下方面积的近似值(如图7所示)。需要注意的是,这一结果并非精确的曲线下方面积,而是一个近似值,从图中可以直观看出误差的存在。不难理解,矩形的宽度$\Delta t$越小,近似结果就越接近真实面积,但同时计算耗时也会增加。 + +![](images/2026/02/08/20260208_131119_976.webp) + +*图6:沿光线按固定步长推进,用黎曼和近似计算积分。* + +![](images/2026/02/08/20260208_131120_212.webp) + +*图7:可以用黎曼和估算代表相机光线散射光量的曲线下方面积。核心思路是将曲线下的面积分解为多个小矩形,每个矩形的高度为采样点的$L_s(\omega)$值,宽度为用户定义的步长$\Delta t$。* + +将这一方法应用到体绘制中,具体该如何操作?后面我们将详细讲解,但可以先简单剧透一下:本质上,我们需要将相机光线穿过球体的线段,分割为多个长度为$\Delta t$的子线段;对于每个子线段,计算函数$L_s(\omega)$的值,具体步骤包括(见图5): + +* 从子线段**中点**$p$向光源方向发射一条光线,确定光线离开体积物体的位置,从而计算出光线从光源传播到点$p$时穿过体积的距离; +* 利用该距离,通过比尔定律计算光线传播至点$p$时**剩余的能量**; +* 将计算得到的$L_s(\omega)$乘以步长$\Delta t$,并累加所有子线段的贡献值,即可得到近似的积分结果。 + +不过,细心的读者可能会发现两个我们尚未解答的问题: + +* 我们现在已经知道了从光源传播到采样点$p$的光量,但这并不能告诉我们其中有多少比例的光会最终沿$\omega$方向散射。说得没错,你还没有完全理解$L_s(\omega)$的完整含义。换句话说,我们已经考虑了光的传播衰减,但尚未用到$\omega$变量——正如你所想,它在计算散射比例时起着关键作用。(剧透:这个问题是通过后面介绍的“相位函数解决”的) +* 沿$\omega$方向散射的光线,从点$p$传播到$t_0$(光线进入球体的点)的过程中,难道不会被再次吸收吗?也就是说,既然$p$位于体积内部,光线仍需在体积内传播一段距离才能离开并进入人眼,那么这段传播过程中光线应该也会被吸收。确实如此! + +如果你能意识到这两个问题,那恭喜你,也说明我们的教学起到了效果。这意味着你已经准备好进入下一章,我们将在那里详细解答这两个问题。 + +--- + +# 二、光线步进算法 + +## 万能的光线步进算法 + +为了对沿光线传播路径、由内散射产生的入射光进行积分计算,我们需要将光线穿过的体积分解为多个小体积元,然后汇总每个小体积元对整个体积物体的贡献——这有点类似于在二维图像编辑软件(如Photoshop)中,将带有蒙版或Alpha通道(通常表示物体不透明度)的图像相互叠加。这也是我们在第一章中讨论Alpha合成方法的原因。每个小体积元都对应第一章中提到的黎曼和中的一个采样点。 + +![](images/2026/02/08/20260208_131120_416.webp) + +*图1:反向光线步进。沿光线从t1向t0方向,以固定的小步长推进。* + +算法的工作流程如下: + +* 计算t0和t1的值,即相机/人眼光线进入和离开体积物体的交点对应的参数距离。 +* 将t0-t1定义的线段分割为X个大小相同的小线段。通常,我们通过选择“步长”来实现这一点——步长就是一个定义小线段长度的浮点数。例如,若t0=2.5、t1=8.3,步长=0.25,则将t0-t1线段分割为(8.3-2.5)/0.25=23个小线段(为简化理解,暂不考虑小数细节)。 +* 接下来,沿相机光线推进X次,可从t0或t1开始(见第6点)。 + +![](images/2026/02/08/20260208_131120_609.webp) + +*图2:计算Li(x)需要向光源方向发射一条光线,以确定光束到达采样点需穿过体积的距离。* + +5. 每推进一步,从该步的**中点(即采样点)向光源发射一条“光线”,计算这条光线与体积元的交点(离开体积的位置)。需注意,光源发出的光线在传播到采样点的过程中会被体积吸收,因此利用**比尔定律计算该采样点因内散射产生的贡献。这就是上一章提到的黎曼和中的Li(x)值。别忘了,我们需要将这个值乘以步长(对应黎曼和中的dx项,即矩形的宽度)。伪代码如下: + +```hlsl +// 计算当前采样点x的Li(x) +float lgt_t0, lgt_t1; // 光线与球体交点的参数距离 +volumeSphere->intersect(x, lgt_dir, t0, lgt_t1); // 计算光线与球体的交点 +color Li_x = exp(-lgt_t1 * sigma_a) * light_color * step_size; // step_size即我们的dx +... +``` + +如图2所示,光线与球体交点检测中的t0应始终为0(因为光线从球内部发出),而t1是从采样点x到光线与球体交点的参数距离。因此,我们可将该值代入比尔定律,计算光线在体积物体中传播过程中被吸收的距离对应的衰减量。 + +6. 当然,在图一中,穿过小体积元(采样点)的光线也会被该体积元衰减。因此,我们以**步长**作为光束穿过该体积元的距离,利用比尔定律计算采样点的透射率,再用该透射率对(内散射产生的)光量进行衰减(相乘)。 + +7. 最后,我们需要汇总所有采样点的贡献,以得到体积物体的整体不透明度和“颜色”。实际上,若从后往前考虑这一过程(如图1所示),第一个采样点(从t1开始)会被第二个采样点遮挡,第二个又会被第三个遮挡,依此类推,直到最后一个采样点(紧邻t0)。从相机光线的视角看,紧邻t1的采样点会被其前方所有采样点遮挡;紧邻t0的采样点的下一个采样点,会被这个紧邻t0的采样点遮挡,以此类推。 + +“光线步进”的名称如今就很容易理解了:我们沿光线推进,以固定的小步长移动(如图1所示,为反向光线步进的示例)。需注意,光线步进算法并非必须使用固定步长,也可采用非固定步长,但为简化理解,我们先使用固定步长(Ken Musgrave称之为“跨度”)。使用固定步长时,我们称之为“均匀光线步进”(区别于“**自适应光线步进”**)。 + +汇总采样点的方式有两种:反向(从t1到t0推进)或正向(从t0到t1推进)。其中一种方式相对更有优势(某种程度上)。下面我们将分别说明它们的工作原理。 + +## 反向光线步进 + +反向光线步进中,我们沿光线**从后往前推进,即从t1到t0**。这会改变我们汇总采样点以计算最终像素不透明度和颜色的方式。 + +很自然地,由于我们从体积物体的背面(球体的后半部分)开始,理论上可以将像素颜色(相机光线对应的最终颜色)初始化为背景色(浅蓝色)。但在我们的实现中,会在整个计算过程结束后(得到体积物体的颜色和不透明度后)再将两者混合——这类似于在二维编辑软件中合成两张图像。 + +我们从t1开始,计算体积中第一个采样点(设为X0)的贡献,然后以固定步长向t0推进,依次计算后续采样点的贡献。 + +![](images/2026/02/08/20260208_131120_859.webp) + +*图3:计算一个采样点时,需要考虑来自背面的背景光和来自光源的内散射光,再考虑小体积元对这些光贡献的吸收。这可以理解为背景色与光源色分别乘以小体积元透明度后相加。* + +那么,一个采样点的贡献如何计算? + +我们先按照上述第6点的方法计算内散射贡献(光源的贡献)Li(X0):向光源方向发射一条光线,然后利用比尔定律衰减光贡献,以考虑光线从进入体积物体(球体)到采样点X0的过程中被吸收的量。 + +之后,将这个光量乘以采样点的透明度(代表该采样点吸收光的比例)。采样点的透明度同样通过比尔定律计算,步长即为光束穿过该采样点的距离(图3)。 + +```cpp +... +color Li_x0 = exp(-lgt_t1 * sigma_a) * light_color * step_size; // step_size即我们的dx +color x0_contrib = Li_x0 * exp(-step_size * sigma_a); +... +``` + +我们已经计算出了第一个采样点X0的贡献。接下来处理第二个采样点X1,但此时需要考虑两个光源:第一个采样点X0发出的光(即上一步的计算结果),以及第二个采样点X1的内散射光。前者已计算完成,后者的计算方法与X0一致。我们将两者相加,再乘以第二个采样点的透射率,得到新的结果。重复这一过程处理X2、X3……直至到达t0。最终结果即为体积物体对当前相机光线对应像素颜色的贡献。这一过程如下所示。 + +![](images/2026/02/08/20260208_131121_079.webp) + +从上图可以看出,我们需要计算两个值:体积的**整体颜色**(存储在result中)和**整体透明度**。我们将整体透明度初始化为1(完全透明),然后在沿光线推进的过程中,用每个采样点的透明度对其进行衰减(相乘)。最后,**利用这个整体透明度将体积物体与背景色混合**,公式如下: + +```cpp +color final = background_color * transmission + result; +``` + +在合成术语中,“result”项已预先乘以了体积的整体透明度。若你对此感到困惑,我们将在下一章详细说明,目前无需过度关注。 + +另需注意,上图和下方代码中,采样点的衰减项始终相同:exp(-step_size * sigma_a)。显然,这样的实现不够高效——我们应计算一次该值并存储在变量中重复使用。但我们的目标是清晰易懂,而非编写高性能代码。此外,目前沿光线推进过程中该值是恒定的,但在下一章中我们会发现,不同采样点的衰减项可能不同。 + +对应的代码实现如下: + +```cpp +constexpr vec3 background_color{ 0.572f, 0.772f, 0.921f }; + +vec3 integrate(const vec3& ray_orig, const vec3& ray_dir, ...) { + const Object* hit_object = nullptr; + IsectData isect; + for (const auto& object : objects) { + IsectData isect_object; + if (object->intersect(ray_orig, ray_dir, isectObject)) { + hit_object = object.get(); + isect = isect_object; + } + } + + if (!hit_object) + return background_color; + + float step_size = 0.2; + float sigma_a = 0.1; // 吸收系数 + int ns = std::ceil((isect.t1 - isect.t0) / step_size); + step_size = (isect.t1 - isect.t0) / ns; + + vec3 light_dir{ 0, 1, 0 }; + vec3 light_color{ 1.3, 0.3, 0.9 }; + + float transparency = 1; // 初始化透明度为1 + vec3 result{ 0 }; // 初始化体积颜色为0 + + for (int n = 0; n < ns; ++n) { + float t = isect.t1 - step_size * (n + 0.5); + vec3 sample_pos= ray_orig + t * ray_dir; // 采样点位置(步长中点) + + // 使用比尔定律计算采样点透明度 + float sample_transparency = exp(-step_size * sigma_a); + // 用采样点透明度衰减全局透明度 + transparency *= sample_transparency; + + // 内散射:计算光线从光源传播到采样点穿过体积的距离,再应用比尔定律 + IsectData isect_vol; + if (hitObject->intersect(sample_pos, light_dir, isect_vol) && isect_vol.inside) { + float light_attenuation = exp(-isect_vol.t1 * sigma_a); + result += light_color * light_attenuation * step_size; + } + + // 最终用采样点透明度衰减结果 + result *= sample_transparency; + } + + // 与背景色混合并返回 + return background_color * transparency + result; +} +``` + +但请注意,这段代码尚未完全准确——它缺少一些我们将在下一章补充的项。目前,我们仅希望你理解光线步进的核心原理。即便如此,这段代码仍能生成具有说服力的图像。 + +![](images/2026/02/08/20260208_131121_318.webp) + +本例中,我们使用了一个沿y轴向上的顶视平行光,球体的淡红色来自光源颜色。可以看到,球体上半部分比下半部分更亮,阴影效果已初步显现。 + +$$ +\begin{array}{l} A &=& Li(X_0) * \color{red}{Att};\text{ // first iteration n = 0} \\ B &=& (A + Li(X_1)) * Att; \text{ // second iteration n = 1}\\ B &=& (Li(X_0) * Att + Li(X_1)) * Att;\\ B &=& (Li(X_0) * \color{red}{Att^2} + Li(X_1) * Att;\\ C &=& (B + Li(X_2)) * Att;\text{ // third iteration n = 2}\\ C &=& (Li(X_0) * Att^2 + Li(X_1) * Att + Li(X_2)) * Att;\\ C &=& (Li(X_0) * \color{red}{Att^3} + Li(X_1) * Att^2 + Li(X_2) * Att;\\ ... \end{array} +$$ + +观察循环过程中Li(X0)的变化可以发现,它会被采样点衰减项的若干次方相乘。沿光线推进的步数越多,指数越大(从1到2再到3……),结果就越小(因为衰减项或采样点透明度小于1)。换句话说,第一个采样点对体积整体散射光的贡献会随着采样点的累积而逐渐减小。 + +## 正向光线步进 + +![](images/2026/02/08/20260208_131121_557.webp) + +*图4:正向光线步进。沿光线从t0向t1方向,以固定的小步长推进。* + +在计算Li(x)和采样点透射率方面,正向光线步进与反向光线步进并无区别。两者的差异在于采样点的汇总方式——正向光线步进沿t0到t1方向(从前到后)推进。此时,一个采样点的散射光贡献需要被当前已处理的所有采样点(包括当前采样点)的整体透射率(透明度)衰减:Li(X1)会被采样点X0和X1的透射率衰减,Li(X2)会被采样点X0、X1和X2的透射率衰减,以此类推。算法描述如下: + +步骤1:进入光线步进循环前,初始化整体透射率(透明度)为1,结果颜色变量(存储当前相机光线对应的体积物体颜色)为0:`float transmission = 1; color result = 0;` + +步骤2:光线步进循环的每次迭代: + +* 计算当前采样点的内散射光Li(x); +* 将整体透射率乘以当前采样点的透射率,更新整体透射率:`transmission *= sample_transmission;` +* 将Li(x)乘以整体透射率(当前已处理的所有采样点会遮挡该采样点的散射光),并将结果累加到存储体积颜色的全局变量中:`result += Li(x) * transmission;` + +对应的代码实现如下: + +```cpp +... +vec3 integrate(const vec3& ray_orig, const vec3& ray_dir, ...) { + ... + float transparency = 1; // 初始化透明度为1 + vec3 result{ 0 }; // 初始化体积颜色为0 + + for (int n = 0; n < ns; ++n) { + float t = isect.t0 + step_size * (n + 0.5); //关键区别 + vec3 sample_pos = ray_orig + t * ray_dir; + + // 当前采样点的透明度 + float sample_attenuation = exp(-step_size * sigma_a); + + // 用当前采样点的透射率衰减体积物体的整体透明度 + transparency *= sample_attenuation; + + // 内散射:计算光线从光源传播到采样点穿过体积的距离,再应用比尔定律 + if (hit_object->intersect(sample_pos, light_dir, isect_vol) && isect_vol.inside) { + float light_attenuation = exp(-isect_vol.t1 * sigma_a); + // 用累积的整体透射率衰减内散射贡献 + result += transparency * light_color * light_attenuation * step_size; + } + } + + // 混合背景色和体积物体颜色 + return background_color * transparency + result; +} +``` + +但请注意,这段代码尚未完全准确——它缺少一些我们将在下一章补充的项。目前,我们仅希望你理解光线步进的核心原理。即便如此,这段代码仍能生成具有说服力的图像。 + +此处无需展示图像——若实现正确,反向和正向光线步进应得到相同的结果。当然,我们知道你可能不会轻易相信,因此以下是两种方法的渲染结果。 + +![](images/2026/02/08/20260208_131121_801.webp) + +## 为什么正向光线步进比反向光线步进“更好”? + +因为当体积的透明度非常接近0时(当体积足够大或散射系数足够高时可能出现这种情况),我们可以**停止**光线步进——而这只有在正向推进时才可行。 + +目前,渲染我们的体积球体速度较快,但随着章节推进,你会发现渲染速度会逐渐变慢。因此,若我们能在沿光线推进过程中,当体积变得完全不透明、后续采样点不再对像素颜色产生贡献时停止计算,这将是一项有效的优化。 + +我们将在下一章实现这一优化思路。 + +## 步长的选择 + +![](images/2026/02/08/20260208_131122_008.webp) + +*图5:由于步长过大,我们无法捕捉到体积中的细节。当然,这个例子比较极端,旨在帮助你理解核心思想。* + +![](images/2026/02/08/20260208_131122_279.webp) + +*图6:这个例子也很极端(2个采样点可能永远无法正确渲染体积物体的光照),但可以看出,由于步长过大,我们无法捕捉到被固体物体遮挡的体积部分。我们需要小得多的步长。* + +请记住,我们沿光线从t0到t1以小步长推进、执行光线步进的目的,是利用黎曼和方法近似计算积分(沿相机光线向人眼散射的内散射光量)。正如上一章和《着色的数学原理》课程中所解释的,用于近似积分的矩形越大(此处矩形宽度由步长定义),近似精度越低;反之,矩形越小(步长越小),近似精度越高,但计算耗时也会增加。目前,渲染体积球体的速度较快,但随着课程推进,你会发现渲染速度会变得非常慢。因此,**步长的选择是速度与精度之间的权衡**。 + +目前,我们假设体积密度是均匀的。在下一章中,我们将学习渲染云、烟雾等密度随空间变化的体积。这类体积既包含低频特征,也包含高频细节。若步长过大,可能无法捕捉到部分高频细节(图5)。这属于**滤波**问题,是一个重要但复杂的独立主题。 + +步长选择不当还可能引发另一个问题:阴影。若小型固体物体在体积物体上投射阴影,步长过大会导致我们错过这些阴影(图6)。 + +以上内容并未告诉我们如何选择合适的步长。理论上,没有固定的规则——你需要大致了解体积物体的尺寸。例如,若体积是充满某种均匀介质的房间,你需要知道房间的大小(以及所使用的单位,比如1单位=10厘米)。因此,若房间尺寸为100单位,步长0.1可能过小,而1或2可能是一个合适的起点。之后,如前所述,你需要通过调整找到速度与精度的最佳平衡点。 + +但这并非绝对。除了根据场景中物体的大小凭经验选择步长外,还有更合理的方法。一种可行的方法是:计算相机光线进入体积处的像素投影尺寸,将步长设置为该投影尺寸。实际上,作为离散单元的像素,无法呈现比自身尺寸更小的场景细节。我们在此不展开详细讨论(滤波值得单独开设一门课程),目前只需记住:合适的步长应接近相机光线与体积交点处的像素投影尺寸。这可以通过以下公式估算: + +```cpp +float projPixWidth = 2 * tanf(M_PI / 180 * fov / (2 * imageWidth)) * tmin; +``` + +你可以根据需要优化该公式,其中tmin是相机光线与体积物体交点的距离。类似地,你也可以计算光线离开体积处的像素投影宽度,然后在tmin和tmax处的投影宽度之间进行线性插值,以设置沿光线推进过程中的步长。 + +## 继续前进前的其他注意事项! + +编写生产级代码时,需要将光线的不透明度和颜色与光线数据一起存储。这样,我们可以先对固体物体执行光线追踪,再对体积物体执行光线步进,并在过程中汇总结果(类似于我们在示例中将背景色与体积球体混合的方式)。 + +请注意,相机光线的传播路径上可能存在多个体积物体。因此,需要沿路径存储不透明度,并在光线步进过程中汇总连续体积物体的不透明度和颜色。 + +一个体积物体可能由多个相互重叠的物体(如立方体、球体)组合而成。在这种情况下,我们可能需要将它们组合成某种聚合结构。对这类聚合体执行光线步进时,需要特别注意计算构成聚合体的各个物体的交界面。 + +## 接下来:补充缺失的项,得到物理准确的结果 + +在本课程的第三章(下一章)中,我们将为当前实现补充缺失的项,以得到(更)符合物理规律的结果。我们还将向你展示,掌握这些知识后,你将能够阅读和理解其他人编写的渲染器代码。准备好了吗? + +## 源代码 + +重现前两章图像的源代码(含嵌入在文件中的编译说明)可在课程的最后一章下载(与往常一样)。请注意,该代码与本章展示的代码片段略有不同,差异将在下一章中解释。 + +--- + +# 三、光线步进:精准实现! + +## 内散射与外散射 + +在前几章中,我们只考虑了光束与介质粒子之间的两种相互作用:吸收和内散射。但要得到准确的结果,我们需要考虑四种相互作用。这些相互作用可分为两类:一类会削弱光束穿过介质到达人眼过程中的能量,另一类则会增加光束的能量。 + +光束穿过介质到达人眼时,能量会因以下两种作用而损失: + +* **吸收(Absorption)**:部分光能被介质粒子吸收。若你是这个粒子,可以这样理解:“有一些光线正朝着你(观察者)传播,但很抱歉,我吸收了一部分,所以你接收到的光会减少。” + +* **外散射(Out-Scattering)**:正如上一章所提及的,光线会被粒子散射。这会使原本不朝向人眼传播的光线被重新定向到人眼方向,这就是我们上一章讨论的内散射效应。**但原本朝向人眼传播的光线,在传播过程中也可能被散射到其他方向——这意味着光线的能量也会因此损失,这种现象被称为外散射(顾名思义)。**若你是这个粒子,可以这样理解:“有一些光线正朝着你(观察者)传播,但我把一部分散射到了随机方向,所以你接收到的光会减少。” + +光束穿过介质到达人眼时,能量会因以下两种作用而增加: + +* **发射(Emission)**:我们在第一章中提到过这种效应,但也说明暂时会忽略它。例如,火焰会发出炽热的光。 + +* **内散射(In-Scattering)**:我们对这种效应已经很熟悉了。**部分原本不朝向人眼传播的光线,会通过散射被重新定向到人眼方向,这种效应即为内散射。**若你是这个粒子,可以这样理解:“我收集了从各个方向射向我的光线,并将一部分朝着你(观察者)的方向发射出去,所以你会接收到一些原本不打算朝向你的光线。” 内散射可以看作是外散射的结果——光线会(或多或少地,后续介绍相位函数时会详细说明)向所有方向散射,而其中一个方向恰好是人眼观察方向(相机光线方向)。 + +这些效应如下图所示。 + +![](images/2026/02/08/20260208_131122_481.webp) + +在计算光束穿过介质到达人眼过程中的**能量损失**时,我们必须同时考虑**吸收**和**外散射**。外散射和内散射均由同一类光-粒子相互作用(散射)引起——在上一章中,我们用变量$\sigma$(希腊字母西格玛)来定义散射。因此,由于散射($\sigma$)也是导致光束穿过介质到达人眼时能量损失的原因,我们需要将其与吸收系数$\sigma_a$一起纳入比尔定律方程中。请记住,该方程既用于计算$Li(x)$项,也用于计算采样点的透射率。因此,我们的代码需要修改如下(红色部分为修改内容): + +```cpp +... +float sigma_a = 0.5; // 吸收系数 +float sigma_s = 0.5; // 散射系数 +// 计算采样点透射率 +float sample_attenuation = exp(-step_size * (sigma_a + sigma_s)); +transparency *= sample_attenuation; + +// 内散射:计算光线穿过体积球体到达采样点的距离 +// 然后使用比尔定律衰减内散射产生的光贡献 +if (hit_object->intersect(sample_pos, light_dir, isect_vol) && isect_vol.inside) { + float light_attenuation = exp(-density * isect_vol.t1 * (sigma_a + sigma_s)); + result += ...; +} +... +``` + +有时你会看到$\sigma_a$和$\sigma_s$的和被称为消光系数(extinction coefficient),通常用$\sigma_t$(西格玛t)表示。 +$$ \sigma_t = \sigma_a + \sigma_s $$ + +这个消光系数同样可以用概率密度来解释,它可以理解为光子沿其路径传播时,**在单位长度内发生任何相互作用(无论是被吸收还是被散射)的概率密度**。它代表了光子“消失”(吸收)或“偏离”(外散射)其原始路径的总概率。例如,$\sigma_{t}= 0.5 m^{-1}$意味着光子平均每传播 2 米(1 / 0.5)就会发生一次吸收或外散射。 + +这个时候再来理解比尔定律,会发现实际上比尔定律描述的是透射率,它可以用泊松分布来建模。 + +![](images/2026/02/08/20260208_131122_704.webp) + +![](images/2026/02/08/20260208_131122_902.webp) + +满足: + +> 独立性:事件发生的概率不受之前发生过的事件影响(比如 “上一分钟没接到电话”,不影响 “这一分钟接到电话” 的概率);平稳性:单位时间 / 空间内事件发生的平均概率是固定的(比如每天医院急诊人数的平均值稳定,不会突然翻倍);稀有性:在极短时间 / 极小空间内,事件发生 2 次及以上的概率几乎为 0(比如同一瞬间接到两个电话的概率可忽略)。 + +此时**透射率**$T$也就是对于**每个粒子**,在distance的传输距离中一次都未发生吸收或散射的概率,是泊松分布中的**零事件概率**。而前面代码中的**step_size * (sigma_a + sigma_s)是可以近似看作是每个粒子在step_size距离内发生“消失”或“偏离”的概率,由于这里是“单个粒子”,因此也可以看作是该粒子在step_size距离内发生“消失”或“偏离”的**期望值。 +而**exp(-期望)** :这正是**泊松分布中的零事件概率**,即光子“幸存”下来,没有发生任何吸收或散射事件的概率,即下面公式中$P(X=0)=e^{-\lambda}$。 + +关于散射项,我们还没有完全讨论完……**内散射产生的、朝向人眼的光量也与散射项成正比。因此,我们还需要将内散射的光贡献乘以$\sigma_s$变量**。代码修改如下(红色部分为修改内容): + +```cpp +... +float sigma_a = 0.5; // 吸收系数 +float sigma_s = 0.5; // 散射系数 +// 计算采样点透射率 +float sample_attenuation = exp(-step_size * (sigma_a + sigma_s)); +transparency *= sample_attenuation; + +// 内散射:计算光线穿过体积球体到达采样点的距离 +// 然后使用比尔定律衰减内散射产生的光贡献 +if (hit_object->intersect(sample_pos, light_dir, isect_vol) && isect_vol.inside) { + float light_attenuation = exp(-isect_vol.t1 * (sigma_a + sigma_s)); + result += transparency * light_color * light_attenuation * sigma_s * step_size; +} +... +``` + +详细的数学解释我们会在加入了相位函数之后说明,这里暂时把sigma_s粗略地当成一依据概率的缩放因子即可。 + +## 密度项 + +我们将在下一章详细讨论这个术语。 +到目前为止,我们假设用于控制体积“不透明度”的散射系数和吸收系数(请记住,这些系数的值越高,体积越不透明)在整个体积内是均匀的。在学术文献中,这通常被称为**均匀参与介质(homogenous participating medium)**。但现实世界中的“体积”(如云层、烟雾羽流)通常并非如此,它们的不透明度会随空间变化,这类介质被称为**非均匀参与介质(heterogeneous participating medium)**。 + +我们将在下一章中学习如何模拟密度变化的体积物体,但目前,我们先引入一个全局缩放散射系数和吸收系数的变量,称之为密度(density)。我们将用它来缩放$\sigma_a$和$\sigma_s$,修改如下(红色部分为修改内容): + +```cpp +... +float sigma_a = 0.5; // 吸收系数 +float sigma_s = 0.5; // 散射系数 +float density = 1; // 密度 +// 计算采样点透射率 +float sample_attenuation = exp(-step_size * density * (sigma_a + sigma_s)); +transparency *= sample_attenuation; + +// 内散射:计算光线穿过体积球体到达采样点的距离 +// 然后使用比尔定律衰减内散射产生的光贡献 +if (hit_object->intersect(sample_pos, light_dir, isect_vol) && isect_vol.inside) { + float light_attenuation = exp(-density * isect_vol.t1 * (sigma_a + sigma_s)); + result += transparency * light_color * light_attenuation * sigma_s * density * step_size; +} +... +``` + +请记住,$\sigma_s$在代码中被使用了两次。我们将在下一章中解释如何实现空间变化的密度。 + +现在,请注意一个有趣的点:当密度为0时,不会向result变量中添加任何值。换句话说,在没有体积的区域(空空间或密度=0),不应该有任何光的累积。这对于以下代码行至关重要: + +```cpp +// 与背景色混合并返回 +return background_color* transparency + result; +``` + +如果在没有体积的区域,result的值不为0(例如,我们在计算内散射时忘记将散射项乘以密度值),那么我们会在不应该出现光的区域看到光(result>0)。这就是上一章中我们提到result已经“预先乘以(不透明度)”的原因——它已经乘以了自身的“不透明度蒙版”:在密度/不透明度大于0的区域,result大于0;否则为0。 + +## 相位函数 + +还记得第一章结尾我们留下的一个问题吗? + +> 我们现在已经知道了从光源传播到采样点p 的光量,但这并不能告诉我们其中有多少比例的光会最终沿$\omega$ 方向散射。说得没错,你还没有完全理解$L_s(\omega)$ 的完整含义。换句话说,我们已经考虑了光的传播衰减,但尚未用到$\omega$ 变量——正如你所想,它在计算散射比例时起着关键作用。 + +相位函数就是用来解决这个问题的,它在变量的基础上又多考虑了$\omega$。 +**内散射**贡献应使用以下方程计算: + +![](images/2026/02/08/20260208_131123_151.webp) + +其中,$Li$是内散射(辐射度)贡献,$x$是采样点位置,$\omega$是人眼观察方向(相机光线方向)。通常,$\omega$的方向始终与辐射度传播方向一致,即从物体指向人眼。$\omega'$表示光源方向(且$\omega'$应从物体指向光源)。 + +我们用文字描述这个方程:符号$S^2$(在文献中你也可能看到写作$\Omega_{4\pi}$)表示的积分意味着,内散射贡献可以通过考虑整个方向球$S^2$上所有方向的入射光来计算。 + +此处的$L(x, \omega')$就是我们在代码中计算的光贡献或**入射辐射度**项,在我们的这个示例中,由于我们只考虑了**一个光源**,而且是**点光源**,因此它就是以下代码片段计算的值: + +```cpp +... +// 内散射:计算光线穿过体积球体到达采样点的距离 +// 然后使用比尔定律衰减内散射产生的光贡献 +if (hit_object->intersect(sample_pos, light_dir, isect_vol) && isect_vol.inside) { + float light_attenuation = exp(-density * isect_vol.t1 * (sigma_a + sigma_s)); + result += transparency * light_color * light_attenuation * sigma_s * density * step_size; +... +} +``` + +它表示在采样点$x$(代码中的sample_pos)处,来自特定光源方向$\omega'$(代码中的light_dir)的光量——该光线已穿过体积内的一定距离(代码中的isect_vol.t1)。 + +但我们尚未引入积分符号后的项:$p(x, \omega', \omega)$。它被称为**相位函数**(phase function),本质上是**在球面立体角上归一化的条件概率密度函数**,它描述了在发生一次散射事件的**条件**下,光子从入射方向 ω' 被散射到出射方向 ω 的概率密度。我们接下来会解释其含义。 + +![](images/2026/02/08/20260208_131123_362.webp) + +*图1:各向同性(光线在方向球上向所有方向均匀散射)与各向异性相位函数(光线在方向球上的分布不均匀)。* + +当光子与粒子相互作用时,它会被散射到粒子周围所有可能的方向上,且每个方向被选中的概率相同。在这种情况下,我们称之为**各向同性散射体积(isotropic scattering volume)**。但各向同性散射并非普遍情况,大多数体积倾向于在有限的方向范围内散射光线,这类介质被称为**各向异性散射介质(anisotropic scattering medium)**或体积。相位函数是一个简单的数学方程,用于描述特定方向组合(观察方向$\omega$和入射光方向$\omega'$)下的散射光量,其返回值范围为0到1。从数学角度来说,相位函数用于模拟光线(或辐射度)的**角分布**。 + +相位函数有几个特性。首先,**它在其定义域(方向球$S^2$)上的积分必然为1**。实际上,组成体积的粒子会受到来自所有可能方向的光束照射,而这些可能的方向可以看作是以粒子为中心的球体。因此,如果我们考虑粒子周围所有可能的入射光方向,那么该粒子散射出的总光量不会超过所有入射光的总和——这就是相位函数需要在方向球上归一化的原因: + +![](images/2026/02/08/20260208_131123_576.webp) + +如果相位函数未归一化,它会导致光的“增加”或“减少”。相位函数的另一个特性是互易性:如果交换方程中的$\omega$和$\omega'$项,相位函数返回的结果相同。 +$$ f_p(x, \omega, \omega') = f_p(x, \omega', \omega) $$ + +![](images/2026/02/08/20260208_131123_790.webp) + +*图2:相位函数仅考虑光线方向与观察方向之间的夹角$\theta$。* + +**相位函数仅取决于观察方向和入射光方向之间的夹角。因此,它通常用**角度$\theta$(希腊字母西塔)来定义,即两个向量之间的夹角(而非$\omega$和$\omega'$本身)。如果我们计算方向$\omega$(观察方向)和$\omega'$(入射光方向)的点积,$\cos\theta = \omega \cdot \omega'$的取值范围为[-1, 1],因此$\theta$本身的取值范围为[0, $\pi$],如下列图像所示。 + +![](images/2026/02/08/20260208_131124_012.webp) + +> 总之,相位函数用于告知你:对于任意特定的入射光方向($\omega'$),有多少光可能被散射到观察者方向($\omega$)。 + +闲话少说,相位函数具体是什么样子的? + +最简单的是各向同性体积的相位函数。由于来自方向球上所有方向的光线会被均匀地散射到方向球上的所有方向,因此相位函数(请记住其在球域上的积分需归一化为1)可简单表示为: +$$ f_p(x, \theta) = \frac{1}{4\pi} $$ + +请注意,该函数与观察方向和入射光方向无关。函数定义中虽包含$\theta$角,但等式右侧(等号右边)并未使用该角——这符合预期,因为散射光子的出射方向与入射光方向无关(两者之间没有依赖关系,因此$\theta$无需出现在方程中),且所有出射方向被选中的概率相同(这就是方程为常数的原因)。这个方程不难理解:球体的表面积为$4\pi$球面度(steradians),因此,如果你从微分立体角的角度考虑入射方向,那么所有入射方向覆盖的表面积就是$4\pi$,因此相位函数必须为$1/(4\pi)$才能满足归一化特性:所有入射方向覆盖的表面积除以$4\pi$等于1。这里值得一提的是,**相位函数的单位是1/球面度**(1/sr,sr代表球面度)。 + +各向同性体积的相位函数非常简单。让我们再看另一个相位函数——亨耶-格林斯坦相位函数(Henyey-Greenstein phase function),其表达式如下: + +![](images/2026/02/08/20260208_131124_273.webp) + +![](images/2026/02/08/20260208_131124_481.webp) + +*图3:不同非对称因子g(g=0.3、0.5、0、-0.3、-0.5)下,亨耶-格林斯坦相位函数在极坐标系中的图像。角度$\theta$的取值范围为[0, $\pi$]。* + +显然,它比各向同性相位函数更复杂。如你所见,它包含另一个变量$g$,称为非对称因子(asymmetry factor),其中$g \in [-1, 1]$。这个参数用于控制光线的散射方向是向前还是向后:当$g>0$时,光线主要向前散射;当$g<0$时,光线主要向后散射;当$g=0$时,该函数等于$1/(4\pi)$,即各向同性体积的相位函数。图3展示了不同$g$值下该函数的图像。 + +还存在其他相位函数,如施里克相位函数(Schlick)、瑞利散射相位函数(Rayleigh)或洛伦兹-米散射相位函数(Lorenz-Mie)。这些函数被设计用于拟合不同类型粒子的散射行为。例如,当你试图渲染由微小粒子(小于光波长)组成的体积时,使用瑞利函数效果更好;而对于较大的粒子(灰尘、水滴等),米函数更合适。亨耶-格林斯坦相位函数常用于影视行业的生产级渲染,因为它计算速度快(其他函数可能较慢)且易于采样(例如,参见《蒙特卡洛模拟》课程)。 + +最后,以下是将亨耶-格林斯坦相位函数添加到代码中的实现(你也可以自由实现其他函数): + +```cpp +// 亨耶-格林斯坦相位函数 +float phase(const float &g, const float &cos_theta) { + float denom = 1 + g * g - 2 * g * cos_theta; + return 1 / (4 * M_PI) * (1 - g * g) / (denom * sqrtf(denom)); +} + +vec3 integrate(...) { + ... + float g = 0.8; // 相位函数的非对称因子 + for (int n = 0; n < ns; ++n) { + ... + // 内散射:计算光线穿过体积球体到达采样点的距离 + // 然后使用比尔定律衰减内散射产生的光贡献 + if (hit_object->intersect(sample_pos, light_dir, isect_vol) && isect_vol.inside) { + float cos_theta = ray_dir * light_dir; + float light_attenuation = exp(-density * isect_vol.t1 * (sigma_a + sigma_s)); + result += density * sigma_s * phase(g, cos_theta) * light_attenuation * light_color * step_size; + } + ... + } + ... +} +``` + +请注意,这与上述内散射项的正式数学定义更加接近。 + +![](images/2026/02/08/20260208_131124_796.webp) + +上图展示了在两种不同的光照设置下,不同相位函数非对称因子$g$值对应的体积球体渲染结果:左侧为逆光(光线直接朝向相机),右侧为正光(光线和相机均直接朝向球体)。 + +亨耶-格林斯坦相位函数虽简单,但能很好地拟合真实世界的数据。例如,你可以通过组合$g=0.35$和$g$为负值或更大值的函数结果,实现双瓣相位函数(two-lobe phase function),以获得更精确的拟合效果。请自由尝试。对于云层或薄雾等物体,使用较大的$g$值(约0.8)。课程末尾的参考资料部分提供了相关参考。 + +## 数学理解 + +如果继续从数学的角度来理解加入了相位函数之后的完整公式的话: + +```cpp +result += density * sigma_s * phase(g, cos_theta) * light_attenuation * light_color * step_size; +``` + +首先,因为我们的示例中只有一个不考虑体积的点光源,因此对相位函数不需要进行积分,直接取入射方向的光即可。而由于相位函数本质上是概率密度函数,因此需要phase(g, cos_theta)乘以单位立体角才能表示概率。而对于light_color这个入射辐射度而言,它本身就是单位立体角上的光通量。因此二者相乘就把这个单位立体角消掉了。 + +而由于sigma_s是在该路径上发生散射的概率密度,因此需要乘以step_size,才是发生散射的概率。同时,又由于这个相位函数它本质上是在发生散射的条件下的条件概率密度函数,因此它还需要乘以条件概率,也就是sigma_s * step_size。所以这样乘下来,density * sigma_s * phase(g, cos_theta) * light_attenuation * light_color实际上是step_size步长内的光贡献期望。最后用累加模拟积分即可。 + +> 同时这里可以发现,在前面讨论比尔定律的时候,我们用sigma_s乘以distance,用来表示distance距离内发生光的外散射的期望。而这里我们用sigma_s相乘之后得到的是单位距离的光贡献期望。这是因为期望值的计算与我们关注的事件有关,我们前面关注的是光因外散射发生能量损失,这里关注的是光因内散射产生的光贡献。 + +## 采样点位置的抖动 + +![](images/2026/02/08/20260208_131125_081.webp) + +到目前为止,我们始终将采样点定位在每个小线段的中点。使用均匀间隔的采样点类似于将体积切割成多个切片,这些切片可能会导致令人不适的条纹伪影(如上图所示,该效果经过人工放大)。为了“解决”这个问题,我们可以在每个小线段上随机选择一个位置放置采样点——换句话说,采样点可以位于小线段的任意边界范围内(当然,沿相机光线方向)。要实现这一点,我们需要将以下代码行: + +```cpp +float t = isect.t0 + step_size * (n + 0.5); +vec3 sample_pos = ray_orig + t * ray_dir; +``` + +替换为: + +```cpp +float t = isect.t0 + step_size * (n + rand()); +vec3 sample_pos = ray_orig + t * ray_dir; +``` + +![](images/2026/02/08/20260208_131125_292.webp) + +*图4:为避免条纹伪影,我们可以抖动采样点的位置,而非使用均匀间隔的采样点。采样点可位于小线段的任意边界范围内。* + +其中,rand()是一个返回[0,1]范围内均匀分布随机数的函数。我们将这种方法称为随机采样(stochastic sampling)。 + +随机采样是一种蒙特卡洛技术,在该技术中,我们在适当的非均匀间隔位置对函数进行采样,而非均匀间隔位置。 +我们不能说这种方法“更好”(因此“解决问题”加上了引号),因为它用噪声替代了条纹,而噪声本身也是一个问题。尽管如此,从视觉效果来看,噪声比条纹更令人愉悦。你可以使用更复杂的“随机”数生成序列(例如拟蒙特卡洛方法)来减少噪声。然而,在本版本的课程中,我们将跳过这个主题——关于这个主题可以写一整本书(目前,你可以在《蒙特卡洛实践》课程中找到相关信息)。 + +## 体积不透明时退出光线步进循环(优化) + +实际上,如果你沿t0到t1距离的一半推进后,体积的透明度例如低于1e-3,你可能会认为计算剩余一半的采样点是不必要的(如相邻图所示)。你可以在检测到透明度变量低于这个最小阈值时,直接退出光线步进循环(见以下伪代码)。考虑到光线步进是一种计算速度较慢的方法,我们应该使用这种优化——尤其是当体积物体密度较大时(密度越大,透明度下降越快),这将节省大量时间。我们在上一章中提到,这是我们可能更倾向于使用正向积分而非反向积分的原因之一。 + +```cpp +... +float transparency = 1; +// 沿光线推进 +for (int n = 0; n < ns; ++ns) { + ... + if (transparency < 1e-3) + break; +} +``` + +![](images/2026/02/08/20260208_131125_507.webp) + +*图5:俄罗斯轮盘赌技术的可视化。当透明度低于某个阈值时,我们退出光线步进循环,但这意味着我们的结果被“截断”了。如何解决这个问题?* + +现在,你可以在通过透明度测试时停止光线步进,不再进行任何其他计算——但这在“统计上”是错误的,会在渲染图像中引入偏差。通过查看xx图可以更轻松地理解这一点:红线表示我们停止光线步进的阈值。如果我们在此处停止,就相当于忽略了曲线下方和右侧(沿x轴)的体积贡献。当然,这部分贡献在某种程度上是“可忽略的”——这也是我们最初决定实现这种截断方案的原因。然而,如果你是一名试图模拟中子穿过板材过程的热核工程师,这种方案是不可接受的。那么,我们如何在利用这种优化的同时,满足热核工程师的要求呢? + +我们将使用的方法称为俄罗斯轮盘赌(Russian roulette)——我们在专门介绍蒙特卡洛方法的课程中已经讨论过这种技术。其核心思想是:当透明度值低于某个阈值(例如1e-3)时,应用俄罗斯轮盘赌技术。然后,在[0,1]范围内随机选择一个均匀分布的数,并测试该随机数是否大于1/d(其中d是大于1的正实数,可为整数但非必须)。如果是,则退出循环;否则,继续循环,但将当前透明度值乘以d。此处的d表示通过测试的概率。例如,当d=5时,光线步进循环终止的“概率”为5分之4。 + +这(希望)是合理的:如果随机数小于1/d,你可以认为光子被“杀死”了,无法再进行任何处理。但作为“杀死”光子的交换,我们会给存活下来的光子“增加能量”,在我们的案例中,实际上也就是增加透明度值——增加的比例与光子被杀死的概率成反比。以下是该思想的代码实现: + +```cpp +... +float transparency = 1; +// 沿光线推进 +int d = 2; // d值越大,退出步进循环的频率越高 +for (int n = 0; n < ns; ++ns) { + ... + if (transparency < 1e-3) { + if (rand() > 1.f / d) // 在此处停止 + break; + else + transparency *= d; // 继续推进,但进行补偿 + } +} +``` + +**俄罗斯轮盘赌(Russian roulette)**是一种蒙特卡洛技术,用于在模拟中无偏地终止采样路径。其核心思想是: + +* 当某个事件(如光线继续传播)的概率很低时,可以以一定概率提前终止该事件,但需要对结果进行加权补偿,以保持期望值不变。 + +在体积渲染中用于优化光线步进过程,当体积透明度低于某个阈值(如1e-3)时,它允许以一定的概率提前终止循环,同时通过调整透明度值来保持统计无偏性。 + +* **无偏性保持**: + * 假设当前光线透明度为$T$(已低于$\epsilon$),下一步的贡献(不考虑终止)为$C = T \times \Delta\mathbf{L}_{\text{next}}$($\Delta\mathbf{L}_{\text{next}}$是下一步的颜色贡献)。 + * 以概率 $p = 1/d$ 继续循环,以概率 $1-p$ 终止循环。 + * $\mathbb{E}[\text{贡献}] = p \times (T \times d \times \Delta\mathbf{L}_{\text{next}}) + (1-p) \times 0$ + * 代入$p=1/d$:$\mathbb{E}[\text{贡献}] = \frac{1}{d} \times (T \times d \times \Delta\mathbf{L}_{\text{next}}) = T \times \Delta\mathbf{L}_{\text{next}}$ + * 这意味着在统计意义上,调整后的贡献值期望值等于原始值,因此最终颜色的期望值不变。 + +* **方差影响**: + * 俄罗斯轮盘赌会增加结果的方差(因为引入了随机性),但避免了直接截断带来的系统性偏差。在蒙特卡洛渲染中,无偏性通常比方差更重要,因为方差可以通过增加采样数来减少。 + +## 阅读他人的代码! + +本课程的前三章涵盖了开始渲染体积所需的全部知识。至此,当你面对他人的代码时,应该能够理解其核心逻辑。让我们一起进行这个练习:我们将使用一个名为PBRT的开源项目,并查看其体积渲染的实现——对你而言,其中应该不再有任何秘密。 + +```cpp +Spectrum SingleScatteringIntegrator::Li(const Scene *scene, + const Renderer *renderer, const RayDifferential &ray, + const Sample *sample, RNG &rng, Spectrum *T, + MemoryArena &arena) const { + // [注释] + // 计算与体积物体的交界面(t0, t1)。如果光线未与体积物体相交, + // 则将透射率设为1,并返回颜色0。 + // [/注释] + + VolumeRegion *vr = scene->volumeRegion; + float t0, t1; + if (!vr || !vr->IntersectP(ray, &t0, &t1) || (t1-t0) == 0.f) { + *T = 1.f; + return 0.f; + } + // [注释] + // 如果存在交点:将全局透射率(透明度)设为1, + // 将存储最终颜色的变量(此处命名为Lv)设为0。 + // 计算采样点数量,并相应调整步长。 + // [/注释] + + // 在_vr_中执行单散射体积积分 + Spectrum Lv(0.); + + // 准备体积积分的步进 + int nSamples = Ceil2Int((t1-t0) / stepSize); + float step = (t1 - t0) / nSamples; + Spectrum Tr(1.f); + Point p = ray(t0), pPrev; + Vector w = -ray.d; + t0 += sample->oneD[scatterSampleOffset][0] * step; + + // 计算单散射采样点的采样模式 + float *lightNum = arena.Alloc(nSamples); + LDShuffleScrambled1D(1, nSamples, lightNum, rng); + float *lightComp = arena.Alloc(nSamples); + LDShuffleScrambled1D(1, nSamples, lightComp, rng); + float *lightPos = arena.Alloc(2*nSamples); + LDShuffleScrambled2D(1, nSamples, lightPos, rng); + uint32_t sampOffset = 0; + // [注释] + // 正向光线步进:这是主循环,我们将遍历所有小线段, + // 计算每个采样点对最终体积透明度(Tr)和颜色(Lv)的不透明度和内散射贡献。 + // [/注释] + + for (int i = 0; i < nSamples; ++i, t0 += step) { + // 推进到t0处的采样点,并更新_T_ + // [注释] + // 更新采样点位置,然后评估该位置的体积密度。 + // 我们尚未学习这部分内容,这是接下来两章的主题。 + // 目前,可将stepTau变量视为我们代码中的密度变量。 + // 采样点位置经过抖动处理。 + // 然后应用比尔定律,用当前采样点的不透明度衰减全局透射率变量(Tr)。 + // [/注释] + + pPrev = p; + p = ray(t0); + Ray tauRay(pPrev, p - pPrev, 0.f, 1.f, ray.time, ray.depth); + Spectrum stepTau = vr->tau(tauRay, + .5f * stepSize, rng.RandomFloat()); + Tr *= Exp(-stepTau); + // [注释] + // 应用俄罗斯轮盘赌技术。 + // [/注释] + + // 如果透射率很小,可能终止光线步进 + if (Tr.y() < 1e-3) { + const float continueProb = .5f; + if (rng.RandomFloat() > continueProb) { + Tr = 0.f; + break; + } + Tr /= continueProb; + } + // [注释] + // 采样点存活:计算该采样点... + // [/注释] + } +} +``` + +## 接下来是什么? + +如果你能坚持到这里,恭喜你!你已经“毕业”了,Scratchapixel将为你颁发虚拟荣誉证书。我们已经涵盖了这些算法的核心工作原理。剩余的章节主要是利用我们迄今为止所学和构建的知识,享受乐趣并制作一些酷炫的图像。最后,在最后一章中,我们将汇总所有所学知识,看看它们如何转化为描述光能穿过参与介质(空气、烟雾、云层、水等)并与之相互作用的通量的实际方程。 diff --git a/docs/plan/毕设/三 体积渲染方程.md b/docs/plan/毕设/三 体积渲染方程.md new file mode 100644 index 00000000..a544c319 --- /dev/null +++ b/docs/plan/毕设/三 体积渲染方程.md @@ -0,0 +1,552 @@ +# 三 体积渲染方程 + +## 从辐射传输方程到体绘制方程 + +在本章中,我们将学习支配体渲染的相关方程。 + +*** + +## 光如何与参与介质相互作用并在体积中传播? + +大多数书籍和论文在渲染(尤其是参与介质渲染)中采用相同的约定。因此,熟悉这些约定是很有必要的。体积通常被表示为细小的**微分圆柱体**。**观察者从圆柱体的一端俯视,我们从另一端用准直光束照射**,如下图所示。我们需要求解的是光束穿过体积后到达观察者眼睛的光强(即有多少光到达观察者)。 + +![](images/2026/02/08/20260208_131632_832.webp) + +这个光度量的专业术语是**辐射亮度(radiance)**,我们用字母 $L$ 表示。$L_i$ 是入射辐射亮度:照射到圆柱体上的光束强度。$L_o$ 是出射辐射亮度:从圆柱体另一端射出的光强。观察方向用 $\omega$(希腊字母欧米伽)表示。在代码中,这就是相机光线方向。 + +这是我们的基本设置。穿过圆柱体的窄(准直)光束与介质的相互作用有四种方式(假设这个微小圆柱体并非空的,而是充满了某些粒子): + +* **吸收(Absorption)**:部分光被吸收,光束强度降低,辐射亮度减小。 + +* **外散射(Out-scattering)**:组成窄光束的光子沿 $-\omega$ 方向传播(直接朝向眼睛),但在传播过程中可能被散射到其他(随机)方向。外散射的光子不再属于原光束,因此光束强度也会降低,辐射亮度减小。 + +* **内散射(In-scattering)**:散射也可能使照射到体积上的部分光被重新定向到原光束的传播路径上,光束强度因此增加,辐射亮度增大。 + +* **发射(Emission)**:气体在达到特定温度时会发光。此时电子获得能量,并以光子的形式释放。这些光子的传播方向是随机的,但最终会有部分光子沿原光束的路径传播。因此,发射会使光束强度增加。 + +需要注意的是,外散射和吸收都会导致光能损失,而内散射和发射会使沿 $\omega$ 方向朝向眼睛传播的窄准直光束强度增加。此外,**内散射和外散射属于同一现象:光子与构成介质的粒子 "碰撞"**。 + +![](images/2026/02/08/20260208_131632_918.webp) + +沿路径 $ds$ 的辐射亮度变化 $dL$ 等于沿方向 $\omega$ 上点 $x$ 处的入射辐射亮度 $L_i$ 与出射辐射亮度 $L_o$ 之差。这个辐射亮度变化也等于吸收、散射(内散射和外散射)和发射的净效应之和: + +$$ +dL(x,\omega) = \text{emission} + \text{in-scattering} - \text{out-scattering} - \text{absorption} +$$ + +这并非一个 "严格意义上" 的方程,但在本章后续内容中,我们将看到它如何最终推导为辐射传输方程(RTE)和体绘制方程(VRE)。在此之前,我们需要先了解吸收系数、散射系数、比尔定律(Beer's Law)和相位函数。 + +*** + +## 吸收系数、散射系数与消光 / 衰减系数 + +吸收系数(及散射系数)最好结合其应用的方程来介绍,但将方程与系数定义混合讲解可能会造成混淆,因此我们现在单独介绍这些系数。 + +### 吸收系数 + +吸收系数(或吸收截面)$\sigma_a$ 表示光在介质中每传播单位距离被吸收的概率密度密度。吸收系数的单位是倒数距离(即 mm⁻¹、cm⁻¹ 或 m⁻¹)。 + +光被吸收的比例与入射光强无关。进入体积的光子数与射出体积的光子数之比(平均值)不随入射光子数变化。入射辐射亮度与吸收效应无关。总结一句话就是无记忆性。 + +此外吸收量与 $\sigma_a$、$ds$ 之间都存在线性关系:无论是将吸收系数加倍,还是将光在介质中的传播距离加倍,吸收量都会同等增加。 + +> **详细信息** +> +> 由于吸收系数的单位是倒数距离,因此其倒数为距离,称为平均自由程(mean free path)。平均自由程可理解为光子在与介质发生相互作用(散射或吸收)前,在体积中传播的平均距离。平均自由程是模拟多重散射的关键(这一主题我们将在单独的课程中讲解)。 +> +> $$ +> \text{mean free path} = \frac{1}{\sigma} +> $$ +> +> 请注意,平均自由程与吸收系数之间也存在线性关系:若吸收系数加倍,光子在与介质发生相互作用前的传播距离将减半。 + +### 散射系数 + +散射系数 $\sigma_s$ 与吸收系数类似,但表示光子在介质中每传播单位距离被散射的概率密度。内散射和外散射对辐射亮度变化的影响不同,因此我们对它们进行区分:内散射会为沿 $\omega$ 方向朝向眼睛传播的光束增加光强,外散射则会导致光束在朝向眼睛传播时能量损失。然而,两者都属于同一散射现象。光子被内散射或外散射的概率相同,均由单一系数定义:散射系数 $\sigma_s$(希腊字母西格玛)。 + +> **详细信息** +> +> 在部分文献中,散射系数和吸收系数用希腊字母 "缪"($\mu$)表示,这在物理学及研究中子等粒子在物质中运动的领域是常见约定。而在计算机图形学中,西格玛($\sigma$)已成为普遍采用的约定。 + +### 消光系数 + +如前所述,从外散射和吸收对辐射亮度变化的影响来看,两者是不可区分的 —— 它们都会导致沿 $-\omega$ 方向传播的光束辐射亮度降低。观察者所能感知到的只是光强的减弱:无论这种能量衰减是由光子吸收还是散射 / 反射引起的,都不会改变观察者的体验和观测结果。 + +> **详细信息** +> +> 当然,您可以通过设置探测器测量沿非 $-\omega$ 方向射出的光子,来区分吸收和外散射各自的贡献。这一点在后续介绍相位函数时会变得有用且有意义。 + +因此,在计算光穿过介质时的辐射亮度损失时,我们会将散射系数和吸收系数合并为一个系数,称为消光系数(extinction coefficient)或衰减系数(attenuation coefficient),其表达式为: + +$$ +\sigma_t = \sigma_a + \sigma_s +$$ + +下标 $t$ 代表总衰减(total attenuation),也可写作 $\sigma_e$。 + +*** + +## 比尔 - 朗伯定律的推导 + +我们在本课程的第一章就介绍了**比尔 - 朗伯定律(Beer-Lambert Law)**。之所以从该定律开始,是因为当您仅需计算光线透射率(而非辐射亮度)时,只需用到它。透射率与光穿过特定体积物体的比例有关,也可表述为 "物体的不透明度";而辐射亮度则定义了体积物体的亮度。我们将在后续更正式地介绍透射率的概念。 + +为了了解比尔 - 朗伯定律的来源,我们首先分析从点 $x$ 出发、沿方向 $\omega$ 传播距离 $s$ 的光束的辐射亮度导数。严格来说,方向应为 $-\omega$,但为简洁起见,我们使用 $\omega$(默认 $\omega$ 是观察者的观察方向,光束沿相反方向传播)。 + +辐射亮度的导数可表示为: + +$$ +dL = -\sigma_a L(x, \omega) ds +$$ + +这个很好理解,首先由于吸收作用是能量损失,因此有 $-$ 号。而又由于 $\sigma_a$ 是 $\omega$ 这条路径上单个粒子被吸收的概率密度,因此需要乘以 $ds$ 才是单个粒子被吸收的概率。最后再乘以在 $ds$ 这个微元上的辐射度本身 $L(x, \omega)$,这也就是辐射亮度的导数。 + +前文提到,外散射和吸收都会导致辐射亮度损失,但为简化起见,我们首先假设辐射亮度损失仅由吸收引起。后续我们会扩展并推广这一推理(引入散射项)。 + +该方程表示了在点 $x$ 沿方向 $\omega$ 传播时,辐射亮度因吸收而损失的速率。您可以将其类比为河床的坡度:沿河流的每个点,地面的坡度可能不同 —— 坡度反映了海拔降低的速度。同样,导数 $dL$ 反映了光在传播过程中辐射亮度降低的速度。 + +![](images/2026/02/08/20260208_131633_189.webp) + +> 这个方程告诉我们什么?它表明,辐射亮度沿光线路径的衰减速率与该点的辐射亮度本身成正比。比例常数 $\sigma_a(x)$ 是吸收系数,其值可能随位置变化。这意味着光的吸收速度取决于介质的局部特性。换一种直观的理解方式:想象一条流向大海的河流,任意点的地形坡度决定了该点水流海拔下降的速度。同样,吸收系数就像是辐射亮度的 "坡度"—— 某点的吸收系数越高,该位置的辐射亮度衰减就越快。正如坡度会沿河流路径变化一样,吸收系数也会沿光线路径变化,进而逐步影响辐射亮度的衰减。 + +有一个重要细节需要说明,以帮助理解背后的原理:$L(x,\omega)$ 表示沿方向向量 $\omega$ 上点 $x$ 处的光束辐射亮度。正因为如此,人们往往忽略 $L(x,\omega)$ 是一个函数这一事实 —— 这个函数正是比尔 - 朗伯定律本身,也是我们要求解的目标。如果绘制这个函数的图像,会发现随着光在介质中传播距离的增加($x$ 离光束进入介质的点越来越远),函数值逐渐减小。下图展示了该函数(对于给定的吸收系数)随 $x$ 的变化曲线,蓝色线条代表某一特定位置处函数 $L(x,\omega)$ 的变化率(即斜率): + +![](images/2026/02/08/20260208_131633_700.webp) + +我们的目标是利用方程 $dL=-\sigma_a L(x,\omega)ds$ 求解 $L(x,\omega)$。为解决这个问题,我们首先将方程改写为关于 $s$(而非 $x$)的函数,其中 $s$ 表示光束从入射点 $x$ 开始在介质中传播的距离。通过将 $x$ 替换为 $x_s = x + s \omega$,方程转化为关于 $s$ 的函数: + +$$ +\frac{dL(s)}{ds} = -\sigma_a L(s) +$$ + +这里的导数(方程左侧)采用莱布尼茨符号表示。分母中的项至关重要:左侧应读作 "函数 $L(s)$ 对 $s$ 的导数",通俗地说,就是 "随着 $s$ 的变化,$L(s)$ 的变化速率是多少"。 + +求解 $L(s)$,即是解一个常微分方程(ordinary differential equations, ODE),此处为一阶常微分方程(因为仅涉及一阶导数)。 + +$$ +\begin{array}{l} +\frac{dL(s)}{ds} &=& -\sigma_a L(s)\\ +\frac{dL(s)}{L(s)} &=& -\sigma_a ds\\ +\frac{1}{L(s)} dL(s) &=& -\sigma_a ds\\ +\int \frac{1}{L(s)} dL(s) &=& \int -\sigma_a ds\\ +\int \frac{1}{L(s)} dL(s) &=& -\sigma_a \int ds\\ +\ln(L(s)) &=& -\sigma_a s + C\\ +e^{\ln(L(s))} &=& e^{-\sigma_a s}\\ +L(s) &=& e^{-\sigma_a s} +\end{array} +$$ + +> 我们在计算中省略了常数 $C$,但下方体绘制方程(VRE)的完整推导会给出更全面的解。一阶齐次线性微分方程 $y'=-p(x)y$ 的通解为: +> +> $$ +> \begin{array}{l} +> \int \frac{1}{y} y' &=& \int -p(x) dx \\ +> \ln|y|&=& P(x) + C\\ +> |y|&=& e^{P(x)} e^{C}\\ +> |y|&=& \pm e^C e^{P(x)}\\ +> |y|&=& A e^{P(x)} +> \end{array} +> $$ +> +> 其中 $P(x)$ 是 $p(x)$ 的原函数。 + +这个结果就是比尔 - 朗伯定律的方程。该方程适用于均匀介质;对于非均匀介质,请参见下方的完整透射率方程。希望您能看出:$dL(s)$ 对应 $dy$,$ds$ 对应 $dx$,$L(s)$ 对应 $y$,$-\sigma_a$ 对应 $c$。如前所述,我们目前仅考虑了吸收的影响,但可以通过将 $\sigma_a$ 替换为消光系数 $\sigma_t$,将外散射引起的衰减纳入比尔定律: + +$$ +L(s)=e^{-(\sigma_a+\sigma_s)s} +$$ + +$$ +L(s)=e^{-\sigma_ts} +$$ + +其中 $\sigma_t=\sigma_a+\sigma_s$。 + +下图展示了消光系数对体积不透明度的影响,以及随着系数值的增加,光被吸收的程度如何变化: + +![](images/2026/02/08/20260208_131633_968.webp) + +*** + +## 比尔定律、透射率与光学厚度 + +这引出了透射率(transmittance)的概念。透射率可理解为体积不透明度的度量,或者说,是光能够穿过体积的比例。更正式地说,透射率是穿过体积的光的比例: + +$$ +T = \frac{L_o}{L_i} +$$ + +其中,如前所述,$L_i$ 是入射辐射亮度,$L_o$ 是出射辐射亮度。透射率也可以表示光在体积中两点之间传播的透过比例,可通过比尔定律计算: + +$$ +T = e^{-\sigma_t s} +$$ + +其中 $s$ 是体积中两点之间的距离。您也经常会看到该方程写作: + +$$ +T = e^{-\tau} +$$ + +其中 $\tau$(希腊字母陶)称为光学深度(optical depth)或光学厚度(optical thickness)。透射率有两种类型:仅考虑吸收的透射率称为内部透射率(internal transmittance),而考虑吸收、外散射等所有衰减因素的透射率称为总透射率(total transmittance)。对于消光系数(目前暂不考虑密度的概念)随空间变化的非均匀体积,我们需要沿光线对消光系数进行积分,表达式为: + +$$ +\tau = \int_{s=0}^d \sigma_t(x_s)ds +$$ + +其中 $d$ 是光线穿过体积的距离。比尔定律的最终通用形式为: + +$$ +T(d) = \exp \left(-\int_{s=0}^d \sigma_t(x_s) ds \right) +$$ + +如果您阅读了前面的章节,可能会记得在《3D 密度场的体绘制》(Volume Rendering of a 3D Density Field)一章中提到过"陶(tau)"这个术语——在该章节中,我们用它来累积光线穿过非均匀介质时的消光系数值。 + +*** + +## 内散射与相位函数 + +最后,要构建一个描述光能在介质中传播的全局方程,我们还需要相位函数(phase function)这一关键部分。我们在《光线步进:精准实现!》(Ray Marching: Getting it Right!)一章中已经介绍过相位函数的概念。 + +![](images/2026/02/08/20260208_131634_246.webp) + +*图 1:只有部分入射光会被散射到眼睛方向,具体比例取决于光线方向与观察方向之间的夹角。* + +当光束中的光子与构成介质的粒子相互作用时,可能会被散射而非吸收,且散射方向是随机的——我们知道光子的入射方向,但无法预测其散射方向。当准直光束中的光子被散射时,光束会损失能量;然而,如果有其他光源从 $-\omega$ 方向照射圆柱体,那么该光源发出的、穿过圆柱体的部分光子可能会被散射到 $-\omega$ 方向,从而使沿 $-\omega$ 方向传播的光束能量增加——这就是内散射。问题在于,要知道内散射为光束增加了多少能量,我们需要确定:从某个倾斜角度穿过圆柱体的光束,有多少能量会被散射到 $-\omega$ 方向。这个比例由相位函数给出。 + +相位函数描述了沿方向 $\omega'$(注意此处的撇号)传播的入射光中,被散射到 $-\omega$ 方向的比例。请记住,这是一个三维过程,因此光会在整个方向球面上散射。散射光的分布当然取决于介质的特性,以及光线方向向量 $\omega'$ 与观察方向向量 $\omega$ 之间的夹角 $\theta$(希腊字母西塔)(这是文献中采用的约定)。 + +> **请注意** +> +> 相位函数的符号约定需要特别谨慎:$\omega$ 向量从点 $x$ 指向眼睛,$\omega'$ 向量从点 $x$ 指向光源(如图 1 所示)。经验法则:计算两个向量之间的夹角 $\theta$ 时,我们始终假设 $\omega$ 指向眼睛,$\omega'$ 指向光源。在代码中,当您使用光线方向向量和相机方向向量(可能与预期约定方向相反)计算夹角 $\theta$ 时,需要格外注意这一点。总而言之,相位函数描述了介质内任意点 $x$ 处光散射的角分布。 + +相位函数(记为 $f_p(x, \omega, \omega')$)具有以下特性: + +* **互易性(Reciprocal)**:$f_p(x, \omega', \omega) = f_p(x, \omega, \omega')$。交换两个向量,结果保持不变。因此,相位函数通常简记为 $f_p(x, \theta)$,其中 $\theta$ 是两个向量之间的夹角。 + +* **归一化到 1**:在方向球面(通常记为 $\mathbb{S}^2$)上的积分值为 1,否则会在散射事件中增加或减少辐射亮度: + + $$ + \int_{\mathbb{S}^2} f_p(x, \omega, \omega') d\theta = 1 + $$ + +参与介质的散射行为分为两种类型: + +* **各向同性(Isotropic)**:方向球面上的所有方向被选择的概率相同。 + +* **各向异性(Anisotropic)**:方向球面上的某些方向被选择的概率更高,优先向后方或前方散射,如下图所示。例如,云表现出强烈的前向散射特性。 + +![](images/2026/02/08/20260208_131634_531.webp) + +各向同性介质的相位函数为: + +$$ +f_p(x, \omega, \omega') = \frac{1}{4 \pi} +$$ + +在《光线步进:精准实现!》(Ray Marching: Getting it Right!)一章中,我们已经介绍过亨耶-格林斯坦(Henyey-Greenstein,HG)相位函数——这是最常用的各向异性相位函数之一。该函数仅依赖于夹角 $\theta$,定义为: + +$$ +f_p(x, \theta) = \frac{1}{4 \pi} \frac{1 - g^2}{(1 + g^2 - 2g \cos \theta)^{\frac{3}{2}}} +$$ + +> 关于该方程的归一化证明,请参见《光线步进:精准实现!》(Ray Marching: Getting it Right!)。 + +该函数最初用于模拟星系间尘埃的光散射(Henyey, L.C., and J.L. Greenstein. 1941. Diffuse radiation in the galaxy. Astrophysical Journal 93, 70-83),但由于其简洁性,也被广泛应用于模拟其他多种散射介质。在实际生产中,尽管该函数简单,但通常已足够(此外,模拟多重散射时需要对相位函数进行逆变换,而该方程的逆变换易于实现)。 + +其中 $-1 < g < 1$,$g$ 称为非对称参数(asymmetry parameter): + +* 当 $g < 0$ 时,光优先向后散射(后向散射); + +* 当 $g = 0$ 时,介质为各向同性(光向所有方向均匀散射); + +* 当 $g > 0$ 时,光优先向前散射(前向散射)。 + +上图展示了 $g = -0.2$ 和 $g = 0.2$ 时的示例:$g$ 的绝对值越大,光越倾向于向光源后方或相机/眼睛前方散射。云表现出强烈的前向散射效应,$g \approx 0.8$(J. E. Hansen. 1969. Exact and Approximate Solutions for Multiple Scattering by Cloudy and Hazy Planetary Atmospheres),这导致云在逆光时边缘会出现光晕效应。 + +![](images/2026/02/08/20260208_131634_792.webp) + +还可以使用其他相位函数,如施利克(Schlick)、米氏(Mie)或瑞利(Rayleigh)相位函数。请关注我们后续关于参与介质多重散射的课程,以了解更多这些模型的相关知识。 + +*** + +## 辐射传输方程与体绘制方程 + +现在,我们已经掌握了构建最终方程所需的所有要素。第一个方程是辐射传输方程(Radiative Transfer Equation, RTE)。该方程的现代形式由苏布拉马尼扬·钱德拉塞卡(Subrahmanyan Chandrasekhar)在 1950 年出版的《辐射传输》(Radiative Transfer)一书中定义,该书此后成为该领域的标志性著作(至少是该主题的权威参考资料)。我们不会在此花费过多时间深入探讨,因为这本书确实……怎么说呢,相当复杂,您可以通过下面的快速浏览略知一二。 + +![](images/2026/02/08/20260208_131635_282.webp) + +我们可能会在本课程的后续修订版或单独的课程中深入讲解辐射传输方程(如果您感兴趣,可以查阅有限元方法、辐射度方法,以及论文《Modeling the Interaction of Light Between Diffuse Surfaces》和/或书籍《Radiosity and Realistic Image Synthesis》- Cohen, 1993)。目前,我们仅引用书中的一小段内容,认为它很好地总结(或介绍)了我们迄今为止所学的所有知识: + +> "在本章中,我们将定义辐射传输领域涉及的基本物理量,并推导支配辐射在吸收、发射和散射介质中传播的基本方程——传输方程。" + +好了,言归正传。辐射传输方程考虑了我们之前列出的、导致能量沿方向 $\omega$ 传播时辐射亮度变化的所有因素:吸收、内散射、外散射,以及发射(本课程中我们将忽略发射项)。请记住,该方程描述的是辐射亮度(导数)沿方向 $\omega$ 的变化: + +$$ +\frac{L(x+s \omega, \omega)}{ds} = \color{blue}{-\sigma_t L(x,\omega)} + \color{orange}{\sigma_s \int_{\mathbb{S}^2} f_p(x, \omega, \omega')L(x,\omega')d\omega'} +$$ + +标量 $s$ 表示沿方向 $\omega$ 的位置变化,这在本章开头已介绍过。 + +蓝色项代表吸收和外散射导致的损失;橙色项是内散射项,有时也称为源项(source term)。注意积分前的 $\sigma_s$ 项——这在概念上与我们之前介绍的、由吸收和外散射引起的能量损失方程类似: + +$$ +\begin{array}{l} +dL &= -\sigma_a L(x, \omega) \\ +dL &= -\sigma_s L(x, \omega) +\end{array} +$$ + +内散射的强度与光被散射的概率成正比,该概率由散射系数 $\sigma_s$ 给出。内散射项的其余部分已在前面描述过:对方向球面 $\mathbb{S}^2$ 的积分意味着,内散射项需要考虑来自所有方向($\omega'$)的光,并通过相位函数 $f_p(x, \omega, \omega')$ 进行加权。 + +为简洁起见,我们令: + +$$ +L_s(x, \omega) = \int_{\mathbb{S}^2} f_p(x, \omega, \omega')L(x, \omega')d\omega' +$$ + +我们已经多次强调,辐射传输方程是一个积分-微分方程(integro-differential equation):它表达的是方向导数——点 $x$ 处沿方向 $\omega$ 的辐射亮度 $L$ 的导数。在文献中,您也可能看到该方程写作以下形式: + +$$ +(\omega \cdot \nabla_x)L(x, \omega) = \color{blue}{-\sigma_t L(x, \omega)} + \color{orange}{\sigma_s L_s(x, \omega)} +$$ + +其中 $\nabla_x$(数学中称为德尔塔或纳布拉符号)可理解为函数的梯度(即导数的多维概念)。我们添加下标 $x$ 以表示对 3D 空间中点 $x$ 的三个坐标求梯度;若省略下标,$\nabla$ 也可能表示对方向 $\omega$ 的变化求梯度。当您沿方向 $\omega$ 移动时,辐射亮度会局部变化(增加或减少),其变化率与吸收项和散射项成正比。与我们接下来要介绍的体绘制方程不同,这个积分-微分方程告诉我们:当沿光传播方向"迈出一步"时,辐射亮度的变化速率是多少。 + +然而,这个微分方程对我们来说并不是特别实用——作为计算机图形学开发者,我们需要的是测量体积物体边界处的辐射亮度:该辐射亮度是光线(或观察方向)穿过物体后,经吸收和/或外散射衰减、并经内散射增强后的结果,如下图所示(该图现已为您所熟悉)。 + +![](images/2026/02/08/20260208_131635_553.webp) + +如前所述,辐射传输方程是一阶微分方程,其标准形式可表示为: + +$$ +y' + p(x)y = \color{red}{q(x)} +$$ + +在数学中,这被称为一阶非齐次线性微分方程。我们需要求解的方程中同时包含函数 $y$ 及其导数 $y'$。现在,我们将辐射亮度函数重新定义为距离 $s$ 的函数,其中 $s$ 是沿方向向量 $\omega$ 的光束上任意点到某一参考点的距离: + +$$ +\begin{array}{l} +y \rightarrow L(s) \\ +y'(x) \rightarrow \frac{dL(s)}{ds} \\ +\end{array} +$$ + +并且: + +$$ +\begin{array}{l} +y' + \color{blue}{p(x)} y = \color{red}{q(x)} \\ +L'(s) + \color{blue}{\sigma_t} L(s) = \color{red}{\sigma_s L_s(s)} +\end{array} +$$ + +请记住,我们之前提到 $L_s$ 有时被称为源项——这是因为您可以将其理解为:光线沿途的某些位置会"出现"光,并被添加到光束的辐射亮度中,它是辐射亮度的"来源"。 + +这种标准形式的常微分方程有已知解(如果您感兴趣,可参见下方的推导): + +$$ +y(x) = \int_{t=0}^x \color{red}{q(t)} e^{-\int_t^x \color{blue}{p} dt'} dt + C_1 e^{-\int_{t=0}^x \color{blue}{p} dt} +$$ + +> **推导过程** +> +> 有多种方法可用于推导一阶非齐次线性微分方程的解,我们采用积分因子法(integrating factor method)。该方法的核心思想是:将常微分方程 $y' + p(x)y = q(x)$ 乘以一个函数 $I(x)$,得到: +> +> $\color{red}{I(x)y' + I(x)p(x)y} = I(x)q(x)$ +> +> 我们称这个方程为修正后的常微分方程。要理解其意义,您需要知道两个函数乘积的导数公式(乘积法则): +> +> $\frac{d}{dx} [f(x) g(x)] = f'(x) g(x) + f(x) g'(x)$ +> +> 现在,我们注意到:如果选择 $I'(x) = I(x)p(x)$,那么修正后的常微分方程左侧看起来就像是通过乘积法则计算的导数: +> +> $$ +> \begin{array}{l} +> \color{red}{I(x)q(x)=I(x)y' + I(x)p(x)y} \\ +> \color{red}{=I(x)y' + I'(x)y}\\ +> =\frac{d}{dx} [I(x)y] +> \end{array} +> $$ +> +> 两边积分得: +> +> $I(x)y = \int I(x)q(x)dx + C$ +> +> 注意到 $I'(x) = I(x)p(x)$ 本身是一个一阶齐次微分方程,我们在本章前面已经给出了这类方程的通解: +> +> $I(x) = e^{ \int p(x) dx}$ +> +> 现在,我们将积分因子 $I(x)$ 代入修正后的常微分方程: +> +> $e^{ \int p(x) dx}y = \int e^{ \int p(x) dx}q(x)dx + C$ +> +> 即: +> +> $y(x) = e^{-\int p(x) dx} \left( \int e^{\int p(x') dx'} q(x) dx + C \right)$ + +要得到体绘制方程,只需将 $p$ 和 $q$ 分别替换为辐射传输方程中的 $\sigma_t$ 和 $\sigma_s L_s(x)$。 + +将辐射传输方程中的 $q$ 和 $p$ 替换为对应项(请阅读下方第二个注释),得到: + +$$ +L(x, \omega) = \int_{s'=0}^s \exp\left(-\int_{s'}^{s} \textcolor{blue}{\sigma_t(x_{s''})} \, ds''\right) \left[\textcolor{red}{\sigma_s(x_{s'}) L_s(x_{s'},\omega)}\right] ds' + L(0) \exp\left(-\int_{s'=0}^{s} \textcolor{blue}{\sigma_t(x_{s'})} ds'\right) +$$ + +光线沿 3D 空间中的位置 $x$ 由标量 $s'$ 和 $s''$ 重新参数化,这两个标量表示从入射点 $x$ 开始沿光线的距离。形式上,我们将 $x$ 替换为 $x_s = x + s \omega$。 + +外积分(变量为 $s'$)从光线进入体积的入射点 $x$ 延伸到光线离开体积的出射点 $x_s$(即我们想要获取光传播到该点的辐射亮度值的位置),积分距离为 $s$,表示沿光线路径累积的、被散射到光线方向的光。 + +内积分(变量为 $s''$)从当前散射点 $x_{s'}$ 延伸到光线的终点 $x_s$,积分距离为 $s'$,表示从散射点 $x_{s'}$ 到终点 $x_s$ 的光衰减。 + +项 $L(0) \exp\left(-\int_{s'=0}^{s} \textcolor{blue}{\sigma_t(x_{s'})} ds'\right)$ 表示初始辐射亮度 $L(0)$ 在整个路径长度 $s$ 上被体积透射率衰减后的结果。 + +正如您所猜测的,这就是体绘制方程(Volume Rendering Equation, VRE)。 + +![](images/2026/02/08/20260208_131635_887.webp) + +> 如果您疑惑:在展开推导过程中给出的方程(见上方方框)时,前置的指数项为何出现在方程的第二部分,而第一部分中却消失了——这是一个很好的问题。原因如下: +> +> $\int_0^s \sigma_t(x) \, dx = \int_0^t \sigma_t(x) \, dx + \int_t^s \sigma_t(x) \, dx.$ +> +> 换句话说,从 $0$ 到 $s$ 的积分可以拆分为从 $0$ 到 $t$ 的积分与从 $t$ 到 $s$ 的积分之和。因此: +> +> $\int_0^t \sigma_t(x) \, dx = \int_0^s \sigma_t(x) \, dx - \int_t^s \sigma_t(x) \, dx.$ +> +> 对两侧取指数: +> +> $e^{\int_0^t \sigma_t(x) \, dx} = e^{\int_0^s \sigma_t(x) \, dx - \int_t^s \sigma_t(x) \, dx}.$ +> +> 指数中的原始积分可拆分为两个积分,指数中的减法对应积分上下限的不同。将其应用于我们的方程: +> +> $L(x, \omega) = e^{-\int_0^s \sigma_t(x) \, dx} \left( \int_0^s e^{\int_0^s \sigma_t(x) \, dx - \int_t^s \sigma_t(x) \, dx} \sigma_s(t) L_s(t) \, dt + C \right).$ +> +> 化简后得到: +> +> $L(x, \omega) = e^{-\int_0^s \sigma_t(x) \, dx} \left( e^{\int_0^s \sigma_t(x) \, dx} \int_0^s e^{-\int_t^s \sigma_t(x) \, dx} \sigma_s(t) L_s(t) \, dt + C \right).$ +> +> 外层的指数项 $e^{-\int_0^s \sigma_t(x) , dx}$ 和 $e^{\int_0^s \sigma_t(x) , dx}$ 相互抵消: +> +> $L(x, \omega) = \int_0^s e^{-\int_t^s \sigma_t(x) \, dx} \sigma_s(t) L_s(t) \, dt + C e^{-\int_0^s \sigma_t(x) \, dx}.$ +> +> 其中 $C$ 是表示初始条件 $L(0)$ 的常数: +> +> $L(x, \omega) = \int_0^s e^{-\int_t^s \sigma_t(x) \, dx} \sigma_s(t) L_s(t) \, dt + L(0) e^{-\int_0^s \sigma_t(x) \, dx}.$ + +最终,体绘制方程的形式为: + +$$ +\begin{aligned} +L(x, \omega) =& \int_{s'=0}^s \exp\left(-\int_{s'}^{s} \sigma_t(x_{s''}) \, ds''\right) \left[\sigma_s(x_{s'}) L_s(x_{s'})\right] ds' + \\ +& L(0) \exp\left(-\int_{s'=0}^{s} \sigma_t(x_{s'}) \, ds'\right). +\end{aligned} +$$ + +> 需要说明的是,虽然我们不确定"体绘制方程"这一术语的首次提出者是谁,但该术语在 21 世纪初才开始被广泛使用。它出现在皮克斯研究院(Pixar Research)2017 年发布的《生产级体绘制》(Volume Rendering for Production)文档中,但在此之前已有人使用。如果您有相关信息,欢迎告知我们。 + +右侧的 $L_0$ 项对应于从观察者视角来看可能位于体积物体后方的物体发出的辐射亮度。如果体积物体后方有一个实体物体,那么该物体沿 $\omega$ 向量"反射"的辐射亮度 $L_0$ 将在穿过整个体积距离 $s$ 后,被体积的透射率衰减。 + +此外,如果考虑**发射项**,我们需要在内散射项旁添加发射项 $L_e$(注意发射源旁的 $\sigma_a$ 项)。 + +由此可得体积渲染方程的最终形式: + +$$ +\begin{aligned} +L(x, \omega) &= \int_{s'=0}^s \exp\left(-\int_{s'}^{s} \textcolor{blue}{\sigma_t(x_{s''})} , ds''\right) +\left[\textcolor{red}{\sigma_s(x_{s'})} L_s(x_{s'},\omega) + \textcolor{red}{\sigma_a(x_{s'})} L_e(x_{s'},\omega)\right] ds' + \\ +&\quad L(0) \exp\left(-\int_{s'=0}^{s} \textcolor{blue}{\sigma_t(x_{s'})} ds'\right) +\end{aligned} +$$ + +另外别忘了: + +$$ +L_s(x, \omega) = \int_{\mathbb{S}^2} f_p(x, \omega, \omega')L(x, \omega')d\omega' +$$ + +> 体绘制方程对我们这些专注于计算机图形学的人来说更实用,因为它将辐射传输方程转化为一个积分——尽管该积分没有解析解,但至少可以通过黎曼和(Riemann sum)等技术求解(这正是我们在前几章中实际采用的方法)。 + +用 $T(s)$ 表示透射率项,令: + +$$ +T(s) = \exp\left(-\int_{s'=0}^{s}\sigma_t(x_{s'}) ds'\right) +$$ + +如您现在所知,这表示光在介质中传播距离 $s$ 后的透射率,因此体渲染方程可写作: + +$$ +L(x, \omega) = \int_{s'=0}^s T(s')\left[\sigma_s(x_{s'}) L_s(x_{s'}, \omega)+\sigma_a(x_{s'}) L_e(x_{s'}, \omega)\right] ds' + T(s)L(0) +$$ + +* 外积分(变量为 $s'$)从体积的入射点延伸到出射点 $x_{s'} = x_s$,表示沿光线路径累积的、被散射到光线方向的光。 + +* 内积分 $T(s)$ 表示从散射点到出射点的光衰减。 + +* $s$ 是光穿过体积的总距离。 + +如果您能读到这里,恭喜您!您已经掌握了计算机图形学文献中最复杂的方程之一。 + +> **一段历史** +> +> 如果要为体绘制的介绍推荐一篇论文,那一定是詹姆斯·T·卡吉亚(James T. Kajiya)1984 年发表的《光线追踪体积密度》(Ray-Tracing Volume Density)。这篇论文表明,体积物体渲染绝非新兴技术——但当时的硬件性能甚至不足以将光线追踪应用于实体表面,更不用说光线步进体积物体了。直到 20 世纪 90 年代末至 21 世纪初,随着《超时空接触》(Contact)等电影的出现,体绘制才开始在生产中应用(因为大预算电影的制作成本终于可以承受这种技术)。下图是该论文的截图,展示了卡吉亚首次通过光线步进实现的体积物体渲染结果。 这篇论文可能是整个计算机图形学研究史上最重要的 10 篇论文之一。如果您有不同意见,欢迎告知我们。 + +现在的核心问题是:我们如何计算这个积分(答案当然不是 42)?我们在本课程中已经展示了一种解决方案——光线步进法,但还存在其他方法。光线步进法曾经是主流,但现在已被认为相当过时(不过我们仍然认为它是学习体绘制的良好起点)。如今,主流方法是使用跟踪算法和随机采样方法。我们将在本课程的最后一章简要介绍这一主题。 + +*** + +## 从方程到代码 + +我们理解这些方程可能令人望而生畏,部分读者可能只关心它们如何转化为代码。本课程的前四章将带您完成这一过程,因此我们不会在此重复。如果您还没有阅读前几章,建议您先阅读。但这里提供一些线索,帮助您将方程的不同部分与各章节对应起来: + +* $L(0)T(s)$ 项对应我们在本课程第一章学到的内容。$L(0)$ 简单表示实体物体(如下方图片中的红墙)反射的光,这些光穿过体积。该光(物体的颜色)仅被 $T(s)$ 衰减,其中 $s$ 是光穿过体积的距离,$T$ 就是比尔定律。如果物体是均匀的,则 $T(s) = \exp(-s * \sigma_t)$(见第一章);如果体积是非均匀的,则需要计算体积的光学厚度(见第三章),方程为 $T(s) = \exp(- \int_{t=0}^s \sigma_t(x_t) dt)$。如果仅考虑该项,体积球体将保持黑色——该项仅负责处理来自背景、穿过体积的光。 + +* 方程右侧的第一项 $\int_{t=0}^s T(t)\left[\sigma_s(x_t) L_s(x_t, \omega)\right] dt$ 对应单次散射项。要了解其如何转化为代码,请阅读第一章至第三章——该项负责球体的照明。 + +*** + +## 我们接下来将学习什么 + +本节课的大部分内容致力于讲解光线步进算法,但你需要了解的是:尽管该算法直到最近(至少在 21 世纪 10 年代中期之前)几乎是体渲染的唯一选择,但现代渲染引擎如今在处理体渲染时,通常会采用基于蒙特卡洛的随机方法。既然它已被视为过时技术,我们为何还要花费大量时间学习?一方面是出于历史原因;另一方面,对于 CGI 编程新手(尤其是几乎没有数学基础的人)而言,通过光线步进算法入门体渲染(及体渲染方程),远比通过复杂度高得多的随机方法更容易。 + +### 光线步进算法为何会被淘汰?主要有两个原因: + +* 它无法准确模拟光线在真实世界中与体积介质相互作用的行为(我们稍后会详细说明); + +* 随机方法对真实物理过程的模拟效果要好得多。 + +我们本可以从一开始就使用随机方法(该方法自 20 世纪 60 年代起就已为人熟知),但问题在于:这种方法的计算量是光线步进算法的无数倍,用它生成一张图像需要等待极长的时间(至少感觉上是这样)。光线步进算法虽然计算密集,但远不及随机方法 —— 这也是它直到最近仍作为体渲染首选解决方案的原因(即便如此,我们也是等到 20 世纪 90 年代末才开始在实际生产中应用光线步进算法,直到 21 世纪 00 年代末才开始普及)。幸运的是,随着计算能力的持续提升,我们现在使用随机方法能够在合理时间内得到结果;而且由于其生成的效果更优,光线步进算法已逐步被基于随机方法的方案取代。证毕(Quod erat demonstrandum)。 + +### 接下来我们看看光线步进算法的局限性所在 + +要回答这个问题,我们需要先理解光线在介质中的传播方式。光子进入体积介质后会发生这样的过程:它沿直线传播一段距离,最终与介质(例如构成体积的粒子)发生相互作用。正如我们所知,光子随后可能被散射(改变传播方向)或被吸收。如果发生散射,它会继续在介质中传播,但方向是随机的 —— 至少与撞击介质粒子前的传播方向大概率不同。这种 "传播 - 相互作用" 的循环会一直持续,直到光子被吸收或最终脱离介质。下图展示了这一过程:三个光子从顶部进入一个立方体体积介质后的不同命运。 + +![](images/2026/02/08/20260208_131636_111.webp) + +其中两个光子(红色)最终被吸收,只有一个光子(绿色)脱离介质(脱离方向与进入立方体时的传播方向不同)。 + +光子的运动轨迹可以描述为一种 "随机游走"(random walk)—— 这也正是它的名称由来。我们还能观察到,光子在被吸收或脱离介质前,会与介质发生多次相互作用,即多次散射。而这正是光线步进算法的核心短板:它仅考虑了光子与体积介质之间的**单次相互作用**。 + +### 单次散射 vs 多次散射:低反照率 vs 高反照率体积物体 + +这种仅考虑单次相互作用的模式被称为 **"单次散射"(single scattering)**—— 我们只计算经过一次介质相互作用后,被重新导向观察者的光线。虽然有些体积介质的单次散射效应显著(例如蒸汽火车或火山喷发产生的黑烟),但许多其他类型的体积介质(尤其是云)表现出强烈的 **"多次散射"(multiple scattering)特性:光子在脱离(或被吸收)前,会与物体发生无数次相互作用。这也是云呈现明亮白色的原因,而蒸汽火车或火山产生的烟则是黑色的。我们称白色的云具有** "高反照率"(high albedo),而黑色的烟柱具有 **"低反照率"(low albedo)**。下图展示了低反照率和高反照率体积介质的差异:左侧的烟含有大量粒子,而云由水滴构成 —— 这也是两者视觉差异的主要原因。当然,黑烟之所以呈现黑色,也因为它会吸收大量光线。 + +![](images/2026/02/08/20260208_131636_379.webp) + +总而言之,光线步进算法对于低反照率物体(如烟雾)的模拟效果尚可接受 —— 这类物体的外观主要由单次散射效应主导(如下图中橙色光线所示);但对于高反照率物体的模拟效果则很差 —— 这类物体的外观主要由多次散射效应主导(大多数脱离介质的光子都经过了多次相互作用,而非单次散射所假设的仅一次作用)。 + +![](images/2026/02/08/20260208_131636_688.webp) + +顺便一提,在对比烟雾和云时还需注意:烟雾通常是**各向同性**(isotropic)的,而云则表现出强烈的(前向)散射特性。某种程度上,我们可以将光线步进算法比作 "直接光照"(direct lighting):直接光照总比没有光照好(这是显而易见的),但显然不如同时包含直接光照和间接光照(indirect lighting)的场景渲染效果。使用光线步进算法时,我们完全忽略了间接光照部分 —— 如下例所示,间接光照对于生成照片级真实感图像至关重要。因此,光线步进算法无法捕捉这一效应是一个严重的问题。 + +![](images/2026/02/08/20260208_131637_233.webp) + +这带来了一个实际应用层面的问题:例如,要模拟云的外观,你必须向体积介质中注入更多光线(即在场景中添加额外光源)—— 这本质上是一种 "作弊" 手段,而非让计算机进行物理上准确的 "正确计算"。那么问题来了:替代方案是什么?如何才能实现 "正确计算"? + +### 基于随机的追踪方法 + +"正确计算" 的核心是让计算机模拟光子与介质的真实相互作用过程 —— 换句话说,模拟光子的随机游走行为。这类方法旨在追踪光子在体积介质中的传播路径,因此被称为 "追踪方法"(tracking methods)。这并非一种 "新" 方法:它于 20 世纪 60 年代被开发出来,用于模拟中子等粒子穿过板材的辐射过程。尽管该方法用途广泛、功能强大,但计算量也极大。如果你想自行深入了解相关主题,可以在互联网上搜索 "蒙特卡洛粒子输运"(Monte Carlo particle transport, MCPT)或 "蒙特卡洛光线 / 光子输运"(Monte Carlo light/photon transport)。我们在此不深入探讨该技术的细节:首先,我们已在本页面(蒙特卡洛模拟)提供了该方法的实际实现案例;其次,我们计划尽快(2022 年)撰写相关课程 —— 请关注 "高级 3D 渲染" 板块的更新(课程名称暂定为《体素路径追踪》)。目前,我们只需了解其核心思想:模拟光子在体积介质中的传播路径。其目标仍是求解体渲染方程: + +$$ +L(s) = \int_{s'=0}^s T(s')\big[\sigma_s L_s(s') \big]ds' + T(s)L(0) +$$ + +(关于蒙特卡洛方法的更多内容,请参阅《蒙特卡洛方法的数学基础》和《蒙特卡洛方法实践》)。与光线追踪类似,我们不会采用 "正向模拟"(即追踪光子从光源到观察者 / 传感器的传播路径),而是采用 "反向追踪"—— 从观察者到光源。粒子在介质中的传播路径可由一系列 "步长" 构成,每一步都包含 "距离" 和 "方向" 两个参数。我们将利用对介质本身的认知(尤其是其散射系数、吸收系数和相位函数),通过随机采样确定光子的步长和方向,从而模拟这一行为。如前所述,基于随机的蒙特卡洛模拟或积分方法计算量极大。你可能听说过 "delta 追踪"(delta tracking)等技术,它们可用于优化这一过程(但会增加代码复杂度)。delta 追踪也将在《体素路径追踪》课程中详细讲解。 diff --git a/docs/plan/毕设/二 体积渲染实践.md b/docs/plan/毕设/二 体积渲染实践.md new file mode 100644 index 00000000..2c089b73 --- /dev/null +++ b/docs/plan/毕设/二 体积渲染实践.md @@ -0,0 +1,924 @@ +# 二 体积渲染实践 + +# 一、3D密度场的体积渲染 + +![](images/2026/02/08/20260208_131605_063.webp) + +到目前为止,我们只学习了如何渲染均匀体积物体——即散射系数和吸收系数在空间中保持恒定的物体。这虽然可行,但略显单调,且与自然界中的实际情况并不相符。例如,观察蒸汽火车排出的烟柱,这类体积都是非均匀的,部分区域的不透明度高于其他区域。那么,我们该如何渲染非均匀体积物体呢? + +在现实世界中,我们会说吸收系数或散射系数随空间变化:吸收系数越高,体积越不透明;且散射系数和吸收系数的空间变化可以相互独立。不过,我们通常会选择一种更实用的方法:为特定体积物体设定恒定的散射系数和吸收系数,然后使用 **密度参数** 来调节体积在空间中的外观。可以将密度参数(在编程中通常是 float 或 double 类型的实数)视为 **随空间变化** 的量,此时我们可以进行如下处理: + +$$ +\sigma_s' = \sigma_s * density(p)\\ \sigma_t = (\sigma_s + \sigma_a) * density(p) +$$ + +其中,$\sigma_s'$ 是经空间变化的密度参数调制后的散射系数;比尔定律方程中使用的消光系数 $\sigma_t$(吸收系数与散射系数之和)也会被空间变化的密度参数调制;$density(p)$ 是一个函数,返回空间中点 $p$ 处的密度值。通过这种方式,我们可以生成诸如上图中火山烟柱之类的体积物体图像。 + +现在的问题是:如何生成这种密度场?主要有两种技术: + +* **程序化生成**:可以使用 3D 纹理(如佩林噪声函数)来程序化创建空间变化的密度场。 + +* **模拟生成**:也可以使用流体模拟程序(模拟烟雾等流体的运动)来生成空间变化的密度场。 + +本章将采用第一种方法;下一章将学习如何渲染流体模拟的结果。 + +## 使用噪声函数生成密度场 + +![](images/2026/02/08/20260208_131605_326.webp) + +*图 1:我们可以使用佩林噪声程序化生成密度场。该噪声函数以点为参数,返回该点在 \[-1,1] 范围内的噪声值。* + +本章将使用柏林噪声函数(Perlin noise function)程序化生成 3D 密度场。 + +什么是程序化噪声函数(此处特指佩林噪声函数)?从编程角度来说,它是一种在 3D 空间中程序化生成噪声图案的函数。我们可以利用这种图案生成密度随空间变化的密度场。该噪声函数接收一个空间点作为参数,返回该点处 3D 噪声纹理的值(通常是 float 或 double 类型的实数),其取值范围被限制在 \[-1,1] 之间。由于密度值只能是 0(无体积)或正数,因此需要对噪声函数的输出值进行裁剪或重映射,以获得正的密度值。在以下代码片段中,我们将噪声值从 \[-1,1] 重映射到 \[0,1]: + +```cpp +float density = (noise(pSample) + 1) * 0.5; +``` + +其中,pSample 是光线步进穿过体积时,相机光线上采样点的位置。 + +关于噪声函数,我们将使用肯·佩林(Ken Perlin)本人提供的改进版佩林噪声实现。 + +在本章中,我们假设你已熟悉该函数;如果不熟悉也无需过度担心,你只需知道:向该函数传入需要评估的 3D 空间点位置,它就会返回该点处 \[-1,1] 范围内的噪声值。以下是参考代码(完整实现可在源代码部分提供的文件中获取): + +```cpp +int p[512]; // 置换表(见源代码) +double fade(double t) { return t * t * t * (t * (t * 6 - 15) + 10); } +double lerp(double t, double a, double b) { return a + t * (b - a); } +double grad(int hash, double x, double y, double z){ + int h = hash & 15; + double u = h<8 ? x : y, + v = h<4 ? y : h==12||h==14 ? x : z; + return ((h&1) == 0 ? u : -u) + ((h&2) == 0 ? v : -v); +} +double noise(double x, double y, double z){ + int X = (int)floor(x) & 255, + Y = (int)floor(y) & 255, + Z = (int)floor(z) & 255; + x -= floor(x); + y -= floor(y); + z -= floor(z); + double u = fade(x), + v = fade(y), + w = fade(z); + int A = p[X ]+Y, AA = p[A]+Z, AB = p[A+1]+Z, + B = p[X+1]+Y, BA = p[B]+Z, BB = p[B+1]+Z; + return lerp(w, lerp(v, lerp(u, grad(p[AA ], x , y , z ), + grad(p[BA ], x-1, y , z )), + lerp(u, grad(p[AB ], x , y-1, z ), + grad(p[BB ], x-1, y-1, z ))), + lerp(v, lerp(u, grad(p[AA+1], x , y , z-1 ), + grad(p[BA+1], x-1, y , z-1 )), + lerp(u, grad(p[AB+1], x , y-1, z-1 ), + grad(p[BB+1], x-1, y-1, z-1 )))); +} +``` + +最后,以下是该函数在光线步进程序中的使用方式: + +```cpp +Color integrate(const Ray& ray, ...){ + float sigma_a = 0.1; + float sigma_s = 0.1; + float sigma_t = sigma_a + sigma_s; + ... + float transmission = 1; // 初始为完全透明 + for (size_t n = 0; n < numSteps; ++n) { + float t = tMin + stepSize * (n + 0.5); + Point p = ray.orig + ray.dir * t; + // 密度不再是恒定值,而是随空间变化 + float density = (1 + noise(p)) / 2; + float sampleAtt = exp(-density * sigma_t * stepSize); + // 全局透射率被采样点不透明度衰减 + transmission *= samplAtt; + ... + } +} +``` + +![](images/2026/02/08/20260208_131605_541.webp) + +*图 2:密度沿光线方向变化。* + +![](images/2026/02/08/20260208_131605_799.webp) + +*图 3:密度场由噪声函数生成的非均匀体积渲染结果。* + +与上一章中渲染均匀体积物体的程序相比,你可以看到此处的修改相当简单:我们将密度变量的声明移到了光线步进循环内部,使其不再是恒定值,而是随空间变化的参数。图 2 直观展示了这一过程:我们沿光线步进时对密度场进行采样(密度场仍由噪声函数生成),对于光线上的每个采样点,都以该采样点的位置作为输入参数评估噪声函数,并将结果作为该点的密度值。图 3 展示了将该方法应用于体积球体的渲染结果。 + +为了确保你理解这一过程,我们绘制了噪声函数在某段距离上的取值,以及基于该噪声函数计算的透射率值;同时,我们还绘制了恒定密度体积(绿色曲线)与非均匀密度体积(红色曲线)的比尔-朗伯定律曲线对比。如图所示,绿色曲线(恒定密度)完全平滑,而红色曲线(非均匀密度)则不然。需要注意的是:当噪声函数返回值接近 0 时,透射率基本保持恒定;当噪声函数返回值较高时,透射率急剧下降(体积密度更大)。这些都是预期结果,但直观展示有助于理解。 + +```cpp +float stepSize = 1. / 51.2; +float sigma_t = 0.9; +float t = 0; +float Thomogeneous = 1; +float Theterogeneous = 1; +for (int x = 0; x < 512; x++, t += stepSize) { + float noiseVal = powf((1 + noise(t, 0.625, 0)) / 2.f, 2); + float samplAttHeterogeneous = exp(-noiseVal * stepSize * sigma_t); + Theterogeneous *= samplAttHeterogeneous; + float sampleAttHomogeneous = exp(-0.5 * stepSize * sigma_t); + Thomogeneous *= sampleAttHomogeneous; + fprintf(stderr, "%f %f %f\n", t, Theterogeneous, Thomogeneous); +} +``` + +![](images/2026/02/08/20260208_131606_084.webp) + +但存在一个问题:这段代码可以正确计算体积的透射率值,但我们之前用于计算内散射贡献(还记得 Li 项吗?)的代码却无法直接使用。接下来,我们将解释原因,以及需要进行哪些修改才能使其适用于非均匀参与介质。 + +## 非均匀参与介质的内散射 + +![](images/2026/02/08/20260208_131606_354.webp) + +*图 4:光线穿过非均匀参与介质的示意图。* + +通过观察图 4,你应该能理解问题所在。对于均匀体积物体,计算光线贡献时,只需找到采样点到物体边界沿光线方向的距离(记为 Dl),然后结合该距离和体积消光系数(sigma\_t = sigma\_a + sigma\_s)应用比尔定律,即可得到光线穿过体积到达采样点后的剩余光量(透射光量)。这很简单: + +```cpp +Color lighRayContrib = exp(-Dl * sigma_t * density) * lightColor; +``` + +非均匀体积的问题在于,这种方法不再适用——因为密度沿光线方向也会变化(如图 4 所示)。需要注意的是:我们此处要解决的问题,与第 2 章中使用正向光线步进解决的问题并不相同。到目前为止,我们使用光线步进的目的是估计相机光线上的内散射项;而此处,光线步进技术将再次发挥作用,用于估计内散射项以及相机光线和光线在非均匀参与介质中的 **透射率**。尽管问题不同(**估计内散射项 vs 估计光线透射率**),但所使用的技术相同(此处特指正向光线步进,一种随机采样方法)。我们需要 **将光线划分为一系列小线段,假设每个线段长度(由步长定义的小体积元)内的密度是均匀的(微元思想)**,然后沿光线推进时,**将全局透射率值与每个采样点的透射率相乘**。伪代码实现如下: + +```cpp +// 计算非均匀介质中的光线透射率 +float transmission = 1; +float stepSize = Dl / numSteps; +for (n = 0; n < numSteps; ++n) { + float t = stepSize * (n + 0.5); + float sampleAtt = exp(-evalDensity(t) * stepSize * sigma_t); + transmission *= samplAtt; +} +``` + +将这段代码与上一章中沿光线从 t0 到 t1 推进时计算相机光线透射率的代码进行对比: + +```cpp +float sigma_t = sigma_a + sigma_s; +float density = 0.1; // 密度恒定,用于缩放sigma_t +float transparency = 1; // 初始化透明度为1 +for (int n = 0; n < ns; ++n) { + float t = isect.t1 - step_size * (n + 0.5); + vec3 sample_pos= ray_orig + t * ray_dir; // 采样点位置(步长中点) + // 使用比尔定律计算采样点透明度 + float sample_transparency = exp(-step_size * sigma_t * density); + // 用采样点透明度衰减全局透明度 + transparency *= sample_transparency; + // 内散射计算 + if (hitObject->intersect(sample_pos, light_dir, isect_vol) && isect_vol.inside) { + ... + result += ... + } + // 最终用采样点透明度衰减结果 + result *= sample_transparency; +} +``` + +这两段代码的核心逻辑相同。我们可以利用一个数学技巧(现在正是使用它的好时机): + +$$ +e^a * e^b = e^{a + b} +$$ + +观察代码可知,透射率值本质上是一系列指数函数的乘积。如果展开光线步进循环(代码片段 2),会得到如下形式: + +```cpp +// dx = 步长,noise(x)的取值范围为[0,1] +float t0 = dx * (0.5); // n = 0 +float t1 = dx * (1 + 0.5); // n = 1 +float t2 = dx * (2 + 0.5); // n = 2 +... +float transmission = exp(-dx * sigma_t * noise(t0)) * + exp(-dx * sigma_t * noise(t1)) * + exp(-dx * sigma_t * noise(t2)) * + ...; +``` + +利用我们刚刚学到的指数函数数学性质,可将代码重写为: + +```cpp +float tau = noise(t0) + noise(t1) + noise(t2) + ...; +float transmission = exp(-tau * sigma_t * dx); +``` + +换句话说,沿光线推进时(与沿相机光线推进完全相同),我们只需累加光线上每个采样点的密度值,然后利用该总和通过一次指数函数调用计算光线的衰减/透射率值(这确实能节省一些时间)。下图直观展示了这一概念。 + +> 从技术上讲,我们也可以对相机光线的透射率进行同样的优化,但请注意,在以下代码中,我们在沿相机光线推进时使用透射率值来衰减 Li 项。由于需要体积推进过程中的透射率中间值,因此我们不能像计算光线透射率那样,将密度值累加后在最后统一计算最终的光线透射率值。 + +```cpp +float transmission = 1; // set the camera ray transmission value (full transmission) +vec3 result = 0; // the camera ray radiance (light energy traveling from the volume to the eye) +for (n = 0; n < numSteps; ++n) { + float t = t0 + stepSize * (n + 0.5); + vec3 samplePos = ray.orig + t * ray.dir; + float sampleDensity = evalDensity(samplePos); + // we need this intermediate result to attenuate the Li term (see below) + transmission *= exp(-sampleDensity * sigma_t * stepSize); + // inscattering (Li(x)) + if (density > 0 && hit_object->intersect(...) { + float tau = 0; + for (nl = 0; nl < numStepsLight; ++nl) { + float tLight = stepSize * (nl + 0.5); + vec samplePosLight = samplePos + tLight * lightDirection; + tau += evalDensity(samplePosLight); + } + // calculate light ray transmission value at the very end + float lightRayAtt = exp(-tau * sigma_t * stepSize); + result += lightColor * lightRayAtt * sigma_s * ... * transmission; + } +} +``` + +![](images/2026/02/08/20260208_131606_602.webp) + +“tau” 这个名称并非随意选择——在学术文献中,它常被用来表示“光学深度”(optical depth)这一物理量。有两个希腊字母常被用于表示该物理量:tau($\tau$)或 rho($\rho$)。本章不会给出光学深度的正式定义(以免造成混淆),相关定义将在《体积渲染:总结、方程/理论》章节中详细说明。 + +就是这样!现在你已经掌握了渲染非均匀体积物体准确图像所需的全部知识。最后这幅图展示了特定噪声分布对应的透射率曲线。 + +![](images/2026/02/08/20260208_131606_846.webp) + +## 实用(且可运行)的实现 + +让我们对程序进行必要的调整,以演示该方法的实际应用。请记住,算法现在的工作流程如下: + +* **沿相机光线步进**:在相机光线上的每个采样点,估计该点的密度以计算采样点透射率,并估计内散射贡献。 + +* **沿光线步进**:此前我们只需沿相机光线步进,而现在还需要沿光线步进。对于均匀体积物体,我们直接沿相机光线步进即可估计内散射项;对于非均匀体积物体,沿相机光线步进的目的仍为估计内散射项(这一点没有变化),但还需要评估沿相机光线的密度项;同时,我们还需要沿光线步进,以评估这些光线上的密度函数。 + +换句话说,我们现在需要同时沿相机光线和光线步进,并在这些光线上的每个采样点评估密度函数(当前为柏林噪声函数)。这涉及大量运算,你会发现:将球体渲染为非均匀介质的耗时,远高于其均匀介质版本。 + +```cpp +// [注释] +// 该函数由integrate函数调用,用于评估非均匀体积球体在采样点p处的密度 +// 返回该3D位置处佩林噪声函数的值(已重映射到[0,1]范围) +// [/注释] +float eval_density(const vec3& p){ + float freq = 1; + return (1 + noise(p.x * freq, p.y * freq, p.z * freq)) * 0.5; +} + +vec3 integrate( + const vec3& ray_orig, + const vec3& ray_dir, + const std::vector>& spheres){ + ... + const float step_size = 0.1; + float sigma_a = 0.5; // 吸收系数 + float sigma_s = 0.5; // 散射系数 + float sigma_t = sigma_a + sigma_s; // 消光系数 + float g = 0; // 亨耶-格林斯坦非对称因子 + uint8_t d = 2; // 俄罗斯轮盘赌“概率”参数 + int ns = std::ceil((isect.t1 - isect.t0) / step_size); + float stride = (isect.t1 - isect.t0) / ns; + vec3 light_dir{ -0.315798, 0.719361, 0.618702 }; + vec3 light_color{ 20, 20, 20 }; + float transparency = 1; // 初始化透射率为1(完全透明) + vec3 result{ 0 }; // 初始化体积球体颜色为0 + // 主光线步进循环(正向,从t0推进到t1) + for (int n = 0; n < ns; ++n) { + // 采样点位置抖动 + float t = isect.t0 + stride * (n + distribution(generator)); + vec3 sample_pos = ray_orig + t * ray_dir; + // [注释] + // 评估采样点位置的密度(空间变化的密度) + // [/注释] + float density = eval_density(sample_pos); + float sample_attenuation = exp(-step_size * density * sigma_t); + transparency *= sample_attenuation; + // 内散射计算 + IsectData isect_light_ray; + if (density > 0 && + hit_sphere->intersect(sample_pos, light_dir, isect_light_ray) && + isect_light_ray.inside) { + size_t num_steps_light = std::ceil(isect_light_ray.t1 / step_size); + float stide_light = isect_light_ray.t1 / num_steps_light; + float tau = 0; + // [注释] + // 沿光线步进:将密度值累加到tau变量中 + // [/注释] + for (size_t nl = 0; nl < num_steps_light; ++nl) { + float t_light = stide_light * (nl + 0.5); + vec3 light_sample_pos = sample_pos + light_dir * t_light; + tau += eval_density(light_sample_pos); + } + float light_ray_att = exp(-tau * stide_light [... 655 chars omitted ...] +``` + +在该实现中,相机光线和光线使用的步长相同——但这并非必须。为了提高速度,你可以使用更大的步长来估计光线的透射率值。此外,由于我们使用了程序化纹理,可能会遇到滤波问题:如果采样噪声函数的频率过低,可能会丢失程序化纹理的细节,最终导致走样问题。同样,这是一个滤波问题,我们此处不深入探讨,但需要注意:步长、噪声频率和图像分辨率在采样层面是相互关联的。 + +你可能会感到惊讶:程序的输出结果(右图)看起来并不太像云层。然而,从噪声图案图像(左图)可以看出,默认情况下噪声图案的“块状结构”相当平滑,因此体积的外观也较为平滑。要生成类似云层的程序化噪声,需要通过多种方式调整噪声函数的结果,以获得视觉上更有趣的效果(如下文所示)。 + +以下是一些你可以立即尝试的简单变体:去除噪声函数的负值(左图),以及取噪声函数的绝对值(右图)。“衰减参数”(falloff parameter)的说明见下文。 + +尽管效果不够惊艳,但正是这项技术被用于制作 1997 年电影《超时空接触》(Contact)开场片段中的壮观体积特效。这些图像由索尼图形图像运作公司(Sony Picture Imageworks)使用皮克斯(Pixar)的渲染器渲染生成。在当时,这个片段是一项巨大的技术挑战。如前所述,他们使用的技术与本章介绍的方法相同——不同之处在于,他们使用了一些几何图形(而非基础球体)来定义体积物体的形状,并使用分形图案赋予星云类似云层的纹理。我们将在本章的最后一节(生产级体积渲染)中触及前一种技术;至于类似云层的纹理,让我们看看可以如何实现…… + +## 调整密度函数(创建更有趣的外观和动画) + +编写光线步进器是一回事,创建类似云层的程序化纹理则是另一回事:前者是科学,后者更偏向艺术——利用一系列数学工具塑造程序化纹理,并花费大量时间调整参数,直到获得满意的结果。我们的目标并非创建令人惊叹的逼真图像,而是为你提供工具和基础:首先帮助你理解原理,其次让你能够将这些工具重组为更复杂的系统(如果你愿意的话),从而制作出“惊艳”的图像。不过,这部分工作就交给你了……如果你创作了有趣的作品,记得和我们分享! + +以下是一些可用于创建更类似云层的“球体”的技巧——这只是众多工具中的一小部分。 + +### 平滑步进函数(Smoothstep) + +平滑步进函数是你已经熟悉的函数,我们已在多个场景中使用过它(包括噪声函数)。它能在两个值之间创建“平滑”的过渡。以下是该函数的一种可能实现: + +```cpp +float smoothstep(float lo, float hi, float x){ + float t = std::clamp((x - lo) / (hi - lo), 0.f, 1.f); + return t * t * (3.0 - (2.0 * t)); +} +``` + +我们可以使用该函数在球体边界附近创建衰减效果。为此,需要修改 `eval_density` 函数,向其传入球体中心和半径作为参数。通过这种方式,我们可以计算采样点到球体中心的归一化距离,并利用该值调整球体的密度,如下所示: + +```cpp +float eval_density(const vec3& sample_pos, const vec3& sphere_center, const float& sphere_radius){ + vec3 vp = sample_pos - sphere_center; + float dist = std::min(1.f, vp.length() / sphere_radius); + float falloff = smoothstep(0.8, 1, dist); // 当距离从0.8到1时,平滑过渡从0到1 + return (1 - falloff); +} +``` + +这项技术适用于在体积到达球体边界前使其渐隐。我们使用平滑步进函数控制衰减开始的位置(距离边缘的距离)——对于衰减效果,过渡的终点应设为 1。 + +### 分形布朗运动(fBm) + +fBm(全称 Fractal Brownian Motion,在早期也被称为“等离子体纹理”或“混沌纹理”)是一种分形图案,由多个程序化噪声层叠加而成,不同层的频率和振幅各不相同。你可以在“程序化生成”章节的课程中找到关于该图案的更多信息。 + +典型的 fBm 程序化纹理代码可按如下方式构建: + +```cpp +float eval_density(const vec3& p, ...){ + vec3 vp = p - sphere_center; + ... + // 构建fBm分形图案 + float frequency = 1; + vp *= frequency; // 必要时缩放初始点坐标 + size_t numOctaves = 5; // 层数 + float lacunarity = 2.f; // 连续频率之间的间隔 + float H = 0.4; // 分形增量参数 + float value = 0; // fBm的结果(用于密度计算) + for (size_t i = 0; i < numOctaves; ++i) { + value += noise(vp) * powf(lacunarity, -H * i); + vp *= lacunarity; + } + // 裁剪负值 + return std::max(0.f, value) * (1 - falloff); +} +``` + +构建 fBm 图案只需两行核心代码(循环叠加层)。基于这个基础版本,可以衍生出许多变体——例如取噪声函数的绝对值(一种称为“湍流”的图案)等。如果你想了解更多关于该主题的内容(以及如何正确滤波该图案),请查看“程序化生成”章节。 + +### 偏移(Bias) + +偏移用于改变中点(0.5)的位置,同时保持 0 和 1 的值不变。 + +```cpp +float eval_density(...) { + float bias = 0.2; + float exponent = (bias - 1.0) / (-bias - 1.0); + // 假设指数大于0 + return powf(noisePattern, exponent); +} +``` + +### 利用图元局部坐标系旋转噪声图案 + +在早期(随着计算能力的提升,流体模拟成为主流之前),另一种常用技术是在体积图元(球体、立方体等)内部动画化噪声图案。我们传入密度函数的采样点位置是在世界空间中定义的,但我们也可以在依附于球体的坐标系中定义该点位置——换句话说,将采样点从世界空间转换到物体空间。要在球体坐标系中定义采样点,只需执行以下操作: + +```cpp +vec3 sample_object_space = sample_pos - center; +``` + +更通用的解决方案是使用矩阵变换球体图元:通过物体到世界矩阵的逆矩阵,将采样点从世界空间转换到球体的局部坐标系。不过,为了简化示例程序,我们并未使用矩阵——但你可以利用 Scratchapixel 上提供的信息轻松实现这一点。 + +这项技术的实用价值在于:当我们移动球体时,在球体局部坐标系中定义的点坐标不会改变。这可以确保噪声图案始终“附着”在球体上,无论球体如何变换——类似你在手指间滚动的玻璃弹珠上的纹理。在我们选择的示例中(尽管与我们刚才解释的略有不同,但概念和结果一致):我们将在物体空间中围绕球体的 y 轴旋转采样点(更好的解决方案是使用物体到世界矩阵旋转球体,然后通过世界到物体矩阵将采样点从世界空间转换到物体空间,但我们在此处为了偷懒,直接在物体空间中旋转点)。这样,我们可以看到分形图案也随之旋转,有点像观察旋转的玻璃弹珠。通过这种方法,还可以应用更复杂的(线性或非线性)变形。 + +```cpp +float eval_density(const vec3& p, const vec3& center, const float& radius){ + // 将点从世界空间转换到物体空间 + vec3 vp = p - center; + vec3 vp_xform; + // 在物体空间中旋转采样点(frame是全局变量,范围从1到120) + float theta = (frame - 1) / 120.f * 2 * M_PI; + vp_xform.x = cos(theta) * vp.x + sin(theta) * vp.z; + vp_xform.y = vp.y; + vp_xform.z = -sin(theta) * vp.x + cos(theta) * vp.z; + float dist = std::min(1.f, vp.length() / radius); + float falloff = smoothstep(0.8, 1, dist); + float freq = 0.5; + size_t octaves = 5; + float lacunarity = 2; + float H = 0.4; + vp_xform *= freq; + float fbmResult = 0; + float offset = 0.75; + for (size_t k = 0; k < octaves; k++) { + fbmResult += noise(vp_xform.x , vp_xform.y, vp_xform.z) * pow(lacunarity, -H * k); + vp_xform *= lacunarity; + } + return std::max(0.f, fbmResult) * (1 - falloff); +} +``` + +注意:现在我们可以清晰地看到分形图案的 3D 结构。 + +![](images/2026/02/08/20260208_131607_161.webp) + +### 还有更多技巧…… + +“程序化”技巧的列表可以不断延伸:位移(使用噪声函数位移体积的边缘)、不同类型的噪声(波状噪声、时空噪声——一种可动画的噪声等)。我们将在本课程的未来修订版中扩展这个列表。 + +## 我们学到了什么? + +关于本课程所学技术的总结,见最后一章。 + +到目前为止,你已经可以使用光线步进渲染单散射非均匀体积物体——这已经是一项重大成就。此外,你现在应该清楚:光线步进技术的核心是将体积物体分解为步长定义的小体积元,该技术之所以有效,是因为我们假设这些微小的体积元(或采样点)足够小,可以视为均匀的。简而言之,你将非均匀物体分解为多个“小砖块”,每个砖块都可视为“均匀的”——尽管不同砖块的属性可能不同,有点像用乐高积木搭建物体。 + +# 二、基于 3D 体素网格的体渲染详解 + +学完本章后,你将能够生成以下序列图像: + +![](images/2026/02/08/20260208_131607_482.webp) + +如前一章所述,创建密度场有两种技术:过程式生成或使用流体模拟软件。本章我们将聚焦后者。请注意,本课程不会讲解流体模拟的工作原理,而是学习如何渲染流体模拟生成的数据——流体模拟的相关内容我们会在后续课程中介绍,敬请期待。 + +## 步骤 1:使用 3D 网格存储密度值 + +模拟流体(烟雾、水等)的技术有很多,但通常在模拟过程中的某个阶段,结果会被存储在 3D 网格中。为简化教学,本章假设这些网格在三个维度上的分辨率相同(例如 x、y、z 坐标均为 32×32×32),且分辨率为 2 的幂(8、16、32、64、128 等)——这仅为教学方便,实际应用中无需严格遵循。此外,本章暂不涉及网格变换,因此假设网格是轴对齐的立方体:我们可将网格视为轴对齐包围盒(AABB),这会简化光线-立方体相交测试。若要支持非轴对齐网格,只需按照本课程讲解的方法,通过网格的世界空间到对象空间的变换矩阵,将相机光线转换到网格的对象空间即可。 + +![](images/2026/02/08/20260208_131607_741.webp) + +*图 1:存储密度值的 8×8×8 网格* + +网格非常适合模拟流体运动:网格的体素(构成网格的小体积元素,也可称为“单元格”)会被赋予初始密度(可理解为填充烟雾),随着时间推移,密度会在相邻体素间传播。密度在体素间的移动遵循 **纳维-斯托克斯方程(Navier-Stokes equation)**——这一主题同样留到后续课程讲解。本章你只需了解:流体模拟的结果存储在由体素组成的 3D 网格中,每个体素存储一个密度值(0 或大于 0 的数值),代表“填充”该体素体积的密度。**3D 网格之于流体模拟,就如同位图之于图像,密度场被量化处理。** 在任何编程语言中,定义存储密度值的 3D 网格都相对简单,但本章末尾会探讨一些需要注意的细节。 + +除了网格分辨率(每个维度的体素数量,如 32×32×32),我们还需定义网格在世界空间中的尺寸(即场景中对象的大小)。实现方式有多种,为方便起见,我们通过定义网格在世界空间中的最小边界和最大边界(或范围)来确定,例如 (-2,-2,-2) 和 (2,2,2)。需注意,由于目前我们的网格是立方体,边界值不必相对于世界原点对称,但三个维度的世界空间尺寸必须相同:例如 (0.2,0.2,0.2) 与 (10.2,10.2,10.2) 是合法的,而 (-1.2,2.2,3.2) 与 (8.2,4.2,7.2) 则不合法。这种定义方式的优势在于,最小和最大边界可直接代入光线-立方体相交检测程序(我们在《极简光线追踪器:渲染简单图形(球体、立方体、圆盘、平面等)》课程中已学习过)。因此,我们已经掌握了计算任何与立方体相交的光线的 t0 和 t1 值的方法(与球体基元的计算方式类似)。 + +你可以修改前几章的代码,将渲染球体改为渲染立方体,同时使用矩阵从更有趣的视角渲染场景。最终应得到类似以下的代码: + +```cpp +struct Grid { + float *density; + size_t resolution = 128; // 分辨率 + Point bounds[2] = { (-30,-30,-30), (30, 30, 30) }; // 世界空间边界 +}; + +// 光线-立方体相交检测 +bool rayBoxIntersect(const Ray& ray, const Point bounds[2], float& t0, float& t1){ + ... + return true; +} + +// 积分计算(光线步进核心) +void integrate(const Ray& ray, const Grid& grid, Color& radiance, Color& transmission){ + Vector lightDir(-0.315798, 0.719361, 0.618702); // 光源方向 + Color lightColor(20); // 光源颜色 + float t0, t1; + if (rayBoxIntersect(ray, grid.bounds, t0, t1)) { // 光线与网格包围盒相交 + // 从t0到t1执行光线步进 + radiance = ...; // 辐射亮度 + transmission = ...; // 透射率 + } +} + +// 相机到世界空间的变换矩阵 +Matrix cameraToWorld{ 0.844328, 0, -0.535827, 0, -0.170907, 0.947768, -0.269306, 0, 0.50784, 0.318959, 0.800227, 0, 83.292171, 45.137326, 126.430772, 1 }; + +int main(){ + Grid grid; + // 分配内存以读取缓存文件中的数据 + size_t numVoxels = grid.resolution * grid.resolution * grid.resolution; // 体素总数 + grid.density = new float[numVoxels]; // 也可使用unique_ptr管理内存(示例程序采用此方式) + std::ifstream cacheFile; + cacheFile.open("./cache.0100.bin", std::ios::binary); // 打开二进制缓存文件 + // 读取密度值到内存 + cacheFile.read((char*)grid.density, sizeof(float) * numVoxels); + Point origin(0); // 光线原点 + for (帧中的每个像素) { + Vector rayDir = ...; // 计算光线方向 + Ray ray; + ray.orig = origin * cameraToWorld; // 转换原点到世界空间 + ray.dir = rayDir * cameraToWorld; // 转换方向到世界空间 + Color radiance = 0, transmission = 1; + integrate(ray, grid, radiance, transmission); // 执行光线步进积分 + pixelColor = radiance; // 像素颜色 = 辐射亮度 + pixelOpacity = 1 - transmission; // 像素不透明度 = 1 - 透射率 + } + // 释放内存 + delete[] grid.density; +} +``` + +目前无需过多关注缓存文件的内容(后续会详细说明)。从上述代码可以看出,核心操作是:创建连续的内存块存储与体素数量相等的浮点型密度值,然后将磁盘文件中的数据加载到内存中(第 36 行),逻辑十分简洁。 + +**预期效果** + +![](images/2026/02/08/20260208_131607_977.webp) + +这是你应该得到的图像。现在我们已经明确:将使用 3D 网格存储密度场数据,网格具有固定分辨率和尺寸,且已掌握光线与网格包围盒的相交点计算方法。接下来,我们将学习如何在光线步进过程中读取网格的密度值。 + +## 步骤 2:在网格中执行光线步进 + +如《光线追踪加速结构》课程所述,使用网格作为加速结构较为复杂:需要找到光线相交的所有网格单元格,再判断每个单元格中的几何体(三角形)是否与光线相交。虽然不算特别复杂,但也绝非易事(尤其是追求高效时)。不过好消息是,体渲染中的光线步进完全不需要这一过程! + +![](images/2026/02/08/20260208_131608_252.webp) + +光线步进的核心是关注光线上的采样点(如下图所示)。由于我们知道这些采样点的位置,只需确定它们所在的网格体素,然后读取该体素的密度值即可——无需遍历网格,极其简单。接下来,我们将学习如何从采样点映射到体素坐标,并通过坐标从内存中读取密度值。 + +## 步骤 3:光线步进过程中读取密度值 + +与前几章的代码相比,我们只需修改 `evalDensity` 函数:不再通过过程式噪声函数计算空间中任意点的密度,而是从网格中读取对应位置的密度值——这是一个极小的改动,其余逻辑完全不变。 + +通常情况下,采样点必然位于网格边界内(因为采样范围在光线与立方体的相交点之间),因此无需额外判断。但为了代码健壮性,建议添加采样点坐标与网格边界的校验,避免内存访问越界。 + +从网格中读取密度值的操作通常称为“查找(lookup)”。在 OpenVDB(一款高效存储和读取体数据的库)中,这一操作被称为“**探测(probing)**”(较为少见)。具体实现步骤如下: + +![](images/2026/02/08/20260208_131608_486.webp) + +**采样点到体素坐标的转换流程** + +采样点最初定义在世界空间中,需将其转换为网格的离散坐标,步骤如下: + +* **世界空间到对象空间转换**:将采样点坐标减去网格的最小边界值,得到相对于网格“左下角”的坐标。 + +* **归一化**:将对象空间坐标除以网格尺寸(示例中为 10),得到归一化坐标(范围在 \[0,1] 之间)。 + +* **体素空间映射**:将归一化坐标乘以网格分辨率,得到体素空间坐标(仍为浮点型)。为了读取内存中的密度值,需将浮点型坐标四舍五入为整数(即体素索引)。需注意:体素空间坐标的最大值不能超过“分辨率-1”(避免归一化坐标恰好为 1 时索引越界)。完成以上步骤后,即可读取对应位置的密度值。 + +**2D 示例说明** + +如上图的 2D 示例所示,采样点的体素空间坐标为 (3.36, 3.28)。此时,该体素在内存中的索引计算方式为:y 坐标的整数部分(3)乘以网格分辨率(8),再加上 x 坐标的整数部分(3),即 3×8+3=27。 + +**代码实现(最近邻插值)** + +```cpp +float evalDensity(const Grid* grid, const Point& p){ + Vector gridSize = grid->bounds[1] - grid->bounds[0]; // 计算网格尺寸 + Vector pLocal = (p - grid->bounds[0]) / gridSize; // 世界空间 → 对象空间(归一化前) + Vector pVoxel = pLocal * grid->resolution; // 归一化 → 体素空间 + // 取浮点坐标的整数部分(使用floor避免负索引) + int xi = static_cast(std::floor(pVoxel.x)); + int yi = static_cast(std::floor(pVoxel.y)); + int zi = static_cast(std::floor(pVoxel.z)); + // 最近邻插值:直接读取对应体素的密度值 + return grid->density[(zi * grid->resolution + yi) * grid->resolution + xi]; +} +``` + +**关键说明** + +与 Perlin 噪声中将点转换到晶格空间的逻辑类似,此处使用 `std::floor` 函数而非直接强制类型转换,是为了避免归一化坐标略小于 0 时(后续会说明原因),索引变为 -1 导致内存访问错误—— `std::floor` 会确保负坐标的索引为 0,从而返回 0 密度值。 + +这种方法称为“最近邻插值(nearest-neighbor interpolation)”:本质是直接获取采样点所在体素的密度值,并未进行插值计算。后续我们会学习其他插值方法,但所有方法的第一步都是计算采样点所在的体素坐标。 + +现在,你已经具备了渲染流体模拟结果的全部条件(源代码区提供了多个流体缓存文件,可与示例程序配合使用)。以下是最近邻插值的渲染效果: + +![](images/2026/02/08/20260208_131608_717.webp) + +**缓存文件格式说明** + +为了避免依赖外部库,我们没有使用 OpenVDB(或其前身 Field3D)等工业级格式存储网格数据,而是将流体模拟结果以最简洁的二进制格式存储,代码如下: + +```cpp +// 二进制缓存文件的写入逻辑 +for (size_t z = 0; z < grid.res; ++z) { + for (size_t y = 0; y < grid.res; ++y) { + for (size_t x = 0; x < grid.res; ++x) { + float density = grid.density[x][y][z]; + cacheFile.write((char*)&density, sizeof(float)); + } + } +} +``` + +OpenVDB 的核心原理与此类似,但支持压缩、多分辨率和稀疏体(本章末尾会简要介绍)。我们的方案优势在于简洁直观,非常适合教学场景。 + +![](images/2026/02/08/20260208_131608_935.webp) + +需特别注意:上述代码中,体素沿 z 轴“从后到前”存储(切片方式)。在右手坐标系中,网格的最小边界位于“后方左下角”(下图中的品红色体素),体素空间中第一个体素的坐标为 (0,0,0);在 8×8×8 的网格示例中,最后一个体素(z 轴正方向前方右上角)的坐标为 (7,7,7)(下图中的黄色体素),索引为 8×8×8-1=511(0-based 索引)。 + +**体素索引计算** + +若要通过体素空间坐标(xi, yi, zi)计算其在内存数组中的索引,公式如下: + +```cpp +size_t index = (zi * gridResolution + yi) * gridResolution + xi; +``` + +这是最基础的实现方式,但图像质量可通过“三线性插值”进一步提升。 + +## 步骤 4:通过三线性插值优化结果 + +其核心思路如下:一个体素代表单个密度值,但采样点可能位于任意给定体素体积内的任意位置。因此,合理的假设是该位置的密度值应在某种程度上混合采样点所在体素的密度,以及与之直接相邻的体素的密度值(如下图所示)。 + +![](images/2026/02/08/20260208_131609_154.webp) + +对于三线性插值,我们只需混合 8 个体素的值。具体该如何混合?方法很简单:计算采样点到这 8 个体素中每一个体素的距离,并利用这些距离来加权每个体素对最终结果的贡献度。 + +> 这个过程本质上是三维空间中的线性插值。我们用于插值两个值的公式为 $a * (1 - weight) + b * weight$,其中 $weight$ 的取值范围为 0 到 1。在二维空间中,该过程称为双线性插值,需要 4 个像素;在三维空间中,我们称之为三线性插值,需要 8 个体素。请注意,用于在 a 和 b 之间插值的公式被称为插值函数(interpolant)。在线性插值的情况下,插值函数是一阶多项式。 + +我们假设存储在某个体素中的密度值,是当采样点恰好位于该体素正中心时应取的值。由于三线性插值方案的特性,要得到这一结果,我们需要将体素空间中的采样位置偏移 -0.5。我们先看代码,再解释其工作原理。 + +```cpp +float evalDensity(const Grid* grid, const Point& p){ + Vector gridSize = grid->bounds[1] - grid->bounds[0]; + Vector pLocal = (p - grid->bounds[0]) / gridSize; + Vector pVoxel = pLocal * grid->baseResolution; + Vector pLattice(pVoxel.x - 0.5, pVoxel.y - 0.5, pVoxel.z - 0.5); // 红色高亮行 + int xi = static_cast(std::floor(pLattice.x)); + int yi = static_cast(std::floor(pLattice.y)); + int zi = static_cast(std::floor(pLattice.z)); + float weight[3]; + float value = 0; + // 三线性插值 + for (int i = 0; i < 2; ++i) { + weight[0] = 1 - std::abs(pLattice.x - (xi + i)); + for (int j = 0; j < 2; ++j) { + weight[1] = 1 - std::abs(pLattice.y - (yi + j)); + for (int k = 0; k < 2; ++k) { + weight[2] = 1 - std::abs(pLattice.z - (zi + k)); + value += weight[0] * weight[1] * weight[2] * grid->operator()(xi + i, yi + j, zi + k); + } + } + } + return value; +} +``` + +接下来我们分析这段代码的工作方式及背后的原因。 + +![](images/2026/02/08/20260208_131609_471.webp) + +在上图中,展示了两种插值技术。左上角是最近邻插值法的示例,原理非常简单:我们有 4 个体素(二维场景下,三维则为 8 个),采样点(蓝色圆点)落在其中一个体素内,因此采样点直接采用该体素中存储的密度值。 + +三线性插值则稍复杂一些。你可能会认同:如果采样点恰好位于四个体素的交叉中心,那么我们应该返回这四个体素中存储的密度值的平均值。也就是说,在这个特定示例中,体素密度值的总和需除以 4: +$result = (0.9 + 0.14 + 0.08 + 0.63) / 4$ +但这仅适用于采样点恰好位于四个体素交叉点的特殊情况,因此我们需要一个通用的解决方案。 + +首先(稍后解释为何需要这么做),我们需要将采样点在体素空间中偏移半个体素的距离:(-0.5, -0.5, -0.5)。以采样点恰好位于四个体素交叉中心的示例来说,应用偏移后,采样点会落在左下角体素的正中心。接下来,我们计算该点到每个体素边界的距离。在我们的二维示例图中,这一距离表现为 dx0(采样点 x 坐标到左下角体素 x 坐标 x0 的距离)、dy0(采样点 y 坐标到左下角体素 y 坐标 y0 的距离)、dx1(采样点 x 坐标到右上角体素 x 坐标 x1 的距离)和 dy1(采样点 y 坐标到右上角体素 y 坐标 y1 的距离)。这类距离在技术上被称为曼哈顿距离。 + +> 曼哈顿距离:沿直角坐标轴测量的两点间距离。在平面中,若 p1 坐标为 (x1, y1),p2 坐标为 (x2, y2),则曼哈顿距离为 $|x1 - x2| + |y1 - y2|$。 + +实际应用中,我们只需用到 dx0、dy0 和 dz0 即可(如下文所示)。以下再次梳理三线性插值的核心思路(若想了解更完整的解释,可参考专门讲解插值的章节)。 + +我们有一个 2×2×2 的体素块,将其命名为 v000、v100(向右移动 1 个体素)、v010(向上移动 1 个体素)、v110(向右 1 个、向上 1 个)、v001(向前移动 1 个体素)、v101(以此类推)、v011 和 v111。插值的思路是:先以 x0 为权重,对 v000-v100、v010-v110、v001-v101、v011-v111 进行线性插值,得到 4 个值;再以 y0 为权重,将这 4 个值两两线性插值,得到 2 个值;最后以 z0 为权重,对这 2 个值进行线性插值,得到最终结果。请注意,无论先以 x0、y0 还是 z0 开始前 4 次线性插值,只要后续每次插值都使用不同维度的权重,结果都不会受影响。记住,我们的线性插值函数为(原文公式缺失),其中(参数)为权重。用代码表示如下: + +```cpp +float result = + (1 - z0) * ( // 蓝色部分 + (1 - y0) * (v000 * (1 - x0) + v100 * x0) + // 绿色和红色部分 + y0 * (v010 * (1 - x0) + v110 * x0) // 绿色和红色部分 + ) + + z0 * ( // 蓝色部分 + (1 - y0) * (v001 * (1 - x0) + v101 * x0) + // 绿色和红色部分 + y0 * (v011 * (1 - x0) + v111 * x0)); // 绿色和红色部分 +``` + +希望这样的代码排版能帮助你理解三层嵌套的插值结构:包含 4 次(红色)+ 2 次(绿色)+ 1 次(蓝色)插值操作。若我们将 (1-x0)、(1-y0)、(1-z0)、x0、y0、z0 分别替换为 wx0、wy0、wz0、wx1、wy1、wz1,展开并重新整理上述代码片段(片段 2)中的项,可得到: + +```cpp +float result = + v000 * wx0 * wy0 * wz0 + + v100 * wx1 * wy0 * wz0 + + v010 * wx0 * wy1 * wz0 + + v110 * wx1 * wy1 * wz0 + + v001 * wx0 * wy0 * wz1 + + v101 * wx1 * wy0 * wz1 + + v011 * wx0 * wy1 * wz1 + + v111 * wx1 * wy1 * wz1; +``` + +这正是代码片段 1 中的逻辑(尽管片段 1 中权重是在嵌套循环中实时计算的)。若以二维示例图中 dx0 = dy0 = 0.5 的情况代入计算,可得: + +```cpp +result = +0.9 * (1-dx0) * (1-dy0) + 0.14 * dx0 * (1-dy0) + 0.08 * (1-dx0) * dy0 + 0.63 * dx0 * dy0 = +0.9 * 0.25 + 0.14 * 0.25 + 0.08 * 0.25 + 0.63 * 0.25 +``` + +这正是我们期望的结果。由此可见,三线性插值(二维场景下为双线性插值)是有效的。你现在也能理解为何需要将采样点在体素空间中偏移 -0.5——这是让数学计算成立的必要条件。为了验证这一点,不妨考虑采样点恰好位于体素正中心的情况(偏移前):应用偏移后,该点会落在体素的左下角(二维场景下),此时 dx0 = dy0(=dz0)=0,而其他所有距离均为 1。代入计算可得: + +```cpp +float result = grid->density(voxelX, voxelY, voxelZ) * (1-0) * (1-0) * (1-0) + + 0 + // 0 * (1-0) * (1-0) + 0 + // (1-0) * 0 * (1-0) + 0 + // 0 * 0 * (1-0) + 0 + // (1-0) * (1-0) * 0 + 0 + // 0 * (1-0) * 0 + 0 + // (1-0) * 0 * 0 + 0; // 0 * 0 * 0 +``` + +换句话说,该采样点返回的值就是该体素中存储的值(若偏移前采样点位于左下角体素正中心,在我们的示例中即为 0.9),这完全符合预期。 + +以上就是三线性插值的全部原理。接下来我们对比其与最近邻插值法的结果差异。 + +![](images/2026/02/08/20260208_131609_754.webp) + +可以看到,**右侧使用三线性插值渲染的缓存图像更平滑**。但这种优化是有代价的:使用该方法时,渲染时间会显著增加(相较于最近邻插值法)。在未做优化的情况下,三线性插值的耗时约为最近邻查找的 5 倍。 + +## 现在你可以阅读其他开发者的代码了——以 OpenVDB 为例: + +```cpp +template inline bool BoxSampler::probeValues(ValueT (&data)[N][N][N], const TreeT& inTree, Coord ijk) { + bool hasActiveValues = false; + hasActiveValues |= inTree.probeValue(ijk, data[0][0][0]); //i, j, k + ijk[2] += 1; + hasActiveValues |= inTree.probeValue(ijk, data[0][0][1]); //i, j, k + 1 + ijk[1] += 1; + hasActiveValues |= inTree.probeValue(ijk, data[0][1][1]); //i, j+1, k + 1 + ijk[2] -= 1; + hasActiveValues |= inTree.probeValue(ijk, data[0][1][0]); //i, j+1, k + ijk[0] += 1; + ijk[1] -= 1; + hasActiveValues |= inTree.probeValue(ijk, data[1][0][0]); //i+1, j, k + ijk[2] += 1; + hasActiveValues |= inTree.probeValue(ijk, data[1][0][1]); //i+1, j, k + 1 + ijk[1] += 1; + hasActiveValues |= inTree.probeValue(ijk, data[1][1][1]); //i+1, j+1, k + 1 + ijk[2] -= 1; + hasActiveValues |= inTree.probeValue(ijk, data[1][1][0]); //i+1, j+1, k + return hasActiveValues; +} +template inline ValueT BoxSampler::trilinearInterpolation(ValueT (&data)[N][N][N], const Vec3R& uvw) { + auto _interpolate = [](const ValueT& a, const ValueT& b, double weight) + { + const auto temp = (b - a) * weight; + return static_cast(a + ValueT(temp)); + }; + // 三线性插值: + // 使用周围8个晶格点的值构造最终结果。 + // result(x,y,z) = + // v000 (1-x)(1-y)(1-z) + v001 (1-x)(1-y)z + v010 (1-x)y(1-z) + v011 (1-x)yz + // + v100 x(1-y)(1-z) + v101 x(1-y)z + v110 xy(1-z) + v111 xyz + return _interpolate( + _interpolate( + _interpolate(data[0][0][0], data[0][0][1], uvw[2]), + _interpolate(data[0][1][0], data[0][1][1], uvw[2]), + uvw[1]), + _interpolate( + _interpolate(data[1][0][0], data[1][0][1], uvw[2]), + _interpolate(data[1][1][0], data[1][1][1], uvw[2]), + uvw[1]), + uvw[0]); +} +template inline bool [... 428 chars omitted ...] +``` + +sample() 方法首先通过 probeValues 方法获取 8 个体素中存储的值,随后在 trilinearInterpolation 方法中按上述逻辑进行插值。\_interpolate 函数本质上就是线性插值(在代码中更常被称为 lerp)。 + +## 体数据缓存的进阶内容 + +我们在此列出一系列值得参考的主题。为控制本章篇幅,暂不展开详述。这些主题的大部分内容将在本章后续修订版本中补充,或在独立章节中讲解。 + +### 其他插值方案:三次插值与滤波核 + +如前所述,线性插值函数是一阶多项式。我们也可使用更高阶的多项式以获得更平滑的结果,例如三次插值。在二维场景下,双三次插值需要采样 4×4 个像素;在三维场景下,则需要 $2^4 = 64$ 个体素。可想而知,结果会更平滑,但渲染时间也会相应增加。 + +你也可以使用滤波核(类似于图像滤波中使用的三角核、Mitchell 核或高斯滤波核)。与图像处理类似,滤波核的范围越大,处理耗时越长。 + +这两种技术将在本章后续修订版本中完整讲解。 + +### 密度之外的附加数据存储 + +生产环境中使用的体数据缓存格式通常支持在缓存中存储密度之外的任意通道数据,例如 **温度**(用于渲染火焰)、**速度**(用于渲染三维运动模糊)等。 + +### 滤波与砖块映射(Brick Map) + +若你为生产环境渲染体数据缓存,那么滤波和 LOD(细节层次)是需要重点关注的问题。体数据缓存渲染面临的问题与纹理渲染类似:纹理有固定分辨率(如 512、1024 像素等),若从极远的距离渲染贴有该纹理的物体,物体在图像中仅占几个像素;当物体或相机移动时,每帧渲染都会用到纹理中不同的像素/纹素,导致纹理在帧与帧之间出现抖动(轻则如此,重则直接呈现噪点效果)。为缓解这一问题,我们会生成原始纹理的低分辨率版本并与原纹理数据一起存储,这些低分辨率版本被称为多级纹理(mipmap)。当物体距离较远(在图像中尺寸较小)时,使用低分辨率纹理可消除这种噪点(技术上称为走样/aliasing)。我们暂未深入讲解 mipmap,但很快会展开。 + +如果你已了解 mipmap 的概念、用途及生成方法,那么需要知道:二维纹理的滤波问题同样存在于三维缓存(或三维纹理)中。因此,我们可将 mipmap 方法适配到三维缓存中——为此需要生成原始网格数据的降采样版本,并根据缓存在图像中的尺寸选择合适的层级(降采样版本)。尽管这一过程与 mipmap 非常相似,且你也可将这些降采样版本称为 mipmap,但在三维场景中,我们通常称之为砖块映射(brick map),其形态类似《我的世界》(Minecraft)中的方块。 + +> 我们认为 “砖块映射(brick map)” 这一术语是由皮克斯 RenderMan 团队创造的,但我们对其起源并不十分确定…… 如果有人了解相关情况,欢迎来信告知我们。但总体而言,让缓存存储其数据的多分辨率版本这一理念并非特别新颖或罕见,几乎所有生产级渲染器和格式(如 OpenVDB)都可能支持这一理念。 + +砖块映射的生成过程与纹理 mipmap 层级的生成过程非常相似,但我们需要对 8 个体素取平均值(而非对 4 个像素/纹素取平均)。因此,分辨率为 2 的整数次幂的网格会更便于处理,因为这种情况下的降采样操作会非常简单。 + +以下代码展示了如何从原始流体模拟缓存生成这些层级(示例中基础分辨率为 128)。这只是一个简易示例,后续我们会专门讲解该主题: + +```cpp +size_t baseResolution = 128; +size_t numLevels = log2(baseResolution); /* 浮点型到size_t的隐式转换 */ +std::unique_ptr gridLod = std::make_unique(numLevels - 2); // 忽略分辨率为2和4的层级 +// 加载0级数据 +gridLod[0].baseResolution = baseResolution; +std::ifstream ifs; +char filename[256]; +sprintf_s(filename, "./grid.%d.bin", frame); +ifs.open(filename, std::ios::binary); +gridLod[0].densityData = std::make_unique(baseResolution * baseResolution * baseResolution); +ifs.read((char*)gridLod[0].densityData.get(), sizeof(float) * baseResolution * baseResolution * baseResolution); +ifs.close(); +for (size_t n = 1; n < numLevels - 2; ++n) { + baseResolution /= 2; + gridLod[n].baseResolution = baseResolution; + gridLod[n].densityData = std::make_unique(baseResolution * baseResolution * baseResolution); + for (size_t x = 0; x < baseResolution; ++x) { + for (size_t y = 0; y < baseResolution; ++y) { + for (size_t z = 0; z < baseResolution; ++z) { + gridLod[n](x, y, z) = + 0.125 * (gridLod[n - 1](x * 2, y * 2, z * 2) + + gridLod[n - 1](x * 2 + 1, y * 2, z * 2) + + gridLod[n - 1](x * 2, y * 2 + 1, z * 2) + + gridLod[n - 1](x * 2 + 1, y * 2 + 1, z * 2) + + gridLod[n - 1](x * 2, y * 2, z * 2 + 1) + + gridLod[n - 1](x * 2 + 1, y * 2, z * 2 + 1) + + gridLod[n - 1](x * 2, y * 2 + 1, z * 2 + 1) + + gridLod[n - 1](x * 2 + 1, y * 2 + 1, z * 2 + 1)); + } + } + } +} +... +// 例如渲染缓存的3级数据(分辨率:16) +trace(ray, L, transmittance, rc, gridLod[3]); +... +``` + +我们暂不讲解如何选择合适的层级,但会在本章后续修订版本中补充。至少你现在已了解该问题及其可能的解决方案。 + +以下是缓存不同层级的渲染效果(0 级为原始缓存分辨率,示例中为 128): + +![](images/2026/02/08/20260208_131609_994.webp) + +### 三维运动模糊 + +三维运动模糊该如何实现?要渲染这一效果,我们需要为体素存储流体的运动信息——通常用称为 **运动矢量** 的方向来表示。该矢量的方向代表流体在网格中移动的平均方向,其模长代表流体的移动速度。利用这些信息,可在渲染阶段模拟三维运动模糊。 + +该主题将在后续章节中讲解。 + +### 平流(Advection) + +尽管平流与体渲染无直接关联(更多属于流体模拟范畴),但我们在此提及作为备忘(以便后续如有可能,专门撰写章节讲解)。平流可在渲染阶段执行,为现有流体模拟结果增加细节。 + +### 稀疏体数据(Sparse Volumes):是什么? + +多数情况下,网格中仅有一小部分体素存储的密度值大于 0,这导致大量“空”体素的存在——存储这些体素会造成显著的空间浪费。此外,可能存在 8 个体素存储相同密度值(例如 0.138)的情况,这同样是空间浪费。稀疏体数据的设计正是为了解决这一问题。 + +其核心思路如下:我们创建一个尺寸为 2×2×2 体素块大小的大体积素。因此,这个大体积素的尺寸是原始体素的两倍。接下来:若 2×2×2 体素块内的所有体素都具有相同的密度值(可以是 0 或任意大于 0的值,例如 0.139),则删除该 2×2×2 体素块,并将单一值存储在大体积素中(例如示例中的 0.139);否则,该大体积素指向原始的 2×2×2 体素块。 + +这一过程是递归的:从最高分辨率网格(最高层级)开始,自底向上构建较低层级。指向更多体素块的体素称为内部节点(internal node),存储具体值的体素称为叶节点(leaf node)。下图展示了二维稀疏体数据的示例: + +![](images/2026/02/08/20260208_131610_290.webp) + +当体素块未被合并时,我们需要存储 1 个(大体积素)+8 个(2×2×2 体素块)体素;而当体素块被合并时,仅需存储 1 个体素。在大多数流体模拟中,原始体素的很大一部分要么为空,要么具有相似的密度值(例如云层场景中,云的核心区域通常高度均匀,密度变化主要出现在云的边缘)。因此,采用 + +![](images/2026/02/08/20260208_131610_598.webp) + +稀疏表示方式编码这些体数据,可大幅减少缓存在磁盘和内存中的占用空间。 + +请注意,使用 2×2×2 的体素块并非强制要求。包括 OpenVDB 在内的许多系统,会在层级结构的前几层采用 **八叉树(octree)** 结构,而后将后续层级存储在 32×32×32 的体素块中(示例)。这种数据组织方式相较于更小的块尺寸,可能提升缓存一致性和数据访问效率。 + +最后,稀疏体数据在渲染中也十分有用:可跳过空的大体积素,将密度均匀的大体积素作为均质体渲染。这些优化组合可显著节省渲染时间。 + +稀疏体数据(与 LOD 和砖块映射有相似之处)是一个重要且内容丰富的主题,值得单独撰写章节讲解。若你对该主题感兴趣,也可查阅 Gigavoxels(体素块八叉树)相关资料。 + +**核外渲染(Out-of-Core Rendering)** + +我们在稀疏体数据后提及核外渲染是有原因的:稀疏体数据和体素块八叉树的设计初衷(除上述优化外),正是为了能够渲染无法全部加载到内存中的超大体积数据缓存。 + +当无法将整个文件加载到内存中时(你不希望受限于模拟数据的大小),可通过缓存区机制仅加载所需的体素块(例如相机可见的体素块)。当然,这要求体数据缓存被组织为可按需实时加载的体素块集合。该主题将在后续章节中全面讲解。 + +**注意网格数据的遍历方式** + +若你需要遍历体素,建议采用以下方式: + +```cpp +for (size_t x = 0; x < resolution; ++x) { + for (size_t y = 0; y < resolution; ++y) { + for (size_t z = 0; z < resolution; ++z) { + ... + } + } +} +``` + +而非: + +```cpp +for (size_t z = 0; z < resolution; ++z) { + for (size_t y = 0; y < resolution; ++y) { + for (size_t x = 0; x < resolution; ++x) { + ... + } + } +} +``` + +这是由数据在内存中的存储方式决定的:先遍历 x、最后遍历 z 的方式,可按内存中存储的顺序访问值;而先遍历 z、最后遍历 x 的方式,会跳转到内存的不同位置,极易导致大量缓存未命中(cache miss),从而降低性能。当然,这也取决于数据格式:我们的缓存数据是按先 x、再 y、最后 z 的顺序存储的,但其他格式可能采用不同的约定。因此,需留意代码的这一细节——这可能是性能优化的关键点。 + +### 光照烘焙 + +你可将光照烘焙到网格体素中,在渲染阶段直接从体素中读取这些数据,从而跳过在相机光线的每一步光线步进(raymarching)中计算 Li 项的过程,提升渲染速度。当然,你仍需在预处理阶段(烘焙阶段)为网格中的每个体素计算 Li 项,这一过程仍会耗时;此外,每当光照或模拟结果发生变化时,都需要重新烘焙。我们提及该技术主要是为了参考和历史溯源。 + +### 深度阴影图(Deep Shadow Maps) + +阴影图正逐渐成为历史,但为了内容完整和历史溯源,我们认为有必要提及深度阴影图——其思路与将光照烘焙到体素中的方式有相似之处。该技术的核心是为场景中的每个光源计算一张阴影图,但与传统阴影图存储从光源到场景中最近物体的深度不同,深度阴影图存储的是体密度随距离变化的函数。换句话说,深度阴影图中的每个像素存储一条曲线,代表穿过体数据时的透射率变化。该技术由皮克斯(Pixar)的 Tom Lokovic 和 Eric Veach 于 2000 年提出(若想深入了解,可查阅其论文),目前已有多种衍生版本。 + +## 源代码 + +与往常一样,你可在本章的源代码部分找到对应代码。我们还提供了约 100 个缓存文件序列(下载 cachefiles.zip 并解压到程序源代码所在目录),可用于渲染本章开头展示的动画。 diff --git a/docs/plan/开题报告和任务书/任务书-王子文.docx b/docs/plan/毕设/任务书-王子文.docx similarity index 100% rename from docs/plan/开题报告和任务书/任务书-王子文.docx rename to docs/plan/毕设/任务书-王子文.docx diff --git a/docs/plan/毕设/初稿/第一章.md b/docs/plan/毕设/初稿/第一章.md new file mode 100644 index 00000000..9c460012 --- /dev/null +++ b/docs/plan/毕设/初稿/第一章.md @@ -0,0 +1,47 @@ +# 第一章 绪论 + +## 1.1 课题背景 + +随着实时渲染技术的发展,渲染引擎所面对的应用场景已经逐步扩展到游戏、虚拟现实、数字内容生产和交互式可视化等多个方向,逐渐演变为集图形接口抽象、资源导入与管理、场景组织、材质与光照、脚本运行时以及编辑器工作流于一体的综合软件系统。围绕渲染引擎整体架构开展设计与实现,也更便于将运行时系统、工具链以及后续渲染扩展放在统一平台中加以组织。 + +在现代实时渲染中,云、雾、烟、火等体积特效已经成为常见而重要的视觉元素。与基于表面的传统渲染不同,体积渲染需要处理光线在参与介质中的吸收、散射和透射率累积过程,通常伴随着大量采样和较高的计算开销。特别是在实时应用环境下,如何在有限的帧长内兼顾体积效果的空间层次感、光照表现和运行效率是极具价值的技术问题。也正因如此,体积渲染既具有较强的理论背景,也具有较高的工程实现价值。 + +在体数据表达方面,OpenVDB 为稀疏体积数据组织提供了成熟思路,而 NanoVDB 通过线性化数据结构进一步提升了 GPU 访问友好性,使其更适合实时渲染场景。与此同时,DirectX 12 提供了较底层的资源、命令和同步控制能力,便于开发者更直接地组织 GPU 数据上传、状态切换与渲染调度流程。将 NanoVDB 稀疏体数据组织方式与 DirectX 12 图形接口结合起来,不仅适合开展体积特效的实现研究,也能够作为扩展渲染引擎高级渲染能力的一条现实技术路径。 + +## 1.2 课题意义 + +从体积渲染理论与实现的角度看,本课题围绕 NanoVDB 稀疏体数据在 DirectX 12 环境下的实时渲染展开,重点关注体数据加载、GPU 访问、光线步进、空域跳过和体积阴影等关键问题。相关工作的完成,有助于为云、雾、烟等体积特效的实时工程实现提供一条较清晰的技术路径,也有助于加深对参与介质渲染、体绘制方程简化以及性能优化方法的理解。 + +从系统设计与工程实践的角度看,本课题在体积渲染实现之外,还涵盖了渲染引擎主体架构、运行时模块和编辑器工作流的设计与实现。当前项目已经形成了包含 RHI 抽象、资源系统、场景与组件系统、渲染主链、材质与光照、C# 脚本系统以及编辑器工具链在内的主体框架,体积渲染是在这一基础上的重要高级扩展。这体现了渲染引擎开发中的模块协同关系,同时满足了系统性、完整性和可扩展性的要求。 + +## 1.3 本课题的主要内容 + +结合当前项目的实际进展,本文的研究与实现内容主要由渲染引擎主体部分和体积渲染扩展部分两方面构成。 + +渲染引擎主体部分围绕运行时系统与编辑器工作流展开。在运行时层面,项目已经建立起平台层、图形接口抽象层、资源系统、场景与组件系统、渲染主链、模型与材质系统、多光源与简单阴影、C# 脚本运行时等核心模块,能够支持基础场景的组织、加载与实时渲染。在编辑器层面,项目已经形成 Scene 视口、Game 视口、Hierarchy、Inspector、Project、Console 等主要界面,并提供对象拾取、轮廓高亮、网格显示、变换 Gizmo 以及脚本构建与重载等辅助能力,具备较完整的开发与调试闭环。 + +体积渲染扩展部分建立在现有引擎主体之上,重点研究参与介质渲染的基本理论以及 NanoVDB 稀疏体数据在 DirectX 12 环境下的工程实现方式。其核心内容包括体积渲染基本物理量分析、体绘制方程的简化理解、光线步进流程、稀疏体数据加载与 GPU 上传、Shader 侧体数据访问、空域跳过优化和体积阴影等。当前该部分已经完成独立原型验证,正在向现有渲染引擎主线做进一步整合。 + +## 1.4 本文的主要工作 + +围绕上述目标,本文已开展并完成的主要工作如下。 + +1. 完成了渲染引擎总体架构的设计与模块划分,构建了平台层、RHI 层、资源与场景层、渲染层、脚本层和编辑器层之间的基本组织关系。 +2. 实现了渲染引擎运行时主体能力,完成了缓冲、纹理、资源视图、管线状态、交换链等核心图形对象封装,并在此基础上建立了渲染请求规划、场景提取和相机执行等主链流程。 +3. 实现了资源导入与管理、场景与组件组织、OBJ 模型渲染、材质系统、多光源和简单阴影等基础渲染能力,使引擎具备了较完整的场景渲染闭环。 +4. 实现了基于 Mono 的 C# 脚本系统以及编辑器工作界面,支持脚本程序集构建、脚本运行时装载、Scene/Game 视口显示、Hierarchy 与 Inspector 联动、Project 资源浏览和 Console 调试输出等功能。 +5. 完成了基于 NanoVDB 的体积渲染原型设计与实现,已经实现 `.nvdb` 数据加载、GPU Buffer 上传、HLSL 侧 PNanoVDB 访问、光线步进、HDDA 跳空和体积阴影等流程。 + +## 1.5 论文结构安排 + +全文共分为九章,各章安排如下。 + +1. 第1章为绪论,主要说明课题背景、课题意义、本文的主要内容、已完成的主要工作以及全文结构安排。 +2. 第2章介绍渲染引擎相关技术基础,为后续引擎架构设计与核心模块实现提供技术铺垫。 +3. 第3章介绍体积渲染理论基础,重点说明参与介质、透射率、体绘制方程、光线步进和稀疏体数据等内容。 +4. 第4章对渲染引擎总体架构进行设计说明,给出系统分层、模块划分、数据流关系以及体积渲染模块在整体架构中的位置。 +5. 第5章围绕渲染引擎核心模块展开,说明 RHI、资源系统、场景与组件系统、渲染主链、材质光照和脚本系统等关键内容的设计与实现。 +6. 第6章介绍编辑器与引擎工作流的设计与实现,重点展示编辑器界面组织、视口接入方式以及调试辅助能力。 +7. 第7章重点说明基于 NanoVDB 的体积渲染模块设计与实现,给出体数据加载、GPU 访问、光线步进、跳空优化和体积阴影等关键流程。 +8. 第8章对渲染引擎主体功能和体积渲染模块进行测试,并结合实验结果对效果与性能进行分析。 +9. 第9章对全文工作进行总结,并对后续可继续完善和扩展的方向进行展望。 diff --git a/docs/plan/毕设/初稿/第七章.md b/docs/plan/毕设/初稿/第七章.md new file mode 100644 index 00000000..90ca6107 --- /dev/null +++ b/docs/plan/毕设/初稿/第七章.md @@ -0,0 +1,133 @@ +# 第七章 基于 NanoVDB 的体积渲染模块设计与实现 + +在前文完成渲染引擎主体、编辑器与工作流分析之后,本章进一步聚焦当前课题中最重要的高级渲染扩展,即基于 NanoVDB 的体积渲染模块。与前几章偏向引擎主体不同,本章的重点不再是通用运行时框架,而是围绕体积数据加载、GPU 访问、光线步进、跳空优化和体积阴影等关键流程,说明当前项目中这部分功能是如何落地的。需要说明的是,按照当前工程进展,体积渲染部分已经完成了独立原型验证,并在主引擎中接入了体数据资源与组件接口;但正式渲染通道并入主线仍处于收尾推进阶段。因此,本章的写法将同时覆盖“已经完成的原型实现”和“已经进入主引擎的数据接口部分”。 + +## 7.1 模块设计目标 + +### 7.1.1 面向现有渲染引擎扩展体积渲染能力 + +体积渲染模块的设计目标并不是脱离现有渲染引擎单独实现一个演示程序,而是在已有图形接口抽象、资源系统、场景系统和编辑器验证能力的基础上,补充云、雾、烟等参与介质的实时渲染能力。从课题定位看,这一模块属于当前渲染引擎中的高级渲染扩展,它需要复用已有 DirectX 12 资源管理能力,也需要为后续进入场景资源流、组件系统和编辑器工作流预留接口。 + +结合当前项目实际实现,体积渲染部分采用了“两步推进”的工程路径。第一步是在 `mvs/VolumeRenderer` 中完成 NanoVDB 数据访问与实时体光线步进的独立原型验证,先把关键算法和数据通路跑通;第二步是在主引擎中补齐 `VolumeField`、`VolumeRendererComponent`、资源导入与场景提取等基础接口,为后续正式并入渲染主链做准备。这种组织方式既保证了算法验证效率,也减少了在主线尚未稳定时大规模改动引擎主体的风险。 + +### 7.1.2 模块实现需要解决的核心问题 + +从工程实现角度看,当前体积渲染模块主要需要解决四个问题。第一,如何把 `.nvdb` 文件中的稀疏体数据读取为适合 GPU 使用的连续数据,并保持 NanoVDB 原有的层级结构信息。第二,如何在 shader 中以较低代价访问这些稀疏体数据,并利用其层级特性跳过空区域。第三,如何在实时条件下完成体积颜色和透射率累积,使渲染结果在质量与性能之间保持可接受平衡。第四,如何把这部分能力逐步接到主引擎的资源系统和场景系统中,而不是长期停留在独立实验程序层面。 + +本章后续几个小节正是围绕这四个问题展开。其基本技术路线可以概括为:由 CPU 侧完成 NanoVDB 数据加载与 GPU 上传,在像素着色器中结合 `PNanoVDB` 访问接口完成体数据遍历,并在光线步进过程中叠加单次散射近似和体积阴影,最后通过主引擎中的资源与组件接口为正式主线并入提供接入点。 + +### 7.1.3 当前实现路线的取舍 + +需要特别说明的是,开题阶段曾将 Compute Shader 和 DXR 体积阴影作为重要扩展方向提出,但从当前仓库中的真实实现看,已经完成的核心原型首先落在基于图形管线的像素着色器体积渲染方案上。具体来说,当前原型通过全屏四边形驱动像素着色器,在像素着色器中完成相机光线构造、NanoVDB 访问和体积积分过程。这种方案的优点是接入 DirectX 12 图形管线较直接,便于先验证 NanoVDB 读取、稀疏遍历和单次散射近似是否成立;其局限则是后续若要进一步提升结构清晰度和扩展 DXR 体积遮挡,仍需要继续向更正式的渲染通道推进。 + +因此,当前体积渲染模块的设计目标可以概括为:先完成 NanoVDB 稀疏体数据实时渲染的关键原型,再把资源与场景侧接口逐步接入主引擎,最终为正式体积渲染 pass 的并入打下基础。 + +## 7.2 NanoVDB 数据加载与 GPU 上传 + +### 7.2.1 `.nvdb` 文件读取与 CPU 侧数据准备 + +当前原型工程中的体积数据加载由 `NanoVDBLoader` 完成。加载时,系统首先调用 `nanovdb::io::readGrid` 读取 `.nvdb` 文件,并通过 `nanovdb::GridHandle` 获取 NanoVDB 的连续内存缓冲区。与传统基于指针的树结构不同,NanoVDB 的优势之一就在于其树结构已经被线性化为适合 GPU 访问的连续内存布局,因此在读取完成后,系统不需要在 CPU 侧重新构造复杂指针关系,而是直接按字节复制原始缓冲区内容即可。 + +在当前实现中,加载器会根据 `gridHandle.buffer().bufferSize()` 计算字节总量,并进一步换算为以 `uint32` 为单位的元素数量,随后在 CPU 侧申请一段连续内存,将 NanoVDB 原始缓冲区完整拷贝到本地缓存中。这样处理后,体数据在 CPU 侧已经具备了与 GPU 侧 `StructuredBuffer` 对应的线性布局,为后续上传和 shader 访问提供了基础。 + +### 7.2.2 元数据提取与体数据描述 + +除了主体 payload 外,体积渲染还需要体数据的边界范围、体素尺度等元数据,用于调试显示、体积定位和后续资源化处理。当前原型在 CPU 侧直接从 NanoVDB 线性缓冲区中提取 `worldBBox` 和 `voxelSize`,并把这些信息写入 `NanoVDBData` 结构体。该结构体中除 `cpuData`、`byteSize` 和 `elementCount` 外,还保存了 `worldBBox[6]`,从而能够在后续渲染阶段得到体数据在世界空间下的包围信息。 + +在主引擎中,体数据被进一步抽象为 `VolumeField` 资源。`VolumeField` 内部记录 `storageKind`、`bounds`、`voxelSize` 和原始 payload,并由 `VolumeFieldLoader` 支持 `.nvdb` 与 `.xcvol` 两种加载路径。与此同时,`ArtifactFormats.h` 中还定义了 `VolumeFieldArtifactHeader`,为 `storageKind`、`boundsMin`、`boundsMax`、`voxelSize` 和 `payloadSize` 预留了专门的持久化字段。这说明当前主引擎已经在资源结构上为体数据正式并入做了准备。 + +### 7.2.3 GPU 上传流程与资源绑定方式 + +在获得 CPU 侧连续缓冲区之后,当前原型采用 DirectX 12 的默认堆加上传堆组合完成 GPU 上传。系统首先在默认堆中创建一块 `BUFFER` 类型资源,初始状态为 `COPY_DEST`;随后在上传堆中创建等大小的上传缓冲,将 CPU 侧 NanoVDB 数据拷贝到上传堆映射内存中,再通过 `CopyBufferRegion` 将数据复制到默认堆资源。复制完成后,系统再插入资源状态屏障,把体数据缓冲从 `COPY_DEST` 切换到 `GENERIC_READ`,使其可以被 shader 以只读方式访问。 + +在绑定方式上,当前原型为体积渲染单独建立了一套根签名。该根签名包含两个根参数:一个是绑定在 `b1` 的常量缓冲视图,用于传递逆视图投影矩阵、相机位置、步长、最大步数、光照方向等参数;另一个是绑定在 `t1` 的着色器资源视图,用于传递 NanoVDB 线性缓冲区。shader 端则把该缓冲声明为 `StructuredBuffer`,再借助 `PNanoVDB.hlsl` 中提供的读取函数和访问器完成数据解释。 + +此处建议插入图 7-1“NanoVDB 数据加载与 GPU 上传流程图”,展示 `.nvdb` 文件读取、CPU 连续缓冲准备、上传堆复制、默认堆持久化和 `StructuredBuffer` 绑定之间的关系。 + +## 7.3 体积渲染核心流程实现 + +### 7.3.1 基于全屏四边形的相机光线构造 + +当前原型的体积渲染 pass 采用全屏四边形驱动的方式执行。主程序先构建一个覆盖标准化设备坐标空间的四边形网格,并使用专门的 `volume.hlsl` 顶点着色器与像素着色器完成体积渲染。顶点着色器本身较为简单,它一方面把输入顶点直接输出到屏幕空间,另一方面利用逆视图投影矩阵把屏幕空间位置还原为世界空间位置,从而为像素着色器提供构造视线方向所需的信息。 + +在像素着色器中,系统通过 `normalize(input.worldPos - _CameraPos_Density.xyz)` 计算当前像素对应的相机射线方向。这样一来,虽然渲染入口是传统图形管线中的全屏四边形绘制,但真正的体积积分过程仍然以“每像素一条视线”的方式展开,本质上与常见的 ray marching 体渲染流程一致。 + +### 7.3.2 体积内部采样与颜色累积 + +在构造出相机光线之后,shader 会先初始化 NanoVDB 访问结构。当前实现中定义了 `NanoVolume` 结构,并在 `initVolume` 中依次建立 `grid handle`、`tree handle`、`root handle` 以及 `read accessor`。完成初始化后,shader 调用 `get_hdda_hit` 沿当前相机光线执行第一次 NanoVDB 层级遍历,以确定光线是否进入有效体积区域以及进入位置对应的参数值 `tmin`。如果光线未命中体数据,则该像素直接输出透明结果。 + +当光线命中体积后,主循环开始按照最大步数限制进行步进。对每一个步进位置,shader 都会计算当前采样点坐标,并利用 `get_value_coord` 读取该处的体素值,再乘以 `_DensityScale` 获得当前密度。随后程序以该密度作为散射项 `sigmaS` 的基础,并通过指数衰减形式更新透射率 `transmittance`。散射贡献部分则采用单次散射近似,将当前点的散射强度、光照衰减和相位函数结果组合为 `Sint`,再累积到颜色结果中。 + +从流程上看,这一实现与第三章中的体积积分离散化过程是一致的:沿相机光线前向步进,对每个采样点估计局部散射与透射率,再将结果累计为最终颜色。为了避免无意义的长尾积分,当前实现还设置了两类提前终止条件:其一是当累积密度 `acc_density` 超过阈值时停止步进,其二是当透射率衰减到足够低时直接终止。这些处理在保证运行效率方面起到了重要作用。 + +### 7.3.3 渲染参数组织与结果输出 + +当前体积渲染 pass 所需的运行参数统一存放在一块常量缓冲中。该常量缓冲依次包含逆视图投影矩阵、相机位置与密度缩放、体积边界最小值与步长、体积边界最大值与最大步数、绕 Y 轴旋转参数以及光照方向与阴影采样参数等内容。主程序会在每帧更新这些参数,并将其绑定到体积渲染根签名对应的 `CBV` 槽位。 + +从图形状态设置上看,当前体积渲染管线采用了颜色混合开启、深度测试开启但深度写入关闭的方式。这种设置使体积结果能够作为半透明层叠加到已有场景结果上,同时避免破坏前面已生成的深度缓冲。最终输出阶段,shader 还会对结果执行一次 gamma 校正,并把累积密度作为 alpha 输出。这样既能得到较自然的颜色表现,也便于后续混合。 + +此处建议插入图 7-2“体积渲染结果示意图”,可选用 `cloud.nvdb` 或 `bunny.nvdb` 的当前渲染结果截图。 + +## 7.4 稀疏体数据访问与跳空优化 + +### 7.4.1 `StructuredBuffer` 与 `PNanoVDB` 访问方式 + +NanoVDB 的核心优势在于其树结构已经被线性化,因此 GPU 侧不需要复杂指针跳转即可访问体数据。当前 shader 端把体数据统一表示为 `StructuredBuffer buf`,随后通过 `PNanoVDB.hlsl` 提供的缓冲读取函数、网格句柄、树句柄、根节点句柄以及访问器接口解释这段线性缓冲区。具体来说,shader 会先读取 grid type,再通过 `pnanovdb_grid_get_tree`、`pnanovdb_tree_get_root` 和 `pnanovdb_readaccessor_init` 建立访问器,之后即可通过统一接口查询给定位置的体素值和层级维度信息。 + +这种实现方式的重要意义在于,体数据访问不再依赖 CPU 端构造额外的数据映射表,也不需要在 GPU 端额外展开稠密体素网格。体渲染 pass 可以直接以 NanoVDB 原始线性布局为输入,从而较完整地保留其稀疏结构优势。 + +### 7.4.2 基于 HDDA 的层级遍历与空域跳过 + +为了避免对大量空区域执行逐体素采样,当前实现引入了 `PNanoVDB` 中的 HDDA 遍历能力。首先,shader 通过 `get_hdda_hit` 调用 `pnanovdb_hdda_tree_marcher`,在层级结构上快速找到光线进入有效体积区域的位置。进入主循环后,又通过 `get_dim_coord` 查询当前位置所在节点的维度信息。若该维度值大于 1,说明当前命中的是较粗层级的 tile 区域,此时程序并不执行逐体素积分,而是直接进行更大步长的跳跃,从而跳过大片空域。 + +除显式的层级跳过外,当前 shader 还根据密度阈值设置了第二层启发式优化。当当前采样位置的密度低于设定阈值时,系统会采用较大的步长直接向前推进;一旦重新接近有效区域,又会通过回退部分跳跃距离的方式减少错过细节的风险。虽然这部分处理带有一定工程经验性质,但从当前原型看,它与 NanoVDB 的层级跳过机制共同起到了减少无效采样的作用。 + +### 7.4.3 稀疏访问优化的作用与边界 + +对于体积渲染而言,真正耗时的部分往往不是单次采样本身,而是“在大片空区域中做了大量没有意义的采样”。当前实现通过 NanoVDB 层级结构与 HDDA 机制,把“先找到有效区域,再进入局部积分”的思路落实到了 shader 中,这也是原型能够在实时条件下运行的关键原因之一。与稠密三维纹理逐点扫描相比,这种方式更符合云、雾等稀疏参与介质的空间分布特征。 + +当然,当前实现中的具体跳跃步长和回退系数仍然带有明显的实验性质,它们尚未被完全整理为统一的引擎参数系统。后续若正式并入主引擎主线,还需要把这些策略进一步规范化,并与材质参数、质量档位和性能测试结果结合起来。 + +## 7.5 光照与体积阴影实现 + +### 7.5.1 单次散射近似 + +当前体积渲染模块在光照模型上采用的是单次散射近似,而不是完整的多次散射求解。其基本思路是:在相机光线上每个采样点处,只考虑该点受主光照方向直接照射后产生的一次散射贡献,再结合透射率把这部分贡献累积到观察结果中。这样做虽然牺牲了部分物理真实性,但显著降低了实时渲染开销,也符合当前项目作为工程型毕设的实现阶段。 + +在 shader 代码中,当前相位函数被简化为常量函数 `phase_function() = 1.0`,也就是把散射过程近似为各向同性响应。这意味着当前实现并未进一步展开如 Henyey-Greenstein 相位函数这样的方向性散射模型,而是先以结构正确、代价较低的形式完成体积光照闭环。对于现阶段的模块验证而言,这样的取舍是合理的。 + +### 7.5.2 沿光照方向的体积阴影估计 + +为了让体积结果不至于表现为完全均匀发亮的云团,当前实现还引入了沿光照方向的体积阴影估计。其核心函数为 `volumetric_shadow`。在该函数中,程序从当前采样点沿光照方向继续步进,对后续路径上的密度进行估计,并通过指数衰减累积出一条简化的光照透射率。随后,该透射率作为当前采样点的阴影系数参与颜色积分。 + +从实现细节看,当前阴影步进采用了指数增长的步长策略:每次采样后将 `step_size` 扩大一倍,以较少的采样次数快速覆盖更远距离的阴影路径。这样做能够在有限采样预算内得到一条近似可用的阴影衰减曲线,并降低阴影求解带来的额外成本。与此同时,主程序还通过常量缓冲向 shader 传递 `LightDir` 和阴影相关参数,使体积光照方向能够随运行状态变化。 + +### 7.5.3 当前光照模型的局限 + +虽然当前实现已经具备体积光照与阴影的基本效果,但其近似性质也十分明显。第一,当前只实现了单次散射,没有处理多次散射带来的能量回填和颜色传播,因此云体内部的柔和感仍然有限。第二,相位函数采用常量近似,没有体现前向散射或后向散射差异。第三,阴影积分仍采用简化步进,没有与真正的场景几何遮挡、级联阴影或 DXR 光线查询结合起来。也就是说,当前模块已经完成了“体积渲染能成立”的关键闭环,但距离更完整、更物理化的体积光照模型还有后续扩展空间。 + +此处建议插入图 7-3“体积阴影开启与关闭对比图”,用于展示单次散射近似和阴影积分对体积层次感的改善作用。 + +## 7.6 当前实现状态分析 + +### 7.6.1 已完成的核心原型部分 + +从当前仓库中的真实实现看,体积渲染最核心的原型已经在 `mvs/VolumeRenderer` 中完成。该原型已经具备 NanoVDB 文件读取、CPU 连续缓冲准备、DirectX 12 默认堆上传、`StructuredBuffer` 绑定、`PNanoVDB` 层级访问、HDDA 进入测试、主光线步进积分以及简化体积阴影估计等关键能力。主程序能够直接加载 `cloud.nvdb` 等测试数据,并在独立窗口中实时输出体积渲染结果。就“关键算法与数据通路是否打通”这一问题而言,当前答案是肯定的。 + +### 7.6.2 已进入主引擎的资源与场景接口部分 + +除独立原型外,主引擎中与体积渲染相关的资源和场景接口也已经基本建立完成。资源层面,`VolumeField` 与 `VolumeFieldLoader` 已经支持 `.nvdb` 和 `.xcvol` 两类体数据资源,`AssetDatabase` 也已经加入了 `VolumeField` 的 artifact 生成流程;组件层面,`VolumeRendererComponent` 已经能够持有体数据资源和材质资源,并支持同步、异步与基于 `AssetRef` 的加载方式;场景提取层面,`RenderSceneExtractor` 与 `RenderSceneUtility` 已经能够把场景中的体积对象提取为 `VisibleVolumeItem`,并将其纳入 `RenderSceneData`。 + +这说明体积渲染并不是完全游离于主引擎之外的孤立实验,而是已经在资源系统、组件系统和场景提取结构中获得了明确的位置。换言之,正式并入主渲染通道所需的很多前置数据接口已经准备好。 + +### 7.6.3 正在收尾与尚未正式并入主线的部分 + +当前仍在推进的部分主要集中在“把已有原型真正并入主引擎渲染主链”这一阶段。虽然 `RenderSceneData` 中已经预留了 `visibleVolumes`,但当前主渲染管线中尚未正式消费这一数据并生成对应的体积 pass;`VolumeRendererComponent` 虽已进入组件系统,但编辑器端尚未形成对应的组件检查与参数编辑面板;主引擎资源管线虽然已经具备 `VolumeFieldArtifactHeader` 结构,但对 `.nvdb` 源数据中的边界和体素尺寸信息仍需继续工程化整理。除此之外,开题阶段提出的 DXR 体积阴影扩展,目前也尚未以正式代码路径并入现有主线。 + +因此,更准确的表述应当是:当前体积渲染已经完成了关键原型验证,并已在主引擎中接入资源和场景接口;而正式主线渲染接入、编辑器参数化支持以及更高质量光照扩展,仍处于最后的工程收尾阶段。 + +## 7.7 本章小结 + +本章围绕当前项目中的 NanoVDB 体积渲染模块实现进行了分析。可以看到,该模块已经在独立原型层面完成了从 `.nvdb` 文件读取、GPU 上传、`StructuredBuffer` 访问,到基于 `PNanoVDB` 的层级遍历、光线步进积分和体积阴影近似的完整闭环;与此同时,主引擎中也已经建立起 `VolumeField` 资源、`VolumeRendererComponent` 组件以及 `VisibleVolumeItem` 场景提取结构,为正式并入渲染主线提供了数据基础。 + +从当前工程状态看,体积渲染部分已经不再停留在理论分析层面,而是形成了可运行、可验证、可继续并入主引擎的实际模块。下一章将在此基础上进一步结合测试场景和实验结果,对当前渲染引擎主体与体积渲染扩展的功能表现和实现效果进行分析。 diff --git a/docs/plan/毕设/初稿/第三章.md b/docs/plan/毕设/初稿/第三章.md new file mode 100644 index 00000000..6c27ead3 --- /dev/null +++ b/docs/plan/毕设/初稿/第三章.md @@ -0,0 +1,165 @@ +# 第三章 体积渲染理论基础 + +第二章已经从渲染引擎角度说明了运行时系统、资源系统、场景组织和编辑器工作流等基础内容。本章进一步转入体积渲染本身的理论部分,重点讨论参与介质、光在介质中的衰减与散射、体绘制方程、光线步进以及稀疏体数据与空域跳过等关键概念。本章的目的不是对体积光传输进行过度抽象的数学展开,而是为后续基于 NanoVDB 的体积渲染模块设计与实现提供足够明确的理论基础。 + +## 3.1 参与介质与体积渲染基本概念 + +### 3.1.1 参与介质的定义 + +传统表面渲染主要关心光线在物体表面处发生的反射与折射,而体积渲染关注的对象则是空间中的参与介质(Participating Media)。所谓参与介质,是指光在传播过程中会与其内部粒子持续发生相互作用的介质,例如云、雾、烟、火焰、水汽等。这类介质并不像三角形网格那样只在边界上发生光学变化,而是会在体积内部对光线产生吸收、散射甚至发射作用,因此它们的成像过程天然具有空间累积特征。 + +从工程角度看,参与介质通常可以分为均匀介质和非均匀介质两类。均匀介质在空间中的光学参数保持不变,便于分析和推导;非均匀介质的密度或光学参数随位置变化,更接近真实云层和烟雾的外观,也是实际应用中更常见的情况。在本文项目后续的体积渲染实现中,体数据本质上就是对这种空间变化进行离散表达,因此理解参与介质的基本性质是后续实现的前提。 + +### 3.1.2 吸收、散射与透射率 + +当光线穿过参与介质时,最基本的两类相互作用是吸收和散射。吸收表示光能被介质粒子消耗,导致沿原方向传播的光变弱;散射表示光线方向发生改变,其中一部分光离开原有传播方向,另一部分光可能从其他方向被重新散射到观察方向。通常用吸收系数 $\sigma_a$ 表示吸收强度,用散射系数 $\sigma_s$ 表示散射强度,两者之和称为消光系数或总衰减系数: + +$$ +\sigma_t = \sigma_a + \sigma_s +$$ + +在很多实时体积渲染实现中,密度场会被用来调制这些系数,使介质在空间上的不透明度和亮度分布发生变化。也就是说,密度并不是与吸收、散射并列的第三类光学现象,而更像是对局部光学参数的空间缩放。密度越大,局部吸收和散射通常也越强;密度越小,介质对光的影响则越弱。 + +透射率(Transmittance)描述的是光线在介质中传播一段距离后仍然保留下来的比例,其取值范围在 0 到 1 之间。透射率越接近 1,说明光几乎未被削弱;透射率越接近 0,说明光在介质中已被显著衰减。透射率是体积渲染中极为核心的量,因为无论是背景光穿过体积后的结果,还是光源传播到采样点的有效光照,最终都要依赖透射率来表达。 + +### 3.1.3 体积颜色形成的基本原因 + +体积图像的形成并不是单纯“给体素上色”,而是光在介质中传播、衰减与散射共同作用的结果。从观察者方向看,体积颜色主要来自两个来源。其一是背景或后方物体发出的光在穿过介质时被衰减后剩余的部分;其二是来自光源的入射光在介质内部发生散射后,被重新导向观察方向所产生的内散射贡献。当前项目后续实现的重点主要也集中在这两部分,即背景透射与单次散射近似。 + +如果介质本身还会主动发光,例如火焰、高温气体等,则还需要考虑发射项。不过从本文当前项目的体积模块实现状态来看,重点仍然放在云、烟等主要受吸收和散射影响的体数据渲染上,因此本章后续分析将以吸收、散射和透射率累积为主。 + +## 3.2 比尔-朗伯定律与光线透射 + +### 3.2.1 比尔-朗伯定律的物理含义 + +比尔-朗伯定律(Beer-Lambert Law)描述了光在介质中传播时的指数衰减规律。对于均匀介质,如果光线在介质中传播距离为 $d$,则透射率可写为: + +$$ +T(d) = e^{-\sigma_t d} +$$ + +该式说明,光的衰减并不是线性减少,而是随着传播距离和消光系数的增加呈指数下降。直观地说,当介质更“浓”或者光走得更远时,保留下来的光就会更少。这一定律在体积渲染中的意义非常直接,因为它给出了“光穿过介质后还能剩多少”的定量表达。 + +从算法视角看,比尔-朗伯定律还具有一个非常重要的性质,即分段可乘性。若一段路径可以分解为多个小区间,那么整条路径的透射率可以看成各区间透射率的乘积。这一性质使得连续体积的积分问题能够自然转化为离散光线步进中的逐步累积过程,也正是实时体积渲染中采用逐采样点更新透射率的理论依据。 + +### 3.2.2 消光系数、吸收系数与散射系数的关系 + +如前所述,吸收与外散射都会使沿当前方向传播的光减少,因此在透射率计算时通常统一用消光系数 $\sigma_t$ 表示总衰减。对于只考虑吸收的情况,可以仅使用 $\sigma_a$;而在更一般的参与介质渲染中,散射也会让光离开原传播方向,因此应把 $\sigma_s$ 一并纳入: + +$$ +\sigma_t = \sigma_a + \sigma_s +$$ + +需要注意的是,$\sigma_s$ 一方面参与透射率计算,因为散射会让光束损失能量;另一方面又会出现在内散射项中,因为正是散射作用把来自光源方向的入射光重新导向观察方向。也就是说,散射在体积渲染中同时承担“损失原方向能量”和“为观察方向提供贡献”两种角色,这也是体积渲染比单纯透明衰减更复杂的根本原因。 + +在实际工程实现中,常见做法是根据体数据提供的密度值对吸收系数和散射系数进行调制。例如,当某个采样点密度更大时,局部消光系数也更大,透射率会下降得更快;反之则衰减更弱。这种做法既便于统一控制体积外观,也便于将理论模型映射到离散体数据采样结果上。 + +### 3.2.3 透射率在体积渲染中的作用 + +透射率在体积渲染中至少有三类直接用途。第一,它用于描述背景光或后方物体颜色经过体积后的剩余比例,因此决定了体积区域是否会“遮住”背景。第二,它用于描述光源从入射方向传播到某个采样点时的衰减程度,因此直接影响采样点处的有效光照强度。第三,它用于前向积分时对已累积颜色进行权重控制,使离观察者更远处的散射贡献自动受到前方介质的遮挡。 + +对于均匀介质,透射率可以直接由闭式公式给出;但对于非均匀介质,消光系数会随空间变化,此时应采用积分形式: + +$$ +T(d)=\exp \left(-\int_0^d \sigma_t(x_t)\,dt \right) +$$ + +式中的积分项通常也记作光学厚度 $\tau$。这一定义说明,非均匀体积的透射率本质上依赖整条路径上的密度分布,而不是只依赖起点与终点之间的几何距离。后续第7章中,光线步进和光照阴影估计实际上都是在用离散采样的方式近似这个积分。 + +## 3.3 体绘制方程与单次散射近似 + +### 3.3.1 体绘制方程的基本形式 + +为了完整描述光在参与介质中的传播,理论上应从辐射传输方程出发。但对于工程实现而言,更常使用的是其沿路径积分后的体绘制方程(Volume Rendering Equation,VRE)。在忽略发射项并只关注背景透射和散射贡献的情况下,体绘制方程可写成较常见的形式: + +$$ +L_o = T(0,D)L_b + \int_0^D T(0,t)\,\sigma_s(x_t)\,L_i(x_t,\omega_i)\,p(\omega_i,\omega_o)\,dt +$$ + +其中,$L_o$ 表示观察方向上的出射辐射亮度,$L_b$ 表示体积后方背景或其他物体的辐射亮度,$T(0,D)$ 表示整段路径上的透射率,$L_i(x_t,\omega_i)$ 表示采样点从光源方向接收到的入射辐射亮度,$p(\omega_i,\omega_o)$ 为相位函数。这个方程的物理意义比较直观:最终看到的体积颜色,一部分来自背景光穿透体积后的结果,另一部分来自介质内部各个采样点把入射光散射到观察方向后的累积结果。 + +从工程实现角度看,这个积分方程往往没有简单解析解,特别是在介质非均匀、光源复杂或需要考虑阴影时更是如此,因此通常需要采用数值积分方法近似求解。也正因为如此,光线步进会成为体积渲染中最常见、也最直观的实现方式。 + +### 3.3.2 单次散射的含义 + +单次散射(Single Scattering)是指只考虑“光从光源出发,经过一次介质散射后进入观察方向”的情况,而忽略光在介质内部发生两次及以上散射的贡献。换句话说,光子在进入观察者之前只被介质重新定向一次。这样做会忽略云层内部那种复杂的多次反弹与能量交换,但可以显著降低计算复杂度。 + +在实时体积渲染中,单次散射近似非常常见。一方面,它能够较好描述烟雾、薄雾和部分低反照率介质的主要视觉特征;另一方面,它能够与光线步进、阴影步进和体数据采样自然结合,便于在图形管线或计算着色器中实现。当前项目后续的体积原型同样采用这一思路,因此本章理论分析将主要围绕单次散射展开。 + +### 3.3.3 相位函数的作用 + +即使在单次散射模型下,也还需要回答一个问题:某个采样点接收到的入射光中,究竟有多少会被散射到观察方向?这个角度分布由相位函数(Phase Function)描述。相位函数本质上是一个在方向球面上归一化的函数,用于刻画散射光在不同方向上的分布情况。它通常依赖入射方向与观察方向之间的夹角 $\theta$。 + +最简单的相位函数是各向同性相位函数,它认为光会以相同概率向所有方向散射,此时: + +$$ +p(\theta)=\frac{1}{4\pi} +$$ + +但很多真实介质并不满足各向同性分布,云和雾等介质更常表现出明显的前向散射特征。工程中常用的近似模型是亨耶-格林斯坦(Henyey-Greenstein,HG)相位函数: + +$$ +p_{HG}(\cos\theta)=\frac{1-g^2}{4\pi(1+g^2-2g\cos\theta)^{3/2}} +$$ + +其中 $g \in [-1,1]$ 为非对称因子。当 $g=0$ 时退化为各向同性散射;当 $g>0$ 时表现为前向散射;当 $g<0$ 时表现为后向散射。后续第7章的工程实现虽然会采用简化形式,但相位函数这一思想仍然是构成单次散射项的理论基础。 + +### 3.3.4 为什么在实时系统中常采用简化模型 + +如果严格考虑多次散射、复杂相位函数、多个动态光源和高精度体数据积分,那么体积渲染的计算量会迅速增大,很难满足实时应用对帧率的要求。因此,实时系统通常会在若干环节上做简化:例如只考虑单次散射、采用固定步长或分层步进、使用简化相位函数、对阴影进行近似积分,或者在必要时对空区域进行跳过。 + +这种简化并不意味着理论被放弃,而是意味着在已知完整物理模型的前提下,有选择地保留最影响画面结果的部分。对于工程设计类项目而言,这种从完整理论到可实时实现之间的取舍非常重要。后续章节的体积模块实现也正是在这一原则下,选择了适合当前项目阶段的实时方案。 + +## 3.4 光线步进算法原理 + +### 3.4.1 Ray Marching 的基本思想 + +由于体绘制方程通常难以直接求得解析解,实际实现中往往采用数值积分近似,而光线步进(Ray Marching)就是其中最典型的方法。其基本思想是:先求出相机光线与体积包围区域的进入点和离开点,再把这段区间划分为若干个小步长,在每个采样点处估计局部密度、局部消光、局部散射贡献与透射率,最后将这些局部结果累积起来,近似连续积分。 + +若步长足够小,则每个小区间都可以视作局部均匀,这样就能用离散求和逼近连续积分。也正因为这一思想简单直接,光线步进非常适合作为体积渲染的工程实现起点。本文后续的 NanoVDB 体积原型同样以相机光线与体积边界求交为起点,然后在体积内部做离散采样累积。 + +### 3.4.2 正向步进与反向步进 + +按观察方向组织时,光线步进通常可以分为正向步进和反向步进两种。正向步进一般指从靠近相机的一侧向远处推进,也可理解为前向累积(front-to-back);反向步进则从远处向近处积分,也可理解为后向累积(back-to-front)。 + +从数值结果上看,两者都可以逼近同一个积分目标,但在工程实现上,正向步进往往更适合实时系统。原因在于,正向步进可以显式维护“当前剩余透射率”,当透射率已经很低时,后续更远处的采样贡献可以近似忽略,从而支持提前终止优化。反向步进虽然在某些推导上较直观,但不如正向步进方便做前端遮挡裁剪。当前项目后续的体积实现也更接近前向累积方式。 + +### 3.4.3 步长、最大步数与误差控制 + +步长是光线步进中的关键参数。步长越小,离散积分越接近连续积分,画面通常越平滑,细节也越稳定;但采样次数随之增加,运行开销也会显著变大。步长过大时,则容易出现条带感、细节丢失和阴影估计不稳定等问题。与步长相对应的另一个参数是最大步数,它决定了一条光线最多允许采样多少次,用于限制最坏情况下的开销。 + +因此,实时体积渲染本质上是在“精度”和“性能”之间寻找平衡。工程上通常会根据体素分辨率、包围盒大小、屏幕分辨率以及目标帧率来选择合适步长,并在必要时为主光线和阴影光线设置不同的采样密度。这种参数平衡在后续测试章节中也会体现出来。 + +### 3.4.4 提前终止、抖动等常见优化 + +在体积积分过程中,并不是每一个采样点都同样重要,因此常会配合若干优化策略。最常见的一类是提前终止(Early Termination):当累计透射率已经低于某个阈值时,说明后续更远区域的贡献非常有限,此时可以直接结束当前光线步进。对于较浓的烟雾或高密度区域,这类优化能节省大量无效计算。 + +另一类常见方法是采样抖动(Jitter)。固定步长加固定采样起点容易带来规则性的条纹或分层感,而在初始采样位置上引入轻微随机偏移,可以打散这种结构化误差,使图像在视觉上更平滑。除此之外,还可以通过多分辨率步进、阴影光线使用更粗步长、分层包围盒裁剪等方式进一步优化。对于本文后续实现而言,提前终止和空域跳过具有更直接的工程意义。 + +## 3.5 稀疏体数据与空域跳过思想 + +### 3.5.1 稠密体素网格的问题 + +如果直接使用规则三维网格存储体数据,那么无论某个区域是否真正包含有效密度值,都需要为其分配存储空间。当分辨率升高到 $N \times N \times N$ 时,存储量会按立方增长,显著增加显存和内存压力。更重要的是,若光线步进始终以固定步长穿过整个包围区域,那么大量采样都会落在密度接近 0 的空区域中,带来明显的计算浪费。 + +对于云、烟等典型体数据而言,真正有意义的部分往往只占整个包围空间的一小部分。也就是说,体数据天然具有“空间稀疏”的特点。如果仍然用稠密网格表示,就会在存储与计算两个层面同时承受不必要的代价。 + +### 3.5.2 稀疏体数据结构的意义 + +稀疏体数据结构的核心思想,是只为真正包含有效信息的区域分配更细粒度的存储,而对大量空区域或均匀区域采用更粗层级的表示。OpenVDB 及其面向 GPU 的 NanoVDB 就属于这一类思路。它们通过层级化节点结构组织体数据,使得体素值访问不再局限于简单的三维数组索引,而是能够根据当前区域是否活跃、当前层级分辨率以及节点类型进行更有选择性的访问。 + +对于实时渲染而言,NanoVDB 的价值尤其明显。它在保留 VDB 层级稀疏表达思想的基础上,对数据进行了线性化组织,使 GPU 更容易访问。这样一来,体数据不但可以以更紧凑的形式存储在显存中,还能够在 Shader 中配合层级遍历或辅助访问器实现更高效的采样与判断。后续第7章的工程实现,正是建立在这种 GPU 友好的稀疏表示之上。 + +### 3.5.3 空区域跳过对实时性的作用 + +空域跳过(Empty Space Skipping)的目标,是尽量避免在无效区域上进行逐步长采样。其基本思想不是改变体绘制方程,而是在数值积分过程中快速定位“哪些区域值得细采样,哪些区域可以直接跳过”。如果能在光线进入空区域时一次跨过较长距离,而不是继续做多个低价值采样,那么体积渲染的实时性就会明显提升。 + +实现空域跳过的方式有很多,例如基于宏体素的占用标记、基于层级结构的活跃区判断,或者基于 DDA/HDDA 的层级步进方法。其共同点在于:当当前区域内不存在活跃密度,或者当前层级可以确认该区域为空时,光线可以直接前进到下一个可能有数据的位置。在 NanoVDB 场景下,这种思想与其层级节点结构天然契合,因此非常适合作为实时体积渲染的优化手段。 + +从后续工程实现角度看,空域跳过并不是“附加优化”,而是让稀疏体数据在实时环境中真正发挥价值的关键环节。只有把稀疏存储与跳空采样结合起来,NanoVDB 的结构优势才能转化为实际帧时间上的收益。 + +## 3.6 本章小结 + +本章围绕体积渲染实现所需的核心理论进行了梳理,说明了参与介质的基本概念,以及吸收、散射、消光系数和透射率之间的关系;介绍了比尔-朗伯定律在均匀与非均匀介质中的表达形式,并说明了透射率在背景衰减、光照传播和颜色累积中的作用;进一步给出了体绘制方程的基本形式,解释了单次散射近似和相位函数的物理意义;最后分析了光线步进的数值积分思想,以及稀疏体数据与空域跳过对实时性的作用。 + +这些理论内容与后续工程实现之间是一一对应的:透射率累积将对应光线步进中的前向积分,单次散射与相位函数将对应体积光照近似,稀疏体数据与跳空思想将对应 NanoVDB 的 GPU 访问和 HDDA 优化。基于这些理论基础,下一章将开始转入渲染引擎总体架构设计。 diff --git a/docs/plan/毕设/初稿/第二章.md b/docs/plan/毕设/初稿/第二章.md new file mode 100644 index 00000000..d296c23e --- /dev/null +++ b/docs/plan/毕设/初稿/第二章.md @@ -0,0 +1,70 @@ +# 第二章 渲染引擎发展现状与本课题引擎概述 + +第一章已经对课题背景、研究意义和整体工作内容进行了简要说明。在展开具体的架构设计与模块实现之前,本章先对实时渲染引擎的发展脉络、当前主流引擎的能力对比,以及体积渲染特性在现代引擎中的应用现状进行梳理。同时,还将对本文所实现的实时渲染引擎作总体介绍,包括其主体结构、核心模块、编辑器工作流和体积渲染扩展。 + +## 2.1 渲染引擎的发展历程 + +### 2.1.1 从单一绘制程序到引擎平台 + +早期实时图形程序往往围绕单一渲染目标构建,重点在于完成特定场景的绘制与显示,系统结构相对集中,资源组织和工具支持能力较弱。随着实时图形程序应用复杂度的不断提高,图形程序需要面对的不再只是几何绘制本身,还包括模型与纹理导入、资源管理、场景组织、材质参数管理、光照与阴影、脚本行为控制以及可视化编辑等问题。在这一过程中,渲染系统逐步从面向单次绘制任务的程序形态,演变为面向完整开发流程的引擎平台形态。 + +【插图:插一个古早渲染程序图片即可】 + +### 2.1.2 从固定管线到可编程管线 + +图形硬件和图形 API 的演进推动了渲染引擎能力的持续升级。固定功能管线阶段,开发者控制的绘制流程较为有限,系统设计更偏向对既有图形功能的调用与组合。进入可编程管线阶段后,随着顶点处理、像素处理、屏幕后处理以及更复杂的光照模型逐步进入实时图形系统,材质系统、着色器管理和渲染流程组织的重要性也显著提高。也正因如此,渲染引擎开始形成更加清晰的资源层、场景层、渲染层和脚本层等架构分层。 + +### 2.1.3 从运行时绘制到完整工作流 + +现代渲染引擎的发展已经不再局限于运行时画面生成,而是越来越强调资源导入、场景搭建、参数调整、脚本扩展和结果验证之间的闭环关系。编辑器、资源数据库、脚本运行时和测试体系逐渐成为引擎的重要组成部分。现代渲染引擎的核心价值,已经扩展到内容组织、资源管理、工具协同和持续扩展能力等多个方面。 + +## 2.2 当前主流渲染引擎的特点 + +### 2.2.1 Unity + +Unity 在实时图形与交互式应用开发中具有广泛影响力,其突出特点在于组件化对象模型、成熟的编辑器工作流以及围绕资源导入、场景管理和脚本开发建立起来的完整开发环境。Unity 以 C# 脚本为主要行为扩展方式,在对象组织、资源引用和编辑器操作方面形成了较强的一致性。近年来其渲染体系也逐步向可配置、可扩展方向发展,说明现代渲染引擎不仅关注基础绘制能力,也重视渲染管线的工程组织方式。 + +### 2.2.2 Unreal Engine + +Unreal Engine 在高质量实时渲染、复杂场景表现和大型工程工具链方面具有代表性。其整体体系强调底层 C++ 能力、高规格实时渲染效果以及可视化工具协同工作。相较于更偏轻量化的开发环境,Unreal Engine 在渲染模块、编辑器体系、资源管理和运行时工具链方面更强调系统完整性,对高复杂度实时图形项目具有较强支撑能力。其发展方向说明,高级渲染效果通常不是孤立功能,而是建立在资源、场景、工具链和渲染主链共同配合的基础之上。 + +### 2.2.3 Godot 等开源引擎 + +除商业化程度较高的主流引擎外,Godot 等开源引擎也在实时图形开发中占有重要位置。此类引擎通常更加重视开放性、可阅读性和模块化扩展能力,在场景组织、脚本系统和编辑器集成方面同样形成了较完整的工作流。虽然不同引擎在功能规模、定位和实现路线方面存在差异,但从系统构成角度看,资源、场景、渲染、脚本和编辑器的协同已经成为现代渲染引擎的普遍特征。 + +### 2.2.4 主流引擎能力的共性 + +综合来看,当前主流渲染引擎虽然在底层实现方式、目标平台和工具链风格上各有差异,但在整体结构上呈现出较为一致的趋势。首先,都以资源系统、场景组织和渲染主链作为运行时主体;其次,都通过脚本系统和编辑器工作流提高内容生产与调试效率;再次,都为高级渲染特性预留了较明确的扩展位置。因此,从工程角度理解渲染引擎,重点不应只放在某一个局部渲染效果上,而应放在“完整系统如何支持内容、渲染与工具协同”这一问题上。 + +## 2.3 主流引擎中体积特效的支持现状 + +### 2.3.1 体积特效在实时图形中的应用 + +云、雾、烟、火焰和体积光等效果已经成为现代实时图形表现中的重要组成部分。这类效果能够显著增强场景空间层次、光照氛围和视觉真实感,在游戏、数字场景展示和交互式图形应用中都有广泛需求。与传统表面渲染相比,体积特效处理的是空间中的参与介质,因此其实现通常涉及更复杂的采样、累积和光照近似问题。 + +### 2.3.2 主流引擎中体积特效的工程特点 + +从主流引擎的实际做法看,体积特效很少被组织为与引擎主体完全割裂的独立模块,而是通常与现有的资源系统、光照系统、材质系统、场景组织方式以及编辑器调试能力紧密结合。体积雾需要与相机和光照信息协同,体积云需要依赖体数据或程序化参数组织,体积光照则需要与阴影和后处理结果协调。这表明体积渲染在工程实现中本质上属于高级渲染扩展能力,而不是可以脱离引擎主体单独讨论的局部算法。 + +### 2.3.3 实时体积渲染面临的主要问题 + +尽管体积特效在现代引擎中已经较为常见,但实时体积渲染仍然面临明显挑战。一方面,参与介质中的吸收、散射和透射率累积会带来较高的计算开销;另一方面,体数据存储、采样精度、跳空优化和光照近似又直接影响效果质量与实时性能之间的平衡。因此,体积渲染既具有较强的理论性,也具有明显的工程实现难度。这也是本课题将其作为渲染引擎高级扩展重点展开的主要原因。 + +## 2.4 本课题渲染引擎的总体介绍 + +### 2.4.1 项目定位与整体组成 + +结合当前代码与工程组织方式,本文项目已经不再是围绕若干独立 sample 展开的图形实验集合,而是已经形成主体清晰的渲染引擎工作区。项目采用模块化 C++ 结构,`engine/` 负责引擎核心模块,`editor/` 负责桌面编辑器,`managed/` 负责脚本程序集,`project/` 负责示例工程与项目资源,`tests/` 负责主线模块测试。从当前主线结构看,项目已经建立起 `RHI -> Rendering -> Editor Viewport -> AssetDatabase/Library -> Mono Scripting` 的基本闭环,这说明系统已经具备较明确的引擎形态。 + +### 2.4.2 当前已实现的核心能力 + +从当前实现情况看,本文项目的渲染引擎主体已经覆盖多个关键部分。在图形接口层,系统已维护 `D3D12`、`OpenGL` 和 `Vulkan` 三种后端;在渲染层,已经形成以 `SceneRenderer`、`CameraRenderer` 和 `RenderPipeline` 为核心的主链结构;在资源层,已经建立 `Assets + .meta + Library` 风格的 `AssetDatabase`、artifact 缓存与运行时资源装载链路;在场景与组件层,已经形成 `Scene - GameObject - Component` 的组织方式;在渲染能力方面,已经支持 OBJ 模型渲染、材质系统、多光源、简单阴影以及编辑器视口离屏显示;在脚本与工具链方面,已经具备基于 Mono 的 C# 脚本系统,以及 `Scene`、`Game`、`Hierarchy`、`Inspector`、`Project`、`Console` 等编辑器工作界面,并支持对象拾取、轮廓高亮、网格和 Gizmo 等辅助能力。 + +### 2.4.3 当前阶段与后续扩展重点 + +基于上述主体能力,当前项目的后续重点已经集中到体积渲染扩展上。仓库中的体积渲染原型已经围绕 NanoVDB 数据读取、GPU 上传、体数据访问、光线步进、空域跳过和体积阴影等环节开展实现与验证,并正在向现有引擎主线进一步集成。也就是说,本文后续章节所讨论的体积渲染,并不是脱离现有项目背景的单独算法实现,而是建立在当前渲染引擎主体基础之上的高级扩展能力。 + +## 2.5 本章小结 + +本章从渲染引擎的发展脉络出发,说明了实时渲染引擎如何从单一绘制程序演进为集资源、场景、渲染、脚本和编辑器于一体的综合平台;随后对 Unity、Unreal Engine 和 Godot 等主流引擎的典型特点进行了概括,并分析了现代游戏引擎在体积特效支持方面的共同趋势;在此基础上,又结合当前项目的真实实现情况,对本文所涉及的渲染引擎主体能力和当前阶段重点进行了总体介绍。 + diff --git a/docs/plan/毕设/初稿/第五章.md b/docs/plan/毕设/初稿/第五章.md new file mode 100644 index 00000000..d68074a0 --- /dev/null +++ b/docs/plan/毕设/初稿/第五章.md @@ -0,0 +1,143 @@ +# 第五章 渲染引擎核心模块设计与实现 + +上一章已经对渲染引擎的总体分层、模块划分和数据流关系进行了说明。本章进一步下沉到运行时主体,围绕当前项目中已经形成的几个核心模块展开分析,重点说明这些模块在工程实现中的职责边界、关键数据结构和协同方式。结合现有代码实现,本章主要讨论 RHI 抽象层、资源系统、场景与组件系统、渲染主链、模型材质与着色器系统、多光源与简单阴影,以及 C# 脚本系统。它们共同构成了当前渲染引擎的主体能力,也是后续编辑器工作流和体积渲染模块接入的基础。 + +## 5.1 RHI 抽象层设计与实现 + +### 5.1.1 抽象目标与接口边界 + +渲染引擎的底层必须直接面对图形后端差异。不同图形 API 在资源创建方式、命令提交模型、描述符组织形式以及状态切换机制上均存在明显区别。如果上层渲染模块直接依赖某一个后端实现,那么渲染主链、资源绑定和管线状态组织都将与具体平台高度耦合,不利于后续扩展和维护。因此,本项目在底层建立了 RHI(Rendering Hardware Interface)抽象层,将图形设备能力统一为一组稳定接口,使上层模块更多围绕“渲染什么”和“如何组织渲染阶段”来展开,而不是反复处理后端 API 细节。 + +从当前实现看,`RHIDevice` 是这一抽象层的核心入口。它统一提供缓冲、纹理、交换链、命令列表、命令队列、着色器、管线状态、管线布局、同步栅栏、采样器、渲染通道、帧缓冲、描述符池、描述符集以及各类资源视图的创建接口。这样一来,渲染层在组织离屏纹理、深度表面、阴影图、材质资源绑定和绘制命令时,都可以基于统一对象模型展开。 + +### 5.1.2 多后端统一封装方式 + +当前项目的 RHI 已经形成了多后端组织结构。在工程构建层面,`engine/CMakeLists.txt` 中已经纳入了 `D3D12`、`OpenGL` 和 `Vulkan` 三套后端实现,以及与之对应的缓冲、纹理、资源视图、交换链、命令队列、命令列表、描述符、管线状态和截图支持等对象。对应地,`RHIFactory` 负责根据 `RHIType` 或字符串名称创建目标后端设备,从而将设备实例化过程与上层运行逻辑解耦。 + +这种设计并不是简单追求“支持多个 API”,更重要的是建立统一的资源语义。例如,上层不再分别讨论 D3D12 的描述符堆、OpenGL 的纹理单元或 Vulkan 的描述符集布局,而是通过统一的缓冲、纹理、采样器、描述符集和资源视图概念组织资源绑定;同样,上层也不直接处理各后端的原生命令对象,而是通过命令队列和命令列表接口完成绘制、状态切换与结果提交。当前项目的体积渲染研究阶段以 D3D12 为重点推进,但从引擎主体架构看,多后端 RHI 已经为引擎保留了较好的平台弹性。 + +### 5.1.3 RHI 对上层模块的支撑作用 + +RHI 抽象层在整个引擎中承担的是“运行时图形基础设施”的角色。资源系统最终生成的网格、纹理、材质常量和着色器变体,都需要落到 RHI 对象上;渲染主链中的主场景绘制、阴影绘制、对象 ID 绘制、后处理和最终输出,也都依赖 RHI 提供的离屏表面、命令提交和资源状态切换能力;编辑器视口同样是通过对渲染表面的申请和复用接入渲染主链的。可以说,RHI 为整个渲染引擎提供了统一而稳定的底层执行面,是后续所有高层模块成立的前提。 + +## 5.2 资源系统设计与实现 + +### 5.2.1 项目资源组织方式 + +一个可持续使用的渲染引擎不能只依赖运行时直接读取源文件,而必须建立源资源、导入信息和运行时产物之间的清晰关系。当前项目采用了 `Assets + .meta + Library` 的组织方式。`Assets` 目录保存模型、纹理、材质、着色器、场景等源文件;`.meta` 文件为每个资源记录稳定的 GUID 和导入相关信息;`Library` 目录则缓存导入后的 artifact,供运行时和编辑器直接使用。 + +`AssetDatabase` 是这一组织方式的核心实现。它内部区分 `SourceAssetRecord` 和 `ArtifactRecord` 两类记录:前者描述源资源路径、GUID、导入器名称、版本号、源文件哈希、`.meta` 哈希等信息,后者描述 artifactKey、主产物路径、资源类型、依赖项和主资源 localID 等内容。通过这种方式,资源的“工程身份”和“运行时形态”被明确分离,避免了项目规模扩大后路径变化、重复导入和资源引用失效等问题。 + +### 5.2.2 资源导入与 artifact 缓存 + +当前资源系统并不是简单地把文件复制到运行时目录,而是通过导入器将不同类型资源转换为适合引擎使用的中间产物。`AssetDatabase` 中已经实现了贴图、材质、模型、着色器、UI 文档等导入入口,并为每个 artifact 记录来源文件、依赖文件、文件尺寸和写入时间等信息。这样在执行 `Refresh`、`EnsureArtifact`、`ReimportAsset` 或 `ReimportAllAssets` 时,系统就可以根据源文件哈希、`.meta` 哈希、导入器版本以及依赖是否变化来判断是否需要重新导入。 + +在这一基础上,`AssetImportService` 对外进一步封装了项目资源维护流程。它负责初始化项目根目录、引导工程资源、刷新数据库、清理或重建缓存,并维护一份最近导入状态快照,包括当前操作、目标路径、成功与否、耗时以及本次导入和清理的资源数量。这样的封装一方面降低了上层模块直接操作 `AssetDatabase` 的复杂度,另一方面也为编辑器中的资源刷新、重导入和状态显示提供了统一接口。 + +### 5.2.3 运行时资源加载与缓存管理 + +在 artifact 已经准备完成后,运行时仍然需要一个统一入口将资源装载为引擎对象。当前项目中的 `ResourceManager` 承担了这一职责。它内部维护资源缓存、引用计数、资源路径映射、资源加载器注册表、异步加载器以及项目资源索引,并对外提供同步加载、异步加载、资源卸载、未使用资源回收和缓存刷新等能力。 + +值得注意的是,资源系统并没有把“项目资源定位”和“运行时资源加载”混在一起处理。前者主要由 `AssetImportService` 和项目索引负责,后者则由 `ResourceManager` 与具体 loader 负责执行。组件层中保存的通常是资源句柄、资源路径和 `AssetRef`,真正进入渲染阶段时,再由资源管理器解析为 `Mesh`、`Material`、`Shader`、`Texture` 等运行时对象。这样的分层使项目目录结构、资源导入规则和运行时访问机制能够各自独立演进,提高了工程实现的清晰度。 + +## 5.3 场景与组件系统设计与实现 + +### 5.3.1 Scene 与 GameObject 的层级组织 + +渲染引擎需要一种稳定的数据组织方式来承载场景内容。当前项目采用 `Scene - GameObject - Component` 的组织结构。其中,`Scene` 作为场景容器,负责对象创建与销毁、根节点管理、按名称或 ID 查找对象、场景序列化与反序列化,以及 `Update`、`FixedUpdate`、`LateUpdate` 等调度入口;同时,`Scene` 还提供对象创建和销毁事件,这一机制后续被脚本系统用来跟踪运行时脚本实例。 + +`GameObject` 则作为场景中的基本实体,维护对象 ID、UUID、名称、标签、层级、激活状态以及父子关系。每个对象默认持有 `TransformComponent`,从而形成统一的空间变换基础。通过 `SetParent`、`DetachFromParent`、`IsActiveInHierarchy` 等接口,项目已经能够表达典型的场景树结构。这样一来,无论是渲染系统进行层级遍历,还是编辑器显示 Hierarchy 结构,或者脚本逻辑查找父子对象,都可以建立在同一套对象模型之上。 + +### 5.3.2 基于组件的能力拼装方式 + +与把所有能力都堆叠到单一对象类中的做法相比,组件系统更适合渲染引擎这类需要持续扩展的工程。当前项目中的 `Component` 基类定义了 `Awake`、`Start`、`Update`、`FixedUpdate`、`LateUpdate`、`OnEnable`、`OnDisable` 和 `OnDestroy` 等基本生命周期接口,并提供启用状态控制。`GameObject` 则负责组件的添加、查找、删除以及层级中的递归查询。这样,对象本身只承担容器职责,而具体能力则由独立组件实现。 + +这种设计的直接收益体现在模块边界上。渲染系统只需要关注相机、光源、网格和材质相关组件;脚本系统只需要关注脚本组件和生命周期调度;编辑器则能够围绕组件列表构建属性面板。由于不同能力不再被硬编码到同一个对象类型中,引擎在扩展新组件时不会破坏既有对象模型,系统可维护性也更强。 + +### 5.3.3 关键渲染相关组件 + +当前项目中已经形成了较为完整的渲染相关组件集合。`CameraComponent` 用于描述观察参数和输出策略,包含透视与正交投影模式、视口矩形、近远裁剪面、清屏模式、相机深度、主相机标记、相机栈类型、裁剪掩码、天空盒材质以及后处理与最终颜色覆盖设置等内容。由此可见,相机在当前引擎中已经不只是一个“观察点”,而是一个完整的渲染请求配置载体。 + +`LightComponent` 当前支持方向光、点光和聚光三种类型,并提供颜色、强度、范围、聚光角和是否投射阴影等参数;`MeshFilterComponent` 负责维护网格资源句柄及其异步装载状态;`MeshRendererComponent` 则负责材质槽、材质路径、阴影投射与接收标记以及渲染层配置。通过 `MeshFilter + MeshRenderer` 的拆分,网格数据与绘制表现被明确分离,便于后续扩展更多绘制策略。除此之外,`ScriptComponent` 作为行为扩展入口,也已经被纳入组件体系之中,为脚本驱动场景对象提供了承载位置。 + +## 5.4 渲染主链设计与实现 + +### 5.4.1 从场景数据到渲染数据的提取 + +当前项目中的渲染主链并不是直接对场景树进行即时绘制,而是先将场景信息提取为更适合渲染阶段消费的中间数据。`RenderSceneExtractor` 在这一过程中承担核心职责。它首先根据当前场景和可用相机选择目标相机,构建 `RenderCameraData`,随后从场景根节点开始递归遍历对象,将满足激活状态与裁剪掩码条件的可见对象整理为 `VisibleRenderItem` 集合,并在提取完成后执行稳定排序。 + +除可见对象外,提取器还会同步整理场景光照信息。当前实现中,系统会先选出主方向光,再从其余光源中筛选附加光源并写入 `RenderLightingData`。这样,进入绘制阶段时,渲染系统面对的已经不是原始场景树,而是一份按当前相机视角整理好的渲染数据快照,从而避免在具体绘制过程中频繁穿透业务对象结构。 + +### 5.4.2 渲染请求规划与阶段拆分 + +在提取出场景数据之后,项目并没有立即绘制,而是进一步由 `SceneRenderRequestPlanner` 生成相机级别的渲染请求。该规划器首先收集可用相机,在处理 overrideCamera、主相机和叠加相机关系后,为每个相机构造一个 `CameraRenderRequest`。这一请求对象不仅保存目标场景、相机、上下文和输出表面,还显式拆分出 `DepthOnly`、`ShadowCaster`、`MainScene`、`PostProcess`、`FinalOutput`、`ObjectId`、`OverlayPasses` 等多个阶段,使一帧的执行结构从一开始就是清晰可分的。 + +这种“先规划、后执行”的方式是当前渲染主链的重要特征。它带来的一个直接优势是,各种离屏渲染需求都可以在请求阶段明确下来,而不必散落在绘制代码中临时拼接。无论是阴影贴图、对象 ID、后处理链,还是编辑器叠加层,都能统一纳入相机请求结构中管理。对于后续继续接入体积渲染等新阶段而言,这种阶段化请求模型也更容易扩展。 + +### 5.4.3 SceneRenderer、CameraRenderer 与当前管线 + +在执行层面,`SceneRenderer` 负责面向整个场景组织渲染流程,它能够根据场景、相机和目标表面构建请求列表,并为后处理和最终输出阶段准备必要的中间表面。之后,单个请求交由 `CameraRenderer` 继续处理。`CameraRenderer` 内部负责解析阴影绘制请求、调用 `RenderSceneExtractor` 生成本次绘制所需的 `RenderSceneData`,再将这些数据与目标表面一起提交给具体渲染管线执行。 + +当前主场景渲染采用 `RenderPipeline` 接口与 `BuiltinForwardPipeline` 实现相结合的方式。`RenderPipeline` 只规定初始化、销毁和渲染三个核心动作,而 `BuiltinForwardPipeline` 则给出了当前项目的具体实现形式。从代码结构看,这一前向渲染管线已经被进一步划分为不透明、天空盒和透明三个 pass,并能配合对象 ID、阴影和后处理阶段完成完整的一帧输出。这说明当前项目的渲染主链已经脱离了早期单通道绘制模式,形成了更接近实际引擎运行时的阶段化执行框架。 + +## 5.5 模型、材质与着色器系统 + +### 5.5.1 模型资源与网格数据组织 + +模型渲染能力是当前引擎主体功能中的重要组成部分。当前项目已经能够完成 OBJ 模型的导入和渲染,而运行时模型数据主要由 `Mesh` 资源承载。`Mesh` 内部保存顶点数据、索引数据、顶点属性标记、分段信息、包围盒以及与材质和纹理的关联关系。其中,`MeshSection` 进一步描述了每一段网格的顶点范围、索引范围和材质编号,这为多材质模型的绘制组织提供了基础。 + +这种网格表示方式并不依赖某一种具体模型格式,而是将导入结果统一整理为引擎内部可消费的数据结构。模型导入完成后,渲染阶段只需要根据 `MeshFilterComponent` 提供的网格资源句柄读取网格数据,再结合对应 `MeshRendererComponent` 的材质槽信息完成绘制。与此同时,网格包围盒还会参与阴影规划和可见对象组织,因此模型资源不仅服务于绘制本身,也服务于渲染流程中的其他阶段。 + +### 5.5.2 材质系统的参数化表达 + +材质系统承担的是“如何绘制对象”的职责。当前项目中的 `Material` 已经不仅仅保存一个着色器引用,而是同时维护渲染队列、渲染状态覆盖、标签、关键字集合、常量缓冲布局、纹理绑定和缓冲绑定等内容。材质可以按名称设置浮点、向量、整型、布尔、纹理和缓冲参数,并通过 `UpdateConstantBuffer` 将这些高层参数同步到运行时常量数据中。对于频繁变化的材质实例而言,`changeVersion` 还可以作为缓存失效和描述符重建的依据。 + +这种设计使材质在引擎中成为了连接“美术参数”和“渲染状态”的中间层。同一个着色器可以对应多份材质实例,不同实例可以在颜色、贴图、关键字、透明度、剔除方式和混合状态上表现不同,从而显著提高资源复用能力。由于材质本身也被纳入资源系统管理,因此它可以像模型和纹理一样参与导入、缓存、序列化和异步加载流程。 + +### 5.5.3 着色器通道与后端变体组织 + +着色器系统在当前项目中被设计为较强的数据驱动形式。`Shader` 资源内部包含属性描述、pass 列表、资源绑定描述、关键字声明以及不同阶段和不同后端的变体数据。每个 `ShaderPass` 可以携带固定功能状态、pass tag、资源绑定规则和关键字声明,而 `ShaderStageVariant` 则记录着色器阶段、语言类型、后端类型、入口点、profile 以及源码或编译后的二进制数据。通过这种方式,材质属性、资源绑定和后端着色器变体不再是松散分离的,而是围绕同一份着色器资源组织起来。 + +在当前渲染主链中,`BuiltinForwardPipeline` 会根据材质的 render state、着色器、pass 名称和关键字签名解析或缓存管线状态对象,并按渲染队列区分不透明与透明对象绘制。与此同时,引擎还内置了 forward lit、unlit 和 skybox 等基础着色器资源。这种组织方式说明当前项目已经形成了“网格描述几何、材质描述参数与状态、着色器描述通道与资源布局”的清晰分工,能够较稳定地支撑当前模型渲染和后续功能扩展。 + +## 5.6 多光源与简单阴影实现 + +### 5.6.1 多光源数据组织 + +为了满足基本场景表现需求,当前引擎已经实现了多光源照明。`RenderSceneExtractor` 在提取光照数据时,会先根据场景和裁剪掩码选出主方向光,并将其写入 `RenderLightingData::mainDirectionalLight`。对于其余光源,系统会根据光源类型、影响程度和对象顺序进行排序,再从中选出最多 8 个附加光源写入 `additionalLights` 数组。当前附加光源支持方向光、点光和聚光三种类型,其中点光和聚光会额外携带位置、范围和聚光角等参数。 + +这种主光源加附加光源的组织方式比较符合当前项目的工程阶段。一方面,主方向光能够稳定承担场景中的整体照明和阴影来源;另一方面,附加光源数量被限制在一个可控范围内,便于前向渲染管线在常量数据和着色器循环中保持相对稳定的开销。对于偏工程设计类课题而言,这种方案在效果与复杂度之间取得了较合适的平衡。 + +### 5.6.2 简单方向光阴影实现 + +当前阴影系统以主方向光阴影为主,并未扩展到点光阴影、聚光阴影或级联阴影等更复杂形式。其核心流程由 `SceneRenderRequestPlanner` 完成规划,再由 `CameraRenderer` 与渲染主链执行。具体来说,规划器会在构建相机请求时检查当前相机是否需要规划方向光阴影,如果场景中存在可投影的主方向光,则根据相机视锥范围、观察方向和阴影投射对象的包围盒,计算出一个聚焦于当前相机可见区域的正交阴影相机,生成 `DirectionalShadowRenderPlan`,并同步填充 `ShadowCaster` 阶段的绘制请求。 + +在执行时,阴影阶段首先将投射阴影的对象绘制到深度表面,再在主场景绘制阶段以阴影贴图形式参与采样。`MeshRendererComponent` 中的 `castShadows` 和 `receiveShadows` 开关决定了对象是否参与阴影投射和接收。当前实现虽然属于“简单阴影”,但已经完成了从阴影请求规划、阴影图绘制到主场景采样使用的完整闭环,能够支持当前场景验证需求。 + +### 5.6.3 当前效果验证情况 + +从测试工程可以看出,当前引擎已经围绕典型渲染能力建立了一组集成测试场景。其中,`multi_light_scene` 和 `spot_light_scene` 用于验证多光源和聚光照明效果,`directional_shadow_scene` 用于验证当前方向光阴影流程,`transparent_material_scene` 用于验证透明材质绘制顺序,`backpack_scene` 与 `backpack_lit_scene` 则用于验证模型导入、材质绑定和基础光照结果。这些测试说明当前多光源与简单阴影并不是停留在接口层,而是已经能够进入实际场景输出环节。 + +## 5.7 C# 脚本系统设计与实现 + +### 5.7.1 托管运行时总体结构 + +在当前项目中,脚本系统已经成为渲染引擎主体的一部分,而不是附着在外部的独立工具。整个系统由 `ScriptEngine`、`IScriptRuntime`、`ScriptComponent` 和 `managed` 目录中的托管程序集共同构成。`ScriptEngine` 负责从引擎角度管理运行状态和生命周期调度,`IScriptRuntime` 用于抽象具体脚本运行时,当前实际实现为基于 Mono 的 `MonoScriptRuntime`。在托管侧,`managed/CMakeLists.txt` 会构建 `XCEngine.ScriptCore.dll` 和 `GameScripts.dll`,并将程序集与 `mscorlib.dll` 复制到输出目录以及项目的 `Library/ScriptAssemblies` 中,为运行时加载提供基础。 + +这一设计的关键点在于:原生引擎和托管脚本并不是彼此孤立的。原生侧维护场景对象、组件和渲染状态,托管侧则通过 `ScriptCore` 暴露出的包装类型访问这些对象。这样既保留了引擎主体在 C++ 侧的执行效率,也使场景行为逻辑具备了更灵活的扩展方式。 + +### 5.7.2 脚本组件与生命周期调度 + +`ScriptComponent` 是场景对象接入脚本系统的直接入口。它保存脚本程序集名、命名空间、类名、脚本组件 UUID 以及字段存储信息,从而能够稳定标识一个脚本实例。运行时启动后,`ScriptEngine` 会记录当前运行场景,订阅场景对象创建事件,收集场景中的脚本组件,并以“对象 UUID + 脚本组件 UUID”作为键建立脚本实例状态。之后,引擎会按照 `Awake`、`OnEnable`、`Start`、`Update`、`FixedUpdate`、`LateUpdate` 的顺序驱动脚本生命周期;在脚本禁用、销毁或运行时停止时,再执行 `OnDisable` 和 `OnDestroy` 等清理流程。 + +从当前实现可以看到,脚本系统已经不只是简单地“能调一下 Update”。`ScriptEngine` 对脚本可运行状态、实例创建状态、Awake 是否调用、Start 是否待执行、是否处于启用状态等信息都做了显式跟踪,并能够在脚本类变化时重建对应状态。这使托管脚本与场景生命周期之间建立了相对完整的同步关系,也为后续编辑器字段检查、运行时重载和调试支持打下了基础。 + +### 5.7.3 Mono 桥接与托管 API 暴露 + +`MonoScriptRuntime` 负责原生引擎与托管程序集之间的真正桥接。它在初始化时加载核心程序集和应用程序集,发现继承自 `MonoBehaviour` 的脚本类,缓存生命周期方法和字段元数据,并在需要时创建、销毁和调用托管对象。当前实现还支持字段读写、字段默认值提取、`SerializeField` 标记识别,以及 `GameObject`、组件引用等对象的托管侧表示,这意味着脚本实例不只是一个黑盒,而是已经能够与原生对象系统双向同步数据。 + +与此同时,`XCEngine.ScriptCore` 已经提供了 `GameObject`、`Transform`、`Input`、`Camera`、`Light`、`MeshFilter`、`MeshRenderer`、`Debug`、`Time`、`Vector3`、`Quaternion` 等基础托管 API。这使场景脚本能够直接操纵对象变换、读取输入、访问常用组件并控制运行行为。对于当前渲染引擎而言,C# 脚本系统的意义并不只是增加一种开发语言,而是使场景层逻辑与渲染引擎主体之间形成了更加完整的工程闭环。 + +## 5.8 本章小结 + +本章围绕当前项目已经完成的渲染引擎主体实现,对 RHI 抽象层、资源系统、场景与组件系统、渲染主链、模型材质与着色器系统、多光源与简单阴影,以及 C# 脚本系统进行了分析。可以看到,当前项目已经形成了较完整的运行时基础:底层具备多后端图形抽象能力,中层具备资源导入与缓存、场景组织与渲染请求规划能力,上层具备模型渲染、材质系统、基础光照阴影和脚本扩展能力。这些模块共同构成了当前渲染引擎的主体,也是后续编辑器工作流和体积渲染模块继续展开的工程基础。 diff --git a/docs/plan/毕设/初稿/第六章.md b/docs/plan/毕设/初稿/第六章.md new file mode 100644 index 00000000..4d4b8365 --- /dev/null +++ b/docs/plan/毕设/初稿/第六章.md @@ -0,0 +1,123 @@ +# 第六章 编辑器与引擎工作流设计与实现 + +上一章已经围绕渲染引擎运行时的核心模块展开分析,说明了底层图形抽象、资源管理、场景组织、渲染主链以及脚本系统的实现方式。在此基础上,本章进一步转向引擎的可视化工作界面与工程工作流部分,重点说明当前项目中的编辑器如何围绕场景编辑、资源浏览、参数调整、运行验证和脚本支撑等需求组织起来。对于本课题而言,编辑器是连接资源系统、场景系统、渲染系统和脚本系统的直接工作入口,也是展示整个系统工程完成度的重要部分。 + +## 6.1 编辑器在引擎中的定位 + +### 6.1.1 编辑器作为引擎工作界面 + +当前项目中的编辑器由 `Application`、`EditorLayer`、`EditorWorkspace` 以及各类面板共同构成,其初始化过程直接建立在现有引擎能力之上。编辑器启动时,系统首先完成窗口渲染器初始化,随后初始化 `ResourceManager` 并设置项目根目录,在此基础上创建 `EditorContext`、初始化脚本运行时、建立 ImGui 后端桥接,并由 `ViewportHostService` 接管编辑器视口所需的离屏渲染资源。完成这些准备后,`EditorLayer` 被挂接到应用层级系统中,编辑器界面才开始进入逐帧更新与绘制阶段。 + +从这一结构可以看出,编辑器直接复用引擎已有的资源系统、渲染链路、场景数据和脚本运行时能力。编辑器中的界面显示、视口输出和运行模式切换都以统一的上下文对象为中心展开,这使得编辑器天然具备“所见即当前引擎状态”的特点,也保证了论文中对编辑器功能的讨论能够真实反映项目的工程实现情况。 + +### 6.1.2 编辑器承担的核心任务 + +结合当前代码结构,编辑器主要承担以下几类任务。其一是场景编辑任务,包括场景层级浏览、对象选择、重命名、父子层级调整以及组件参数检查。其二是资源管理任务,包括 `Assets` 目录浏览、文件夹导航、资源创建、重命名、删除、移动以及导入状态反馈。其三是渲染验证任务,即通过 `Scene` 与 `Game` 两类视口把引擎渲染结果以不同用途展示出来,其中前者面向编辑过程,后者面向运行结果。其四是脚本与调试支撑任务,包括脚本程序集重建、脚本运行时重载、日志查看、错误定位以及运行模式控制。 + +为了支撑这些任务,编辑器内部通过 `EditorContext` 对事件总线、选择管理器、场景管理器、项目管理器、撤销管理器和视口宿主服务进行统一组织。这样一来,不同面板虽然在界面上彼此独立,但在数据层和事件层是相互联通的。例如层级面板中的对象选择会同步到 Inspector 面板,Project 面板中的资源选择会切换 Inspector 的检查对象,Game 视口中的输入帧又会通过事件总线进入运行时输入系统。这种组织方式使编辑器能够围绕统一编辑上下文协同工作,形成结构完整的界面系统。 + +### 6.1.3 编辑器与运行时的协同关系 + +`EditorWorkspace` 是编辑器运行阶段的核心组织者。在工作区附加阶段,系统会依次注册 `MenuBar`、`HierarchyPanel`、`SceneViewPanel`、`GameViewPanel`、`InspectorPanel`、`ConsolePanel` 和 `ProjectPanel` 等主要面板,同时创建 `DockLayoutController`,加载启动场景,并挂接 `PlaySessionController`。在逐帧更新阶段,工作区负责驱动异步资源加载更新、运行模式更新以及各面板自身的刷新;在界面绘制阶段,再由菜单栏、停靠布局和各面板共同完成整套编辑器界面的输出。 + +其中较为关键的一点,是编辑器不仅负责“编辑”,还负责把编辑状态与运行状态组织成闭环。`PlaySessionController` 在进入播放模式前会保存当前编辑态场景快照,停止播放时再恢复快照,从而把运行时验证和编辑态维护分离开来。这样既能保证 `Game` 视口中脚本逻辑、输入和运行时场景更新能够被真实执行,又能在停止运行后回到稳定的编辑状态。这一协同机制使编辑器成为引擎工作流的核心组成部分。 + +## 6.2 编辑器界面总体布局设计 + +### 6.2.1 主要界面面板组成 + +从当前实现来看,编辑器界面主要由顶部菜单栏与运行控制区、左侧层级面板、中部双视口区域、右侧属性检查面板以及底部控制台和项目资源面板构成。各部分职责划分明确:`MenuBar` 负责主菜单与运行模式控制,`HierarchyPanel` 用于展示当前场景对象树,`SceneViewPanel` 和 `GameViewPanel` 分别承担编辑视图与运行视图显示任务,`InspectorPanel` 负责组件和资源属性编辑,`ProjectPanel` 负责项目目录与资源浏览,`ConsolePanel` 则承担日志查看与调试辅助功能。 + +这种布局与当前项目已经具备的功能模块一一对应。由于本项目已经具备场景系统、组件系统、材质系统、脚本系统和基础运行模式切换能力,因此编辑器界面也自然围绕这些能力组织。用户在编辑器中完成的操作路径,基本可以概括为“在 `Project` 中选择资源,在 `Hierarchy` 中定位对象,在 `Inspector` 中调整参数,在 `Scene` 中观察编辑结果,在 `Game` 中验证运行结果,并通过 `Console` 反馈调试信息”。 + +### 6.2.2 停靠布局与空间组织方式 + +编辑器界面的整体停靠布局由 `DockLayoutController` 统一管理。当前默认布局中,左侧区域停靠 `Hierarchy`,中部区域停靠 `Scene` 与 `Game` 两个标签页,右侧区域停靠 `Inspector`,底部区域停靠 `Console` 与 `Project`。这一布局与当前工程任务之间具有较强的一致性:对象结构查看放在左侧,核心视口放在中央,参数编辑放在右侧,资源与调试信息放在底部,符合渲染引擎编辑器的基本操作习惯,也便于在论文中按照“对象编辑 - 视口验证 - 资源管理 - 调试反馈”的路径说明工作流。 + +在界面上方,`MenuBar` 除了主菜单外,还单独绘制了运行工具条。该工具条提供播放、暂停和单步执行三个核心按钮,并直接与当前运行模式状态联动。这样一来,场景编辑、运行控制和视口验证被组织在同一工作界面中,用户无需在不同程序之间切换即可完成从编辑到验证的全过程。 + +此处建议插入图 6-1“编辑器整体界面截图”,重点展示顶部菜单与运行控制区、左侧 `Hierarchy`、中部 `Scene/Game` 双视口、右侧 `Inspector`、底部 `Console/Project` 的整体布局关系。 + +### 6.2.3 面板之间的联动关系 + +编辑器界面的价值不仅在于布局清晰,更在于各面板之间形成了稳定的数据联动。`HierarchyPanel` 中的选择结果会同步到选择管理器,随后 `InspectorPanel` 根据当前选中对象展示组件信息;`ProjectPanel` 中选中的材质资源则会切换 Inspector 的检查对象类型,使其进入材质资源编辑模式;`SceneViewPanel` 中通过拾取选中的对象同样会反馈到层级面板和 Inspector;而 `ConsolePanel` 中的日志信息又能够反向服务于当前脚本和运行调试。 + +因此,界面布局设计本质上也是工作流设计。通过统一的编辑上下文,各面板既保持了职责分工,又避免了信息孤立,使编辑器能够围绕当前引擎形成完整的操作闭环。 + +## 6.3 Scene 与 Game 视口实现 + +### 6.3.1 视口离屏渲染接入方式 + +当前编辑器中的视口通过离屏渲染方式接入。`ViewportPanelContent` 在绘制 `Scene` 或 `Game` 面板时,会向 `IViewportHostService` 发起 `RequestViewport` 请求,请求中包含视口类型和当前窗口可用尺寸。`ViewportHostService` 接收到请求后,会根据目标尺寸检查或创建对应的离屏颜色缓冲、深度缓冲以及相关资源视图,并在后续渲染阶段返回可供 ImGui 显示的纹理句柄。 + +这种设计带来的直接好处是,编辑器视口与主窗口交换链输出相互分离。视口可以根据面板尺寸独立变化,也可以附加对象 ID 缓冲、叠加层和调试通道,而不必改变主窗口渲染流程。对于需要同时存在编辑视图和运行视图的渲染引擎而言,这种离屏接入方式具有较好的工程适配性。 + +### 6.3.2 Scene 视口的组织方式 + +`Scene` 视口服务于编辑过程,因此它采用独立于运行时场景相机的编辑器相机。`ViewportHostService` 内部维护了专用的 `SceneViewCameraState`,其中包含编辑器相机对象、相机组件和相机控制器。用户在 `SceneViewPanel` 中进行观察、缩放、平移、环绕和聚焦操作时,面板会构造 `SceneViewportInput` 并提交给 `ViewportHostService`,由后者更新场景视口相机状态。 + +在渲染阶段,`Scene` 视口会先围绕当前编辑器相机生成渲染请求,再结合对象选择结果和叠加信息构造额外的编辑器渲染计划。当前实现中,`Scene` 视口已经支持对象 ID 读回拾取、选中轮廓高亮、网格显示、变换 Gizmo、方向指示器以及编辑器叠加层缓存等能力。这说明 `Scene` 视口是一个建立在引擎渲染链路之上的可交互编辑视图。 + +### 6.3.3 Game 视口的组织方式 + +与 `Scene` 视口不同,`Game` 视口主要用于展示运行时场景输出结果。它不使用独立的编辑器相机,而是直接依赖当前场景中的可用相机,由 `SceneRenderer` 使用正常的运行时渲染流程完成输出。若场景中不存在可用相机,则 `Game` 视口会明确给出无法渲染的状态反馈。由此可见,`Game` 视口本质上是运行时渲染结果在编辑器中的嵌入显示窗口。 + +`GameViewPanel` 在显示画面的同时,还会把当前帧的键盘、鼠标位置、按键状态和滚轮状态整理为 `GameViewInputFrameEvent` 并发布到事件总线中。随后 `PlaySessionController` 在播放模式下接收该事件,并将其转换为 `InputManager` 可识别的输入数据。因此,`Game` 视口不仅承担画面展示功能,还承担了编辑器到运行时输入桥接的作用。 + +此处建议插入图 6-2“Scene 视口与 Game 视口对照截图”,用于展示二者在观察目的、交互方式和输出内容上的差异。 + +### 6.3.4 视口与渲染主链的关系 + +无论是 `Scene` 视口还是 `Game` 视口,当前项目都没有为其单独实现一套完全不同的渲染器。两类视口都通过 `ViewportHostService` 接入现有的 `SceneRenderer` 和渲染请求生成流程,只是在相机来源、附加渲染通道和输入处理方式上有所区别。这样做的意义在于,编辑器视口所展示的结果与引擎实际渲染能力保持一致,既减少了重复实现,也使视口验证具有更高的可信度。 + +## 6.4 编辑器交互与调试辅助能力 + +### 6.4.1 对象选择与场景编辑交互 + +在场景编辑过程中,对象选择是最基础也是最频繁的交互。当前项目同时提供了层级树选择和视口直接拾取两种方式。前者由 `HierarchyPanel` 完成,用户可以在对象树中展开、选中、重命名对象,并通过拖放改变父子层级关系;后者则由 `Scene` 视口中的对象 ID 拾取流程完成,系统通过离屏对象 ID 纹理读回鼠标位置对应的实体编号,再同步到选择管理器。 + +对象选中之后,相关状态会立即反馈到其他面板。`InspectorPanel` 会切换到对应对象的组件检查界面,`Scene` 视口会刷新轮廓高亮和 Gizmo,层级面板也会保持当前选中状态。这种以统一选择状态为中心的交互方式,使用户既可以从结构树编辑场景,也可以直接在视口中完成对象定位与操作。 + +### 6.4.2 变换 Gizmo 与辅助显示 + +为了提高场景编辑效率,`Scene` 视口实现了较为完整的变换交互辅助能力。当前代码中已经包含平移、旋转、缩放三类 Gizmo,以及用于协调三者状态的 `SceneViewportTransformGizmoCoordinator`。用户可在视口中直接拖动控制柄修改对象变换,并在交互过程中结合撤销管理器记录编辑操作。这使编辑器具备了较为明确的几何编辑能力,而不只是参数填写工具。 + +除变换 Gizmo 外,视口中还实现了场景网格、选中轮廓、方向指示器和 HUD 叠加层等辅助显示内容。网格用于增强空间尺度感,选中轮廓用于强化对象定位,方向指示器用于辅助相机朝向理解,HUD 则用于补充编辑状态显示。这些辅助内容虽然不直接参与运行时渲染结果,但对于编辑器的可用性和调试效率具有重要作用。 + +此处建议插入图 6-3“Scene 视口交互界面截图”,重点展示对象选中轮廓、场景网格和变换 Gizmo 的叠加效果。 + +### 6.4.3 导航控制与交互状态管理 + +`SceneViewPanel` 还围绕编辑视口建立了较完整的导航状态管理机制。当前支持的交互包括观察、平移、环绕、聚焦选中对象以及基于键鼠组合的视角移动。面板内部会根据鼠标按键状态、快捷键状态、工具模式和当前是否存在激活中的 Gizmo 来判断当前交互应解释为视口导航还是对象编辑,并进一步决定是否由 ImGui 捕获鼠标或键盘输入。 + +这种交互状态管理对于编辑器而言十分关键。如果缺少这一层协调,视口观察、对象拖拽、快捷键切换和界面点击很容易相互冲突。当前项目通过专门的交互解析与导航状态更新流程,把不同输入意图区分开来,使 `Scene` 视口能够在复杂编辑状态下保持稳定响应。 + +## 6.5 资源与脚本工作流支撑 + +### 6.5.1 项目资源浏览与导入状态反馈 + +`ProjectPanel` 是当前编辑器中承担工程资源工作流的主要界面。该面板左侧以树状结构展示项目文件夹,右侧以资源网格方式显示当前目录内容,并提供面包屑导航、搜索、右键上下文菜单、拖放移动、重命名以及新建文件夹和材质资源等功能。对于图像资源,面板还可以直接显示缩略图预览,从而提高资源识别效率。 + +除了资源浏览本身,`ProjectPanel` 还会显示资源导入状态和场景加载状态。其工具栏可以读取 `ResourceManager::GetProjectAssetImportStatus()` 返回的导入快照,并把当前导入操作、耗时和成功与否展示出来;同时也会读取 `SceneManager` 维护的场景加载进度信息,用于反馈当前场景是否仍有异步资源尚未完成。这使资源管理不再停留在文件浏览层面,而是能够反映资源进入运行时之前的真实处理状态。 + +### 6.5.2 场景文档与运行模式工作流 + +编辑器中的场景工作流主要由 `SceneManager` 和 `PlaySessionController` 共同完成。`SceneManager` 负责场景创建、对象创建与删除、对象复制与粘贴、层级移动、场景加载与保存,以及场景脏标记维护;同时还支持场景快照捕获与恢复。对于编辑工作而言,这意味着场景既是可视化内容容器,也是可以被保存、恢复和回滚的文档对象。 + +在运行模式切换方面,`PlaySessionController` 提供了播放、停止、暂停、恢复和单步执行等控制能力,并通过事件总线与顶部运行工具条联动。进入播放模式前,控制器会保存当前编辑场景快照并清空撤销历史,然后启动运行时循环;停止播放时,再恢复编辑态快照并回到普通编辑模式。这一机制把“编辑场景”和“验证运行结果”衔接在一起,是当前编辑器工作流中最能体现工程闭环的一部分。 + +### 6.5.3 脚本程序集与调试支撑 + +当前项目已经具备基于 C# 的脚本系统,因此编辑器也必须承担脚本工作流支撑任务。`Application` 在初始化编辑器时会尝试从 `Library/ScriptAssemblies` 目录加载 `XCEngine.ScriptCore.dll`、`GameScripts.dll` 和相关运行时程序集;如果程序集不存在,编辑器会明确记录状态信息并禁用脚本类发现。与此同时,编辑器还提供了脚本程序集重建与脚本运行时重载能力,使脚本修改后能够重新进入编辑器工作流。 + +在对象检查层面,`InspectorPanel` 通过 `ComponentEditorRegistry` 为 `Transform`、`Camera`、`Light`、`MeshFilter`、`MeshRenderer` 和 `ScriptComponent` 等组件注册了对应的编辑器,从而使对象属性面板不仅能显示组件数据,还能承担组件参数编辑和脚本组件检查的任务。对于材质资源,Inspector 还支持单独的材质资源检查与保存流程,这进一步体现了编辑器对资源系统的深入接入。 + +在调试支撑方面,`ConsolePanel` 提供了日志级别筛选、折叠显示、搜索、清空、错误暂停、详情查看和源位置打开等功能。控制台不仅能够查看普通日志,还能够在播放模式中配合错误暂停机制辅助脚本调试。这样一来,脚本编译、运行验证和错误定位便能够在同一个编辑器环境中完成。 + +此处建议插入图 6-4“Project、Inspector 与 Console 联动截图”,用于展示资源浏览、属性编辑与日志调试在同一工作流中的组织方式。 + +## 6.6 本章小结 + +本章围绕当前项目中的编辑器与工作流实现进行了分析。可以看到,编辑器是建立在渲染引擎运行时、资源系统、场景系统和脚本系统之上的统一工作界面。在结构上,系统通过 `Application`、`EditorContext`、`EditorWorkspace` 和各类面板完成了编辑器的整体组织;在界面上,形成了菜单栏、双视口、层级面板、属性面板、项目资源面板和控制台共同构成的工作布局;在功能上,又通过对象拾取、Gizmo 交互、离屏视口、播放控制、资源导入反馈、脚本重载和日志调试等能力,把编辑、验证与调试串联成完整流程。 + +对于本课题后续的体积渲染扩展而言,编辑器部分的意义在于提供了稳定的验证和展示平台。无论后续体积渲染模块以何种方式接入现有渲染主链,都可以借助当前编辑器的视口、资源工作流和调试能力完成参数调整、效果观察和结果记录。因此,编辑器与工作流部分不仅体现了当前渲染引擎的工程完整性,也为后续高级渲染模块的并入提供了必要支撑。 diff --git a/docs/plan/毕设/初稿/第四章.md b/docs/plan/毕设/初稿/第四章.md new file mode 100644 index 00000000..af5d3680 --- /dev/null +++ b/docs/plan/毕设/初稿/第四章.md @@ -0,0 +1,105 @@ +# 第四章 渲染引擎总体架构设计 + +前两章已经分别给出了渲染引擎相关技术基础和体积渲染理论基础。在此基础上,本章从系统设计层面对当前项目中的渲染引擎进行说明,重点讨论引擎设计目标、总体分层方式、核心模块职责边界、模块之间的协同关系,以及体积渲染扩展在整体架构中的位置。本章的任务是把整个系统的组织方式讲清楚,为后续第5章、第6章和第7章的具体实现分析建立统一框架。 + +## 4.1 引擎设计目标 + +### 4.1.1 形成完整的渲染引擎工作框架 + +本项目的架构设计以渲染引擎为主体展开,目标是在统一框架下组织图形接口、资源管理、场景组织、渲染执行、脚本扩展和编辑器工作流等能力。这样的架构安排使系统能够围绕同一套运行时基础持续扩展,并将图形绘制、资源处理和工具能力组织在同一体系中。对工程设计类课题而言,完整框架本身就是系统价值的重要组成部分。 + +### 4.1.2 建立稳定的基础场景渲染闭环 + +渲染引擎的总体架构首先需要保证基础场景渲染闭环成立,即资源能够进入运行时,场景能够组织对象,相机与光照能够驱动渲染流程,最终结果能够稳定输出到窗口或视口。只有这一闭环清晰成立,模型渲染、材质绑定、多光源、阴影以及后续更高层渲染特性才有统一的承载基础。因此,基础场景渲染闭环是架构设计中的首要目标之一。 + +### 4.1.3 兼顾运行时能力与编辑器工作流 + +当前项目不仅包含运行时系统,也包含围绕资源浏览、场景编辑、参数调整和结果验证构建的编辑器工作流。因此,在总体架构设计中,需要同时考虑运行时执行链路和工具侧使用链路,使资源、场景、脚本和渲染结果能够在同一体系中流转。这样的结构有助于保持项目内部数据的一致性,也有助于后续论文从工程整体角度展开分析。 + +### 4.1.4 为高级渲染特性扩展预留架构空间 + +渲染引擎的架构设计不仅服务于当前已完成的基础能力,也需要为后续扩展保留空间。体积渲染作为当前项目中最重要的高级渲染扩展,需要依附既有资源系统、渲染主链和编辑器验证能力接入系统。因此,在总体架构层面,需要预留新资源类型、新渲染阶段和新调试入口能够自然接入的位置,使扩展能够沿既有资源、渲染和验证链路进入系统。 + +## 4.2 引擎总体分层架构 + +结合当前项目的代码结构和功能组织方式,本文将渲染引擎总体概括为平台层、图形接口抽象层、资源与场景层、渲染组织层以及脚本与编辑器层五个主要层级。在此之外,系统中还存在内存、线程、调试、音频和 UI 等支撑模块,但从论文主体展开角度看,上述五层构成了最核心的结构主线。 + +### 4.2.1 平台层 + +平台层位于整个系统的底部,负责窗口、消息循环、输入接入、时间管理和文件系统访问等基础运行环境。它决定了主循环如何驱动系统更新,也决定了渲染结果最终如何呈现到屏幕上。平台层本身不直接组织场景和资源,但它为上层所有模块提供统一的执行起点。 + +### 4.2.2 图形接口抽象层 + +图形接口抽象层建立在平台层之上,用于统一封装不同图形后端的资源模型和命令执行方式。其核心作用是把设备、缓冲、纹理、资源视图、命令列表、交换链和管线状态等底层对象收敛为稳定接口,使上层系统能够围绕统一的图形资源和执行语义展开设计。对于渲染引擎而言,这一层是保持后续模块结构清晰的重要基础。 + +### 4.2.3 资源与场景层 + +资源与场景层负责回答“系统中有哪些内容”以及“这些内容如何进入运行时”两个问题。资源部分承担模型、纹理、材质、着色器和场景文件等工程资源的导入、缓存和装载职责,场景部分则负责对象层级、组件挂接和运行时内容组织。通过这一层,工程目录中的资源可以被转化为可参与渲染和逻辑更新的场景内容。 + +### 4.2.4 渲染组织层 + +渲染组织层位于资源与场景层之上,负责把场景状态整理为可执行的渲染流程。它的职责并不在于保存内容本身,而在于围绕当前相机、光照和输出目标,对可见对象、渲染阶段和表面资源进行统一规划。这样一来,渲染过程就不再是临时的逐对象绘制,而是能够形成结构清晰的主链执行框架。 + +### 4.2.5 脚本与编辑器层 + +脚本与编辑器层更接近开发工作流。脚本系统为运行时对象提供行为扩展入口,编辑器则为场景编辑、资源管理和渲染结果验证提供可视化工作界面。这一层并不脱离引擎主体独立存在,而是建立在已有资源、场景和渲染能力之上,使系统从“能够运行”进一步扩展到“能够组织工作流和验证结果”。 + +## 4.3 核心模块职责划分 + +从当前项目的功能组织方式看,引擎主体的核心模块可以归纳为 `RHI`、`Resources / AssetDatabase`、`Scene / Components`、`Rendering`、`Scripting` 和 `Editor` 六个部分。它们之间的区别不在于是否都与渲染相关,而在于各自承担的职责边界不同。 + +### 4.3.1 `RHI` + +`RHI` 模块承担底层图形接口抽象职责,负责统一不同图形后端的资源对象和命令执行语义。它解决的是“底层如何与 GPU 交互”的问题,是整个渲染引擎的图形基础设施。 + +### 4.3.2 `Resources / AssetDatabase` + +资源模块负责源资源记录、导入产物生成、缓存管理和运行时资源定位。它解决的是“工程资源如何稳定进入引擎”的问题,是内容进入运行时之前的组织基础。 + +### 4.3.3 `Scene / Components` + +场景与组件模块负责运行时对象的层级组织与能力挂接。它解决的是“运行时内容如何表达”的问题,为渲染系统、脚本系统和编辑器提供统一的对象模型。 + +### 4.3.4 `Rendering` + +渲染模块负责把场景状态转换为阶段化的渲染执行过程。它解决的是“图像如何被生成”的问题,是场景内容通向最终画面的核心组织层。 + +### 4.3.5 `Scripting` + +脚本模块负责托管逻辑与原生运行时之间的桥接。它解决的是“对象行为如何扩展”的问题,使运行时系统具备更灵活的逻辑组织能力。 + +### 4.3.6 `Editor` + +编辑器模块负责围绕场景、资源、脚本和渲染结果建立可视化工作界面。它解决的是“系统如何被编辑、观察和验证”的问题,是当前项目工程完整性的重要体现。 + +## 4.4 模块协同与数据流 + +总体架构是否清晰,最终体现在模块之间的数据流是否顺畅。结合当前项目的组织方式,可以从资源流、渲染流、工具流和脚本联动四个角度理解模块协同关系。 + +### 4.4.1 资源从工程目录进入运行时的路径 + +工程目录中的模型、纹理、材质、着色器和场景文件首先经过资源系统的扫描、导入和缓存,随后被装载为运行时可直接使用的资源对象。这些资源再进一步被场景中的对象和组件引用,最终参与渲染和逻辑更新。由此形成从工程资源到运行时内容的第一条主线。 + +### 4.4.2 场景状态到渲染数据的转换关系 + +场景层负责维护对象层级、组件状态和运行时内容,渲染层则根据当前相机与光照条件,从场景状态中提取出本帧需要执行的渲染数据,并进一步组织为分阶段的渲染请求。经过这一转换,运行时内容状态被映射为可以提交给图形接口执行的绘制流程。 + +### 4.4.3 编辑器视口与渲染主链的接入关系 + +编辑器中的视口显示建立在现有渲染主链基础上的离屏接入方式之上。编辑器通过视口把场景画面、运行画面和调试叠加信息重新组织为可观察结果,再反馈到用户界面中。这样,工具侧能够直接复用引擎主体能力,同时保证编辑器中所见结果与系统实际渲染结果保持一致。 + +### 4.4.4 脚本更新、场景状态与渲染结果之间的联动 + +脚本系统在运行时对对象和组件状态进行更新,这些变化首先作用于场景层,随后在下一帧被渲染层提取并反映到最终画面中。由此形成“脚本驱动场景,场景驱动渲染”的联动关系。对编辑器而言,这种联动关系还意味着运行验证结果可以被直接观察和调试,从而进一步闭合整个工作流。 + +## 4.5 体积渲染模块在总体架构中的位置 + +从总体架构角度看,体积渲染模块位于渲染组织层的高级扩展位置。它一方面依赖图形接口抽象层提供缓冲、纹理、资源视图和命令执行能力,另一方面依赖资源系统完成体数据文件的组织与装载,同时还需要借助现有渲染主链和编辑器视口完成参数调试与结果验证。因此,体积渲染是建立在引擎主体基础之上的高级扩展。 + +结合当前项目进展,体积渲染部分已经完成独立原型阶段的关键流程验证,包括 NanoVDB 数据读取、GPU 数据上传、体数据访问、光线步进、空域跳过和体积阴影等内容。其后续目标是进一步并入现有渲染主链,使其成为渲染引擎高级渲染能力的一部分。这样的安排与当前总体架构保持一致,也使体积渲染章节能够自然建立在引擎主体章节之后展开。 + +## 4.6 本章小结 + +本章从系统设计层面对当前项目中的渲染引擎进行了分析,明确了引擎架构的主要目标,包括形成完整工作框架、建立基础场景渲染闭环、兼顾运行时能力与编辑器工作流,以及为高级渲染特性扩展预留空间。在此基础上,将系统概括为平台层、图形接口抽象层、资源与场景层、渲染组织层以及脚本与编辑器层五个主要层级,并进一步说明了 `RHI`、`Resources / AssetDatabase`、`Scene / Components`、`Rendering`、`Scripting` 和 `Editor` 六个核心模块的职责边界。 + +同时,本章还从资源进入运行时、场景状态转化为渲染数据、编辑器视口接入渲染主链以及脚本驱动场景与渲染结果联动四个角度说明了模块之间的协同关系,并明确了体积渲染模块在总体架构中的位置。基于这一总体架构,下一章将进一步转入渲染引擎核心模块设计与实现的具体分析。 diff --git a/docs/plan/开题报告和任务书/完整开题报告.md b/docs/plan/毕设/完整开题报告.md similarity index 100% rename from docs/plan/开题报告和任务书/完整开题报告.md rename to docs/plan/毕设/完整开题报告.md diff --git a/docs/plan/开题报告和任务书/开题报告-王子文.doc b/docs/plan/毕设/开题报告-王子文.doc similarity index 100% rename from docs/plan/开题报告和任务书/开题报告-王子文.doc rename to docs/plan/毕设/开题报告-王子文.doc diff --git a/docs/plan/毕设/武汉大学本科生毕业论文(设计)书写印制规范(2024315).doc b/docs/plan/毕设/武汉大学本科生毕业论文(设计)书写印制规范(2024315).doc new file mode 100644 index 0000000000000000000000000000000000000000..90e196e43e10b7e2f0e15b452cf2b94c383998ad GIT binary patch literal 59904 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 @af>`!sImb`X3LXnBSTjX1&-CF| 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 literal 0 HcmV?d00001 diff --git a/docs/plan/毕设/论文正文大纲.md b/docs/plan/毕设/论文正文大纲.md new file mode 100644 index 00000000..12cf014e --- /dev/null +++ b/docs/plan/毕设/论文正文大纲.md @@ -0,0 +1,513 @@ +# 毕业设计论文正文大纲 + +## 一、正文总体写法 + +这篇论文的正文主线应当明确为: + +1. 以渲染引擎的设计与实现为主体。 +2. 以体积渲染作为渲染引擎当前阶段最重要的高级渲染扩展来展开。 +3. 体积渲染理论必须单独成章。 +4. NanoVDB 体积渲染模块的工程实现必须单独成章。 + +同时,第1章绪论不能脱离现有开题报告另起炉灶。更合理的写法是: + +1. 继承开题报告中关于体积特效、实时体积渲染、NanoVDB 和 DirectX 12 的背景与问题意识。 +2. 结合当前项目的真实工程进展,把开题阶段的目标落到“渲染引擎主体 + 体积渲染扩展”的实际形态上。 +3. 让绪论看起来像开题报告的自然展开和工程落地版本,而不是完全换题重写。 + +因此,正文结构不能写成“只围绕体积渲染展开”,也不能把体积渲染理论简单塞进技术基础里带过去。更合适的结构是: + +1. 绪论 +2. 渲染引擎发展现状与本课题引擎概述 +3. 体积渲染理论基础 +4. 渲染引擎总体架构设计 +5. 渲染引擎核心模块设计与实现 +6. 编辑器与引擎工作流设计与实现 +7. 基于 NanoVDB 的体积渲染模块设计与实现 +8. 系统测试与结果分析 +9. 总结与展望 + +--- + +## 二、字数分配建议 + +按正文约 2 万字估算,可按下表控制: + +| 章节 | 建议字数 | +| ------------------------------------------- | ---------: | +| 第1章 绪论 | 1800 | +| 第2章 渲染引擎发展现状与本课题引擎概述 | 1600 | +| 第3章 体积渲染理论基础 | 2500 | +| 第4章 渲染引擎总体架构设计 | 2400 | +| 第5章 渲染引擎核心模块设计与实现 | 3500 | +| 第6章 编辑器与引擎工作流设计与实现 | 2900 | +| 第7章 基于 NanoVDB 的体积渲染模块设计与实现 | 3100 | +| 第8章 系统测试与结果分析 | 1800 | +| 第9章 总结与展望 | 700 | +| 合计 | 20000 左右 | + +这个分配的含义是: + +1. 引擎主体部分占正文大头。 +2. 体积渲染理论单独给出完整章节。 +3. 体积渲染实现章节作为高级扩展重点展开。 + +--- + +## 三、正文结构设计 + +## 第1章 绪论 + +### 1.1 课题背景 + +这一节应直接承接开题报告中的选题背景,建议写成下面三点: + +1. 随着实时图形应用复杂度不断提升,渲染引擎已经从单一绘制程序发展为集图形接口抽象、资源管理、场景组织、材质与光照、脚本运行时、编辑器工具链于一体的综合系统,是支撑现代图形应用开发的重要基础。 +2. 云、雾、烟、火等体积特效已经成为现代实时图形表现中的常见内容,但实时体积渲染涉及参与介质中的吸收、散射、透射率累积与大量采样计算,在效果质量与实时性能之间始终存在明显约束。 +3. OpenVDB 与 NanoVDB 为稀疏体数据表达提供了较成熟的技术路径,其中 NanoVDB 更适合 GPU 访问;同时,DirectX 12 提供了更底层的资源与命令控制能力,适合作为体积特效实现与渲染引擎扩展的技术基础。 + +### 1.2 课题意义 + +这一节可以从两个层面展开: + +1. 体积渲染层面的意义 + 将 NanoVDB 稀疏体数据与 DirectX 12 图形 API 相结合,探索实时体积特效渲染的实现路径,为云、雾、烟等参与介质效果的工程实现提供参考。 + +2. 渲染引擎层面的意义 + 在渲染引擎平台上完成资源、场景、材质、光照、脚本与编辑器协同设计,并在此基础上扩展体积渲染能力,有助于体现工程设计类毕业设计的系统性与完整性。 + +### 1.3 本课题的主要内容 + +这一节应在不偏离开题报告目标的前提下,明确当前课题已经形成的真实工作结构,建议写成两部分: + +1. 渲染引擎主体部分 + 包括图形接口抽象层、渲染主链、资源系统、场景与组件系统、模型与材质系统、多光源与阴影、C# 脚本系统以及编辑器工作流支撑等内容。 + +2. 体积渲染扩展部分 + 包括体积渲染理论分析、NanoVDB 稀疏体数据加载、GPU Buffer 访问方式、体积光线步进流程、跳空优化和体积阴影实现等内容。 + +### 1.4 本文的主要工作 + +这一节可直接概括本文已经完成的主要工程工作,例如: + +1. 完成了渲染引擎的总体架构设计与模块划分。 +2. 实现了 RHI、资源系统、场景组件系统和渲染主链等核心运行时模块。 +3. 实现了模型渲染、材质系统、多光源和简单阴影等基础渲染能力。 +4. 实现了 C# 脚本系统以及编辑器视口与调试支撑能力。 +5. 完成了基于 NanoVDB 的体积渲染模块原型设计与实现,当前正在向主引擎主线集成收尾推进。 + +### 1.5 论文结构安排 + +这一节可以自然说明全文安排逻辑: + +1. 前两部分先交代渲染引擎发展现状与主流引擎分析,以及体积渲染理论基础。 +2. 中间几章集中展开渲染引擎主体的架构设计、核心模块实现以及编辑器工作流实现。 +3. 后续章节再集中说明基于 NanoVDB 的体积渲染模块设计、系统测试与实验分析。 + +--- + +## 第2章 渲染引擎发展现状与本课题引擎概述 + +这一章不再写成通用技术教材式基础,而是从发展脉络、主流引擎能力对比、体积特效支持现状和本课题引擎当前完成情况四个角度,先把“当前行业在做什么”以及“本课题已经做到了什么”交代清楚。 + +### 2.1 渲染引擎的发展历程与能力演进 + +建议写: + +1. 从单一绘制程序到综合引擎平台的发展过程 +2. 从固定管线到可编程管线后的能力扩展 +3. 从运行时渲染到资源、脚本、编辑器协同工作流的演进 + +### 2.2 当前主流渲染引擎的特点与对比分析 + +建议写: + +1. Unity 的组件化、资源工作流与编辑器体系 +2. Unreal Engine 的高质量渲染能力与工具链体系 +3. Godot 等开源引擎的开放性与轻量化特点 +4. 主流引擎在架构、编辑器、脚本与渲染扩展方面的共性 + +### 2.3 主流引擎中体积特效的支持现状 + +建议写: + +1. 体积雾、体积云、体积光等效果在实时图形中的应用 +2. 主流引擎中体积特效与光照、材质、场景系统的结合方式 +3. 实时体积渲染在效果质量与性能上的主要矛盾 + +### 2.4 本课题渲染引擎的总体介绍 + +建议写: + +1. 本项目渲染引擎的定位与整体组成 +2. 当前已实现的核心能力与工作流闭环 +3. 体积渲染模块在当前项目阶段中的位置 + +### 2.5 本章小结 + +--- + +## 第3章 体积渲染理论基础 + +这一章必须单独成章。 + +建议这一章主要吸收 `docs/plan/毕设` 下三份体积渲染理论笔记的内容,但写法要服务于后续工程实现。 + +### 3.1 参与介质与体积渲染基本概念 + +建议写: + +1. 参与介质的定义 +2. 吸收、散射、透射率 +3. 体积颜色形成的基本原因 + +### 3.2 比尔-朗伯定律与光线透射 + +建议写: + +1. 比尔-朗伯定律的物理含义 +2. 消光系数、吸收系数、散射系数的关系 +3. 透射率在体积渲染中的作用 + +### 3.3 体绘制方程与单次散射近似 + +建议写: + +1. 体绘制方程的基本形式 +2. 单次散射的含义 +3. 相位函数的作用 +4. 为什么在实时系统中常采用简化模型 + +### 3.4 光线步进算法原理 + +建议写: + +1. ray marching 的基本思想 +2. 正向步进与反向步进 +3. 步长、最大步数与误差控制 +4. 提前终止和抖动等常见优化 + +### 3.5 稀疏体数据与空域跳过思想 + +建议写: + +1. 稠密体素网格的问题 +2. 稀疏体数据结构的意义 +3. 空区域跳过对实时性的作用 + +### 3.6 本章小结 + +这一章的作用是为第7章的 NanoVDB 体积渲染实现做理论铺垫。 + +--- + +## 第4章 渲染引擎总体架构设计 + +这一章的任务是把整个渲染引擎的组织方式讲清楚,重点回答系统如何分层、各模块职责如何划分、运行时与编辑器如何协同,以及体积渲染扩展应当放在什么位置。 + +### 4.1 引擎设计目标 + +建议写: + +1. 形成完整的渲染引擎工作框架。 +2. 建立稳定的基础场景渲染闭环。 +3. 兼顾运行时能力与编辑器工作流。 +4. 为高级渲染特性扩展预留架构空间。 + +### 4.2 引擎总体分层架构 + +建议配图,按层写: + +1. 平台层 +2. 图形接口抽象层 +3. 资源与场景层 +4. 渲染组织层 +5. 脚本与编辑器层 + +### 4.3 核心模块职责划分 + +建议围绕真实项目模块写其职责边界: + +1. `RHI` +2. `Rendering` +3. `Resources / AssetDatabase` +4. `Scene / Components` +5. `Scripting` +6. `Editor` + +### 4.4 模块协同与数据流 + +建议明确写清: + +1. 资源从工程目录进入运行时的路径 +2. 场景状态到渲染数据的转换关系 +3. 编辑器视口与渲染主链的接入关系 +4. 脚本更新、场景状态与渲染结果之间的联动 + +### 4.5 体积渲染模块在总体架构中的位置 + +这一节必须明确: + +1. 体积渲染作为高级渲染扩展的接入层次。 +2. 它对 RHI、资源系统、渲染主链与编辑器能力的依赖关系。 +3. 当前原型验证与后续正式集成之间的关系。 + +### 4.6 本章小结 + +--- + +## 第5章 渲染引擎核心模块设计与实现 + +这一章集中写引擎主体能力,把“引擎真正做出来了什么”放在一章里讲清楚。 + +### 5.1 RHI 抽象层设计与实现 + +建议写: + +1. 多后端抽象思路 +2. `D3D12 / OpenGL / Vulkan` 的统一封装 +3. Buffer、Texture、ResourceView、Pipeline 等关键对象 + +### 5.2 资源系统设计与实现 + +建议写: + +1. `Assets + .meta + Library` 组织方式 +2. `AssetDatabase` +3. artifact 缓存与运行时加载 + +### 5.3 场景与组件系统设计与实现 + +建议写: + +1. `Scene` +2. `GameObject` +3. `Component` +4. `CameraComponent` +5. `LightComponent` +6. `MeshFilterComponent` +7. `MeshRendererComponent` + +### 5.4 渲染主链设计与实现 + +建议写: + +1. `SceneRenderer` +2. `CameraRenderer` +3. `RenderPipeline` +4. 渲染请求生成与执行流程 + +### 5.5 模型、材质与着色器系统 + +建议写: + +1. OBJ 模型加载 +2. `Mesh / Material / Shader` 的组织关系 +3. 材质参数与 shader 资源绑定 + +### 5.6 多光源与简单阴影实现 + +建议写: + +1. 主光与附加光组织方式 +2. 光照计算流程 +3. 当前简单阴影实现方式 + +### 5.7 C# 脚本系统设计与实现 + +建议写: + +1. `ScriptEngine` +2. `ScriptComponent` +3. 托管与原生运行时桥接 +4. 生命周期调度 + +### 5.8 本章小结 + +--- + +## 第6章 编辑器与引擎工作流设计与实现 + +这一章专门写引擎的可视化工作界面和工具链闭环,也是展示整个系统操作界面的主要章节。 + +### 6.1 编辑器在引擎中的定位 + +建议写: + +1. 编辑器是引擎工作流中的可视化工作界面 +2. 编辑器承担场景查看、资源管理、脚本调试和渲染验证等任务 + +### 6.2 编辑器界面总体布局设计 + +这里建议放整套界面截图,并说明: + +1. 菜单栏 +2. Hierarchy +3. Inspector +4. Project +5. Console +6. Scene / Game 视口 + +### 6.3 Scene 与 Game 视口实现 + +建议写: + +1. 离屏渲染目标 +2. 视口纹理接入方式 +3. Scene/Game 视口与引擎渲染主链的关系 + +### 6.4 编辑器交互与调试辅助能力 + +建议写: + +1. ObjectId Picking +2. Outline +3. Grid +4. Gizmo 和辅助显示能力 + +### 6.5 资源与脚本工作流支撑 + +建议写: + +1. 资源重导入 +2. 脚本程序集重建 +3. 编辑器在资源与脚本调试中的作用 + +### 6.6 本章小结 + +--- + +## 第7章 基于 NanoVDB 的体积渲染模块设计与实现 + +这一章是体积渲染实现章节,建立在第3章理论基础和前面引擎基础之上。 + +### 7.1 模块设计目标 + +建议写: + +1. 在现有渲染引擎基础上扩展体积渲染能力。 +2. 支持 NanoVDB 稀疏体数据。 +3. 构建可实时运行的体积渲染原型。 +4. 为后续正式并入主引擎提供实现基础。 + +### 7.2 NanoVDB 数据加载与 GPU 上传 + +建议写: + +1. `.nvdb` 文件读取流程 +2. CPU 侧元数据解析 +3. world bbox、voxel size 等信息提取 +4. 默认堆 GPU buffer 与上传流程 + +### 7.3 体积渲染核心流程实现 + +建议写: + +1. 相机光线构造 +2. 与体积包围盒求交 +3. 体积内部采样与累积 +4. 颜色与透明度输出 + +### 7.4 稀疏体数据访问与跳空优化 + +建议写: + +1. `StructuredBuffer` 的访问方式 +2. `PNanoVDB` 在 shader 中的使用 +3. HDDA 或层级访问带来的空域跳过 + +### 7.5 光照与体积阴影实现 + +建议写: + +1. 单次散射近似 +2. 沿光照方向的阴影积分 +3. 当前实现的近似性与局限性 + +### 7.6 当前实现状态分析 + +建议明确区分: + +1. 已完成部分 +2. 正在收尾部分 +3. 尚未正式并入主引擎主线的部分 + +### 7.7 本章小结 + +--- + +## 第8章 系统测试与结果分析 + +这一章要同时验证“渲染引擎主体”和“体积渲染模块”。 + +### 8.1 测试环境与实验配置 + +写: + +1. 硬件环境 +2. 软件环境 +3. 测试场景与测试数据 + +### 8.2 渲染引擎主体功能验证 + +建议写: + +1. 模型加载与渲染验证 +2. 材质系统验证 +3. 多光源与阴影验证 +4. 脚本系统验证 +5. 编辑器视口验证 + +### 8.3 体积渲染模块验证 + +建议写: + +1. NanoVDB 文件加载正确性 +2. GPU 数据访问正确性 +3. 步长、步数、阴影参数变化验证 + +### 8.4 效果与性能分析 + +建议写: + +1. 体积渲染结果展示 +2. 参数对效果与性能的影响 +3. 跳空优化的作用 + +### 8.5 本章小结 + +--- + +## 第9章 总结与展望 + +### 9.1 工作总结 + +建议分两部分总结: + +1. 渲染引擎主体完成情况 +2. 体积渲染模块完成情况 + +### 9.2 当前不足 + +建议诚实写: + +1. 体积渲染正式并入主引擎仍在推进 +2. 更完整的资源化与工具化仍待完善 +3. DXR 与更高质量体积光照仍可继续扩展 + +### 9.3 后续展望 + +建议写: + +1. 继续完善渲染引擎整体能力 +2. 推动体积渲染模块正式主线集成 +3. 完善编辑器工作流和高级渲染扩展 + +--- + +## 四、这一版大纲的关键点 + +1. 渲染引擎是全文主体。 +2. 体积渲染理论单独成章。 +3. NanoVDB 体积渲染实现单独成章。 +4. 引擎主体与体积渲染扩展的关系在结构上是清楚分开的。 diff --git a/editor/src/ComponentEditors/ComponentEditorRegistry.cpp b/editor/src/ComponentEditors/ComponentEditorRegistry.cpp index e0e15cdc..37a5cf48 100644 --- a/editor/src/ComponentEditors/ComponentEditorRegistry.cpp +++ b/editor/src/ComponentEditors/ComponentEditorRegistry.cpp @@ -6,6 +6,7 @@ #include "ComponentEditors/MeshRendererComponentEditor.h" #include "ComponentEditors/ScriptComponentEditor.h" #include "ComponentEditors/TransformComponentEditor.h" +#include "ComponentEditors/VolumeRendererComponentEditor.h" namespace XCEngine { namespace Editor { @@ -21,6 +22,7 @@ ComponentEditorRegistry::ComponentEditorRegistry() { RegisterEditor(std::make_unique()); RegisterEditor(std::make_unique()); RegisterEditor(std::make_unique()); + RegisterEditor(std::make_unique()); RegisterEditor(std::make_unique()); } diff --git a/editor/src/ComponentEditors/VolumeRendererComponentEditor.h b/editor/src/ComponentEditors/VolumeRendererComponentEditor.h new file mode 100644 index 00000000..601b132b --- /dev/null +++ b/editor/src/ComponentEditors/VolumeRendererComponentEditor.h @@ -0,0 +1,122 @@ +#pragma once + +#include "AssetReferenceEditorUtils.h" +#include "IComponentEditor.h" +#include "Core/IUndoManager.h" +#include "UI/UI.h" + +#include + +#include + +namespace XCEngine { +namespace Editor { + +class VolumeRendererComponentEditor : public IComponentEditor { +public: + const char* GetComponentTypeName() const override { + return "VolumeRenderer"; + } + + const char* GetDisplayName() const override { + return "Volume Renderer"; + } + + bool Render(::XCEngine::Components::Component* component, IUndoManager* undoManager) override { + auto* volumeRenderer = dynamic_cast<::XCEngine::Components::VolumeRendererComponent*>(component); + if (!volumeRenderer) { + return false; + } + + constexpr const char* kUndoLabel = "Modify Volume Renderer"; + + bool changed = false; + + const ComponentEditorAssetUI::AssetReferenceInteraction volumeFieldInteraction = + ComponentEditorAssetUI::DrawAssetReferenceProperty( + "Volume Field", + volumeRenderer->GetVolumeFieldPath(), + "Drop Volume Asset", + { ".nvdb" }); + + changed |= UI::ApplyPropertyChange( + volumeFieldInteraction.clearRequested && !volumeRenderer->GetVolumeFieldPath().empty(), + undoManager, + kUndoLabel, + [volumeRenderer]() { + volumeRenderer->ClearVolumeField(); + }); + changed |= UI::ApplyPropertyChange( + !volumeFieldInteraction.assignedPath.empty() && + volumeFieldInteraction.assignedPath != volumeRenderer->GetVolumeFieldPath(), + undoManager, + kUndoLabel, + [volumeRenderer, assignedPath = volumeFieldInteraction.assignedPath]() { + volumeRenderer->SetVolumeFieldPath(assignedPath); + }); + + const ComponentEditorAssetUI::AssetReferenceInteraction materialInteraction = + ComponentEditorAssetUI::DrawAssetReferenceProperty( + "Material", + volumeRenderer->GetMaterialPath(), + "Drop Material Asset", + { ".mat" }); + + changed |= UI::ApplyPropertyChange( + materialInteraction.clearRequested && !volumeRenderer->GetMaterialPath().empty(), + undoManager, + kUndoLabel, + [volumeRenderer]() { + volumeRenderer->ClearMaterial(); + }); + changed |= UI::ApplyPropertyChange( + !materialInteraction.assignedPath.empty() && + materialInteraction.assignedPath != volumeRenderer->GetMaterialPath(), + undoManager, + kUndoLabel, + [volumeRenderer, assignedPath = materialInteraction.assignedPath]() { + volumeRenderer->SetMaterialPath(assignedPath); + }); + + bool castShadows = volumeRenderer->GetCastShadows(); + changed |= UI::ApplyPropertyChange( + UI::DrawPropertyBool("Cast Shadows", castShadows), + undoManager, + kUndoLabel, + [volumeRenderer, castShadows]() { + volumeRenderer->SetCastShadows(castShadows); + }); + + bool receiveShadows = volumeRenderer->GetReceiveShadows(); + changed |= UI::ApplyPropertyChange( + UI::DrawPropertyBool("Receive Shadows", receiveShadows), + undoManager, + kUndoLabel, + [volumeRenderer, receiveShadows]() { + volumeRenderer->SetReceiveShadows(receiveShadows); + }); + + return changed; + } + + bool CanAddTo(::XCEngine::Components::GameObject* gameObject) const override { + return gameObject && !gameObject->GetComponent<::XCEngine::Components::VolumeRendererComponent>(); + } + + const char* GetAddDisabledReason(::XCEngine::Components::GameObject* gameObject) const override { + if (!gameObject) { + return "Invalid"; + } + + return gameObject->GetComponent<::XCEngine::Components::VolumeRendererComponent>() + ? "Already Added" + : nullptr; + } + + bool CanRemove(::XCEngine::Components::Component* component) const override { + return CanEdit(component); + } +}; + +} // namespace Editor +} // namespace XCEngine diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt index f876e604..c93ad3a5 100644 --- a/engine/CMakeLists.txt +++ b/engine/CMakeLists.txt @@ -488,6 +488,7 @@ add_library(XCEngine STATIC ${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/Passes/BuiltinFinalColorPass.h ${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/Passes/BuiltinInfiniteGridPass.h ${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/Passes/BuiltinObjectIdOutlinePass.h + ${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/Passes/BuiltinVolumetricPass.h ${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/Pipelines/BuiltinForwardPipeline.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Rendering/Execution/CameraRenderer.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Rendering/Caches/DirectionalShadowSurfaceCache.cpp @@ -502,6 +503,7 @@ add_library(XCEngine STATIC ${CMAKE_CURRENT_SOURCE_DIR}/src/Rendering/Passes/BuiltinFinalColorPass.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Rendering/Passes/BuiltinInfiniteGridPass.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Rendering/Passes/BuiltinObjectIdOutlinePass.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/Rendering/Passes/BuiltinVolumetricPass.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Rendering/RenderSurface.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Rendering/Extraction/RenderSceneExtractor.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Rendering/Extraction/RenderSceneUtility.cpp @@ -650,6 +652,12 @@ target_include_directories(XCEngine PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/third_party/assimp/include ) +if(XCENGINE_HAS_NANOVDB) + target_include_directories(XCEngine PRIVATE + ${XCENGINE_NANOVDB_INCLUDE_DIR} + ) +endif() + target_link_libraries(XCEngine PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/third_party/assimp/lib/assimp-vc143-mt.lib opengl32 @@ -729,3 +737,9 @@ target_compile_definitions(XCEngine PRIVATE XCENGINE_SUPPORT_OPENGL XCENGINE_SUPPORT_VULKAN ) + +if(XCENGINE_HAS_NANOVDB) + target_compile_definitions(XCEngine PRIVATE + XCENGINE_HAS_NANOVDB=1 + ) +endif() diff --git a/engine/include/XCEngine/RHI/D3D12/D3D12Shader.h b/engine/include/XCEngine/RHI/D3D12/D3D12Shader.h index 05f3f275..02f0e602 100644 --- a/engine/include/XCEngine/RHI/D3D12/D3D12Shader.h +++ b/engine/include/XCEngine/RHI/D3D12/D3D12Shader.h @@ -26,6 +26,7 @@ public: bool Compile( const void* sourceData, size_t sourceSize, + const wchar_t* sourcePath, const D3D_SHADER_MACRO* macros, const char* entryPoint, const char* target); diff --git a/engine/include/XCEngine/Rendering/Builtin/BuiltinPassLayoutUtils.h b/engine/include/XCEngine/Rendering/Builtin/BuiltinPassLayoutUtils.h index 4b467320..63d9a5fc 100644 --- a/engine/include/XCEngine/Rendering/Builtin/BuiltinPassLayoutUtils.h +++ b/engine/include/XCEngine/Rendering/Builtin/BuiltinPassLayoutUtils.h @@ -59,6 +59,9 @@ inline bool TryBuildBuiltinPassResourceBindingPlan( case BuiltinPassResourceSemantic::PassConstants: location = &outPlan.passConstants; break; + case BuiltinPassResourceSemantic::VolumeField: + location = &outPlan.volumeField; + break; case BuiltinPassResourceSemantic::BaseColorTexture: location = &outPlan.baseColorTexture; break; @@ -305,6 +308,24 @@ inline bool TryBuildBuiltinPassDefaultResourceBindings( return true; } + if (ShaderPassMatchesBuiltinPass(shaderPass, BuiltinMaterialPass::Volumetric)) { + AppendBuiltinPassResourceBinding( + outBindings, + "PerObjectConstants", + Resources::ShaderResourceType::ConstantBuffer, + 0u, + 0u, + "PerObject"); + AppendBuiltinPassResourceBinding( + outBindings, + "MaterialConstants", + Resources::ShaderResourceType::ConstantBuffer, + 1u, + 0u, + "Material"); + return true; + } + if (ShaderPassMatchesBuiltinPass(shaderPass, BuiltinMaterialPass::PostProcess)) { AppendBuiltinPassResourceBinding( outBindings, @@ -538,6 +559,9 @@ inline bool TryBuildBuiltinPassSetLayouts( case BuiltinPassResourceSemantic::PassConstants: setLayout.usesPassConstants = true; break; + case BuiltinPassResourceSemantic::VolumeField: + setLayout.usesVolumeField = true; + break; case BuiltinPassResourceSemantic::BaseColorTexture: setLayout.usesTexture = true; setLayout.usesBaseColorTexture = true; diff --git a/engine/include/XCEngine/Rendering/Builtin/BuiltinPassMetadataUtils.h b/engine/include/XCEngine/Rendering/Builtin/BuiltinPassMetadataUtils.h index a5613e8c..f5315389 100644 --- a/engine/include/XCEngine/Rendering/Builtin/BuiltinPassMetadataUtils.h +++ b/engine/include/XCEngine/Rendering/Builtin/BuiltinPassMetadataUtils.h @@ -25,6 +25,8 @@ inline const char* GetBuiltinPassCanonicalName(BuiltinMaterialPass pass) { return "objectid"; case BuiltinMaterialPass::Skybox: return "skybox"; + case BuiltinMaterialPass::Volumetric: + return "volumetric"; case BuiltinMaterialPass::PostProcess: return "colorscale"; case BuiltinMaterialPass::FinalColor: @@ -136,6 +138,11 @@ inline BuiltinPassResourceSemantic ResolveBuiltinPassResourceSemantic( return BuiltinPassResourceSemantic::PassConstants; } + if (semantic == Containers::String("volumefield") || + semantic == Containers::String("volumedata")) { + return BuiltinPassResourceSemantic::VolumeField; + } + if (semantic == Containers::String("basecolortexture") || semantic == Containers::String("maintex")) { return BuiltinPassResourceSemantic::BaseColorTexture; @@ -196,6 +203,8 @@ inline const char* BuiltinPassResourceSemanticToString(BuiltinPassResourceSemant return "Environment"; case BuiltinPassResourceSemantic::PassConstants: return "PassConstants"; + case BuiltinPassResourceSemantic::VolumeField: + return "VolumeField"; case BuiltinPassResourceSemantic::BaseColorTexture: return "BaseColorTexture"; case BuiltinPassResourceSemantic::SourceColorTexture: @@ -281,6 +290,9 @@ inline bool IsBuiltinPassResourceTypeCompatible( type == Resources::ShaderResourceType::RawBuffer || type == Resources::ShaderResourceType::RWStructuredBuffer || type == Resources::ShaderResourceType::RWRawBuffer; + case BuiltinPassResourceSemantic::VolumeField: + return type == Resources::ShaderResourceType::StructuredBuffer || + type == Resources::ShaderResourceType::RawBuffer; case BuiltinPassResourceSemantic::BaseColorTexture: case BuiltinPassResourceSemantic::SourceColorTexture: case BuiltinPassResourceSemantic::SkyboxPanoramicTexture: diff --git a/engine/include/XCEngine/Rendering/Builtin/BuiltinPassTypes.h b/engine/include/XCEngine/Rendering/Builtin/BuiltinPassTypes.h index 4bd9b29b..8a2770cb 100644 --- a/engine/include/XCEngine/Rendering/Builtin/BuiltinPassTypes.h +++ b/engine/include/XCEngine/Rendering/Builtin/BuiltinPassTypes.h @@ -19,6 +19,7 @@ enum class BuiltinMaterialPass : Core::uint32 { ShadowCaster, ObjectId, Skybox, + Volumetric, PostProcess, FinalColor, Forward = ForwardLit @@ -42,6 +43,7 @@ enum class BuiltinPassResourceSemantic : Core::uint8 { ShadowReceiver, Environment, PassConstants, + VolumeField, BaseColorTexture, SourceColorTexture, SkyboxPanoramicTexture, @@ -70,6 +72,7 @@ struct BuiltinPassResourceBindingPlan { bool usesMaterialBuffers = false; PassResourceBindingLocation perObject = {}; PassResourceBindingLocation material = {}; + PassResourceBindingLocation volumeField = {}; PassResourceBindingLocation lighting = {}; PassResourceBindingLocation shadowReceiver = {}; PassResourceBindingLocation environment = {}; @@ -106,6 +109,7 @@ struct BuiltinPassSetLayoutMetadata { bool usesEnvironment = false; bool usesPassConstants = false; bool usesMaterialBuffers = false; + bool usesVolumeField = false; bool usesTexture = false; bool usesBaseColorTexture = false; bool usesSourceColorTexture = false; diff --git a/engine/include/XCEngine/Rendering/Caches/RenderResourceCache.h b/engine/include/XCEngine/Rendering/Caches/RenderResourceCache.h index 946f4753..ae32168e 100644 --- a/engine/include/XCEngine/Rendering/Caches/RenderResourceCache.h +++ b/engine/include/XCEngine/Rendering/Caches/RenderResourceCache.h @@ -6,6 +6,7 @@ #include #include #include +#include #include @@ -36,12 +37,24 @@ public: RHI::RHIResourceView* resourceView = nullptr; }; + struct CachedVolumeField { + RHI::RHIBuffer* payloadBuffer = nullptr; + RHI::RHIResourceView* shaderResourceView = nullptr; + uint32_t elementStride = 0; + uint32_t elementCount = 0; + uint64_t payloadSize = 0; + Resources::VolumeStorageKind storageKind = Resources::VolumeStorageKind::Unknown; + }; + ~RenderResourceCache(); void Shutdown(); const CachedMesh* GetOrCreateMesh(RHI::RHIDevice* device, const Resources::Mesh* mesh); const CachedTexture* GetOrCreateTexture(RHI::RHIDevice* device, const Resources::Texture* texture); + const CachedVolumeField* GetOrCreateVolumeField( + RHI::RHIDevice* device, + const Resources::VolumeField* volumeField); const CachedBufferView* GetOrCreateBufferView( RHI::RHIDevice* device, RHI::RHIBuffer* buffer, @@ -77,6 +90,10 @@ private: bool UploadMesh(RHI::RHIDevice* device, const Resources::Mesh* mesh, CachedMesh& cachedMesh); bool UploadTexture(RHI::RHIDevice* device, const Resources::Texture* texture, CachedTexture& cachedTexture); + bool UploadVolumeField( + RHI::RHIDevice* device, + const Resources::VolumeField* volumeField, + CachedVolumeField& cachedVolumeField); bool CreateBufferView( RHI::RHIDevice* device, RHI::RHIBuffer* buffer, @@ -86,6 +103,7 @@ private: std::unordered_map m_meshCache; std::unordered_map m_textureCache; + std::unordered_map m_volumeFieldCache; std::unordered_map m_bufferViewCache; }; diff --git a/engine/include/XCEngine/Resources/BuiltinResources.h b/engine/include/XCEngine/Resources/BuiltinResources.h index b3388a1b..09236a8a 100644 --- a/engine/include/XCEngine/Resources/BuiltinResources.h +++ b/engine/include/XCEngine/Resources/BuiltinResources.h @@ -36,6 +36,7 @@ Containers::String GetBuiltinShadowCasterShaderPath(); Containers::String GetBuiltinObjectIdShaderPath(); Containers::String GetBuiltinObjectIdOutlineShaderPath(); Containers::String GetBuiltinSkyboxShaderPath(); +Containers::String GetBuiltinVolumetricShaderPath(); Containers::String GetBuiltinColorScalePostProcessShaderPath(); Containers::String GetBuiltinFinalColorShaderPath(); Containers::String GetBuiltinDefaultPrimitiveTexturePath(); diff --git a/engine/include/XCEngine/UI/Widgets/UISelectionModel.h b/engine/include/XCEngine/UI/Widgets/UISelectionModel.h index 7eb060e5..2c709a85 100644 --- a/engine/include/XCEngine/UI/Widgets/UISelectionModel.h +++ b/engine/include/XCEngine/UI/Widgets/UISelectionModel.h @@ -1,7 +1,9 @@ #pragma once +#include #include #include +#include namespace XCEngine { namespace UI { @@ -11,14 +13,26 @@ class UISelectionModel { public: bool HasSelection() const; const std::string& GetSelectedId() const; + const std::vector& GetSelectedIds() const; + std::size_t GetSelectionCount() const; + bool HasMultipleSelection() const; bool IsSelected(std::string_view id) const; bool SetSelection(std::string selectionId); + bool SetSelections( + std::vector selectionIds, + std::string primarySelectionId = {}); + bool SetPrimarySelection(std::string selectionId); + bool AddSelection(std::string selectionId, bool makePrimary = false); + bool RemoveSelection(std::string_view selectionId); bool ClearSelection(); bool ToggleSelection(std::string selectionId); private: - std::string m_selectedId = {}; + static void NormalizeSelectionIds(std::vector& selectionIds); + + std::vector m_selectedIds = {}; + std::string m_primarySelectedId = {}; }; } // namespace Widgets diff --git a/engine/src/RHI/D3D12/D3D12Device.cpp b/engine/src/RHI/D3D12/D3D12Device.cpp index 7e1ea537..a91d917a 100644 --- a/engine/src/RHI/D3D12/D3D12Device.cpp +++ b/engine/src/RHI/D3D12/D3D12Device.cpp @@ -79,6 +79,7 @@ bool CompileD3D12Shader(const ShaderCompileDesc& desc, D3D12Shader& shader) { return shader.Compile( desc.source.data(), desc.source.size(), + desc.fileName.empty() ? nullptr : desc.fileName.c_str(), macroPtr, entryPointPtr, profilePtr); @@ -771,6 +772,7 @@ const RHIDeviceInfo& D3D12Device::GetDeviceInfo() const { RHIBuffer* D3D12Device::CreateBuffer(const BufferDesc& desc) { auto* buffer = new D3D12Buffer(); const BufferType bufferType = static_cast(desc.bufferType); + const BufferFlags bufferFlags = static_cast(desc.flags); D3D12_HEAP_TYPE heapType = D3D12_HEAP_TYPE_DEFAULT; D3D12_RESOURCE_STATES initialState = D3D12_RESOURCE_STATE_COMMON; D3D12_RESOURCE_FLAGS resourceFlags = D3D12_RESOURCE_FLAG_NONE; @@ -784,7 +786,14 @@ RHIBuffer* D3D12Device::CreateBuffer(const BufferDesc& desc) { heapType = D3D12_HEAP_TYPE_UPLOAD; initialState = D3D12_RESOURCE_STATE_GENERIC_READ; } else if (bufferType == BufferType::Storage) { - resourceFlags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + const bool allowUnorderedAccess = + (bufferFlags & BufferFlags::AllowUnorderedAccess) == BufferFlags::AllowUnorderedAccess; + if (allowUnorderedAccess) { + resourceFlags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + } else { + heapType = D3D12_HEAP_TYPE_UPLOAD; + initialState = D3D12_RESOURCE_STATE_GENERIC_READ; + } } if (buffer->Initialize(m_device.Get(), desc.size, initialState, heapType, resourceFlags)) { @@ -930,7 +939,13 @@ RHIShader* D3D12Device::CreateShader(const ShaderCompileDesc& desc) { bool success = false; if (!desc.source.empty()) { - success = shader->Compile(desc.source.data(), desc.source.size(), entryPointPtr, profilePtr); + success = shader->Compile( + desc.source.data(), + desc.source.size(), + desc.fileName.empty() ? nullptr : desc.fileName.c_str(), + nullptr, + entryPointPtr, + profilePtr); } else if (!desc.fileName.empty()) { success = shader->CompileFromFile(desc.fileName.c_str(), entryPointPtr, profilePtr); } diff --git a/engine/src/RHI/D3D12/D3D12Shader.cpp b/engine/src/RHI/D3D12/D3D12Shader.cpp index 892d393a..94324ef2 100644 --- a/engine/src/RHI/D3D12/D3D12Shader.cpp +++ b/engine/src/RHI/D3D12/D3D12Shader.cpp @@ -1,6 +1,11 @@ #include "XCEngine/RHI/D3D12/D3D12Shader.h" #include +#include +#include +#include +#include + static const IID IID_ID3D12ShaderReflection = { 0x8e5c5a69, 0x5c6a, 0x427d, {0xb0, 0xdc, 0x27, 0x63, 0xae, 0xac, 0xe3, 0x75} }; @@ -8,6 +13,99 @@ static const IID IID_ID3D12ShaderReflection = { namespace XCEngine { namespace RHI { +namespace { + +std::string NarrowAscii(const std::wstring& value) { + std::string result; + result.reserve(value.size()); + for (wchar_t ch : value) { + result.push_back(static_cast(ch)); + } + return result; +} + +class D3D12ShaderIncludeHandler final : public ID3DInclude { +public: + explicit D3D12ShaderIncludeHandler(const std::filesystem::path& sourcePath) + : m_rootDirectory(sourcePath.parent_path().lexically_normal()) { + } + + HRESULT __stdcall Open( + D3D_INCLUDE_TYPE includeType, + LPCSTR fileName, + LPCVOID parentData, + LPCVOID* data, + UINT* bytes) override { + if (fileName == nullptr || data == nullptr || bytes == nullptr) { + return E_INVALIDARG; + } + + std::filesystem::path baseDirectory = m_rootDirectory; + if (parentData != nullptr) { + const auto parentIt = m_parentDirectories.find(parentData); + if (parentIt != m_parentDirectories.end()) { + baseDirectory = parentIt->second; + } + } + + std::filesystem::path resolvedPath; + if (includeType == D3D_INCLUDE_LOCAL || includeType == D3D_INCLUDE_SYSTEM) { + resolvedPath = (baseDirectory / fileName).lexically_normal(); + } else { + return E_FAIL; + } + + FILE* input = nullptr; + _wfopen_s(&input, resolvedPath.wstring().c_str(), L"rb"); + if (input == nullptr) { + return E_FAIL; + } + + if (fseek(input, 0, SEEK_END) != 0) { + fclose(input); + return E_FAIL; + } + + const long fileSize = ftell(input); + if (fileSize < 0 || fseek(input, 0, SEEK_SET) != 0) { + fclose(input); + return E_FAIL; + } + + std::vector fileBytes(static_cast(fileSize)); + if (!fileBytes.empty() && + fread(fileBytes.data(), 1, fileBytes.size(), input) != fileBytes.size()) { + fclose(input); + return E_FAIL; + } + fclose(input); + + char* ownedBytes = new char[fileBytes.size()]; + if (!fileBytes.empty()) { + std::memcpy(ownedBytes, fileBytes.data(), fileBytes.size()); + } + + *data = ownedBytes; + *bytes = static_cast(fileBytes.size()); + m_parentDirectories[*data] = resolvedPath.parent_path().lexically_normal(); + return S_OK; + } + + HRESULT __stdcall Close(LPCVOID data) override { + if (data != nullptr) { + m_parentDirectories.erase(data); + delete[] static_cast(data); + } + return S_OK; + } + +private: + std::filesystem::path m_rootDirectory; + std::unordered_map m_parentDirectories; +}; + +} // namespace + D3D12Shader::D3D12Shader() : m_type(ShaderType::Vertex), m_uniformsCached(false) { } @@ -17,7 +115,7 @@ D3D12Shader::~D3D12Shader() { } bool D3D12Shader::CompileFromFile(const wchar_t* filePath, const char* entryPoint, const char* target) { - HRESULT hResult = D3DCompileFromFile(filePath, nullptr, nullptr, entryPoint, target, + HRESULT hResult = D3DCompileFromFile(filePath, nullptr, D3D_COMPILE_STANDARD_FILE_INCLUDE, entryPoint, target, D3DCOMPILE_DEBUG | D3DCOMPILE_SKIP_OPTIMIZATION, 0, &m_bytecode, &m_error); if (FAILED(hResult)) { @@ -44,20 +142,30 @@ bool D3D12Shader::CompileFromFile(const wchar_t* filePath, const char* entryPoin } bool D3D12Shader::Compile(const void* sourceData, size_t sourceSize, const char* entryPoint, const char* target) { - return Compile(sourceData, sourceSize, nullptr, entryPoint, target); + return Compile(sourceData, sourceSize, nullptr, nullptr, entryPoint, target); } bool D3D12Shader::Compile(const void* sourceData, size_t sourceSize, + const wchar_t* sourcePath, const D3D_SHADER_MACRO* macros, const char* entryPoint, const char* target) { + std::string sourceName; + ID3DInclude* includeHandler = nullptr; + D3D12ShaderIncludeHandler localIncludeHandler( + sourcePath != nullptr ? std::filesystem::path(sourcePath) : std::filesystem::path()); + if (sourcePath != nullptr && sourcePath[0] != L'\0') { + sourceName = NarrowAscii(sourcePath); + includeHandler = &localIncludeHandler; + } + HRESULT hResult = D3DCompile( sourceData, sourceSize, - nullptr, + sourceName.empty() ? nullptr : sourceName.c_str(), macros, - nullptr, + includeHandler, entryPoint, target, D3DCOMPILE_DEBUG | D3DCOMPILE_SKIP_OPTIMIZATION, diff --git a/engine/src/Rendering/Caches/RenderResourceCache.cpp b/engine/src/Rendering/Caches/RenderResourceCache.cpp index fa7ea0a2..11d98741 100644 --- a/engine/src/Rendering/Caches/RenderResourceCache.cpp +++ b/engine/src/Rendering/Caches/RenderResourceCache.cpp @@ -3,13 +3,26 @@ #include #include +#include +#include #include +#include namespace XCEngine { namespace Rendering { namespace { +template +TValue AlignUp(TValue value, TValue alignment) { + if (alignment == 0) { + return value; + } + + const TValue remainder = value % alignment; + return remainder == 0 ? value : (value + alignment - remainder); +} + inline void HashCombine(size_t& seed, size_t value) { seed ^= value + 0x9e3779b9u + (seed << 6u) + (seed >> 2u); } @@ -138,6 +151,20 @@ void ShutdownBufferView(RenderResourceCache::CachedBufferView& cachedBufferView) } } +void ShutdownVolumeField(RenderResourceCache::CachedVolumeField& cachedVolumeField) { + if (cachedVolumeField.shaderResourceView != nullptr) { + cachedVolumeField.shaderResourceView->Shutdown(); + delete cachedVolumeField.shaderResourceView; + cachedVolumeField.shaderResourceView = nullptr; + } + + if (cachedVolumeField.payloadBuffer != nullptr) { + cachedVolumeField.payloadBuffer->Shutdown(); + delete cachedVolumeField.payloadBuffer; + cachedVolumeField.payloadBuffer = nullptr; + } +} + } // namespace RenderResourceCache::~RenderResourceCache() { @@ -155,6 +182,11 @@ void RenderResourceCache::Shutdown() { } m_textureCache.clear(); + for (auto& entry : m_volumeFieldCache) { + ShutdownVolumeField(entry.second); + } + m_volumeFieldCache.clear(); + for (auto& entry : m_bufferViewCache) { ShutdownBufferView(entry.second); } @@ -205,6 +237,32 @@ const RenderResourceCache::CachedTexture* RenderResourceCache::GetOrCreateTextur return &result.first->second; } +const RenderResourceCache::CachedVolumeField* RenderResourceCache::GetOrCreateVolumeField( + RHI::RHIDevice* device, + const Resources::VolumeField* volumeField) { + if (device == nullptr || + volumeField == nullptr || + !volumeField->IsValid() || + volumeField->GetPayloadData() == nullptr || + volumeField->GetPayloadSize() == 0u) { + return nullptr; + } + + const auto existing = m_volumeFieldCache.find(volumeField); + if (existing != m_volumeFieldCache.end()) { + return &existing->second; + } + + CachedVolumeField cachedVolumeField = {}; + if (!UploadVolumeField(device, volumeField, cachedVolumeField)) { + ShutdownVolumeField(cachedVolumeField); + return nullptr; + } + + const auto result = m_volumeFieldCache.emplace(volumeField, cachedVolumeField); + return &result.first->second; +} + const RenderResourceCache::CachedBufferView* RenderResourceCache::GetOrCreateBufferView( RHI::RHIDevice* device, RHI::RHIBuffer* buffer, @@ -367,6 +425,62 @@ bool RenderResourceCache::UploadTexture( return true; } +bool RenderResourceCache::UploadVolumeField( + RHI::RHIDevice* device, + const Resources::VolumeField* volumeField, + CachedVolumeField& cachedVolumeField) { + if (device == nullptr || + volumeField == nullptr || + volumeField->GetPayloadData() == nullptr || + volumeField->GetPayloadSize() == 0u) { + return false; + } + + constexpr uint32_t kVolumeWordStride = sizeof(uint32_t); + const size_t alignedPayloadSize = AlignUp(volumeField->GetPayloadSize(), static_cast(kVolumeWordStride)); + if (alignedPayloadSize == 0u || alignedPayloadSize > static_cast(UINT64_MAX)) { + return false; + } + + RHI::BufferDesc bufferDesc = {}; + bufferDesc.size = static_cast(alignedPayloadSize); + bufferDesc.stride = kVolumeWordStride; + bufferDesc.bufferType = static_cast(RHI::BufferType::Storage); + bufferDesc.flags = 0; + + cachedVolumeField.payloadBuffer = device->CreateBuffer(bufferDesc); + if (cachedVolumeField.payloadBuffer == nullptr) { + return false; + } + + std::vector uploadData(alignedPayloadSize, 0u); + std::memcpy( + uploadData.data(), + volumeField->GetPayloadData(), + volumeField->GetPayloadSize()); + cachedVolumeField.payloadBuffer->SetData(uploadData.data(), uploadData.size()); + cachedVolumeField.payloadBuffer->SetStride(kVolumeWordStride); + cachedVolumeField.payloadBuffer->SetBufferType(RHI::BufferType::Storage); + + RHI::ResourceViewDesc viewDesc = {}; + viewDesc.dimension = RHI::ResourceViewDimension::StructuredBuffer; + viewDesc.firstElement = 0u; + viewDesc.elementCount = static_cast(alignedPayloadSize / kVolumeWordStride); + viewDesc.structureByteStride = kVolumeWordStride; + + cachedVolumeField.shaderResourceView = + device->CreateShaderResourceView(cachedVolumeField.payloadBuffer, viewDesc); + if (cachedVolumeField.shaderResourceView == nullptr) { + return false; + } + + cachedVolumeField.elementStride = kVolumeWordStride; + cachedVolumeField.elementCount = viewDesc.elementCount; + cachedVolumeField.payloadSize = bufferDesc.size; + cachedVolumeField.storageKind = volumeField->GetStorageKind(); + return true; +} + bool RenderResourceCache::CreateBufferView( RHI::RHIDevice* device, RHI::RHIBuffer* buffer, diff --git a/engine/src/Rendering/Detail/ShaderVariantUtils.h b/engine/src/Rendering/Detail/ShaderVariantUtils.h index 619f3ed3..bb9a1bd1 100644 --- a/engine/src/Rendering/Detail/ShaderVariantUtils.h +++ b/engine/src/Rendering/Detail/ShaderVariantUtils.h @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -358,19 +359,46 @@ inline void ApplyShaderStageVariant( compileDesc.profile = ToWideAscii(variant.profile); } +inline std::wstring ResolveRuntimeShaderSourcePath(const Containers::String& shaderPath) { + Containers::String resolvedPath = shaderPath; + if (resolvedPath.Empty()) { + return std::wstring(); + } + + if (Resources::IsBuiltinShaderPath(resolvedPath)) { + Containers::String builtinAssetPath; + if (!Resources::TryResolveBuiltinShaderAssetPath(resolvedPath, builtinAssetPath)) { + return std::wstring(); + } + resolvedPath = builtinAssetPath; + } + + return ToWideAscii(resolvedPath); +} + inline void ApplyShaderStageVariant( + const Containers::String& shaderPath, const Resources::ShaderPass& pass, Resources::ShaderBackend backend, const Resources::ShaderStageVariant& variant, RHI::ShaderCompileDesc& compileDesc) { const std::string sourceText = BuildRuntimeShaderSource(pass, backend, variant); compileDesc.source.assign(sourceText.begin(), sourceText.end()); + compileDesc.fileName = ResolveRuntimeShaderSourcePath(shaderPath); compileDesc.sourceLanguage = ToRHIShaderLanguage(variant.language); compileDesc.entryPoint = ToWideAscii(variant.entryPoint); compileDesc.profile = ToWideAscii(variant.profile); InjectShaderBackendMacros(backend, compileDesc); } +inline void ApplyShaderStageVariant( + const Resources::ShaderPass& pass, + Resources::ShaderBackend backend, + const Resources::ShaderStageVariant& variant, + RHI::ShaderCompileDesc& compileDesc) { + ApplyShaderStageVariant(Containers::String(), pass, backend, variant, compileDesc); +} + inline Containers::String BuildShaderKeywordSignature( const Resources::ShaderKeywordSet& keywordSet) { Resources::ShaderKeywordSet normalizedKeywords = keywordSet; diff --git a/engine/src/Rendering/Passes/BuiltinColorScalePostProcessPass.cpp b/engine/src/Rendering/Passes/BuiltinColorScalePostProcessPass.cpp index 56bd18e5..e99af1d5 100644 --- a/engine/src/Rendering/Passes/BuiltinColorScalePostProcessPass.cpp +++ b/engine/src/Rendering/Passes/BuiltinColorScalePostProcessPass.cpp @@ -81,6 +81,7 @@ RHI::GraphicsPipelineDesc CreatePipelineDesc( shader.FindVariant(passName, Resources::ShaderType::Vertex, backend)) { if (shaderPass != nullptr) { ::XCEngine::Rendering::Detail::ApplyShaderStageVariant( + shader.GetPath(), *shaderPass, backend, *vertexVariant, @@ -91,6 +92,7 @@ RHI::GraphicsPipelineDesc CreatePipelineDesc( shader.FindVariant(passName, Resources::ShaderType::Fragment, backend)) { if (shaderPass != nullptr) { ::XCEngine::Rendering::Detail::ApplyShaderStageVariant( + shader.GetPath(), *shaderPass, backend, *fragmentVariant, diff --git a/engine/src/Rendering/Passes/BuiltinDepthStylePassBaseResources.cpp b/engine/src/Rendering/Passes/BuiltinDepthStylePassBaseResources.cpp index 09a624b7..b51bd755 100644 --- a/engine/src/Rendering/Passes/BuiltinDepthStylePassBaseResources.cpp +++ b/engine/src/Rendering/Passes/BuiltinDepthStylePassBaseResources.cpp @@ -161,6 +161,7 @@ RHI::GraphicsPipelineDesc CreatePipelineDesc( if (const Resources::ShaderStageVariant* vertexVariant = shader.FindVariant(passName, Resources::ShaderType::Vertex, backend, keywordSet)) { ::XCEngine::Rendering::Detail::ApplyShaderStageVariant( + shader.GetPath(), shaderPass, backend, *vertexVariant, @@ -169,6 +170,7 @@ RHI::GraphicsPipelineDesc CreatePipelineDesc( if (const Resources::ShaderStageVariant* fragmentVariant = shader.FindVariant(passName, Resources::ShaderType::Fragment, backend, keywordSet)) { ::XCEngine::Rendering::Detail::ApplyShaderStageVariant( + shader.GetPath(), shaderPass, backend, *fragmentVariant, diff --git a/engine/src/Rendering/Passes/BuiltinFinalColorPass.cpp b/engine/src/Rendering/Passes/BuiltinFinalColorPass.cpp index 134a8096..dd271d15 100644 --- a/engine/src/Rendering/Passes/BuiltinFinalColorPass.cpp +++ b/engine/src/Rendering/Passes/BuiltinFinalColorPass.cpp @@ -83,6 +83,7 @@ RHI::GraphicsPipelineDesc CreatePipelineDesc( shader.FindVariant(passName, Resources::ShaderType::Vertex, backend)) { if (shaderPass != nullptr) { ::XCEngine::Rendering::Detail::ApplyShaderStageVariant( + shader.GetPath(), *shaderPass, backend, *vertexVariant, @@ -93,6 +94,7 @@ RHI::GraphicsPipelineDesc CreatePipelineDesc( shader.FindVariant(passName, Resources::ShaderType::Fragment, backend)) { if (shaderPass != nullptr) { ::XCEngine::Rendering::Detail::ApplyShaderStageVariant( + shader.GetPath(), *shaderPass, backend, *fragmentVariant, diff --git a/engine/src/Rendering/Passes/BuiltinInfiniteGridPass.cpp b/engine/src/Rendering/Passes/BuiltinInfiniteGridPass.cpp index 84986ead..2e1e7810 100644 --- a/engine/src/Rendering/Passes/BuiltinInfiniteGridPass.cpp +++ b/engine/src/Rendering/Passes/BuiltinInfiniteGridPass.cpp @@ -359,6 +359,7 @@ bool BuiltinInfiniteGridPass::CreateResources(const RenderContext& renderContext const Resources::ShaderPass* shaderPass = m_builtinInfiniteGridShader->FindPass(infiniteGridPass->name); if (shaderPass != nullptr) { ::XCEngine::Rendering::Detail::ApplyShaderStageVariant( + m_builtinInfiniteGridShader->GetPath(), *shaderPass, backend, *vertexVariant, @@ -372,6 +373,7 @@ bool BuiltinInfiniteGridPass::CreateResources(const RenderContext& renderContext const Resources::ShaderPass* shaderPass = m_builtinInfiniteGridShader->FindPass(infiniteGridPass->name); if (shaderPass != nullptr) { ::XCEngine::Rendering::Detail::ApplyShaderStageVariant( + m_builtinInfiniteGridShader->GetPath(), *shaderPass, backend, *fragmentVariant, diff --git a/engine/src/Rendering/Passes/BuiltinObjectIdOutlinePass.cpp b/engine/src/Rendering/Passes/BuiltinObjectIdOutlinePass.cpp index 436e8523..fc4a9376 100644 --- a/engine/src/Rendering/Passes/BuiltinObjectIdOutlinePass.cpp +++ b/engine/src/Rendering/Passes/BuiltinObjectIdOutlinePass.cpp @@ -79,6 +79,7 @@ RHI::GraphicsPipelineDesc CreatePipelineDesc( shader.FindVariant(passName, Resources::ShaderType::Vertex, backend)) { if (shaderPass != nullptr) { ::XCEngine::Rendering::Detail::ApplyShaderStageVariant( + shader.GetPath(), *shaderPass, backend, *vertexVariant, @@ -89,6 +90,7 @@ RHI::GraphicsPipelineDesc CreatePipelineDesc( shader.FindVariant(passName, Resources::ShaderType::Fragment, backend)) { if (shaderPass != nullptr) { ::XCEngine::Rendering::Detail::ApplyShaderStageVariant( + shader.GetPath(), *shaderPass, backend, *fragmentVariant, diff --git a/engine/src/Rendering/Passes/BuiltinObjectIdPassResources.cpp b/engine/src/Rendering/Passes/BuiltinObjectIdPassResources.cpp index d6e8b381..b9c0eed2 100644 --- a/engine/src/Rendering/Passes/BuiltinObjectIdPassResources.cpp +++ b/engine/src/Rendering/Passes/BuiltinObjectIdPassResources.cpp @@ -83,6 +83,7 @@ RHI::GraphicsPipelineDesc CreatePipelineDesc( shader.FindVariant(passName, Resources::ShaderType::Vertex, backend)) { if (shaderPass != nullptr) { ::XCEngine::Rendering::Detail::ApplyShaderStageVariant( + shader.GetPath(), *shaderPass, backend, *vertexVariant, @@ -93,6 +94,7 @@ RHI::GraphicsPipelineDesc CreatePipelineDesc( shader.FindVariant(passName, Resources::ShaderType::Fragment, backend)) { if (shaderPass != nullptr) { ::XCEngine::Rendering::Detail::ApplyShaderStageVariant( + shader.GetPath(), *shaderPass, backend, *fragmentVariant, diff --git a/engine/src/Rendering/Pipelines/BuiltinForwardPipeline.cpp b/engine/src/Rendering/Pipelines/BuiltinForwardPipeline.cpp index 0e9eee3e..e8ffa5fb 100644 --- a/engine/src/Rendering/Pipelines/BuiltinForwardPipeline.cpp +++ b/engine/src/Rendering/Pipelines/BuiltinForwardPipeline.cpp @@ -5,6 +5,7 @@ #include "RHI/RHICommandList.h" #include "Rendering/Detail/ShaderVariantUtils.h" #include "Rendering/Materials/RenderMaterialResolve.h" +#include "Rendering/Passes/BuiltinVolumetricPass.h" #include "Rendering/RenderSurface.h" #include "Resources/BuiltinResources.h" @@ -151,21 +152,23 @@ RHI::GraphicsPipelineDesc CreateSkyboxPipelineDesc( if (const Resources::ShaderStageVariant* vertexVariant = shader.FindVariant(passName, Resources::ShaderType::Vertex, backend)) { if (shaderPass != nullptr) { - ::XCEngine::Rendering::Detail::ApplyShaderStageVariant( - *shaderPass, - backend, - *vertexVariant, - pipelineDesc.vertexShader); + ::XCEngine::Rendering::Detail::ApplyShaderStageVariant( + shader.GetPath(), + *shaderPass, + backend, + *vertexVariant, + pipelineDesc.vertexShader); } } if (const Resources::ShaderStageVariant* fragmentVariant = shader.FindVariant(passName, Resources::ShaderType::Fragment, backend)) { if (shaderPass != nullptr) { - ::XCEngine::Rendering::Detail::ApplyShaderStageVariant( - *shaderPass, - backend, - *fragmentVariant, - pipelineDesc.fragmentShader); + ::XCEngine::Rendering::Detail::ApplyShaderStageVariant( + shader.GetPath(), + *shaderPass, + backend, + *fragmentVariant, + pipelineDesc.fragmentShader); } } @@ -177,6 +180,7 @@ RHI::GraphicsPipelineDesc CreateSkyboxPipelineDesc( BuiltinForwardPipeline::BuiltinForwardPipeline() { m_passSequence.AddPass(std::make_unique(*this)); m_passSequence.AddPass(std::make_unique(*this)); + m_passSequence.AddPass(std::make_unique()); m_passSequence.AddPass(std::make_unique(*this)); } diff --git a/engine/src/Rendering/Pipelines/BuiltinForwardPipelineResources.cpp b/engine/src/Rendering/Pipelines/BuiltinForwardPipelineResources.cpp index 5099b767..debcef06 100644 --- a/engine/src/Rendering/Pipelines/BuiltinForwardPipelineResources.cpp +++ b/engine/src/Rendering/Pipelines/BuiltinForwardPipelineResources.cpp @@ -79,6 +79,7 @@ RHI::GraphicsPipelineDesc CreatePipelineDesc( shader.FindVariant(passName, Resources::ShaderType::Fragment, backend, keywordSet); if (vertexVariant != nullptr) { ::XCEngine::Rendering::Detail::ApplyShaderStageVariant( + shader.GetPath(), shaderPass, backend, *vertexVariant, @@ -86,6 +87,7 @@ RHI::GraphicsPipelineDesc CreatePipelineDesc( } if (fragmentVariant != nullptr) { ::XCEngine::Rendering::Detail::ApplyShaderStageVariant( + shader.GetPath(), shaderPass, backend, *fragmentVariant, diff --git a/engine/src/Resources/BuiltinResources.cpp b/engine/src/Resources/BuiltinResources.cpp index dfbc1933..c70b2972 100644 --- a/engine/src/Resources/BuiltinResources.cpp +++ b/engine/src/Resources/BuiltinResources.cpp @@ -34,6 +34,7 @@ constexpr const char* kBuiltinShadowCasterShaderPath = "builtin://shaders/shadow constexpr const char* kBuiltinObjectIdShaderPath = "builtin://shaders/object-id"; constexpr const char* kBuiltinObjectIdOutlineShaderPath = "builtin://shaders/object-id-outline"; constexpr const char* kBuiltinSkyboxShaderPath = "builtin://shaders/skybox"; +constexpr const char* kBuiltinVolumetricShaderPath = "builtin://shaders/volumetric"; constexpr const char* kBuiltinColorScalePostProcessShaderPath = "builtin://shaders/color-scale-post-process"; constexpr const char* kBuiltinFinalColorShaderPath = "builtin://shaders/final-color"; @@ -61,6 +62,8 @@ constexpr const char* kBuiltinObjectIdOutlineShaderAssetRelativePath = "engine/assets/builtin/shaders/object-id-outline.shader"; constexpr const char* kBuiltinSkyboxShaderAssetRelativePath = "engine/assets/builtin/shaders/skybox.shader"; +constexpr const char* kBuiltinVolumetricShaderAssetRelativePath = + "engine/assets/builtin/shaders/volumetric.shader"; constexpr const char* kBuiltinColorScalePostProcessShaderAssetRelativePath = "engine/assets/builtin/shaders/color-scale-post-process.shader"; constexpr const char* kBuiltinFinalColorShaderAssetRelativePath = @@ -149,6 +152,9 @@ const char* GetBuiltinShaderAssetRelativePath(const Containers::String& builtinS if (builtinShaderPath == Containers::String(kBuiltinSkyboxShaderPath)) { return kBuiltinSkyboxShaderAssetRelativePath; } + if (builtinShaderPath == Containers::String(kBuiltinVolumetricShaderPath)) { + return kBuiltinVolumetricShaderAssetRelativePath; + } if (builtinShaderPath == Containers::String(kBuiltinColorScalePostProcessShaderPath)) { return kBuiltinColorScalePostProcessShaderAssetRelativePath; } @@ -708,6 +714,10 @@ Shader* BuildBuiltinSkyboxShader(const Containers::String& path) { return TryLoadBuiltinShaderFromAsset(path); } +Shader* BuildBuiltinVolumetricShader(const Containers::String& path) { + return TryLoadBuiltinShaderFromAsset(path); +} + Shader* BuildBuiltinColorScalePostProcessShader(const Containers::String& path) { return TryLoadBuiltinShaderFromAsset(path); } @@ -817,6 +827,10 @@ bool TryGetBuiltinShaderPathByShaderName( outPath = GetBuiltinSkyboxShaderPath(); return true; } + if (shaderName == "Builtin Volumetric") { + outPath = GetBuiltinVolumetricShaderPath(); + return true; + } if (shaderName == "Builtin Color Scale Post Process") { outPath = GetBuiltinColorScalePostProcessShaderPath(); return true; @@ -892,6 +906,10 @@ Containers::String GetBuiltinSkyboxShaderPath() { return Containers::String(kBuiltinSkyboxShaderPath); } +Containers::String GetBuiltinVolumetricShaderPath() { + return Containers::String(kBuiltinVolumetricShaderPath); +} + Containers::String GetBuiltinColorScalePostProcessShaderPath() { return Containers::String(kBuiltinColorScalePostProcessShaderPath); } @@ -1002,6 +1020,8 @@ LoadResult CreateBuiltinShaderResource(const Containers::String& path) { shader = BuildBuiltinObjectIdOutlineShader(path); } else if (path == GetBuiltinSkyboxShaderPath()) { shader = BuildBuiltinSkyboxShader(path); + } else if (path == GetBuiltinVolumetricShaderPath()) { + shader = BuildBuiltinVolumetricShader(path); } else if (path == GetBuiltinColorScalePostProcessShaderPath()) { shader = BuildBuiltinColorScalePostProcessShader(path); } else if (path == GetBuiltinFinalColorShaderPath()) { diff --git a/engine/src/UI/Widgets/UISelectionModel.cpp b/engine/src/UI/Widgets/UISelectionModel.cpp index 5137ee59..b943e441 100644 --- a/engine/src/UI/Widgets/UISelectionModel.cpp +++ b/engine/src/UI/Widgets/UISelectionModel.cpp @@ -1,49 +1,158 @@ #include +#include + namespace XCEngine { namespace UI { namespace Widgets { bool UISelectionModel::HasSelection() const { - return !m_selectedId.empty(); + return !m_primarySelectedId.empty(); } const std::string& UISelectionModel::GetSelectedId() const { - return m_selectedId; + return m_primarySelectedId; +} + +const std::vector& UISelectionModel::GetSelectedIds() const { + return m_selectedIds; +} + +std::size_t UISelectionModel::GetSelectionCount() const { + return m_selectedIds.size(); +} + +bool UISelectionModel::HasMultipleSelection() const { + return m_selectedIds.size() > 1u; } bool UISelectionModel::IsSelected(std::string_view id) const { - return !m_selectedId.empty() && m_selectedId == id; + return std::find(m_selectedIds.begin(), m_selectedIds.end(), id) != m_selectedIds.end(); } bool UISelectionModel::SetSelection(std::string selectionId) { - if (m_selectedId == selectionId) { + return SetSelections( + selectionId.empty() ? std::vector {} : std::vector { std::move(selectionId) }); +} + +bool UISelectionModel::SetSelections( + std::vector selectionIds, + std::string primarySelectionId) { + NormalizeSelectionIds(selectionIds); + if (selectionIds.empty()) { + return ClearSelection(); + } + + if (primarySelectionId.empty()) { + primarySelectionId = selectionIds.back(); + } + + std::vector normalizedSelections = std::move(selectionIds); + const auto preferredPrimaryIt = + std::find(normalizedSelections.begin(), normalizedSelections.end(), primarySelectionId); + if (preferredPrimaryIt == normalizedSelections.end()) { + primarySelectionId = normalizedSelections.back(); + } + + if (m_selectedIds == normalizedSelections && + m_primarySelectedId == primarySelectionId) { return false; } - m_selectedId = std::move(selectionId); + m_selectedIds = std::move(normalizedSelections); + m_primarySelectedId = std::move(primarySelectionId); + return true; +} + +bool UISelectionModel::SetPrimarySelection(std::string selectionId) { + if (!IsSelected(selectionId)) { + return false; + } + + if (m_primarySelectedId == selectionId) { + return false; + } + + m_primarySelectedId = std::move(selectionId); + return true; +} + +bool UISelectionModel::AddSelection(std::string selectionId, bool makePrimary) { + if (selectionId.empty()) { + return false; + } + + if (IsSelected(selectionId)) { + return makePrimary ? SetPrimarySelection(std::move(selectionId)) : false; + } + + m_selectedIds.push_back(selectionId); + if (makePrimary || m_primarySelectedId.empty()) { + m_primarySelectedId = std::move(selectionId); + } + return true; +} + +bool UISelectionModel::RemoveSelection(std::string_view selectionId) { + const auto it = std::find(m_selectedIds.begin(), m_selectedIds.end(), selectionId); + if (it == m_selectedIds.end()) { + return false; + } + + const bool removedPrimary = m_primarySelectedId == selectionId; + m_selectedIds.erase(it); + if (m_selectedIds.empty()) { + m_primarySelectedId.clear(); + } else if (removedPrimary) { + m_primarySelectedId = m_selectedIds.back(); + } return true; } bool UISelectionModel::ClearSelection() { - if (m_selectedId.empty()) { + if (m_selectedIds.empty()) { return false; } - m_selectedId.clear(); + m_selectedIds.clear(); + m_primarySelectedId.clear(); return true; } bool UISelectionModel::ToggleSelection(std::string selectionId) { - if (m_selectedId == selectionId) { - m_selectedId.clear(); - return true; + if (selectionId.empty()) { + return false; } - m_selectedId = std::move(selectionId); - return true; + if (IsSelected(selectionId)) { + return RemoveSelection(selectionId); + } + + return AddSelection(std::move(selectionId), true); } +void UISelectionModel::NormalizeSelectionIds(std::vector& selectionIds) { + selectionIds.erase( + std::remove_if( + selectionIds.begin(), + selectionIds.end(), + [](const std::string& selectionId) { + return selectionId.empty(); + }), + selectionIds.end()); + + std::vector normalized = {}; + normalized.reserve(selectionIds.size()); + for (std::string& selectionId : selectionIds) { + if (std::find(normalized.begin(), normalized.end(), selectionId) != normalized.end()) { + continue; + } + + normalized.push_back(std::move(selectionId)); + } + + selectionIds = std::move(normalized); +} } // namespace Widgets } // namespace UI } // namespace XCEngine diff --git a/project/.xceditor/imgui_layout.ini b/project/.xceditor/imgui_layout.ini index 19f0d20a..a7231eb6 100644 --- a/project/.xceditor/imgui_layout.ini +++ b/project/.xceditor/imgui_layout.ini @@ -1,36 +1,36 @@ [Window][Hierarchy] Pos=0,59 -Size=189,1122 +Size=189,981 Collapsed=0 DockId=0x00000003 [Window][Scene] Pos=191,59 -Size=2099,1122 +Size=1800,981 Collapsed=0 DockId=0x00000005 [Window][Game] Pos=191,59 -Size=2099,1122 +Size=1800,981 Collapsed=0 DockId=0x00000005 [Window][Inspector] -Pos=2292,59 -Size=268,1122 +Pos=1993,59 +Size=567,981 Collapsed=0 DockId=0x00000006 [Window][Console] -Pos=0,1183 -Size=2560,168 +Pos=0,1042 +Size=2560,309 Collapsed=0 DockId=0x00000002 [Window][Project] -Pos=0,1183 -Size=2560,168 +Pos=0,1042 +Size=2560,309 Collapsed=0 DockId=0x00000002 @@ -40,8 +40,8 @@ Size=2560,1292 Collapsed=0 [Window][Debug##Default] -Pos=37,37 -Size=255,255 +Pos=29,29 +Size=204,204 Collapsed=0 [Window][##MainMenuBar] @@ -60,10 +60,10 @@ Collapsed=0 [Docking][Data] DockSpace ID=0xA11B73D6 Window=0x1C358F53 Pos=0,59 Size=2560,1292 Split=Y - DockNode ID=0x00000001 Parent=0xA11B73D6 SizeRef=1262,503 Split=X + DockNode ID=0x00000001 Parent=0xA11B73D6 SizeRef=1262,981 Split=X DockNode ID=0x00000003 Parent=0x00000001 SizeRef=189,503 NoTabBar=1 NoWindowMenuButton=1 NoCloseButton=1 Selected=0xBABDAE5E DockNode ID=0x00000004 Parent=0x00000001 SizeRef=1071,503 Split=X - DockNode ID=0x00000005 Parent=0x00000004 SizeRef=801,503 CentralNode=1 NoTabBar=1 NoWindowMenuButton=1 NoCloseButton=1 Selected=0xE601B12F - DockNode ID=0x00000006 Parent=0x00000004 SizeRef=268,503 NoTabBar=1 NoWindowMenuButton=1 NoCloseButton=1 Selected=0x36DC96AB - DockNode ID=0x00000002 Parent=0xA11B73D6 SizeRef=1262,168 NoTabBar=1 NoWindowMenuButton=1 NoCloseButton=1 Selected=0xEA83D666 + DockNode ID=0x00000005 Parent=0x00000004 SizeRef=1800,503 CentralNode=1 NoTabBar=1 NoWindowMenuButton=1 NoCloseButton=1 Selected=0xD1EB2482 + DockNode ID=0x00000006 Parent=0x00000004 SizeRef=567,503 NoTabBar=1 NoWindowMenuButton=1 NoCloseButton=1 Selected=0x36DC96AB + DockNode ID=0x00000002 Parent=0xA11B73D6 SizeRef=1262,309 NoTabBar=1 NoWindowMenuButton=1 NoCloseButton=1 Selected=0xEA83D666 diff --git a/project/Assets/Materials/VolumeCloud.mat b/project/Assets/Materials/VolumeCloud.mat new file mode 100644 index 00000000..f55fe665 --- /dev/null +++ b/project/Assets/Materials/VolumeCloud.mat @@ -0,0 +1,13 @@ +{ + "shader": "builtin://shaders/volumetric", + "renderQueue": "Transparent", + "properties": { + "_Tint": [1.0, 1.0, 1.0, 0.95], + "_DensityScale": 0.24, + "_StepSize": 0.75, + "_MaxSteps": 2400.0, + "_AmbientStrength": 0.02, + "_LightDirection": [0.5, 0.8, 0.3, 0.0], + "_LightSamples": 10.0 + } +} diff --git a/project/Assets/Materials/VolumeCloud.mat.meta b/project/Assets/Materials/VolumeCloud.mat.meta new file mode 100644 index 00000000..0580bd2b --- /dev/null +++ b/project/Assets/Materials/VolumeCloud.mat.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 1 +guid: f6b4d8b3d1f94d08b3b9451d31a9c2e7 +folderAsset: false +importer: MaterialImporter +importerVersion: 7 diff --git a/project/Assets/Scenes/Main.xc b/project/Assets/Scenes/Main.xc index 3c9c494d..75024c4e 100644 --- a/project/Assets/Scenes/Main.xc +++ b/project/Assets/Scenes/Main.xc @@ -29,7 +29,7 @@ gameobject_end gameobject_begin id=87 uuid=9751737136539126565 -name=GameObject +name=CloudVolume tag=Untagged active=1 layer=0 @@ -160,3 +160,15 @@ component=MeshFilter;meshRef=;meshPath=builtin://meshes/capsule; component=MeshRenderer;materialPaths=builtin://materials/default-primitive;materialRefs=;castShadows=1;receiveShadows=1;renderLayer=0; gameobject_end +gameobject_begin +id=135 +uuid=14577318963053235508 +name=GameObject +tag=Untagged +active=1 +layer=0 +parent=0 +transform=position=-0.434997,1.6,15.0434;rotation=0,0.58032,0,0.814389;scale=0.02,0.02,0.02; +component=VolumeRenderer;volumeRef=3e098ae1928fa7b547fb4f8d0bd34a24,1,16;materialRef=f6b4d8b3d1f94d08b3b9451d31a9c2e7,1,3;castShadows=1;receiveShadows=1; +gameobject_end + diff --git a/tests/RHI/D3D12/unit/CMakeLists.txt b/tests/RHI/D3D12/unit/CMakeLists.txt index 2a2a9bf0..79adcb81 100644 --- a/tests/RHI/D3D12/unit/CMakeLists.txt +++ b/tests/RHI/D3D12/unit/CMakeLists.txt @@ -39,6 +39,10 @@ target_include_directories(rhi_d3d12_tests PRIVATE ${PROJECT_ROOT_DIR}/engine/src ) +if(MSVC) + target_compile_options(rhi_d3d12_tests PRIVATE /FS) +endif() + enable_testing() include(GoogleTest) gtest_discover_tests(rhi_d3d12_tests) diff --git a/tests/RHI/OpenGL/unit/CMakeLists.txt b/tests/RHI/OpenGL/unit/CMakeLists.txt index c53e7caf..f2cf03e5 100644 --- a/tests/RHI/OpenGL/unit/CMakeLists.txt +++ b/tests/RHI/OpenGL/unit/CMakeLists.txt @@ -43,6 +43,10 @@ target_include_directories(rhi_opengl_tests PRIVATE ${PROJECT_ROOT_DIR}/engine/src ) +if(MSVC) + target_compile_options(rhi_opengl_tests PRIVATE /FS) +endif() + enable_testing() include(GoogleTest) gtest_discover_tests(rhi_opengl_tests) diff --git a/tests/RHI/Vulkan/unit/CMakeLists.txt b/tests/RHI/Vulkan/unit/CMakeLists.txt index bce6e93e..a216ec50 100644 --- a/tests/RHI/Vulkan/unit/CMakeLists.txt +++ b/tests/RHI/Vulkan/unit/CMakeLists.txt @@ -42,5 +42,9 @@ target_include_directories(rhi_vulkan_tests PRIVATE ${PROJECT_ROOT_DIR}/engine/src ) +if(MSVC) + target_compile_options(rhi_vulkan_tests PRIVATE /FS) +endif() + include(GoogleTest) gtest_discover_tests(rhi_vulkan_tests) diff --git a/tests/Rendering/unit/test_builtin_forward_pipeline.cpp b/tests/Rendering/unit/test_builtin_forward_pipeline.cpp index 7464b2e8..588f2f8e 100644 --- a/tests/Rendering/unit/test_builtin_forward_pipeline.cpp +++ b/tests/Rendering/unit/test_builtin_forward_pipeline.cpp @@ -676,6 +676,78 @@ TEST(BuiltinForwardPipeline_Test, BuildsBuiltinPassResourceBindingPlanFromLoaded delete shader; } +TEST(BuiltinForwardPipeline_Test, BuiltinVolumetricShaderUsesAuthoringContract) { + ShaderLoader loader; + LoadResult result = loader.Load(GetBuiltinVolumetricShaderPath()); + ASSERT_TRUE(result); + ASSERT_NE(result.resource, nullptr); + + Shader* shader = static_cast(result.resource); + ASSERT_NE(shader, nullptr); + + const ShaderPass* pass = shader->FindPass("Volumetric"); + ASSERT_NE(pass, nullptr); + EXPECT_EQ(pass->resources.Size(), 3u); + EXPECT_TRUE(pass->hasFixedFunctionState); + EXPECT_EQ(pass->fixedFunctionState.cullMode, MaterialCullMode::None); + EXPECT_FALSE(pass->fixedFunctionState.depthWriteEnable); + EXPECT_EQ(pass->fixedFunctionState.depthFunc, MaterialComparisonFunc::LessEqual); + EXPECT_TRUE(pass->fixedFunctionState.blendEnable); + + const ShaderResourceBindingDesc* volumeData = + shader->FindPassResourceBinding("Volumetric", "VolumeData"); + ASSERT_NE(volumeData, nullptr); + EXPECT_EQ(volumeData->type, ShaderResourceType::StructuredBuffer); + EXPECT_EQ(volumeData->set, 2u); + EXPECT_EQ(volumeData->binding, 0u); + EXPECT_EQ( + ResolveBuiltinPassResourceSemantic(*volumeData), + BuiltinPassResourceSemantic::VolumeField); + + delete shader; +} + +TEST(BuiltinForwardPipeline_Test, BuildsBuiltinPassResourceBindingPlanFromLoadedVolumetricShaderContract) { + ShaderLoader loader; + LoadResult result = loader.Load(GetBuiltinVolumetricShaderPath()); + ASSERT_TRUE(result); + ASSERT_NE(result.resource, nullptr); + + Shader* shader = static_cast(result.resource); + ASSERT_NE(shader, nullptr); + + const ShaderPass* pass = shader->FindPass("Volumetric"); + ASSERT_NE(pass, nullptr); + + BuiltinPassResourceBindingPlan plan = {}; + String error; + EXPECT_TRUE(TryBuildBuiltinPassResourceBindingPlan(*pass, plan, &error)) << error.CStr(); + ASSERT_EQ(plan.bindings.Size(), 3u); + EXPECT_TRUE(plan.perObject.IsValid()); + EXPECT_TRUE(plan.material.IsValid()); + EXPECT_TRUE(plan.volumeField.IsValid()); + EXPECT_EQ(plan.perObject.set, 0u); + EXPECT_EQ(plan.material.set, 1u); + EXPECT_EQ(plan.volumeField.set, 2u); + EXPECT_EQ(plan.volumeField.binding, 0u); + + std::vector setLayouts; + ASSERT_TRUE(TryBuildBuiltinPassSetLayouts(plan, setLayouts, &error)) << error.CStr(); + ASSERT_EQ(setLayouts.size(), 3u); + EXPECT_TRUE(setLayouts[0].usesPerObject); + EXPECT_TRUE(setLayouts[1].usesMaterial); + EXPECT_TRUE(setLayouts[2].usesVolumeField); + ASSERT_EQ(setLayouts[2].bindings.size(), 1u); + EXPECT_EQ( + static_cast(setLayouts[2].bindings[0].type), + DescriptorType::SRV); + EXPECT_EQ( + setLayouts[2].bindings[0].resourceDimension, + ResourceViewDimension::StructuredBuffer); + + delete shader; +} + TEST(BuiltinForwardPipeline_Test, BuiltinFinalColorShaderUsesAuthoringContract) { ShaderLoader loader; LoadResult result = loader.Load(GetBuiltinFinalColorShaderPath()); @@ -867,6 +939,77 @@ TEST(BuiltinForwardPipeline_Test, VulkanRuntimeCompileDescRewritesAuthoringFinal delete shader; } +TEST(BuiltinForwardPipeline_Test, VulkanRuntimeCompileDescRewritesAuthoringVolumetricBindingsToDescriptorSpaces) { + ShaderLoader loader; + LoadResult result = loader.Load(GetBuiltinVolumetricShaderPath()); + ASSERT_TRUE(result); + ASSERT_NE(result.resource, nullptr); + + Shader* shader = static_cast(result.resource); + ASSERT_NE(shader, nullptr); + + const ShaderPass* pass = shader->FindPass("Volumetric"); + ASSERT_NE(pass, nullptr); + + const ShaderStageVariant* d3d12Fragment = shader->FindVariant( + "Volumetric", + XCEngine::Resources::ShaderType::Fragment, + XCEngine::Resources::ShaderBackend::D3D12); + ASSERT_NE(d3d12Fragment, nullptr); + + ShaderCompileDesc d3d12CompileDesc = {}; + ::XCEngine::Rendering::Detail::ApplyShaderStageVariant( + *pass, + XCEngine::Resources::ShaderBackend::D3D12, + *d3d12Fragment, + d3d12CompileDesc); + const std::string d3d12Source( + reinterpret_cast(d3d12CompileDesc.source.data()), + d3d12CompileDesc.source.size()); + EXPECT_TRUE(SourceContainsRegisterBinding( + d3d12Source, + "cbuffer PerObjectConstants", + "register(b0)")); + EXPECT_TRUE(SourceContainsRegisterBinding( + d3d12Source, + "cbuffer MaterialConstants", + "register(b1)")); + EXPECT_TRUE(SourceContainsRegisterBinding( + d3d12Source, + "StructuredBuffer VolumeData", + "register(t0)")); + + const ShaderStageVariant* vulkanFragment = shader->FindVariant( + "Volumetric", + XCEngine::Resources::ShaderType::Fragment, + XCEngine::Resources::ShaderBackend::Vulkan); + ASSERT_NE(vulkanFragment, nullptr); + + ShaderCompileDesc vulkanCompileDesc = {}; + ::XCEngine::Rendering::Detail::ApplyShaderStageVariant( + *pass, + XCEngine::Resources::ShaderBackend::Vulkan, + *vulkanFragment, + vulkanCompileDesc); + const std::string vulkanSource( + reinterpret_cast(vulkanCompileDesc.source.data()), + vulkanCompileDesc.source.size()); + EXPECT_TRUE(SourceContainsRegisterBinding( + vulkanSource, + "cbuffer PerObjectConstants", + "register(b0, space0)")); + EXPECT_TRUE(SourceContainsRegisterBinding( + vulkanSource, + "cbuffer MaterialConstants", + "register(b0, space1)")); + EXPECT_TRUE(SourceContainsRegisterBinding( + vulkanSource, + "StructuredBuffer VolumeData", + "register(t0, space2)")); + + delete shader; +} + TEST(BuiltinForwardPipeline_Test, OpenGLRuntimeTranspilesFinalColorVariantToCombinedSourceSampler) { ShaderLoader loader; LoadResult result = loader.Load(GetBuiltinFinalColorShaderPath()); diff --git a/tests/UI/Core/unit/test_ui_selection_model.cpp b/tests/UI/Core/unit/test_ui_selection_model.cpp index 13d8754d..83b598c7 100644 --- a/tests/UI/Core/unit/test_ui_selection_model.cpp +++ b/tests/UI/Core/unit/test_ui_selection_model.cpp @@ -37,6 +37,58 @@ TEST(UISelectionModelTest, ToggleSelectionSelectsAndDeselectsMatchingId) { EXPECT_EQ(selection.GetSelectedId(), "treeMaterials"); EXPECT_TRUE(selection.ToggleSelection("treeUi")); EXPECT_EQ(selection.GetSelectedId(), "treeUi"); + ASSERT_EQ(selection.GetSelectedIds().size(), 1u); + EXPECT_EQ(selection.GetSelectedIds()[0], "treeUi"); +} + +TEST(UISelectionModelTest, MultiSelectionTracksMembershipAndPrimarySelection) { + UISelectionModel selection = {}; + + EXPECT_TRUE(selection.AddSelection("scene", true)); + EXPECT_TRUE(selection.AddSelection("camera")); + EXPECT_TRUE(selection.AddSelection("lights")); + EXPECT_EQ(selection.GetSelectionCount(), 3u); + EXPECT_TRUE(selection.HasMultipleSelection()); + EXPECT_TRUE(selection.IsSelected("scene")); + EXPECT_TRUE(selection.IsSelected("camera")); + EXPECT_TRUE(selection.IsSelected("lights")); + EXPECT_EQ(selection.GetSelectedId(), "scene"); + + EXPECT_TRUE(selection.SetPrimarySelection("lights")); + EXPECT_EQ(selection.GetSelectedId(), "lights"); + EXPECT_FALSE(selection.SetPrimarySelection("missing")); +} + +TEST(UISelectionModelTest, SetSelectionsNormalizesDuplicatesAndKeepsRequestedPrimary) { + UISelectionModel selection = {}; + + EXPECT_TRUE(selection.SetSelections( + { "", "camera", "lights", "camera", "sun" }, + "lights")); + ASSERT_EQ(selection.GetSelectedIds().size(), 3u); + EXPECT_EQ(selection.GetSelectedIds()[0], "camera"); + EXPECT_EQ(selection.GetSelectedIds()[1], "lights"); + EXPECT_EQ(selection.GetSelectedIds()[2], "sun"); + EXPECT_EQ(selection.GetSelectedId(), "lights"); + + EXPECT_TRUE(selection.SetSelections({ "camera", "sun" })); + EXPECT_EQ(selection.GetSelectedId(), "sun"); +} + +TEST(UISelectionModelTest, RemovingPrimaryFallsBackToMostRecentlyAddedRemainingItem) { + UISelectionModel selection = {}; + + EXPECT_TRUE(selection.SetSelections({ "scene", "camera", "lights" }, "camera")); + EXPECT_TRUE(selection.RemoveSelection("camera")); + EXPECT_TRUE(selection.IsSelected("scene")); + EXPECT_TRUE(selection.IsSelected("lights")); + EXPECT_FALSE(selection.IsSelected("camera")); + EXPECT_EQ(selection.GetSelectedId(), "lights"); + + EXPECT_TRUE(selection.RemoveSelection("lights")); + EXPECT_EQ(selection.GetSelectedId(), "scene"); + EXPECT_TRUE(selection.RemoveSelection("scene")); + EXPECT_FALSE(selection.HasSelection()); } } // namespace diff --git a/tests/UI/Editor/integration/CMakeLists.txt b/tests/UI/Editor/integration/CMakeLists.txt index 36903448..c07403da 100644 --- a/tests/UI/Editor/integration/CMakeLists.txt +++ b/tests/UI/Editor/integration/CMakeLists.txt @@ -53,6 +53,11 @@ if(TARGET editor_ui_tree_view_basic_validation) editor_ui_tree_view_basic_validation) endif() +if(TARGET editor_ui_tree_view_multiselect_validation) + list(APPEND EDITOR_UI_INTEGRATION_TARGETS + editor_ui_tree_view_multiselect_validation) +endif() + if(TARGET editor_ui_property_grid_basic_validation) list(APPEND EDITOR_UI_INTEGRATION_TARGETS editor_ui_property_grid_basic_validation) @@ -98,6 +103,16 @@ if(TARGET editor_ui_list_view_basic_validation) editor_ui_list_view_basic_validation) endif() +if(TARGET editor_ui_list_view_multiselect_validation) + list(APPEND EDITOR_UI_INTEGRATION_TARGETS + editor_ui_list_view_multiselect_validation) +endif() + +if(TARGET editor_ui_list_view_inline_rename_validation) + list(APPEND EDITOR_UI_INTEGRATION_TARGETS + editor_ui_list_view_inline_rename_validation) +endif() + add_custom_target(editor_ui_integration_tests DEPENDS ${EDITOR_UI_INTEGRATION_TARGETS} diff --git a/tests/UI/Editor/integration/README.md b/tests/UI/Editor/integration/README.md index fd875d4b..46b98635 100644 --- a/tests/UI/Editor/integration/README.md +++ b/tests/UI/Editor/integration/README.md @@ -29,7 +29,10 @@ Layout: - `shell/enum_field_basic/`: EnumField previous/next switch, keyboard switch, hover/focus/selection feedback only - `shell/status_bar_basic/`: status bar slot/segment/hit-test only - `shell/tree_view_basic/`: TreeView row layout, indent, disclosure, selection, focus, hit-test only +- `shell/tree_view_multiselect/`: TreeView multi-selection contract only - `shell/list_view_basic/`: ListView row layout, selection, focus, keyboard navigation, hit-test only +- `shell/list_view_multiselect/`: ListView multi-selection contract only +- `shell/list_view_inline_rename/`: ListView inline rename/edit session only - `shell/tab_strip_basic/`: tab strip layout/state/hit-test/close/navigation only - `shell/viewport_slot_basic/`: viewport slot chrome/surface/status only - `shell/viewport_shell_basic/`: viewport shell request/state compose only @@ -118,11 +121,31 @@ Scenarios: Executable: `XCUIEditorTreeViewBasicValidation.exe` Scope: TreeView 基础控件验证;只检查行缩进、disclosure 展开/折叠、selection、hover/focus 和 hit-test,不涉及业务面板 +- `editor.shell.tree_view_multiselect` + Build target: `editor_ui_tree_view_multiselect_validation` + Executable: `XCUIEditorTreeViewMultiSelectValidation.exe` + Scope: TreeView 多选契约验证;只检查 Ctrl/Shift 多选、锚点、右键命中已选集合、键盘范围扩选、expanded/visible/current 同步,不涉及业务面板 + +- `editor.shell.tree_view_inline_rename` + Build target: `editor_ui_tree_view_inline_rename_validation` + Executable: `XCUIEditorTreeViewInlineRenameValidation.exe` + Scope: TreeView inline rename 契约验证;只检查 F2 开启、字符编辑、Enter 提交、Esc 取消、点击外部结束编辑,以及标签写回 + - `editor.shell.list_view_basic` Build target: `editor_ui_list_view_basic_validation` Executable: `XCUIEditorListViewBasicValidation.exe` Scope: ListView 基础控件验证;只检查 row 排列、selection、hover/focus、Up/Down/Home/End 键盘导航和 hit-test,不涉及业务面板 +- `editor.shell.list_view_multiselect` + Build target: `editor_ui_list_view_multiselect_validation` + Executable: `XCUIEditorListViewMultiSelectValidation.exe` + Scope: ListView 多选契约验证;只检查 Ctrl/Shift 多选、锚点、右键命中已选集合、键盘范围扩选、current/primary 同步,不涉及业务面板 + +- `editor.shell.list_view_inline_rename` + Build target: `editor_ui_list_view_inline_rename_validation` + Executable: `XCUIEditorListViewInlineRenameValidation.exe` + Scope: ListView inline rename 契约验证;只检查 F2 开启、字符编辑、Enter 提交、Esc 取消、点击外部结束编辑,以及标签写回 + - `editor.shell.tab_strip_basic` Build target: `editor_ui_tab_strip_basic_validation` Executable: `XCUIEditorTabStripBasicValidation.exe` @@ -225,8 +248,20 @@ Selected controls: - `shell/tree_view_basic/` 先看顶部中文说明“这个测试在验证什么功能”,再点击 disclosure 和树节点行,检查 `Hover / Focused / Selected / Expanded / Visible / Result`,按 `重置`、`截图(F12)` 或直接按 `F12`。 +- `shell/tree_view_multiselect/` + 先看顶部中文说明“这个测试在验证什么功能”,再分别执行 `单击`、`Ctrl+单击`、`Shift+单击`、`Shift+Up/Down/Home/End`、`Right Click`,检查 `Primary / Selected Count / Selected Ids / Anchor / Current / Expanded / Visible / Result`。 + +- `shell/tree_view_inline_rename/` + 先看顶部中文说明“这个测试在验证什么功能”,再依次执行 `单击`、`F2`、输入字符、`Enter / Esc / 点击外部`,检查 `Rename Active / Rename Item / Draft / Committed / Result`。 + - `shell/list_view_basic/` 先看顶部中文说明“这个测试在验证什么功能”,再点击列表行,并在列表获得 focus 后按 `Up / Down / Home / End`,检查 `Hover / Focused / Selected / Current / Result`,按 `重置`、`截图(F12)` 或直接按 `F12`。 + +- `shell/list_view_multiselect/` + 先看顶部中文说明“这个测试在验证什么功能”,再分别执行 `单击`、`Ctrl+单击`、`Shift+单击`、`Shift+Up/Down/Home/End`、`Right Click`,检查 `Primary / Selected Count / Selected Ids / Anchor / Current / Result`。 + +- `shell/list_view_inline_rename/` + 先看顶部中文说明“这个测试在验证什么功能”,再依次执行 `单击`、`F2`、输入字符、`Enter / Esc / 点击外部`,检查 `Rename Active / Rename Item / Draft / Committed / Result`。 - `shell/tab_strip_basic/` Click `Document A / B / C`, click `X` on closable tabs, click content to focus, press `Left / Right / Home / End`, press `Reset`, press `F12`. diff --git a/tests/UI/Editor/integration/shell/dock_host_basic/captures/history/20260408_190049_1_startup.png b/tests/UI/Editor/integration/shell/dock_host_basic/captures/history/20260408_190049_1_startup.png new file mode 100644 index 0000000000000000000000000000000000000000..534b00a5688e7a8b2838529f2a983165b834db68 GIT binary patch literal 86092 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 literal 0 HcmV?d00001 diff --git a/tests/UI/Editor/integration/shell/dock_host_basic/captures/latest.png b/tests/UI/Editor/integration/shell/dock_host_basic/captures/latest.png new file mode 100644 index 0000000000000000000000000000000000000000..534b00a5688e7a8b2838529f2a983165b834db68 GIT binary patch literal 86092 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 literal 0 HcmV?d00001 diff --git a/tests/UI/Editor/integration/shell/list_view_basic/main.cpp b/tests/UI/Editor/integration/shell/list_view_basic/main.cpp index e1060504..459926a8 100644 --- a/tests/UI/Editor/integration/shell/list_view_basic/main.cpp +++ b/tests/UI/Editor/integration/shell/list_view_basic/main.cpp @@ -2,8 +2,8 @@ #define NOMINMAX #endif -#include -#include +#include +#include #include "Host/AutoScreenshot.h" #include "Host/NativeRenderer.h" diff --git a/tests/UI/Editor/integration/shell/list_view_inline_rename/CMakeLists.txt b/tests/UI/Editor/integration/shell/list_view_inline_rename/CMakeLists.txt new file mode 100644 index 00000000..1646685a --- /dev/null +++ b/tests/UI/Editor/integration/shell/list_view_inline_rename/CMakeLists.txt @@ -0,0 +1,31 @@ +add_executable(editor_ui_list_view_inline_rename_validation WIN32 + main.cpp +) + +target_include_directories(editor_ui_list_view_inline_rename_validation PRIVATE + ${CMAKE_SOURCE_DIR}/new_editor/include + ${CMAKE_SOURCE_DIR}/new_editor/app + ${CMAKE_SOURCE_DIR}/engine/include + ${CMAKE_SOURCE_DIR}/tests/UI/Editor/integration/shared/src +) + +target_compile_definitions(editor_ui_list_view_inline_rename_validation PRIVATE + UNICODE + _UNICODE + XCENGINE_EDITOR_UI_TESTS_REPO_ROOT="${XCENGINE_EDITOR_UI_TESTS_REPO_ROOT_PATH}" +) + +if(MSVC) + target_compile_options(editor_ui_list_view_inline_rename_validation PRIVATE /utf-8 /FS) + set_property(TARGET editor_ui_list_view_inline_rename_validation PROPERTY + MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") +endif() + +target_link_libraries(editor_ui_list_view_inline_rename_validation PRIVATE + XCUIEditorLib + XCUIEditorHost +) + +set_target_properties(editor_ui_list_view_inline_rename_validation PROPERTIES + OUTPUT_NAME "XCUIEditorListViewInlineRenameValidation" +) diff --git a/tests/UI/Editor/integration/shell/list_view_inline_rename/captures/history/20260409_011602_1_startup.png b/tests/UI/Editor/integration/shell/list_view_inline_rename/captures/history/20260409_011602_1_startup.png new file mode 100644 index 0000000000000000000000000000000000000000..dd90aad0ac1e3102039033c46075fd3429e6463f GIT binary patch literal 83167 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 QM{cMnuR@94f9ALU0Gx9#pa1{> literal 0 HcmV?d00001 diff --git a/tests/UI/Editor/integration/shell/list_view_inline_rename/captures/history/20260409_011741_1_startup.png b/tests/UI/Editor/integration/shell/list_view_inline_rename/captures/history/20260409_011741_1_startup.png new file mode 100644 index 0000000000000000000000000000000000000000..dd90aad0ac1e3102039033c46075fd3429e6463f GIT binary patch literal 83167 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 QM{cMnuR@94f9ALU0Gx9#pa1{> literal 0 HcmV?d00001 diff --git a/tests/UI/Editor/integration/shell/list_view_inline_rename/captures/history/20260409_011820_1_startup.png b/tests/UI/Editor/integration/shell/list_view_inline_rename/captures/history/20260409_011820_1_startup.png new file mode 100644 index 0000000000000000000000000000000000000000..dd90aad0ac1e3102039033c46075fd3429e6463f GIT binary patch literal 83167 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 QM{cMnuR@94f9ALU0Gx9#pa1{> literal 0 HcmV?d00001 diff --git a/tests/UI/Editor/integration/shell/list_view_inline_rename/captures/history/20260409_012145_1_startup.png b/tests/UI/Editor/integration/shell/list_view_inline_rename/captures/history/20260409_012145_1_startup.png new file mode 100644 index 0000000000000000000000000000000000000000..a826b673f930eb3e9cf936c9be2820c340f91a9d GIT binary patch literal 82852 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 D0`8i9 literal 0 HcmV?d00001 diff --git a/tests/UI/Editor/integration/shell/list_view_inline_rename/captures/history/20260409_012151_1_startup.png b/tests/UI/Editor/integration/shell/list_view_inline_rename/captures/history/20260409_012151_1_startup.png new file mode 100644 index 0000000000000000000000000000000000000000..a826b673f930eb3e9cf936c9be2820c340f91a9d GIT binary patch literal 82852 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 D0`8i9 literal 0 HcmV?d00001 diff --git a/tests/UI/Editor/integration/shell/list_view_inline_rename/captures/latest.png b/tests/UI/Editor/integration/shell/list_view_inline_rename/captures/latest.png new file mode 100644 index 0000000000000000000000000000000000000000..a826b673f930eb3e9cf936c9be2820c340f91a9d GIT binary patch literal 82852 zcmd?Rc{r5)|2{k-T9kI#wJK|oeM_4)N|tOx$)0^*W+;_PNV2bmgqW;jm)shRU5srE z*$oCWV=|0+-dEk<&*%62{`>y<9M2q%GBcNJd0(&fe4Xd@>W;qVfqlIDU@+JLZLJ%I zFxYMi495C=4?Floe8u)A_>aZgQ1cqBxQl-QykT?DxUB($mBj4dey|$`W7cTj&@c*s zFX2Pq@XaAacF^8Y#Twn0{re-|NAXL@D_$(z(DS&dHLeiKf9>9YD0lO%7|Za3hHS^Y zRj(SC|MSp{yYzv=_Zcnms^U}M2ruk|wI#0ovh03AG%s~zr)kDj7&!-0D$Fn9#GL}B zv|P(_&g8gS=FoR~H&tjI%{=dF&D(0%w{~;-DXM1%&L;D$lU2waR@bjzm%n=Bzc0R# zh>pYmeS4#P?NXM(f8Uqy{r}tBG1)6ue46c=RW4>&=B61;dHQxZS&!X~i6JckW@M}(;S*^JL@ZnyL@x~n-lb5+c*s-Xi zjRyy8Eu+^Am=uFqaWosL|KHmwPx9L-ZnR@zgp%EN4)`q%Jt5*ywsv+cX?kFb7f+tB zgix}DT1MR)qcV3Wd9%~LE&n+SdW`@$i#A=)(1k?gUS+?fZxt@MlV^p&_1-HS_&!i* zx(1z^(9UW^XB+Va&FSxAe5Cp-BXNXxVLN$h)QgslNCD>W7^b5>`1YeDa)+Ebh4&}4 z)YHaY^v&h#437T2W;`#N?$4;<_`8JI1c}FMnqb9l6`AaZt{tPcaoM}?_7o!J<)7F5 zU`>1@5vQ8f=u0%&UMB1mDMH_vOu92S+)Kb`-jx4y<62{|v1}GIHYS8kh~5*iO3q}C zr9o>{2>r_c=QHr-KWXLm|2-u^^e=x^x0_d)B<2pOvlnb#&K}C7g*Fz;BggYz{XG-6 zOzMtR4E5lAC}c9w?e>OlV^I_ID`ZA;nkb(C+z)hj5VIH)#6cm|5G8?KH1ppEyLIuH z`f*?k*v9O8#AQM{jj50 zGBwpQ{Hn18+6Qcjb4 zEV2cBU_2s@T@*{7@#0C=W8VxB9B>{;8*3{4;*0t@U$Km&?KRW7bA%e=^sQyO0?j-ynLx*ps2ykXZQuGp&i)lrcBG*tviCrQWOybw?kIC=8wg=5!>Oqx47-Y7<1zrwqFX$F=x;C$-X zzWfjO#d&pobk4_pHWEc}P>EEfcWq}+$L`6h_>JSxrge1aVXk<872m($GZMRUEBi@& z{Bew5jDYeB^P(3IOXfFyZk#=$k==Xe_}*T}pCxcrgN`+@X-VNQWc@4)ZyuN9ZeFuw$WA>apcb;^m5={ z9GFkkId_Hkz|u%X;TeT7*H!1W^zJzUiTt>>v*tx6-NpXvn<_6NB075u-|6Rp<^2kx zUbGNJnv;{$$LP*9Iq<#CIn0h-nHlV=T$Hm3P71rHsY+wV<$FsAuqo+=dYM+mbcGanF9G2F+;Ui`zo$OoxBGsTe(AVz# zI7+xd^2jTN6||wYtI0?1$d+h!mJgByQy*Jf+c3Ni!4-r+D4KC)9N_DT5Ku|5agw(e z{`SZ$Vc#sVsbA~tuFUQ^p1KzTHt~b&A1x(m1Eu<=D4gWW*@q-B&68iVu_uR%O~uykT=-eS7o>^wF)e4AXuZf?y7sY5cu) z?k~nM+d*s|cGk7VSAEU|Ub%EBY-YwT$MB+N;^i90EBi9Lab>$dZ629GYDG3v-*(SU z(zcAT{;_)Jffp+M@Q=gJ7`^?c=xMHD{^!8Bwnv&aH(wkT(f_i*IM@^ISvGt{$mOffcQ!MtepcdP`9W4&zf72caA_kGyL zrQmfhZ7x;KPAHbE%~}*eaj+IIr|GK&Jb1v_#d&yzy!o}R?u(i`p}}f5xt{)uwi)6m zmwF))8{Pg2{^X^bVg508cJ`kRh9{uGlbi)^FK>(^O}{%o-8^4b z@wq1^&SIp{PZx2~o8GXmkq{HfEtQfTtCM?4Mkd^(aE9)~4(=w1Sjxr2v$8TLBJ+dS zzkLha7lid9lgX=F41p(0SB1ksUe|o?J&2_vTq`+K5ZG3n~ z-t<__u;&(X>bzh~wn^csMC^mWKpx;T&#yJf;{PrarKxms7ab0Q(~(zf-zUG)o6>c1 zEiJyxkpscvK2xbF@;p;irg`fYlnrPK$i`5sP?gjsLcw4Zc48t+vG!ftBc)v@3r{_< z+xtd~NOr@+Zk|3&eG1P{10nuL3ch+-2&Si}r!easT;f(_;(g%RJPTd#e7J|go5ym* z&l6g?hQ%5?1H8cJ0~VW?eA_0uXWZ?F0uqwhdC$jlP zT9!#+ZgHMhQDWZ54v~ysYYHF)VSJ4e+a7`7H=v6t8x{v2J}gOcW~eJE70f2;>}n*C z?#B>Fm|wp>+VYp{JSo6NE_UvNCF3}MHzSXn%JH=oA>8a+D5vijipKLByuGcb_hqvd z_9p-yc15P1&*EB+K!F5MVSZCZP&3zX;rCssqHWx@T^*-?&P5XG=hRzWDtLJz_nHU+ z)mNEufcOb-wksVb5yrK(!ezPjY=ll6|4JZb-8!D**%m!+ei`N9c&MAdf56o>Cn{Flw*Z?aX$##%D`qeHv_4PiCAi# zez0$?jGWwHg#jHH1z6RGC7)~J#Nu^;*)HY}f37P;IPZ1twA(?0_e?2I&<*G2Ok|N%+08;{myQL!rV{YbHu{YbEiLce(rS?7L4)t z$?T6DUe*^sK{UH8j`NT?gfdOzj=Tv{%4ceHOpL9k=V4G&1aB;{z?O!~@<@4o&vyC( z`{Tt-JMJEwJ!rG zJ4;Dj-O>nwKG_^`H{Ym+U21T#Jzfm>_(>ifmZcMsN0va)Rjs{p-<8OCBt7hlV7zVT z^j4kms?L7CRcuuorq+LvWVwfJS5i{aDrZWPhQADK$~P@1({aI?Ag>f~Cm=`6u&@K}-29rSs*3Ucq>V{EP zEgW?w5nHraLJLtN&6k;qusD}_ole#(#@^dwc=%!EX{khPLH7g*K?O_<22<eKldMVfJOOdVBBw^YF5<_8svP z1Bf0HE!d>5CN^)fgIH@MnK~70hEW^ z@lPhG8<35J%bAiVIUhcF@Zfs+1+@5n@JVmfTYdWNL9%LQceZn5)t&XT>H3BK$9?us zBq7fD6TLXX7ER5%#mWY9jViz3*3O?EX$8R|J5s(%g^?5Y+MycbUwi9%aB{K5&0;rT zm!KYv)w*GPL<`H%JD)8|a!&{`FgxJ1EOanpSSR!E1@ePh-1=#GUuh7ia4O6XoQmQ8 z*`B=(FCyUDL&o5{ia*@hv+P%U<};!5+c#M0@E6;(x-rulAz&I_b=xS5Fk9JaC-yit zQA*wZ=hucB5VbD;%6%v#sISZeJ!`ezillb>9jF1t7349+{?oZ_^c_2Co{o-=to!0M z373a3*d@Mdf~5b;mujsY#ogOT^%LCO19N`0Mdp*KI=M&8i%x*dX^me7sTfpeR7yMu z*U_&-s|UHbxRgb|rgonHK6xpn^Aj)HeBH=e_|Vl$Cyi*qL$oZn_$`>n($Hm)z{|}g zyx$r61`2_e7JA_~ySab*R`t{ zRXvrgcbYe9oU#@2*Ag7bH7<^h^Dh*=iYi@4Ur1O~RDcyiZXr(-F5sh-)=5|F#f6zK%B%OAfQrLD@l(8r=HPy+xs41hMC|_0!cL z`6uwG{W(t??u!@D)`7|3UNhaIcsts6{mDnCM*;@7{8dl(h@3t>QuXI={|7}`F8j0F zE$FNNd41IXUp37C+l_k##1gT|*^W^gEBMI#{EGkz=;auE!ph+>-*f5@E&$@ZgfFhA zr{{q8w7KhOlEC?jdY; z`S(1QyR4$}MpH15&D+~M+U^mYJQlLvCNfFh1V3pWn-Y*2X^d}7RQ%9TJewT7)J}Z@n8K( zfx_7w+0m~o3=YA7Z)9w;Y0o##;(BtI@=%3~sitt}vZnfy z)O(mpxUt7xog|jsA5bpf`f(_0|8$allKS@7cB#rEhh%W4)Hxf;>7g7S8in66_D3tp+_nCs3oZQ84i zNp){n*rQYBO3?F`cbj{u-{-TrZik!r`c~*uQ1w%+EJiGgD_bupIVI)$*q9}*{T72G z2xVh{a&dwzqzWLGoxR0pWAM8;6D6${FGN85#r=pXZFFOK<7Vfen*3y6{aAYxb0IHt zgL6LS&6^4TP@4Z5VP`b7xv%e?;_!p|m43Im^EGK4_F+Hk29xG|QML;ejO!5x6@O5@ zt<5B={WH`<8ypVp6C^0+)KU2;Dd1dw{d$N&=!xzpfhBHOi6V9`*Lh}h40IATMB}|w zGdp!^kx%2iRs)C`yj(ARzJJE!Fu=U zd3(k8Yo*NZ;+i0d1gti3uzd4YcGD24N(=r}|D*pp9Jg0HE>N&~cbDf;i9!6X{ch9d zq7qB+P=>F{?}_k$oz1y{nB}}oWX)7cZSMvex8_-vV5evQmIORa0C#Pz0);qWz1eQM zy4f8%o;F?q!8NsJw--Bne9GOcC7vlZt3&SEf4Q@Kr09%|l+x zZ?k?H#pIcI9HkjC=-%IQXM#~GH3BtOG0y|Jq^o!H5|CT2b-#Z_M#DCsunF!%t)R=$ zag=5>zeX+o2bG8$2-u9a9oO}lrRI;;xh)K6U+rHWgPWP%#i<7HHv^9Z&`k01b8te; zp!uL%yc^DsoFYuqN57t|2$>stOeyUtdJ`yHx{!cVB8Oa2Z`O*$QK>)k?*&Xe;ov`B zWxq-EgC~Npi~WAS%~O|^loo&A^(d1l@3^|e(aVx((w(QD zz6*BzPEYt{DDV?ejnVdH`R&zaa$kRVaV(Ej&t(K(x^g9_%M2y-+D-lbqHO7u97!8L{9Fk<>+|yCD1&SBmfF}d^GVmzKM#$S21_C z+?U3x$)8?Gg>GWyL2#&!UX$im^qRgUmugJ5FEgW>erjBA7mJ>JC6ZB9;yu^JCsnul zbgHbONF*cRS`>}9ba*N1jApdY8yrr8nCROkZC}%{JtO5Wo=5VRORZn~=cs`~Um+K& zZe0hXfT*?JSx+1YvJRNsjhQor2hRM6J)`NiL}(2iUFN#d z6Y1QisoC^HBqp$sq$pYd_x2FQ{%6eY#C_=uI&! zo?TVy(c2I??CXZm*_zyrBqD9(#pniQ^Bh-4Aa$}$B-7`1Oa`}CUB{J${`x*QK?er! zoNTM-`}Ly4>)xw1_C>w{lh3(T`saM3es<%dsv7Ni-fQ%IayOXuAGJplo4mVKah^L% zKZ_$vV`g_+ZN|Mp4hW_FkZ;_)P2E&y?hb_e`_+so zH+;c2&yy=@Ygp;zct(!k1o4(yq3iWzuR!rvcWz5SQ)5<(|g2Zy^Z89cHEpxjn*6U(_#-*ns(({|nlH{k1DU(^E zuXu-VEn^}WT5)6u5gW3Jwf1`-EQ6n|^e;Z0B^8d`S(xgeu3SNGFHDWKSL%V}rL6k& zl;I1C9mVU>L9gPZP3MF5yp)jsZh3FPHX`IEg6ceVU1wyt>f3*Ga!UE^omHQ_``}bR zWvZcf1E*44D&$q%dKo+N;gp$DqELwCr< zQ|>JY`b)pg_hhY&?mD-5vJW4{uA@$t1F^MkW}Rp$^hkg%%h;WG^({^qr{^6ywsAMQ zEYMXN+oC^}Vw1rqorF_FWOi=%;vT?lDK0Tz3^sK8`Xo@b2V4~A{sfFA)M!KULLXUo z{T|a=h=LfvB##c@T%yVCai*3H!EF->f){nyH?brBT;6ZJ9wa!Rn=DP*!{C)Q2kaGN zeXEvf-nX8|!#`!ph>B7}>O3 zk|$p36+Px5IkI|mg1Vb>dL;d*-cD@V{%{eax0C2IKSgaCQ%49g%63?_n1l|l&83a&n4&kyqajV_ zF8NHi#zu$8sn;^@NY8nW4g#O672J>3=*G@jBEMmUM-#~g%-(Z>Zi0;ioNj^QTdCAN zeGXR0Ivv5 z4{qUsmX8qh>I=-qUtW!M$r_E;RNhianis=dbj!KRHi3~oqKd84T-L1fqS5{&jR_A&F3pS$qVj?SwawlJK2l@^i7`{1nkTKRaFh>)t^>;sxgZ*BOSolmX|0Oyk~_M`msq!JxUWl3Pni!WK9|?KI%psa^mMu zwVGY)or`7G7jr9H70c2c$W^TYGOn|gkC@XbbCuBp2kEjsmU(Jb0-5Qm>mzkP<^x4% zbgbb7OuFP&ehdzq)*%vTBdAxgNwrKdP+5f_09#>|~}T|PB- zEZajZIKZ?(?FNBL-NwZ~+(NFo3m&&@85{QEam&&;hgN9yZYpHB@x*`)w zYPl*I%KisI3#BO3Feu4L9U#>3H+=3R>rHj3aUz3MY=O&j5 zuC2;v;fPIR5^dNa6Y6d|q;RLuwm|@_z!6_BfYfl3m)CH{qU&&3nmWJ>oJYTsH$gAj z0$ijdl!;sd#{m`fLV#IT_gph5OfD%ZE@*{+SJ4v zx$e%+NpL!g3SbG+)I;G2H3XgVVuU~~A0a{zz#5&1D(t40f?}qb$!KJ98>nrbh1&i} z7wawFgoK2j*0A3s@XeXHwh1xo&3!8kTW)pR>sVNrk5bW2qX5*02b1c#!D?Vu@U^ir z@WtQTv zV`GHiI8;e9YJHF8*6K+JE*jonXjKZYUT}r;;K72;`YJp*YncW(H$`17We(j1q-X1l zf1*MRMr!?~#zV-r#U&+!kOo(1cVCd_x(fpVyb$#sfrxV{KnlF?_UiU3151xls)uls z?M-q4X>~3$v|&m>>AW_k?sL7s4ri>d?p(gzk;q5LW!lJ0iu7+0iK>l;1RR4v%oO& z;YoY8IIthCM|f;3nNf4S0XTuhVi)(%wzuztF8eW|)}>7P+)dP2w+{$78A_H9ovI-mv7ykVLjVi`?9zg9 z5+@4=#L>|OK2nmBzn*Xi-tR|39<9o1gN7ioxtMJ?&}a*E3;W2gU(-Q(_1#9>e&}cY zly9_e+0SCPN@tdB*{~6dKl*Ch*cg9G=XtfAH85@tV$XVJbO}`8LR%Zl_m1C=i;GhT z-BAIyHSt;DP>dS=0%VcEVtAnM=XSuv$ujg(JC}*~{Dzn55at?kx}A%`Z5`5^cHpbn zNwD!sH1V|)xD0^eVf-7&0+@ikl}TGlva-+9tkz2F>fWFUNIu9Ps=enRXwZ0J^_4-$ zwPjP#$(D7iMfT?zC?j*gSX6~RpB+slh<4hSWshmyyn`++F{7C#;rc7!TzWyfmm0VH znFkHj8CM#pMefz?RSirA=?@zVu*w3raZI{(XB&D9Aaq{U{DJ`!EICUy32e60mb`+3 ze*Af9R=pQ+EQq(>4`m6gHf+y;|ExqOo*sW3w&n-5`<^@7fne_bO}{L#(+UnZX_E04 zdcIkI?Mmux2;Bmv^Bn|GW4nfAYmojurUT`H8-YRatfK)yLxdsZKu=%)SFff}OHa=o z9HSZpJmcYcI}pvBLC~q^hMITD#Aa}QkdNc6Lj@pcE@(LKEwL2}%@Eo-9;jLW_>T?Y zoQ7zs=nptm1h6Q`TR(mJWMqfJ`Dch^h8zLQ>D|el&hJ7-`mBsqH$+eM8>mM?3mr^b zX;CKC^~b6+-oEA;nsESgagWWeQ7Lq=jyym!zX9snC>1$%%l%Cm2o0EWB&8h%P^apQ z$a=^Rh#vxx#m}!~yoJ@kc_e4H048u!P;kW&mXqj?+Qx%PO!jtXXQ%IbOzMMTU3Zln zQ@zExcOi3E_za+NB>o~a`9W@9-#Q}7l#-Gv6mpc-Z}`?0!|t@;4;)8aO3J_dBiM~{ zSGw}t@R3|@RhtXeArPXc@FTc_5-TLI-V)&EcCglO*$~?_6X_yP=XNFQ7KS8ug2V!n z6+mj~cWt^FtE%<@p2}u(>G0!Uz_k}SN|Bt8GN(DlX0VCIy0_(n4s{VRq@JF)`+^7u zAqW|)%2cZXN=Q;^ulXXDT3S{0*}M%!jVQ*Ic$_i#nx-0TQo$B)hi_HF?_yz;r%}8> zxEye{*!g}iM>iQnf~RL36+!;Im#06uIhTn634>qas{sgaR<(YIi zY%44?CUo1j!di);Su<20EPsAkgugC&vq)NAer_biBYOoUsM108Ja7q>=Ta@0bY28P zw0~~qp?l=TUPvc%Le4QM#ax&A15pv^gXq;FcLeq_7i@c+#1KTz`6Ds>_4bgRfIMh? zNj_KA^-NcWYUFz>vmu|rU(Jv6#lxo;00iAC`%R@A!gE2z045+0fFW9;;?OBOjBj<7 zI=NbsiQZSP27o$b736xQS#^-2L)0=IW|Wsy`owf8uyl)?wWIzyZbWW?!9n?dKyk%H z0}y1s2GiUs-lzn!)|NB@EDOrTnlt(1i`MSGcq~X`s~e;4%A%}N0D=Td3!&>8Ae1@9 zmjXB%?km8<&;Jh?O7jyAfMFQXoab?ZMZKjznbL1C1quOUiI1Ja<&RxJSp;H5`INF* z+3=D=H&`c-3X7xHzV;&-bZYea`J8LAiP%Yy1fa49%2FUn1Sbr*JxYe$Fn4sj%cZY- zzkIOiTKQc5y*z#cVL>II*0h!n!;h6V2A0R>Z+02i*Ab6j1#v(X`z#dHf(Ki4dy zGuB3W35GVk8MS>MD);DXkJ$CWY6;94p{aqf6sXV(n2y!FBrhKUcJc=uC3ngTXb?cu zfR-=%brA?jhQ?Y+AnrnWgjamk3k1^&gLTKo_w~SC@|U3j3X~rJ#8>?EJg~jx;UkuP zP)+H_#^YNmiAeo-?y|NP6Uxt}vKqGUrN2CpdpFUQ+<%wf|oHpnV~y@pl+O+ z5@IR{A}GBX3(^bfi=FEqltHeqbSJD-b?M)}oiD_oBNzMSM|Q^by^z}IvxXZ~2Cg1J zTY$~GroIcdGa9<(UO*H`XQNsao#i#S2DC1rJqCHtIXmy?tv&`mO21x z<6#-ngK|zBQ(i#H=kt^j%D@5+|6x|^TZgpTP;%&W`Pw0dnFfCv0Ll+fkp7Ktbu!v! zyrNx~@U`3^)yyYxjZ|ngx>K&NutKds1FfEveuN!Q8^xBZXe=4m0Kva|0Gn}umX2&?fYB_lST3;JN^=vY zzC(f#gLla<<~W_^DsMOo*)GK1WDG?jrLHF0ic(yjD59Xkx(Xn(KV@$+8Cjtsm)qP` z+Y&p?kpLZ@?~+zfcnMsc%M=Bd6)75iu^$kAd+9x_V?u2HzjlggQJH{gZEoOl;4cvv zapwz-6!iEfG^n4Swekq;oljp1uWW=YAG|0{&HoaJi&7|d`hPw{bNv~${`npJlM4I) z{@ZVVL=GLXE)}k$a*u~gcY~4j>{)=|n&&n(X+Zq=svv5CqSI|R41%5*x|z5JSt{_> zfAZ8BPTPy9odSqe550P~W=T6Mq}67jokQxso48gTLN^?KV?wtzy%T()k#ZBXpuImT z#^rY`5ScqvYo;#%fZ3q<)T#aNqVjbSwmS(EAey#V@61@I#0|Cp;y1^ih33Nr5q`VR zAn3SI1`ZJK790MqS!919FkbiohC4|LZl#n?yE5Cz0@R<3YB)ZX5Hg0`jn!?e)2 z!m`@ZWZ`JOQM+$wXCR$)6gaNzu2ZIYMDzX1GY4(sUxzW^0rx` zg<2}6R|UQq(qN1Cs6Jm66-T!Iv49y#!$pqDcHbUQleBMWov0{6_MZaWHtU7MUI?Zz z{TFxROHeaRLG3COxehV6yP1!>uKl}KAGXQrOc^+U;I}iGeTkAFO~^|D3x;_3QM1-<5X^+j{~H20Hfcqwsm zIR}O#kU-G@Bn#QS-?q2w&M3^D|4Vv#c`JMN>^V?;0a=b#UjOXbZ*H#?FI}2AiF2+v z^y&uPyitG9xNu;Cya|Kp>gs|`S|3SQ`7Ngq)#9;sHvnI?8dql@>cPE-?UJ%Gaj23FCUX9~3K|GwEW<;O_)y!4qY~htK0ZHXiwp;!@q44U z4^$hy9n%)aJ|&P$GiQFA6dIpBvKNr2Fw9ROYB3;90CZrN-|BsbVj;h;qx`0Y1D8}( zmM+8q2Dxoe(1`EWES)ckePmfKM9mr__qyey66&n*O3QK;$1Z3g0hJ2y+-)8|<^(1o zV5fE>@)U1W5L~&Vbirh0tSWb}ivq32io0`r=~J(x!bb0yJ8EiBjP!g7;I@nABf8=z z{%93OjO9{qN+&Ogkser!fL38@q&EszQ7S~l<{B7YOhCc&58Y+`HY8vf`pklOU^eKwf4+Io<5VVXv;bIB{=`6uE#_-^`7=;a zJ_rdJlU0~Ko)j)1Y-MTbgAYZ)cvLn9(yUS9m&A_f0a{+H)<1`RmgE}Q+G>|ammjg; z_O%yG#M%Mn0A{ECx7$`o-piJUfR62Kjh&J1N>j{U*X-J@`dJENVV>%auQ?9l=XD^? z*z+g>YX=Gtes$zn#nOghk%{tPet*Bapg*?M#_WVn?mOFL=ZZx$6MS@Vg}L!@b$WFI zpba04Ft+2h+%Dyd$;H(?4pkJ1pn8%bqOM3nN&SfDoCU9fKp|ijLfy?ad1m zz{1ChqoBL$RXtX+0>>`W_M&u9757Pe%pgME^K$!u`415t|4A0(SgA%%7!=__q zpP$=7H1+eD-4R6==#=c^_51gu5VG3-eD8`2@B%Nyw>sUC{W7YIeeB_o^29ghp`XK9 z%F2y)KW?=IyZmjPVMHia4hqgZW{D~vfQ003kqHor{FJK$;UP`I^E>}?fwRBJy@8s; zz5T+Yapeii4ZrL%ZSwGX=r=f;_J)}n5g#@`<^GB9v}%$PvJ?Kp_0xug*$7E7=(cd{j`9?o7+Qm5-`WvV zVD*XWZLqGy8&#kq&?crTL?y;sx|^O!*9VN(Q}H?<@NQ>#qx^DizesHhEqkW{!pN^* zEs?X1c7A>)GfZHd9c}-n@*Bio(R=4KcqIyd81NBBW*LLbD4Y`Hu)`Shf zbzgkPW`5`n*T=nJ@c}Q_yZki6B{ke4lkt`HIVMKPbc-tyMwp6GkA7=)`4q#syQAat zw=ZmS)1fk7MKy3fN>Lz&Ce6+QlAdVHqgoJU0A0{IP0*5$hexAzKHKu2DbEVMB9rSN z#z`h#FS&1o8F}n0hHcyVriLslD~m>u3+4}>swJ#=RWB(>2Izt zQ%xZibM)@i%9!HKMG=Pdb_MIF_LMSGg2uD1Jh~DVApUUMDyDbyk7Z-MNi} z;T3E>&l?!GvLERCoeMl?74rOz*Tc#QlBxI!;Jl`RU-E9FI_|sdu!3skY4@D>``G*9 z>;Sv7xnC{5H)V|fS^4*a?BSwe7n-0RZvcgq2N4G#fUdaP>JpT524HdCYMuQl-6#93 z`b$HRVSdijmq9ZTf=M#9@qo^KN5ZdjqC6EWCMW?EDwUO#UduRiDa;vG;9YRUdHF)N5UpKeWfE{D$DklXr-~MMN7RY`dR3s9IV~<5A|> zw--ih0@gn2^v}<3deD(~5_@ou$LtKakeV>Jhe_JHgO zfZJ%#lKXnQ8#_z0)fFFo5~+Nxw)T88Crm}-V~lrj%GB?*spv!)F!TxNx4;|YE0wxj z8*@wC>9m@izexkABnQEynE)WMeGSAX4hXOe(RQGXydxU#0eG}P-BakTNsyh$p9Ly_ISb~P0 zTt{amUIe^t069GE23&A~C#LD;8yV^8H>u}qHa+_bjS*6>ZhSxdlNe#K>4Cj>`0Exv zA+XbHM5^o@&D{Jd3LtvRdHqfRb}O8M7Y-aMBjnmtmimu6@KDItxW0%S*$YVcistkF z!0M+QS%C0OxkeTMER+zXmMDv>V_)jtX}GT~%UQ9bPb}dx1pE5Mo&XgAS97U&`RH== z6zGlxh=a8f>%5e#(owb4@XhkKYMrjkIxyz}6`g;%GqgU7jd*e8ph%>QYOiBCs`R6b z#TpT(#4}cd%f}HFyl3CEHv`2?kRXVtppd|cya2Rgu#ifk-~N(_U%qtv@oC?@MZyg4 z9w7mN7NB%d903&FyTo@5E49A)UsI^Wq9W=EIly$<^k@<4F{SoJ{Q1oAHMf%$p48$c8A{P}KNNU!#47w1{1nt%GMZ$Jx_ z72selJCxJMWxm#~$L2|ZsYz|+SDGOTXBCcspPiU9xmDZC`Wf7uXeY*eyfrA^Q3>De zc`n530O84E5|j)8{w2_)TNYoTmQ+;V;%pAC@G&Kcqr^+g7EcW}>>!#i~{RFV3MGp^} zYvlB!35CxaRD6MA>C)xPy`DQp%fvXNM@jwoRuv$!l>LlUo{z8jUTQsp1X`DPb^An3 z!^>wd@QiWuW!Yc)j~ZAf{XpM>Nbe?TjtuGo5bxZ-`{G@gF- z`ocgqy6i`wcjnItJ4Z(dz=Qy!#LVo$Cy^Z0rnjJ!;$#;%e%gM2NSS4@mF**fk6{ys zveeBhyuct&7ntu4V$kmmz~#i}0!!}SC>${NX0Fx)jY89xXT9WW=JR>|3(>ZaNcUg_ z#7qXYqwjR;j@k>F*d;Qa=$1 zfXCCZS_+~<>MwUafk8vX{1Bb9N0L%fq#c5-A5WK4uebBTz+6qSSnO~1_i?EDzsUEW zSB|+w7>PayQWdCYVtxX8HRwdjB@>*!h8rD8V-I^Q7pWS&@p%Ru11Ol4cNu>Tp8$Fu zkkx_PBxPno(juV2QB90f+s>6O9%sDPrpF{KQ;1ZYH71-(?WIZKbI=57x;P?~fj-7hTyzWFLc7~%oLE@3Xn>Ng99jcK)ZQKT^+Tq0@}Jf@s4jL z`IeF(S^^o6QlGov_4ILHy(_%SN>b$%UG#M~+{vLWd#F-A0{R#r$qIA>H8_AxLE9BQ zbq>b{#J&8-&$_fR;S?7=fDv3c<~1E-^i8YAxq=r|O-jYSTQfcOEn!_^s`%pmYkfJP zCjfuQ%D^;Lef`?J+guGGHWeihJqJkV+|F9pxHez;f1zP*MKuPEls;WpScG6uYuZoH z;XDKr^NhLPqF=sJgZ0)cro9n#;YALWEs}(mDjgM~UDm!f^T9Q-x2oyP>AO$W7 za3oQ|;HAqIX?Bg__I`dRK)2u(LJzCe{d-M8qvWT-v+xg@A33iiP1ZIOy zwh^+aSi!^Mme%f%IoeEdCVJEr6Q>fSwh+h)3ti(5ebOB=D-%t;Rc-l$LZQ4sK78@# z?UwyFnL@ zeQ%2s5s-S$715lOk#XyE>{SK+A7BnX5E3MByYBPSC;2Flc-MSM1q4b^xQ+}0GWDW4 zM$Gk(yhB^!Ogviwv)+gy5iRk+7H83|^4mNhr`YVq|oI1|- zUBVUF*qA-A!`-mD8&m5GBvwHV2Vo&Z3xXk29;na9s>|l28DO9Yv<$3E+lzB8ByevE zh+lx90GeITivNq}{QGc6hq;yHtKEJ=3l98l8+LMo?_Rh}jz45n!>L0|{%v`=C z_!A!~sEKKq3vaT~T%|)KjDXcFTmGP&qF%?(YKtxYjaya&@%oK55+Jq$x#C*5(Dt`A z!#PL+F-yd(uX|}?89){X8c7hmF#-P`QRRP*2yTJ()(FlhQRd8u(PcdBbBav03dt{stj)^!xi;SObCN+qY8y%zvIl{8ZSuk4az`2X&E!zCzC z0k3xQVaZAB7vPa8;8oss`Onj7d^jR+Wf$n!BF=J=PAW?2^iSAeHWxL?Ak$lr?x$>+G*# z^HKs85Mdqzi~^ubpzi?X9cg_a(#~vki!tk%Yf_j`0SKzMv`t4G5P<^%cy%{$cJI(m z?+<)vvNV90K$S+lAGDAl=%XkCWLtoK5sRJa&`t%9+ptjo@h`N5Bf3{x-crjXDVTta z0#m^`338Lk=9C)0`MTo0^Cbq5e684|(DzNa3G!b4G3X&6)y*!b`WL8B1~Fi%1hWd* zvq^CRAa6kG1Pias@e5Kde>K6U%_BQ0hGT&3feRM`s!J3sSI{!f<~^GS{weYFp*=Q! zeuFYs!zG(^;&KKgP7XR=f%4JQ*5St|0Pkuc$$I`t!F}<;!xt74Ev_~KwCllx583ZN z5E#DuA8QMn&l!K{25Q*e5y7@ zrjPKi!y3%&pP4?t0eWTd*oq4d5O~xhPsT(}=Zyx|jC>0O%Cw0I8_kq@%D!U`(ma;6 zeg~>8yJT&|I&4D=sXDYyP}hRkxiTaqBMi?s@>u)T67BK?DF|*9)RHvR*U#g4&^jNe zlC&DPekeEeoqYne`(mEq6$5s#{tDaVg5IO zn?L`s0t6Al?;r9W>(gz%wFaqbjw}p_00y4D(5*t|1ob--Jeg;5z|`8eqs$g_FoarY z-Ez-Bb>?I!W&SRtZ3rM1q4}rmM!1lxtQC?MiH5zo-Fc{~{Jf0Cp=fSzv%k^e;Z^1* z*4@c^w|2uNu-`!s@6gj#blkRZU>8jD+a2@kHM<>Zc0cWP2owJgUMkuNcxU-GAKB!o zVecE3g1oVr;1MB?ilarxT|qgYp&EQiPVNQho@JuknkoRqg)2SpZB@Uks(#mF`0@Qm z-ndqngPw#F$U`w}8_rQh{o!5oZO~KT-GbReI@|ZDI_7gk-L}7j?~pjyKIuHGGi4HoR9< z4MW8w+R-m!Q1u(U5GAb4w?V;g=_L5oqo3x~@61XEoF0hkKQQNz5jb19J4r-D#1oo% z!|EU+$$5bEvQE48&&|$yEdKn%VvFjhtwqU?e**+Imc+1{WNtjDB3W+1m=jIm0(Luq zuK?8z(SoW4Kde9wh1e%WkN!SJgq}4Day$UA8w7>T%>N(SzB`=i{{R0FsTAps7Nt~5 z$Vl0%p;9Rs*_D}blo?rRFIrZFvf@}7$)=Jrvf>y?CG!~JAcw>6@mBZu_x*jY>-+uh z*VT1jS9im4&g=bpKA(^EG<<{RP@usz*O&{4GaT&rFRZ?3AMq3L)3T2iE1n(yAR{X$ zE88ryoFA0I;W*?knA||qk3j)9JepI05s%?9zngMaIz1s+WuW#LDMaJ{`C@eYuT(Z%grt2?%TFgS~HRAcjs%QZcF zMfs$KU9-W108Dju(bryBrN&yAhjMD0eY>n|KQAe0X0%nSGDF_*@I)u7djQ=c(*P!6 z%rCs@cgxNOm`7)da$Z&~krYPvgtbS*k~A3<##CFSw5) zY8we2>eKVrPqoso)Gg$7)k90cNGn#-(aiMh(Z*9Eh>uPz>s%{7tnH zyCL~F6=>A5!s@<5CLE;#U7s{zM9yzNP-t2{Fd!N&P!krm#`Ru9O%%umAUhTJ0M1*& z01h;T;)I|ha9E9+T3xGQk}dZrUhlDfK3Ye&YhQ6J|JzU8l|v_0LMlsp##|r68BOR| z5~r$ZCdmDPG-PDM>|5UwYnADifbVS`v%630OQir#7*Uz|&OI{d=(~cS1ai1^a;`-5=ZP#r>pqcsyvXv?3AD0RW;!ggHoVJLoc|}oxVW?k{mx)p&Vq@I6-T()SU>cP0Vr%r z#Mc56fjNl%H{B%^rfhQ)sa`RYxC~Y|%X>yNcex_n{G}g99tq}&riE-DldXIeC*zSr z%E>xCVLQ0)-T_IlG}~%SQ$9ces^?wNP<*pIm;>Kx8Cg+FX0`DR7W7+#jhMTdpY;jPyo=^va5 zfyMfTUC5^l(QK~DjL$PpDGzB+EDch-G&`=d)mL_92$>}6*y;x9Sbf!;U9aqQ>S>zO z(JHIVgPT_*vF;a9`56&1rV)=WR<|3I61bhtFZm`v8LI*@%9h+SZ9&b{@mPH0ZGRD) z0(0adKW52ltA9x8uV3H9sQLO6cm9m)7~uVX%;p$W^r+W?Fm*z6``T+tYL<~UXL$5Z zd8cgw+xQ;VH0NKqltey=mX5&XCPQ{|(!STwqlC`X@J8DV^GQU+J1B^%>im=jIaGeD zX-JqUj(5eopo@AMv){0`^L{FP|A@PjNLowpvqD$-TJIfDg} zk2D4AnxsHDm-n$Z6!_<&a%A5ebf44H)02m!H>2`F7GwsYk5l3&*p zMRwQsxo8-UtNC}uX@49s2o<}8Y%cZIlLGbfX8v^~T#fvdy%zb}Tw6%?OW0Tgh7LOA zMl7+2YdEJ{w8=1P8W3O-Z|&9<#rLgXNHDoFhz zo=ZXr>j7xw0)W+WCm2P|aymNjHFWJf@MVxY6D`6PcUCOyNS@x3(if|F9tzh#ZB0R@ zm3%PiJVXk}>3JO-M$mPjlL_gm9t#73W5xv+>m+>yx}T0_(E zk*mJolUVJN z((AAH>^V2+8eH5bZn1T;m&j)ZU2KdQ_>iIfNjhvP&_J5}0yh<=)$CC%Ey~Od?-|e% zI(y8Vj)4v5jabIU3Nfo&`zNpxor#gCn1*g3V$l{an8>y~bB2XPaMrJzfE8pH-#hTu zRY4+>?S6s_@tg!#%K2snsQ^yR_Wua9RUGM6d^G&>gm~=Iut`?$;-9TMqpIzG+kQYw z#*Yt=_JEInk*64>Bg!W!CB@n-HiXO|mi&wwMRDyzf?7KokpUKdRJSf+13`Eab?W!r zZ1G%8X64fwpNY&C6Q7>SDO5C1vw2Y?;9>Si4E=c-Gj%q@)$_ra)bicd;H{?Z{Hs`In=FlEO=Hg z#Jfc5gZqwVk1ajx{}Sly5zgp{3vJaZ6QlP}Hp^}k+Z(t+73REGkb6G)iMb%riUO3bWIzDEc=KrnjV&Ij0S&dya@KV7$V-j;r|dKPv{^ z+GNht4vg+zaSI|7p`^kDC{Dg3qs7nUf-p-yX6Jx##Y3B-+C_LU;-Hg8?}`uiho{M{ zmSO($c3q}vRAS)H-f@LKQ+#n`6F>u8Vua@%h_xU*AJAO{oHkcUHO@uD#)f&^kNI^O zQ#RbP(ZS4h&Gh~+QpG;Y5_LolwzM01C>?samcZ|i4>YQqt-7@j1@lE7>qB9KSSj8E zegf|sWSs^>YPuioVLrTVlBuqNNWAe~>;s1@5LpLl#(3@}8EkcF!F{_b1yeDJCv{7Fu26%uZLV`->5sLXM7^edp_{<+L>#dDsvgB&3fui37y5_R58h#`p@y&j_DYn}IpfOt@NJ|! zuz?FRF?HL3O(!jXRPZI!I&jJA1ntBCXFA?(C8MS{F?V85iN@!71NrWMt)_5Y`xe6R z8b+>O`&wZl!hU9h<{qex0z$~|&q@M`&Q1g9hjA`6rpq3>-lwzy`7lVryWguY4?Wb(dz|gy&hy2x_`9VZ=A|9LwK>bF|3lP7VUK*6~YVui= z>XJ6rQscu1p!D6U;@|s8C2&&L@%$=ATSnx15FHzo^{)2TLcc+L@!}&?DMe`$(wO^2 z`W3T*xd;+Pm%GG~;q*AG%KgHfvv;^XKS${N5bxDh?TlKDC^7m`sG8rRvqEv#<(xs& z6WiI&LU>O)juN8m>EUAE#-M<|n3<&gYrk0((8fEwmJ(O8J4Yve=dxm zY|;%*o$Af2&b}{re_i3F6^VBxIFwd%D3tUyv1V=XjC%`S$c`$w;v0Q!9{c@jJsPaN z&a)Uikqd?3h~IN%cUI|A*OFtmq_58!ZcJ)f`n&R*E{l-b2nH>Te~s)~jd5x2Emmp5 z`;UMQ5#c`LURcL{t~wRbX0~3k{BDDMmW2mBtCxtKtQy*DHauxE+L$4_FMAcYX3_Px zXE29hQbaT25|Llu6}Y}2$Q42=jEzDomuyTc^fNfPoNppqJz!my`RaQIbjt!fQu&E? z`wnty(J`aKM_&F3)gACu4TFZsgj1q#h9?zL)i568_iWcFF--|&mD%&U7coEfiE!sV zb+p^q-hl$=E@sCvt+X6sUqa3XHnh|w(f-KRM+Ywzyp1*k0PAg18DnC4aPWXgBm`70 z#ztRK6X!cZAN*mHj4dk`6NHhsaJ=hYHd4pzM9zr5@3{VN2DO-rba617N>JX4fQ)R{ z6BqP>XT?=+80|1U)|`hJynxY9>F-K)p3uBt<~^?4*fC4^vji3VbZd(Fw3NnIqH^f2 z+LOMZ+tef-uD`Q56&Jh1tob`@qEv=oAA6l$8?uU;hg5KDeiM=sT6!Y#2Th~x$DLXN z`2K{Dx|Qk&x85~`5M>Gd`kM&8uH!$XwO!te`N2&SkR{?GAwEGn1F({qWbRx&9OsV~ zF?S)`QG^0Rgup&=n!{joZ5t(R6b%$cQH}c=+;2X5qSb%_;W|DDzxEqBMy(ZH8RiA^ zcAjZ!|kIo5X`N(^$lo6|4i-JzM5gYV6&MYs}{AGR9#H@r}d>oL#)=Y zo9H}>rijXwo}P|O#R1t3n>SQ<=ALlbF~^XkX@KzpL)z|SLip&)a^XTq5}jxb_Th&z z4bm#>YvHwN?Clk*d+PnaQjUPe#{5S2I-A&NOV}cYH~`PW0nxc0G$)wo%K-030S(m5 z-O}>zKN&FPLSP2Uh#7YkqvSz{Kg&VbRZ^zC8S`>TMSAVt?$~A4s0RrCne>`U2?411 zo$yq_fkB+3M%Mr$m(;al#<5`JdJH83jn5AZ;Vx|bmS57Ct!a1@UI?>styg?ekB zyW`%4v%H@dG%Ml88Y-Tf4Y2&9yiv9>^_j9HmAvIv zu|Jl#9X0YIg2B#@_v<>>KWUd_@kV-hpy`?Y>)HqrbfY)p3b?rWn)O_PYPF=-@%6lr zz3HWBWgU~Vj-wig+M55;eBQy|f6jd$AKv|mQL8_t4jD;*2$BE#CEGkd^8f3Xt*S_K z#V0u*IR0lsSmeHJ*|K&CjnqaYw53~C^1%ld`iPthNDd(XYHNZTP*2oxy4!K&FDE=9 z7FF}MXAJzM{QGeHd#}jtw_W5Nj`gD*Li=;6TOTmhv*RQZu1qkjaD)Pq4a;Pm@XTL) zP2KNl(?vz{F*jYnq|w7uNHj$^^t`@Z6Xerh8Rz2koSoC*H9aT9LoRi%BXrt;xvQnq zPWR}85-c>`Bg~UR!RsS^sXT?BVh}iOA$2ZbYxVy| z^8A&m*Il0+t=zeQwBG0U8AP@JtNpCZ0EBi~m(A-7qGVaNJvB-{#9FoPvXQFU1O*44 zwU4s+roIR-?@#IiI{D{ne6vW%B^_t6RyyAkXPDx7%w2&je=cQ6Zz0|$C^$?K`Zj;_ zK|9E=;Fc_O{G3z+G-MLW%3pcXA9rq|b!1v|108z8A#V9`X)n#A^WPP3KqK_iDL0aO zB-gZJs>5!U9CUJCiW(bZ{HOt^mr7H10LS?kE|XqJca%C#%=>;R9eSNBu8uDWWl^Ox z_AgS*%@!ZD6st_WX8Mvv>;;A6V;*}Im>QrF60)+3To&Ih@4P@&bfX;ct4pFDiK$&s z%Y0Q!J(Ql^Xp0z176?W#%A8;3Ik8TZi;dN8NpGb!^L0Kuy?O>|bNH>^MWcIn+##z? z`J}iSFhBCC+|*6;)x< zr09A`RCOgzLOQ*Pp9|+TkE?qoeZg~PRS1BCwa_U*FAZ~o+`7~H0UzY?^x@ZFj?H~{ z1TDE;c2;A{Ey#9oA@(~Xke5G`pzY*EEC45A?B(z5{j{k|5&i3R=X)AvFgc$cv2i0}dopTWk7?RcyD z-)w=Ne_qm0N#OG@6-;Ur!G(fm)Q(IuiOeaM4&bISIwFKk12MxEIR~pPqzLOdThiv=(h?HU zO)vS-0D_Q67u95M85cD8z;y~<4X-{;GxZNKUCB%98BHnqkIufl3490#m)e&exQsNe zK~p1; zfEZ|ieynb}4moWCCUGTPvIy?ZF1mG#FdcxnaW%bn?;fZNme!L?7=(N2ukP83|Z#3R+Ykd5_nfOArk60ao}g3&)G z(pER^-fU~ znR$hF?m+^7(!@!gb__5maN`z-1E>RdbgWPm~haO`GzCmwFR`)I)-#KbQnY4zjszOm}o=gxgR zkqd2?@eV!u*ee~8XHc9-H4J(UxEp!;wTbSjSNexUNC2Hhh#|k3x(u1U6)_;cXt)J% zF@e9WdQ$0s%yE$Tnvtz_ffQ4uqHpGKm$fPjE&tRz1d z#hJY|Ukx^jPDcE20`jLUF_Z|j+3pT+hF_iavZ{tMt{@ks8~>`b$u~eUt%ByU>}(xR zf#jiIW{k5SeUPPn3IPIRSdaitUERo*NgTuDb~2?qc7nkaIUjs10l^!|{{E;%lGAYy zt!lIMIlVWUctJ5sX)5X#G)XJry5Hwb(TF(#>AXgz?zt2Ei`e+Z!Yt3zG8HUzVqYH( zQS(jk|GNJcm87tto!;-Hk>~udk1+#9f~2)R`mrT8TGAz-R^^;dMz#s8b`T{4+gwV5 zH)t)SwG6JCmmbgq0|K7+Yx6vRH2Rr#i!^o-i!AT~2Ytn(kBWB|_ag$r`|`xwQ)GQz z+5@PzYy%-O?mPCVi#VO;7|3@OSeUYI$C?6>_2l5M8+=}#8jzhFSElb34~llWx9pm_ zK+vst;0|~MYJ`0laZ#6^DH~QovYJg?ioE&J&KkZX0$vW#v@H z@*Gi$wViphS~);B|2!NQ+S;4BPF=TSvS;h->yudZ>Zxu!t&X2Gtyqh$rPk%*#n(c= zsE$BHepsD3Q~I(X1niy06R29)X0Qn1-M~OHBLaIp%B$^pzNB%3?ezZN#Zew$oexAulznvLWz&b6D&BMVm-#ehsyL|XSq~Qa-VIsKNj1a0E z*_yA+gPj(}l@5ibH}F1x_^=32v1f>1kz-!ClJ6It?4hg~pJIke&|!~w^A!5Gbhd#) zT!25vrXqVzWwyM7l)AdkkGc7lK_oFy!q-sl_41T`V^96NcWmOO1vUXgNyoRn5H=I7 z99`Of&DwiHR09Xz5183EUv%02V>2BHve%~7upjw-@aa3RA8KeAYt-l zb?FxlT;$TDg_Zxn!E)28R%Y$Jy!GM6;tBp2F&sm1!*gHS=vz38iuAWMZX$Txai>uZ zxeRQ*IgCJ-k(}8nwKWk5DN@fO6HRPtR>bI?(w$ z2g^{}hL_%V$s5c`H5M0Iy>vpc104kbPXP~-f|i9rpC<=NBgycxs`)m9A;_H@5G;?$m|N5ODmXZuV= zNomm2=N^y-5cVzh6Gu4y+5qZ2^Z!F+d(rKJ(+=P~L>f6-OCS>=-}&zB*GM<$=FFv! zcqy>6vds7YvO`5(8XnB2=uv|B@+Z#gy+$zw>GedK* zZ{jvbWrmK=je#MJFZEm7vlbl+{Mm`qr@LXol-{}jEBd?Vb-mX=QcSx%lnjEeb(RNC zCbRh~IU-i+Xo!!`-h8(wRGmi=1W`^nc3gYWyCm(BPFoXx*|_pc>f#(!zW-TC_i#sM zL}}3~RP6C8Dw3rUanqKK%}P^>UdkOuP5!|^+PM}Sv+-~U^Zs-Lk{*LBbGrJA{(Nusocnh5%G!?mCPT}49IQ~9z|;@Ag_n9gSGZen z&@&rICv}{Y|IerGEkR5g?sv5lvo;#`U~v$PU9JvWj<_U1k*Yl`c)9(y+1E1=qVPAI zR$&opIJ0w(Q2$J7q8MO`ZIn`usxh~lDc_IuOd55Y^r zAcIH0X0i@FGWMf*P3CvF-sNuD8L@Na5?iH*L-^DH0OE+^AIJbDh*z?jpI@hPC;TI< z6X`poEIc+p|9iJlfVuW{Bv)B29-!sE;Q4>6>T@)LP8E|v-cbb(>V`Pl2Mo` z^~Sosbfii#o_8E+Is z$@V*JjTGRo(-`S4jQ%_n6baR0UDvT(+yooFw`^odjIq-#P=)`NM!jq}FaoBKBXtDxSu?u|f0*D5+PJ62S5333ZcV-|N={#tmp;FsKp)e7AIhb*2Gz1P?CeF+k){pH#QOWdXt7gGevsv?ghI zCvlaa08{mX;kI**?En;rs6W%*p2=x=G8CG)Nq;84=M2%lu~usm-h2cAU_4?S$hd!G ztI2{+SpU(|`BmoaeRjN@b7f{rvQP)OQleOIg=P>kgOg)>uw87tk9NOwY4_WqlX>lA z_X3@Ve;=-!H-|*m^I{!vy{ zN1iK1=!IC{N4V=T(PBuj)AVkhf(0L(Z1aOCO!TfDar?cpYYvASro@X}#Ua7JfPHi( zlbZ3GoJ@d~;NNf|!JUe2Mi8u2WX!twn=S;fPS~DkaFXz0-;bIs|88LqPv$svgoP0>%nRzu%f%xohRV1&W1iBfd290kXTQ z85#zlk+{;S;wSN9;FDOwU+J@Z?K0lq_x5cPk#*>PpfAXOK*Hc4JJ#0iPt?(-g{Wqk zt~slBIP~1Zap)zGXeWSmH$vXO4sr}wqOk&SgH4AT`ZDUQL)stDENr>-;4n*J@@v<( zF(CrZ9j^5P0s6;HMaZ!kYNPL#_J&)oH1s*V>L~f#DpT5W?GsjRYWw!Bt0Az*G3AtL zK@K`0OodJX1+ij&oh5NOQq6Gu0)XO zL*{_PPIF{hMzoY2EyhBuCBLDvLd-RBkG|p{fzl!tIS>F_+_frUlc7b@Pl;<(fc99; z@w?b`Cd6l0Pd8F@*|RW}wT{6U7kA$WT~GsL=mhC*MLXZF$Uek4E77 zGWemY>Y&|?vb)y%^XJc`de>jy2-7$4%Ff=p80F8#1RGZwS1g<_7UJi!nH_`I|=^^8KNvbwi)#nbSGkl=2|V=c#=U!ByQ_kT!@k znsnlL1IA5xb#1mTMq>n$Jd)dTCMe`>qpg=tG*uG+lh6-9^9ddTDrQ9f7p1m=!2Deo z=yMg_MPme8bKiOa0o}`U5C(ev_$TW4wCfH;@;ygD9HcG*Bc{`TBMX>kIGN#sVmI4a zspQyeQ`kUfo1IeZwaX%B6MBzD9tAo&z8e$Sp2ay%fV%Hq2gfN^@MUe$*D^DMR;+-u z2Q59+NybAqN=hK}>zwj!vtEY?|HBZlScj!q=1-JE)wpx`7`Q$`5(C&EuJx)kmFnZ$ zR?0W+RGY#La8WVUa7fd47PlQ>0JPNrzVP4L$Xay0{oC&WDl4yarWme=S)+V+^%QYQ z^l>h{(jQ8ztk^ZSebGm)LwA;T_mJu1eQi?M1xiSsrGjdDUZ$siGkhQS=AHcm5nlFv z`-Ve6|C>z(nXwF%(D6R%-k*VjGO4V^n^Nydrxs3toW4}$AFM={>(6yA{Z`j#QSxEKes^Ad-cl)?C3bc!4l*`~4g5Z+8 zTQ!q z_(&|?Qj|X@u(O@?F^|yb8or^mmtg;2fWyHuKbH|9V$CV!(|9p(2t7MKk9e~bBL}f@ zSsidQ9rl2w4>gEwq-NTZ8~0KgonnWf$aXh*1q2Wx?VpsNmt*%Y9Lpr57fs5x-@M{P zTgYwBsR6x@yrAp%b1O#Hqqrl=BUS4NuHFbaXDgFRS)MvuA_Dg}vdxw@mkt8iBs8gn z7GD|Szq3dZMKe9GpcrV&;U;p@z;;T=$ix}GRly&$Ekf}?@dn|L^VO4+@K-+K<&f88^``YCC|KW)bB*EiY0<2Ljqu^wN|X9ZsR0uqsZ z>r2=0y-Fwy#S(@m(YO=qcnU_|uakA{f82ADWa@F?&*0@Auxu5)F)PItIdlF{zM3J#0a$k-X`XAjZHkKg1bUF zykFI>BGQipx}6vetjvc)ZktuG0L=3Zi`#~|Zq74A#zF7bXOOmR>_jpfXeLFY-pYU0 zezeeLr(&07bKU4yu|QM@7+dx`yJ%@I#1c$|rgVCKsa7qXGT4K20urBP;v|W2a^3u< zuErGYJ)^s>5DgdzAf9RV3QSVi6nUZ)mZaOD(?QyR)rj0DQOV6y=UHde@|N7rMRF`0 z4_@*d>%h!0P1qI*D7bwy-!Q$JNVpzc=5{Q@_Pdskh?b7cf^eC$$f10vU!h>CGGewP_qqc(VxXyxemdR*28$ zBWR%euVv)LPDttIs5yoSEMn8C^iZ;K6gMaDty$n*J6#zfyb2Rb3@_Flsy6yOa6m!R zwHr|a6u&6K-R{{=7RG&MeT%7wNMBfFq}$yPK89zAs^_Z1n7CT(-F~V;U$hW+TEI*s zAn!&SSI1W$_Nd&!eFmc?^bmmi9z1vu5KKq^2=+W6y69{6!=K-0W)zbS6gKFXX! zOi#fww3;t1_EmO7hO)A#5znC7p0OU_x$I@M_hoQXWBg>({Eo%(xjbRe11~F zYb?A2*Tiu(=W~sY3m;q7E_h|7{GryaIF^(DV?O#hnDB9Sh_JMGs3O+ii~}lRV<)08 zM*Q3Bk8?-Bit>l9z(}HdF6K_lPPt${2Hu>F`FA3~vp@rgwYcOQ{q~&mz$yr1SBXj9 z;`*@$`v;Emq#%d~=x%XtPfTB{(#_v=NaV$zbcA0VzP~sEnDx{+ee#D9lgg8;wa>Aq z_}{(R>jv@0Y5@TmjUBjGFjU;Yj@PE_DyT}Oopn0!7Ah0*X)+oekD;#W7@0F;Hk!%B zFDM~o!^B0^Klb~#EaBgh>mI4!@%K%&8T(I|OEyn`W9uSJC4erQPHcqN@d07DK)~!< zY*(*7WamUdgkm9m1?k(f8|$TnbLBnhFYI=BIu{fy(j(%Z(Yo}`v1Y(3O<~mT94E?L}*krhKe(hQvN5#}w z4>itp))sB}t51JbBH{1<`$F`(ttI~-e>v+AjO~_p%Bt#aQ|Txkcn0uz+Ge*(;uSgb z#2Jf+$K)AS&XCXX;h{#pog~N;kW+6mM9VLlq>bOklt-uw(nTpkjuy34OROHx!??nF z+0Q%z%&fqof`&c#F(X%g4)r?w+ zI}SNEZW%Uzd8&NGXPYN#YJ*b&o?qT1(<1g;YlhS@2Lx!4Kj%u@2(2=cxuR6fC(J0h%}1pdxao#OpDV`vOax8!prE2^VH86xt|3_hD3uB`c9oC_ua+OxxDH)- zH?h#V#&mP^TCN+|R3~7W(P*3Kx}ew2n+g96l%#0t0!GLz?qK@iwUIQf0m$0)U;{`! zND5#2$cZyZfr{fqP|#STt&B5Y97wEoa=xAohK{R*1~dAlv9S94m)FWYt*xxUF9?je zR+b}FuH0pDD?GEr%!>G@8Vq3OK1?qx{KgaQ%2p3~CU9%UQW6ZeNHz)ZmKiH-w3Q1^ z^o&q>ll)@sh7B5+ICSX5{%FSdH}qZaG5Rs=O?|7REJnfFQ)%5ce;PByOJ4bpY*|i} z+p0qph|0k*;6ArLmM8RAEr)rEF!fq&0l5r{c|IL(B^tna*Y9VZ(9a2k>{T!w<8QaY zO9H&SwGTF&_6iRxtM~lvz!tEX^ZD^@p^w0r@K2i{j0Oo^e?7~2gK5A`1Za-1zoS*I zUa(j_zY8`I_4!1BETP}4VFST5p6#uawk2w_jeUIKsvJ6i3SvejTI>Tc=)3xT_pJC0 zx)_28fy)jT2hu)KL_yq%VKkR-PPg^7ln-YEc*sq9g0npv==t5W%Xw1(|~mfqvmmuo%o zOgnpr%+)Y*p>g>igaIw&iQuCdcf+EbQlH=?f{yQ)<}}~%q3!=g$%&b#@c$-4{OPy$ zWqmK4-w5#EkgwggsvQ}kXrR_sVMorG2XCk==W#s|UVLxmvNmc4iK4YvDy{r#ma2D; zc~AwPep>3&UokJ)qm4ZDQyggOplm6%N&6-~Ku0DJfreBZgJox6z+NNzv#8la75GKSdsTIG4#tVS!RLN@0DvtM`3#sZNoj5^8;t<%7wNmr+i) zNx`7QadxT~kZ=F}{A;@$G4(vP2Y&8A?cix>z-aqKBY=vM4_OO=xw;8Ex<3UvE>37w zESuE*KSE0Y6)l|e0ZyAuA_+~*IgOSiTa&Vb=k-1bY=4`v%=@WSZ>dd72c+zPI;bQ} z6>2#7&yJr@_5}kgq6Ig*`8sl`Q%i8_!04x|*nfFqeYM)~=$5Y0BEO7w?;|Zko&e2U z9|w`U%vQk-`{#=pflw;2mkn))2CJ0AB=BA|6^~T91}Q) zz$3=zkR>bj;9Z4wf<3tU^v(g2_<-;#y7*n7Q}_s$kPnyL`gsQImq?I0S_x?Q4b4DI z;4_j6yDM)>zQVRW?#pIsEmdWJzGv++JV3b0M2gkJxA0fN~V^;^9guNp) zkLT(iH=fu(K~3hr4V|Hu*arr_57^XDP3~uPaGyyv)8ZTuynsfr=Q4mrXo&g@KQ?kJ z9dwvDFFJ|4;APz=)>*#6I4Oj0rOdb;1ZjqB$ z0U|(hb_3KVSu27``~yXiTYkAb>RqeVB6+rBP!)E;{v14~|D|=|v$FxGa}hmTI(WV>|1U`ZujRO4@C+jg4f% zg7Ge*Pcuap8Eji=oWD#8P#6*Hsv1I8!JPIP5mY+td-uA1JLw;Y&KI8@bUFZ+F{~hb z3oOWh%~64j9hV_=v#ZtPj=zm0uA+&LyPzM2kOpEhjV)MQug$B3Xswv>Opm*T0V#5Y zZGvsJQKv7gvzS}p7IFZ&4V@oX<)AE;W{48CbLA40TZ+TsDV%>|t2Enq^?2x&+!{v1 zqVC)Q;zNl>;BV5kS+u&?1&ubrljnS#wi@1MO5+=XVbPGU9+OzTR6g}&wAe&99!vpAmX6TwviY6iklzy85$IVsWOMH;IY+4hFRD>FEw0R61r1irCbShVhGGEB zBq4LaMI!Je^`%V0jREn;Us#(NyT8QWxXVnV(gLK&!9uIsYPy_Ia{EKKK01VnA9p07 z_Ciu5$3RGRf6yMQwN<5Gdb0V`$h?MmkYVVSZtWW%Z6EfbKHw@0^8TRArOmUv-|1cw z20#G;AgTl+qkhR(4Wz}?RfImC(2|2=x5P&T_69;a2s?XfTou{-r{SZI7I~&x>hE2( zKItS%3Hk)COQ=Ho~>w`k|IhjO2 zhscI4T5tkW`55)>$4Z7A35S1%*%MI<`MZ+=f3j9CMqrA&|8aB1<-A>Tf-7`=M71$QM9Ujgyh`C*$MIzX3Y!7yEF_*4k; zZb59*#f#0^oE!GEv%VWG;waR0LT!a`_o(kqPs$_+PzIO3aiH=@HM4$){nZxMj^t*E z1+%8pX`D9Rsg)xS#>2HJ76T!tV2*-^28qQhbwkM3n}0*YwnMVOu$N|16J4&bkv?_` z2-TMdTIc1~TUCx7+1h!rH8vb{Rw_3h?d<*#OPZU?@9y!K4H?Dr@qy^rUK~EM2N~zS zDHDgVU1JqI{1}rUeh`?)_CV{Sdpfjs?b^IE0mc-# zFV9p4i$R7dDg2;1W7GW#GnTk&cEk7^BIv=b<~= z93+mgCpGl#f_j&C$<`KA=sA|%tSF+j1s8-&EpRIyLB5Q%*&jnole^{J*g4RcCQ)2q z-8U0KVa{2?hoTDRuc2gG&OBd8JYhlpr~N(crs6>V^(Ud+I>>hcduLS-hKOM z2;uF>IIV2_^`qKnd>{k8^|l0k6}MM#`7f^x<+fpMW|VM);6Hbgjo2SOLEAA?<);TX z|AOSg)q77x^~0edmkj13VJ&&nF9i>P-5EXkdvvl!{xI3Y;c%rPOg5m%A+M1C$=`nt z%XbL~;_Du~t!RJ>Z+a53T>=3u8Opd^+!{NxBMJl+o*v70Ya!Nb&C3*`3Y*N2J(@gO zLY8xk-vZ{MCf)36%1#v-nXcwl=R7t*SlAXa_$TBE<<0(y@RGk@jrr%Lljr05t*B)JmOF;pHjn|-$pN!K^Buue>%y<6wgbR+JYXJ!YcGTn*xAtjl`Kz+> zKK~~zE9WWw%<$y2Zi%UX+jGRP=~2FOn*C-aL1&d1qDX7-6ze(g3R10mNld3UGEFj} zZ)bR9csK&V*ar9}GLrj{8s^9ROv-Y_+<=xy2H67;a{SfIx%`1{rn~W{2ot7U>oX&j zNxP?8F*X>c=utzeD?C$83vG{~A6WuOlAse!ekbbzxvQwSO?yQ8d&K_!GgdIbK{bKT zs?k>0RdPXo_9aL@#99e4ue&t5qNB8IV{E}942>=(7{^LVNd4oU)N!Pd@d66dX`n09 zSui&LaE_Yh2cMy{N*VUfn4L_YgJqY$?o=6IB3eGd{9kQS`k(h`m_mqcfDa(Q58p^q zei&K?w9egjc;?E^LLQ5lc##)h?Q)6T*)Pl2I~T0fXVg-A246)&AOwA4P3rmBJ5Ldt zdCV{fz!&jn_GTNp(kr=%ka>~6C|K{6zW*Uttxf=eB7~gb&uxUuUlfeFTw5L#L+`LF zg_=zXX?zXULWrs7V$!eLz1(4sl#lwO4&wCS=Cc7q#PT~=njSpRKrA4eb>`Cop9Xa<8ctlGxNQRF z3LjT?1@u8{laXx1cghLP1cuw^d8$ARpoWmJrnPdXw-qG^{S7eFf4DVm7Y*LtR>*5p zcCWS$ZU=&fL5;9NdZnkGBz?}Bzn1SJ^W~Dbxl|7IXpWN@RbVGWMw?qNze@`z1CtTD zsAiOeFW4}8C&EbF~+?A>C zl_r|a(Qy#LTZ>4MtRPwhO!OXt2;TGc<+^Za5SovT&~uIZZd<9%vgXhYs`*47(YTs8qmH1pfUH8~ z^*@2-3jWd*V1G5y(Js2R!?W~<$PvWkcyXrVONSn%>r^~-cV(9oHRK<+f9@SH$=NxT z!Y%KeXTXJ$Z*B?+8-M$rn~m{iW`Q2|Ujxa!7*ybe(oWRT=%_KB_M$*-2-)vz@njia z3zK$2UToTier- z^w4NoiRUg!Db)^K)dlYnJJe+S5A-aEA(6Er=(u^l#&>3D)w$_?1C zI6`C}k^El1eCf*lv!NJEB=G2=7lude&yN%eWa1%u9V?C>#s&vbsA~BZr}tiAqtc^K zqwiH*uYr&%Tnuyi*`z>IIU>#qI%V2D$m4Ik4Y1VP0cpDH#kdZKcF&S?0MlMZ=zq(` z5(NKCd*GmwGu-^7Z^Cwq7bUb@!{4%Sw2QeSu$-`ejT@-!#-!D_{_>mg-HM6@&kT(; zyKZK!pk8UnN!nsxXzCuZVU(CFi8K@!xeheLo>OsE5c|mc&*6IjxJQI(;}3k``r2eG zlO3T`5f-$HF+tymK?oS2h5i93+tCQQuJ5HLB%L_(O>bmPJ?m`ks7Zo8CNTCA+2O+8 zHY6eA{Z1Mcd~lGiD_MK*=edLVjt7-dEy@cW-PC8nZ-b?d?)>Pe=$v*{spH=u-45$K-SMoCA=c1Ly zH}WPwOap`~prvs&D*;2&U7-&hG{re)$DB7Iv-F?rn46tsnKyRp-k)37@%y@AH$ok< zY^&!Gop{>D=Ae<#-}CISd!2anhC5}TtpwVI=}UeQT9@Ga60DNw(wuZw9K558lylFh z8P8fxf8|0$kMPSmWVJ!US^bL3)qLR!nZLH8>R&vwaeAiAv&d!<*0&a21;I**`ZBqXR&xP8hQRYMoh z5=j=~XJaU-Ni6x)!Tk zX5T$P7|cpk@vfA}ulF^76_^383E=w#mFrk&N&-@6$JdHs$F|+&S+-kQz0|atQ8F)c zHDm!YN2AO{))1yyyeElMXUsT=j76-pVaMaZ9PG-BVkWQkK_15sNM!y?wU~7aItpbH zZY&M6Hz;V`q5_*GHmM=A_=nA*w4CdWJrD?|ihUWkq(_Iac>@M&$ds`J`w|)>b1_>p zL_t?*wMn)SkAAk^&+ZxWWwjjg2I#JZZkiyoWZtg*?0pz7TfNw=mY{2QA9aCd5DK;I z&RnB2z;}v9wKeMPs35PPi_0M0O6ar_Jgd?rudqKhs)nQaGJ|k%6#-I5IRp(1?_3F& z1j9>t-omA7?C7cjrv1J^L<9ohIa~ z8R}yNM_5gUDAZ=2Pf#y#!!wqqNTu3l*)-)JucMl6TdCubt~XL|VN+`Ow1vY1cPJp4 zE?F#!u)7`Rw%TOjM=8c5^=HezI%oiyqY7;2_Pl1$7;{O2-Wyz=k*uq`HMefZXhHoq z#2~+-{j-J)ZzUvUz%Rdyu-!5)9w!HWN$uO3C|I}SDzOO-sZ2GJ(EsQ#dnfG>NfTkpb zhvS#M`r4HExjNxFwVlE3CG<;Jtfrcbc;$l{n&iw3&Ebme@So~Yw#HWyc_{uTXULb@fJt3XZW}HB)iM31U*n`L(+DB45>n(#L#g#fN zeB@H`EG$~Xt4I`TBgewHxNft0^H;TVDIE;4#$`2#EcqU~VWMy}n`-)YZnk5tErMP| zghwC-psFqud2!H0Ro8K$-+uS=XRKTv#gx_#&Yb3wMtBCP!Zf#m=F8}d2by2LjrjQs zx{k0I`M;Tj=VPnw^5d^?aJyAm$7AJWy=w=tY=+8&21*cu9Ee?YpZt~MHMPLtv_n7j zMbii7`Ag@{Ktw&5BMT?6%3RM}^6U*wyO9Gi-xmeAbB>~<)|^gWbCIUEePaQumwcfn zM{^}$>c3hkn;N~2tp?!Abkz#7{~rtuQ0)|AA3a}P#Zj^IWT^Q&m!3`+Qccbg3^tE( z+`DrD(=GQTRu=?PS{!a3GQ3zmJ+RIP;sRWy-8TCxssNqADRTwRK;W*J1mI$UB_*|w z2NRu1<@8+5S7!ME*N&-KU%AckyV&g?v6-*1k6EW3A%60$==+uz9c>q%vYTC#Zwxs4 zG(TvQbmQ%Ct3jTOY}oE$oK-PUtId%<=1-YP}P<2VtEF!{k0x3_@`-{f;7 zm$ly+Wb;3?woP?$*=E}C28Eu?9xuh&kE^Y|P2E2*f{SO&?)}?$X=8H3(kI;#?}w$U z+%UOy>4eQfVa0gqc59I}J(DhPuP>9wN{MqsG@C_Gk@lwhZa!&Go;;~Kq~2pibz8G> zi`6yZOLOhRA=8t!Es@i?-WhvS4f?ryDmcSWPIjCr=J265?)fy5r*-{vW247c8g?C$ zo4PJU)Fh8Zb{vtBk=cr9aQ7;Y4PWN?2!mf7j@;F!&etw?xMn<$k3WE4dm=UBNL#R& zQPr(&`9A}kd38)pBYQerj55|RhSoBOBd12mArW^#Jd-OZ7McxxoUC0n zl@%2P*6+}o^)V~u)Jt`UM`dbyY^$Hh*xK7i)cLTG@PlmJ%FZ~J{)6o_0F#IYu2>b{;Da^4(wtvB zilMqqU@~nS9At{iQHb~N-)|KTl-R_?1S_XR#KdIc!XgavCqCY8fgv4?j$yuA%9OiC zYB+1nXCz_m>02zlMOkZ%cf~^1%WF*JRxVvwJ^hW}?C8;ZxlSc=k`D*owP5xYF78Of z*!!{I*h!P|T`h|rz@Ox)97P-nC29KHkDasXb5kmF)(yj7woyl-W*dB^ipwX4$5MXG z|iB~zf2Ri4lUs21>%6jqaS*dhG5teS< z)!MzoH=g)#7JmqOo$-HYdk?TE?{0gPs8KO$5{U&1nn)4F#-Q|KNpz5+6p$OuT2 zGExRGu>`w-!cZ*~L5k901gs!RlPYyoq%(uc&;|$Y`VD%%FXx``JpcRLd*|^ zDP5={qP;saJG&PsM||sslH1RYgYP?n5g7B;5VKJ!dEMOXpzU6E-Eix3jbWp^$;l6I zRUy&h7>XfxZZRwJ6P&g#fAxwYXl-rn?d=Vh*P<6GA_)BSWum#+@IBo$ut7yersQ-c zmcZH#8}#^vjV&2xX-PRbCM^2Eu!VqhYA`L*2SV>Qt)h`#s(12@OkaF;bMw853cZXg zr?d{e3{usjGBH7eetB0)7;Z-*D9vh1FZH6Y!o+C?Dwix37vG%mq_w28u=>S>fGJ9w zSuoCCLGzFF*#Ja-9am*@wx7UTKex|MH>$)&Ml-VESzc3YMus6y84BOh?G;AJLRTy& zHPW=ednma<*-%+oSw0Kn%&dZSk`s4@4i2+L)P{ zWuo(QMluIF?#|Os&o5kuldo*jpLC4xe1`tZe>F8Xm-l@^KjCnXWJ}h5T%-wdc{{So zk%qA_aA$2>n^T+2NElWz5czU93)H+(0mO%`nP>kNa?b0Lt=OI9N2asLDY+^S3EF?U zvRqR?4-Q_Bic)_Ue{FF6FLUfTO<6b(r03c@IqjER@EWz()~;O}`%KPE>QAwf7cX9% z{-_QrEi=<7Dk_RP{dcJ+@+0%M(+AqrJNj!~l#UNSEr1L>Ha|Z<_7y91-w|my*l|O{ zV34=up#o?7SUK3+*VfkBT=vp{zeD69Ny*8P_tQ$_gD0?U;B@q^Cy!v#P3V%BWo~8 zb1YbMpPEDiOh9?yj)d9@(peo~i+?>nGEQG(Y$uw|`u|4dbLmC*&?I+b2fGGdV5p>H zYknP9`=#hLb2GEr>gwC+>GCMCsRycqC%f5!6&t%VsJ5X29XfC0>|1~E;Q>T`hNh-W z7Me@+EeB5oYngIo9wO_?1~$?)W<>==s+qnT&fWDRpR1KZLDv_u)g|ClmQN zcoQE!w9tf*wd^yD&A`LK%b4MhEoKW)> zo$&@L-;apM>n9bBcJ=vqr=BVl3ri#J!sX?!v4wSFD25Dp9c$&}6i%hB=x#ohxq$La z<_8{zGZVo9RGvxM+4~Xhy3OaIsA(OB7zx7>BF!thWttW9o;cDhQ6s(vnsQ>EZr{Eg zGJ~%jnG5i_b4g^oDeR{5wIgY?BrX4rm)BLWDrHW_INlrxnQMlF1zWkUs_JG7A*&nP!%}vv70)Yd`NjYup8~qThUsegw z$`Cymn5`OO0J!ULN`| zxvENd-r~De(|_uo{`Kcqznjhb_K7b4L*e#coSX)<*&1)r;xBxjMkmpJmMuk3*oHL*_Nja64XIr9VgzVDUQ zM7s8#Jru6933=YD3#6o^UY3_eJmEk#5Q-T3!2K(7<~9X+QIP>f`vhq5e2 z)6~>7+Ee%$PG=GLkpcDfwf#iLa)cG&bS?|(E$Sopqs7-AT0H5?&~HBFw}1bQ!qMj& zd*MU!(F~wZ{0DM{N98VT#)w@{bzJ_5j+Ym=GlY+~!$9y{(~4c=i7f1Q+Zp_x1n+T9 zj(WTBGjo}QW@dc4U{#B$=}#4vm#RuQi;>!$n4BzUJ2mc3d8FcGj-~8@|Cfs^AfgvJ z7lCblJh^dD68w{9XiKS{9D+L3czY?~J^TGVUK=HFnRIcQ{L^XDWK zPJ)l;G!^<@l$USOY(|*ED;PjzKN(Rpwrt^|Md4kf464o{HXI*R@T;MXvx>%52i;(# zx|9k>3I-DI-hH8_AAk4mZY(5)l8}f92it~83{RxXf@h}11(QMUP!TaOm0h+ha@#J; zgr}xrl$)Uit^Q$3Mn+9pE*9jZTMf5tgB2{=%U7?6^HI}vFo8m88!p1s)RRGBd1)`+ zcrX*NLejeLmvh^hef{2D_UEwm3{D8oVfp1`Kz8qe0S}f$c<9{(n{#BlAMFMomQ-dm z=AvPCN$TN&kUDWNrXF3_m8ey0_P|nROI1}>2xXEZ7{?;JiBdL|OCkz329M#pO+6DV z&YK52$S`CcemavSJS?vMN{)D~Cgl?!{+3m=p4CA*iwvQIt#H{mqK5QdjF7DU;Bd3E z&kfgRfO39gudKX_0laEnm#nL+>p^>lB-#p3(FmJJ=A^T^BF6(L-3~-Rwgu0hKX1Zc zsF&SIO|57-Ho_5a+uhLS-}Ogf#bBD>&^?NZa9?V9zg)X!&61pDU28Qptr{B}mr6)v zV~iikb#!!~Ij|0*3(tngGFU_uy{(B0fF(INEaju*bP0=iH;qi`CME!8{q}a* zh|1_iVYhJFhHDQozrd(v)4FL#kM;oDr~~XXgkCK5l;J-FBQPNzW1o*QP^lwJxGF?8 zk?SHz@5Zify|`VV!@Q+W&TU-j>$zRH;FcfY?)3C@HBL~becf8d#8_8nd`>n>MD+q1 zAP`iW|0IKDe$OPW9xm{0loxBVlznibLtB7TAmaYSM&EZoc)vY0D~KCxjp!mM7BR>h z%X}p2goK7BynFXfR7R!nm5oz#(rSsZ8)aQFf?@SZc|hcjs0PUmO|pB@Y-fyMxHp zOeayEJlvhV0!kVvENjp!%z?EB9yy}QD?!8PkJO95s>d9jZspR zD%TF!9hn4{X^=bGObB2>_BlJJjis&V+*1voJ)vZ!zXfW()Np68H77n@!EH)XFDzOQ zvl$wc+C{EUZdEW^qFIm0h5WY`=mAFbZca{vSf_phJVlaXD=9Uvd8Pjs*XQl7tj5(a z+E>&*@2(b`Nq!gY-7AYAMyY4YkE72d2IT4@@?&*qC!nnEEb=_Ik&31zg??Y!S310V za>g48RXAqukt#d+F7KY4HXS!fI~b)PGKr$z)_xL8msaBhRu^QD{2}UJm;!J9R;QM` z#0-lKmuDY){Tl<@V6T%?YU@!wwTEao)wxz^Gag0B#GQhw_GGnL9)@ZdOU>4zZ=)d! zxH?w9{X%9Dt*YLRIb)dA%OGdS_4e@@!iYCnx}hSVtzvl-veJkHGpGieK_(N`c#{*N zy|wS{PpKxAd9^2U2~q%FcT(x-A$;_J%)Bo`?}>gkWF{Y_gB$+*{)c{BY^qs5ERw52 zdLXCs;&7kUq#1_(bJ-DkZ*S#uQqdf~P7gdfvqImo{znBM$d~YF(M`JqCu0{pym8z2Qg3Jxlf(@eg*r;ik<);)w+)T0Umr4p}ys z+uGPuxy`7vXIhE>h&IA>qI8&aNCop^MmZUgAJslS3K`cBBU7uv?_O=Fw>#B(7!y80 z)~QH6qs-5fOSmzO={Q?d|K!V0Fs<+rj4q5K4H;DJE=5 z_)u;`=?E?@FRvpTg%_VCyk;48#MeXZ!@nPqaqedeB`tGZwvDj;i(2Q3h}gcv%;@(l zhB?9Og|F<7Jk7BWVi@!Cq_gWqL`D@!c=qPaftR%EcJ>!&U83vyeWkQNZBi9R3NGv7 z)T%;bf7BS&+H*thHRg%40aJPgOM{$oXf=DERoxU?$dmf!2w$a+oQVq6nnczgAJsE5 zk364a+dExk(+=`M2!nW!XRYkUFFomI=3oa}g$q{ekCQmf`r|XVY&?Yrz|_N6j|SE) zp^k1rW%aW}4lTfjRA666{9TWI+yARw8j5~636JentAAOzuu<1;-MyPP54AYyWF38V zgMcpieW@&7PeM%ZV5Mfm=;%Y|MIr&2I9uYr|6$Rw*SCL1qE-V=mWK^Uqo_3T^z?k0 zLlk?|YLblUdQ@neR^0)8+M71fn-+pUBz9!{>_3LQHAIX309$drS?2DM7Pl+dYyD0l zBHSgAr04qy@}X5r!a3g5I(VdTx&SH8K|u?)<8TlW(fR|z>pBv?9#dFLC0^btMj8EP z5d>7!YK-h%@))H-Qu!c1l3$a*5NS~%8w<~`0C+!xR%wscQzUj08gZ38Q{pz@#gq)5 zCh%g(VydQIyI1_b^x3B_^Ur|r|6#m&)p+mTO-_mxp}${PWQWlwkA*QkN}n#`QnCb7 zfg{2LQIsXxfO4Z3kByDJtf;65v~gGCi=^pPL;B)W_8q8>G`$VQs|_kTUUD9XF@`mSW+y?d{|Bvb#KKn+Ex)~2R@ zx8V%FC>W!h{V8T~*h>u9(0or$xcUs77j0kTTVh97`hGl>YE|U)BQ+3LPngq0`Lzlb z)EgQb9$d0}v9Zr)48eAyekL_X94DJwm)_9ua1(+~96jc8WF6eQH5s>&L4~#YTVuSR z5~c2QW7A5J04l73E?P&B%L%PkH?xm*c0leRbc|l;VI}YM^ zbI*f$bLVyk%0z$6+_H5mQXJ5zLr*E*hT+5&pvCYUltc6*cl(HAcW{~j+rb>Z8|>ls zm$dKD5RL_O{&iK=RWedO+`JNQp`*^oie0*2^R$ z_WSu2wkCts0uxp`FhaU%E0)-d4DonjRT{_yWwDxD?#pM%nKkPPEvA5a9QeJzdmdm4-W^)tO!1Kr#<|9 zp0)z*7n8tchX+hx#E5A(-R0(%fpDg5G&OZYL$w$t0bGI(RYV%QV>vV2g=>WaT`x!kRqLZ{Ek83q80d+Wv_ukS>14Usyw296B0 z@fj@nHZb=cvWAppFo3rE^9RFHr5Sp9m$kLE)g0B;)uTOfoe!x-VXYg$ua6d+hX2B^ zF_bU|0Z7UQu#^*fE|VI#Q>SvvuLcs`8?6d0;4?j#vPJDzH0z-dgAs0khZP+yfs8TM4_Mg%IorO39gOnC3NVojd#S?QPI0}!(hp!)ed7d-AZ;$afl8e6x~Qhei* zxrDWfUdECD9x1W)G0@2&RJ{p18hJtiI50w(_*M;NXeKhTRB)@JE;r7AG8cZXd_GVo0To2NAAf&@fcW zjW?EkC}Kiwh;2%lqW z_sxG>5EvFb7hhxVioFyOdVNm%vg`9GR-vD9n#*Vp#d#r)&@Ej-Zc|H|WxZz#!^C$1 zW7`M_BYgc6c-)K7EI{FUubB`2Ry|@VAM_C5Z(imKb#EiE1B02m;7PR+3`Kt$1#%*T zzyhFuP;7Sg*2>({;RnFOLpNG&eWeTn6$?m~x)jPZA0L)v;{E%3aWS!`6<}8h;tQi; zlai2@R+%Xyh6Z*92EUn(_Z{4o-VRP7-@PZuj-FN`2q*XWh;x1^!Bwf5IXU+pJlMxz zFi`ZJF!?`iV$0#AQep5j2?K|ybi1?Eli}jxKTvwrGX*CPZ7fj^#Zu(%?Yz5zs;?=? z^qLnk`{N4yQB$T}u-67Ee39rO*g!9SD;jFr6gz=Ij=cK@=x{=7!DTQeVr{CG@PrOh z{Mw5z#S4ecr7zC$CVC_%M4s7dh?5^C4|0h3^@}dZqBwT(cR2NBP;D|LMHlEc2EqXG zJK*R&doB=EB@wX)F1PP%XL>S41>-LAak|zY0<+Z`?i3UcSX>Is^ z=P61%yFiz=%-Gmi1!0DrCdyBc!)y?2*2!$U%B6swhSY?hM~j)=vhHRia{O|oM1}$R zjnB_i101%9Gob;IlBy3ztirN(%&=_D9YHA?$+CGky`C)EMN0}*0*nL!CCbjR== zT+q@?*3-eJCbK9FhFOg7=Ri9=&Yy0-y+?#j))hc~Wa-2`>-S+D*T)!RKcmLtT?CLm z^Fv^_D(1 zRumrdNHK;0Y?kl#P0@2Or%h;v#oQdDgK@!c5euJr zdf4a9MX;m`7cagC5G?chjT=e1xhJ2@^&fd!*n%UVERC=pKjl4m@OsAEn)2`%S(bF6 zVLi@Yd)x%fl*yl;a3zr!i*A8lY;Q9M7u84(_ z3Jbwv6SySrM4Y5UVlkl|AH(No4TCG!W~UypBMPJsW{)zqwphXGf!25I4&e+@v9)uH64`%Fv{ zfHhK7Qxjq7SzZR_*~j-;zyBlqG7!5Ii@fUoU0z;!ge$voW0BkK!>Ff< zQyMn|3m2Ew0gaIeCOMChZA zY54ten>1yz^xoFL_#dz~+x1H?*`roI++%L|W?DQ05D&Z*6&00CG`55{Bn!7qMrIdO z76<1dh`I`t3D}XS;@YTtMt=G%4!g)IC=-DT%fSGa6XQxbYK!bUohnYPD?9z@g|5z= zbMseJgV=Dh!kL1lDqYL%>#M{$*I*e9LzDJ*q4<;M*@CVaf z;86e-reOczNYr+yPkw!E^)9uNglF?yMmWt~UY8=<-5~2BfQzo_>JguJ$x};$_Klfp zwp5g?^KV#ZI87i_4yfoCq0~K`;j)UAkdOG^S9zu6I4n91ah6v89!Sa77A3THF6d@& zkp5wcL}RXoGoHCFul+`F@Eug1!^({KtTZ$<6ulYR7x<)21wJ_m4ESP1k5UQOO{Q!( zCizBTW!E4%352h=`}e%kB1(;Kt&aA7g{a|`9X#NTn zn#1ut^?@J|O(9joq{7~N4$hb|H=Y@iiFtXZ(BybhzP(R;9cP-rrhn-O-Vy}ugu*Sx zR?48vy<02ioaw*y?OiPf;y-sccX+lavQpC0MtF^ig;6hUw(!i&%{l*klj@Wy$U;Oz ztw!?NQ1zaTo9{?`y^u@utN*Z$dkHB*=x_qCfYZTfA}j8?B%@1}{aRB{qe*s09V$D< z!D@9E334VoP04*TJs^|*Z-M{=0llDlbJdkU?hwS5_jKiiP;kRMg#-E=qAJ};4L0;?J_DgYKp$RDthxY zK()!&Z{~``iTC=?N8IJ7V)Ou=KW_R@-}V?~q3+F+IH^UDF@&}D^y$0bU$FXed(nEc zSR&=XNs-Q?ovB>4$tUs4-26EH1J0pfM%!I!ai=ADb*rpz{ z?QL;OH|;0kyAP?@iFK<=Y0O@5Di0Q^(jACEtN*0HvmtYI?leX2AK$K8gRA-jMhF=d zF?d^}uPKE3I_*A*&oHn~joBu=SU^wg?^Apy5Oz;WfHMEfU?rJ5oVmU;Pt}HVzJ026 zwRBZN*{rJsUx_gedqMkYcS@t*OrdKlV*A_rslXJ(*yIt#>0x)!w!^eFB)D?bRkIAi zT%m0gDcdPz>ZYFgko|u^N3;M2KF)1bGWj=rV+-NX0nhJ6=ZFU^+m1_$ZF>=Twe};` z=`Ln`fB3smKnDz(PwF&OPgkBNoWHm>D)C-9pZ3b)=8;HfvgB1Lz+ z(GWZ&IM|vm<>fbX6Q!c7)4^&ye1fMxX++8aLYtyHiLJ=PTt)==xwuqCsx4c-yp}C! zWqav8Qsy|3wsa7TU*nw)Fo&btm9e3Z9SH5)?jU8f;O4etxE5L5QAkIPUv za^dV5{hcACKRTCt1HT0_-a3!WrPj-qt*88U?09-wd@NX-;nkMSa`_ks@?n3@tOF7B3zxHjO&J!WV38d&Xs=+B%I)q#h1 zLaqE7DNmPZogiL2b8Ldl_@wl>T>ik(cXBz%cn}+XHHS?CDzWVodALOc)C@@}r*7u) zKQsfzYF@v-1w$Jiz7#Z+cA(27lNNoAJ)qce5;9|5>KB zh=@UJO2PMQu=2NLk5$ms7@&lWko~dhrz(QDWV^x>f!hmz1<+78L5ce4#YhTTxNxD@ zOVR5gAz_6Gazth1rXKJm9VZr&GCPUQYpeWGzE7Rf&oOSOp+)9iZm^dy#W~}h8=K0d+F=%B(952I;-hJZ73osMj(JY5<7EPcZS5ROH z?~A#q?Vw^nL_3DA0gWaODf&dJ`_wzhcQz?rFLgTJH{)Z)>c)OPP+S~q6!fHjCh>k7 zhe2-W(eal3rzS{sLgr!T$||~qQ(4t4gLaZF=Z9?>W;VvHtOvQg&aI}oRQrH(96fTE zJVK9lTDk4c6`3^b_HU;KrFAQ8j7 zlxYHIzrl!Ttxb({8LDe+&T3p;T5)m2hQf<7*t)UkOM2nw>uD#odtMlOcA=y)5ep_% zegd2RGK9mtfYTNH+G|7GlJ$^3yLE^JM05e{Ac9wgrFDI2MNTj4+}+*p78bT$Tm}yZ z3U_d_Sl8vcM-$9b0d2U|nB`!~Gg^$cZ~#Q-vsmSCay<+W?xN8WaHqfMx2${=eap(g z;K=YN%tH*%o(!)DibMU=v9h&o(jh!N7)uh5wQjLSiFD>C-Stt8bjrM0yLRo837HV7 zZY0hHBIxqbjIi^SHy0?T3vjO6D((rqIr-z{#~+7AaL(`vVcyrJIhmK|#dVMNpYTFu z+@flf{pFEgHv#p6eHyyt>}$QfXZbD+Nuhw_98t-I6j{1u*VD1%`Z*g8W!sL6N9s&r z_6GZJ98G1{)VMnBFCg*9x)gxSNr1%-8-%W+OP8|C+klW4!6+T>-_Ykdhxgr=h{m&l ziTt_QnVFzG!9FkY1xS>bF$pHPV$DwUf4nmB%71Jl4syRZL~TS+NZr%f@;B7c00X?M z1v70OvSS{X#_})tlh6KjN2QnEWfojp5K{nIlsZ)~3||H%ov zr(o8`l;T{VWin1N%hJY9zJIQ~5f2BdJxO*1ydZh)o(1PY{-t8kSb50V0Tkw3E0q+MIRo_;1J0}GU@V-c#4XL0tK`jrRUq;- zGB!R+rv@Qkpsf5MA|FDac)`SlZx4;`_$(;P;f-vGvC_|DuN{KIvxyKQo-!jleE=I8Qg*ktUeJl`>c|#~=fTS`uV! zkLddq&{G*=&=DeLp8Rx#0DLeWo$tVd!U91MOhhkVsr2kjQQl&?1BZy;1;4j!t8VMOqLTP9UN@plB`SC>McGt11i9*Qzu(*_)Hw`2-{|++ zY38Oqq`5DltbiR6cQUMx_EB#Odi)Wguy&cd^RZ)_C|#``c9B&$cFRvUL+od7XUA0N zj(%k<0;y^(vN~d)1)eJ`ER4+{&;!P!7I#hV@)HKco?M{s)vH$+wM3*Nk!W7~^l(KX z&=9YB7H|z&*Wcbk_}cmG&vD5YzL77;>JYIxiy_kl6%9`E@AQ?A=H-G_&mwXG&`kg4 zNYj%bXX}BU-{45`IO5@NGHoCbr{7>S)37>lJI9`Ia6`mDxY!72($pE?fSo3t+j4PF zg9WHsJcvT&9=NH!JeR9|q^XD%mYh zX+X?hethKi?ca#GC4x7z?Bh(Ddb;f=7NGjULE=9kz&pv8$pExKP?h8ioQe{+aYq@I z!Hq~w5FN{LY~I?w?t4InQdGDp!1Xd&!r7+hVhFE?EmVX71v+8CpB{E*BkYS=zI!47 z$+G^6ytiM29QqvkSQx5b(3cJCc(Q7Bpkc31HnryCU{n`45tlwfx+8k1236#=gu|nbM$o z?l_fho>Z9N_-`uxBz&&npVFp2M1Oz0G01&Ci;{}F#LNQc{B$u5$Vm7Whq8R!r#qk5 zBPufk`5-~5Y!H3-FvyavCOPmj)e*26rrt|V)&Wvy2>6xAS14av$I06uBJml{0uT?F zn3p*&9ObZx{}z&5hYY^?YkaL8AaVnKpAI2ygsRjK95s@3ipF0EZey+t*p(aJOxu~u zX_4HY+Qj3!u3x{N%#N&n`+R;Be*{21HEqW3Mct~8S&}fNuG{_PYrf~>U4$qa7b-|a zM0(C>X+GbEo1xz}^8ZvxG}qGw?$;oIx{x?cfCM@y#T}4`_4v@H9$nAtYjz-qMQ@6~ z$Pqc^cm6NLe%zhphSCOlRMo#4f@~Oqn%?+a>_x>NzABDu{*$g+b{?;!qy$vJQN`&Z z0m?5hiK8c9I(bY%KJpgY(*=DEX%3J7{GMPfVSka?CHjde;3aoQoI+KR_fQgIcpKpb z4rCs?MhfKM8@ymQUQQQ4QcUDugrCf~kN6kFj@Vb3_v$#JxcKjq5$GbW63z}U?xBB) zMr0Kg8^}c{_o1M{0cD56VdQ(f==Vcr@q>uE;}|pxA#LA5^_-rOaUEb6IL}Al-j(Ym z%1g58>=N zC-iE`M_pC<517IKs^E7D2V)F!Lmxdr1~cKo0+O#>g6F@Rw7u zd@6YAgJqQXjU=IPG#jV} zyP8QHI^4%5>($r(W{PWGhu)c}57vnsuTUW}6a8`Gocl@OR-xhP?xB+cV4(~8dIkm* zGsY@W7!>r<*G!1Pzla~#Vnm#z_3N**2O6L;U!P~+$Li~Xhy>XK5#qdH*$o@&p>$&o zIbSGg$K5EB>M|_Nf_HCe9RXLUlTigO|g&(5(t&WF61M4Dq>S##K~b<3)AcK+4Spb(x*Bn(KAPTViVa7BBEH@;HfWlM&vJ#c(gYX7`Ey#nsqqS-k zmMI1hzdv^J#Yhc=&c^18Umgn1HjhOl`$jb(?qTk32x@0 z$J2;(i>S4Lq!S0k=YV#c;nW`0%3oEbFZ7PEJ!32xCb8+ep!5LF@M-BJnPqrY%I9`J+1TD)|9kT$lf>`w+h2 z(F(baQxni;3_)buT#nmVq%kpSjgb=y2=E@9@BgcuBIgV|0QjZI7%Agwf2DUk2a|zK zg~foZK|a~ro}!=e4p6t0EAa7&D&G;Ei~*zgJfITZGCRB8X)8PnqXP$yDeeiPX-Y2> zT7nm9!~|jXSmIz4ACnBg=9zrru0sNjvzkViB7i^f{L2+>zUAt7NrGT}etsdydW9c- z{IOp_`zJVVh!mTJTwKr45T&21z#8G~#IjNs@M?yI5VY1=v->AMz4wnu^8AYs$6vjv zsbnW2ye6_iNVQ=C#;QXL6*jVK;O+!V3OMYElqr2$(L`TSeT<+nrf22EyOlaV00<}E z{y3rKKTPwFhaXR{H$_fYWsC`6UeFwbIb#6AsDfmcH!vwEirIv;@%_y?&JD<<$nxZv zkq8OiBSf-!TbGTHVB$+QE5XObFbI+H*gmcfv`*t1?3_$R-aQSMQviy)1coY z#|qKVK@vZJaof`~SAftIUWjn1&4BK60^%QgtXqTkOVH|+=Bs&%d7^hnwb_*g#3hVqa^$GqUJ59XXGmmLBjvUNP#2YNHdg80ZD?0#KMXVWg zc1*i=kN_M&0Bk+(93&Tglroj)7LF|mHqy&U!UwE0DP|zyz2n9POMBb8G^9~w>U*wk zM7*u>)?qN~&wUM5-T+}s>G_;fs^?(Al~vRvE$ z$S4DZKwEe}Cnsl5s=Ow`gZ_|H{O<0%WVVdw0GN7kuB;IxRN2CxDxMZjyA75Z#uafi z(y7m>30XF>6>j8 zTAiy){~I}cL7ZQMHkWX?Jc(u>spLd^KJ_wK%b6~i0;5@`5GSJShf_3qgBYqwgjRMz z0get?NLW`m+J{w^Q`BSIwWs=D$(K<5LQ3&0#=PFQxuPu|@J=GXPQwpNk~ z7v^Iod_};Z!-_0`$j#kEps~N0{ld{YJ@t6D}q~x&t;55 zqxvU58=IZ*1o00wC2lM*`Hqw%Y-rdM5%_7%mZazehb=A5PvC_*t#g{@t!SukH4XASpIHcxJ`%3CwY&&SZSNG({Q_pPA4IkZ?%a-=me6mVzi`2$w^mjt zwdJV3^Ko^30E(r2aMnuSDzkezXA3o5J+{$kU8frb6@N`F8}el4O*8p=1$>+ORLgs) z%Y{NUGErMr&YdYUk7NBHjOJOmdO_gH-T^H66cn2vPCUHxkk786e0bU>U_ZS4hWkw^ zdV!y};f6ZBpq_d0Vs~}5*5y*CR3Ryk56N}I1VGSKOSHHd&A2Zl2f2TE@pFn*Q5$#b z`@o0~m{7O}vJbeZH7k15gQ&~$^Hs!#X9*n_L|O@vSA5PE7Ue3&Ggei7mE9alv0!#_+EagJ0dPbYNUZD7AC%w|B^XKPa7h?MoG9oL> z7@4ACy?y%6)eVah5=yxHA-4{xe*H_FCzgavNGB+{;kCjr0G~p?3*}N&M1yqu;27Du zd7>N~cR@E=P2rFO_~+O@1v7+_DTumnCYrLbOTY~12SyqN%DkL~*j6{pYvq*^a)%q6 zr#wdZw-Q+CF)#OQEQlpzAXJ8K9OvPEX_llpqq3|0LkOdVx7kABtp9%m` z88mZ9c)7P$LVzNolSt1=4uBl>YsCFd_Ri{i$$D~&453JeD(n}O#@sX6NBu6Ld`uZ? z;B*ac@b|Be)n>}9JJr5H)W#XwTv>@LKEtmIRqCnwTN>ebt7cF(-o8v!X)9Tz-gMJ@mOTYY&IK7r1ESh<1VbLU9#4KF+MN{P-qvQOMbJbAyC?$Az|< zKz52mkliXN)pQQtQl~NkYLZzZi6>YG(OVGgPb_*g7MESzh)|s5G#qZU$!KS>Sar?K z>!_sCneum}r#Qdm76Zo{;0N_rs`#*pi3w2?;oysW%YHFNiUD9TnJ6zsLzL>2_jlLt z1WvHYKem}jT2VNxV5~C&!O7@!KC(=+2^*{r@pE$)ViIaY-Dvixk2}z zfH3ozpH+WlmXD8T3mlFw(xkmd&1n?=VQ2PvDmCx61$-+uQ6S=Uc1oZUC-*_G zZY0z3U%-JF7C4*_$pSA&K*mr#N>K?+z>MM!j;U2fxsqVN5J^99H<0^KS*acJz%`l` z8go7)4d4b~8Qb~-u`1O{Rrm%aA0&|8rwyz;6`tmyP@5Uzl1u<2?oU*dBn_7bwR_d%qrw?UkUKf(!`TA8?;fH7 zuV%law|VVCRpU@;Fd*r#l5OYTlVgw#*m(0};6vtL02cj|DB}A3wqu(%> z*UI1X;YDbNl)A#Vg`XW!C2^&sV`MyGE{`KNpG20o1n^YVP3E}M>GweFRtxTrtRN%5 zsc1IOdDWV*p5upfe=cr19BGb&O~SkT*TELiF)S_JN8E|VY{s~!*w#Ja@-F*>9(l*N ze0N9n06lkl%b4w~p<&Mp$m1ufkFJXG_w&slKN&*U8-D){L;g3@o0C|_1T#3zA0FSj zkp5y|z92ZtCfD*$vk@PKU@f+nI*0AnWfR6~73DRgn1}K*yZ}g&j6&OS!}6+_wN)|p ziwX*2F2k~69D0%0S_{fTC@YOAWj-tcUr?%dOxIIhbax!+frR%yD$K^2eC^ZkxYY_I zWrdh#w`q@h2m}ZGMPNFMf1=f*;oXd3y_*Atr#J+6%+AiHP8UE&4Ezcb={gyqSE0>_q4}RKXq4r7_mxyTYzh#{7sa?O?c|imW4|8JYQ@TSvQv< zQ$??=rfc|k9&-+DVV2Kj(9nwD#bBX|No}q_JF;@b#-!v7WG{LgDb8HPdi!IxvP51WMo~r_|VX|%8DRQ=ft+)U5{<)a#td-D5!y6}w z-#k!UC;8IB$$CENSDWYWY~9v{xG&3V&~~uJG{G{pIGQ6@N*Ql8oj|pA{!p4fr!m^6 zlU1-mkrq)?uvo8qVEH}P*+MsiXM$*zZCr@O+`;f#7WyjN-S5AzzczP-t>LNrvkN}* z_;&Fan{6qB6TYMG&Jis9)&rlY3hK13uqbP{$@#fyYhA2#j})bP=5jS$+mRv?q^BL3 z>2j`}!n~!qY*cGt8!IJzexh_jjILMv*`h>TiQ;27@R7o76SPq0GojeTWtPTB^S z467KMjx)50ZoDiO)GTwTrO)+pV`FjZPT5~aL}#0p z^hEAFaqty{=GDhvF*?o&nj|9k>eo}86jW*x!1keN}I{JuOwF+w9jZ@BmpDQ$PGNlI2mhW5les>FzLApw;{(qNP- z{UirFBb>vx-!hCwexcSkYyzR&W|H2KXXht{cyGXlr;12{)&oRpLl{%}rF3UuGFx{2_q zPzeeCL^Z0{{xatb52bg^@g5{)+>s=e>1<7X7&XXi*>ZRg1!0a>ju(MtCRX}^p13rX z6g;{f8Y&~@cO~*@f4h4y`+*K8# z9xGsMMtD*_N*N9$slsZK-(c|DTpV9pA6tU?VKN-gwZLqN)%U1@I8nEzJ#8Ez%QPi* zlZrTPlE4&hb4%Zh(@~aza<2fyFv&Ls?m)6fP}xtmp#$lrwUA5D6diC1kSvE6bIw`e zT*zRUj!QP^_>RbHM}~Rfu7*ndzm!A|?_KkONgbGx%@wb!*oq1gPPQ5A_N8_}1g*Gj z+(N0OTdm(zkbNm|TtTUw(;k^fB!n5QHk2j~dlFxp5{fZly#jT&rWjDndZAv>wpl-` z0zMO%>$1qd-()*R5Fon&y@6*R{E!q3K=ZCX`JWJuS8k z_>?y|1(`47#N^@CGS^NVS~q%*H1pPg+H(A!_y$->I!Z-2!Nh*c_s@Ry421?-%J$RG zwRpOySW$Q@u(QLV1B!=#D(m|GacZkSqF3UOAfrvsZ0XLxn>Dge-*1Ju1PD}wwGT!F zC>HrfKYs%)eiUb%j@L3OT)wRX=aTnY2JUU}i)pEZAC`(WueauKI_xY-LBW(Z5MDkb zIqGU1bAhw5V)&sg(mM z1yMH5;TL*Rd9o*3e;O}WWY@xB#D}>99e~f&du^A*z85MFs^McH86h@C=)EB+{(5!# z*+R!b$t}&-Kg`VF<`1N#HgUN8_F;LaQu`qG?1bX{cDT@0SNwRZ^^xlEK<~xt4l%9o5-fjUV1Y&Zi01y~t(Z{ZgUHisUV?RlFFlt%D=>`k@-V8NFEvs!R>Gvyq<#DG0 zsYv+XE_!WSy=_Cmf{+ik4}uFWJN;f$>q~D)qYu+jjLRU1?bD@wzK5H0ztxyl1OXzg zYm}T&`YZfKG;*z)_pVXs@cb~RHR1il#axGO{o#S#sKy%1*xK4M-g|r&JdlQ_h_nGa z`zhicYW%t?eU?_yX4j`pOj1bz2_@=^b3D#9bKll7RvXg)R;epvxAq=;B068nFJ=M-KMs(^D)Z1Et(%3r5_-X^3mXfSI0NBgN&1UNo5wdb`t-L& zXE=>al=BArzeIFIe)tXoJgYB>qtSY{*{A%b5_4>#0pzYj>5Jb3$8VRR|3)oRX}2gT z9i!_)k|xabyw8D%ZiVuRXCb1&u|!OSy1F0+2_i5rm3(1_*}Q9oH3hOe5WZthbsv-KjA20^IgWndu>1CDhTKXkvv=9Cxd3H7fH8a#suC5; zk#gmZR89S#IB$?52>!&{=_HqjlEHW3LqNho%vQ+k2z}sMAXcDTF9}(>PEO7UsE#D6gynKQchD*=iz(ing7Rz(HonmhosHyQrPX z90p02gb#UepvKX^e;~Vb-IWqoknrVa&mbQ6pJ6bSC6adry)!(k>v9!@Q(smT=OZfLNsTubK-4KY7m3Tzy3bH(_ws3d<=Q?)tp`4MlF zdZWk?#MJobiX zg)CIbQbWCXOixIQ7pa0-sYq%{t=+g$u@ZYq`gBte^5`Dh>Fc~935upUHRyq%GKc~K z7U0tcFET5L(5tfIb8x}g(#y}^h0HN{pUVjrfs-+KQHYteET57cxQ6=KIXKi{lBH`y z>7*7Y$*V;C3-2c45Ky6GHSxOG0yPk%I%sn-V5kJ;mA$#4s!_BzYRG8+e(Ciwcb-j< zFABVl%U2jrugE99N+xKrwvYm*?8wAH(0XVJ5Xsx(F6na#+|dwHg7myvzEdtLO!oRTj|DzP=*U$G$LrPtt z04{8}nxmrmlrX$iEe%*b{(Tj7!QFcrd-P^ZDg-x#V^iOCuvoUdU9BbVPwX>V9x62RTR0V)snvmE zGMU~(_Jhm6-jhogwOOm^&Yh=X=R+aXFT`b$8v!~B|Dx2q3_yCo6DP#>cYa_WfMJ5P z0;F$bW#xPW!c$uY)G-7r#ADlK5M2n$m_}#g@Ch4&@*mJ}DbV4>#L|ouJg3{VZ9xD$ zfOQZx5inC(*9DL4M#cpy?%h{K$Jr=!kNknKj{kz;qci96T2JL7eF&f2gLKU5b!iWe zL@O#P64ELCWeuvcMJ($_MuxZE0z$UDWs3@;Jo29ULW-b40NK_@M zU=WBPN3<_0d;|!3wAc*4BLDhr003Tb;>9!cXG+$zwsIOZyUu^-^!K+5ym+DIk1{0$ zZuOFwe@>S%4%Uo-BWD&LtilPY6R|+*WIV-mo&a~eX5+?6r|6qVISFCA0wukRuP7Cs zsFP^uS2Fx!^%asnHibT80$aAp%UAt4^Dig>qyEGO+9I(q?w|_8I`%?JE4PLiBG8PB%KL4FC3Zfdr`T z{%3++w9DX|=HF4?8*;IuzD_r=3c>yB`50jJ`us!B$Ap4YFg~&;2nV7)T{x##hyUA2 zU=m+ZRb-3>j$Ri1onG(`0G?`veXD0dSDGd;#r*}b2XZ31j5jUeg@{e5Bk}aiuUsYW z^o7WO*unp+(ogt^|16pDpERZa2bW*9e)<$m&}BzB>*q(Jvm3#fkOaP;k+Az~juB1{ zJn4TO7y%)vr~Krh2}A&$88I)WQql3Pm6g@TA~yb|A&h2yO8OOX z%e5oz8-^eh)EURRSK|b)*a0G8IqRtxqeUPb6|mgRyNYM%BRt=&_ zP;I~A<^aBtViLP{ofBn2>IlV+k%^ZS8~B-4wCb)EqLdTfWgiRjBHjhsUCuGw_G0BC$F{@bpf!rAl}2KuZ)%XMxTi= zWmZoYfVl*={ieL;L_^g8hf|09$DVfN`}p{vz`z|ug~-i9y4L^I-gm}DeQsN0iP6MF z0Sj0_5mAZ)j)DakbHsuQL{I@~N|_Nvsz?Vl7C_M`s0>w6K@>qir3w}pL00` z7%57TUhaBkASXHZ-uEW&IrqNrhs!S?kj(tcQ}(m>+H0?US!6@g zBvn~a$?eg)n*F1!qOOgI;kJjm2vl8#*Ox*eG+fjS6A!;d5Zw>Zz4=p^09*6^Y8)+?I@>)AML^Lgf z8%1Fw!_@DAI0iN5QPv1GR!p8h}O z^!RVQ=s(rg{uBH4pONkcAW_awEQc2y!2wO&0JS9WWO3Re#|OU3o%ndjWba+OAgbGN zd~$e;+a~%TSGZqkxnPT&{zM_pZ) zs?)Y&nIoM^G=$W3ILL|ND{tWo%r$fW3HuT|q8yo0d;+P)w*2uK>sr2Il8=@Q%ih*@ zRqAU9NWh3#(au9+OeekH4yP%ek`)Ss38QxqEt*j3+;dKwmePnE-CZzR7*2c*vJ6Jp zCo!zeNq}D z!#Z@TAy;_lZg2|(*Hml2_Ip#-pU!aP+;_u~0wQ!&cW4|1JAyeEb;6%o;p)kkXgiG= z-}kZqAZS7PG3%ml#I>mKx`|Kjq5KdIFG?=LcgB=fA5%#MJ^yoslh&}OW&(~p#fPx@EZOeYn*}diTNe0p)r3P<^UVg zYui2;uU&qAxiH^ti8o=}mJKDr0YHL{E+}BZAV67a10n(FwK=H9-2-(Jxj4A)RxGWl zV?(rYV8`IbTyze@Qo>%nEDckq9|#%)!wLAsYwk+phLs$+AZl&x))8OP+89@$l+h%MxuhAJ}xG~vt zN;20JdWNLiKCy`#8lSS8XK*q?)CGDjge(s+v!&0P!5kKZIt$kyc_F%XgAY=+ml$zo3w}I=bCR|YTrunw;#{=0;>&LLc;;!mmDT!YX7{-EnctFTFfQEhP87at zh}h^C-A} zFAO6f4_K--yhE?5t2cbOdF-)-7R*zavpP9pR<7(ZDIDJh>0irKUb&GDJ_u%%*x+vz zw>r^d2Y16SL2(?b57a>rZqn0uu(ogCHu9jfDSBcQ@8IJ4)MTx-7wqQ|(ymOSy8OMM zKMxWwWre}ZvN)^w#4=&hmia9x6@-$#CJ=xP{Ql<$j072`E(FwST6#aXVoK@DRHSEu^xfIps<8HN;%*5ep6V#W$nJ0eC_}^bFnmmw}!S_|z0)-=7 z@rC1mvt#uqE-#3)V$ml}0#S~{r7Lh>YeU}Q*?%8gZQBGNZ3l6paj3(_fls;&46Yek zhtONLO;?kYNlcuO<#7To25LVUQPLF9{ajhe*Gpl^zk7t&hL!_uhFRX5HmG+9n;~S-=F66qV^gcH-0NP?|8cF;cXv692 zTRs|(DbhW#={}>t3WQTI{!lv{GPM^a&9LJ5k97ajb^P2-c)3tuc(9=X!3oK_HhO_g zBM-9%?jb7L2sQv04aQj}`}~$0@XBZl5tu0#5&cFINuieoY@@7`T1h9YBGJcX^^p@| z*tf0ju`zrMJ&R~;_^&lCY=%=|_LpbhlTBlkCbD=4B>kP?T?1NWFl)rms;c_5uPE2K z=edVEW{Kpg(bfWwfotJ9m1oD_%>D$%K62gw($6x-IQI|y0;X&6^iJIM9vlaSF0>yo z-yXsf7Z>kf*}GkVhWDC=%TqZ^d2izNVSAMgCQgSiE(#_?qzMFq&6Ik+lC|57xxUB^ z$_|jX?skJd?WJi&U`Q_2B28pT5bDzNwv9BAwY3d%yi^Y}6y@~e;LAy>bgDFuL`d-S z;`k^u7J_5TP4skXZf)&m(Lm=`NqsTwJNiJ?^#?wahtdEs^VY?b`no0)+8wwfx`tcj z;I$S(`W6)7Ro2dW)&#)$ZHG(QNH&8(8P=(ahXEax5sxOrvda2(Brk}-Evig|q6}qf zWTJKiFnTdCsbOy&!V^yC+z_Z5;;1f#v5#HxeaKEE82bAOs>GnsrL~Y4USseb9-04R zAM{{G_fj5S4zH;P@DU_dbyfSw_9+h$6_PXWYae&jCMujg*Sve-9XiZ){qI>}9877P z9eekOAv@?trj`I3#Eiv*O^Z-H;_Zl>@)C~Gmc%k@$+UpAs`+EKD1W_j+!y3dL|YeNC1x;^VP;UQaB#J)o3daK@BHcb{i1@giRAv{ZShBX9Fg*%LOZg7{pac zFo;B~uIB?(GD#qMrdaGJwXp%QdPEQcL^&k-Ar+kMVS7PAg)avh>^i`(uo8z<+2L@u zU;z-4g*^fig-It$sDhvN1yG#ZL7-%aN-bGB(IHMjXYGQ$K)2#F&r`xRP-Z#`?RVT+ z3k#OEbM?H)4%Q$Rc9yJ-RstSUKYdHz&>?NGH$5%buA1@~+D>E7CM_=7 zoQvXS8PpUYD8bGHgO2Fx#je)IVE|uEN{f)`bMZ>VV1e2U6BRd|br^pj&01>{;LWC* zW;`1N?ca-uWe=wqP8G!$?60V*Aq2H5gMh&-styC?A`a>T2T})6jG~2GdCD*_axN>;nonf$IQe; zfsY}wMZLS({>}C&hlv17=p$}72xFp@40jnew%28o12@L z&WQ?)P_dJCS{=V|01mjzPJAS)OtZu{on$YcdBx@B{M;~ZAZ4y9ANR$Xgih_2kg8D{ zB1)|^54m)Qz;K0baN$Ve%o5ks=73QT)G!V^g9Pe5I1ngx>Kkg`5e?|r!6T^VJfwOn z??_7dXweaz)4J853&ja16Nd2Oz0P3TQ=_>A2I10m317 zA@lgelY41tZZ8?5E=HeWWOsVph$q}}(cbBywhVZ8IKSA31nNX+{9u5X2**sQ-pcJP zw0j})A8+1}O%L!QtJ={vqrgnK z{pWS!;4<$cwpM`K#Xi1q!;)#Rlz6$BwHXO%Fu|nZ7Nc*v{mp8`*JKDgbQlYJ*GB{| z66^(`V}8N^0Ww$XghSXOxgvyu?suWv|FRER=5g9rrVH&jXhe>I|8sL9lp9b84P$3_T2@rMU zM_|iV&wGe;gTkC0{T<_$#oh$Q7&w}?Hadk4Hzi|wyehOm@ZB4^G00EZ=i)Xiv*(|& z)%eb(8S%2-q=I05`mT>--hBa0vl_6drC zP?{x;TX9pQA}&F?m0uu7X$jbJBi0AGtEe8U)FA>`frkwp0-hv&VY_urTYCf4yAWy+ zN%Db^^k+|O+^z}{X1F)X8r+eEbd+d7^qNh?!R#h$6cYI!rJ+ zNSiHMdZG(%$m=u+#2;!CB~4Sn%#Tvx8j`f@%X)0OQ2BWgZ7N7X1W!XutQT|S*TFSJ z&mL5+qIE6&-cCrgDJJh3UwZ4e6>appqm+T1BGNHU{YWw*b1T(_bJduH0?0D}9W?W3 zoc$VH3`-`$y6~z#>_3vX3|YPon14OPlq#wt*3NP#t~tVWX|N<;w4RYpU9nVW*4n`X z;N`{`RsqH#^#3U$EupFX(3^rWY+rv8Z+hq0LSuc(i2m>O@JxnRccYvQ*A zc)WgsAB;Dc@Y-3@y3?Zi2}zA$IX+I$j?k%?yL+S_Of~F>$rGbGRY)c%L6w13LI|Lc z$;GGvKj{t`h)+sNJEQ$Ro7P@lAxk02>_~tC`^N9;DE|)~BWZ4N+el03whVD#8zj#` z&~;N($|@)->OyG%5oa%1aNxvLwHQFa$<%^y>k7QDtmb1$a*C((#~y zfqPYjgq-9JX+rS?d?Na8&D#MmPl`t}&2PX*V3d~~zEj@6Wo?UV9lP*dmQw?B+F{~X zf{$7G`jJOhla}8o?RlLp_v?=Q%rQT+#sl=(t2fc8VcKFR#9)L%s#|RWo~H@SFgBl_ zl)DcYbGUmfVM?MbxkpNN4+?C+&y<_>9ixCKR&%V54+J?%TH*rGe*%Sr=wf>v)I(+c zJ5W`MN1`Bh_H58H{F7^xR)q$GI&gzp25$V<`m>7L-+9t4(IIB*U*(c}mBq;oMbj_bi*_vpx4PFHqrm#xz-vhY4){&4t|5x$+&G`8(V`5^^uYS#a_%c6K=2t3|N285HEVf2Ayv>0pN+}V~uoK ze||WkSrCJPL))7?qCmmKuyr0DW{(cBz0aXnvgS^u5nM|GPFv=oez8#>(hs(S4ta{% z1w6BYjPxJSQ}iqZ8U2#PT)_P5cW|*c1YEELG zu`KCpIuk;Vqcg!qI|~Sa+cNT0a_A>0hKhE0<@S0dBgVIJpu;qh@yqE5a;R}xa4Z1C z#(ZwHp9Fd=XeA%oPWz;0iU!wF{{DT0@ofPXmk`T?@L!fl)jupZlRv6mw9~x2z$EIr z9~OH$Xw7EEzIaF{ET2GY=>7_m#Uma{>bhV*Z%rFS)Fc0{c)?o7MWbnkzD;MSLkGOS zJpHy`?3SKvbfGC;22vasBuD!SIxw_b&=oJI28=#ArtHAy(UH#<`kI>ABLgku2Img3J=r@mODV^&eL{Rv=-mhbPv(d$JhqBISI`VWQ8X z^&FMjL-_!)-2l=k{=ArE?od;ym3m+szYzEZi??wUcfcM6AHCHdHd;4R$8&Gm5VTIP z6OVQ`mwHd>c}z2)rjg$?7md$nH}_k8HJzX={}(GuS^);4=GUF zknOj;&jr{P6!bkmm^uPIhi~6GkD_s~2%-9msmf35Mui+?9EMGo9+vp%TVNqG1htu@ zin`;+k59|Jr({$abb86w^SeXj0z1Mb(5$PFO2EFr8(S~zRiG>+dnY53g)|Zt&S>J{ zeyKEmHuhRgwqE?|y>=0IpxT}fotlsZS`{FDi|snPN!l7Y3bOX{b$vU7E#__%L51o( zq!6HAZrB=jsdBw;w3^2%DXF9FHAby?>0|3Y0|ONnP6ngPqWl4?+tuf$5^2nepD{|) zMv=(_yWNMsmgmlDJZh26d@RUUKDjzBeJaAQmBzIukEJgcO&G(`wvC5WfAJ&B02Ho4 zkZ@vDlXhO3a?)D z^hXL0?7IBeK{$Ws;2;j>AdlYJi0-{2$`Y;A1n|oWu=FKuYYP{|VT_p|=PY5SwH&xG zVe~U<+4__DTf}`NQ+t-;X{=t_88|=rdfj zAPYo!U;%8dCF)U2-@TiIeG}!#!bi5^i^=^+*MxP3PYrhZ_~Ih2D5pZvf&xe&=mgg* zysvhKqoodhUMtfl4YNS#jY&#Ms)#rT5nDAin1v#T-6-uW0D=}1A1|9|lA&jEFJ`p> z-emP}%*C*wHD|<`x=OoVC{Y=(yfu!t8rDUfdY=yvxYwu}f-LpWe<^+Yb~fCt-pE~% z#rLC|QP~x$c=hrRVYZ7ncx0sKlc7gyQGW7e?+W?c;KSvbx7=|&-hlOvNvQKPFfho` z$>CK@!mAsUsOAJWxEf_}j$?p+YxIe(T>Mp#jA|H3N{&p~-_uZnI>eOa*b{6+QW z?|pM$clsPUd^jldy~ng&k7_H^8`;~Ix9dOBhJQ9+1SV)3u z-%PxaaKkOnm7KVbIvpP}goQCTX93x0y1Dg+oOq9lav4lZJuv$KYJV^lU%!PEKh|33 z@C%Jpyfx~9u6%Czh50ha$#JN!!#k3k@ThXR;mv@oKa+H++^ny!4-3pyorV^P(MkF> zpHXh=?U$mbS?TQ8G1pI6St5ax?Lm=T!W^ZwH)4r(kY3&9IjN}>;(DO0!NXWZ=bVEZ zF4W4&&9#U~P^^wa$GE=I3%;{JKR@X($t`$Ra#joj{g^?B<5!bus--skj6zUL|wyzoLje+hPCTE$BE69#HomEXamkY zr{-7Jwb*5fSA)>`SsaS5WFX?=mO<+UCqA;l{y4?9Xy)OBsmJ5?E1RcS6{>IQRJdO< zkm`C~k}5%-vb@C!)J3a2Ec4OSQK_%W6Grsln+>7 z`7-P2YDvW(Q=PFEj9=-bquFEQKOuXzE;I2flo91dh5{?ONS{ zm4bPWnmvliO5asg%|ql7EXV6|^XqlPV+91hr*4?id&is_j$=t;V2V~xP{5fVUKDNm zg59{MTbqd*xz!((eP4Y(f};J>+S-Lgc4^Wmv;CI0*M)@}=8!{QEcdueQZAoTa_o#U zmmIsOj;H)6p(chkfGpHm&ZHU*ko`McqqAAj?act zrF(o+-jA9=8NA;e2m~>~(96#xGlN61Zq24)QVbKzmx4WT)E_FZ*mQO|>i57j$= z&P9YDbFO&!M29nYOxridM}6z_oTwusB^99<{Z0LhCE-ElBfY!4r#feJe%q30oVF5) zhgo<){x~ShG+@&DI}tG?EWZJ6=-jKh?;XyQp%>zX8^~Q|1_tRrw5v=pyubgcDdkPB zLdv(Xb-LidLN_}Pmb@#oZN_(}ygWTgd#w)G3mvhht6ARt&aj@Gw2r#W8g}Uhtbo=+yzZ0P2_hMRznPklUHzp&og z9ZpoC{j2`yUNAIt=|J+tg@y3|3P)k1oE&0$s+CZj8)2HdfJv}`K z9ULye!lLT*9Ql{MeaRpsIYkj(pVy0@B`l2AV-Tki2J2LL_3Bwb^!f)od*WX*!QG8~ zC#Z~2+M`wSN->&O_v+P5poQd6L#@{?*iV&bqwCz-O|WtbP@QCn@|XTqxZrFmozjik z8!0Beq4(?8#)i4{k8?S6XwIG07KLuta+L`i?PEWGWOsY4w>%AXNFmuBHm64-AO$%4 zrLNV%gUiu7WcYSc(glBi92jEa;)R=fP(zT8&PYVTwY02E1kQi7USTA5FnswW!)450 z1_S=qZ}Ey+8suNUO6cd+ua}K5*6QkN{8(WWrM*mEjyP9-mh}?Ci ztW`FAsI~|lfIHv^0S8j%!{hcg<3 zf>5YhieNB>8)hUNmP|^HuFUpu+57|<2K`dW2G@?y2F`J6p=^7(*4ivpG#{3L_-l|q z*}3Tev0>{%g7`BpL^)&@zk8m%iq6{<>mmyXR67ASuqfXI>g*2GoN*K9^)T>2*(D=D zZ*Jhm(UpE+%dggsCv#_tX!kt;kra!cgmg3GxOaC}jK;~@ZJxR#iT zXU(H&+L&-r`+{G3z7>*5fiN`6UW1-KeQHr2!g}M8*$n6w)&jMMW2gZV_<{cZV4=>< zinWeSYOze5G9dJX72QW~QCmSMk&CQlzZr0O^ihzD|1$bdS;oI&Uz<#>0WlZBws3pA z{gxgERTDGfbXidoV*xujCp-?VQXW@yZv?`hjO}3|5Mnl8h2`=Yw(|V>^UXY702GFr zo16XdFHq-}uM`j{%*F8`ewnLKyGqh-xuDte<7_c0$@`z4NC!BY+;aUeb`9Cg*mEA} zk+cJex~f_th71} z*h$z6vf9bw9O{mv78jiFU_*t$xXvucJ|xJvCJ`aH`(Rtz5@xS*HTlQwyLZpxnf?8t ztmqH12X2dX+pfJ~bnJTUWeb?Rl_u%G_D=fJ2%+)c&+Bf?cy!ruJ z4MBXf4xsC0HOIXn2sNDZ3>QaXEZG%>MEC&Zw zf?=|hc`sJ8hd)(G>DM%*Og~=t!(8Qy-X-X3p*iQ9r9g5Al(ITiy~ z+(M9C%!#=4eK!Xu;t==x_3MTyR$3$1YFZ~`;<*B0(!DdHq5yc2<5E*oW77!g?p*ieARlWY`W$-N_nVuWBZ@-L@ZgJLMxle$}O zEL;9%cE_!$-Akl!+|0%CTvGJLY7KW;3+4wWb4U`Wu1+~YnB0%MK%dJmxhhro99GhQR+MM-~7G2#eZbH<_dlJ^^e}gp8+qt88ksr z{*$YWv25{Q#2)y^+&_(A{O?tS{%^sb{~fyj9Xh^Y_}Afy|8q;~n2q?ndGK`5e=w$k zB!gY{9bFM_T3v#mP-y?Ykp}9>5-BO1+JWRaQi`)KPpN#^X0i-ULTn>vq>Y1I73g9e z50m_3d&^KO zohpBnt<`n+?%mPMinV(eOm{rsq>N|mdxj%4pLAf&BVB^ldUiJ_uvlyYY=?pe z>QcUwQ|J~2CCFo2>F`6JZxU4fEc)S}gslIEmKf{cHL8lr9C-KgDwBltl^p7_#pchK zSJ7p3t;XA{t*7{yN>Ua!`=P~wvfs!MoK>Z7y148Mq;F$|nsv!*eCkUx84lKwYt&V% zM6ed}X+rzILpNrGdN=>!Gh6t#yP)1(` z2fk3xD!_6vvYR3#@eIF+6Huke#)UuFm8!<&UnvsJe&~Be02e;EI6)}*{=w215<0-I zn3EM-%)cnD+|I0=?GD%-?vW&Egp$-f>B**j_xJy#fJ_r8fM-o9Oupbt93OhHY7;ilrz$kmcLo(*on<&=j4+|0yCOoW|S} zgs1lvE!Tq}=%0s$=a&!N&3z`5g>pJ2yjqjpp+JKub~SF^02K}Sm8;|<;xOm?2P7I@ zhZCj@FgT;boC|SLo^m-o50moYRMjITa3ML_Xw*tPwroR$X{k!1pz25}mm@kvk8@BONOIn+CG!y@}|HQum D0`8i9 literal 0 HcmV?d00001 diff --git a/tests/UI/Editor/integration/shell/list_view_inline_rename/main.cpp b/tests/UI/Editor/integration/shell/list_view_inline_rename/main.cpp new file mode 100644 index 00000000..5c8dd0b5 --- /dev/null +++ b/tests/UI/Editor/integration/shell/list_view_inline_rename/main.cpp @@ -0,0 +1,1172 @@ +#ifndef NOMINMAX +#define NOMINMAX +#endif + +#include +#include +#include +#include +#include +#include "EditorValidationTheme.h" +#include "Host/AutoScreenshot.h" +#include "Host/InputModifierTracker.h" +#include "Host/NativeRenderer.h" + +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef XCENGINE_EDITOR_UI_TESTS_REPO_ROOT +#define XCENGINE_EDITOR_UI_TESTS_REPO_ROOT "." +#endif + +namespace { + +using XCEngine::Input::KeyCode; +using XCEngine::Tests::EditorUI::EditorValidationShellMetrics; +using XCEngine::Tests::EditorUI::EditorValidationShellPalette; +using XCEngine::UI::UIDrawData; +using XCEngine::UI::UIDrawList; +using XCEngine::UI::UIInputEvent; +using XCEngine::UI::UIInputEventType; +using XCEngine::UI::UIInputModifiers; +using XCEngine::UI::UIPoint; +using XCEngine::UI::UIPointerButton; +using XCEngine::UI::UIRect; +using XCEngine::UI::Widgets::UISelectionModel; +using XCEngine::UI::Editor::BuildUIEditorHostedTextFieldMetrics; +using XCEngine::UI::Editor::BuildUIEditorHostedTextFieldPalette; +using XCEngine::UI::Editor::BuildUIEditorInlineRenameTextFieldMetrics; +using XCEngine::UI::Editor::Host::AutoScreenshotController; +using XCEngine::UI::Editor::Host::InputModifierTracker; +using XCEngine::UI::Editor::Host::NativeRenderer; +using XCEngine::UI::Editor::ResolveUIEditorPropertyGridMetrics; +using XCEngine::UI::Editor::ResolveUIEditorPropertyGridPalette; +using XCEngine::UI::Editor::ResolveUIEditorTextFieldMetrics; +using XCEngine::UI::Editor::ResolveUIEditorTextFieldPalette; +using XCEngine::UI::Editor::UIEditorInlineRenameSessionFrame; +using XCEngine::UI::Editor::UIEditorInlineRenameSessionRequest; +using XCEngine::UI::Editor::UIEditorInlineRenameSessionState; +using XCEngine::UI::Editor::UIEditorListViewInteractionFrame; +using XCEngine::UI::Editor::UIEditorListViewInteractionResult; +using XCEngine::UI::Editor::UIEditorListViewInteractionState; +using XCEngine::UI::Editor::UpdateUIEditorInlineRenameSession; +using XCEngine::UI::Editor::UpdateUIEditorListViewInteraction; +using XCEngine::UI::Editor::Widgets::AppendUIEditorListViewBackground; +using XCEngine::UI::Editor::Widgets::AppendUIEditorListViewForeground; +using XCEngine::UI::Editor::Widgets::AppendUIEditorTextFieldBackground; +using XCEngine::UI::Editor::Widgets::AppendUIEditorTextFieldForeground; +using XCEngine::UI::Editor::Widgets::FindUIEditorListViewItemIndex; +using XCEngine::UI::Editor::Widgets::HitTestUIEditorListView; +using XCEngine::UI::Editor::Widgets::UIEditorListViewHitTarget; +using XCEngine::UI::Editor::Widgets::UIEditorListViewHitTargetKind; +using XCEngine::UI::Editor::Widgets::UIEditorListViewInvalidIndex; +using XCEngine::UI::Editor::Widgets::UIEditorListViewItem; +using XCEngine::UI::Editor::Widgets::UIEditorTextFieldMetrics; +using XCEngine::UI::Editor::Widgets::UIEditorTextFieldPalette; +namespace Style = XCEngine::UI::Style; + +constexpr const wchar_t* kWindowClassName = L"XCUIEditorListViewInlineRenameValidation"; +constexpr const wchar_t* kWindowTitle = L"XCUI Editor | ListView Inline Rename"; + +enum class ActionId : unsigned char { + Reset = 0, + Capture +}; + +struct ButtonLayout { + ActionId action = ActionId::Reset; + const char* label = ""; + UIRect rect = {}; +}; + +struct ScenarioLayout { + UIRect introRect = {}; + UIRect controlRect = {}; + UIRect stateRect = {}; + UIRect previewRect = {}; + UIRect listRect = {}; + std::vector buttons = {}; +}; + +std::filesystem::path ResolveRepoRootPath() { + std::string root = XCENGINE_EDITOR_UI_TESTS_REPO_ROOT; + if (root.size() >= 2u && root.front() == '"' && root.back() == '"') { + root = root.substr(1u, root.size() - 2u); + } + + return std::filesystem::path(root).lexically_normal(); +} + +std::filesystem::path ResolveValidationThemePath() { + return (ResolveRepoRootPath() / "tests/UI/Editor/integration/shared/themes/editor_validation.xctheme") + .lexically_normal(); +} + +bool ContainsPoint(const UIRect& rect, float x, float y) { + return x >= rect.x && + x <= rect.x + rect.width && + y >= rect.y && + y <= rect.y + rect.height; +} + +std::int32_t MapListKey(UINT keyCode) { + switch (keyCode) { + case VK_F2: + return static_cast(KeyCode::F2); + case VK_UP: + return static_cast(KeyCode::Up); + case VK_DOWN: + return static_cast(KeyCode::Down); + case VK_HOME: + return static_cast(KeyCode::Home); + case VK_END: + return static_cast(KeyCode::End); + default: + return static_cast(KeyCode::None); + } +} + +std::int32_t MapRenameKey(UINT keyCode) { + switch (keyCode) { + case VK_RETURN: + return static_cast(KeyCode::Enter); + case VK_ESCAPE: + return static_cast(KeyCode::Escape); + case VK_BACK: + return static_cast(KeyCode::Backspace); + case VK_DELETE: + return static_cast(KeyCode::Delete); + case VK_LEFT: + return static_cast(KeyCode::Left); + case VK_RIGHT: + return static_cast(KeyCode::Right); + case VK_HOME: + return static_cast(KeyCode::Home); + case VK_END: + return static_cast(KeyCode::End); + default: + return static_cast(KeyCode::None); + } +} + +ScenarioLayout BuildScenarioLayout( + float width, + float height, + const EditorValidationShellMetrics& shellMetrics) { + const float margin = shellMetrics.margin; + constexpr float leftWidth = 470.0f; + const float gap = shellMetrics.gap; + + ScenarioLayout layout = {}; + layout.introRect = UIRect(margin, margin, leftWidth, 252.0f); + layout.controlRect = UIRect(margin, layout.introRect.y + layout.introRect.height + gap, leftWidth, 84.0f); + layout.stateRect = UIRect( + margin, + layout.controlRect.y + layout.controlRect.height + gap, + leftWidth, + (std::max)(260.0f, height - (layout.controlRect.y + layout.controlRect.height + gap) - margin)); + layout.previewRect = UIRect( + leftWidth + margin * 2.0f, + margin, + (std::max)(520.0f, width - leftWidth - margin * 3.0f), + height - margin * 2.0f); + layout.listRect = UIRect( + layout.previewRect.x + 22.0f, + layout.previewRect.y + 72.0f, + layout.previewRect.width - 44.0f, + layout.previewRect.height - 104.0f); + + const float buttonWidth = (layout.controlRect.width - 44.0f) * 0.5f; + const float buttonY = layout.controlRect.y + 32.0f; + layout.buttons = { + { ActionId::Reset, "重置", UIRect(layout.controlRect.x + 14.0f, buttonY, buttonWidth, 36.0f) }, + { ActionId::Capture, "截图(F12)", UIRect(layout.controlRect.x + 26.0f + buttonWidth, buttonY, buttonWidth, 36.0f) } + }; + return layout; +} + +void DrawCard( + UIDrawList& drawList, + const UIRect& rect, + const EditorValidationShellPalette& shellPalette, + const EditorValidationShellMetrics& shellMetrics, + std::string_view title, + std::string_view subtitle = {}) { + drawList.AddFilledRect(rect, shellPalette.cardBackground, shellMetrics.cardRadius); + drawList.AddRectOutline(rect, shellPalette.cardBorder, 1.0f, shellMetrics.cardRadius); + drawList.AddText( + UIPoint(rect.x + 16.0f, rect.y + 14.0f), + std::string(title), + shellPalette.textPrimary, + shellMetrics.titleFontSize); + if (!subtitle.empty()) { + drawList.AddText( + UIPoint(rect.x + 16.0f, rect.y + 40.0f), + std::string(subtitle), + shellPalette.textMuted, + shellMetrics.bodyFontSize); + } +} + +void DrawButton( + UIDrawList& drawList, + const ButtonLayout& button, + const EditorValidationShellPalette& shellPalette, + const EditorValidationShellMetrics& shellMetrics, + bool hovered) { + drawList.AddFilledRect( + button.rect, + hovered ? shellPalette.buttonHoverBackground : shellPalette.buttonBackground, + shellMetrics.buttonRadius); + drawList.AddRectOutline(button.rect, shellPalette.cardBorder, 1.0f, shellMetrics.buttonRadius); + drawList.AddText( + UIPoint(button.rect.x + 16.0f, button.rect.y + 10.0f), + button.label, + shellPalette.textPrimary, + shellMetrics.bodyFontSize); +} + +std::vector BuildListItems() { + return { + { "scene", "SampleScene.unity", "Scene | 4 分钟前修改", 0.0f }, + { "lighting", "LightingProfile.asset", "Preset | 3 个 profile", 0.0f }, + { "material", "RobotBody.mat", "Material | Metallic Workflow", 0.0f }, + { "script", "PlayerController.cs", "C# Script | 3.4 KB", 0.0f }, + { "texture", "Checker_AO.png", "Texture2D | 2048x2048", 0.0f }, + { "prefab", "Robot.prefab", "Prefab | 9 个组件", 0.0f }, + { "anim", "Walk.anim", "Animation Clip | 1.2 s", 0.0f }, + { "shader", "Outline.shader", "Shader | URP compatible", 0.0f } + }; +} + +std::string DescribeHitTarget(const UIEditorListViewHitTarget& hitTarget, const std::vector& items) { + if (hitTarget.kind != UIEditorListViewHitTargetKind::Row || hitTarget.itemIndex >= items.size()) { + return "(none)"; + } + + return items[hitTarget.itemIndex].primaryText; +} + +std::string DescribeModifiers(const UIInputModifiers& modifiers) { + std::ostringstream stream = {}; + stream << "Ctrl " << (modifiers.control ? "on" : "off") + << " | Shift " << (modifiers.shift ? "on" : "off") + << " | Alt " << (modifiers.alt ? "on" : "off"); + return stream.str(); +} + +UIInputEvent MakePointerEvent( + UIInputEventType type, + const UIPoint& position, + const UIInputModifiers& modifiers, + UIPointerButton button = UIPointerButton::None) { + UIInputEvent event = {}; + event.type = type; + event.position = position; + event.pointerButton = button; + event.modifiers = modifiers; + return event; +} + +UIInputEvent MakeKeyEvent(std::int32_t keyCode, const UIInputModifiers& modifiers) { + UIInputEvent event = {}; + event.type = UIInputEventType::KeyDown; + event.keyCode = keyCode; + event.modifiers = modifiers; + return event; +} + +UIInputEvent MakeCharacterEvent(wchar_t character) { + UIInputEvent event = {}; + event.type = UIInputEventType::Character; + event.character = static_cast(character); + return event; +} + +UIInputEvent MakeFocusEvent(UIInputEventType type) { + UIInputEvent event = {}; + event.type = type; + return event; +} + +class ScenarioApp { +public: + int Run(HINSTANCE hInstance, int nCmdShow); + +private: + static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); + + bool Initialize(HINSTANCE hInstance, int nCmdShow); + void Shutdown(); + ScenarioLayout GetLayout() const; + void ResetScenario(); + void RefreshListFrame(); + void OnResize(UINT width, UINT height); + void HandleMouseMove(float x, float y, std::size_t keyState); + void HandleMouseLeave(); + void HandleLeftButtonDown(float x, float y, std::size_t keyState); + void HandleLeftButtonUp(float x, float y, std::size_t keyState); + void HandleKeyDown(WPARAM wParam, LPARAM lParam); + void HandleKeyUp(WPARAM wParam, LPARAM lParam); + void HandleCharacter(wchar_t character); + void HandleWindowFocusLost(); + void UpdateHoveredAction(const ScenarioLayout& layout, float x, float y); + const ButtonLayout* HitTestAction(const ScenarioLayout& layout, float x, float y) const; + UIEditorListViewInteractionResult PumpListEvents(std::vector events); + void BeginRename(const std::string& itemId); + void PumpRenameEvents(std::vector events); + void ApplyRenameFrame(const UIEditorInlineRenameSessionFrame& frame); + UIRect BuildRenameBoundsForActiveItem() const; + UIRect BuildRenameBounds(std::size_t itemIndex) const; + UIEditorInlineRenameSessionRequest BuildRenameRequest(bool beginSession) const; + UIEditorTextFieldMetrics ResolveHostedTextFieldMetrics() const; + UIEditorTextFieldMetrics ResolveInlineRenameMetrics(const UIRect& bounds) const; + UIEditorTextFieldPalette ResolveInlineRenamePalette() const; + void UpdateListResultText(const UIEditorListViewInteractionResult& result); + void ExecuteAction(ActionId action); + void RenderFrame(); + + HWND m_hwnd = nullptr; + ATOM m_windowClassAtom = 0; + NativeRenderer m_renderer = {}; + AutoScreenshotController m_autoScreenshot = {}; + InputModifierTracker m_modifierTracker = {}; + std::filesystem::path m_captureRoot = {}; + Style::UITheme m_theme = {}; + std::string m_themeStatus = "fallback"; + std::vector m_items = {}; + UISelectionModel m_selectionModel = {}; + UIEditorListViewInteractionState m_listInteractionState = {}; + UIEditorListViewInteractionFrame m_listFrame = {}; + UIEditorInlineRenameSessionState m_renameState = {}; + UIEditorInlineRenameSessionFrame m_renameFrame = {}; + UIPoint m_mousePosition = UIPoint(-1000.0f, -1000.0f); + ActionId m_hoveredAction = ActionId::Reset; + bool m_hasHoveredAction = false; + UIInputModifiers m_lastModifiers = {}; + std::string m_lastCommittedItemId = {}; + std::string m_lastCommittedValue = {}; + std::string m_lastResult = {}; +}; + +int ScenarioApp::Run(HINSTANCE hInstance, int nCmdShow) { + if (!Initialize(hInstance, nCmdShow)) { + Shutdown(); + return 1; + } + + MSG message = {}; + while (message.message != WM_QUIT) { + if (PeekMessageW(&message, nullptr, 0U, 0U, PM_REMOVE)) { + TranslateMessage(&message); + DispatchMessageW(&message); + continue; + } + + RenderFrame(); + Sleep(8); + } + + Shutdown(); + return static_cast(message.wParam); +} + +LRESULT CALLBACK ScenarioApp::WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { + if (message == WM_NCCREATE) { + const auto* createStruct = reinterpret_cast(lParam); + auto* app = reinterpret_cast(createStruct->lpCreateParams); + SetWindowLongPtrW(hwnd, GWLP_USERDATA, reinterpret_cast(app)); + return TRUE; + } + + auto* app = reinterpret_cast(GetWindowLongPtrW(hwnd, GWLP_USERDATA)); + switch (message) { + case WM_SIZE: + if (app != nullptr && wParam != SIZE_MINIMIZED) { + app->OnResize(static_cast(LOWORD(lParam)), static_cast(HIWORD(lParam))); + } + return 0; + case WM_MOUSEMOVE: + if (app != nullptr) { + app->HandleMouseMove( + static_cast(GET_X_LPARAM(lParam)), + static_cast(GET_Y_LPARAM(lParam)), + static_cast(wParam)); + return 0; + } + break; + case WM_MOUSELEAVE: + if (app != nullptr) { + app->HandleMouseLeave(); + return 0; + } + break; + case WM_LBUTTONDOWN: + if (app != nullptr) { + app->HandleLeftButtonDown( + static_cast(GET_X_LPARAM(lParam)), + static_cast(GET_Y_LPARAM(lParam)), + static_cast(wParam)); + return 0; + } + break; + case WM_LBUTTONUP: + if (app != nullptr) { + app->HandleLeftButtonUp( + static_cast(GET_X_LPARAM(lParam)), + static_cast(GET_Y_LPARAM(lParam)), + static_cast(wParam)); + return 0; + } + break; + case WM_KEYDOWN: + case WM_SYSKEYDOWN: + if (app != nullptr) { + app->HandleKeyDown(wParam, lParam); + return 0; + } + break; + case WM_KEYUP: + case WM_SYSKEYUP: + if (app != nullptr) { + app->HandleKeyUp(wParam, lParam); + return 0; + } + break; + case WM_CHAR: + if (app != nullptr) { + app->HandleCharacter(static_cast(wParam)); + return 0; + } + break; + case WM_KILLFOCUS: + if (app != nullptr) { + app->HandleWindowFocusLost(); + return 0; + } + break; + case WM_PAINT: + if (app != nullptr) { + PAINTSTRUCT paintStruct = {}; + BeginPaint(hwnd, &paintStruct); + app->RenderFrame(); + EndPaint(hwnd, &paintStruct); + return 0; + } + break; + case WM_ERASEBKGND: + return 1; + case WM_DESTROY: + if (app != nullptr) { + app->m_hwnd = nullptr; + } + PostQuitMessage(0); + return 0; + default: + break; + } + + return DefWindowProcW(hwnd, message, wParam, lParam); +} + +bool ScenarioApp::Initialize(HINSTANCE hInstance, int nCmdShow) { + WNDCLASSEXW windowClass = {}; + windowClass.cbSize = sizeof(windowClass); + windowClass.style = CS_HREDRAW | CS_VREDRAW; + windowClass.lpfnWndProc = &ScenarioApp::WndProc; + windowClass.hInstance = hInstance; + windowClass.hCursor = LoadCursorW(nullptr, IDC_ARROW); + windowClass.lpszClassName = kWindowClassName; + + m_windowClassAtom = RegisterClassExW(&windowClass); + if (m_windowClassAtom == 0) { + return false; + } + + m_hwnd = CreateWindowExW( + 0, + kWindowClassName, + kWindowTitle, + WS_OVERLAPPEDWINDOW | WS_VISIBLE, + CW_USEDEFAULT, + CW_USEDEFAULT, + 1540, + 940, + nullptr, + nullptr, + hInstance, + this); + if (m_hwnd == nullptr) { + return false; + } + + ShowWindow(m_hwnd, nCmdShow); + UpdateWindow(m_hwnd); + + if (!m_renderer.Initialize(m_hwnd)) { + return false; + } + + m_captureRoot = ResolveRepoRootPath() / "tests/UI/Editor/integration/shell/list_view_inline_rename/captures"; + m_autoScreenshot.Initialize(m_captureRoot); + + const auto themeLoad = XCEngine::Tests::EditorUI::LoadEditorValidationTheme(ResolveValidationThemePath()); + if (themeLoad.succeeded) { + m_theme = themeLoad.theme; + m_themeStatus = "loaded"; + } else { + m_themeStatus = themeLoad.error.empty() ? "fallback" : themeLoad.error; + } + + m_modifierTracker.SyncFromSystemState(); + ResetScenario(); + return true; +} + +void ScenarioApp::Shutdown() { + m_autoScreenshot.Shutdown(); + m_renderer.Shutdown(); + + if (m_hwnd != nullptr && IsWindow(m_hwnd)) { + DestroyWindow(m_hwnd); + } + m_hwnd = nullptr; + + if (m_windowClassAtom != 0) { + UnregisterClassW(kWindowClassName, GetModuleHandleW(nullptr)); + m_windowClassAtom = 0; + } +} + +ScenarioLayout ScenarioApp::GetLayout() const { + RECT clientRect = {}; + GetClientRect(m_hwnd, &clientRect); + const float width = static_cast((std::max)(1L, clientRect.right - clientRect.left)); + const float height = static_cast((std::max)(1L, clientRect.bottom - clientRect.top)); + return BuildScenarioLayout( + width, + height, + XCEngine::Tests::EditorUI::ResolveEditorValidationShellMetrics(m_theme)); +} + +void ScenarioApp::ResetScenario() { + m_items = BuildListItems(); + m_selectionModel = {}; + m_selectionModel.SetSelection("script"); + m_listInteractionState = {}; + m_listInteractionState.listViewState.focused = true; + m_renameState = {}; + m_renameFrame = {}; + m_mousePosition = UIPoint(-1000.0f, -1000.0f); + m_hasHoveredAction = false; + m_hoveredAction = ActionId::Reset; + m_lastModifiers = {}; + m_lastCommittedItemId.clear(); + m_lastCommittedValue.clear(); + m_lastResult = "已重置到默认状态,准备进入 script 的 inline rename。"; + RefreshListFrame(); + BeginRename("script"); +} + +void ScenarioApp::RefreshListFrame() { + if (m_hwnd == nullptr) { + return; + } + + const ScenarioLayout layout = GetLayout(); + m_listFrame = UpdateUIEditorListViewInteraction( + m_listInteractionState, + m_selectionModel, + layout.listRect, + m_items, + {}); + + if (m_renameState.active) { + const UIEditorInlineRenameSessionRequest request = BuildRenameRequest(false); + m_renameFrame = UpdateUIEditorInlineRenameSession( + m_renameState, + request, + {}, + ResolveInlineRenameMetrics(request.bounds)); + ApplyRenameFrame(m_renameFrame); + } +} + +void ScenarioApp::OnResize(UINT width, UINT height) { + if (width == 0u || height == 0u) { + return; + } + + m_renderer.Resize(width, height); + RefreshListFrame(); +} + +void ScenarioApp::HandleMouseMove(float x, float y, std::size_t keyState) { + m_modifierTracker.SyncFromSystemState(); + m_mousePosition = UIPoint(x, y); + const ScenarioLayout layout = GetLayout(); + UpdateHoveredAction(layout, x, y); + + TRACKMOUSEEVENT trackEvent = {}; + trackEvent.cbSize = sizeof(trackEvent); + trackEvent.dwFlags = TME_LEAVE; + trackEvent.hwndTrack = m_hwnd; + TrackMouseEvent(&trackEvent); + + const UIInputModifiers modifiers = m_modifierTracker.BuildPointerModifiers(keyState); + m_lastModifiers = modifiers; + const UIInputEvent pointerEvent = + MakePointerEvent(UIInputEventType::PointerMove, m_mousePosition, modifiers); + + if (m_renameState.active) { + PumpRenameEvents({ pointerEvent }); + } else { + PumpListEvents({ pointerEvent }); + } + + InvalidateRect(m_hwnd, nullptr, FALSE); +} + +void ScenarioApp::HandleMouseLeave() { + m_mousePosition = UIPoint(-1000.0f, -1000.0f); + m_hasHoveredAction = false; + + const UIInputEvent leaveEvent = MakePointerEvent(UIInputEventType::PointerLeave, m_mousePosition, {}); + if (m_renameState.active) { + PumpRenameEvents({ leaveEvent }); + } else { + PumpListEvents({ leaveEvent }); + } + + InvalidateRect(m_hwnd, nullptr, FALSE); +} + +void ScenarioApp::HandleLeftButtonDown(float x, float y, std::size_t keyState) { + m_modifierTracker.SyncFromSystemState(); + m_mousePosition = UIPoint(x, y); + const ScenarioLayout layout = GetLayout(); + if (HitTestAction(layout, x, y) != nullptr) { + UpdateHoveredAction(layout, x, y); + InvalidateRect(m_hwnd, nullptr, FALSE); + return; + } + + const UIInputModifiers modifiers = m_modifierTracker.BuildPointerModifiers(keyState); + m_lastModifiers = modifiers; + const UIInputEvent pointerEvent = MakePointerEvent( + UIInputEventType::PointerButtonDown, + m_mousePosition, + modifiers, + UIPointerButton::Left); + + if (m_renameState.active) { + const UIRect renameBounds = BuildRenameBoundsForActiveItem(); + const bool insideRename = ContainsPoint(renameBounds, x, y); + PumpRenameEvents({ pointerEvent }); + if (!insideRename && !m_renameState.active) { + PumpListEvents({ pointerEvent }); + } + } else { + PumpListEvents({ pointerEvent }); + } + + InvalidateRect(m_hwnd, nullptr, FALSE); +} + +void ScenarioApp::HandleLeftButtonUp(float x, float y, std::size_t keyState) { + m_modifierTracker.SyncFromSystemState(); + m_mousePosition = UIPoint(x, y); + const ScenarioLayout layout = GetLayout(); + const ButtonLayout* button = HitTestAction(layout, x, y); + if (button != nullptr) { + ExecuteAction(button->action); + UpdateHoveredAction(layout, x, y); + InvalidateRect(m_hwnd, nullptr, FALSE); + return; + } + + const UIInputModifiers modifiers = m_modifierTracker.BuildPointerModifiers(keyState); + m_lastModifiers = modifiers; + const UIInputEvent pointerEvent = MakePointerEvent( + UIInputEventType::PointerButtonUp, + m_mousePosition, + modifiers, + UIPointerButton::Left); + + if (m_renameState.active) { + const UIRect renameBounds = BuildRenameBoundsForActiveItem(); + const bool insideRename = ContainsPoint(renameBounds, x, y); + PumpRenameEvents({ pointerEvent }); + if (!insideRename && !m_renameState.active) { + const UIEditorListViewInteractionResult result = PumpListEvents({ pointerEvent }); + UpdateListResultText(result); + } + } else { + const UIEditorListViewInteractionResult result = PumpListEvents({ pointerEvent }); + UpdateListResultText(result); + } + + InvalidateRect(m_hwnd, nullptr, FALSE); +} + +void ScenarioApp::HandleKeyDown(WPARAM wParam, LPARAM lParam) { + const UIInputModifiers modifiers = + m_modifierTracker.ApplyKeyMessage(UIInputEventType::KeyDown, wParam, lParam); + m_lastModifiers = modifiers; + + if (wParam == VK_F12) { + m_autoScreenshot.RequestCapture("manual_f12"); + m_lastResult = "已请求截图,输出到 captures/latest.png"; + InvalidateRect(m_hwnd, nullptr, FALSE); + return; + } + + if (m_renameState.active) { + const std::int32_t renameKeyCode = MapRenameKey(static_cast(wParam)); + if (renameKeyCode == static_cast(KeyCode::None)) { + return; + } + + PumpRenameEvents({ MakeKeyEvent(renameKeyCode, modifiers) }); + } else { + const std::int32_t keyCode = MapListKey(static_cast(wParam)); + if (keyCode == static_cast(KeyCode::None)) { + return; + } + + const UIEditorListViewInteractionResult result = PumpListEvents({ MakeKeyEvent(keyCode, modifiers) }); + if (result.renameRequested) { + BeginRename(result.renameItemId); + } else { + UpdateListResultText(result); + } + } + + InvalidateRect(m_hwnd, nullptr, FALSE); +} + +void ScenarioApp::HandleKeyUp(WPARAM wParam, LPARAM lParam) { + m_lastModifiers = m_modifierTracker.ApplyKeyMessage(UIInputEventType::KeyUp, wParam, lParam); + InvalidateRect(m_hwnd, nullptr, FALSE); +} + +void ScenarioApp::HandleWindowFocusLost() { + if (m_renameState.active) { + PumpRenameEvents({ MakeFocusEvent(UIInputEventType::FocusLost) }); + } else { + PumpListEvents({ MakeFocusEvent(UIInputEventType::FocusLost) }); + m_lastResult = "窗口失去焦点,ListView focus 已清除。"; + } + + InvalidateRect(m_hwnd, nullptr, FALSE); +} + +void ScenarioApp::HandleCharacter(wchar_t character) { + if (character < 32 || !m_renameState.active) { + return; + } + + PumpRenameEvents({ MakeCharacterEvent(character) }); + InvalidateRect(m_hwnd, nullptr, FALSE); +} + +void ScenarioApp::UpdateHoveredAction(const ScenarioLayout& layout, float x, float y) { + const ButtonLayout* button = HitTestAction(layout, x, y); + if (button == nullptr) { + m_hasHoveredAction = false; + return; + } + + m_hoveredAction = button->action; + m_hasHoveredAction = true; +} + +const ButtonLayout* ScenarioApp::HitTestAction(const ScenarioLayout& layout, float x, float y) const { + for (const ButtonLayout& button : layout.buttons) { + if (ContainsPoint(button.rect, x, y)) { + return &button; + } + } + return nullptr; +} + +UIEditorListViewInteractionResult ScenarioApp::PumpListEvents(std::vector events) { + const ScenarioLayout layout = GetLayout(); + m_listFrame = UpdateUIEditorListViewInteraction( + m_listInteractionState, + m_selectionModel, + layout.listRect, + m_items, + std::move(events)); + return m_listFrame.result; +} + +void ScenarioApp::BeginRename(const std::string& itemId) { + if (itemId.empty()) { + return; + } + + const std::size_t itemIndex = FindUIEditorListViewItemIndex(m_items, itemId); + if (itemIndex == UIEditorListViewInvalidIndex) { + return; + } + + UIEditorInlineRenameSessionRequest request = {}; + request.beginSession = true; + request.itemId = itemId; + request.initialText = m_items[itemIndex].primaryText; + request.bounds = BuildRenameBounds(itemIndex); + m_renameFrame = UpdateUIEditorInlineRenameSession( + m_renameState, + request, + {}, + ResolveInlineRenameMetrics(request.bounds)); + ApplyRenameFrame(m_renameFrame); +} + +void ScenarioApp::PumpRenameEvents(std::vector events) { + if (!m_renameState.active) { + return; + } + + const UIEditorInlineRenameSessionRequest request = BuildRenameRequest(false); + m_renameFrame = UpdateUIEditorInlineRenameSession( + m_renameState, + request, + std::move(events), + ResolveInlineRenameMetrics(request.bounds)); + ApplyRenameFrame(m_renameFrame); +} + +void ScenarioApp::ApplyRenameFrame(const UIEditorInlineRenameSessionFrame& frame) { + const auto& result = frame.result; + if (result.sessionStarted) { + m_lastResult = "已进入 inline rename: " + result.itemId; + return; + } + + if (result.sessionCommitted) { + const std::size_t itemIndex = FindUIEditorListViewItemIndex(m_items, result.itemId); + if (itemIndex != UIEditorListViewInvalidIndex) { + m_items[itemIndex].primaryText = result.valueAfter; + m_lastCommittedItemId = result.itemId; + m_lastCommittedValue = result.valueAfter; + RefreshListFrame(); + } + + m_lastResult = "已提交 rename: " + result.itemId + " -> " + result.valueAfter; + return; + } + + if (result.sessionCanceled) { + m_lastResult = "已取消 rename: " + result.itemId; + return; + } + + if (m_renameState.active && result.textFieldResult.consumed) { + m_lastResult = + "编辑中: " + m_renameState.itemId + " -> " + + m_renameState.textFieldInteraction.textFieldState.displayText; + } +} + +UIRect ScenarioApp::BuildRenameBoundsForActiveItem() const { + if (!m_renameState.active) { + return {}; + } + + const std::size_t itemIndex = FindUIEditorListViewItemIndex(m_items, m_renameState.itemId); + return BuildRenameBounds(itemIndex); +} + +UIRect ScenarioApp::BuildRenameBounds(std::size_t itemIndex) const { + if (itemIndex >= m_listFrame.layout.primaryTextRects.size() || + itemIndex >= m_listFrame.layout.rowRects.size()) { + return {}; + } + + const UIEditorTextFieldMetrics hostedMetrics = ResolveHostedTextFieldMetrics(); + const UIRect& rowRect = m_listFrame.layout.rowRects[itemIndex]; + const UIRect& primaryTextRect = m_listFrame.layout.primaryTextRects[itemIndex]; + const float x = primaryTextRect.x - hostedMetrics.valueTextInsetX; + const float y = primaryTextRect.y - 1.0f; + const float width = (std::max)(120.0f, rowRect.width - (x - rowRect.x) - 10.0f); + return UIRect(x, y, width, hostedMetrics.rowHeight); +} + +UIEditorInlineRenameSessionRequest ScenarioApp::BuildRenameRequest(bool beginSession) const { + UIEditorInlineRenameSessionRequest request = {}; + request.beginSession = beginSession; + request.itemId = m_renameState.itemId; + request.initialText = m_renameState.textFieldSpec.value; + request.bounds = BuildRenameBoundsForActiveItem(); + return request; +} + +UIEditorTextFieldMetrics ScenarioApp::ResolveHostedTextFieldMetrics() const { + const auto propertyMetrics = ResolveUIEditorPropertyGridMetrics(m_theme); + const auto textMetrics = ResolveUIEditorTextFieldMetrics(m_theme); + return BuildUIEditorHostedTextFieldMetrics(propertyMetrics, textMetrics); +} + +UIEditorTextFieldMetrics ScenarioApp::ResolveInlineRenameMetrics(const UIRect& bounds) const { + return BuildUIEditorInlineRenameTextFieldMetrics(bounds, ResolveHostedTextFieldMetrics()); +} + +UIEditorTextFieldPalette ScenarioApp::ResolveInlineRenamePalette() const { + const auto propertyPalette = ResolveUIEditorPropertyGridPalette(m_theme); + const auto textPalette = ResolveUIEditorTextFieldPalette(m_theme); + return BuildUIEditorHostedTextFieldPalette(propertyPalette, textPalette); +} + +void ScenarioApp::UpdateListResultText(const UIEditorListViewInteractionResult& result) { + if (result.renameRequested) { + m_lastResult = "收到 rename 请求: " + result.renameItemId; + return; + } + + if (result.keyboardNavigated && !result.selectedItemId.empty()) { + m_lastResult = "键盘导航到: " + result.selectedItemId; + return; + } + + if (result.selectionChanged) { + m_lastResult = "选中项已切换: " + m_selectionModel.GetSelectedId(); + return; + } + + if (result.consumed && result.hitTarget.kind == UIEditorListViewHitTargetKind::Row) { + m_lastResult = "点击行: " + DescribeHitTarget(result.hitTarget, m_items); + return; + } + + m_lastResult = "等待交互"; +} + +void ScenarioApp::ExecuteAction(ActionId action) { + switch (action) { + case ActionId::Reset: + ResetScenario(); + break; + case ActionId::Capture: + m_autoScreenshot.RequestCapture("manual_button"); + m_lastResult = "已请求截图,输出到 captures/latest.png"; + break; + } +} + +void ScenarioApp::RenderFrame() { + if (m_hwnd == nullptr) { + return; + } + + RECT clientRect = {}; + GetClientRect(m_hwnd, &clientRect); + const float width = static_cast((std::max)(1L, clientRect.right - clientRect.left)); + const float height = static_cast((std::max)(1L, clientRect.bottom - clientRect.top)); + const auto shellMetrics = XCEngine::Tests::EditorUI::ResolveEditorValidationShellMetrics(m_theme); + const auto shellPalette = XCEngine::Tests::EditorUI::ResolveEditorValidationShellPalette(m_theme); + const ScenarioLayout layout = BuildScenarioLayout(width, height, shellMetrics); + RefreshListFrame(); + + const UIEditorListViewHitTarget currentHit = HitTestUIEditorListView(m_listFrame.layout, m_mousePosition); + + std::vector renderItems = m_items; + if (m_renameState.active) { + const std::size_t activeIndex = FindUIEditorListViewItemIndex(m_items, m_renameState.itemId); + if (activeIndex != UIEditorListViewInvalidIndex && activeIndex < renderItems.size()) { + renderItems[activeIndex].primaryText.clear(); + } + } + + UIDrawData drawData = {}; + UIDrawList& drawList = drawData.EmplaceDrawList("EditorListViewInlineRename"); + drawList.AddFilledRect(UIRect(0.0f, 0.0f, width, height), shellPalette.windowBackground); + + DrawCard( + drawList, + layout.introRect, + shellPalette, + shellMetrics, + "这个测试在验证什么功能?", + "只验证 Editor ListView 的 inline rename 契约:默认直接进入编辑、字符编辑、Enter 提交、Esc 取消、点击外部提交。"); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 72.0f), + "1. 启动后默认直接进入 script 的 rename,检查输入框是否只覆盖当前选中行主文本。", + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 94.0f), + "2. 输入字符后,检查 Draft 是否实时变化,且列表原文本被 overlay 正确遮住,不应双层叠字。", + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 116.0f), + "3. 按 Enter,检查名称是否写回到对应 ListViewItem.primaryText,并关闭 rename。", + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 138.0f), + "4. 按 Esc,检查是否取消编辑并保留原文本。", + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 160.0f), + "5. rename 过程中点击输入框外部,检查是否提交当前草稿并退出编辑态。", + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 182.0f), + "6. 需要时可先按 Esc 退出,再用 Up/Down/Home/End 切换选中项后按 F2;F12 或按钮触发截图。", + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + + DrawCard(drawList, layout.controlRect, shellPalette, shellMetrics, "操作"); + for (const ButtonLayout& button : layout.buttons) { + DrawButton( + drawList, + button, + shellPalette, + shellMetrics, + m_hasHoveredAction && m_hoveredAction == button.action); + } + + DrawCard( + drawList, + layout.stateRect, + shellPalette, + shellMetrics, + "状态摘要", + "重点检查 ListView 选择状态和 rename 生命周期是否同步。"); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 70.0f), + "Hover: " + DescribeHitTarget(currentHit, m_items), + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 94.0f), + std::string("List Focused: ") + (m_listInteractionState.listViewState.focused ? "on" : "off"), + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 118.0f), + "Selected Item: " + + (m_selectionModel.HasSelection() ? m_selectionModel.GetSelectedId() : std::string("(none)")), + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 142.0f), + std::string("Rename Active: ") + (m_renameState.active ? "yes" : "no"), + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 166.0f), + "Rename Item: " + (m_renameState.active ? m_renameState.itemId : std::string("(none)")), + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 190.0f), + "Draft: " + (m_renameState.active + ? m_renameState.textFieldInteraction.textFieldState.displayText + : std::string("(none)")), + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 214.0f), + "Committed: " + (m_lastCommittedValue.empty() + ? std::string("(none)") + : (m_lastCommittedItemId + " -> " + m_lastCommittedValue)), + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 238.0f), + "Modifiers: " + DescribeModifiers(m_lastModifiers), + shellPalette.textMuted, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 262.0f), + "Result: " + m_lastResult, + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + + const std::string captureSummary = + m_autoScreenshot.HasPendingCapture() + ? "截图排队中..." + : (m_autoScreenshot.GetLastCaptureSummary().empty() + ? std::string("F12 -> tests/UI/Editor/integration/shell/list_view_inline_rename/captures/") + : m_autoScreenshot.GetLastCaptureSummary()); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 286.0f), + captureSummary, + shellPalette.textWeak, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 310.0f), + "Theme: " + m_themeStatus, + shellPalette.textWeak, + shellMetrics.bodyFontSize); + + DrawCard( + drawList, + layout.previewRect, + shellPalette, + shellMetrics, + "ListView 预览", + "这里只放一个 ListView,启动时默认直接进入 script 的 rename,便于截图和自检。" + ); + AppendUIEditorListViewBackground( + drawList, + m_listFrame.layout, + renderItems, + m_selectionModel, + m_listInteractionState.listViewState); + AppendUIEditorListViewForeground(drawList, m_listFrame.layout, renderItems); + + if (m_renameState.active) { + const UIEditorTextFieldPalette palette = ResolveInlineRenamePalette(); + const UIEditorTextFieldMetrics metrics = ResolveInlineRenameMetrics(BuildRenameBoundsForActiveItem()); + AppendUIEditorTextFieldBackground( + drawList, + m_renameFrame.layout, + m_renameState.textFieldSpec, + m_renameState.textFieldInteraction.textFieldState, + palette, + metrics); + AppendUIEditorTextFieldForeground( + drawList, + m_renameFrame.layout, + m_renameState.textFieldSpec, + m_renameState.textFieldInteraction.textFieldState, + palette, + metrics); + } + + const bool framePresented = m_renderer.Render(drawData); + m_autoScreenshot.CaptureIfRequested( + m_renderer, + drawData, + static_cast(width), + static_cast(height), + framePresented); +} + +} // namespace + +int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR, int nCmdShow) { + return ScenarioApp().Run(hInstance, nCmdShow); +} + diff --git a/tests/UI/Editor/integration/shell/list_view_multiselect/CMakeLists.txt b/tests/UI/Editor/integration/shell/list_view_multiselect/CMakeLists.txt new file mode 100644 index 00000000..c5ef8939 --- /dev/null +++ b/tests/UI/Editor/integration/shell/list_view_multiselect/CMakeLists.txt @@ -0,0 +1,31 @@ +add_executable(editor_ui_list_view_multiselect_validation WIN32 + main.cpp +) + +target_include_directories(editor_ui_list_view_multiselect_validation PRIVATE + ${CMAKE_SOURCE_DIR}/tests/UI/Editor/integration/shared/src + ${CMAKE_SOURCE_DIR}/new_editor/include + ${CMAKE_SOURCE_DIR}/new_editor/app + ${CMAKE_SOURCE_DIR}/engine/include +) + +target_compile_definitions(editor_ui_list_view_multiselect_validation PRIVATE + UNICODE + _UNICODE + XCENGINE_EDITOR_UI_TESTS_REPO_ROOT="${XCENGINE_EDITOR_UI_TESTS_REPO_ROOT_PATH}" +) + +if(MSVC) + target_compile_options(editor_ui_list_view_multiselect_validation PRIVATE /utf-8 /FS) + set_property(TARGET editor_ui_list_view_multiselect_validation PROPERTY + MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") +endif() + +target_link_libraries(editor_ui_list_view_multiselect_validation PRIVATE + XCUIEditorLib + XCUIEditorHost +) + +set_target_properties(editor_ui_list_view_multiselect_validation PROPERTIES + OUTPUT_NAME "XCUIEditorListViewMultiSelectValidation" +) diff --git a/tests/UI/Editor/integration/shell/list_view_multiselect/captures/history/20260409_001451_1_startup.png b/tests/UI/Editor/integration/shell/list_view_multiselect/captures/history/20260409_001451_1_startup.png new file mode 100644 index 0000000000000000000000000000000000000000..ae3c7e697d94eaf47b26906d660870ba5ee18c27 GIT binary patch literal 87362 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�TQ2&_z_mJ>e0&yMu+h@2f1>6%BFD zmJsyOQQTBkgBs6Eh9mTV0v*iRMzbf=T_St~A-vubEAuqP3lhUYK`oEZ97I2{ z=D3G{uS?*fWw_GKoA2UeolnC7sj60BjAbIVe6)%u+oJNSdm?#Y+(F6QaIxLRuBN6< z-sn0B~p0hA-RPL=~fR={wHb=};*grls!#0MXQz%flFI)47*Fm8?) zMoT+p0N)D=f<%U@YKn9(rZ+Yc`vj|%q@)1&BF4!QOdmduAqutH;$a`}CL$hqA(ezi4FKNOgK%N4+S;{H-#joY*qj=G{CA@+WCx-RL;4Pa+P*g`gzJ#EZ(GD+mkRLsPoMM3kIsHq{#a>{wtx$EQ8e3FAU}zVd^i= z6Mw5({bb0h?;#Icfmr!;rFb{`3`PMaC_o%3VF=jpMRjKKA~U(Wow4X?f|?&?^qQGf zv2dy%%E5~ksI)GQ@-In386gSGu5;AYYz2o{}3!gYo3z%1%pDSPT0|j9&tfoeX z1TLh|64k8AsP;-Ct5P?=-w-Na1!yh3he!6^CJwvmo!SDqDO}0d&BZ(E7erdKCY5Eo0b5hjp1}7*45&o*IY=al9 z=M?JdEXYhguB+>!)Gnu6hR%R0WU!>#H_BLAU@RYlZ`m#|F)YRG8b*{!kh&APIY&_q zwccDPxO@|nowWnA3f%p|Ws4J8w1exFelVMPVbG1xYZO2~S+XAf)of8s(L43J(QX?I zNu5e`zVx76=#@h4GL+LHG|@*hC7A;w8n=^4bgCIIBgVQPd?%-q?Nh1?XoS-s8g=8n zc@0XI7{6Csi?y;G^D%8^y!qWVa3*J2@!;QLn^&v-H&g2WoA&&tr7w05jtJUxe0ho7 Or}`mn)yxCtfBI)jPr@w# literal 0 HcmV?d00001 diff --git a/tests/UI/Editor/integration/shell/list_view_multiselect/captures/latest.png b/tests/UI/Editor/integration/shell/list_view_multiselect/captures/latest.png new file mode 100644 index 0000000000000000000000000000000000000000..ae3c7e697d94eaf47b26906d660870ba5ee18c27 GIT binary patch literal 87362 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�TQ2&_z_mJ>e0&yMu+h@2f1>6%BFD zmJsyOQQTBkgBs6Eh9mTV0v*iRMzbf=T_St~A-vubEAuqP3lhUYK`oEZ97I2{ z=D3G{uS?*fWw_GKoA2UeolnC7sj60BjAbIVe6)%u+oJNSdm?#Y+(F6QaIxLRuBN6< z-sn0B~p0hA-RPL=~fR={wHb=};*grls!#0MXQz%flFI)47*Fm8?) zMoT+p0N)D=f<%U@YKn9(rZ+Yc`vj|%q@)1&BF4!QOdmduAqutH;$a`}CL$hqA(ezi4FKNOgK%N4+S;{H-#joY*qj=G{CA@+WCx-RL;4Pa+P*g`gzJ#EZ(GD+mkRLsPoMM3kIsHq{#a>{wtx$EQ8e3FAU}zVd^i= z6Mw5({bb0h?;#Icfmr!;rFb{`3`PMaC_o%3VF=jpMRjKKA~U(Wow4X?f|?&?^qQGf zv2dy%%E5~ksI)GQ@-In386gSGu5;AYYz2o{}3!gYo3z%1%pDSPT0|j9&tfoeX z1TLh|64k8AsP;-Ct5P?=-w-Na1!yh3he!6^CJwvmo!SDqDO}0d&BZ(E7erdKCY5Eo0b5hjp1}7*45&o*IY=al9 z=M?JdEXYhguB+>!)Gnu6hR%R0WU!>#H_BLAU@RYlZ`m#|F)YRG8b*{!kh&APIY&_q zwccDPxO@|nowWnA3f%p|Ws4J8w1exFelVMPVbG1xYZO2~S+XAf)of8s(L43J(QX?I zNu5e`zVx76=#@h4GL+LHG|@*hC7A;w8n=^4bgCIIBgVQPd?%-q?Nh1?XoS-s8g=8n zc@0XI7{6Csi?y;G^D%8^y!qWVa3*J2@!;QLn^&v-H&g2WoA&&tr7w05jtJUxe0ho7 Or}`mn)yxCtfBI)jPr@w# literal 0 HcmV?d00001 diff --git a/tests/UI/Editor/integration/shell/list_view_multiselect/main.cpp b/tests/UI/Editor/integration/shell/list_view_multiselect/main.cpp new file mode 100644 index 00000000..568b1a12 --- /dev/null +++ b/tests/UI/Editor/integration/shell/list_view_multiselect/main.cpp @@ -0,0 +1,901 @@ +#ifndef NOMINMAX +#define NOMINMAX +#endif + +#include +#include +#include "EditorValidationTheme.h" +#include "Host/AutoScreenshot.h" +#include "Host/InputModifierTracker.h" +#include "Host/NativeRenderer.h" + +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef XCENGINE_EDITOR_UI_TESTS_REPO_ROOT +#define XCENGINE_EDITOR_UI_TESTS_REPO_ROOT "." +#endif + +namespace { + +using XCEngine::Input::KeyCode; +using XCEngine::Tests::EditorUI::EditorValidationShellMetrics; +using XCEngine::Tests::EditorUI::EditorValidationShellPalette; +using XCEngine::UI::UIDrawData; +using XCEngine::UI::UIDrawList; +using XCEngine::UI::UIInputEvent; +using XCEngine::UI::UIInputEventType; +using XCEngine::UI::UIInputModifiers; +using XCEngine::UI::UIPoint; +using XCEngine::UI::UIPointerButton; +using XCEngine::UI::UIRect; +using XCEngine::UI::Widgets::UISelectionModel; +using XCEngine::UI::Editor::Host::AutoScreenshotController; +using XCEngine::UI::Editor::Host::InputModifierTracker; +using XCEngine::UI::Editor::Host::NativeRenderer; +using XCEngine::UI::Editor::UIEditorListViewInteractionFrame; +using XCEngine::UI::Editor::UIEditorListViewInteractionResult; +using XCEngine::UI::Editor::UIEditorListViewInteractionState; +using XCEngine::UI::Editor::UpdateUIEditorListViewInteraction; +using XCEngine::UI::Editor::Widgets::AppendUIEditorListViewBackground; +using XCEngine::UI::Editor::Widgets::AppendUIEditorListViewForeground; +using XCEngine::UI::Editor::Widgets::HitTestUIEditorListView; +using XCEngine::UI::Editor::Widgets::UIEditorListViewHitTarget; +using XCEngine::UI::Editor::Widgets::UIEditorListViewItem; +namespace Style = XCEngine::UI::Style; + +constexpr const wchar_t* kWindowClassName = L"XCUIEditorListViewMultiSelectValidation"; +constexpr const wchar_t* kWindowTitle = L"XCUI Editor | ListView MultiSelect"; + +enum class ActionId : unsigned char { + Reset = 0, + Capture +}; + +struct ButtonLayout { + ActionId action = ActionId::Reset; + const char* label = ""; + UIRect rect = {}; +}; + +struct ScenarioLayout { + UIRect introRect = {}; + UIRect controlRect = {}; + UIRect stateRect = {}; + UIRect previewRect = {}; + UIRect listRect = {}; + std::vector buttons = {}; +}; + +std::filesystem::path ResolveRepoRootPath() { + std::string root = XCENGINE_EDITOR_UI_TESTS_REPO_ROOT; + if (root.size() >= 2u && root.front() == '"' && root.back() == '"') { + root = root.substr(1u, root.size() - 2u); + } + + return std::filesystem::path(root).lexically_normal(); +} + +std::filesystem::path ResolveValidationThemePath() { + return (ResolveRepoRootPath() / "tests/UI/Editor/integration/shared/themes/editor_validation.xctheme") + .lexically_normal(); +} + +bool ContainsPoint(const UIRect& rect, float x, float y) { + return x >= rect.x && + x <= rect.x + rect.width && + y >= rect.y && + y <= rect.y + rect.height; +} + +std::int32_t MapListNavigationKey(UINT keyCode) { + switch (keyCode) { + case VK_UP: + return static_cast(KeyCode::Up); + case VK_DOWN: + return static_cast(KeyCode::Down); + case VK_HOME: + return static_cast(KeyCode::Home); + case VK_END: + return static_cast(KeyCode::End); + default: + return static_cast(KeyCode::None); + } +} + +ScenarioLayout BuildScenarioLayout( + float width, + float height, + const EditorValidationShellMetrics& shellMetrics) { + const float margin = shellMetrics.margin; + constexpr float leftWidth = 470.0f; + const float gap = shellMetrics.gap; + + ScenarioLayout layout = {}; + layout.introRect = UIRect(margin, margin, leftWidth, 252.0f); + layout.controlRect = UIRect(margin, layout.introRect.y + layout.introRect.height + gap, leftWidth, 84.0f); + layout.stateRect = UIRect( + margin, + layout.controlRect.y + layout.controlRect.height + gap, + leftWidth, + (std::max)(260.0f, height - (layout.controlRect.y + layout.controlRect.height + gap) - margin)); + layout.previewRect = UIRect( + leftWidth + margin * 2.0f, + margin, + (std::max)(520.0f, width - leftWidth - margin * 3.0f), + height - margin * 2.0f); + layout.listRect = UIRect( + layout.previewRect.x + 22.0f, + layout.previewRect.y + 72.0f, + layout.previewRect.width - 44.0f, + layout.previewRect.height - 104.0f); + + const float buttonWidth = (layout.controlRect.width - 44.0f) * 0.5f; + const float buttonY = layout.controlRect.y + 32.0f; + layout.buttons = { + { ActionId::Reset, "重置", UIRect(layout.controlRect.x + 14.0f, buttonY, buttonWidth, 36.0f) }, + { ActionId::Capture, "截图(F12)", UIRect(layout.controlRect.x + 26.0f + buttonWidth, buttonY, buttonWidth, 36.0f) } + }; + return layout; +} + +void DrawCard( + UIDrawList& drawList, + const UIRect& rect, + const EditorValidationShellPalette& shellPalette, + const EditorValidationShellMetrics& shellMetrics, + std::string_view title, + std::string_view subtitle = {}) { + drawList.AddFilledRect(rect, shellPalette.cardBackground, shellMetrics.cardRadius); + drawList.AddRectOutline(rect, shellPalette.cardBorder, 1.0f, shellMetrics.cardRadius); + drawList.AddText( + UIPoint(rect.x + 16.0f, rect.y + 14.0f), + std::string(title), + shellPalette.textPrimary, + shellMetrics.titleFontSize); + if (!subtitle.empty()) { + drawList.AddText( + UIPoint(rect.x + 16.0f, rect.y + 40.0f), + std::string(subtitle), + shellPalette.textMuted, + shellMetrics.bodyFontSize); + } +} + +void DrawButton( + UIDrawList& drawList, + const ButtonLayout& button, + const EditorValidationShellPalette& shellPalette, + const EditorValidationShellMetrics& shellMetrics, + bool hovered) { + drawList.AddFilledRect( + button.rect, + hovered ? shellPalette.buttonHoverBackground : shellPalette.buttonBackground, + shellMetrics.buttonRadius); + drawList.AddRectOutline(button.rect, shellPalette.cardBorder, 1.0f, shellMetrics.buttonRadius); + drawList.AddText( + UIPoint(button.rect.x + 16.0f, button.rect.y + 10.0f), + button.label, + shellPalette.textPrimary, + shellMetrics.bodyFontSize); +} + +std::vector BuildListItems() { + return { + { "scene", "SampleScene.unity", "Scene | 4 分钟前修改", 0.0f }, + { "lighting", "LightingProfile.asset", "Preset | 3 个 profile", 0.0f }, + { "material", "RobotBody.mat", "Material | Metallic Workflow", 0.0f }, + { "script", "PlayerController.cs", "C# Script | 3.4 KB", 0.0f }, + { "texture", "Checker_AO.png", "Texture2D | 2048x2048", 0.0f }, + { "prefab", "Robot.prefab", "Prefab | 9 个组件", 0.0f }, + { "anim", "Walk.anim", "Animation Clip | 1.2 s", 0.0f }, + { "shader", "Outline.shader", "Shader | URP compatible", 0.0f }, + { "mesh", "Robot.fbx", "Model | 38k triangles", 0.0f }, + { "audio", "FactoryLoop.wav", "AudioClip | 44.1 kHz", 0.0f }, + { "timeline", "IntroPlayable.playable", "Timeline | 7 tracks", 0.0f }, + { "profile", "GameplayProfile.asset", "Volume Profile | 6 overrides", 0.0f } + }; +} + +std::string JoinSelectedIds(const UISelectionModel& selectionModel) { + const std::vector& selectedIds = selectionModel.GetSelectedIds(); + if (selectedIds.empty()) { + return "(none)"; + } + + std::ostringstream stream = {}; + for (std::size_t index = 0u; index < selectedIds.size(); ++index) { + if (index > 0u) { + stream << " | "; + } + stream << selectedIds[index]; + } + return stream.str(); +} + +std::string DescribeHitTarget( + const UIEditorListViewHitTarget& hitTarget, + const std::vector& items) { + if (hitTarget.itemIndex >= items.size()) { + return "(none)"; + } + + return "row: " + items[hitTarget.itemIndex].primaryText; +} + +std::string DescribeModifiers(const UIInputModifiers& modifiers) { + std::ostringstream stream = {}; + stream << "Ctrl " << (modifiers.control ? "on" : "off") + << " | Shift " << (modifiers.shift ? "on" : "off") + << " | Alt " << (modifiers.alt ? "on" : "off"); + return stream.str(); +} + +UIInputEvent MakePointerEvent( + UIInputEventType type, + const UIPoint& position, + const UIInputModifiers& modifiers, + UIPointerButton button = UIPointerButton::None) { + UIInputEvent event = {}; + event.type = type; + event.position = position; + event.pointerButton = button; + event.modifiers = modifiers; + return event; +} + +UIInputEvent MakeKeyEvent( + std::int32_t keyCode, + const UIInputModifiers& modifiers) { + UIInputEvent event = {}; + event.type = UIInputEventType::KeyDown; + event.keyCode = keyCode; + event.modifiers = modifiers; + return event; +} + +class ScenarioApp { +public: + int Run(HINSTANCE hInstance, int nCmdShow) { + if (!Initialize(hInstance, nCmdShow)) { + Shutdown(); + return 1; + } + + MSG message = {}; + while (message.message != WM_QUIT) { + if (PeekMessageW(&message, nullptr, 0U, 0U, PM_REMOVE)) { + TranslateMessage(&message); + DispatchMessageW(&message); + continue; + } + + RenderFrame(); + Sleep(8); + } + + Shutdown(); + return static_cast(message.wParam); + } + +private: + static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { + if (message == WM_NCCREATE) { + const auto* createStruct = reinterpret_cast(lParam); + auto* app = reinterpret_cast(createStruct->lpCreateParams); + SetWindowLongPtrW(hwnd, GWLP_USERDATA, reinterpret_cast(app)); + return TRUE; + } + + auto* app = reinterpret_cast(GetWindowLongPtrW(hwnd, GWLP_USERDATA)); + switch (message) { + case WM_SIZE: + if (app != nullptr && wParam != SIZE_MINIMIZED) { + app->OnResize(static_cast(LOWORD(lParam)), static_cast(HIWORD(lParam))); + } + return 0; + case WM_MOUSEMOVE: + if (app != nullptr) { + app->HandleMouseMove( + static_cast(GET_X_LPARAM(lParam)), + static_cast(GET_Y_LPARAM(lParam)), + static_cast(wParam)); + return 0; + } + break; + case WM_MOUSELEAVE: + if (app != nullptr) { + app->HandleMouseLeave(); + return 0; + } + break; + case WM_LBUTTONDOWN: + if (app != nullptr) { + app->HandleLeftButtonDown( + static_cast(GET_X_LPARAM(lParam)), + static_cast(GET_Y_LPARAM(lParam)), + static_cast(wParam)); + return 0; + } + break; + case WM_LBUTTONUP: + if (app != nullptr) { + app->HandleLeftButtonUp( + static_cast(GET_X_LPARAM(lParam)), + static_cast(GET_Y_LPARAM(lParam)), + static_cast(wParam)); + return 0; + } + break; + case WM_RBUTTONDOWN: + if (app != nullptr) { + app->HandleRightButtonDown( + static_cast(GET_X_LPARAM(lParam)), + static_cast(GET_Y_LPARAM(lParam)), + static_cast(wParam)); + return 0; + } + break; + case WM_RBUTTONUP: + if (app != nullptr) { + app->HandleRightButtonUp( + static_cast(GET_X_LPARAM(lParam)), + static_cast(GET_Y_LPARAM(lParam)), + static_cast(wParam)); + return 0; + } + break; + case WM_KEYDOWN: + case WM_SYSKEYDOWN: + if (app != nullptr) { + app->HandleKeyDown(wParam, lParam); + return 0; + } + break; + case WM_KEYUP: + case WM_SYSKEYUP: + if (app != nullptr) { + app->HandleKeyUp(wParam, lParam); + return 0; + } + break; + case WM_PAINT: + if (app != nullptr) { + PAINTSTRUCT paintStruct = {}; + BeginPaint(hwnd, &paintStruct); + app->RenderFrame(); + EndPaint(hwnd, &paintStruct); + return 0; + } + break; + case WM_ERASEBKGND: + return 1; + case WM_DESTROY: + if (app != nullptr) { + app->m_hwnd = nullptr; + } + PostQuitMessage(0); + return 0; + default: + break; + } + + return DefWindowProcW(hwnd, message, wParam, lParam); + } + + bool Initialize(HINSTANCE hInstance, int nCmdShow) { + WNDCLASSEXW windowClass = {}; + windowClass.cbSize = sizeof(windowClass); + windowClass.style = CS_HREDRAW | CS_VREDRAW; + windowClass.lpfnWndProc = &ScenarioApp::WndProc; + windowClass.hInstance = hInstance; + windowClass.hCursor = LoadCursorW(nullptr, IDC_ARROW); + windowClass.lpszClassName = kWindowClassName; + + m_windowClassAtom = RegisterClassExW(&windowClass); + if (m_windowClassAtom == 0) { + return false; + } + + m_hwnd = CreateWindowExW( + 0, + kWindowClassName, + kWindowTitle, + WS_OVERLAPPEDWINDOW | WS_VISIBLE, + CW_USEDEFAULT, + CW_USEDEFAULT, + 1540, + 940, + nullptr, + nullptr, + hInstance, + this); + if (m_hwnd == nullptr) { + return false; + } + + ShowWindow(m_hwnd, nCmdShow); + UpdateWindow(m_hwnd); + + if (!m_renderer.Initialize(m_hwnd)) { + return false; + } + + m_captureRoot = + ResolveRepoRootPath() / "tests/UI/Editor/integration/shell/list_view_multiselect/captures"; + m_autoScreenshot.Initialize(m_captureRoot); + + const auto themeLoad = + XCEngine::Tests::EditorUI::LoadEditorValidationTheme(ResolveValidationThemePath()); + if (themeLoad.succeeded) { + m_theme = themeLoad.theme; + m_themeStatus = "loaded"; + } else { + m_themeStatus = themeLoad.error.empty() ? "fallback" : themeLoad.error; + } + + m_modifierTracker.SyncFromSystemState(); + ResetScenario(); + return true; + } + + void Shutdown() { + m_autoScreenshot.Shutdown(); + m_renderer.Shutdown(); + + if (m_hwnd != nullptr && IsWindow(m_hwnd)) { + DestroyWindow(m_hwnd); + } + m_hwnd = nullptr; + + if (m_windowClassAtom != 0) { + UnregisterClassW(kWindowClassName, GetModuleHandleW(nullptr)); + m_windowClassAtom = 0; + } + } + + ScenarioLayout GetLayout() const { + RECT clientRect = {}; + GetClientRect(m_hwnd, &clientRect); + const float width = static_cast((std::max)(1L, clientRect.right - clientRect.left)); + const float height = static_cast((std::max)(1L, clientRect.bottom - clientRect.top)); + return BuildScenarioLayout( + width, + height, + XCEngine::Tests::EditorUI::ResolveEditorValidationShellMetrics(m_theme)); + } + + void ResetScenario() { + m_items = BuildListItems(); + m_selectionModel = {}; + m_selectionModel.SetSelections({ "material", "script" }, "script"); + m_interactionState = {}; + m_interactionState.listViewState.focused = true; + m_mousePosition = UIPoint(-1000.0f, -1000.0f); + m_hasHoveredAction = false; + m_hoveredAction = ActionId::Reset; + m_lastModifiers = {}; + m_lastResult = "已重置到默认多选状态"; + RefreshFrame(); + } + + void RefreshFrame() { + if (m_hwnd == nullptr) { + return; + } + + const ScenarioLayout layout = GetLayout(); + m_frame = UpdateUIEditorListViewInteraction( + m_interactionState, + m_selectionModel, + layout.listRect, + m_items, + {}); + } + + void OnResize(UINT width, UINT height) { + if (width == 0u || height == 0u) { + return; + } + + m_renderer.Resize(width, height); + RefreshFrame(); + } + + void HandleMouseMove(float x, float y, std::size_t keyState) { + m_modifierTracker.SyncFromSystemState(); + m_mousePosition = UIPoint(x, y); + const ScenarioLayout layout = GetLayout(); + UpdateHoveredAction(layout, x, y); + + TRACKMOUSEEVENT trackEvent = {}; + trackEvent.cbSize = sizeof(trackEvent); + trackEvent.dwFlags = TME_LEAVE; + trackEvent.hwndTrack = m_hwnd; + TrackMouseEvent(&trackEvent); + + const UIInputModifiers modifiers = m_modifierTracker.BuildPointerModifiers(keyState); + m_lastModifiers = modifiers; + PumpEvents({ MakePointerEvent(UIInputEventType::PointerMove, m_mousePosition, modifiers) }); + InvalidateRect(m_hwnd, nullptr, FALSE); + } + + void HandleMouseLeave() { + m_mousePosition = UIPoint(-1000.0f, -1000.0f); + m_hasHoveredAction = false; + PumpEvents({ MakePointerEvent(UIInputEventType::PointerLeave, m_mousePosition, {}) }); + InvalidateRect(m_hwnd, nullptr, FALSE); + } + + void HandleLeftButtonDown(float x, float y, std::size_t keyState) { + m_modifierTracker.SyncFromSystemState(); + m_mousePosition = UIPoint(x, y); + const ScenarioLayout layout = GetLayout(); + if (HitTestAction(layout, x, y) != nullptr) { + UpdateHoveredAction(layout, x, y); + InvalidateRect(m_hwnd, nullptr, FALSE); + return; + } + + const UIInputModifiers modifiers = m_modifierTracker.BuildPointerModifiers(keyState); + m_lastModifiers = modifiers; + PumpEvents({ MakePointerEvent(UIInputEventType::PointerButtonDown, m_mousePosition, modifiers, UIPointerButton::Left) }); + InvalidateRect(m_hwnd, nullptr, FALSE); + } + + void HandleLeftButtonUp(float x, float y, std::size_t keyState) { + m_modifierTracker.SyncFromSystemState(); + m_mousePosition = UIPoint(x, y); + const ScenarioLayout layout = GetLayout(); + const ButtonLayout* button = HitTestAction(layout, x, y); + if (button != nullptr) { + ExecuteAction(button->action); + UpdateHoveredAction(layout, x, y); + InvalidateRect(m_hwnd, nullptr, FALSE); + return; + } + + const bool insideList = ContainsPoint(layout.listRect, x, y); + const bool wasFocused = m_interactionState.listViewState.focused; + const UIInputModifiers modifiers = m_modifierTracker.BuildPointerModifiers(keyState); + m_lastModifiers = modifiers; + const UIEditorListViewInteractionResult result = + PumpEvents({ MakePointerEvent(UIInputEventType::PointerButtonUp, m_mousePosition, modifiers, UIPointerButton::Left) }); + UpdateResultText(result, insideList, wasFocused); + InvalidateRect(m_hwnd, nullptr, FALSE); + } + + void HandleRightButtonDown(float x, float y, std::size_t keyState) { + m_modifierTracker.SyncFromSystemState(); + m_mousePosition = UIPoint(x, y); + const UIInputModifiers modifiers = m_modifierTracker.BuildPointerModifiers(keyState); + m_lastModifiers = modifiers; + PumpEvents({ MakePointerEvent(UIInputEventType::PointerButtonDown, m_mousePosition, modifiers, UIPointerButton::Right) }); + InvalidateRect(m_hwnd, nullptr, FALSE); + } + + void HandleRightButtonUp(float x, float y, std::size_t keyState) { + m_modifierTracker.SyncFromSystemState(); + m_mousePosition = UIPoint(x, y); + const UIInputModifiers modifiers = m_modifierTracker.BuildPointerModifiers(keyState); + m_lastModifiers = modifiers; + const UIEditorListViewInteractionResult result = + PumpEvents({ MakePointerEvent(UIInputEventType::PointerButtonUp, m_mousePosition, modifiers, UIPointerButton::Right) }); + UpdateResultText(result, true, m_interactionState.listViewState.focused); + InvalidateRect(m_hwnd, nullptr, FALSE); + } + + void HandleKeyDown(WPARAM wParam, LPARAM lParam) { + const UIInputModifiers modifiers = m_modifierTracker.ApplyKeyMessage(UIInputEventType::KeyDown, wParam, lParam); + m_lastModifiers = modifiers; + + if (wParam == VK_F12) { + m_autoScreenshot.RequestCapture("manual_f12"); + m_lastResult = "已请求截图,输出到 captures/latest.png"; + InvalidateRect(m_hwnd, nullptr, FALSE); + return; + } + + const std::int32_t keyCode = MapListNavigationKey(static_cast(wParam)); + if (keyCode == static_cast(KeyCode::None)) { + return; + } + + const UIEditorListViewInteractionResult result = + PumpEvents({ MakeKeyEvent(keyCode, modifiers) }); + UpdateResultText(result, true, true); + InvalidateRect(m_hwnd, nullptr, FALSE); + } + + void HandleKeyUp(WPARAM wParam, LPARAM lParam) { + m_lastModifiers = m_modifierTracker.ApplyKeyMessage(UIInputEventType::KeyUp, wParam, lParam); + InvalidateRect(m_hwnd, nullptr, FALSE); + } + + void UpdateHoveredAction(const ScenarioLayout& layout, float x, float y) { + const ButtonLayout* button = HitTestAction(layout, x, y); + if (button == nullptr) { + m_hasHoveredAction = false; + return; + } + + m_hoveredAction = button->action; + m_hasHoveredAction = true; + } + + const ButtonLayout* HitTestAction(const ScenarioLayout& layout, float x, float y) const { + for (const ButtonLayout& button : layout.buttons) { + if (ContainsPoint(button.rect, x, y)) { + return &button; + } + } + return nullptr; + } + + UIEditorListViewInteractionResult PumpEvents(std::vector events) { + const ScenarioLayout layout = GetLayout(); + m_frame = UpdateUIEditorListViewInteraction( + m_interactionState, + m_selectionModel, + layout.listRect, + m_items, + std::move(events)); + return m_frame.result; + } + + void UpdateResultText( + const UIEditorListViewInteractionResult& result, + bool insideList, + bool wasFocused) { + if (result.secondaryClicked && !result.selectedItemId.empty()) { + m_lastResult = + "右键命中: " + result.selectedItemId + + " | primary=" + m_selectionModel.GetSelectedId() + + " | count=" + std::to_string(m_selectionModel.GetSelectionCount()); + return; + } + + if (result.keyboardNavigated && result.selectionChanged) { + m_lastResult = "键盘导航更新选集: " + JoinSelectedIds(m_selectionModel); + return; + } + + if (result.keyboardNavigated && !result.selectedItemId.empty()) { + m_lastResult = "键盘导航到: " + result.selectedItemId; + return; + } + + if (result.selectionChanged) { + m_lastResult = + "选集已更新: primary=" + m_selectionModel.GetSelectedId() + + " | ids=" + JoinSelectedIds(m_selectionModel); + return; + } + + if (!insideList && wasFocused && !m_interactionState.listViewState.focused) { + m_lastResult = "点击列表外空白,focus 已清除,selection 保留"; + return; + } + + if (insideList) { + m_lastResult = "点击列表内空白,只更新 hover / focus"; + return; + } + + m_lastResult = "等待交互"; + } + + void ExecuteAction(ActionId action) { + switch (action) { + case ActionId::Reset: + ResetScenario(); + break; + case ActionId::Capture: + m_autoScreenshot.RequestCapture("manual_button"); + m_lastResult = "已请求截图,输出到 captures/latest.png"; + break; + } + } + + void RenderFrame() { + if (m_hwnd == nullptr) { + return; + } + + RECT clientRect = {}; + GetClientRect(m_hwnd, &clientRect); + const float width = static_cast((std::max)(1L, clientRect.right - clientRect.left)); + const float height = static_cast((std::max)(1L, clientRect.bottom - clientRect.top)); + const auto shellMetrics = XCEngine::Tests::EditorUI::ResolveEditorValidationShellMetrics(m_theme); + const auto shellPalette = XCEngine::Tests::EditorUI::ResolveEditorValidationShellPalette(m_theme); + const ScenarioLayout layout = BuildScenarioLayout(width, height, shellMetrics); + RefreshFrame(); + + const UIEditorListViewHitTarget currentHit = + HitTestUIEditorListView(m_frame.layout, m_mousePosition); + + UIDrawData drawData = {}; + UIDrawList& drawList = drawData.EmplaceDrawList("EditorListViewMultiSelect"); + drawList.AddFilledRect(UIRect(0.0f, 0.0f, width, height), shellPalette.windowBackground); + + DrawCard( + drawList, + layout.introRect, + shellPalette, + shellMetrics, + "这个测试在验证什么功能?", + "只验证 Editor ListView 多选 contract:Ctrl/Shift 选集、右键 primary 切换、键盘范围扩展,不涉及任何业务面板。"); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 72.0f), + "1. Ctrl+左键:对单行做 add/remove,多选集合必须稳定保留。", + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 94.0f), + "2. Shift+左键:以 anchor 为起点扩展范围,primary 应切到当前点击行。", + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 116.0f), + "3. 右键命中已选集合:只切换 primary/context target,不应破坏当前多选集合。", + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 138.0f), + "4. 列表获得 focus 后按 Up/Down/Home/End;按住 Shift 时应扩展范围,不按 Shift 时应回到单选。", + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 160.0f), + "5. 点击列表外空白只清除 focus;点击列表内空白只更新 hover/focus;F12 或按钮触发截图。", + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + + DrawCard(drawList, layout.controlRect, shellPalette, shellMetrics, "操作"); + for (const ButtonLayout& button : layout.buttons) { + DrawButton( + drawList, + button, + shellPalette, + shellMetrics, + m_hasHoveredAction && m_hoveredAction == button.action); + } + + DrawCard( + drawList, + layout.stateRect, + shellPalette, + shellMetrics, + "状态摘要", + "重点检查 primary / count / ids / anchor / current / hit / result。"); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 70.0f), + "Hover: " + DescribeHitTarget(currentHit, m_items), + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 94.0f), + std::string("Focused: ") + (m_interactionState.listViewState.focused ? "on" : "off"), + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 118.0f), + "Primary Selected: " + + (m_selectionModel.HasSelection() ? m_selectionModel.GetSelectedId() : std::string("(none)")), + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 142.0f), + "Selected Count: " + std::to_string(m_selectionModel.GetSelectionCount()), + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 166.0f), + "Selected IDs: " + JoinSelectedIds(m_selectionModel), + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 190.0f), + "Anchor ID: " + (m_interactionState.selectionAnchorId.empty() + ? std::string("(none)") + : m_interactionState.selectionAnchorId), + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 214.0f), + std::string("Current: ") + + (m_interactionState.keyboardNavigation.HasCurrentIndex() + ? std::to_string(m_interactionState.keyboardNavigation.GetCurrentIndex()) + : std::string("(none)")), + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 238.0f), + "Modifiers: " + DescribeModifiers(m_lastModifiers), + shellPalette.textMuted, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 262.0f), + "Result: " + m_lastResult, + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + + const std::string captureSummary = + m_autoScreenshot.HasPendingCapture() + ? "截图排队中..." + : (m_autoScreenshot.GetLastCaptureSummary().empty() + ? std::string("F12 -> tests/UI/Editor/integration/shell/list_view_multiselect/captures/") + : m_autoScreenshot.GetLastCaptureSummary()); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 286.0f), + captureSummary, + shellPalette.textWeak, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 310.0f), + "Theme: " + m_themeStatus, + shellPalette.textWeak, + shellMetrics.bodyFontSize); + + DrawCard( + drawList, + layout.previewRect, + shellPalette, + shellMetrics, + "ListView 预览", + "这里只放一个 ListView。默认状态下已选中 material + script,方便直接检查多选 contract。"); + AppendUIEditorListViewBackground( + drawList, + m_frame.layout, + m_items, + m_selectionModel, + m_interactionState.listViewState); + AppendUIEditorListViewForeground(drawList, m_frame.layout, m_items); + + const bool framePresented = m_renderer.Render(drawData); + m_autoScreenshot.CaptureIfRequested( + m_renderer, + drawData, + static_cast(width), + static_cast(height), + framePresented); + } + + HWND m_hwnd = nullptr; + ATOM m_windowClassAtom = 0; + NativeRenderer m_renderer = {}; + AutoScreenshotController m_autoScreenshot = {}; + InputModifierTracker m_modifierTracker = {}; + std::filesystem::path m_captureRoot = {}; + Style::UITheme m_theme = {}; + std::string m_themeStatus = "fallback"; + std::vector m_items = {}; + UISelectionModel m_selectionModel = {}; + UIEditorListViewInteractionState m_interactionState = {}; + UIEditorListViewInteractionFrame m_frame = {}; + UIPoint m_mousePosition = UIPoint(-1000.0f, -1000.0f); + ActionId m_hoveredAction = ActionId::Reset; + bool m_hasHoveredAction = false; + UIInputModifiers m_lastModifiers = {}; + std::string m_lastResult = {}; +}; + +} // namespace + +int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR, int nCmdShow) { + return ScenarioApp().Run(hInstance, nCmdShow); +} diff --git a/tests/UI/Editor/integration/shell/tab_strip_basic/captures/history/20260408_182141_1_startup.png b/tests/UI/Editor/integration/shell/tab_strip_basic/captures/history/20260408_182141_1_startup.png new file mode 100644 index 0000000000000000000000000000000000000000..09108189fa05c8e6a480ed8c27640373611ff853 GIT binary patch literal 59812 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
L%1W_a)K{Ph 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�)0q!Mco42Y2NRlk)__c&?D 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

K4 zi%=Vn>^KD%h(wwKNmMp4ANXtw_k^Z3!qzG7SRxeG;eQuVXM6Et{BN!6wFBD8r~7J; ziNv_l^qqb(c)?G5oI98kPk@vzvm;q3 zmr-(boIwFZ#y|S;wR0q%h<*P2c~la$j|q+jFgSvzN>v%b3)%1JD9OBL4N-oEM#yIm zys<;)RXQ~kj-&7;1`-+Y`@&>hrEcH89sJ;dKL&sTCu#s*irDJF)F_li&g|Y4ogDrS z>S7>5yN}qjvarygm;!{jL~!$5%A5!X7j$>T^?X&;)jPoNBiRo;rkqslAV2yzKc5TZ zS;BQy6%}GoC-#CK?~~Zr=z;=nRNgcQ6GIgy=PrxmbqfQ*J|sS3t^x2Eo5JV-FT}TS zj5#q}o3OCWpwI$G7<9-JK88KV@hOA8o;r}Vhc)(v6Wkzwvf}0|M~NGu^0=S|1ySjK z6O+X73vh%WctJ#Uc3hPemBhpb0TSL5xf!o{srOZdYDIV-4}A zNAt$`p=N{nRGXHJ7Qw(Gl4bg{%Lzqpw1ABFk=ku2+{48{EJXC=ehk(UuO0Ug+?d{% zQCLdrzABa+=?3am(jK5~p3YPRH5=~Fc1$^3qjjTAhwf~aj1a}m2~uqtVXOeouk86k zv`Je2fNc84NLWlvGjPr9X3P$v1e?h2xp2wL$l7iRx&wC=28@VdDT1<$rR>WgV6KpU zp-v{roPGOnVAbQCoKsCARxjU?9SeEUwWR(RQa0eb-B9LnTuQbbCJN_42eqz3P^}&A zf2^nKg$+oIBbI=u;X|bx7`7)IfD&l!VUtVP4Xp+73U$!Qds)HDQ-`vim}&zuw>u0< zmc~tNf)WpkvIttFKi8oD82AGc+xxJ=Nktc`USNT{K%(10+-QOvDF8GiLMR9(D8;CV zhPI9@3e|8I6Iz!C&eYq7;;SG6L_lniYg7Bi##TY4hNy|hEIKH@qo;_rrn`HQc9H({ zKiXr)2<=&U96G7Ujv`C+#D|4U|YI zvFD*K0)rsXIEI{P^uQc=asJ(YMMWC$QMUuh)P0UZU|J|2HCf{@+vuHc9=QR9V9Y%X z-!&{bhtEpx{RmSzA?7MX}I8L;8 za6A=pr?-4#52S2|;35{`AT~XAcr9FLm;q8%3r`iEH*ri1xGB;IM1G=fi^#AeC?)Y9 z2`I4SjF$T^wy4j3q^-rtKouta=3@^wPG>BWMlGXosHLqZAI=A~ZE{^xM%|fWMPXKO zFm4qXmFHe8b+(_?;8co}+V5-~xqHu^?yGb>#h4dkheX;Z2_j2+ktiTG1E=-2d1zQz z{N4*7xh#P!jZTgY4Jj8i7X3wnU&IOC0~)YzL&L+Q_vSikkm@fmn#76Uny+6cDt*ExL(^l5>r0848K-YSawE zw#8-c=oXM?6>kCWe+MWIgnL9v0x6r1hItTG5^S8GKYN1gqPVxp7h)zzmWI^cOG>VT zXNf)ay?K)7AJ=bCb~p19V|}|~tK&Eyg50;l!UpT-oZx)mk~yfVS^?h=~fEveej)RdRJLOK|XCsvBpx6XY44#;AkglsFL7+Y?+fp2{MXavjm!1{oP$dyPZ&A9;o* zE4dNTT`5HQzc$@M{DA*sym*qXazC^^@eJI71P#VuI=^+5LR27|;R>|3aG >8yV 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
L%1W_a)K{Ph zbLPV-pFgue9rT`8Pu9Vqh#}`-U%#)fk92okRyvLI)LAY#C>0_ashOFlU>*EMQUR{2 zEQC%hrF#BZZDyW?gvhj3dE5aAz(XSEdXo6|uV)2>OP$__&&1ZhUn|JMLsf44xPRxt zgSS2SCr-3}YJ~0jYU919wZA_j*<7()9fD+RxOrjEKi9u~`!=8v z+@JN>4+%|#%k$_}hr;SHh&nwWt2r~j=DixC=c1Z|WNpw0;V^j_XsF@dBc001;@WSk z*$)v3egoRY#`ZSb`SUoC$85_KxzC=WqM{m`ob-c4k6g*pfag$GmrwlRMykU4apQ*W zt_MhufBJlHodJB8l$3n$xF{yzzGW$Pu+cNGADfYJWpSj6o>M)iS3K0LA%Jvk6m+3R zAg~U4d8VClVUSHGYJKqvQa^GU(gOAC2DNeeRvN)WWo2LVs24qo&*a=wPa+jU$#JcLp@o*qkkFV-8^eB;Iq;09kI z9|j}(c=DX!NfMGqV3#BotPRS%u4&>CKs!UAGE7WO4cyxxqZf7Jg2PX+7^ZN{M0@@V z6aBBvngRoQ7Rf)e$vb_yUSGm-86>ZUzkF#=>hn_E`VI}3Ky5dCz@Yeaz9J$lJ^IbGhNd_evFKaWI^{( z4@LfVg5R@2d0DmQL!az9w&Zf|p8GHBrTzgGSuCF_vY4=hmHfQfbqwkwW^d|#mOExH zJ)sg4W)`2$-gPnO!!CyJ;PHF@aoC@gldOk6R`1=<%!ez1Q1&|V9` zSrbR3_CTC9Ov7>KZFWSE3U|sq$-fEqBzDBv$qCsh7i{rBo>@05Z3|BA5~d<>L+TA4 zA(=jGt;>45Q1{44I4Qj#^5ZSy*ZnyQT!Td3LvlrWBO+xNO6GLmMMmdBNO37+I9nv-u%#0obCMG6{ zSy>MlACP(PzV{CP@#CRmo`Rd3$m=(6kiw{8fLc*3(aX36(l_Pl)Bdoz2B3bb%y@ls^ENaAw&!$MhK`$|OY#Q?x(mbZ!=XDiIA=p{AEJRfZk6;+EGeY_RqLC7FJhP;vKhyat&X{`5pEDU58K7g}0;vUYj1M}qAWYUlC9D(GobbxD zH%%D?`3VrqpiLw2`5`|Nkk|P`{ZX!s@AE#0y9>e%LniZ`nlgqnHk?;t_xLd_8G|rO zn{3ebkcq3Npwz+LvP_Zh6RAsvI?(NKj1PYK^2dq6dADUu1yZ)3V5kz$%*g2K>S96b zWZB%j`JC&;Du{O??_N_ZxX<@qe*D}BN@@P7-kh3}rNR<)wo_?|tmC6cXOfbVj8C3| zgGi(2p$yco6N&D@!C=^>!L1Cyw2AdjNoQicCW-mQ#kUKWe{+Vvc=?i82Vlmd?$QC9%a;2|D2#?2ZyS{mNQuUvhHD;1refbJ|qzUW($; zxib6+BRRCGQQ^c5l<(qjOP^r9JT0xX&L}hqF*mZK{JNRY<`p3amJUqmzjQ>4zOXk| zQ_N(PlcUDwQsevI)loE?+S?bjt!qADpC_|uE)zMF(UQG=I}x^8H$-L+lqlCP588f} zJu~syuNXZbll;>ik>|Le2Aw5kh4n^i#nMF`u6w#jYS`K6QMB7y9Mq~F2`PcCtcT!> zeE&Z1XeZ*R_Tx3v-n&onKVCH=I3`;{HM^u>kyr&t4-Gmx&pH65$ASrBQxl@o4mZyO;UyUoq2FUtd(=w$yFm$|qWXXa}YsRX!eew8MM)4gqJxdWwO z#lEYDr6m^tQ}xcoDH&PW3FtB1diap)l0poT8Ll8Uv%H)RwK8ZLj}y-H5He)BNqfu< z>Zebi^3OiCvbwFJ^2U15b}@*M*+Z#gA%wR&vh8Yg`-dCPE&+pG9rGifcqPa5%7n+z z$msYdct$O3xG#7=Dp%@HLE5iJegs7j4+Uk4FH#K2%gfux3R?d3;jP}eiN+fKvhiA{ z2fY9Vv=EqWo=U~X_9w>1#z-bYwiSgWasc65P$(h!P-xVH8VW&|l{!K|_O9OE&lWXJ zAvBWadE*sr)t4%a|W6*4dH-?;>lp}sPDS3#Oot+KT>8nL< z)urKwZE2pM#)l|M?Bcs`ElL|0ocG#kV4i@+MgxTW^csLncXzjMef>>i6O&d?gQ>mI zqiO@p&%r`dqdyyS2wFNcBk(bO$jQakh)8sk@ZvYp&m0|#+Z?~Qwn~FO8#4pftE8ht zS~$qH?FcL!xGLyMfhj4Mkgmng3g_IIf$f?jPbjU%puW9x|Nfi3G^qMJ#nwq+uSj|I zq2Bu%$n0e%tRPnTun4oeKI1s^SWWFL=!n`178aa`zikc)UWDtbTW!O&v0c1)+uBr0 z3I&A*Nknopvo`~~LJXgn4YS9JG}2{uJc3JCSxupOcjnAibG z=#4<^R{t#ICc|aCxg>uRicQd|10WcZyX+)_r4B&f2?`5qVv7)aKDz%~NZ4&7O=a)% zmoIgef^7@!O4&eY;yu<*LN~~6bN&&7mL?x7*KwgGp$Z2stWVXuAR>h;)V79jYK9zB9?-6Qr? z%G%LU=KE1x($Go}8-Zrav-`~_F`f{M1G#$5Krl|dX>Ig$BZU6TH$QTO5t{8RKsV}d zLAp?U)C@ivIX%62^&@8cpHX?h&c1@VgH&%w*8>(T($T-Ev;THFu~jQEwgz*Vlk?5G zihF&zVZO#xc{=$ZXYa;yakmW)fJ=u-8FD%2Vt32|Lk(oFtzTlcV?K+!Y34RI@5SYB zw-Ct*M@L0n8t{gSys@7`TRw^A?N zvyBn9!-dE#-vsLg67F!e)3mBN+E`09n_F61r291EAjQnj&pR}4LU1}XPXUveu34C$ zr(j~@89ilq&>OcjWH&Ua3%Tu!=vjprVc+s{k@r{$$9YxECJR&saLVi}`=zFD0gI%d zrM>LVQ87%2C=6ip(6{v{7s*XdO0wOURlcDh&WTU$f-uvSs(ki^g~X&>CF z-P+V$=%(YLG&MDCL6Sy@@Y#?PAfV%*ki&uU0m)dWeG){P8@zVhD4{=WGz)wv51C}1t1ffGdW>V?BL?5{?6%RGB_ZEWX8KLEL3ZLJj290%jg zfiS7cU#A7Mp?cqCjY(7;Xcr$F;V|@wc@TpMLqx6KJOQrz8rKB`TGxmtW=3r{e#AmL zIvhRP^DgkO1tPk-IiNQQnElm{Tp|c67VT;e+MZO!_nXgC<)c$LIVtGrLtNK?Lq^Ag z^05D1o=4k7Nf| z0&H3B&g$ekOpPhkIKEQ6+a6*Q65kvc>_0~A!&(FsHF9!@6* zCnv-eB8Boa6hUeAxIQT*g+Owrj-2GachDM+?3asApz48jN!>i#`})$*_RtoHdw}Q9 z_Efx!J*nZOFfwB8<3pIrVQGcE55<_gb__f~%?j`xpJ)mpBq8XGmy7_ugJeFr2&Se= z*LCBQC%Lg+&c)$5Td_@sbzqz_c7I8A7UIcvNKz6G!|IIW5iMlq@`p4-o#}gPNRn!k zs!mRBu#GO-L(Cv9Q0h;6eS#woYUP(x!o}DT1nYlmKdyAS8qOqcUTQNYOrQut8vuM8 zKTA%(`iJXJsQ`Q&X5Lk-iwFvy?Mab;)AM_3Y7Da74!{$i&4}3Bs3>Uu<3&gw3hy5r z#KMW`u)}&CfC#dzT5pIQDhB8g)HdZ-E|`Kfi;^?|=a4kWBROaf6O%8C?bi7k6x7to z3z$O?b0^DY;u?V5`vQ{$$&qw)x5F94P!Gre`3ET5-8GXKNpB`SuicAaGzkx6aw8%a z-=LV7Jl;rHt~a>`Tc56(lKt+84WYgEBmr8LkkjixbaC7(&CMkTm7ocLACc}5%@H~q zAPzOaZ+7XP(5vWsB2?1p6 zwWXwL^LP!eaxo{dyKT~mTgvyc3(}cxP?SJufToHm8VY>+l)3ziMCtc4A!`)k*jt6b zB)fn}LkzaqpSZ?ops%BYNnm14@eGR7Nabp8Xp@0A^xibkeO_KY?~eV`kk5mfYUl@` z))$PP_FF4j$dQn-Dfx}#ZnzKinWI&XCeURvCNZ<0>t_kbWqYazN(ir$+i+fY35rXw z8ijse%XU{$;+8K6L6-tD$v?EUw!U(F9hQb=-9iiZpUCIh)VQuG$3gy^I=-*tSwi6K z)8V_~-o4wlb`rGRIW~!e64L;>Ox8j(o`Y<|D<=*}4mt`q= zLfP4L@>u_nb-Hi6Q|9zY<#YP9u?tD&I-gt62%x-4wClG;j-;aj?}Gt^S?e5X8iFs- z<z(6UC={%u9xe(->VEBqnb;+*h4 z*tU}M^C>|d0rhU+Krs@056raufBujSGfQIzpwn*)7G03;+27alf@zcT0W9l29vH!15{s4sk#xT31gFdtF18s>L4E^rA=JoO<#K|<^9 z6BjH1Wh_^Fxv4!FSTA@pprM*1#CFT*uQ9g#ecDB?b1Xepj=cCSG7TRq;?~*1&__Nl zdu}#@(O}X$Re=frYt43~`umb3cUkb6A?yPJ*v;5x+ zWwoI@Ir;*zg>>ifQ5~8gYCk+&d+zM;eE)y<0{^`h`1AkHLi~SvnS`C4-2v2MkXZd- z@kB&KdX@biLXQgg2j~!B&{50MNF*abS&mfFwzs$c1b>_eF)9)ayWm}65f#-E@&E%9 z;z7EhXRtZnhctXZRPR-8K+MB%P=lU7$8~(Gs;!+xW?ul^ZdElk+;G8;mKG)USNHDS zGv0G4ki@CAMlWmyD~q}pa06rl)ef}w47P5PnrVje0H^tCh2V^JbBz!TvFfP-0G zj`l~K3S!%XBDbvaH;xY!J~XU# zY2+hW=_JvddUwVy;<3mzw>rObNw}h*EwW9@`W-;|8z;eK?F&9u)XfrB-K0lnjR#a7G zm0;A+=jKY)GI}?s-xSsj+?418hG$KfU1cSuvECd_FsKlsvb4|&jMJ|(r-Pj+wy?v5 zD20JEu>ajC9@jtg0fVSyZ2&3#)E?5-0~>Qg4Je){6w5V*!dGteAy53LB7F>0SEjw^lFN#j!Vy$EP55Fk}J z!`9ZY&E)P(yy<^tQl?DU&Py>l2}BNLYXu@<^Z7GAqU9d6X+3G z3wuc0Iy+(AHS%#`LH)oj2hT$cfna0Mht4m*2N)Ph!NKDTS6rqGnFMwJa2*}e z(1ry?`9RZ^6>OJrx8TnG`pgBi15$fe&Y|MG4_z_;nQ|%jCaGX*S;@2XFA2;XI;D6K zSB_H3`mdD(F|Q7k>~k@+nEKNW|M}c?RMXF#}o+ zY}GpT-D1Rh+pQFA<-@ONW#g(otz0ym*pKZm*@aZR3VF3{JE<4PvI0GmFA#DI#pTkU!+alO3K(9F$rS21=i=G!bxA{T66A!x! z{=(-l=rZ5ojop;O=I8S0otxdKh^KDr?`WR=rLvHnIc!}d=16N>)C@`q;=IrYLBzhI zm+BgXLo7!(D+i<3M|^5b5V4k5|rN{!A?mf>QkiJa|>imOfm#=LEW* z$&rc`hkhe;p<^-f;m1viK}I0}2M`B&SqH0<;QZtHyO$}fT;{F!#-!=pLx@vHJTTgTOlAlnB>e0*$&>FN&P(Q!a`)L%e4=pR!zt)K6d;~O?Da9??rH=r z=C+yKY|7f&i>E)+z39w|O4M=gev(siQ7>IDJNy*1AKSQ`-rC@d^-37V;t0noLfg}U zE=OGP6fv<9R8MO=%AHTSH}@Y!AXccyLo$0d>hS~B&dy7iyRtY1${)D5HUaxqei}uL zzfqK^gJp`f_K_}Y75sp5g`SYh?)3XUWgjXQ$)o*sm!pGin_V|vzJKOmlJ>e0pN7uK zQ($zwwOwerS#@vUa(MO&wyqQ~2S6TXq$Z*2)c~_31H0RSiKrWn#S4Fb;db@P(E4Zq z?=q4$g4fxXTN49nb88OE_qSiM$x$HAP;$8y4mXaM@q?KrQh@7y5jf$t3K$8iyqLFd zr>>7+?t2JIN{&8_*}6F74jzSqZM0JjILih*kV%;WlQ#Xr!IeqoBMo%eMCyU<+jWYD z#_OyOr@u&q-hA{3*u4scI3f~UeOj#f>hV&BO@i?}O?KC!Mx3BNqx^ z&_TXFEfu^VKqm>vHJJJ6XVKF)J=bCVewJ88TmMwT`%|Y0*Z5o1T)+Y?r^B2)W)H}W zF6w|lUUF8~?mNSj@%#6aTDzR7-@jRfgw*?YUP$X$D!T2sQ`wU@_G~Ey8(9J3aR_qI zpWmw5DuxBX$e&EM5}@PN&9NSFsqb^Gf`&_$UX3on&eFHGQWaIzDF-%~$vb{5*);G= zskzr>h(|WvM@*7PHiC3Oy8>1#&8Syhhgzh�)0q!Mco42Y2NRlk)__c&?D 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

K4 zi%=Vn>^KD%h(wwKNmMp4ANXtw_k^Z3!qzG7SRxeG;eQuVXM6Et{BN!6wFBD8r~7J; ziNv_l^qqb(c)?G5oI98kPk@vzvm;q3 zmr-(boIwFZ#y|S;wR0q%h<*P2c~la$j|q+jFgSvzN>v%b3)%1JD9OBL4N-oEM#yIm zys<;)RXQ~kj-&7;1`-+Y`@&>hrEcH89sJ;dKL&sTCu#s*irDJF)F_li&g|Y4ogDrS z>S7>5yN}qjvarygm;!{jL~!$5%A5!X7j$>T^?X&;)jPoNBiRo;rkqslAV2yzKc5TZ zS;BQy6%}GoC-#CK?~~Zr=z;=nRNgcQ6GIgy=PrxmbqfQ*J|sS3t^x2Eo5JV-FT}TS zj5#q}o3OCWpwI$G7<9-JK88KV@hOA8o;r}Vhc)(v6Wkzwvf}0|M~NGu^0=S|1ySjK z6O+X73vh%WctJ#Uc3hPemBhpb0TSL5xf!o{srOZdYDIV-4}A zNAt$`p=N{nRGXHJ7Qw(Gl4bg{%Lzqpw1ABFk=ku2+{48{EJXC=ehk(UuO0Ug+?d{% zQCLdrzABa+=?3am(jK5~p3YPRH5=~Fc1$^3qjjTAhwf~aj1a}m2~uqtVXOeouk86k zv`Je2fNc84NLWlvGjPr9X3P$v1e?h2xp2wL$l7iRx&wC=28@VdDT1<$rR>WgV6KpU zp-v{roPGOnVAbQCoKsCARxjU?9SeEUwWR(RQa0eb-B9LnTuQbbCJN_42eqz3P^}&A zf2^nKg$+oIBbI=u;X|bx7`7)IfD&l!VUtVP4Xp+73U$!Qds)HDQ-`vim}&zuw>u0< zmc~tNf)WpkvIttFKi8oD82AGc+xxJ=Nktc`USNT{K%(10+-QOvDF8GiLMR9(D8;CV zhPI9@3e|8I6Iz!C&eYq7;;SG6L_lniYg7Bi##TY4hNy|hEIKH@qo;_rrn`HQc9H({ zKiXr)2<=&U96G7Ujv`C+#D|4U|YI zvFD*K0)rsXIEI{P^uQc=asJ(YMMWC$QMUuh)P0UZU|J|2HCf{@+vuHc9=QR9V9Y%X z-!&{bhtEpx{RmSzA?7MX}I8L;8 za6A=pr?-4#52S2|;35{`AT~XAcr9FLm;q8%3r`iEH*ri1xGB;IM1G=fi^#AeC?)Y9 z2`I4SjF$T^wy4j3q^-rtKouta=3@^wPG>BWMlGXosHLqZAI=A~ZE{^xM%|fWMPXKO zFm4qXmFHe8b+(_?;8co}+V5-~xqHu^?yGb>#h4dkheX;Z2_j2+ktiTG1E=-2d1zQz z{N4*7xh#P!jZTgY4Jj8i7X3wnU&IOC0~)YzL&L+Q_vSikkm@fmn#76Uny+6cDt*ExL(^l5>r0848K-YSawE zw#8-c=oXM?6>kCWe+MWIgnL9v0x6r1hItTG5^S8GKYN1gqPVxp7h)zzmWI^cOG>VT zXNf)ay?K)7AJ=bCb~p19V|}|~tK&Eyg50;l!UpT-oZx)mk~yfVS^?h=~fEveej)RdRJLOK|XCsvBpx6XY44#;AkglsFL7+Y?+fp2{MXavjm!1{oP$dyPZ&A9;o* zE4dNTT`5HQzc$@M{DA*sym*qXazC^^@eJI71P#VuI=^+5LR27|;R>|3aG >8yV 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
L%1W_a)K{Ph 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�)0q!Mco42Y2NRlk)__c&?D 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

lZVaIWjBLS$IouQ?1v61btg+6xuq@<*h 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 literal 0 HcmV?d00001 diff --git a/tests/UI/Editor/integration/shell/tree_view_multiselect/captures/history/20260409_001800_1_startup.png b/tests/UI/Editor/integration/shell/tree_view_multiselect/captures/history/20260409_001800_1_startup.png new file mode 100644 index 0000000000000000000000000000000000000000..c8a5ec979793d626304f3493ba19c586ac573922 GIT binary patch literal 85123 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 Ud@Xm4+@99HgL@zD`St970M4J(HUIzs literal 0 HcmV?d00001 diff --git a/tests/UI/Editor/integration/shell/tree_view_multiselect/captures/latest.png b/tests/UI/Editor/integration/shell/tree_view_multiselect/captures/latest.png new file mode 100644 index 0000000000000000000000000000000000000000..c8a5ec979793d626304f3493ba19c586ac573922 GIT binary patch literal 85123 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 Ud@Xm4+@99HgL@zD`St970M4J(HUIzs literal 0 HcmV?d00001 diff --git a/tests/UI/Editor/integration/shell/tree_view_multiselect/main.cpp b/tests/UI/Editor/integration/shell/tree_view_multiselect/main.cpp new file mode 100644 index 00000000..d25ed0ae --- /dev/null +++ b/tests/UI/Editor/integration/shell/tree_view_multiselect/main.cpp @@ -0,0 +1,971 @@ +#ifndef NOMINMAX +#define NOMINMAX +#endif + +#include +#include +#include "Host/AutoScreenshot.h" +#include "Host/NativeRenderer.h" + +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#ifndef XCENGINE_EDITOR_UI_TESTS_REPO_ROOT +#define XCENGINE_EDITOR_UI_TESTS_REPO_ROOT "." +#endif + +namespace { + +using XCEngine::Input::KeyCode; +using XCEngine::UI::UIColor; +using XCEngine::UI::UIDrawData; +using XCEngine::UI::UIDrawList; +using XCEngine::UI::UIInputEvent; +using XCEngine::UI::UIInputEventType; +using XCEngine::UI::UIInputModifiers; +using XCEngine::UI::UIPoint; +using XCEngine::UI::UIPointerButton; +using XCEngine::UI::UIRect; +using XCEngine::UI::Widgets::UIExpansionModel; +using XCEngine::UI::Widgets::UISelectionModel; +using XCEngine::UI::Editor::Host::AutoScreenshotController; +using XCEngine::UI::Editor::Host::NativeRenderer; +using XCEngine::UI::Editor::UIEditorTreeViewInteractionFrame; +using XCEngine::UI::Editor::UIEditorTreeViewInteractionResult; +using XCEngine::UI::Editor::UIEditorTreeViewInteractionState; +using XCEngine::UI::Editor::UpdateUIEditorTreeViewInteraction; +using XCEngine::UI::Editor::Widgets::AppendUIEditorTreeViewBackground; +using XCEngine::UI::Editor::Widgets::AppendUIEditorTreeViewForeground; +using XCEngine::UI::Editor::Widgets::HitTestUIEditorTreeView; +using XCEngine::UI::Editor::Widgets::UIEditorTreeViewHitTarget; +using XCEngine::UI::Editor::Widgets::UIEditorTreeViewHitTargetKind; +using XCEngine::UI::Editor::Widgets::UIEditorTreeViewInvalidIndex; +using XCEngine::UI::Editor::Widgets::UIEditorTreeViewItem; +using XCEngine::UI::Editor::Widgets::UIEditorTreeViewLayout; + +constexpr const wchar_t* kWindowClassName = L"XCUIEditorTreeViewMultiSelectValidation"; +constexpr const wchar_t* kWindowTitle = L"XCUI Editor | TreeView MultiSelect"; + +constexpr UIColor kWindowBg(0.13f, 0.13f, 0.13f, 1.0f); +constexpr UIColor kCardBg(0.18f, 0.18f, 0.18f, 1.0f); +constexpr UIColor kCardBorder(0.29f, 0.29f, 0.29f, 1.0f); +constexpr UIColor kTextPrimary(0.94f, 0.94f, 0.94f, 1.0f); +constexpr UIColor kTextMuted(0.72f, 0.72f, 0.72f, 1.0f); +constexpr UIColor kTextWeak(0.56f, 0.56f, 0.56f, 1.0f); +constexpr UIColor kTextSuccess(0.63f, 0.76f, 0.63f, 1.0f); +constexpr UIColor kButtonBg(0.25f, 0.25f, 0.25f, 1.0f); +constexpr UIColor kButtonHoverBg(0.32f, 0.32f, 0.32f, 1.0f); + +enum class ActionId : unsigned char { + Reset = 0, + Capture +}; + +struct ButtonLayout { + ActionId action = ActionId::Reset; + const char* label = ""; + UIRect rect = {}; +}; + +struct ScenarioLayout { + UIRect introRect = {}; + UIRect controlRect = {}; + UIRect stateRect = {}; + UIRect previewRect = {}; + UIRect treeRect = {}; + std::vector buttons = {}; +}; + +std::filesystem::path ResolveRepoRootPath() { + std::string root = XCENGINE_EDITOR_UI_TESTS_REPO_ROOT; + if (root.size() >= 2u && root.front() == '"' && root.back() == '"') { + root = root.substr(1u, root.size() - 2u); + } + + return std::filesystem::path(root).lexically_normal(); +} + +bool ContainsPoint(const UIRect& rect, float x, float y) { + return x >= rect.x && + x <= rect.x + rect.width && + y >= rect.y && + y <= rect.y + rect.height; +} + +const char* BoolText(bool value) { + return value ? "true" : "false"; +} + +UIInputModifiers QueryKeyboardModifiers() { + UIInputModifiers modifiers = {}; + modifiers.shift = (GetKeyState(VK_SHIFT) & 0x8000) != 0; + modifiers.control = (GetKeyState(VK_CONTROL) & 0x8000) != 0; + modifiers.alt = (GetKeyState(VK_MENU) & 0x8000) != 0; + modifiers.super = (GetKeyState(VK_LWIN) & 0x8000) != 0 || (GetKeyState(VK_RWIN) & 0x8000) != 0; + return modifiers; +} + +UIInputModifiers QueryPointerModifiers(WPARAM wParam) { + UIInputModifiers modifiers = QueryKeyboardModifiers(); + modifiers.shift = modifiers.shift || (wParam & MK_SHIFT) != 0; + modifiers.control = modifiers.control || (wParam & MK_CONTROL) != 0; + return modifiers; +} + +std::int32_t MapTreeNavigationKey(UINT keyCode) { + switch (keyCode) { + case VK_UP: + return static_cast(KeyCode::Up); + case VK_DOWN: + return static_cast(KeyCode::Down); + case VK_LEFT: + return static_cast(KeyCode::Left); + case VK_RIGHT: + return static_cast(KeyCode::Right); + case VK_HOME: + return static_cast(KeyCode::Home); + case VK_END: + return static_cast(KeyCode::End); + default: + return static_cast(KeyCode::None); + } +} + +ScenarioLayout BuildScenarioLayout(float width, float height) { + constexpr float margin = 20.0f; + constexpr float leftWidth = 456.0f; + constexpr float gap = 16.0f; + + ScenarioLayout layout = {}; + layout.introRect = UIRect(margin, margin, leftWidth, 272.0f); + layout.controlRect = UIRect(margin, layout.introRect.y + layout.introRect.height + gap, leftWidth, 92.0f); + layout.stateRect = UIRect( + margin, + layout.controlRect.y + layout.controlRect.height + gap, + leftWidth, + (std::max)(240.0f, height - (layout.controlRect.y + layout.controlRect.height + gap) - margin)); + layout.previewRect = UIRect( + leftWidth + margin * 2.0f, + margin, + (std::max)(420.0f, width - leftWidth - margin * 3.0f), + height - margin * 2.0f); + layout.treeRect = UIRect( + layout.previewRect.x + 18.0f, + layout.previewRect.y + 64.0f, + layout.previewRect.width - 36.0f, + layout.previewRect.height - 84.0f); + + const float buttonWidth = (layout.controlRect.width - 44.0f) * 0.5f; + const float buttonY = layout.controlRect.y + 40.0f; + layout.buttons = { + { ActionId::Reset, "重置", UIRect(layout.controlRect.x + 14.0f, buttonY, buttonWidth, 36.0f) }, + { ActionId::Capture, "截图(F12)", UIRect(layout.controlRect.x + 26.0f + buttonWidth, buttonY, buttonWidth, 36.0f) } + }; + + return layout; +} + +void DrawCard( + UIDrawList& drawList, + const UIRect& rect, + std::string_view title, + std::string_view subtitle = {}) { + drawList.AddFilledRect(rect, kCardBg, 10.0f); + drawList.AddRectOutline(rect, kCardBorder, 1.0f, 10.0f); + drawList.AddText(UIPoint(rect.x + 16.0f, rect.y + 14.0f), std::string(title), kTextPrimary, 17.0f); + if (!subtitle.empty()) { + drawList.AddText(UIPoint(rect.x + 16.0f, rect.y + 40.0f), std::string(subtitle), kTextMuted, 12.0f); + } +} + +void DrawButton(UIDrawList& drawList, const ButtonLayout& button, bool hovered) { + drawList.AddFilledRect(button.rect, hovered ? kButtonHoverBg : kButtonBg, 8.0f); + drawList.AddRectOutline(button.rect, kCardBorder, 1.0f, 8.0f); + drawList.AddText(UIPoint(button.rect.x + 16.0f, button.rect.y + 10.0f), button.label, kTextPrimary, 12.0f); +} + +std::vector BuildTreeItems() { + return { + { "scene", "Scene", 0u, false, 0.0f }, + { "camera", "Camera", 1u, true, 0.0f }, + { "lights", "Lights", 1u, false, 0.0f }, + { "directional-light", "Directional Light", 2u, true, 0.0f }, + { "fill-light", "Fill Light", 2u, true, 0.0f }, + { "characters", "Characters", 0u, false, 0.0f }, + { "hero", "Hero", 1u, false, 0.0f }, + { "hero-mesh", "HeroMesh", 2u, true, 0.0f }, + { "hero-rig", "HeroRig", 2u, true, 0.0f }, + { "ui-root", "UI Root", 0u, false, 0.0f }, + { "canvas", "Canvas", 1u, false, 0.0f }, + { "button", "Button", 2u, true, 0.0f }, + { "event-system", "EventSystem", 1u, true, 0.0f } + }; +} + +std::string JoinSelectedIds(const UISelectionModel& selectionModel) { + if (selectionModel.GetSelectedIds().empty()) { + return "(none)"; + } + + std::ostringstream stream = {}; + for (std::size_t index = 0u; index < selectionModel.GetSelectedIds().size(); ++index) { + if (index > 0u) { + stream << " | "; + } + stream << selectionModel.GetSelectedIds()[index]; + } + return stream.str(); +} + +std::string JoinExpandedIds( + const std::vector& items, + const UIExpansionModel& expansionModel) { + std::ostringstream stream = {}; + bool first = true; + for (const UIEditorTreeViewItem& item : items) { + if (!expansionModel.IsExpanded(item.itemId)) { + continue; + } + + if (!first) { + stream << " | "; + } + first = false; + stream << item.itemId; + } + + return first ? "(none)" : stream.str(); +} + +std::string JoinVisibleIds( + const std::vector& items, + const UIEditorTreeViewLayout& layout) { + if (layout.visibleItemIndices.empty()) { + return "(none)"; + } + + std::ostringstream stream = {}; + for (std::size_t visibleIndex = 0u; visibleIndex < layout.visibleItemIndices.size(); ++visibleIndex) { + if (visibleIndex > 0u) { + stream << " | "; + } + + const std::size_t itemIndex = layout.visibleItemIndices[visibleIndex]; + if (itemIndex < items.size()) { + stream << items[itemIndex].itemId; + } + } + return stream.str(); +} + +std::string DescribeHitTarget( + const UIEditorTreeViewHitTarget& hitTarget, + const std::vector& items) { + if (hitTarget.itemIndex >= items.size()) { + return "(none)"; + } + + const std::string& itemId = items[hitTarget.itemIndex].itemId; + switch (hitTarget.kind) { + case UIEditorTreeViewHitTargetKind::Disclosure: + return "disclosure: " + itemId; + case UIEditorTreeViewHitTargetKind::Row: + return "row: " + itemId; + case UIEditorTreeViewHitTargetKind::None: + default: + return "(none)"; + } +} + +UIInputEvent MakePointerEvent( + UIInputEventType type, + const UIPoint& position, + const UIInputModifiers& modifiers, + UIPointerButton button = UIPointerButton::None) { + UIInputEvent event = {}; + event.type = type; + event.position = position; + event.modifiers = modifiers; + event.pointerButton = button; + return event; +} + +UIInputEvent MakeKeyEvent(std::int32_t keyCode, const UIInputModifiers& modifiers) { + UIInputEvent event = {}; + event.type = UIInputEventType::KeyDown; + event.keyCode = keyCode; + event.modifiers = modifiers; + return event; +} + +class ScenarioApp { +public: + int Run(HINSTANCE hInstance, int nCmdShow) { + if (!Initialize(hInstance, nCmdShow)) { + Shutdown(); + return 1; + } + + MSG message = {}; + while (message.message != WM_QUIT) { + if (PeekMessageW(&message, nullptr, 0U, 0U, PM_REMOVE)) { + TranslateMessage(&message); + DispatchMessageW(&message); + continue; + } + + RenderFrame(); + Sleep(8); + } + + Shutdown(); + return static_cast(message.wParam); + } + +private: + static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { + if (message == WM_NCCREATE) { + const auto* createStruct = reinterpret_cast(lParam); + auto* app = reinterpret_cast(createStruct->lpCreateParams); + SetWindowLongPtrW(hwnd, GWLP_USERDATA, reinterpret_cast(app)); + return TRUE; + } + + auto* app = reinterpret_cast(GetWindowLongPtrW(hwnd, GWLP_USERDATA)); + switch (message) { + case WM_SIZE: + if (app != nullptr && wParam != SIZE_MINIMIZED) { + app->OnResize(static_cast(LOWORD(lParam)), static_cast(HIWORD(lParam))); + } + return 0; + + case WM_MOUSEMOVE: + if (app != nullptr) { + app->HandleMouseMove( + static_cast(GET_X_LPARAM(lParam)), + static_cast(GET_Y_LPARAM(lParam)), + wParam); + return 0; + } + break; + + case WM_MOUSELEAVE: + if (app != nullptr) { + app->HandleMouseLeave(); + return 0; + } + break; + + case WM_LBUTTONDOWN: + if (app != nullptr) { + app->HandleLeftButtonDown( + static_cast(GET_X_LPARAM(lParam)), + static_cast(GET_Y_LPARAM(lParam)), + wParam); + return 0; + } + break; + + case WM_LBUTTONUP: + if (app != nullptr) { + app->HandleLeftButtonUp( + static_cast(GET_X_LPARAM(lParam)), + static_cast(GET_Y_LPARAM(lParam)), + wParam); + return 0; + } + break; + + case WM_RBUTTONDOWN: + if (app != nullptr) { + app->HandleRightButtonDown( + static_cast(GET_X_LPARAM(lParam)), + static_cast(GET_Y_LPARAM(lParam)), + wParam); + return 0; + } + break; + + case WM_RBUTTONUP: + if (app != nullptr) { + app->HandleRightButtonUp( + static_cast(GET_X_LPARAM(lParam)), + static_cast(GET_Y_LPARAM(lParam)), + wParam); + return 0; + } + break; + + case WM_KEYDOWN: + case WM_SYSKEYDOWN: + if (app != nullptr) { + if (wParam == VK_F12) { + app->m_autoScreenshot.RequestCapture("manual_f12"); + app->m_lastResult = "已请求截图,输出到 captures/latest.png"; + app->m_resultFlags = + "selectionChanged=false, expansionChanged=false, keyboardNavigated=false, secondaryClicked=false, consumed=true"; + InvalidateRect(hwnd, nullptr, FALSE); + return 0; + } + + const std::int32_t keyCode = MapTreeNavigationKey(static_cast(wParam)); + if (keyCode != static_cast(KeyCode::None)) { + app->HandleNavigationKey(keyCode, QueryKeyboardModifiers()); + return 0; + } + } + break; + + case WM_PAINT: + if (app != nullptr) { + PAINTSTRUCT paintStruct = {}; + BeginPaint(hwnd, &paintStruct); + app->RenderFrame(); + EndPaint(hwnd, &paintStruct); + return 0; + } + break; + + case WM_ERASEBKGND: + return 1; + + case WM_DESTROY: + if (app != nullptr) { + app->m_hwnd = nullptr; + } + PostQuitMessage(0); + return 0; + + default: + break; + } + + return DefWindowProcW(hwnd, message, wParam, lParam); + } + + bool Initialize(HINSTANCE hInstance, int nCmdShow) { + WNDCLASSEXW windowClass = {}; + windowClass.cbSize = sizeof(windowClass); + windowClass.style = CS_HREDRAW | CS_VREDRAW; + windowClass.lpfnWndProc = &ScenarioApp::WndProc; + windowClass.hInstance = hInstance; + windowClass.hCursor = LoadCursorW(nullptr, IDC_ARROW); + windowClass.lpszClassName = kWindowClassName; + + m_windowClassAtom = RegisterClassExW(&windowClass); + if (m_windowClassAtom == 0) { + return false; + } + + m_hwnd = CreateWindowExW( + 0, + kWindowClassName, + kWindowTitle, + WS_OVERLAPPEDWINDOW | WS_VISIBLE, + CW_USEDEFAULT, + CW_USEDEFAULT, + 1480, + 920, + nullptr, + nullptr, + hInstance, + this); + if (m_hwnd == nullptr) { + return false; + } + + ShowWindow(m_hwnd, nCmdShow); + UpdateWindow(m_hwnd); + + if (!m_renderer.Initialize(m_hwnd)) { + return false; + } + + m_captureRoot = + ResolveRepoRootPath() / "tests/UI/Editor/integration/shell/tree_view_multiselect/captures"; + m_autoScreenshot.Initialize(m_captureRoot); + + ResetScenario(); + return true; + } + + void Shutdown() { + m_autoScreenshot.Shutdown(); + m_renderer.Shutdown(); + + if (m_hwnd != nullptr && IsWindow(m_hwnd)) { + DestroyWindow(m_hwnd); + } + m_hwnd = nullptr; + + if (m_windowClassAtom != 0) { + UnregisterClassW(kWindowClassName, GetModuleHandleW(nullptr)); + m_windowClassAtom = 0; + } + } + + ScenarioLayout GetLayout() const { + RECT clientRect = {}; + GetClientRect(m_hwnd, &clientRect); + const float width = static_cast((std::max)(1L, clientRect.right - clientRect.left)); + const float height = static_cast((std::max)(1L, clientRect.bottom - clientRect.top)); + return BuildScenarioLayout(width, height); + } + + void ResetScenario() { + m_items = BuildTreeItems(); + m_selectionModel = {}; + m_selectionModel.SetSelections({ "camera", "lights", "ui-root" }, "lights"); + m_expansionModel = {}; + m_expansionModel.Expand("scene"); + m_expansionModel.Expand("lights"); + m_expansionModel.Expand("characters"); + m_expansionModel.Expand("hero"); + m_expansionModel.Expand("ui-root"); + m_expansionModel.Expand("canvas"); + m_interactionState = {}; + m_interactionState.treeViewState.focused = true; + m_interactionState.selectionAnchorId = "lights"; + m_mousePosition = UIPoint(-1000.0f, -1000.0f); + m_hoveredAction = ActionId::Reset; + m_hasHoveredAction = false; + m_lastResult = "已重置到默认多选状态:camera | lights | ui-root"; + m_resultFlags = + "selectionChanged=false, expansionChanged=false, keyboardNavigated=false, secondaryClicked=false, consumed=false"; + RefreshTreeFrame(); + } + + void RefreshTreeFrame() { + if (m_hwnd == nullptr) { + return; + } + + const ScenarioLayout layout = GetLayout(); + m_treeFrame = UpdateUIEditorTreeViewInteraction( + m_interactionState, + m_selectionModel, + m_expansionModel, + layout.treeRect, + m_items, + {}); + } + + void OnResize(UINT width, UINT height) { + if (width == 0u || height == 0u) { + return; + } + + m_renderer.Resize(width, height); + RefreshTreeFrame(); + } + + void HandleMouseMove(float x, float y, WPARAM wParam) { + m_mousePosition = UIPoint(x, y); + const ScenarioLayout layout = GetLayout(); + UpdateHoveredAction(layout, x, y); + + TRACKMOUSEEVENT trackEvent = {}; + trackEvent.cbSize = sizeof(trackEvent); + trackEvent.dwFlags = TME_LEAVE; + trackEvent.hwndTrack = m_hwnd; + TrackMouseEvent(&trackEvent); + + PumpTreeEvents({ MakePointerEvent(UIInputEventType::PointerMove, m_mousePosition, QueryPointerModifiers(wParam)) }); + InvalidateRect(m_hwnd, nullptr, FALSE); + } + + void HandleMouseLeave() { + m_mousePosition = UIPoint(-1000.0f, -1000.0f); + m_hasHoveredAction = false; + PumpTreeEvents({ MakePointerEvent(UIInputEventType::PointerLeave, m_mousePosition, {}) }); + InvalidateRect(m_hwnd, nullptr, FALSE); + } + + void HandleLeftButtonDown(float x, float y, WPARAM wParam) { + m_mousePosition = UIPoint(x, y); + const ScenarioLayout layout = GetLayout(); + if (HitTestAction(layout, x, y) != nullptr) { + UpdateHoveredAction(layout, x, y); + InvalidateRect(m_hwnd, nullptr, FALSE); + return; + } + + PumpTreeEvents({ + MakePointerEvent( + UIInputEventType::PointerButtonDown, + m_mousePosition, + QueryPointerModifiers(wParam), + UIPointerButton::Left) + }); + InvalidateRect(m_hwnd, nullptr, FALSE); + } + + void HandleLeftButtonUp(float x, float y, WPARAM wParam) { + m_mousePosition = UIPoint(x, y); + const ScenarioLayout layout = GetLayout(); + const ButtonLayout* button = HitTestAction(layout, x, y); + if (button != nullptr) { + ExecuteAction(button->action); + UpdateHoveredAction(layout, x, y); + InvalidateRect(m_hwnd, nullptr, FALSE); + return; + } + + const UIInputModifiers modifiers = QueryPointerModifiers(wParam); + const bool insideTree = ContainsPoint(layout.treeRect, x, y); + const UIEditorTreeViewInteractionResult result = + PumpTreeEvents({ + MakePointerEvent( + UIInputEventType::PointerButtonUp, + m_mousePosition, + modifiers, + UIPointerButton::Left) + }); + + std::string actionLabel = "点击树外空白,focus 清除"; + if (result.hitTarget.kind == UIEditorTreeViewHitTargetKind::Disclosure) { + actionLabel = "点击 disclosure 切换展开,不改 selection"; + } else if (result.hitTarget.kind == UIEditorTreeViewHitTargetKind::Row) { + if (modifiers.shift) { + actionLabel = "Shift+单击范围多选"; + } else if (modifiers.control) { + actionLabel = "Ctrl+单击切换多选"; + } else { + actionLabel = "单击单选"; + } + } else if (insideTree) { + actionLabel = "点击树内空白,只更新 focus / hover"; + } + + UpdateResultSummary(result, actionLabel); + InvalidateRect(m_hwnd, nullptr, FALSE); + } + + void HandleRightButtonDown(float x, float y, WPARAM wParam) { + m_mousePosition = UIPoint(x, y); + PumpTreeEvents({ + MakePointerEvent( + UIInputEventType::PointerButtonDown, + m_mousePosition, + QueryPointerModifiers(wParam), + UIPointerButton::Right) + }); + InvalidateRect(m_hwnd, nullptr, FALSE); + } + + void HandleRightButtonUp(float x, float y, WPARAM wParam) { + m_mousePosition = UIPoint(x, y); + const UIEditorTreeViewHitTarget hitBefore = HitTestUIEditorTreeView(m_treeFrame.layout, m_mousePosition); + const std::size_t selectedCountBefore = m_selectionModel.GetSelectionCount(); + bool targetAlreadySelected = false; + if (hitBefore.itemIndex < m_items.size()) { + targetAlreadySelected = m_selectionModel.IsSelected(m_items[hitBefore.itemIndex].itemId); + } + + const UIEditorTreeViewInteractionResult result = + PumpTreeEvents({ + MakePointerEvent( + UIInputEventType::PointerButtonUp, + m_mousePosition, + QueryPointerModifiers(wParam), + UIPointerButton::Right) + }); + + std::string actionLabel = "右键空白区域"; + if (result.hitTarget.kind == UIEditorTreeViewHitTargetKind::Row || + result.hitTarget.kind == UIEditorTreeViewHitTargetKind::Disclosure) { + if (targetAlreadySelected && selectedCountBefore > 1u) { + actionLabel = "右键命中已选集合,不打散 selection,仅切换 primary"; + } else if (targetAlreadySelected) { + actionLabel = "右键命中已选项,仅切换 primary"; + } else { + actionLabel = "右键命中未选项,改为单选并触发 secondary click"; + } + } + + UpdateResultSummary(result, actionLabel); + InvalidateRect(m_hwnd, nullptr, FALSE); + } + + void HandleNavigationKey(std::int32_t keyCode, const UIInputModifiers& modifiers) { + const UIEditorTreeViewInteractionResult result = + PumpTreeEvents({ MakeKeyEvent(keyCode, modifiers) }); + + std::string actionLabel = modifiers.shift + ? "Shift+键盘范围扩选" + : "键盘导航"; + if (keyCode == static_cast(KeyCode::Left) || + keyCode == static_cast(KeyCode::Right)) { + actionLabel = "Left/Right 层级导航或展开切换"; + } + + UpdateResultSummary(result, actionLabel); + InvalidateRect(m_hwnd, nullptr, FALSE); + } + + void UpdateHoveredAction(const ScenarioLayout& layout, float x, float y) { + const ButtonLayout* button = HitTestAction(layout, x, y); + if (button == nullptr) { + m_hasHoveredAction = false; + return; + } + + m_hoveredAction = button->action; + m_hasHoveredAction = true; + } + + const ButtonLayout* HitTestAction(const ScenarioLayout& layout, float x, float y) const { + for (const ButtonLayout& button : layout.buttons) { + if (ContainsPoint(button.rect, x, y)) { + return &button; + } + } + + return nullptr; + } + + UIEditorTreeViewInteractionResult PumpTreeEvents(std::vector events) { + const ScenarioLayout layout = GetLayout(); + m_treeFrame = UpdateUIEditorTreeViewInteraction( + m_interactionState, + m_selectionModel, + m_expansionModel, + layout.treeRect, + m_items, + std::move(events)); + return m_treeFrame.result; + } + + void UpdateResultSummary( + const UIEditorTreeViewInteractionResult& result, + std::string_view actionLabel) { + std::ostringstream summary = {}; + summary << actionLabel; + if (!result.selectedItemId.empty()) { + summary << " -> selected " << result.selectedItemId; + } + if (!result.toggledItemId.empty()) { + summary << " -> toggled " << result.toggledItemId; + } + if (result.selectedVisibleIndex != UIEditorTreeViewInvalidIndex) { + summary << " (visible " << result.selectedVisibleIndex << ")"; + } + m_lastResult = summary.str(); + + std::ostringstream flags = {}; + flags << "selectionChanged=" << BoolText(result.selectionChanged) + << ", expansionChanged=" << BoolText(result.expansionChanged) + << ", keyboardNavigated=" << BoolText(result.keyboardNavigated) + << ", secondaryClicked=" << BoolText(result.secondaryClicked) + << ", consumed=" << BoolText(result.consumed); + m_resultFlags = flags.str(); + } + + void ExecuteAction(ActionId action) { + switch (action) { + case ActionId::Reset: + ResetScenario(); + break; + + case ActionId::Capture: + m_autoScreenshot.RequestCapture("manual_button"); + m_lastResult = "已请求截图,输出到 captures/latest.png"; + m_resultFlags = + "selectionChanged=false, expansionChanged=false, keyboardNavigated=false, secondaryClicked=false, consumed=true"; + break; + } + } + + void RenderFrame() { + if (m_hwnd == nullptr) { + return; + } + + RECT clientRect = {}; + GetClientRect(m_hwnd, &clientRect); + const float width = static_cast((std::max)(1L, clientRect.right - clientRect.left)); + const float height = static_cast((std::max)(1L, clientRect.bottom - clientRect.top)); + const ScenarioLayout layout = BuildScenarioLayout(width, height); + RefreshTreeFrame(); + + const UIEditorTreeViewHitTarget currentHit = HitTestUIEditorTreeView(m_treeFrame.layout, m_mousePosition); + + UIDrawData drawData = {}; + UIDrawList& drawList = drawData.EmplaceDrawList("EditorTreeViewMultiSelect"); + drawList.AddFilledRect(UIRect(0.0f, 0.0f, width, height), kWindowBg); + + DrawCard( + drawList, + layout.introRect, + "这个测试在验证什么功能?", + "只验证 Editor TreeView 的多选契约,不混入 Hierarchy / Inspector 业务面板。"); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 72.0f), + "1. 单击 row:应切回单选,primary / anchor / current 同步到该行。", + kTextPrimary, + 12.0f); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 94.0f), + "2. Ctrl+单击 / Shift+单击:应只验证 visible tree 范围内的多选切换与连续扩选。", + kTextPrimary, + 12.0f); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 116.0f), + "3. 点击 disclosure:应只切换 expanded,不应无故打散 selection。", + kTextPrimary, + 12.0f); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 138.0f), + "4. Left / Right:应验证展开、折叠,以及父子层级之间的 current / selection 跳转。", + kTextPrimary, + 12.0f); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 160.0f), + "5. 右键命中已选集合中的一项:不得打散 selection,只允许切换 primary。", + kTextPrimary, + 12.0f); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 182.0f), + "6. 重点检查左侧状态:Primary / Count / Ids / Anchor / Current / Expanded / Visible / Result。", + kTextPrimary, + 12.0f); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 204.0f), + "7. 按 F12 手动截图;设置 XCUI_AUTO_CAPTURE_ON_STARTUP=1 可做启动自动截图。", + kTextPrimary, + 12.0f); + + DrawCard(drawList, layout.controlRect, "操作"); + for (const ButtonLayout& button : layout.buttons) { + DrawButton(drawList, button, m_hasHoveredAction && m_hoveredAction == button.action); + } + + DrawCard(drawList, layout.stateRect, "状态摘要", "重点检查 multi-select 与 expanded / visible contract 是否稳定。"); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 70.0f), + "Hit: " + DescribeHitTarget(currentHit, m_items), + kTextPrimary, + 12.0f); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 94.0f), + std::string("Focused: ") + BoolText(m_interactionState.treeViewState.focused), + kTextPrimary, + 12.0f); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 118.0f), + "Primary: " + + (m_selectionModel.HasSelection() ? m_selectionModel.GetSelectedId() : std::string("(none)")), + kTextSuccess, + 12.0f); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 142.0f), + "Selected Count: " + std::to_string(m_selectionModel.GetSelectionCount()), + kTextPrimary, + 12.0f); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 166.0f), + "Selected Ids: " + JoinSelectedIds(m_selectionModel), + kTextMuted, + 12.0f); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 190.0f), + "Anchor: " + + (m_interactionState.selectionAnchorId.empty() + ? std::string("(none)") + : m_interactionState.selectionAnchorId), + kTextMuted, + 12.0f); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 214.0f), + std::string("Current: ") + + (m_interactionState.keyboardNavigation.HasCurrentIndex() + ? std::to_string(m_interactionState.keyboardNavigation.GetCurrentIndex()) + : std::string("(none)")), + kTextMuted, + 12.0f); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 238.0f), + "Expanded: " + JoinExpandedIds(m_items, m_expansionModel), + kTextMuted, + 12.0f); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 262.0f), + "Visible: " + JoinVisibleIds(m_items, m_treeFrame.layout), + kTextMuted, + 12.0f); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 286.0f), + "Result: " + m_lastResult, + kTextPrimary, + 12.0f); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 310.0f), + "Flags: " + m_resultFlags, + kTextWeak, + 12.0f); + + const std::string captureSummary = + m_autoScreenshot.HasPendingCapture() + ? "截图排队中..." + : (m_autoScreenshot.GetLastCaptureSummary().empty() + ? std::string("F12 -> tests/UI/Editor/integration/shell/tree_view_multiselect/captures/") + : m_autoScreenshot.GetLastCaptureSummary()); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 334.0f), + captureSummary, + kTextWeak, + 12.0f); + + DrawCard(drawList, layout.previewRect, "TreeView 多选预览", "这里只放一个 TreeView,用来验证多选与层级展开状态机。"); + AppendUIEditorTreeViewBackground( + drawList, + m_treeFrame.layout, + m_items, + m_selectionModel, + m_interactionState.treeViewState); + AppendUIEditorTreeViewForeground(drawList, m_treeFrame.layout, m_items); + + const bool framePresented = m_renderer.Render(drawData); + m_autoScreenshot.CaptureIfRequested( + m_renderer, + drawData, + static_cast(width), + static_cast(height), + framePresented); + } + + HWND m_hwnd = nullptr; + ATOM m_windowClassAtom = 0; + NativeRenderer m_renderer = {}; + AutoScreenshotController m_autoScreenshot = {}; + std::filesystem::path m_captureRoot = {}; + std::vector m_items = {}; + UISelectionModel m_selectionModel = {}; + UIExpansionModel m_expansionModel = {}; + UIEditorTreeViewInteractionState m_interactionState = {}; + UIEditorTreeViewInteractionFrame m_treeFrame = {}; + UIPoint m_mousePosition = UIPoint(-1000.0f, -1000.0f); + ActionId m_hoveredAction = ActionId::Reset; + bool m_hasHoveredAction = false; + std::string m_lastResult = {}; + std::string m_resultFlags = {}; +}; + +} // namespace + +int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR, int nCmdShow) { + return ScenarioApp().Run(hInstance, nCmdShow); +} diff --git a/tests/UI/Editor/integration/shell/workspace_interaction_basic/captures/history/20260408_190643_1_startup.png b/tests/UI/Editor/integration/shell/workspace_interaction_basic/captures/history/20260408_190643_1_startup.png new file mode 100644 index 0000000000000000000000000000000000000000..1f9dd61a39162ba7b88c3a1e093bd74dbb93f8c9 GIT binary patch literal 91382 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 literal 0 HcmV?d00001 diff --git a/tests/UI/Editor/integration/shell/workspace_interaction_basic/captures/latest.png b/tests/UI/Editor/integration/shell/workspace_interaction_basic/captures/latest.png new file mode 100644 index 0000000000000000000000000000000000000000..1f9dd61a39162ba7b88c3a1e093bd74dbb93f8c9 GIT binary patch literal 91382 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 literal 0 HcmV?d00001 diff --git a/tests/UI/Editor/integration/shell/workspace_shell_compose/captures/history/20260408_222440_1_startup.png b/tests/UI/Editor/integration/shell/workspace_shell_compose/captures/history/20260408_222440_1_startup.png new file mode 100644 index 0000000000000000000000000000000000000000..59a62495e92c026d0b8e15d07f60ee4ef43bf53a GIT binary patch literal 81691 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 #include #include #include @@ -10,7 +11,6 @@ #include "Host/NativeRenderer.h" #include -#include #include #include @@ -31,12 +31,11 @@ namespace { using XCEngine::UI::UIColor; using XCEngine::UI::UIDrawData; using XCEngine::UI::UIDrawList; +using XCEngine::UI::UIInputEvent; +using XCEngine::UI::UIInputEventType; using XCEngine::UI::UIPoint; +using XCEngine::UI::UIPointerButton; using XCEngine::UI::UIRect; -using XCEngine::UI::Widgets::BeginUISplitterDrag; -using XCEngine::UI::Widgets::EndUISplitterDrag; -using XCEngine::UI::Widgets::UISplitterDragState; -using XCEngine::UI::Widgets::UpdateUISplitterDrag; using XCEngine::UI::Editor::BuildDefaultUIEditorWorkspaceController; using XCEngine::UI::Editor::BuildUIEditorWorkspacePanel; using XCEngine::UI::Editor::BuildUIEditorWorkspaceSplit; @@ -46,26 +45,22 @@ using XCEngine::UI::Editor::GetUIEditorWorkspaceCommandStatusName; using XCEngine::UI::Editor::GetUIEditorWorkspaceLayoutOperationStatusName; using XCEngine::UI::Editor::Host::AutoScreenshotController; using XCEngine::UI::Editor::Host::NativeRenderer; -using XCEngine::UI::Editor::TrySetUIEditorWorkspaceSplitRatio; +using XCEngine::UI::Editor::UIEditorDockHostInteractionFrame; +using XCEngine::UI::Editor::UIEditorDockHostInteractionResult; +using XCEngine::UI::Editor::UIEditorDockHostInteractionState; using XCEngine::UI::Editor::UIEditorPanelRegistry; -using XCEngine::UI::Editor::UIEditorWorkspaceCommand; -using XCEngine::UI::Editor::UIEditorWorkspaceCommandKind; -using XCEngine::UI::Editor::UIEditorWorkspaceCommandResult; +using XCEngine::UI::Editor::UIEditorWorkspaceCommandStatus; using XCEngine::UI::Editor::UIEditorWorkspaceController; +using XCEngine::UI::Editor::UIEditorWorkspaceLayoutOperationStatus; using XCEngine::UI::Editor::UIEditorWorkspaceModel; using XCEngine::UI::Editor::UIEditorWorkspaceNode; using XCEngine::UI::Editor::UIEditorWorkspaceNodeKind; using XCEngine::UI::Editor::UIEditorWorkspaceSplitAxis; +using XCEngine::UI::Editor::UpdateUIEditorDockHostInteraction; using XCEngine::UI::Editor::Widgets::AppendUIEditorDockHostBackground; using XCEngine::UI::Editor::Widgets::AppendUIEditorDockHostForeground; -using XCEngine::UI::Editor::Widgets::BuildUIEditorDockHostLayout; -using XCEngine::UI::Editor::Widgets::FindUIEditorDockHostSplitterLayout; -using XCEngine::UI::Editor::Widgets::HitTestUIEditorDockHost; using XCEngine::UI::Editor::Widgets::UIEditorDockHostHitTarget; using XCEngine::UI::Editor::Widgets::UIEditorDockHostHitTargetKind; -using XCEngine::UI::Editor::Widgets::UIEditorDockHostLayout; -using XCEngine::UI::Editor::Widgets::UIEditorDockHostState; -using XCEngine::UI::Editor::Widgets::UIEditorTabStripInvalidIndex; constexpr const wchar_t* kWindowClassName = L"XCUIEditorWorkspaceShellComposeValidation"; constexpr const wchar_t* kWindowTitle = L"XCUI Editor | Workspace Shell Compose"; @@ -77,6 +72,7 @@ constexpr UIColor kTextPrimary(0.94f, 0.94f, 0.94f, 1.0f); constexpr UIColor kTextMuted(0.73f, 0.73f, 0.73f, 1.0f); constexpr UIColor kTextWeak(0.58f, 0.58f, 0.58f, 1.0f); constexpr UIColor kSuccess(0.63f, 0.76f, 0.63f, 1.0f); +constexpr UIColor kWarning(0.82f, 0.67f, 0.35f, 1.0f); constexpr UIColor kDanger(0.82f, 0.50f, 0.50f, 1.0f); constexpr UIColor kButtonBg(0.26f, 0.26f, 0.26f, 1.0f); constexpr UIColor kButtonHoveredBg(0.34f, 0.34f, 0.34f, 1.0f); @@ -97,15 +93,6 @@ bool ContainsPoint(const UIRect& rect, float x, float y) { y <= rect.y + rect.height; } -bool AreTargetsEqual( - const UIEditorDockHostHitTarget& lhs, - const UIEditorDockHostHitTarget& rhs) { - return lhs.kind == rhs.kind && - lhs.nodeId == rhs.nodeId && - lhs.panelId == rhs.panelId && - lhs.index == rhs.index; -} - void DrawCard( UIDrawList& drawList, const UIRect& rect, @@ -285,6 +272,7 @@ private: break; case WM_LBUTTONDOWN: if (app != nullptr) { + SetFocus(hwnd); app->HandleLeftButtonDown( static_cast(GET_X_LPARAM(lParam)), static_cast(GET_Y_LPARAM(lParam))); @@ -299,6 +287,32 @@ private: return 0; } break; + case WM_SETFOCUS: + if (app != nullptr) { + UIInputEvent eventInput = {}; + eventInput.type = UIInputEventType::FocusGained; + app->m_pendingInputEvents.push_back(eventInput); + return 0; + } + break; + case WM_KILLFOCUS: + if (app != nullptr) { + UIInputEvent eventInput = {}; + eventInput.type = UIInputEventType::FocusLost; + app->m_pendingInputEvents.push_back(eventInput); + return 0; + } + break; + case WM_CAPTURECHANGED: + if (app != nullptr && + app->m_interactionState.splitterDragState.active && + reinterpret_cast(lParam) != hwnd) { + UIInputEvent eventInput = {}; + eventInput.type = UIInputEventType::FocusLost; + app->m_pendingInputEvents.push_back(eventInput); + return 0; + } + break; case WM_KEYDOWN: case WM_SYSKEYDOWN: if (app != nullptr && wParam == VK_F12) { @@ -342,7 +356,6 @@ private: windowClass.hInstance = hInstance; windowClass.hCursor = LoadCursorW(nullptr, IDC_ARROW); windowClass.lpszClassName = kWindowClassName; - m_windowClassAtom = RegisterClassExW(&windowClass); if (m_windowClassAtom == 0) { return false; @@ -377,6 +390,9 @@ private: } void Shutdown() { + if (GetCapture() == m_hwnd) { + ReleaseCapture(); + } m_autoScreenshot.Shutdown(); m_renderer.Shutdown(); @@ -392,18 +408,19 @@ private: } void ResetScenario() { + if (GetCapture() == m_hwnd) { + ReleaseCapture(); + } m_controller = BuildDefaultUIEditorWorkspaceController(BuildPanelRegistry(), BuildWorkspace()); - m_dockState = {}; - m_layout = {}; - m_dragState = {}; - m_dragSplitterNodeId.clear(); + m_interactionState = {}; + m_cachedFrame = {}; + m_pendingInputEvents.clear(); m_mousePosition = UIPoint(-1000.0f, -1000.0f); m_resetHovered = false; + m_resetPressed = false; m_lastResult = "等待操作"; UpdateSceneRects(); - RefreshLayout(); - UpdateHoverTarget(); } void OnResize(UINT width, UINT height) { @@ -423,8 +440,8 @@ private: constexpr float outerPadding = 20.0f; constexpr float leftColumnWidth = 380.0f; - m_introRect = UIRect(outerPadding, outerPadding, leftColumnWidth, 192.0f); - m_stateRect = UIRect(outerPadding, 228.0f, leftColumnWidth, height - 248.0f); + m_introRect = UIRect(outerPadding, outerPadding, leftColumnWidth, 212.0f); + m_stateRect = UIRect(outerPadding, 248.0f, leftColumnWidth, height - 268.0f); m_previewCardRect = UIRect( leftColumnWidth + outerPadding * 2.0f, outerPadding, @@ -442,23 +459,6 @@ private: 38.0f); } - void RefreshLayout() { - m_layout = BuildUIEditorDockHostLayout( - m_previewRect, - m_controller.GetPanelRegistry(), - m_controller.GetWorkspace(), - m_controller.GetSession(), - m_dockState); - } - - void UpdateHoverTarget() { - UIEditorDockHostHitTarget hoveredTarget = HitTestUIEditorDockHost(m_layout, m_mousePosition); - if (!AreTargetsEqual(hoveredTarget, m_dockState.hoveredTarget)) { - m_dockState.hoveredTarget = std::move(hoveredTarget); - RefreshLayout(); - } - } - void HandleMouseMove(float x, float y) { m_mousePosition = UIPoint(x, y); TRACKMOUSEEVENT event = {}; @@ -470,79 +470,38 @@ private: UpdateSceneRects(); m_resetHovered = ContainsPoint(m_resetButtonRect, x, y); - if (m_dragState.active) { - XCEngine::UI::Layout::UISplitterLayoutResult draggedLayout = {}; - if (UpdateUISplitterDrag(m_dragState, m_mousePosition, draggedLayout)) { - ApplyDraggedSplitterRatio(draggedLayout.splitRatio); - } else { - RefreshLayout(); - } - m_dockState.hoveredTarget = { - UIEditorDockHostHitTargetKind::SplitterHandle, - m_dragSplitterNodeId, - {}, - UIEditorTabStripInvalidIndex - }; - m_dockState.activeSplitterNodeId = m_dragSplitterNodeId; - RefreshLayout(); - InvalidateRect(m_hwnd, nullptr, FALSE); - return; - } - - RefreshLayout(); - UpdateHoverTarget(); + UIInputEvent eventInput = {}; + eventInput.type = UIInputEventType::PointerMove; + eventInput.position = m_mousePosition; + m_pendingInputEvents.push_back(eventInput); InvalidateRect(m_hwnd, nullptr, FALSE); } void HandleMouseLeave() { - if (m_dragState.active) { - return; - } - m_mousePosition = UIPoint(-1000.0f, -1000.0f); m_resetHovered = false; - m_dockState.hoveredTarget = {}; - RefreshLayout(); + + UIInputEvent eventInput = {}; + eventInput.type = UIInputEventType::PointerLeave; + eventInput.position = m_mousePosition; + m_pendingInputEvents.push_back(eventInput); InvalidateRect(m_hwnd, nullptr, FALSE); } void HandleLeftButtonDown(float x, float y) { UpdateSceneRects(); m_mousePosition = UIPoint(x, y); - m_dockState.focused = true; - RefreshLayout(); - UpdateHoverTarget(); - - const UIEditorDockHostHitTarget hit = m_dockState.hoveredTarget; - if (hit.kind != UIEditorDockHostHitTargetKind::SplitterHandle) { + m_resetPressed = ContainsPoint(m_resetButtonRect, x, y); + if (m_resetPressed) { InvalidateRect(m_hwnd, nullptr, FALSE); return; } - const auto* splitter = FindUIEditorDockHostSplitterLayout(m_layout, hit.nodeId); - if (splitter == nullptr) { - return; - } - - if (!BeginUISplitterDrag( - 1u, - splitter->axis == UIEditorWorkspaceSplitAxis::Horizontal - ? XCEngine::UI::Layout::UILayoutAxis::Horizontal - : XCEngine::UI::Layout::UILayoutAxis::Vertical, - splitter->bounds, - splitter->splitterLayout, - splitter->constraints, - splitter->metrics, - m_mousePosition, - m_dragState)) { - return; - } - - m_dragSplitterNodeId = splitter->nodeId; - m_dockState.activeSplitterNodeId = splitter->nodeId; - SetCapture(m_hwnd); - m_lastResult = "开始拖拽 splitter: " + splitter->nodeId; - RefreshLayout(); + UIInputEvent eventInput = {}; + eventInput.type = UIInputEventType::PointerButtonDown; + eventInput.position = m_mousePosition; + eventInput.pointerButton = UIPointerButton::Left; + m_pendingInputEvents.push_back(eventInput); InvalidateRect(m_hwnd, nullptr, FALSE); } @@ -550,115 +509,81 @@ private: UpdateSceneRects(); m_mousePosition = UIPoint(x, y); - if (m_dragState.active) { - XCEngine::UI::Layout::UISplitterLayoutResult draggedLayout = {}; - if (UpdateUISplitterDrag(m_dragState, m_mousePosition, draggedLayout)) { - ApplyDraggedSplitterRatio(draggedLayout.splitRatio); - } - - EndUISplitterDrag(m_dragState); - m_dockState.activeSplitterNodeId.clear(); - if (GetCapture() == m_hwnd) { - ReleaseCapture(); - } - m_lastResult = "结束拖拽 splitter: " + m_dragSplitterNodeId; - m_dragSplitterNodeId.clear(); - RefreshLayout(); - UpdateHoverTarget(); - InvalidateRect(m_hwnd, nullptr, FALSE); - return; - } - - if (ContainsPoint(m_resetButtonRect, x, y)) { + const bool resetTriggered = m_resetPressed && ContainsPoint(m_resetButtonRect, x, y); + m_resetPressed = false; + if (resetTriggered) { ResetScenario(); + m_lastResult = "Reset"; InvalidateRect(m_hwnd, nullptr, FALSE); return; } - RefreshLayout(); - UpdateHoverTarget(); - ExecuteClick(m_dockState.hoveredTarget); - RefreshLayout(); - UpdateHoverTarget(); + UIInputEvent eventInput = {}; + eventInput.type = UIInputEventType::PointerButtonUp; + eventInput.position = m_mousePosition; + eventInput.pointerButton = UIPointerButton::Left; + m_pendingInputEvents.push_back(eventInput); InvalidateRect(m_hwnd, nullptr, FALSE); } - void ExecuteClick(const UIEditorDockHostHitTarget& hit) { - switch (hit.kind) { - case UIEditorDockHostHitTargetKind::Tab: - DispatchWorkspaceCommand( - UIEditorWorkspaceCommandKind::ActivatePanel, - hit.panelId, - "Activate Tab"); - return; - case UIEditorDockHostHitTargetKind::TabCloseButton: - DispatchWorkspaceCommand( - UIEditorWorkspaceCommandKind::ClosePanel, - hit.panelId, - "Close Tab"); - return; - case UIEditorDockHostHitTargetKind::PanelHeader: - case UIEditorDockHostHitTargetKind::PanelBody: - case UIEditorDockHostHitTargetKind::PanelFooter: - DispatchWorkspaceCommand( - UIEditorWorkspaceCommandKind::ActivatePanel, - hit.panelId, - "Activate Panel"); - return; - case UIEditorDockHostHitTargetKind::PanelCloseButton: - DispatchWorkspaceCommand( - UIEditorWorkspaceCommandKind::ClosePanel, - hit.panelId, - "Close Panel"); - return; - case UIEditorDockHostHitTargetKind::TabStripBackground: - m_lastResult = "DockHost focus = On"; - return; - case UIEditorDockHostHitTargetKind::None: - default: - m_dockState.focused = false; - m_lastResult = "DockHost focus = Off"; - return; + void ApplyHostCaptureRequests(const UIEditorDockHostInteractionResult& result) { + if (result.requestPointerCapture && GetCapture() != m_hwnd) { + SetCapture(m_hwnd); + } + if (result.releasePointerCapture && GetCapture() == m_hwnd) { + ReleaseCapture(); } } - void DispatchWorkspaceCommand( - UIEditorWorkspaceCommandKind kind, - std::string_view panelId, - std::string_view label) { - UIEditorWorkspaceCommand command = {}; - command.kind = kind; - command.panelId = std::string(panelId); - - const UIEditorWorkspaceCommandResult result = m_controller.Dispatch(command); - m_lastResult = - std::string(label) + " -> " + - std::string(GetUIEditorWorkspaceCommandStatusName(result.status)) + - " | " + - result.message; - } - - void ApplyDraggedSplitterRatio(float splitRatio) { - auto snapshot = m_controller.CaptureLayoutSnapshot(); - if (!TrySetUIEditorWorkspaceSplitRatio(snapshot.workspace, m_dragSplitterNodeId, splitRatio)) { + void SetInteractionResult(const UIEditorDockHostInteractionResult& result) { + if (result.layoutResult.status != UIEditorWorkspaceLayoutOperationStatus::Rejected) { + m_lastResult = + std::string("Layout: ") + + std::string(GetUIEditorWorkspaceLayoutOperationStatusName(result.layoutResult.status)) + + " | " + + (result.layoutResult.message.empty() ? "layout updated" : result.layoutResult.message); return; } - const auto result = m_controller.RestoreLayoutSnapshot(snapshot); - std::ostringstream stream; - stream.setf(std::ios::fixed, std::ios::floatfield); - stream.precision(2); - stream << "Drag " << m_dragSplitterNodeId << " -> " - << GetUIEditorWorkspaceLayoutOperationStatusName(result.status) - << " | ratio=" << splitRatio; - m_lastResult = stream.str(); - RefreshLayout(); + if (result.commandResult.status != UIEditorWorkspaceCommandStatus::Rejected) { + m_lastResult = + std::string("Command: ") + + std::string(GetUIEditorWorkspaceCommandStatusName(result.commandResult.status)) + + " | " + + (result.commandResult.message.empty() ? "command handled" : result.commandResult.message); + return; + } + + if (result.requestPointerCapture) { + m_lastResult = "Capture: begin splitter drag"; + return; + } + + if (result.releasePointerCapture) { + m_lastResult = "Capture: end splitter drag"; + return; + } + + if (result.hitTarget.kind != UIEditorDockHostHitTargetKind::None) { + m_lastResult = "Hover: " + DescribeHitTarget(result.hitTarget); + return; + } + + if (result.consumed) { + m_lastResult = "Consumed: input handled by DockHostInteraction"; + } } void RenderFrame() { UpdateSceneRects(); - RefreshLayout(); - UpdateHoverTarget(); + m_cachedFrame = UpdateUIEditorDockHostInteraction( + m_interactionState, + m_controller, + m_previewRect, + m_pendingInputEvents); + m_pendingInputEvents.clear(); + ApplyHostCaptureRequests(m_cachedFrame.result); + SetInteractionResult(m_cachedFrame.result); RECT clientRect = {}; GetClientRect(m_hwnd, &clientRect); @@ -672,54 +597,67 @@ private: DrawCard( drawList, m_introRect, - "测试功能:DockHost / Workspace Compose 基础层", - "只验证 DockHost 真实 compose、splitter drag、tab host、panel frame 联动,不包含业务面板。"); + "这个测试在验证什么功能?", + "验证 Workspace + DockHost 的组合场景是否完全收口到统一交互层。"); drawList.AddText( UIPoint(m_introRect.x + 16.0f, m_introRect.y + 68.0f), - "重点检查:三条 splitter 的 resize 是否稳定;关闭面板后 branch 是否正确 collapse;点击 tab / panel 是否同步 active。", + "1. splitter drag 只能通过 UIEditorDockHostInteraction + WorkspaceController 生效。", kTextPrimary, 12.0f); drawList.AddText( UIPoint(m_introRect.x + 16.0f, m_introRect.y + 92.0f), - "操作:拖拽 Hierarchy / Documents / Inspector / Console 之间的 splitter;点击 Document A/B/C;点 X 关闭 tab 或 side panel;Reset 恢复;F12 截图。", - kTextMuted, + "2. tab 激活/关闭、panel 激活/关闭都必须统一回到 controller。", + kTextPrimary, 12.0f); drawList.AddText( UIPoint(m_introRect.x + 16.0f, m_introRect.y + 116.0f), - "预期:splitter 会被最小尺寸 clamp;Document C 没有 X;Inspector/Console 关闭后对应分支会收拢,不应留下歪掉的空洞。", - kTextWeak, + "3. active panel、visible panels、split ratio 在组合场景里必须同步更新。", + kTextPrimary, 12.0f); + drawList.AddText( + UIPoint(m_introRect.x + 16.0f, m_introRect.y + 140.0f), + "4. 操作建议:拖动三个 splitter,点击 Document A/B/C,关闭 Inspector 或 Console,按 F12 截图。", + kTextWeak, + 11.0f); DrawCard( drawList, m_stateRect, "状态回显", - "这里直接回显 hover / focus / dragging / active panel / split ratio,方便人工检查。"); + "这里直接展示 hover / focus / dragging / active panel / split ratio。"); DrawButton(drawList, m_resetButtonRect, "Reset", m_resetHovered); const auto validation = m_controller.ValidateState(); drawList.AddText( UIPoint(m_stateRect.x + 16.0f, m_stateRect.y + 70.0f), - "Hover: " + DescribeHitTarget(m_dockState.hoveredTarget), + "Hover: " + DescribeHitTarget(m_interactionState.dockHostState.hoveredTarget), kTextPrimary, 13.0f); drawList.AddText( UIPoint(m_stateRect.x + 16.0f, m_stateRect.y + 96.0f), - std::string("Focused: ") + (m_dockState.focused ? "On" : "Off"), - kTextPrimary, + std::string("Focused: ") + (m_cachedFrame.focused ? "On" : "Off"), + m_cachedFrame.focused ? kSuccess : kTextMuted, 13.0f); drawList.AddText( UIPoint(m_stateRect.x + 16.0f, m_stateRect.y + 122.0f), - "Dragging: " + (m_dragSplitterNodeId.empty() ? std::string("(none)") : m_dragSplitterNodeId), - kTextPrimary, + "Capture: " + std::string(GetCapture() == m_hwnd ? "On" : "Off"), + GetCapture() == m_hwnd ? kSuccess : kTextMuted, 13.0f); drawList.AddText( UIPoint(m_stateRect.x + 16.0f, m_stateRect.y + 148.0f), - "Active Panel: " + m_controller.GetWorkspace().activePanelId, + "Dragging: " + + (m_interactionState.dockHostState.activeSplitterNodeId.empty() + ? std::string("(none)") + : m_interactionState.dockHostState.activeSplitterNodeId), kTextPrimary, 13.0f); drawList.AddText( UIPoint(m_stateRect.x + 16.0f, m_stateRect.y + 174.0f), + "Active Panel: " + m_controller.GetWorkspace().activePanelId, + kTextPrimary, + 13.0f); + drawList.AddText( + UIPoint(m_stateRect.x + 16.0f, m_stateRect.y + 198.0f), "Visible Panels: " + JoinVisiblePanelIds(m_controller), kTextMuted, 12.0f); @@ -741,7 +679,7 @@ private: drawList.AddText( UIPoint(m_stateRect.x + 16.0f, m_stateRect.y + 356.0f), "Result: " + m_lastResult, - kTextMuted, + kWarning, 12.0f); drawList.AddText( UIPoint(m_stateRect.x + 16.0f, m_stateRect.y + 382.0f), @@ -765,10 +703,10 @@ private: drawList, m_previewCardRect, "预览区", - "这里只保留一个 DockHost 试验场,不混入业务 UI。"); + "这里只保留一个 DockHost 组合试验场,不混入业务 UI。"); - AppendUIEditorDockHostBackground(drawList, m_layout); - AppendUIEditorDockHostForeground(drawList, m_layout); + AppendUIEditorDockHostBackground(drawList, m_cachedFrame.layout); + AppendUIEditorDockHostForeground(drawList, m_cachedFrame.layout); const bool framePresented = m_renderer.Render(drawData); m_autoScreenshot.CaptureIfRequested( @@ -785,10 +723,9 @@ private: AutoScreenshotController m_autoScreenshot = {}; std::filesystem::path m_captureRoot = {}; UIEditorWorkspaceController m_controller = {}; - UIEditorDockHostState m_dockState = {}; - UIEditorDockHostLayout m_layout = {}; - UISplitterDragState m_dragState = {}; - std::string m_dragSplitterNodeId = {}; + UIEditorDockHostInteractionState m_interactionState = {}; + UIEditorDockHostInteractionFrame m_cachedFrame = {}; + std::vector m_pendingInputEvents = {}; UIPoint m_mousePosition = UIPoint(-1000.0f, -1000.0f); UIRect m_introRect = {}; UIRect m_stateRect = {}; @@ -796,6 +733,7 @@ private: UIRect m_previewRect = {}; UIRect m_resetButtonRect = {}; bool m_resetHovered = false; + bool m_resetPressed = false; std::string m_lastResult = {}; }; diff --git a/tests/UI/Editor/unit/CMakeLists.txt b/tests/UI/Editor/unit/CMakeLists.txt index b69e832d..7df7bff6 100644 --- a/tests/UI/Editor/unit/CMakeLists.txt +++ b/tests/UI/Editor/unit/CMakeLists.txt @@ -24,6 +24,7 @@ set(EDITOR_UI_UNIT_TEST_SOURCES test_ui_editor_color_field.cpp test_ui_editor_color_field_interaction.cpp test_ui_editor_dock_host.cpp + test_ui_editor_inline_rename_session.cpp test_ui_editor_list_view.cpp test_ui_editor_list_view_interaction.cpp test_ui_editor_panel_chrome.cpp @@ -44,6 +45,7 @@ set(EDITOR_UI_UNIT_TEST_SOURCES test_ui_editor_scroll_view_interaction.cpp test_ui_editor_status_bar.cpp test_ui_editor_tab_strip.cpp + test_ui_editor_tab_strip_interaction.cpp test_ui_editor_tree_view.cpp test_ui_editor_tree_view_interaction.cpp test_ui_editor_viewport_input_bridge.cpp diff --git a/tests/UI/Editor/unit/test_ui_editor_command_dispatcher.cpp b/tests/UI/Editor/unit/test_ui_editor_command_dispatcher.cpp index 7767c965..6ff5eb36 100644 --- a/tests/UI/Editor/unit/test_ui_editor_command_dispatcher.cpp +++ b/tests/UI/Editor/unit/test_ui_editor_command_dispatcher.cpp @@ -1,6 +1,6 @@ #include -#include +#include namespace { diff --git a/tests/UI/Editor/unit/test_ui_editor_command_registry.cpp b/tests/UI/Editor/unit/test_ui_editor_command_registry.cpp index 5d77ea01..87c6bdc4 100644 --- a/tests/UI/Editor/unit/test_ui_editor_command_registry.cpp +++ b/tests/UI/Editor/unit/test_ui_editor_command_registry.cpp @@ -1,6 +1,6 @@ #include -#include +#include namespace { diff --git a/tests/UI/Editor/unit/test_ui_editor_dock_host_interaction.cpp b/tests/UI/Editor/unit/test_ui_editor_dock_host_interaction.cpp index af494701..d7e3c193 100644 --- a/tests/UI/Editor/unit/test_ui_editor_dock_host_interaction.cpp +++ b/tests/UI/Editor/unit/test_ui_editor_dock_host_interaction.cpp @@ -1,5 +1,6 @@ #include +#include #include #include #include @@ -11,6 +12,7 @@ using XCEngine::UI::UIInputEventType; using XCEngine::UI::UIPoint; using XCEngine::UI::UIRect; using XCEngine::UI::UIPointerButton; +using XCEngine::Input::KeyCode; using XCEngine::UI::Editor::BuildDefaultUIEditorWorkspaceController; using XCEngine::UI::Editor::BuildUIEditorWorkspacePanel; using XCEngine::UI::Editor::BuildUIEditorWorkspaceSplit; @@ -86,6 +88,13 @@ UIInputEvent MakeFocusLost() { return event; } +UIInputEvent MakeKeyDown(KeyCode keyCode) { + UIInputEvent event = {}; + event.type = UIInputEventType::KeyDown; + event.keyCode = static_cast(keyCode); + return event; +} + UIPoint RectCenter(const UIRect& rect) { return UIPoint(rect.x + rect.width * 0.5f, rect.y + rect.height * 0.5f); } @@ -184,6 +193,14 @@ TEST(UIEditorDockHostInteractionTest, ClickingTabActivatesTargetPanel) { EXPECT_EQ(frame.result.hitTarget.kind, UIEditorDockHostHitTargetKind::Tab); EXPECT_EQ(frame.result.hitTarget.panelId, "doc-a"); + frame = UpdateUIEditorDockHostInteraction( + state, + controller, + UIRect(0.0f, 0.0f, 800.0f, 600.0f), + { MakePointerDown(RectCenter(docARect).x, RectCenter(docARect).y) }); + EXPECT_TRUE(frame.result.consumed); + EXPECT_FALSE(frame.result.commandExecuted); + frame = UpdateUIEditorDockHostInteraction( state, controller, @@ -218,6 +235,14 @@ TEST(UIEditorDockHostInteractionTest, ClickingTabCloseClosesPanelThroughControll EXPECT_EQ(frame.result.hitTarget.kind, UIEditorDockHostHitTargetKind::TabCloseButton); EXPECT_EQ(frame.result.hitTarget.panelId, "doc-b"); + frame = UpdateUIEditorDockHostInteraction( + state, + controller, + UIRect(0.0f, 0.0f, 800.0f, 600.0f), + { MakePointerDown(closeCenter.x, closeCenter.y) }); + EXPECT_TRUE(frame.result.consumed); + EXPECT_FALSE(frame.result.commandExecuted); + frame = UpdateUIEditorDockHostInteraction( state, controller, @@ -233,6 +258,84 @@ TEST(UIEditorDockHostInteractionTest, ClickingTabCloseClosesPanelThroughControll EXPECT_EQ(controller.GetWorkspace().activePanelId, "doc-a"); } +TEST(UIEditorDockHostInteractionTest, FocusedTabStripHandlesKeyboardNavigationThroughTabStripInteraction) { + auto controller = + BuildDefaultUIEditorWorkspaceController(BuildPanelRegistry(), BuildWorkspace()); + UIEditorDockHostInteractionState state = {}; + + auto frame = UpdateUIEditorDockHostInteraction( + state, + controller, + UIRect(0.0f, 0.0f, 800.0f, 600.0f), + {}); + ASSERT_EQ(frame.layout.tabStacks.size(), 1u); + const UIRect docARect = frame.layout.tabStacks.front().tabStripLayout.tabHeaderRects[0]; + const UIPoint docACenter = RectCenter(docARect); + + frame = UpdateUIEditorDockHostInteraction( + state, + controller, + UIRect(0.0f, 0.0f, 800.0f, 600.0f), + { MakePointerMove(docACenter.x, docACenter.y) }); + EXPECT_EQ(frame.result.hitTarget.kind, UIEditorDockHostHitTargetKind::Tab); + + frame = UpdateUIEditorDockHostInteraction( + state, + controller, + UIRect(0.0f, 0.0f, 800.0f, 600.0f), + { MakePointerDown(docACenter.x, docACenter.y) }); + EXPECT_TRUE(frame.result.consumed); + + frame = UpdateUIEditorDockHostInteraction( + state, + controller, + UIRect(0.0f, 0.0f, 800.0f, 600.0f), + { MakePointerUp(docACenter.x, docACenter.y) }); + EXPECT_TRUE(frame.result.commandExecuted); + EXPECT_EQ(controller.GetWorkspace().activePanelId, "doc-a"); + + frame = UpdateUIEditorDockHostInteraction( + state, + controller, + UIRect(0.0f, 0.0f, 800.0f, 600.0f), + { MakeKeyDown(KeyCode::Right) }); + EXPECT_TRUE(frame.result.consumed); + EXPECT_TRUE(frame.result.commandExecuted); + EXPECT_EQ(controller.GetWorkspace().activePanelId, "doc-b"); + ASSERT_EQ(frame.layout.tabStacks.size(), 1u); + EXPECT_EQ(frame.layout.tabStacks.front().selectedPanelId, "doc-b"); +} + +TEST(UIEditorDockHostInteractionTest, BatchedPointerMoveDownUpActivatesTabInSameUpdateCall) { + auto controller = + BuildDefaultUIEditorWorkspaceController(BuildPanelRegistry(), BuildWorkspace()); + UIEditorDockHostInteractionState state = {}; + + auto frame = UpdateUIEditorDockHostInteraction( + state, + controller, + UIRect(0.0f, 0.0f, 800.0f, 600.0f), + {}); + ASSERT_EQ(frame.layout.tabStacks.size(), 1u); + const UIPoint docACenter = + RectCenter(frame.layout.tabStacks.front().tabStripLayout.tabHeaderRects[0]); + + frame = UpdateUIEditorDockHostInteraction( + state, + controller, + UIRect(0.0f, 0.0f, 800.0f, 600.0f), + { + MakePointerMove(docACenter.x, docACenter.y), + MakePointerDown(docACenter.x, docACenter.y), + MakePointerUp(docACenter.x, docACenter.y) + }); + EXPECT_TRUE(frame.result.consumed); + EXPECT_TRUE(frame.result.commandExecuted); + EXPECT_EQ(controller.GetWorkspace().activePanelId, "doc-a"); + ASSERT_EQ(frame.layout.tabStacks.size(), 1u); + EXPECT_EQ(frame.layout.tabStacks.front().selectedPanelId, "doc-a"); +} + TEST(UIEditorDockHostInteractionTest, ClickingStandalonePanelBodyActivatesTargetPanel) { auto controller = BuildDefaultUIEditorWorkspaceController(BuildPanelRegistry(), BuildWorkspace()); diff --git a/tests/UI/Editor/unit/test_ui_editor_inline_rename_session.cpp b/tests/UI/Editor/unit/test_ui_editor_inline_rename_session.cpp new file mode 100644 index 00000000..ec6fedc6 --- /dev/null +++ b/tests/UI/Editor/unit/test_ui_editor_inline_rename_session.cpp @@ -0,0 +1,124 @@ +#include + +#include + +#include + +namespace { + +using XCEngine::Input::KeyCode; +using XCEngine::UI::UIInputEvent; +using XCEngine::UI::UIInputEventType; +using XCEngine::UI::UIRect; +using XCEngine::UI::Editor::UIEditorInlineRenameSessionRequest; +using XCEngine::UI::Editor::UIEditorInlineRenameSessionState; +using XCEngine::UI::Editor::UpdateUIEditorInlineRenameSession; + +UIInputEvent MakeKeyDown(KeyCode keyCode) { + UIInputEvent event = {}; + event.type = UIInputEventType::KeyDown; + event.keyCode = static_cast(keyCode); + return event; +} + +UIInputEvent MakeCharacter(char character) { + UIInputEvent event = {}; + event.type = UIInputEventType::Character; + event.character = static_cast(character); + return event; +} + +UIInputEvent MakeFocusLost() { + UIInputEvent event = {}; + event.type = UIInputEventType::FocusLost; + return event; +} + +UIEditorInlineRenameSessionRequest MakeRequest(bool beginSession = false) { + UIEditorInlineRenameSessionRequest request = {}; + request.beginSession = beginSession; + request.itemId = "camera"; + request.initialText = "Camera"; + request.bounds = UIRect(10.0f, 20.0f, 180.0f, 24.0f); + return request; +} + +} // namespace + +TEST(UIEditorInlineRenameSessionTest, BeginRequestStartsActiveEditingSession) { + UIEditorInlineRenameSessionState state = {}; + + const auto frame = UpdateUIEditorInlineRenameSession( + state, + MakeRequest(true), + {}); + + EXPECT_TRUE(frame.result.sessionStarted); + EXPECT_TRUE(frame.result.active); + EXPECT_EQ(frame.result.itemId, "camera"); + EXPECT_TRUE(state.active); + EXPECT_EQ(state.itemId, "camera"); + EXPECT_TRUE(state.textFieldInteraction.textFieldState.focused); + EXPECT_TRUE(state.textFieldInteraction.textFieldState.editing); + EXPECT_EQ(state.textFieldInteraction.textFieldState.displayText, "Camera"); +} + +TEST(UIEditorInlineRenameSessionTest, EnterCommitsEditedValueAndClosesSession) { + UIEditorInlineRenameSessionState state = {}; + UpdateUIEditorInlineRenameSession(state, MakeRequest(true), {}); + + UpdateUIEditorInlineRenameSession( + state, + MakeRequest(false), + { MakeCharacter('2') }); + + const auto frame = UpdateUIEditorInlineRenameSession( + state, + MakeRequest(false), + { MakeKeyDown(KeyCode::Enter) }); + + EXPECT_TRUE(frame.result.sessionCommitted); + EXPECT_TRUE(frame.result.valueChanged); + EXPECT_EQ(frame.result.valueBefore, "Camera"); + EXPECT_EQ(frame.result.valueAfter, "Camera2"); + EXPECT_FALSE(state.active); +} + +TEST(UIEditorInlineRenameSessionTest, EscapeCancelsEditedValueAndClosesSession) { + UIEditorInlineRenameSessionState state = {}; + UpdateUIEditorInlineRenameSession(state, MakeRequest(true), {}); + + UpdateUIEditorInlineRenameSession( + state, + MakeRequest(false), + { MakeCharacter('X') }); + + const auto frame = UpdateUIEditorInlineRenameSession( + state, + MakeRequest(false), + { MakeKeyDown(KeyCode::Escape) }); + + EXPECT_TRUE(frame.result.sessionCanceled); + EXPECT_EQ(frame.result.valueBefore, "Camera"); + EXPECT_EQ(frame.result.valueAfter, "Camera"); + EXPECT_FALSE(state.active); +} + +TEST(UIEditorInlineRenameSessionTest, FocusLostCommitsEditedValue) { + UIEditorInlineRenameSessionState state = {}; + UpdateUIEditorInlineRenameSession(state, MakeRequest(true), {}); + + UpdateUIEditorInlineRenameSession( + state, + MakeRequest(false), + { MakeCharacter('X') }); + + const auto frame = UpdateUIEditorInlineRenameSession( + state, + MakeRequest(false), + { MakeFocusLost() }); + + EXPECT_TRUE(frame.result.sessionCommitted); + EXPECT_EQ(frame.result.valueAfter, "CameraX"); + EXPECT_FALSE(state.active); +} diff --git a/tests/UI/Editor/unit/test_ui_editor_list_view.cpp b/tests/UI/Editor/unit/test_ui_editor_list_view.cpp index 0ab967e6..4e2848fc 100644 --- a/tests/UI/Editor/unit/test_ui_editor_list_view.cpp +++ b/tests/UI/Editor/unit/test_ui_editor_list_view.cpp @@ -1,6 +1,6 @@ #include -#include +#include namespace { diff --git a/tests/UI/Editor/unit/test_ui_editor_list_view_interaction.cpp b/tests/UI/Editor/unit/test_ui_editor_list_view_interaction.cpp index 159acd3f..8a8f937f 100644 --- a/tests/UI/Editor/unit/test_ui_editor_list_view_interaction.cpp +++ b/tests/UI/Editor/unit/test_ui_editor_list_view_interaction.cpp @@ -1,6 +1,6 @@ #include -#include +#include #include @@ -9,6 +9,7 @@ namespace { using XCEngine::Input::KeyCode; using XCEngine::UI::UIInputEvent; using XCEngine::UI::UIInputEventType; +using XCEngine::UI::UIInputModifiers; using XCEngine::UI::UIPoint; using XCEngine::UI::UIPointerButton; using XCEngine::UI::UIRect; @@ -27,6 +28,18 @@ std::vector BuildListItems() { }; } +UIInputModifiers MakeShiftModifiers() { + UIInputModifiers modifiers = {}; + modifiers.shift = true; + return modifiers; +} + +UIInputModifiers MakeControlModifiers() { + UIInputModifiers modifiers = {}; + modifiers.control = true; + return modifiers; +} + UIInputEvent MakePointerMove(float x, float y) { UIInputEvent event = {}; event.type = UIInputEventType::PointerMove; @@ -34,26 +47,37 @@ UIInputEvent MakePointerMove(float x, float y) { return event; } -UIInputEvent MakePointerDown(float x, float y, UIPointerButton button = UIPointerButton::Left) { +UIInputEvent MakePointerDown( + float x, + float y, + UIPointerButton button = UIPointerButton::Left, + UIInputModifiers modifiers = {}) { UIInputEvent event = {}; event.type = UIInputEventType::PointerButtonDown; event.position = UIPoint(x, y); event.pointerButton = button; + event.modifiers = modifiers; return event; } -UIInputEvent MakePointerUp(float x, float y, UIPointerButton button = UIPointerButton::Left) { +UIInputEvent MakePointerUp( + float x, + float y, + UIPointerButton button = UIPointerButton::Left, + UIInputModifiers modifiers = {}) { UIInputEvent event = {}; event.type = UIInputEventType::PointerButtonUp; event.position = UIPoint(x, y); event.pointerButton = button; + event.modifiers = modifiers; return event; } -UIInputEvent MakeKeyDown(KeyCode keyCode) { +UIInputEvent MakeKeyDown(KeyCode keyCode, UIInputModifiers modifiers = {}) { UIInputEvent event = {}; event.type = UIInputEventType::KeyDown; event.keyCode = static_cast(keyCode); + event.modifiers = modifiers; return event; } @@ -163,6 +187,124 @@ TEST(UIEditorListViewInteractionTest, RightClickRowSelectsItemAndMarksSecondaryC EXPECT_TRUE(state.listViewState.focused); } +TEST(UIEditorListViewInteractionTest, ControlClickRowTogglesMembershipWithoutDroppingExistingSelection) { + const auto items = BuildListItems(); + UISelectionModel selectionModel = {}; + selectionModel.SetSelections({ "material", "script" }, "script"); + UIEditorListViewInteractionState state = {}; + state.listViewState.focused = true; + state.selectionAnchorId = "script"; + + const auto initialFrame = UpdateUIEditorListViewInteraction( + state, + selectionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + {}); + const UIPoint sceneCenter = RectCenter(initialFrame.layout.rowRects[0]); + auto frame = UpdateUIEditorListViewInteraction( + state, + selectionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + { + MakePointerDown(sceneCenter.x, sceneCenter.y, UIPointerButton::Left, MakeControlModifiers()), + MakePointerUp(sceneCenter.x, sceneCenter.y, UIPointerButton::Left, MakeControlModifiers()) + }); + + EXPECT_TRUE(frame.result.selectionChanged); + EXPECT_TRUE(selectionModel.IsSelected("scene")); + EXPECT_TRUE(selectionModel.IsSelected("material")); + EXPECT_TRUE(selectionModel.IsSelected("script")); + EXPECT_EQ(selectionModel.GetSelectedId(), "scene"); + + const UIPoint scriptCenter = RectCenter(initialFrame.layout.rowRects[2]); + frame = UpdateUIEditorListViewInteraction( + state, + selectionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + { + MakePointerDown(scriptCenter.x, scriptCenter.y, UIPointerButton::Left, MakeControlModifiers()), + MakePointerUp(scriptCenter.x, scriptCenter.y, UIPointerButton::Left, MakeControlModifiers()) + }); + + EXPECT_TRUE(frame.result.selectionChanged); + EXPECT_TRUE(selectionModel.IsSelected("scene")); + EXPECT_TRUE(selectionModel.IsSelected("material")); + EXPECT_FALSE(selectionModel.IsSelected("script")); +} + +TEST(UIEditorListViewInteractionTest, ShiftClickRowSelectsRangeFromAnchor) { + const auto items = BuildListItems(); + UISelectionModel selectionModel = {}; + selectionModel.SetSelection("material"); + UIEditorListViewInteractionState state = {}; + state.listViewState.focused = true; + state.selectionAnchorId = "material"; + + const auto initialFrame = UpdateUIEditorListViewInteraction( + state, + selectionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + {}); + const UIPoint textureCenter = RectCenter(initialFrame.layout.rowRects[3]); + + const auto frame = UpdateUIEditorListViewInteraction( + state, + selectionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + { + MakePointerDown(textureCenter.x, textureCenter.y, UIPointerButton::Left, MakeShiftModifiers()), + MakePointerUp(textureCenter.x, textureCenter.y, UIPointerButton::Left, MakeShiftModifiers()) + }); + + EXPECT_TRUE(frame.result.selectionChanged); + EXPECT_EQ(frame.result.selectedItemId, "texture"); + EXPECT_TRUE(selectionModel.IsSelected("material")); + EXPECT_TRUE(selectionModel.IsSelected("script")); + EXPECT_TRUE(selectionModel.IsSelected("texture")); + EXPECT_EQ(selectionModel.GetSelectionCount(), 3u); + EXPECT_EQ(state.selectionAnchorId, "material"); +} + +TEST(UIEditorListViewInteractionTest, RightClickSelectedRowKeepsExistingMultiSelection) { + const auto items = BuildListItems(); + UISelectionModel selectionModel = {}; + selectionModel.SetSelections({ "material", "script", "texture" }, "material"); + UIEditorListViewInteractionState state = {}; + state.listViewState.focused = true; + state.selectionAnchorId = "material"; + + const auto initialFrame = UpdateUIEditorListViewInteraction( + state, + selectionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + {}); + const UIPoint scriptCenter = RectCenter(initialFrame.layout.rowRects[2]); + + const auto frame = UpdateUIEditorListViewInteraction( + state, + selectionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + { + MakePointerDown(scriptCenter.x, scriptCenter.y, UIPointerButton::Right), + MakePointerUp(scriptCenter.x, scriptCenter.y, UIPointerButton::Right) + }); + + EXPECT_TRUE(frame.result.secondaryClicked); + EXPECT_FALSE(frame.result.selectionChanged); + EXPECT_TRUE(selectionModel.IsSelected("material")); + EXPECT_TRUE(selectionModel.IsSelected("script")); + EXPECT_TRUE(selectionModel.IsSelected("texture")); + EXPECT_EQ(selectionModel.GetSelectionCount(), 3u); + EXPECT_EQ(selectionModel.GetSelectedId(), "script"); +} + TEST(UIEditorListViewInteractionTest, ArrowAndHomeEndKeysDriveSelectionWhenFocused) { const auto items = BuildListItems(); UISelectionModel selectionModel = {}; @@ -201,6 +343,50 @@ TEST(UIEditorListViewInteractionTest, ArrowAndHomeEndKeysDriveSelectionWhenFocus EXPECT_TRUE(selectionModel.IsSelected("texture")); } +TEST(UIEditorListViewInteractionTest, ShiftArrowExtendsVisibleRangeFromAnchor) { + const auto items = BuildListItems(); + UISelectionModel selectionModel = {}; + selectionModel.SetSelection("material"); + UIEditorListViewInteractionState state = {}; + state.listViewState.focused = true; + state.selectionAnchorId = "material"; + + const auto frame = UpdateUIEditorListViewInteraction( + state, + selectionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + { MakeKeyDown(KeyCode::Down, MakeShiftModifiers()) }); + + EXPECT_TRUE(frame.result.keyboardNavigated); + EXPECT_TRUE(selectionModel.IsSelected("material")); + EXPECT_TRUE(selectionModel.IsSelected("script")); + EXPECT_EQ(selectionModel.GetSelectionCount(), 2u); + EXPECT_EQ(frame.result.selectedItemId, "script"); +} + +TEST(UIEditorListViewInteractionTest, F2RequestsRenameForPrimarySelectionWhenFocused) { + const auto items = BuildListItems(); + UISelectionModel selectionModel = {}; + selectionModel.SetSelection("script"); + UIEditorListViewInteractionState state = {}; + state.listViewState.focused = true; + + const auto frame = UpdateUIEditorListViewInteraction( + state, + selectionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + { MakeKeyDown(KeyCode::F2) }); + + EXPECT_TRUE(frame.result.renameRequested); + EXPECT_TRUE(frame.result.consumed); + EXPECT_EQ(frame.result.renameItemId, "script"); + EXPECT_EQ(frame.result.selectedItemId, "script"); + EXPECT_EQ(frame.result.selectedIndex, 2u); + EXPECT_FALSE(frame.result.selectionChanged); +} + TEST(UIEditorListViewInteractionTest, OutsideClickAndFocusLostClearFocusAndHoverButKeepSelection) { const auto items = BuildListItems(); UISelectionModel selectionModel = {}; diff --git a/tests/UI/Editor/unit/test_ui_editor_property_grid.cpp b/tests/UI/Editor/unit/test_ui_editor_property_grid.cpp index 63344b21..8792335e 100644 --- a/tests/UI/Editor/unit/test_ui_editor_property_grid.cpp +++ b/tests/UI/Editor/unit/test_ui_editor_property_grid.cpp @@ -94,6 +94,20 @@ UIEditorPropertyGridField MakeEnumField( return field; } +UIEditorPropertyGridField MakeColorField( + std::string id, + std::string label, + XCEngine::UI::UIColor value, + bool showAlpha = true) { + UIEditorPropertyGridField field = {}; + field.fieldId = std::move(id); + field.label = std::move(label); + field.kind = UIEditorPropertyGridFieldKind::Color; + field.colorValue.value = value; + field.colorValue.showAlpha = showAlpha; + return field; +} + UIEditorPropertyGridField MakeVector4Field( std::string id, std::string label, @@ -337,3 +351,68 @@ TEST(UIEditorPropertyGridTest, Vector4FieldUsesHostedLayoutAndForegroundText) { EXPECT_TRUE(ContainsTextCommand(drawData, "4")); EXPECT_EQ(ResolveUIEditorPropertyGridFieldValueText(sections[0].fields[0]), "1, 2, 3, 4"); } + +TEST(UIEditorPropertyGridTest, ColorFieldUsesHostedLayoutAndPopupAwareForeground) { + std::vector sections = { + { + "material", + "Material", + { + MakeColorField("tint", "Tint", XCEngine::UI::UIColor(0.8f, 0.4f, 0.2f, 0.5f)) + }, + 0.0f + } + }; + UISelectionModel selectionModel = {}; + selectionModel.SetSelection("tint"); + UIExpansionModel expansionModel = {}; + expansionModel.Expand("material"); + UIPropertyEditModel propertyEditModel = {}; + UIEditorPropertyGridState state = {}; + state.focused = true; + state.hoveredFieldId = "tint"; + state.hoveredHitTarget = UIEditorPropertyGridHitTargetKind::ValueBox; + state.colorFieldStates = { + { + "tint", + { + XCEngine::UI::Editor::Widgets::UIEditorColorFieldHitTargetKind::Swatch, + XCEngine::UI::Editor::Widgets::UIEditorColorFieldHitTargetKind::None, + true, + true, + 0.0f, + false + } + } + }; + + const auto layout = BuildUIEditorPropertyGridLayout( + UIRect(0.0f, 0.0f, 520.0f, 320.0f), + sections, + expansionModel); + + ASSERT_EQ(layout.visibleFieldIndices.size(), 1u); + EXPECT_GT(layout.fieldValueRects[0].x, layout.fieldLabelRects[0].x + layout.fieldLabelRects[0].width); + EXPECT_GT(layout.fieldValueRects[0].width, 200.0f); + + XCEngine::UI::UIDrawData drawData = {}; + auto& drawList = drawData.EmplaceDrawList("PropertyGridColor"); + AppendUIEditorPropertyGridBackground( + drawList, + layout, + sections, + selectionModel, + propertyEditModel, + state); + AppendUIEditorPropertyGridForeground( + drawList, + layout, + sections, + state, + propertyEditModel); + + EXPECT_TRUE(ContainsTextCommand(drawData, "Tint")); + EXPECT_TRUE(ContainsTextCommand(drawData, "Color")); + EXPECT_TRUE(ContainsTextCommand(drawData, "Hexadecimal")); + EXPECT_EQ(ResolveUIEditorPropertyGridFieldValueText(sections[0].fields[0]), "#CC663380"); +} diff --git a/tests/UI/Editor/unit/test_ui_editor_property_grid_interaction.cpp b/tests/UI/Editor/unit/test_ui_editor_property_grid_interaction.cpp index 18c3281c..ef7d12c0 100644 --- a/tests/UI/Editor/unit/test_ui_editor_property_grid_interaction.cpp +++ b/tests/UI/Editor/unit/test_ui_editor_property_grid_interaction.cpp @@ -1,6 +1,8 @@ #include +#include #include +#include #include @@ -15,8 +17,10 @@ using XCEngine::UI::UIRect; using XCEngine::UI::Widgets::UIExpansionModel; using XCEngine::UI::Widgets::UIPropertyEditModel; using XCEngine::UI::Widgets::UISelectionModel; +using XCEngine::UI::Editor::BuildUIEditorHostedColorFieldMetrics; using XCEngine::UI::Editor::UIEditorPropertyGridInteractionState; using XCEngine::UI::Editor::UpdateUIEditorPropertyGridInteraction; +using XCEngine::UI::Editor::Widgets::BuildUIEditorColorFieldLayout; using XCEngine::UI::Editor::Widgets::UIEditorPropertyGridField; using XCEngine::UI::Editor::Widgets::UIEditorPropertyGridFieldKind; using XCEngine::UI::Editor::Widgets::UIEditorPropertyGridSection; @@ -76,6 +80,20 @@ UIEditorPropertyGridField MakeEnumField( return field; } +UIEditorPropertyGridField MakeColorField( + std::string id, + std::string label, + XCEngine::UI::UIColor value, + bool showAlpha = true) { + UIEditorPropertyGridField field = {}; + field.fieldId = std::move(id); + field.label = std::move(label); + field.kind = UIEditorPropertyGridFieldKind::Color; + field.colorValue.value = value; + field.colorValue.showAlpha = showAlpha; + return field; +} + std::vector BuildSections() { return { { @@ -489,3 +507,101 @@ TEST(UIEditorPropertyGridInteractionTest, ArrowAndHomeEndKeysNavigateVisibleFiel EXPECT_EQ(frame.result.selectedFieldId, "guid"); EXPECT_TRUE(selectionModel.IsSelected("guid")); } + +TEST(UIEditorPropertyGridInteractionTest, ColorFieldPopupCanOpenAndDragAlphaThroughHostedInteraction) { + std::vector sections = { + { + "material", + "Material", + { + MakeColorField("tint", "Tint", XCEngine::UI::UIColor(0.8f, 0.4f, 0.2f, 1.0f)) + }, + 0.0f + } + }; + UISelectionModel selectionModel = {}; + UIExpansionModel expansionModel = {}; + expansionModel.Expand("material"); + UIPropertyEditModel propertyEditModel = {}; + UIEditorPropertyGridInteractionState state = {}; + + auto frame = UpdateUIEditorPropertyGridInteraction( + state, + selectionModel, + expansionModel, + propertyEditModel, + UIRect(0.0f, 0.0f, 520.0f, 360.0f), + sections, + {}); + + XCEngine::UI::Editor::Widgets::UIEditorColorFieldSpec initialColorSpec = {}; + initialColorSpec.fieldId = "tint"; + initialColorSpec.label = "Tint"; + initialColorSpec.value = sections[0].fields[0].colorValue.value; + initialColorSpec.showAlpha = sections[0].fields[0].colorValue.showAlpha; + const auto initialColorLayout = BuildUIEditorColorFieldLayout( + frame.layout.fieldRowRects[0], + initialColorSpec, + BuildUIEditorHostedColorFieldMetrics({}), + UIRect(-4096.0f, -4096.0f, 8192.0f, 8192.0f)); + const UIPoint swatchCenter = RectCenter(initialColorLayout.swatchRect); + frame = UpdateUIEditorPropertyGridInteraction( + state, + selectionModel, + expansionModel, + propertyEditModel, + UIRect(0.0f, 0.0f, 520.0f, 360.0f), + sections, + { + MakePointerDown(swatchCenter.x, swatchCenter.y), + MakePointerUp(swatchCenter.x, swatchCenter.y) + }); + + ASSERT_TRUE(frame.result.popupOpened); + ASSERT_EQ(state.propertyGridState.colorFieldStates.size(), 1u); + EXPECT_TRUE(state.propertyGridState.colorFieldStates[0].state.popupOpen); + EXPECT_TRUE(selectionModel.IsSelected("tint")); + + const auto popupFrame = UpdateUIEditorPropertyGridInteraction( + state, + selectionModel, + expansionModel, + propertyEditModel, + UIRect(0.0f, 0.0f, 520.0f, 360.0f), + sections, + {}); + const auto& colorState = state.propertyGridState.colorFieldStates[0].state; + EXPECT_TRUE(colorState.popupOpen); + + XCEngine::UI::Editor::Widgets::UIEditorColorFieldSpec colorSpec = {}; + colorSpec.fieldId = "tint"; + colorSpec.label = "Tint"; + colorSpec.value = sections[0].fields[0].colorValue.value; + colorSpec.showAlpha = sections[0].fields[0].colorValue.showAlpha; + const auto colorLayout = BuildUIEditorColorFieldLayout( + popupFrame.layout.fieldRowRects[0], + colorSpec, + BuildUIEditorHostedColorFieldMetrics({}), + UIRect(-4096.0f, -4096.0f, 8192.0f, 8192.0f)); + + const float alphaX = + colorLayout.alphaSliderRect.x + colorLayout.alphaSliderRect.width * 0.25f; + const float alphaY = + colorLayout.alphaSliderRect.y + colorLayout.alphaSliderRect.height * 0.5f; + frame = UpdateUIEditorPropertyGridInteraction( + state, + selectionModel, + expansionModel, + propertyEditModel, + UIRect(0.0f, 0.0f, 520.0f, 360.0f), + sections, + { + MakePointerDown(alphaX, alphaY), + MakePointerMove(alphaX, alphaY), + MakePointerUp(alphaX, alphaY) + }); + + EXPECT_TRUE(frame.result.fieldValueChanged); + EXPECT_EQ(frame.result.changedFieldId, "tint"); + EXPECT_LT(sections[0].fields[0].colorValue.value.a, 0.5f); +} diff --git a/tests/UI/Editor/unit/test_ui_editor_shortcut_manager.cpp b/tests/UI/Editor/unit/test_ui_editor_shortcut_manager.cpp index 4b119b33..d7ceef68 100644 --- a/tests/UI/Editor/unit/test_ui_editor_shortcut_manager.cpp +++ b/tests/UI/Editor/unit/test_ui_editor_shortcut_manager.cpp @@ -1,6 +1,6 @@ #include -#include +#include #include diff --git a/tests/UI/Editor/unit/test_ui_editor_tab_strip.cpp b/tests/UI/Editor/unit/test_ui_editor_tab_strip.cpp index b764561d..fe5fb8d8 100644 --- a/tests/UI/Editor/unit/test_ui_editor_tab_strip.cpp +++ b/tests/UI/Editor/unit/test_ui_editor_tab_strip.cpp @@ -1,7 +1,7 @@ #include #include -#include +#include namespace { diff --git a/tests/UI/Editor/unit/test_ui_editor_tab_strip_interaction.cpp b/tests/UI/Editor/unit/test_ui_editor_tab_strip_interaction.cpp new file mode 100644 index 00000000..a80fd499 --- /dev/null +++ b/tests/UI/Editor/unit/test_ui_editor_tab_strip_interaction.cpp @@ -0,0 +1,244 @@ +#include + +#include + +#include + +namespace { + +using XCEngine::Input::KeyCode; +using XCEngine::UI::UIInputEvent; +using XCEngine::UI::UIInputEventType; +using XCEngine::UI::UIPoint; +using XCEngine::UI::UIPointerButton; +using XCEngine::UI::UIRect; +using XCEngine::UI::Editor::UIEditorTabStripInteractionState; +using XCEngine::UI::Editor::UpdateUIEditorTabStripInteraction; +using XCEngine::UI::Editor::Widgets::UIEditorTabStripHitTargetKind; +using XCEngine::UI::Editor::Widgets::UIEditorTabStripItem; + +std::vector BuildTabItems() { + return { + { "doc-a", "Document A", true, 48.0f }, + { "doc-b", "Document B", true, 46.0f }, + { "doc-c", "Document C", false, 44.0f } + }; +} + +UIInputEvent MakePointerMove(float x, float y) { + UIInputEvent event = {}; + event.type = UIInputEventType::PointerMove; + event.position = UIPoint(x, y); + return event; +} + +UIInputEvent MakePointerDown(float x, float y, UIPointerButton button = UIPointerButton::Left) { + UIInputEvent event = {}; + event.type = UIInputEventType::PointerButtonDown; + event.position = UIPoint(x, y); + event.pointerButton = button; + return event; +} + +UIInputEvent MakePointerUp(float x, float y, UIPointerButton button = UIPointerButton::Left) { + UIInputEvent event = {}; + event.type = UIInputEventType::PointerButtonUp; + event.position = UIPoint(x, y); + event.pointerButton = button; + return event; +} + +UIInputEvent MakeKeyDown(KeyCode keyCode) { + UIInputEvent event = {}; + event.type = UIInputEventType::KeyDown; + event.keyCode = static_cast(keyCode); + return event; +} + +UIInputEvent MakePointerLeave() { + UIInputEvent event = {}; + event.type = UIInputEventType::PointerLeave; + return event; +} + +UIInputEvent MakeFocusLost() { + UIInputEvent event = {}; + event.type = UIInputEventType::FocusLost; + return event; +} + +UIPoint RectCenter(const XCEngine::UI::UIRect& rect) { + return UIPoint(rect.x + rect.width * 0.5f, rect.y + rect.height * 0.5f); +} + +} // namespace + +TEST(UIEditorTabStripInteractionTest, PointerMoveUpdatesHoveredTabAndCloseState) { + const auto items = BuildTabItems(); + std::string selectedTabId = "doc-a"; + UIEditorTabStripInteractionState state = {}; + + const auto initialFrame = UpdateUIEditorTabStripInteraction( + state, + selectedTabId, + UIRect(0.0f, 0.0f, 320.0f, 180.0f), + items, + {}); + + auto frame = UpdateUIEditorTabStripInteraction( + state, + selectedTabId, + UIRect(0.0f, 0.0f, 320.0f, 180.0f), + items, + { MakePointerMove( + initialFrame.layout.tabHeaderRects[1].x + 12.0f, + initialFrame.layout.tabHeaderRects[1].y + 12.0f) }); + EXPECT_EQ(frame.result.hitTarget.kind, UIEditorTabStripHitTargetKind::Tab); + EXPECT_EQ(state.tabStripState.hoveredIndex, 1u); + EXPECT_EQ(state.tabStripState.closeHoveredIndex, XCEngine::UI::Editor::Widgets::UIEditorTabStripInvalidIndex); + + frame = UpdateUIEditorTabStripInteraction( + state, + selectedTabId, + UIRect(0.0f, 0.0f, 320.0f, 180.0f), + items, + { MakePointerMove( + initialFrame.layout.closeButtonRects[0].x + 4.0f, + initialFrame.layout.closeButtonRects[0].y + 4.0f) }); + EXPECT_EQ(frame.result.hitTarget.kind, UIEditorTabStripHitTargetKind::CloseButton); + EXPECT_EQ(state.tabStripState.hoveredIndex, 0u); + EXPECT_EQ(state.tabStripState.closeHoveredIndex, 0u); +} + +TEST(UIEditorTabStripInteractionTest, LeftClickTabSelectsAndFocusesStrip) { + const auto items = BuildTabItems(); + std::string selectedTabId = "doc-a"; + UIEditorTabStripInteractionState state = {}; + + const auto initialFrame = UpdateUIEditorTabStripInteraction( + state, + selectedTabId, + UIRect(0.0f, 0.0f, 320.0f, 180.0f), + items, + {}); + const UIPoint tabCenter = RectCenter(initialFrame.layout.tabHeaderRects[1]); + + const auto frame = UpdateUIEditorTabStripInteraction( + state, + selectedTabId, + UIRect(0.0f, 0.0f, 320.0f, 180.0f), + items, + { + MakePointerDown(tabCenter.x, tabCenter.y), + MakePointerUp(tabCenter.x, tabCenter.y) + }); + + EXPECT_TRUE(frame.result.consumed); + EXPECT_TRUE(frame.result.selectionChanged); + EXPECT_EQ(frame.result.selectedTabId, "doc-b"); + EXPECT_EQ(frame.result.selectedIndex, 1u); + EXPECT_EQ(selectedTabId, "doc-b"); + EXPECT_TRUE(state.tabStripState.focused); +} + +TEST(UIEditorTabStripInteractionTest, LeftClickCloseButtonRequestsCloseWithoutChangingSelection) { + const auto items = BuildTabItems(); + std::string selectedTabId = "doc-a"; + UIEditorTabStripInteractionState state = {}; + + const auto initialFrame = UpdateUIEditorTabStripInteraction( + state, + selectedTabId, + UIRect(0.0f, 0.0f, 320.0f, 180.0f), + items, + {}); + const UIPoint closeCenter = RectCenter(initialFrame.layout.closeButtonRects[1]); + + const auto frame = UpdateUIEditorTabStripInteraction( + state, + selectedTabId, + UIRect(0.0f, 0.0f, 320.0f, 180.0f), + items, + { + MakePointerDown(closeCenter.x, closeCenter.y), + MakePointerUp(closeCenter.x, closeCenter.y) + }); + + EXPECT_TRUE(frame.result.consumed); + EXPECT_TRUE(frame.result.closeRequested); + EXPECT_FALSE(frame.result.selectionChanged); + EXPECT_EQ(frame.result.closedTabId, "doc-b"); + EXPECT_EQ(frame.result.closedIndex, 1u); + EXPECT_EQ(selectedTabId, "doc-a"); + EXPECT_TRUE(state.tabStripState.focused); +} + +TEST(UIEditorTabStripInteractionTest, KeyboardNavigationMovesSelectionWhenFocused) { + const auto items = BuildTabItems(); + std::string selectedTabId = "doc-b"; + UIEditorTabStripInteractionState state = {}; + state.tabStripState.focused = true; + + auto frame = UpdateUIEditorTabStripInteraction( + state, + selectedTabId, + UIRect(0.0f, 0.0f, 320.0f, 180.0f), + items, + { MakeKeyDown(KeyCode::Right) }); + EXPECT_TRUE(frame.result.keyboardNavigated); + EXPECT_EQ(frame.result.selectedTabId, "doc-c"); + EXPECT_EQ(selectedTabId, "doc-c"); + + frame = UpdateUIEditorTabStripInteraction( + state, + selectedTabId, + UIRect(0.0f, 0.0f, 320.0f, 180.0f), + items, + { MakeKeyDown(KeyCode::Home) }); + EXPECT_TRUE(frame.result.keyboardNavigated); + EXPECT_EQ(frame.result.selectedTabId, "doc-a"); + EXPECT_EQ(selectedTabId, "doc-a"); + + frame = UpdateUIEditorTabStripInteraction( + state, + selectedTabId, + UIRect(0.0f, 0.0f, 320.0f, 180.0f), + items, + { MakeKeyDown(KeyCode::End) }); + EXPECT_TRUE(frame.result.keyboardNavigated); + EXPECT_EQ(frame.result.selectedTabId, "doc-c"); + EXPECT_EQ(selectedTabId, "doc-c"); +} + +TEST(UIEditorTabStripInteractionTest, OutsideClickAndFocusLostClearFocusAndHover) { + const auto items = BuildTabItems(); + std::string selectedTabId = "doc-b"; + UIEditorTabStripInteractionState state = {}; + state.tabStripState.focused = true; + state.tabStripState.hoveredIndex = 1u; + state.tabStripState.closeHoveredIndex = 1u; + + auto frame = UpdateUIEditorTabStripInteraction( + state, + selectedTabId, + UIRect(0.0f, 0.0f, 320.0f, 180.0f), + items, + { + MakePointerDown(420.0f, 240.0f), + MakePointerUp(420.0f, 240.0f) + }); + EXPECT_FALSE(state.tabStripState.focused); + EXPECT_EQ(frame.result.hitTarget.kind, UIEditorTabStripHitTargetKind::None); + EXPECT_EQ(selectedTabId, "doc-b"); + + frame = UpdateUIEditorTabStripInteraction( + state, + selectedTabId, + UIRect(0.0f, 0.0f, 320.0f, 180.0f), + items, + { MakePointerLeave(), MakeFocusLost() }); + EXPECT_FALSE(state.tabStripState.focused); + EXPECT_EQ(state.tabStripState.hoveredIndex, XCEngine::UI::Editor::Widgets::UIEditorTabStripInvalidIndex); + EXPECT_EQ(state.tabStripState.closeHoveredIndex, XCEngine::UI::Editor::Widgets::UIEditorTabStripInvalidIndex); + EXPECT_FALSE(state.hasPointerPosition); +} diff --git a/tests/UI/Editor/unit/test_ui_editor_theme.cpp b/tests/UI/Editor/unit/test_ui_editor_theme.cpp index 2f16118c..44938a3f 100644 --- a/tests/UI/Editor/unit/test_ui_editor_theme.cpp +++ b/tests/UI/Editor/unit/test_ui_editor_theme.cpp @@ -1,6 +1,6 @@ #include -#include +#include #include #include diff --git a/tests/UI/Editor/unit/test_ui_editor_tree_view.cpp b/tests/UI/Editor/unit/test_ui_editor_tree_view.cpp index 82f5a7d7..517048eb 100644 --- a/tests/UI/Editor/unit/test_ui_editor_tree_view.cpp +++ b/tests/UI/Editor/unit/test_ui_editor_tree_view.cpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include namespace { diff --git a/tests/UI/Editor/unit/test_ui_editor_tree_view_interaction.cpp b/tests/UI/Editor/unit/test_ui_editor_tree_view_interaction.cpp index a61aad61..4a165825 100644 --- a/tests/UI/Editor/unit/test_ui_editor_tree_view_interaction.cpp +++ b/tests/UI/Editor/unit/test_ui_editor_tree_view_interaction.cpp @@ -1,11 +1,15 @@ #include -#include +#include + +#include namespace { +using XCEngine::Input::KeyCode; using XCEngine::UI::UIInputEvent; using XCEngine::UI::UIInputEventType; +using XCEngine::UI::UIInputModifiers; using XCEngine::UI::UIPoint; using XCEngine::UI::UIPointerButton; using XCEngine::UI::UIRect; @@ -35,19 +39,41 @@ UIInputEvent MakePointerMove(float x, float y) { return event; } -UIInputEvent MakePointerDown(float x, float y, UIPointerButton button = UIPointerButton::Left) { +UIInputModifiers MakeShiftModifiers() { + UIInputModifiers modifiers = {}; + modifiers.shift = true; + return modifiers; +} + +UIInputModifiers MakeControlModifiers() { + UIInputModifiers modifiers = {}; + modifiers.control = true; + return modifiers; +} + +UIInputEvent MakePointerDown( + float x, + float y, + UIPointerButton button = UIPointerButton::Left, + UIInputModifiers modifiers = {}) { UIInputEvent event = {}; event.type = UIInputEventType::PointerButtonDown; event.position = UIPoint(x, y); event.pointerButton = button; + event.modifiers = modifiers; return event; } -UIInputEvent MakePointerUp(float x, float y, UIPointerButton button = UIPointerButton::Left) { +UIInputEvent MakePointerUp( + float x, + float y, + UIPointerButton button = UIPointerButton::Left, + UIInputModifiers modifiers = {}) { UIInputEvent event = {}; event.type = UIInputEventType::PointerButtonUp; event.position = UIPoint(x, y); event.pointerButton = button; + event.modifiers = modifiers; return event; } @@ -63,6 +89,14 @@ UIInputEvent MakeFocusLost() { return event; } +UIInputEvent MakeKeyDown(KeyCode keyCode, UIInputModifiers modifiers = {}) { + UIInputEvent event = {}; + event.type = UIInputEventType::KeyDown; + event.keyCode = static_cast(keyCode); + event.modifiers = modifiers; + return event; +} + UIPoint RectCenter(const XCEngine::UI::UIRect& rect) { return UIPoint(rect.x + rect.width * 0.5f, rect.y + rect.height * 0.5f); } @@ -168,6 +202,42 @@ TEST(UIEditorTreeViewInteractionTest, LeftClickDisclosureTogglesExpansionAndRebu EXPECT_EQ(frame.layout.visibleItemIndices[4], 4u); } +TEST(UIEditorTreeViewInteractionTest, DisclosureClickKeepsKeyboardCurrentAnchoredToSelection) { + const auto items = BuildTreeItems(); + UISelectionModel selectionModel = {}; + selectionModel.SetSelection("camera"); + UIExpansionModel expansionModel = {}; + expansionModel.Expand("scene"); + UIEditorTreeViewInteractionState state = {}; + state.treeViewState.focused = true; + + const auto initialFrame = UpdateUIEditorTreeViewInteraction( + state, + selectionModel, + expansionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + {}); + const UIPoint lightsDisclosureCenter = RectCenter(initialFrame.layout.disclosureRects[2]); + + const auto frame = UpdateUIEditorTreeViewInteraction( + state, + selectionModel, + expansionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + { + MakePointerDown(lightsDisclosureCenter.x, lightsDisclosureCenter.y), + MakePointerUp(lightsDisclosureCenter.x, lightsDisclosureCenter.y) + }); + + EXPECT_TRUE(frame.result.expansionChanged); + EXPECT_FALSE(frame.result.selectionChanged); + EXPECT_TRUE(selectionModel.IsSelected("camera")); + ASSERT_TRUE(state.keyboardNavigation.HasCurrentIndex()); + EXPECT_EQ(state.keyboardNavigation.GetCurrentIndex(), 1u); +} + TEST(UIEditorTreeViewInteractionTest, RightClickRowSelectsItemAndMarksSecondaryClick) { const auto items = BuildTreeItems(); UISelectionModel selectionModel = {}; @@ -203,6 +273,137 @@ TEST(UIEditorTreeViewInteractionTest, RightClickRowSelectsItemAndMarksSecondaryC EXPECT_TRUE(state.treeViewState.focused); } +TEST(UIEditorTreeViewInteractionTest, ControlClickRowTogglesMembershipWithoutDroppingExistingSelection) { + const auto items = BuildTreeItems(); + UISelectionModel selectionModel = {}; + selectionModel.SetSelections({ "camera", "lights" }, "lights"); + UIExpansionModel expansionModel = {}; + expansionModel.Expand("scene"); + UIEditorTreeViewInteractionState state = {}; + state.treeViewState.focused = true; + state.selectionAnchorId = "lights"; + + const auto initialFrame = UpdateUIEditorTreeViewInteraction( + state, + selectionModel, + expansionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + {}); + const UIPoint sceneCenter = RectCenter(initialFrame.layout.rowRects[0]); + auto frame = UpdateUIEditorTreeViewInteraction( + state, + selectionModel, + expansionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + { + MakePointerDown(sceneCenter.x, sceneCenter.y, UIPointerButton::Left, MakeControlModifiers()), + MakePointerUp(sceneCenter.x, sceneCenter.y, UIPointerButton::Left, MakeControlModifiers()) + }); + + EXPECT_TRUE(frame.result.selectionChanged); + EXPECT_TRUE(selectionModel.IsSelected("camera")); + EXPECT_TRUE(selectionModel.IsSelected("lights")); + EXPECT_TRUE(selectionModel.IsSelected("scene")); + EXPECT_EQ(selectionModel.GetSelectedId(), "scene"); + + const UIPoint lightsCenter = RectCenter(initialFrame.layout.rowRects[2]); + frame = UpdateUIEditorTreeViewInteraction( + state, + selectionModel, + expansionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + { + MakePointerDown(lightsCenter.x, lightsCenter.y, UIPointerButton::Left, MakeControlModifiers()), + MakePointerUp(lightsCenter.x, lightsCenter.y, UIPointerButton::Left, MakeControlModifiers()) + }); + + EXPECT_TRUE(frame.result.selectionChanged); + EXPECT_TRUE(selectionModel.IsSelected("camera")); + EXPECT_FALSE(selectionModel.IsSelected("lights")); + EXPECT_TRUE(selectionModel.IsSelected("scene")); +} + +TEST(UIEditorTreeViewInteractionTest, ShiftClickRowSelectsVisibleRangeFromAnchor) { + const auto items = BuildTreeItems(); + UISelectionModel selectionModel = {}; + selectionModel.SetSelection("camera"); + UIExpansionModel expansionModel = {}; + expansionModel.Expand("scene"); + UIEditorTreeViewInteractionState state = {}; + state.treeViewState.focused = true; + state.selectionAnchorId = "camera"; + + const auto initialFrame = UpdateUIEditorTreeViewInteraction( + state, + selectionModel, + expansionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + {}); + const UIPoint uiCenter = RectCenter(initialFrame.layout.rowRects[3]); + + const auto frame = UpdateUIEditorTreeViewInteraction( + state, + selectionModel, + expansionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + { + MakePointerDown(uiCenter.x, uiCenter.y, UIPointerButton::Left, MakeShiftModifiers()), + MakePointerUp(uiCenter.x, uiCenter.y, UIPointerButton::Left, MakeShiftModifiers()) + }); + + EXPECT_TRUE(frame.result.selectionChanged); + EXPECT_EQ(frame.result.selectedItemId, "ui"); + EXPECT_TRUE(selectionModel.IsSelected("camera")); + EXPECT_TRUE(selectionModel.IsSelected("lights")); + EXPECT_TRUE(selectionModel.IsSelected("ui")); + EXPECT_EQ(selectionModel.GetSelectionCount(), 3u); + EXPECT_EQ(state.selectionAnchorId, "camera"); +} + +TEST(UIEditorTreeViewInteractionTest, RightClickSelectedRowKeepsExistingMultiSelection) { + const auto items = BuildTreeItems(); + UISelectionModel selectionModel = {}; + selectionModel.SetSelections({ "camera", "lights", "ui" }, "camera"); + UIExpansionModel expansionModel = {}; + expansionModel.Expand("scene"); + UIEditorTreeViewInteractionState state = {}; + state.treeViewState.focused = true; + state.selectionAnchorId = "camera"; + + const auto initialFrame = UpdateUIEditorTreeViewInteraction( + state, + selectionModel, + expansionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + {}); + const UIPoint lightsCenter = RectCenter(initialFrame.layout.rowRects[2]); + + const auto frame = UpdateUIEditorTreeViewInteraction( + state, + selectionModel, + expansionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + { + MakePointerDown(lightsCenter.x, lightsCenter.y, UIPointerButton::Right), + MakePointerUp(lightsCenter.x, lightsCenter.y, UIPointerButton::Right) + }); + + EXPECT_TRUE(frame.result.secondaryClicked); + EXPECT_FALSE(frame.result.selectionChanged); + EXPECT_TRUE(selectionModel.IsSelected("camera")); + EXPECT_TRUE(selectionModel.IsSelected("lights")); + EXPECT_TRUE(selectionModel.IsSelected("ui")); + EXPECT_EQ(selectionModel.GetSelectionCount(), 3u); + EXPECT_EQ(selectionModel.GetSelectedId(), "lights"); +} + TEST(UIEditorTreeViewInteractionTest, OutsideClickAndFocusLostClearFocusAndHover) { const auto items = BuildTreeItems(); UISelectionModel selectionModel = {}; @@ -233,3 +434,186 @@ TEST(UIEditorTreeViewInteractionTest, OutsideClickAndFocusLostClearFocusAndHover EXPECT_TRUE(state.treeViewState.hoveredItemId.empty()); EXPECT_FALSE(state.hasPointerPosition); } + +TEST(UIEditorTreeViewInteractionTest, KeyboardNavigationMovesSelectionAcrossVisibleRows) { + const auto items = BuildTreeItems(); + UISelectionModel selectionModel = {}; + selectionModel.SetSelection("camera"); + UIExpansionModel expansionModel = {}; + expansionModel.Expand("scene"); + UIEditorTreeViewInteractionState state = {}; + state.treeViewState.focused = true; + + auto frame = UpdateUIEditorTreeViewInteraction( + state, + selectionModel, + expansionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + { MakeKeyDown(KeyCode::Down) }); + EXPECT_TRUE(frame.result.keyboardNavigated); + EXPECT_TRUE(selectionModel.IsSelected("lights")); + EXPECT_EQ(state.keyboardNavigation.GetCurrentIndex(), 2u); + + frame = UpdateUIEditorTreeViewInteraction( + state, + selectionModel, + expansionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + { MakeKeyDown(KeyCode::Home) }); + EXPECT_TRUE(frame.result.keyboardNavigated); + EXPECT_TRUE(selectionModel.IsSelected("scene")); + + frame = UpdateUIEditorTreeViewInteraction( + state, + selectionModel, + expansionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + { MakeKeyDown(KeyCode::End) }); + EXPECT_TRUE(frame.result.keyboardNavigated); + EXPECT_TRUE(selectionModel.IsSelected("ui")); +} + +TEST(UIEditorTreeViewInteractionTest, ShiftArrowExtendsVisibleRangeFromAnchor) { + const auto items = BuildTreeItems(); + UISelectionModel selectionModel = {}; + selectionModel.SetSelection("camera"); + UIExpansionModel expansionModel = {}; + expansionModel.Expand("scene"); + UIEditorTreeViewInteractionState state = {}; + state.treeViewState.focused = true; + state.selectionAnchorId = "camera"; + + const auto frame = UpdateUIEditorTreeViewInteraction( + state, + selectionModel, + expansionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + { MakeKeyDown(KeyCode::Down, MakeShiftModifiers()) }); + + EXPECT_TRUE(frame.result.keyboardNavigated); + EXPECT_TRUE(selectionModel.IsSelected("camera")); + EXPECT_TRUE(selectionModel.IsSelected("lights")); + EXPECT_EQ(selectionModel.GetSelectionCount(), 2u); + EXPECT_EQ(frame.result.selectedItemId, "lights"); +} + +TEST(UIEditorTreeViewInteractionTest, F2RequestsRenameForPrimarySelectionWhenFocused) { + const auto items = BuildTreeItems(); + UISelectionModel selectionModel = {}; + selectionModel.SetSelection("lights"); + UIExpansionModel expansionModel = {}; + expansionModel.Expand("scene"); + UIEditorTreeViewInteractionState state = {}; + state.treeViewState.focused = true; + + const auto frame = UpdateUIEditorTreeViewInteraction( + state, + selectionModel, + expansionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + { MakeKeyDown(KeyCode::F2) }); + + EXPECT_TRUE(frame.result.renameRequested); + EXPECT_TRUE(frame.result.consumed); + EXPECT_EQ(frame.result.renameItemId, "lights"); + EXPECT_EQ(frame.result.selectedItemId, "lights"); + EXPECT_EQ(frame.result.selectedVisibleIndex, 2u); + EXPECT_FALSE(frame.result.selectionChanged); +} + +TEST(UIEditorTreeViewInteractionTest, RightAndLeftKeysExpandCollapseAndMoveHierarchySelection) { + const auto items = BuildTreeItems(); + UISelectionModel selectionModel = {}; + selectionModel.SetSelection("lights"); + UIExpansionModel expansionModel = {}; + expansionModel.Expand("scene"); + UIEditorTreeViewInteractionState state = {}; + state.treeViewState.focused = true; + + auto frame = UpdateUIEditorTreeViewInteraction( + state, + selectionModel, + expansionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + { MakeKeyDown(KeyCode::Right) }); + EXPECT_TRUE(frame.result.expansionChanged); + EXPECT_TRUE(frame.result.keyboardNavigated); + EXPECT_TRUE(expansionModel.IsExpanded("lights")); + EXPECT_EQ(frame.result.toggledItemId, "lights"); + EXPECT_EQ(frame.result.selectedItemId, "lights"); + EXPECT_EQ(frame.result.selectedVisibleIndex, 2u); + + frame = UpdateUIEditorTreeViewInteraction( + state, + selectionModel, + expansionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + { MakeKeyDown(KeyCode::Right) }); + EXPECT_TRUE(frame.result.keyboardNavigated); + EXPECT_TRUE(selectionModel.IsSelected("sun")); + + frame = UpdateUIEditorTreeViewInteraction( + state, + selectionModel, + expansionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + { MakeKeyDown(KeyCode::Left) }); + EXPECT_TRUE(frame.result.keyboardNavigated); + EXPECT_TRUE(selectionModel.IsSelected("lights")); + + frame = UpdateUIEditorTreeViewInteraction( + state, + selectionModel, + expansionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + { MakeKeyDown(KeyCode::Left) }); + EXPECT_TRUE(frame.result.expansionChanged); + EXPECT_TRUE(frame.result.keyboardNavigated); + EXPECT_FALSE(expansionModel.IsExpanded("lights")); + EXPECT_EQ(frame.result.selectedItemId, "lights"); + EXPECT_EQ(frame.result.selectedVisibleIndex, 2u); +} + +TEST(UIEditorTreeViewInteractionTest, CollapsingAncestorRehomesHiddenSelectionToCollapsedItem) { + const auto items = BuildTreeItems(); + UISelectionModel selectionModel = {}; + selectionModel.SetSelection("sun"); + UIExpansionModel expansionModel = {}; + expansionModel.Expand("scene"); + expansionModel.Expand("lights"); + UIEditorTreeViewInteractionState state = {}; + state.treeViewState.focused = true; + + const auto initialFrame = UpdateUIEditorTreeViewInteraction( + state, + selectionModel, + expansionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + {}); + const UIPoint lightsDisclosureCenter = RectCenter(initialFrame.layout.disclosureRects[2]); + + const auto frame = UpdateUIEditorTreeViewInteraction( + state, + selectionModel, + expansionModel, + UIRect(0.0f, 0.0f, 320.0f, 240.0f), + items, + { + MakePointerDown(lightsDisclosureCenter.x, lightsDisclosureCenter.y), + MakePointerUp(lightsDisclosureCenter.x, lightsDisclosureCenter.y) + }); + + EXPECT_TRUE(frame.result.expansionChanged); + EXPECT_FALSE(expansionModel.IsExpanded("lights")); + EXPECT_TRUE(selectionModel.IsSelected("lights")); +} diff --git a/tests/UI/Editor/unit/test_ui_editor_workspace_interaction.cpp b/tests/UI/Editor/unit/test_ui_editor_workspace_interaction.cpp index bd8ce959..7345044a 100644 --- a/tests/UI/Editor/unit/test_ui_editor_workspace_interaction.cpp +++ b/tests/UI/Editor/unit/test_ui_editor_workspace_interaction.cpp @@ -194,6 +194,7 @@ TEST(UIEditorWorkspaceInteractionTest, ActivatingDocumentTabRemovesViewportPrese model, { MakePointerEvent(UIInputEventType::PointerMove, docTabCenter.x, docTabCenter.y), + MakePointerEvent(UIInputEventType::PointerButtonDown, docTabCenter.x, docTabCenter.y, UIPointerButton::Left), MakePointerEvent(UIInputEventType::PointerButtonUp, docTabCenter.x, docTabCenter.y, UIPointerButton::Left) }); diff --git a/tests/UI/TEST_SPEC.md b/tests/UI/TEST_SPEC.md index 4d343a0d..8991c322 100644 --- a/tests/UI/TEST_SPEC.md +++ b/tests/UI/TEST_SPEC.md @@ -68,6 +68,7 @@ tests/UI/ - 必须产出可直接运行的 exe。 - 一个 exe 只验证一个聚焦场景。 +- 如果某个交互契约已经超出 basic 场景的检查范围,例如 multi-select、drag/drop、inline rename,就必须拆成独立 scenario,不得继续往 basic exe 里堆。 - 每次只暴露当前批次需要检查的操作区域,不做大杂烩面板。 - 界面中的操作提示默认使用中文,必要时可混用 `hover`、`focus`、`active`、`capture` 等术语。 - 测哪一层,就把场景放到哪一层的 `integration/` 目录下。 @@ -153,6 +154,10 @@ Editor 集成测试只承载 editor-only 场景,不再承载共享 Core primit - `editor.shell.workspace_compose` - `editor.state.panel_session_flow` +- `editor.shell.tree_view_multiselect` +- `editor.shell.tree_view_inline_rename` +- `editor.shell.list_view_multiselect` +- `editor.shell.list_view_inline_rename` ## 7. 截图规范

K4 zi%=Vn>^KD%h(wwKNmMp4ANXtw_k^Z3!qzG7SRxeG;eQuVXM6Et{BN!6wFBD8r~7J; ziNv_l^qqb(c)?G5oI98kPk@vzvm;q3 zmr-(boIwFZ#y|S;wR0q%h<*P2c~la$j|q+jFgSvzN>v%b3)%1JD9OBL4N-oEM#yIm zys<;)RXQ~kj-&7;1`-+Y`@&>hrEcH89sJ;dKL&sTCu#s*irDJF)F_li&g|Y4ogDrS z>S7>5yN}qjvarygm;!{jL~!$5%A5!X7j$>T^?X&;)jPoNBiRo;rkqslAV2yzKc5TZ zS;BQy6%}GoC-#CK?~~Zr=z;=nRNgcQ6GIgy=PrxmbqfQ*J|sS3t^x2Eo5JV-FT}TS zj5#q}o3OCWpwI$G7<9-JK88KV@hOA8o;r}Vhc)(v6Wkzwvf}0|M~NGu^0=S|1ySjK z6O+X73vh%WctJ#Uc3hPemBhpb0TSL5xf!o{srOZdYDIV-4}A zNAt$`p=N{nRGXHJ7Qw(Gl4bg{%Lzqpw1ABFk=ku2+{48{EJXC=ehk(UuO0Ug+?d{% zQCLdrzABa+=?3am(jK5~p3YPRH5=~Fc1$^3qjjTAhwf~aj1a}m2~uqtVXOeouk86k zv`Je2fNc84NLWlvGjPr9X3P$v1e?h2xp2wL$l7iRx&wC=28@VdDT1<$rR>WgV6KpU zp-v{roPGOnVAbQCoKsCARxjU?9SeEUwWR(RQa0eb-B9LnTuQbbCJN_42eqz3P^}&A zf2^nKg$+oIBbI=u;X|bx7`7)IfD&l!VUtVP4Xp+73U$!Qds)HDQ-`vim}&zuw>u0< zmc~tNf)WpkvIttFKi8oD82AGc+xxJ=Nktc`USNT{K%(10+-QOvDF8GiLMR9(D8;CV zhPI9@3e|8I6Iz!C&eYq7;;SG6L_lniYg7Bi##TY4hNy|hEIKH@qo;_rrn`HQc9H({ zKiXr)2<=&U96G7Ujv`C+#D|4U|YI zvFD*K0)rsXIEI{P^uQc=asJ(YMMWC$QMUuh)P0UZU|J|2HCf{@+vuHc9=QR9V9Y%X z-!&{bhtEpx{RmSzA?7MX}I8L;8 za6A=pr?-4#52S2|;35{`AT~XAcr9FLm;q8%3r`iEH*ri1xGB;IM1G=fi^#AeC?)Y9 z2`I4SjF$T^wy4j3q^-rtKouta=3@^wPG>BWMlGXosHLqZAI=A~ZE{^xM%|fWMPXKO zFm4qXmFHe8b+(_?;8co}+V5-~xqHu^?yGb>#h4dkheX;Z2_j2+ktiTG1E=-2d1zQz z{N4*7xh#P!jZTgY4Jj8i7X3wnU&IOC0~)YzL&L+Q_vSikkm@fmn#76Uny+6cDt*ExL(^l5>r0848K-YSawE zw#8-c=oXM?6>kCWe+MWIgnL9v0x6r1hItTG5^S8GKYN1gqPVxp7h)zzmWI^cOG>VT zXNf)ay?K)7AJ=bCb~p19V|}|~tK&Eyg50;l!UpT-oZx)mk~yfVS^?h=~fEveej)RdRJLOK|XCsvBpx6XY44#;AkglsFL7+Y?+fp2{MXavjm!1{oP$dyPZ&A9;o* zE4dNTT`5HQzc$@M{DA*sym*qXazC^^@eJI71P#VuI=^+5LR27|;R>|3aG >8yV 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 #include #include #include #include "Host/AutoScreenshot.h" #include "Host/NativeRenderer.h" +#include #include -#include #include #include @@ -27,12 +28,15 @@ namespace { +using XCEngine::Input::KeyCode; using XCEngine::UI::UIColor; using XCEngine::UI::UIDrawData; using XCEngine::UI::UIDrawList; +using XCEngine::UI::UIInputEvent; +using XCEngine::UI::UIInputEventType; using XCEngine::UI::UIPoint; +using XCEngine::UI::UIPointerButton; using XCEngine::UI::UIRect; -using XCEngine::UI::Widgets::UITabStripModel; using XCEngine::UI::Editor::BuildDefaultUIEditorWorkspaceController; using XCEngine::UI::Editor::BuildUIEditorWorkspacePanel; using XCEngine::UI::Editor::BuildUIEditorWorkspaceTabStack; @@ -43,6 +47,9 @@ using XCEngine::UI::Editor::Host::AutoScreenshotController; using XCEngine::UI::Editor::Host::NativeRenderer; using XCEngine::UI::Editor::UIEditorPanelDescriptor; using XCEngine::UI::Editor::UIEditorPanelRegistry; +using XCEngine::UI::Editor::UIEditorTabStripInteractionFrame; +using XCEngine::UI::Editor::UIEditorTabStripInteractionResult; +using XCEngine::UI::Editor::UIEditorTabStripInteractionState; using XCEngine::UI::Editor::UIEditorWorkspaceCommand; using XCEngine::UI::Editor::UIEditorWorkspaceCommandKind; using XCEngine::UI::Editor::UIEditorWorkspaceCommandResult; @@ -50,9 +57,9 @@ using XCEngine::UI::Editor::UIEditorWorkspaceController; using XCEngine::UI::Editor::UIEditorWorkspaceModel; using XCEngine::UI::Editor::UIEditorWorkspaceNode; using XCEngine::UI::Editor::UIEditorWorkspaceNodeKind; +using XCEngine::UI::Editor::UpdateUIEditorTabStripInteraction; using XCEngine::UI::Editor::Widgets::AppendUIEditorTabStripBackground; using XCEngine::UI::Editor::Widgets::AppendUIEditorTabStripForeground; -using XCEngine::UI::Editor::Widgets::BuildUIEditorTabStripLayout; using XCEngine::UI::Editor::Widgets::HitTestUIEditorTabStrip; using XCEngine::UI::Editor::Widgets::ResolveUIEditorTabStripSelectedIndex; using XCEngine::UI::Editor::Widgets::UIEditorTabStripHitTarget; @@ -93,6 +100,39 @@ bool ContainsPoint(const UIRect& rect, float x, float y) { y <= rect.y + rect.height; } +std::int32_t MapTabNavigationKey(UINT keyCode) { + switch (keyCode) { + case VK_LEFT: + return static_cast(KeyCode::Left); + case VK_RIGHT: + return static_cast(KeyCode::Right); + case VK_HOME: + return static_cast(KeyCode::Home); + case VK_END: + return static_cast(KeyCode::End); + default: + return static_cast(KeyCode::None); + } +} + +UIInputEvent MakePointerEvent( + UIInputEventType type, + const UIPoint& position, + UIPointerButton button = UIPointerButton::None) { + UIInputEvent event = {}; + event.type = type; + event.position = position; + event.pointerButton = button; + return event; +} + +UIInputEvent MakeKeyEvent(std::int32_t keyCode) { + UIInputEvent event = {}; + event.type = UIInputEventType::KeyDown; + event.keyCode = keyCode; + return event; +} + void DrawCard( UIDrawList& drawList, const UIRect& rect, @@ -240,9 +280,17 @@ private: return 0; } break; + case WM_LBUTTONDOWN: + if (app != nullptr) { + app->HandleLeftButtonDown( + static_cast(GET_X_LPARAM(lParam)), + static_cast(GET_Y_LPARAM(lParam))); + return 0; + } + break; case WM_LBUTTONUP: if (app != nullptr) { - app->HandleClick( + app->HandleLeftButtonUp( static_cast(GET_X_LPARAM(lParam)), static_cast(GET_Y_LPARAM(lParam))); return 0; @@ -254,7 +302,10 @@ private: if (wParam == VK_F12) { app->m_autoScreenshot.RequestCapture("manual_f12"); } else { - app->HandleKeyDown(static_cast(wParam)); + const std::int32_t keyCode = MapTabNavigationKey(static_cast(wParam)); + if (keyCode != static_cast(KeyCode::None)) { + app->HandleKeyDown(keyCode); + } } return 0; } @@ -347,13 +398,30 @@ private: void ResetScenario() { m_controller = BuildDefaultUIEditorWorkspaceController(BuildPanelRegistry(), BuildWorkspace()); - m_tabStripState = {}; - m_layout = {}; + m_interactionState = {}; + m_tabStripFrame = {}; m_tabItems.clear(); - m_hoverTarget = {}; m_mousePosition = UIPoint(-1000.0f, -1000.0f); m_lastResult = "等待操作"; - m_navigationModel = {}; + } + + UIRect GetTabStripRect() const { + RECT clientRect = {}; + GetClientRect(m_hwnd, &clientRect); + const float width = static_cast((std::max)(1L, clientRect.right - clientRect.left)); + const float height = static_cast((std::max)(1L, clientRect.bottom - clientRect.top)); + const float outerPadding = 20.0f; + const float leftColumnWidth = 360.0f; + const UIRect previewCardRect( + leftColumnWidth + outerPadding * 2.0f, + outerPadding, + width - leftColumnWidth - outerPadding * 3.0f, + height - outerPadding * 2.0f); + return UIRect( + previewCardRect.x + 20.0f, + previewCardRect.y + 20.0f, + previewCardRect.width - 40.0f, + previewCardRect.height - 40.0f); } void OnResize(UINT width, UINT height) { @@ -373,114 +441,97 @@ private: TrackMouseEvent(&event); m_resetButtonHovered = ContainsPoint(m_resetButtonRect, x, y); - RefreshHoverTarget(); + PumpTabStripEvents({ MakePointerEvent(UIInputEventType::PointerMove, m_mousePosition) }); InvalidateRect(m_hwnd, nullptr, FALSE); } void HandleMouseLeave() { m_mousePosition = UIPoint(-1000.0f, -1000.0f); m_resetButtonHovered = false; - m_hoverTarget = {}; - m_tabStripState.hoveredIndex = UIEditorTabStripInvalidIndex; - m_tabStripState.closeHoveredIndex = UIEditorTabStripInvalidIndex; + PumpTabStripEvents({ MakePointerEvent(UIInputEventType::PointerLeave, m_mousePosition) }); InvalidateRect(m_hwnd, nullptr, FALSE); } - void HandleClick(float x, float y) { + void HandleLeftButtonDown(float x, float y) { + m_mousePosition = UIPoint(x, y); + if (ContainsPoint(m_resetButtonRect, x, y)) { + m_resetButtonHovered = true; + InvalidateRect(m_hwnd, nullptr, FALSE); + return; + } + + PumpTabStripEvents({ MakePointerEvent(UIInputEventType::PointerButtonDown, m_mousePosition, UIPointerButton::Left) }); + InvalidateRect(m_hwnd, nullptr, FALSE); + } + + void HandleLeftButtonUp(float x, float y) { + m_mousePosition = UIPoint(x, y); if (ContainsPoint(m_resetButtonRect, x, y)) { ResetScenario(); InvalidateRect(m_hwnd, nullptr, FALSE); return; } - const UIEditorTabStripHitTarget hit = - HitTestUIEditorTabStrip(m_layout, m_tabStripState, UIPoint(x, y)); - switch (hit.kind) { - case UIEditorTabStripHitTargetKind::CloseButton: - if (hit.index < m_tabItems.size()) { - DispatchCommand( - UIEditorWorkspaceCommandKind::ClosePanel, - m_tabItems[hit.index].tabId, - "Close " + m_tabItems[hit.index].title); - m_tabStripState.focused = true; - } - break; - case UIEditorTabStripHitTargetKind::Tab: - if (hit.index < m_tabItems.size()) { - DispatchCommand( - UIEditorWorkspaceCommandKind::ActivatePanel, - m_tabItems[hit.index].tabId, - "Activate " + m_tabItems[hit.index].title); - m_tabStripState.focused = true; - } - break; - case UIEditorTabStripHitTargetKind::HeaderBackground: - case UIEditorTabStripHitTargetKind::Content: - m_tabStripState.focused = true; - m_lastResult = "TabStrip 获得 focus"; - break; - case UIEditorTabStripHitTargetKind::None: - default: - m_tabStripState.focused = false; - m_lastResult = "Focus cleared"; - break; - } - - RefreshHoverTarget(); + const UIEditorTabStripInteractionResult result = + PumpTabStripEvents({ MakePointerEvent(UIInputEventType::PointerButtonUp, m_mousePosition, UIPointerButton::Left) }); + ApplyInteractionResult(result, "Mouse"); InvalidateRect(m_hwnd, nullptr, FALSE); } - void HandleKeyDown(UINT keyCode) { - if (!m_tabStripState.focused) { - return; - } + void HandleKeyDown(std::int32_t keyCode) { + const UIEditorTabStripInteractionResult result = + PumpTabStripEvents({ MakeKeyEvent(keyCode) }); + ApplyInteractionResult(result, "Keyboard"); + InvalidateRect(m_hwnd, nullptr, FALSE); + } + UIEditorTabStripInteractionResult PumpTabStripEvents(std::vector events) { RefreshTabItems(); - bool handled = true; - bool changed = false; - std::string action = {}; + std::string selectedTabId = m_controller.GetWorkspace().activePanelId; + m_tabStripFrame = UpdateUIEditorTabStripInteraction( + m_interactionState, + selectedTabId, + GetTabStripRect(), + m_tabItems, + events); + m_tabStripState = m_interactionState.tabStripState; + m_layout = m_tabStripFrame.layout; + m_hoverTarget = HitTestUIEditorTabStrip(m_layout, m_tabStripState, m_mousePosition); + return m_tabStripFrame.result; + } - switch (keyCode) { - case VK_LEFT: - action = "Keyboard Left"; - changed = m_navigationModel.SelectPrevious(); - break; - case VK_RIGHT: - action = "Keyboard Right"; - changed = m_navigationModel.SelectNext(); - break; - case VK_HOME: - action = "Keyboard Home"; - changed = m_navigationModel.SelectFirst(); - break; - case VK_END: - action = "Keyboard End"; - changed = m_navigationModel.SelectLast(); - break; - default: - handled = false; - break; - } - - if (!handled) { + void ApplyInteractionResult( + const UIEditorTabStripInteractionResult& result, + std::string_view source) { + if (result.closeRequested && !result.closedTabId.empty()) { + DispatchCommand( + UIEditorWorkspaceCommandKind::ClosePanel, + result.closedTabId, + std::string(source) + " Close -> " + result.closedTabId); + PumpTabStripEvents({}); return; } - if (!changed || !m_navigationModel.HasSelection()) { - m_lastResult = action + " -> NoOp"; - InvalidateRect(m_hwnd, nullptr, FALSE); - return; - } - - const std::size_t selectedIndex = m_navigationModel.GetSelectedIndex(); - if (selectedIndex < m_tabItems.size()) { + if ((result.selectionChanged || result.keyboardNavigated) && + !result.selectedTabId.empty()) { DispatchCommand( UIEditorWorkspaceCommandKind::ActivatePanel, - m_tabItems[selectedIndex].tabId, - action + " -> " + m_tabItems[selectedIndex].title); + result.selectedTabId, + std::string(source) + " Activate -> " + result.selectedTabId); + PumpTabStripEvents({}); + return; } - InvalidateRect(m_hwnd, nullptr, FALSE); + if (result.hitTarget.kind == UIEditorTabStripHitTargetKind::HeaderBackground || + result.hitTarget.kind == UIEditorTabStripHitTargetKind::Content) { + m_lastResult = "TabStrip 获得 focus"; + return; + } + + if (result.hitTarget.kind == UIEditorTabStripHitTargetKind::None && + !m_interactionState.tabStripState.focused) { + m_lastResult = "Focus cleared"; + } } void DispatchCommand( @@ -527,31 +578,6 @@ private: } } - m_tabStripState.selectedIndex = - ResolveUIEditorTabStripSelectedIndex(m_tabItems, workspace.activePanelId); - - m_navigationModel.SetItemCount(m_tabItems.size()); - if (m_tabStripState.selectedIndex != UIEditorTabStripInvalidIndex) { - m_navigationModel.SetSelectedIndex(m_tabStripState.selectedIndex); - } - } - - void RefreshHoverTarget() { - m_hoverTarget = HitTestUIEditorTabStrip(m_layout, m_tabStripState, m_mousePosition); - m_tabStripState.hoveredIndex = UIEditorTabStripInvalidIndex; - m_tabStripState.closeHoveredIndex = UIEditorTabStripInvalidIndex; - - if (m_hoverTarget.kind == UIEditorTabStripHitTargetKind::CloseButton && - m_hoverTarget.index < m_tabItems.size()) { - m_tabStripState.hoveredIndex = m_hoverTarget.index; - m_tabStripState.closeHoveredIndex = m_hoverTarget.index; - return; - } - - if (m_hoverTarget.kind == UIEditorTabStripHitTargetKind::Tab && - m_hoverTarget.index < m_tabItems.size()) { - m_tabStripState.hoveredIndex = m_hoverTarget.index; - } } void RenderFrame() { @@ -569,15 +595,7 @@ private: outerPadding, width - leftColumnWidth - outerPadding * 3.0f, height - outerPadding * 2.0f); - const UIRect tabStripRect( - previewCardRect.x + 20.0f, - previewCardRect.y + 20.0f, - previewCardRect.width - 40.0f, - previewCardRect.height - 40.0f); - - RefreshTabItems(); - m_layout = BuildUIEditorTabStripLayout(tabStripRect, m_tabItems, m_tabStripState); - RefreshHoverTarget(); + PumpTabStripEvents({}); m_resetButtonRect = UIRect( stateRect.x + 16.0f, @@ -723,10 +741,11 @@ private: std::filesystem::path m_captureRoot = {}; UIPoint m_mousePosition = UIPoint(-1000.0f, -1000.0f); UIEditorWorkspaceController m_controller = {}; + UIEditorTabStripInteractionState m_interactionState = {}; + UIEditorTabStripInteractionFrame m_tabStripFrame = {}; UIEditorTabStripState m_tabStripState = {}; UIEditorTabStripLayout m_layout = {}; std::vector m_tabItems = {}; - UITabStripModel m_navigationModel = {}; UIEditorTabStripHitTarget m_hoverTarget = {}; UIRect m_resetButtonRect = {}; bool m_resetButtonHovered = false; diff --git a/tests/UI/Editor/integration/shell/tree_view_basic/captures/history/20260408_174622_1_startup.png b/tests/UI/Editor/integration/shell/tree_view_basic/captures/history/20260408_174622_1_startup.png new file mode 100644 index 0000000000000000000000000000000000000000..1d77be027159a60bc3c2eb7c0d5cb7c24febbb39 GIT binary patch literal 64632 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 jxBQE{TK -#include +#include +#include #include "Host/AutoScreenshot.h" #include "Host/NativeRenderer.h" +#include #include #include #include @@ -28,6 +29,7 @@ namespace { +using XCEngine::Input::KeyCode; using XCEngine::UI::UIColor; using XCEngine::UI::UIDrawData; using XCEngine::UI::UIDrawList; @@ -101,6 +103,25 @@ bool ContainsPoint(const UIRect& rect, float x, float y) { y <= rect.y + rect.height; } +std::int32_t MapTreeNavigationKey(UINT keyCode) { + switch (keyCode) { + case VK_UP: + return static_cast(KeyCode::Up); + case VK_DOWN: + return static_cast(KeyCode::Down); + case VK_LEFT: + return static_cast(KeyCode::Left); + case VK_RIGHT: + return static_cast(KeyCode::Right); + case VK_HOME: + return static_cast(KeyCode::Home); + case VK_END: + return static_cast(KeyCode::End); + default: + return static_cast(KeyCode::None); + } +} + ScenarioLayout BuildScenarioLayout(float width, float height) { constexpr float margin = 20.0f; constexpr float leftWidth = 430.0f; @@ -204,10 +225,11 @@ std::string JoinVisibleItems( constexpr std::size_t kMaxVisibleLabels = 5u; std::ostringstream stream = {}; const std::size_t labelCount = (std::min)(layout.visibleItemIndices.size(), kMaxVisibleLabels); - for (std::size_t index = 0; index < labelCount; ++index) { + for (std::size_t index = 0u; index < labelCount; ++index) { if (index > 0u) { stream << " | "; } + const std::size_t itemIndex = layout.visibleItemIndices[index]; if (itemIndex < items.size()) { stream << items[itemIndex].label; @@ -225,7 +247,7 @@ std::string DescribeHitTarget( const UIEditorTreeViewHitTarget& hitTarget, const std::vector& items) { if (hitTarget.itemIndex >= items.size()) { - return "无"; + return "(none)"; } const std::string& label = items[hitTarget.itemIndex].label; @@ -236,7 +258,7 @@ std::string DescribeHitTarget( return "row: " + label; case UIEditorTreeViewHitTargetKind::None: default: - return "无"; + return "(none)"; } } @@ -251,6 +273,13 @@ UIInputEvent MakePointerEvent( return event; } +UIInputEvent MakeKeyEvent(std::int32_t keyCode) { + UIInputEvent event = {}; + event.type = UIInputEventType::KeyDown; + event.keyCode = keyCode; + return event; +} + class ScenarioApp { public: int Run(HINSTANCE hInstance, int nCmdShow) { @@ -328,11 +357,19 @@ private: case WM_KEYDOWN: case WM_SYSKEYDOWN: - if (app != nullptr && wParam == VK_F12) { - app->m_autoScreenshot.RequestCapture("manual_f12"); - app->m_lastResult = "已请求截图,输出到 captures/latest.png"; - InvalidateRect(hwnd, nullptr, FALSE); - return 0; + if (app != nullptr) { + if (wParam == VK_F12) { + app->m_autoScreenshot.RequestCapture("manual_f12"); + app->m_lastResult = "已请求截图,输出到 captures/latest.png"; + InvalidateRect(hwnd, nullptr, FALSE); + return 0; + } + + const std::int32_t keyCode = MapTreeNavigationKey(static_cast(wParam)); + if (keyCode != static_cast(KeyCode::None)) { + app->HandleNavigationKey(keyCode); + return 0; + } } break; @@ -528,6 +565,14 @@ private: InvalidateRect(m_hwnd, nullptr, FALSE); } + void HandleNavigationKey(std::int32_t keyCode) { + const bool wasFocused = m_interactionState.treeViewState.focused; + const UIEditorTreeViewInteractionResult result = + PumpTreeEvents({ MakeKeyEvent(keyCode) }); + UpdateResultText(result, wasFocused, true); + InvalidateRect(m_hwnd, nullptr, FALSE); + } + void UpdateHoveredAction(const ScenarioLayout& layout, float x, float y) { const ButtonLayout* button = HitTestAction(layout, x, y); if (button == nullptr) { @@ -558,7 +603,7 @@ private: m_expansionModel, layout.treeRect, m_items, - events); + std::move(events)); return m_treeFrame.result; } @@ -566,6 +611,21 @@ private: const UIEditorTreeViewInteractionResult& result, bool wasFocused, bool insideTree) { + if (result.keyboardNavigated && result.expansionChanged && !result.toggledItemId.empty()) { + m_lastResult = "键盘切换展开: " + result.toggledItemId; + return; + } + + if (result.keyboardNavigated && !result.selectedItemId.empty()) { + m_lastResult = "键盘选择: " + result.selectedItemId; + return; + } + + if (result.expansionChanged && result.selectionChanged && !result.selectedItemId.empty()) { + m_lastResult = "折叠后回收 selection: " + result.selectedItemId; + return; + } + if (result.expansionChanged && !result.toggledItemId.empty()) { m_lastResult = "切换展开: " + result.toggledItemId; return; @@ -582,7 +642,7 @@ private: } if (insideTree) { - m_lastResult = "点击树内空白: 只更新 focus / hover"; + m_lastResult = "点击树内空白: 仅更新 focus / hover"; return; } @@ -624,31 +684,31 @@ private: DrawCard( drawList, layout.introRect, - "这个测试在验证什么功能", - "只验证 Editor TreeView 基础控件,不涉及任何业务面板。"); + "这个测试在验证什么功能?", + "只验证 Editor TreeView 的单选、层级展开/折叠和键盘导航契约,不涉及任何业务面板。"); drawList.AddText( UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 72.0f), - "1. 验证行缩进是否正确:Scene 的子项右移一层,Directional Light 再右移一层。", + "1. 点击 row:只切换 selection,hover / selected / focused 必须能明确区分。", kTextPrimary, 12.0f); drawList.AddText( UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 94.0f), - "2. 点击 disclosure 只切换展开/折叠,不应误改 selection。", + "2. 点击 disclosure:只切换展开/折叠,不应误改 selection。", kTextPrimary, 12.0f); drawList.AddText( UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 116.0f), - "3. 点击行只切换 selection;hover、selected、focused 三种视觉状态要能区分。", + "3. 按 Left / Right:验证折叠、展开,以及父子层级跳转。", kTextPrimary, 12.0f); drawList.AddText( UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 138.0f), - "4. 点击树外空白后 focus 应清除,但 selection 不应丢失。", + "4. 按 Up / Down / Home / End:验证可见行导航,以及 current 与 selection 同步。", kTextPrimary, 12.0f); drawList.AddText( UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 160.0f), - "5. 按 F12 手动截图;设置 XCUI_AUTO_CAPTURE_ON_STARTUP=1 可自动截图。", + "5. 点击树外空白清除 focus;F12 手动截图;XCUI_AUTO_CAPTURE_ON_STARTUP=1 自动截图。", kTextPrimary, 12.0f); @@ -660,7 +720,7 @@ private: m_hasHoveredAction && m_hoveredAction == button.action); } - DrawCard(drawList, layout.stateRect, "状态摘要", "重点检查 hit / focus / selection / expanded / visible。"); + DrawCard(drawList, layout.stateRect, "状态摘要", "重点检查 hit / focus / selection / current / expanded / visible。"); drawList.AddText( UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 70.0f), "Hover: " + DescribeHitTarget(currentHit, m_items), @@ -668,7 +728,7 @@ private: 12.0f); drawList.AddText( UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 94.0f), - std::string("Focused: ") + (m_interactionState.treeViewState.focused ? "开" : "关"), + std::string("Focused: ") + (m_interactionState.treeViewState.focused ? "on" : "off"), kTextPrimary, 12.0f); drawList.AddText( @@ -679,17 +739,25 @@ private: 12.0f); drawList.AddText( UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 142.0f), - "Expanded: " + JoinExpandedItems(m_items, m_expansionModel), + std::string("Current: ") + + (m_interactionState.keyboardNavigation.HasCurrentIndex() + ? std::to_string(m_interactionState.keyboardNavigation.GetCurrentIndex()) + : std::string("(none)")), kTextMuted, 12.0f); drawList.AddText( UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 166.0f), + "Expanded: " + JoinExpandedItems(m_items, m_expansionModel), + kTextMuted, + 12.0f); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 190.0f), "Visible(" + std::to_string(m_treeFrame.layout.visibleItemIndices.size()) + "): " + JoinVisibleItems(m_items, m_treeFrame.layout), kTextMuted, 12.0f); drawList.AddText( - UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 190.0f), + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 214.0f), "Result: " + m_lastResult, kTextPrimary, 12.0f); @@ -701,12 +769,12 @@ private: ? std::string("F12 -> tests/UI/Editor/integration/shell/tree_view_basic/captures/") : m_autoScreenshot.GetLastCaptureSummary()); drawList.AddText( - UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 216.0f), + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 238.0f), captureSummary, kTextWeak, 12.0f); - DrawCard(drawList, layout.previewRect, "TreeView 预览", "这里只放一个 TreeView,不混入 Hierarchy/Inspector 等业务内容。"); + DrawCard(drawList, layout.previewRect, "TreeView 预览", "这里只放一个 TreeView,不混入 Hierarchy / Inspector 等业务内容。"); AppendUIEditorTreeViewBackground( drawList, m_treeFrame.layout, diff --git a/tests/UI/Editor/integration/shell/tree_view_inline_rename/CMakeLists.txt b/tests/UI/Editor/integration/shell/tree_view_inline_rename/CMakeLists.txt new file mode 100644 index 00000000..5c701797 --- /dev/null +++ b/tests/UI/Editor/integration/shell/tree_view_inline_rename/CMakeLists.txt @@ -0,0 +1,31 @@ +add_executable(editor_ui_tree_view_inline_rename_validation WIN32 + main.cpp +) + +target_include_directories(editor_ui_tree_view_inline_rename_validation PRIVATE + ${CMAKE_SOURCE_DIR}/new_editor/include + ${CMAKE_SOURCE_DIR}/new_editor/app + ${CMAKE_SOURCE_DIR}/engine/include + ${CMAKE_SOURCE_DIR}/tests/UI/Editor/integration/shared/src +) + +target_compile_definitions(editor_ui_tree_view_inline_rename_validation PRIVATE + UNICODE + _UNICODE + XCENGINE_EDITOR_UI_TESTS_REPO_ROOT="${XCENGINE_EDITOR_UI_TESTS_REPO_ROOT_PATH}" +) + +if(MSVC) + target_compile_options(editor_ui_tree_view_inline_rename_validation PRIVATE /utf-8 /FS) + set_property(TARGET editor_ui_tree_view_inline_rename_validation PROPERTY + MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") +endif() + +target_link_libraries(editor_ui_tree_view_inline_rename_validation PRIVATE + XCUIEditorLib + XCUIEditorHost +) + +set_target_properties(editor_ui_tree_view_inline_rename_validation PROPERTIES + OUTPUT_NAME "XCUIEditorTreeViewInlineRenameValidation" +) diff --git a/tests/UI/Editor/integration/shell/tree_view_inline_rename/captures/history/20260409_023941_1_startup.png b/tests/UI/Editor/integration/shell/tree_view_inline_rename/captures/history/20260409_023941_1_startup.png new file mode 100644 index 0000000000000000000000000000000000000000..2574f5a83a57723aaecb2afeb3e2ec0c665b3dd0 GIT binary patch literal 67359 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 +#include +#include +#include +#include +#include "EditorValidationTheme.h" +#include "Host/AutoScreenshot.h" +#include "Host/NativeRenderer.h" + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#ifndef XCENGINE_EDITOR_UI_TESTS_REPO_ROOT +#define XCENGINE_EDITOR_UI_TESTS_REPO_ROOT "." +#endif + +namespace { + +using XCEngine::Input::KeyCode; +using XCEngine::Tests::EditorUI::EditorValidationShellMetrics; +using XCEngine::Tests::EditorUI::EditorValidationShellPalette; +using XCEngine::UI::UIDrawData; +using XCEngine::UI::UIDrawList; +using XCEngine::UI::UIInputEvent; +using XCEngine::UI::UIInputEventType; +using XCEngine::UI::UIPoint; +using XCEngine::UI::UIPointerButton; +using XCEngine::UI::UIRect; +using XCEngine::UI::Widgets::UIExpansionModel; +using XCEngine::UI::Widgets::UISelectionModel; +using XCEngine::UI::Editor::BuildUIEditorHostedTextFieldMetrics; +using XCEngine::UI::Editor::BuildUIEditorHostedTextFieldPalette; +using XCEngine::UI::Editor::BuildUIEditorInlineRenameTextFieldMetrics; +using XCEngine::UI::Editor::Host::AutoScreenshotController; +using XCEngine::UI::Editor::Host::NativeRenderer; +using XCEngine::UI::Editor::ResolveUIEditorPropertyGridMetrics; +using XCEngine::UI::Editor::ResolveUIEditorPropertyGridPalette; +using XCEngine::UI::Editor::ResolveUIEditorTextFieldMetrics; +using XCEngine::UI::Editor::ResolveUIEditorTextFieldPalette; +using XCEngine::UI::Editor::UIEditorInlineRenameSessionFrame; +using XCEngine::UI::Editor::UIEditorInlineRenameSessionRequest; +using XCEngine::UI::Editor::UIEditorInlineRenameSessionState; +using XCEngine::UI::Editor::UIEditorTreeViewInteractionFrame; +using XCEngine::UI::Editor::UIEditorTreeViewInteractionResult; +using XCEngine::UI::Editor::UIEditorTreeViewInteractionState; +using XCEngine::UI::Editor::UpdateUIEditorInlineRenameSession; +using XCEngine::UI::Editor::UpdateUIEditorTreeViewInteraction; +using XCEngine::UI::Editor::Widgets::AppendUIEditorTextFieldBackground; +using XCEngine::UI::Editor::Widgets::AppendUIEditorTextFieldForeground; +using XCEngine::UI::Editor::Widgets::AppendUIEditorTreeViewBackground; +using XCEngine::UI::Editor::Widgets::AppendUIEditorTreeViewForeground; +using XCEngine::UI::Editor::Widgets::FindUIEditorTreeViewItemIndex; +using XCEngine::UI::Editor::Widgets::HitTestUIEditorTreeView; +using XCEngine::UI::Editor::Widgets::UIEditorTreeViewHitTarget; +using XCEngine::UI::Editor::Widgets::UIEditorTreeViewHitTargetKind; +using XCEngine::UI::Editor::Widgets::UIEditorTreeViewInvalidIndex; +using XCEngine::UI::Editor::Widgets::UIEditorTreeViewItem; +using XCEngine::UI::Editor::Widgets::UIEditorTextFieldMetrics; +using XCEngine::UI::Editor::Widgets::UIEditorTextFieldPalette; +namespace Style = XCEngine::UI::Style; + +constexpr const wchar_t* kWindowClassName = L"XCUIEditorTreeViewInlineRenameValidation"; +constexpr const wchar_t* kWindowTitle = L"XCUI Editor | TreeView Inline Rename"; + +enum class ActionId : unsigned char { Reset = 0, Capture }; + +struct ButtonLayout { ActionId action = ActionId::Reset; const char* label = ""; UIRect rect = {}; }; +struct ScenarioLayout { + UIRect introRect = {}; + UIRect controlRect = {}; + UIRect stateRect = {}; + UIRect previewRect = {}; + UIRect treeRect = {}; + std::vector buttons = {}; +}; + +std::filesystem::path ResolveRepoRootPath(); +std::filesystem::path ResolveValidationThemePath(); +bool ContainsPoint(const UIRect& rect, float x, float y); +std::int32_t MapTreeKey(UINT keyCode); +ScenarioLayout BuildScenarioLayout(float width, float height, const EditorValidationShellMetrics& shellMetrics); +void DrawCard(UIDrawList& drawList, const UIRect& rect, const EditorValidationShellPalette& shellPalette, const EditorValidationShellMetrics& shellMetrics, std::string_view title, std::string_view subtitle = {}); +void DrawButton(UIDrawList& drawList, const ButtonLayout& button, const EditorValidationShellPalette& shellPalette, const EditorValidationShellMetrics& shellMetrics, bool hovered); +std::vector BuildTreeItems(); +std::string DescribeHitTarget(const UIEditorTreeViewHitTarget& hitTarget, const std::vector& items); +UIInputEvent MakePointerEvent(UIInputEventType type, const UIPoint& position, UIPointerButton button = UIPointerButton::None); +UIInputEvent MakeKeyEvent(std::int32_t keyCode); +UIInputEvent MakeCharacterEvent(wchar_t character); + +class ScenarioApp { +public: + int Run(HINSTANCE hInstance, int nCmdShow); +private: + static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); + bool Initialize(HINSTANCE hInstance, int nCmdShow); + void Shutdown(); + ScenarioLayout GetLayout() const; + void ResetScenario(); + void RefreshTreeFrame(); + void OnResize(UINT width, UINT height); + void HandleMouseMove(float x, float y); + void HandleMouseLeave(); + void HandleLeftButtonDown(float x, float y); + void HandleLeftButtonUp(float x, float y); + void HandleKeyDown(UINT virtualKey); + void HandleCharacter(wchar_t character); + void UpdateHoveredAction(const ScenarioLayout& layout, float x, float y); + const ButtonLayout* HitTestAction(const ScenarioLayout& layout, float x, float y) const; + UIEditorTreeViewInteractionResult PumpTreeEvents(std::vector events); + void BeginRename(const std::string& itemId); + void PumpRenameEvents(std::vector events); + void ApplyRenameFrame(const UIEditorInlineRenameSessionFrame& frame); + void UpdateTreeResultText(const UIEditorTreeViewInteractionResult& result); + UIRect BuildRenameBoundsForActiveItem() const; + UIRect BuildRenameBounds(std::size_t itemIndex) const; + UIEditorInlineRenameSessionRequest BuildRenameRequest(bool beginSession) const; + UIEditorTextFieldMetrics ResolveHostedTextFieldMetrics() const; + UIEditorTextFieldMetrics ResolveInlineRenameMetrics(const UIRect& bounds) const; + UIEditorTextFieldPalette ResolveInlineRenamePalette() const; + void ExecuteAction(ActionId action); + void RenderFrame(); + + HWND m_hwnd = nullptr; + ATOM m_windowClassAtom = 0; + NativeRenderer m_renderer = {}; + AutoScreenshotController m_autoScreenshot = {}; + std::filesystem::path m_captureRoot = {}; + Style::UITheme m_theme = {}; + std::string m_themeStatus = "fallback"; + std::vector m_items = {}; + UISelectionModel m_selectionModel = {}; + UIExpansionModel m_expansionModel = {}; + UIEditorTreeViewInteractionState m_treeInteractionState = {}; + UIEditorTreeViewInteractionFrame m_treeFrame = {}; + UIEditorInlineRenameSessionState m_renameState = {}; + UIEditorInlineRenameSessionFrame m_renameFrame = {}; + UIPoint m_mousePosition = UIPoint(-1000.0f, -1000.0f); + ActionId m_hoveredAction = ActionId::Reset; + bool m_hasHoveredAction = false; + std::string m_lastCommittedItemId = {}; + std::string m_lastCommittedValue = {}; + std::string m_lastResult = {}; +}; + +std::filesystem::path ResolveRepoRootPath() { + std::string root = XCENGINE_EDITOR_UI_TESTS_REPO_ROOT; + if (root.size() >= 2u && root.front() == '"' && root.back() == '"') { + root = root.substr(1u, root.size() - 2u); + } + return std::filesystem::path(root).lexically_normal(); +} + +std::filesystem::path ResolveValidationThemePath() { + return (ResolveRepoRootPath() / "tests/UI/Editor/integration/shared/themes/editor_validation.xctheme").lexically_normal(); +} + +bool ContainsPoint(const UIRect& rect, float x, float y) { + return x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height; +} + +std::int32_t MapTreeKey(UINT keyCode) { + switch (keyCode) { + case VK_UP: return static_cast(KeyCode::Up); + case VK_DOWN: return static_cast(KeyCode::Down); + case VK_LEFT: return static_cast(KeyCode::Left); + case VK_RIGHT: return static_cast(KeyCode::Right); + case VK_HOME: return static_cast(KeyCode::Home); + case VK_END: return static_cast(KeyCode::End); + case VK_BACK: return static_cast(KeyCode::Backspace); + case VK_DELETE: return static_cast(KeyCode::Delete); + case VK_RETURN: return static_cast(KeyCode::Enter); + case VK_ESCAPE: return static_cast(KeyCode::Escape); + case VK_F2: return static_cast(KeyCode::F2); + default: return static_cast(KeyCode::None); + } +} + +ScenarioLayout BuildScenarioLayout(float width, float height, const EditorValidationShellMetrics& shellMetrics) { + const float margin = shellMetrics.margin; + constexpr float leftWidth = 470.0f; + const float gap = shellMetrics.gap; + ScenarioLayout layout = {}; + layout.introRect = UIRect(margin, margin, leftWidth, 252.0f); + layout.controlRect = UIRect(margin, layout.introRect.y + layout.introRect.height + gap, leftWidth, 84.0f); + layout.stateRect = UIRect(margin, layout.controlRect.y + layout.controlRect.height + gap, leftWidth, (std::max)(260.0f, height - (layout.controlRect.y + layout.controlRect.height + gap) - margin)); + layout.previewRect = UIRect(leftWidth + margin * 2.0f, margin, (std::max)(520.0f, width - leftWidth - margin * 3.0f), height - margin * 2.0f); + layout.treeRect = UIRect(layout.previewRect.x + 22.0f, layout.previewRect.y + 72.0f, layout.previewRect.width - 44.0f, layout.previewRect.height - 104.0f); + const float buttonWidth = (layout.controlRect.width - 44.0f) * 0.5f; + const float buttonY = layout.controlRect.y + 32.0f; + layout.buttons = { + { ActionId::Reset, "重置", UIRect(layout.controlRect.x + 14.0f, buttonY, buttonWidth, 36.0f) }, + { ActionId::Capture, "截图(F12)", UIRect(layout.controlRect.x + 26.0f + buttonWidth, buttonY, buttonWidth, 36.0f) } + }; + return layout; +} + +void DrawCard(UIDrawList& drawList, const UIRect& rect, const EditorValidationShellPalette& shellPalette, const EditorValidationShellMetrics& shellMetrics, std::string_view title, std::string_view subtitle) { + drawList.AddFilledRect(rect, shellPalette.cardBackground, shellMetrics.cardRadius); + drawList.AddRectOutline(rect, shellPalette.cardBorder, 1.0f, shellMetrics.cardRadius); + drawList.AddText(UIPoint(rect.x + 16.0f, rect.y + 14.0f), std::string(title), shellPalette.textPrimary, shellMetrics.titleFontSize); + if (!subtitle.empty()) { + drawList.AddText(UIPoint(rect.x + 16.0f, rect.y + 40.0f), std::string(subtitle), shellPalette.textMuted, shellMetrics.bodyFontSize); + } +} + +void DrawButton(UIDrawList& drawList, const ButtonLayout& button, const EditorValidationShellPalette& shellPalette, const EditorValidationShellMetrics& shellMetrics, bool hovered) { + drawList.AddFilledRect(button.rect, hovered ? shellPalette.buttonHoverBackground : shellPalette.buttonBackground, shellMetrics.buttonRadius); + drawList.AddRectOutline(button.rect, shellPalette.cardBorder, 1.0f, shellMetrics.buttonRadius); + drawList.AddText(UIPoint(button.rect.x + 16.0f, button.rect.y + 10.0f), button.label, shellPalette.textPrimary, shellMetrics.bodyFontSize); +} + +std::vector BuildTreeItems() { + return { + { "scene", "Scene", 0u, false, 0.0f }, + { "camera", "Camera", 1u, true, 0.0f }, + { "lights", "Lights", 1u, false, 0.0f }, + { "directional-light", "Directional Light", 2u, true, 0.0f }, + { "fill-light", "Fill Light", 2u, true, 0.0f }, + { "characters", "Characters", 0u, false, 0.0f }, + { "hero", "Hero", 1u, false, 0.0f }, + { "hero-mesh", "HeroMesh", 2u, true, 0.0f }, + { "hero-rig", "HeroRig", 2u, true, 0.0f } + }; +} + +std::string DescribeHitTarget(const UIEditorTreeViewHitTarget& hitTarget, const std::vector& items) { + if (hitTarget.kind == UIEditorTreeViewHitTargetKind::None || hitTarget.itemIndex >= items.size()) { + return "(none)"; + } + return items[hitTarget.itemIndex].itemId; +} + +UIInputEvent MakePointerEvent(UIInputEventType type, const UIPoint& position, UIPointerButton button) { + UIInputEvent event = {}; + event.type = type; + event.position = position; + event.pointerButton = button; + return event; +} + +UIInputEvent MakeKeyEvent(std::int32_t keyCode) { + UIInputEvent event = {}; + event.type = UIInputEventType::KeyDown; + event.keyCode = keyCode; + return event; +} + +UIInputEvent MakeCharacterEvent(wchar_t character) { + UIInputEvent event = {}; + event.type = UIInputEventType::Character; + event.character = static_cast(character); + return event; +} + +int ScenarioApp::Run(HINSTANCE hInstance, int nCmdShow) { + if (!Initialize(hInstance, nCmdShow)) { + Shutdown(); + return 1; + } + MSG message = {}; + while (message.message != WM_QUIT) { + if (PeekMessageW(&message, nullptr, 0U, 0U, PM_REMOVE)) { + TranslateMessage(&message); + DispatchMessageW(&message); + continue; + } + RenderFrame(); + Sleep(8); + } + Shutdown(); + return static_cast(message.wParam); +} + +LRESULT CALLBACK ScenarioApp::WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { + if (message == WM_NCCREATE) { + const auto* createStruct = reinterpret_cast(lParam); + auto* app = reinterpret_cast(createStruct->lpCreateParams); + SetWindowLongPtrW(hwnd, GWLP_USERDATA, reinterpret_cast(app)); + return TRUE; + } + auto* app = reinterpret_cast(GetWindowLongPtrW(hwnd, GWLP_USERDATA)); + switch (message) { + case WM_SIZE: if (app != nullptr && wParam != SIZE_MINIMIZED) { app->OnResize(static_cast(LOWORD(lParam)), static_cast(HIWORD(lParam))); } return 0; + case WM_MOUSEMOVE: if (app != nullptr) { app->HandleMouseMove(static_cast(GET_X_LPARAM(lParam)), static_cast(GET_Y_LPARAM(lParam))); return 0; } break; + case WM_MOUSELEAVE: if (app != nullptr) { app->HandleMouseLeave(); return 0; } break; + case WM_LBUTTONDOWN: if (app != nullptr) { app->HandleLeftButtonDown(static_cast(GET_X_LPARAM(lParam)), static_cast(GET_Y_LPARAM(lParam))); return 0; } break; + case WM_LBUTTONUP: if (app != nullptr) { app->HandleLeftButtonUp(static_cast(GET_X_LPARAM(lParam)), static_cast(GET_Y_LPARAM(lParam))); return 0; } break; + case WM_KEYDOWN: + case WM_SYSKEYDOWN: if (app != nullptr) { app->HandleKeyDown(static_cast(wParam)); return 0; } break; + case WM_CHAR: if (app != nullptr) { app->HandleCharacter(static_cast(wParam)); return 0; } break; + case WM_PAINT: + if (app != nullptr) { + PAINTSTRUCT paintStruct = {}; + BeginPaint(hwnd, &paintStruct); + app->RenderFrame(); + EndPaint(hwnd, &paintStruct); + return 0; + } + break; + case WM_ERASEBKGND: return 1; + case WM_DESTROY: if (app != nullptr) { app->m_hwnd = nullptr; } PostQuitMessage(0); return 0; + default: break; + } + return DefWindowProcW(hwnd, message, wParam, lParam); +} + +bool ScenarioApp::Initialize(HINSTANCE hInstance, int nCmdShow) { + WNDCLASSEXW windowClass = {}; + windowClass.cbSize = sizeof(windowClass); + windowClass.style = CS_HREDRAW | CS_VREDRAW; + windowClass.lpfnWndProc = &ScenarioApp::WndProc; + windowClass.hInstance = hInstance; + windowClass.hCursor = LoadCursorW(nullptr, IDC_ARROW); + windowClass.lpszClassName = kWindowClassName; + m_windowClassAtom = RegisterClassExW(&windowClass); + if (m_windowClassAtom == 0) { + return false; + } + m_hwnd = CreateWindowExW(0, kWindowClassName, kWindowTitle, WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 1540, 940, nullptr, nullptr, hInstance, this); + if (m_hwnd == nullptr) { + return false; + } + ShowWindow(m_hwnd, nCmdShow); + UpdateWindow(m_hwnd); + if (!m_renderer.Initialize(m_hwnd)) { + return false; + } + m_captureRoot = ResolveRepoRootPath() / "tests/UI/Editor/integration/shell/tree_view_inline_rename/captures"; + m_autoScreenshot.Initialize(m_captureRoot); + const auto themeLoad = XCEngine::Tests::EditorUI::LoadEditorValidationTheme(ResolveValidationThemePath()); + if (themeLoad.succeeded) { + m_theme = themeLoad.theme; + m_themeStatus = "loaded"; + } else { + m_themeStatus = themeLoad.error.empty() ? "fallback" : themeLoad.error; + } + ResetScenario(); + return true; +} + +void ScenarioApp::Shutdown() { + m_autoScreenshot.Shutdown(); + m_renderer.Shutdown(); + if (m_hwnd != nullptr && IsWindow(m_hwnd)) { + DestroyWindow(m_hwnd); + } + m_hwnd = nullptr; + if (m_windowClassAtom != 0) { + UnregisterClassW(kWindowClassName, GetModuleHandleW(nullptr)); + m_windowClassAtom = 0; + } +} + +ScenarioLayout ScenarioApp::GetLayout() const { + RECT clientRect = {}; + GetClientRect(m_hwnd, &clientRect); + const float width = static_cast((std::max)(1L, clientRect.right - clientRect.left)); + const float height = static_cast((std::max)(1L, clientRect.bottom - clientRect.top)); + return BuildScenarioLayout(width, height, XCEngine::Tests::EditorUI::ResolveEditorValidationShellMetrics(m_theme)); +} + +void ScenarioApp::ResetScenario() { + m_items = BuildTreeItems(); + m_selectionModel = {}; + m_selectionModel.SetSelection("hero-mesh"); + m_expansionModel = {}; + m_expansionModel.Expand("scene"); + m_expansionModel.Expand("lights"); + m_expansionModel.Expand("characters"); + m_expansionModel.Expand("hero"); + m_treeInteractionState = {}; + m_treeInteractionState.treeViewState.focused = true; + m_renameState = {}; + m_renameFrame = {}; + m_mousePosition = UIPoint(-1000.0f, -1000.0f); + m_hoveredAction = ActionId::Reset; + m_hasHoveredAction = false; + m_lastCommittedItemId.clear(); + m_lastCommittedValue.clear(); + m_lastResult = "已重置到默认状态,准备进入 hero-mesh 的 inline rename。"; + RefreshTreeFrame(); + BeginRename("hero-mesh"); +} + +void ScenarioApp::RefreshTreeFrame() { + if (m_hwnd == nullptr) { + return; + } + const ScenarioLayout layout = GetLayout(); + m_treeFrame = UpdateUIEditorTreeViewInteraction(m_treeInteractionState, m_selectionModel, m_expansionModel, layout.treeRect, m_items, {}); + if (m_renameState.active) { + const UIEditorInlineRenameSessionRequest request = BuildRenameRequest(false); + m_renameFrame = UpdateUIEditorInlineRenameSession(m_renameState, request, {}, ResolveInlineRenameMetrics(request.bounds)); + ApplyRenameFrame(m_renameFrame); + } +} + +void ScenarioApp::OnResize(UINT width, UINT height) { + if (width == 0u || height == 0u) { + return; + } + m_renderer.Resize(width, height); + RefreshTreeFrame(); +} + +void ScenarioApp::HandleMouseMove(float x, float y) { + m_mousePosition = UIPoint(x, y); + const ScenarioLayout layout = GetLayout(); + UpdateHoveredAction(layout, x, y); + + TRACKMOUSEEVENT trackEvent = {}; + trackEvent.cbSize = sizeof(trackEvent); + trackEvent.dwFlags = TME_LEAVE; + trackEvent.hwndTrack = m_hwnd; + TrackMouseEvent(&trackEvent); + + const UIInputEvent pointerEvent = + MakePointerEvent(UIInputEventType::PointerMove, m_mousePosition); + if (m_renameState.active) { + PumpRenameEvents({ pointerEvent }); + } else { + PumpTreeEvents({ pointerEvent }); + } + InvalidateRect(m_hwnd, nullptr, FALSE); +} + +void ScenarioApp::HandleMouseLeave() { + m_mousePosition = UIPoint(-1000.0f, -1000.0f); + m_hasHoveredAction = false; + + const UIInputEvent leaveEvent = + MakePointerEvent(UIInputEventType::PointerLeave, m_mousePosition); + if (m_renameState.active) { + PumpRenameEvents({ leaveEvent }); + } else { + PumpTreeEvents({ leaveEvent }); + } + InvalidateRect(m_hwnd, nullptr, FALSE); +} + +void ScenarioApp::HandleLeftButtonDown(float x, float y) { + m_mousePosition = UIPoint(x, y); + const ScenarioLayout layout = GetLayout(); + if (HitTestAction(layout, x, y) != nullptr) { + UpdateHoveredAction(layout, x, y); + InvalidateRect(m_hwnd, nullptr, FALSE); + return; + } + + const UIInputEvent pointerEvent = + MakePointerEvent(UIInputEventType::PointerButtonDown, m_mousePosition, UIPointerButton::Left); + if (m_renameState.active) { + const UIRect renameBounds = BuildRenameBoundsForActiveItem(); + const bool insideRename = ContainsPoint(renameBounds, x, y); + PumpRenameEvents({ pointerEvent }); + if (!insideRename && !m_renameState.active) { + PumpTreeEvents({ pointerEvent }); + } + } else { + PumpTreeEvents({ pointerEvent }); + } + InvalidateRect(m_hwnd, nullptr, FALSE); +} + +void ScenarioApp::HandleLeftButtonUp(float x, float y) { + m_mousePosition = UIPoint(x, y); + const ScenarioLayout layout = GetLayout(); + const ButtonLayout* button = HitTestAction(layout, x, y); + if (button != nullptr) { + ExecuteAction(button->action); + UpdateHoveredAction(layout, x, y); + InvalidateRect(m_hwnd, nullptr, FALSE); + return; + } + + const UIInputEvent pointerEvent = + MakePointerEvent(UIInputEventType::PointerButtonUp, m_mousePosition, UIPointerButton::Left); + if (m_renameState.active) { + const UIRect renameBounds = BuildRenameBoundsForActiveItem(); + const bool insideRename = ContainsPoint(renameBounds, x, y); + PumpRenameEvents({ pointerEvent }); + if (!insideRename && !m_renameState.active) { + const UIEditorTreeViewInteractionResult result = PumpTreeEvents({ pointerEvent }); + UpdateTreeResultText(result); + } + } else { + const UIEditorTreeViewInteractionResult result = PumpTreeEvents({ pointerEvent }); + UpdateTreeResultText(result); + } + InvalidateRect(m_hwnd, nullptr, FALSE); +} + +void ScenarioApp::HandleKeyDown(UINT virtualKey) { + if (virtualKey == VK_F12) { + m_autoScreenshot.RequestCapture("manual_f12"); + m_lastResult = "已请求截图,输出到 captures/latest.png"; + InvalidateRect(m_hwnd, nullptr, FALSE); + return; + } + + const std::int32_t keyCode = MapTreeKey(virtualKey); + if (keyCode == static_cast(KeyCode::None)) { + return; + } + + if (m_renameState.active) { + PumpRenameEvents({ MakeKeyEvent(keyCode) }); + } else { + const UIEditorTreeViewInteractionResult result = + PumpTreeEvents({ MakeKeyEvent(keyCode) }); + if (result.renameRequested) { + BeginRename(result.renameItemId); + } else { + UpdateTreeResultText(result); + } + } + InvalidateRect(m_hwnd, nullptr, FALSE); +} + +void ScenarioApp::HandleCharacter(wchar_t character) { + if (character < 32 || !m_renameState.active) { + return; + } + PumpRenameEvents({ MakeCharacterEvent(character) }); + InvalidateRect(m_hwnd, nullptr, FALSE); +} + +void ScenarioApp::UpdateHoveredAction(const ScenarioLayout& layout, float x, float y) { + const ButtonLayout* button = HitTestAction(layout, x, y); + if (button == nullptr) { + m_hasHoveredAction = false; + return; + } + m_hoveredAction = button->action; + m_hasHoveredAction = true; +} + +const ButtonLayout* ScenarioApp::HitTestAction(const ScenarioLayout& layout, float x, float y) const { + for (const ButtonLayout& button : layout.buttons) { + if (ContainsPoint(button.rect, x, y)) { + return &button; + } + } + return nullptr; +} + +UIEditorTreeViewInteractionResult ScenarioApp::PumpTreeEvents(std::vector events) { + const ScenarioLayout layout = GetLayout(); + m_treeFrame = UpdateUIEditorTreeViewInteraction( + m_treeInteractionState, + m_selectionModel, + m_expansionModel, + layout.treeRect, + m_items, + std::move(events)); + return m_treeFrame.result; +} + +void ScenarioApp::BeginRename(const std::string& itemId) { + if (itemId.empty()) { + return; + } + + const std::size_t itemIndex = FindUIEditorTreeViewItemIndex(m_items, itemId); + if (itemIndex == UIEditorTreeViewInvalidIndex) { + return; + } + + UIEditorInlineRenameSessionRequest request = {}; + request.beginSession = true; + request.itemId = itemId; + request.initialText = m_items[itemIndex].label; + request.bounds = BuildRenameBounds(itemIndex); + m_renameFrame = UpdateUIEditorInlineRenameSession( + m_renameState, + request, + {}, + ResolveInlineRenameMetrics(request.bounds)); + ApplyRenameFrame(m_renameFrame); +} + +void ScenarioApp::PumpRenameEvents(std::vector events) { + if (!m_renameState.active) { + return; + } + + const UIEditorInlineRenameSessionRequest request = BuildRenameRequest(false); + m_renameFrame = UpdateUIEditorInlineRenameSession( + m_renameState, + request, + std::move(events), + ResolveInlineRenameMetrics(request.bounds)); + ApplyRenameFrame(m_renameFrame); +} + +void ScenarioApp::ApplyRenameFrame(const UIEditorInlineRenameSessionFrame& frame) { + const auto& result = frame.result; + if (result.sessionStarted) { + m_lastResult = "已进入 inline rename: " + result.itemId; + return; + } + + if (result.sessionCommitted) { + const std::size_t itemIndex = FindUIEditorTreeViewItemIndex(m_items, result.itemId); + if (itemIndex != UIEditorTreeViewInvalidIndex) { + m_items[itemIndex].label = result.valueAfter; + m_lastCommittedItemId = result.itemId; + m_lastCommittedValue = result.valueAfter; + RefreshTreeFrame(); + } + m_lastResult = "已提交 rename: " + result.itemId + " -> " + result.valueAfter; + return; + } + + if (result.sessionCanceled) { + m_lastResult = "已取消 rename: " + result.itemId; + return; + } + + if (m_renameState.active && result.textFieldResult.consumed) { + m_lastResult = + "编辑中: " + m_renameState.itemId + " -> " + + m_renameState.textFieldInteraction.textFieldState.displayText; + } +} + +void ScenarioApp::UpdateTreeResultText(const UIEditorTreeViewInteractionResult& result) { + if (result.renameRequested) { + m_lastResult = "收到 rename 请求: " + result.renameItemId; + return; + } + if (result.keyboardNavigated && !result.selectedItemId.empty()) { + m_lastResult = "键盘导航到: " + result.selectedItemId; + return; + } + if (result.expansionChanged && !result.toggledItemId.empty()) { + m_lastResult = "切换展开: " + result.toggledItemId; + return; + } + if (result.selectionChanged && !result.selectedItemId.empty()) { + m_lastResult = "选中行: " + result.selectedItemId; + return; + } + if (result.consumed && result.hitTarget.kind == UIEditorTreeViewHitTargetKind::Row) { + m_lastResult = "点击行: " + DescribeHitTarget(result.hitTarget, m_items); + return; + } + if (result.consumed && result.hitTarget.kind == UIEditorTreeViewHitTargetKind::Disclosure) { + m_lastResult = "点击 disclosure: " + DescribeHitTarget(result.hitTarget, m_items); + return; + } + m_lastResult = "等待交互"; +} + +UIRect ScenarioApp::BuildRenameBoundsForActiveItem() const { + if (!m_renameState.active) { + return {}; + } + + const std::size_t itemIndex = FindUIEditorTreeViewItemIndex(m_items, m_renameState.itemId); + return BuildRenameBounds(itemIndex); +} + +UIRect ScenarioApp::BuildRenameBounds(std::size_t itemIndex) const { + if (itemIndex == UIEditorTreeViewInvalidIndex) { + return {}; + } + + const auto& layout = m_treeFrame.layout; + std::size_t visibleIndex = UIEditorTreeViewInvalidIndex; + for (std::size_t index = 0u; index < layout.visibleItemIndices.size(); ++index) { + if (layout.visibleItemIndices[index] == itemIndex) { + visibleIndex = index; + break; + } + } + + if (visibleIndex == UIEditorTreeViewInvalidIndex || + visibleIndex >= layout.labelRects.size() || + visibleIndex >= layout.rowRects.size()) { + return {}; + } + + const UIEditorTextFieldMetrics hostedMetrics = ResolveHostedTextFieldMetrics(); + const UIRect& rowRect = layout.rowRects[visibleIndex]; + const UIRect& labelRect = layout.labelRects[visibleIndex]; + const float x = (std::max)(rowRect.x, labelRect.x - hostedMetrics.valueTextInsetX); + const float right = rowRect.x + rowRect.width - 8.0f; + const float width = (std::max)(120.0f, right - x); + return UIRect(x, rowRect.y, width, rowRect.height); +} + +UIEditorInlineRenameSessionRequest ScenarioApp::BuildRenameRequest(bool beginSession) const { + UIEditorInlineRenameSessionRequest request = {}; + request.beginSession = beginSession; + request.itemId = m_renameState.itemId; + request.initialText = m_renameState.textFieldSpec.value; + request.bounds = BuildRenameBoundsForActiveItem(); + return request; +} + +UIEditorTextFieldMetrics ScenarioApp::ResolveHostedTextFieldMetrics() const { + const auto propertyMetrics = ResolveUIEditorPropertyGridMetrics(m_theme); + const auto textMetrics = ResolveUIEditorTextFieldMetrics(m_theme); + return BuildUIEditorHostedTextFieldMetrics(propertyMetrics, textMetrics); +} + +UIEditorTextFieldMetrics ScenarioApp::ResolveInlineRenameMetrics(const UIRect& bounds) const { + return BuildUIEditorInlineRenameTextFieldMetrics(bounds, ResolveHostedTextFieldMetrics()); +} + +UIEditorTextFieldPalette ScenarioApp::ResolveInlineRenamePalette() const { + const auto propertyPalette = ResolveUIEditorPropertyGridPalette(m_theme); + const auto textPalette = ResolveUIEditorTextFieldPalette(m_theme); + return BuildUIEditorHostedTextFieldPalette(propertyPalette, textPalette); +} + +void ScenarioApp::ExecuteAction(ActionId action) { + switch (action) { + case ActionId::Reset: + ResetScenario(); + break; + case ActionId::Capture: + m_autoScreenshot.RequestCapture("manual_button"); + m_lastResult = "已请求截图,输出到 captures/latest.png"; + break; + } +} + +void ScenarioApp::RenderFrame() { + if (m_hwnd == nullptr) { + return; + } + + RECT clientRect = {}; + GetClientRect(m_hwnd, &clientRect); + const float width = static_cast((std::max)(1L, clientRect.right - clientRect.left)); + const float height = static_cast((std::max)(1L, clientRect.bottom - clientRect.top)); + const auto shellMetrics = + XCEngine::Tests::EditorUI::ResolveEditorValidationShellMetrics(m_theme); + const auto shellPalette = + XCEngine::Tests::EditorUI::ResolveEditorValidationShellPalette(m_theme); + const ScenarioLayout layout = BuildScenarioLayout(width, height, shellMetrics); + RefreshTreeFrame(); + + const UIEditorTreeViewHitTarget currentHit = + HitTestUIEditorTreeView(m_treeFrame.layout, m_mousePosition); + + std::vector renderItems = m_items; + if (m_renameState.active) { + const std::size_t activeIndex = FindUIEditorTreeViewItemIndex(m_items, m_renameState.itemId); + if (activeIndex != UIEditorTreeViewInvalidIndex && activeIndex < renderItems.size()) { + renderItems[activeIndex].label.clear(); + } + } + + UIDrawData drawData = {}; + UIDrawList& drawList = drawData.EmplaceDrawList("EditorTreeViewInlineRename"); + drawList.AddFilledRect(UIRect(0.0f, 0.0f, width, height), shellPalette.windowBackground); + + DrawCard( + drawList, + layout.introRect, + shellPalette, + shellMetrics, + "这个测试在验证什么功能?", + "只验证 Editor TreeView 的 inline rename 契约:默认进入编辑、字符编辑、Enter 提交、Esc 取消、点击外部提交。"); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 72.0f), + "1. 启动后默认进入 hero-mesh rename;输入框只能覆盖 label 区。", + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 94.0f), + "2. 输入字符后,Draft 必须实时变化,原标签不能和 overlay 叠字。", + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 116.0f), + "3. 按 Enter:名称写回 TreeViewItem.label,并退出 rename。", + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 138.0f), + "4. 按 Esc:取消编辑,保留原标签。", + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 160.0f), + "5. rename 中点击输入框外部:提交当前草稿并退出编辑态。", + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.introRect.x + 16.0f, layout.introRect.y + 182.0f), + "6. 需要时先按 Esc 退出,再单击树节点后按 F2;F12 可截图。", + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + + DrawCard(drawList, layout.controlRect, shellPalette, shellMetrics, "操作"); + for (const ButtonLayout& button : layout.buttons) { + DrawButton( + drawList, + button, + shellPalette, + shellMetrics, + m_hasHoveredAction && m_hoveredAction == button.action); + } + + DrawCard( + drawList, + layout.stateRect, + shellPalette, + shellMetrics, + "状态摘要", + "重点检查 TreeView 选择状态、可见索引和 rename 生命周期是否同步。"); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 70.0f), + "Hover: " + DescribeHitTarget(currentHit, m_items), + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 94.0f), + std::string("Tree Focused: ") + (m_treeInteractionState.treeViewState.focused ? "on" : "off"), + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 118.0f), + "Selected Item: " + + (m_selectionModel.HasSelection() ? m_selectionModel.GetSelectedId() : std::string("(none)")), + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 142.0f), + std::string("Rename Active: ") + (m_renameState.active ? "yes" : "no"), + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 166.0f), + "Rename Item: " + (m_renameState.active ? m_renameState.itemId : std::string("(none)")), + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 190.0f), + "Draft: " + (m_renameState.active + ? m_renameState.textFieldInteraction.textFieldState.displayText + : std::string("(none)")), + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 214.0f), + "Committed: " + (m_lastCommittedValue.empty() + ? std::string("(none)") + : (m_lastCommittedItemId + " -> " + m_lastCommittedValue)), + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 238.0f), + std::string("Current Index: ") + + (m_treeInteractionState.keyboardNavigation.HasCurrentIndex() + ? std::to_string(m_treeInteractionState.keyboardNavigation.GetCurrentIndex()) + : std::string("(none)")), + shellPalette.textMuted, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 262.0f), + "Visible Count: " + std::to_string(m_treeFrame.layout.visibleItemIndices.size()), + shellPalette.textMuted, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 286.0f), + "Result: " + m_lastResult, + shellPalette.textPrimary, + shellMetrics.bodyFontSize); + + const std::string captureSummary = + m_autoScreenshot.HasPendingCapture() + ? "截图排队中..." + : (m_autoScreenshot.GetLastCaptureSummary().empty() + ? std::string("F12 -> tests/UI/Editor/integration/shell/tree_view_inline_rename/captures/") + : m_autoScreenshot.GetLastCaptureSummary()); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 310.0f), + captureSummary, + shellPalette.textWeak, + shellMetrics.bodyFontSize); + drawList.AddText( + UIPoint(layout.stateRect.x + 16.0f, layout.stateRect.y + 334.0f), + "Theme: " + m_themeStatus, + shellPalette.textWeak, + shellMetrics.bodyFontSize); + + DrawCard( + drawList, + layout.previewRect, + shellPalette, + shellMetrics, + "TreeView 预览", + "这里只放一个 TreeView,启动时默认直接进入 hero-mesh 的 rename,便于截图和自检。"); + AppendUIEditorTreeViewBackground( + drawList, + m_treeFrame.layout, + renderItems, + m_selectionModel, + m_treeInteractionState.treeViewState); + AppendUIEditorTreeViewForeground(drawList, m_treeFrame.layout, renderItems); + + if (m_renameState.active) { + const UIEditorTextFieldPalette palette = ResolveInlineRenamePalette(); + const UIEditorTextFieldMetrics metrics = + ResolveInlineRenameMetrics(BuildRenameBoundsForActiveItem()); + AppendUIEditorTextFieldBackground( + drawList, + m_renameFrame.layout, + m_renameState.textFieldSpec, + m_renameState.textFieldInteraction.textFieldState, + palette, + metrics); + AppendUIEditorTextFieldForeground( + drawList, + m_renameFrame.layout, + m_renameState.textFieldSpec, + m_renameState.textFieldInteraction.textFieldState, + palette, + metrics); + } + + const bool framePresented = m_renderer.Render(drawData); + m_autoScreenshot.CaptureIfRequested( + m_renderer, + drawData, + static_cast(width), + static_cast(height), + framePresented); +} + +} // namespace + +int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR, int nCmdShow) { + return ScenarioApp().Run(hInstance, nCmdShow); +} diff --git a/tests/UI/Editor/integration/shell/tree_view_multiselect/CMakeLists.txt b/tests/UI/Editor/integration/shell/tree_view_multiselect/CMakeLists.txt new file mode 100644 index 00000000..f8063d25 --- /dev/null +++ b/tests/UI/Editor/integration/shell/tree_view_multiselect/CMakeLists.txt @@ -0,0 +1,30 @@ +add_executable(editor_ui_tree_view_multiselect_validation WIN32 + main.cpp +) + +target_include_directories(editor_ui_tree_view_multiselect_validation PRIVATE + ${CMAKE_SOURCE_DIR}/new_editor/include + ${CMAKE_SOURCE_DIR}/new_editor/app + ${CMAKE_SOURCE_DIR}/engine/include +) + +target_compile_definitions(editor_ui_tree_view_multiselect_validation PRIVATE + UNICODE + _UNICODE + XCENGINE_EDITOR_UI_TESTS_REPO_ROOT="${XCENGINE_EDITOR_UI_TESTS_REPO_ROOT_PATH}" +) + +if(MSVC) + target_compile_options(editor_ui_tree_view_multiselect_validation PRIVATE /utf-8 /FS) + set_property(TARGET editor_ui_tree_view_multiselect_validation PROPERTY + MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") +endif() + +target_link_libraries(editor_ui_tree_view_multiselect_validation PRIVATE + XCUIEditorLib + XCUIEditorHost +) + +set_target_properties(editor_ui_tree_view_multiselect_validation PROPERTIES + OUTPUT_NAME "XCUIEditorTreeViewMultiSelectValidation" +) diff --git a/tests/UI/Editor/integration/shell/tree_view_multiselect/captures/history/20260409_001604_1_startup.png b/tests/UI/Editor/integration/shell/tree_view_multiselect/captures/history/20260409_001604_1_startup.png new file mode 100644 index 0000000000000000000000000000000000000000..71da4a2328e4a00aac91d60cf62c91af9a579eab GIT binary patch literal 85132 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