Files
XCEngine/README.md

526 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# XCEngine
XCEngine 是一个 Windows 优先、编辑器优先的模块化 C++ 游戏引擎工作区。当前主线已经形成 `RHI -> Rendering -> Editor Viewport -> AssetDatabase/Library -> Mono Scripting` 的可运行闭环,不再只是若干独立 sample 的集合。
这份 README 面向引擎用户:重点回答项目是什么、当前能做什么、怎么构建、怎么启动,以及当前仓库各目录分别承担什么职责。面向参与引擎实现和文档维护的 coding agent请看 [AGENT.md](AGENT.md)。
## 项目定位
- `engine/` 构建静态库 `XCEngine`,包含 `RHI``Rendering``Resources``Scene``Scripting` 等核心模块。
- `editor/` 构建桌面编辑器 `XCEditor`,输出文件名仍为 `XCEngine.exe`,默认打开仓库内的 `project/`
- `new_editor/` 维护基于 `XCUI` 的新宿主与 UI sandbox当前与旧 `editor/` 并行演进,应用输出名为 `XCUIEditor.exe`
- `project/` 是随仓库维护的示例工程,已经采用 `Assets/ + .meta + Library/` 的工程布局。
- `managed/` 负责 `XCEngine.ScriptCore.dll`、示例 `GameScripts.dll` 以及项目脚本程序集构建。
- `tests/` 覆盖 Engine、RHI、Rendering、Editor、Scripting、XCUI 等主线模块。
## 当前能力概览
- `RHI` 当前维护 `D3D12 / OpenGL / Vulkan` 三后端。
- `Rendering` 已形成 `SceneRenderer -> CameraRenderer -> RenderPipeline` 主链,支持 `ObjectId``InfiniteGrid``Outline``overlayPasses` 等能力。
- `Core/Asset` 已经不是简单加载器,当前真实维护 `Assets/.meta/Library` 风格的 `AssetDatabase`、artifact 缓存和项目资源索引。
- `Library` 当前已经采用“启动阶段恢复索引与缓存状态 + 运行时按需异步恢复 payload”的混合工作流`BootstrapProject()` 已接入正式启动链路。
- `Material` 与材质 artifact 已经进入稳定格式阶段,当前 `.xcmat` 使用 schema v2。
- 编辑器 Scene/Game viewport 已通过引擎 `Rendering + RHI` 链路渲染到离屏纹理,再接入 ImGui。
- `ScriptComponent` 已打通脚本类发现、字段元数据读取、字段编辑和运行时字段同步。
## 环境要求
当前推荐在 Windows 上使用和构建。
- Windows 10/11
- Visual Studio 2022 / MSVC v143
- CMake 3.15+
- Vulkan SDK
- .NET SDK
- Git LFS
启用 Mono 脚本运行时时,还需要:
- `参考/Fermion/Fermion/external/mono` 下可用的 Mono 头文件、静态库与 `mscorlib.dll`
补充说明:
- `engine/CMakeLists.txt` 当前对 `Vulkan` 是硬依赖,未配置 Vulkan SDK 时无法完成配置。
- `editor/``tests/` 首次配置会通过 `FetchContent` 从 Gitee 镜像拉取 `ImGui``googletest`;离线环境请确保已有可复用的 `_deps` 缓存。
- 如果需要 `mvs/3DGS-Unity/room.ply` 这类大文件示例,请先执行 Git LFS 拉取。
## 快速开始
### 1. 配置
```bash
cmake -S . -B build -A x64
```
如果本地暂时没有 Mono 依赖,可以先关闭脚本运行时:
```bash
cmake -S . -B build -A x64 -DXCENGINE_ENABLE_MONO_SCRIPTING=OFF
```
### 2. 构建常用目标
```bash
cmake --build build --config Debug --target XCEngine
cmake --build build --config Debug --target XCEditor
cmake --build build --config Debug --target xcengine_managed_assemblies
cmake --build build --config Debug --target xcengine_project_managed_assemblies
```
说明:
- `XCEngine` 是引擎静态库。
- `XCEditor` 是编辑器 target输出文件名仍为 `editor/bin/<Config>/XCEngine.exe`
- `xcengine_managed_assemblies` 生成 `managed/` 下的示例托管程序集。
- `xcengine_project_managed_assemblies` 会扫描 `project/Assets/**/*.cs`,并把结果输出到 `project/Library/ScriptAssemblies/`
### 3. 启动编辑器
```bash
.\editor\bin\Debug\XCEngine.exe
```
默认情况下,编辑器会自动把仓库内的 `project/` 识别为工程根目录。也可以显式指定其他工程:
```bash
.\editor\bin\Debug\XCEngine.exe --project D:\Path\To\MyProject
```
如果 Inspector 里看不到 C# 脚本类,先确认 `project/Library/ScriptAssemblies/` 中已经生成下面这 3 个程序集。当前工作树如果暂时缺少 `XCEngine.ScriptCore.dll`,通常说明项目脚本程序集还没有按最新状态完成重建:
- `XCEngine.ScriptCore.dll`
- `GameScripts.dll`
- `mscorlib.dll`
### 4. 当前推荐验证入口
```bash
ctest --test-dir build -N -C Debug
ctest --test-dir build -C Debug --output-on-failure
```
按模块常用的构建 / 验证 target
```bash
cmake --build build --config Debug --target rhi_all_tests
cmake --build build --config Debug --target rendering_all_tests
cmake --build build --config Debug --target rendering_phase_regression
cmake --build build --config Debug --target editor_tests
cmake --build build --config Debug --target scripting_tests
```
## 当前仓库状态
### Engine
- `RHI` 已经不是单后端实验代码,而是 `D3D12 / OpenGL / Vulkan` 三后端并行维护。
- `Rendering` 当前正式主线是 `SceneRenderer -> CameraRenderer -> RenderPipeline`,而不是 sample 私有渲染分支。
- `Resources``Core/Asset` 已形成项目资源导入、artifact 缓存和运行时加载的统一链路。
### Editor
- 当前 editor 是 `D3D12` 宿主应用,但 Scene/Game viewport 渲染本身走引擎 `Rendering + RHI`
- `Viewport` 子系统当前已经拆成更清晰的链路:`SceneViewportChrome -> SceneViewportInteractionFrame -> SceneViewportNavigation -> SceneViewportTransformGizmoCoordinator -> ViewportHostService`
- `tests/Editor/` 已覆盖 `SceneViewportChrome``SceneViewportInteractionFrame``SceneViewportNavigation``SceneViewportTransformGizmoCoordinator` 等新 helper。
### Project & Scripting
- 示例工程位于 `project/`,工程文件是 `Project.xcproject`,启动场景为 `Assets/Scenes/Main.xc`
- `project/Library/` 虽然是生成目录,但在当前 workflow 里承担 `SourceAssetDB``ArtifactDB``Artifacts``ScriptAssemblies` 等关键角色。
- `managed/` 会生成引擎脚本 API 与示例脚本程序集,项目资产下的 `.cs` 文件也会单独编译为项目脚本程序集。
### Tests
- `tests/` 已覆盖 `Core``Memory``Threading``Scene``Resources``RHI``Rendering``Editor``Scripting` 等主线模块。
- `tests/Rendering/` 当前维护一组集成场景测试。
- `tests/RHI/` 同时维护抽象层测试与后端专用测试。
## 完整目录结构
以下目录树按当前工作树整理,保留了当前 workflow 已经真实使用的生成目录与关键子树;省略 `.git/``build/_deps/` 与部分重复资源文件。像 `project/.xceditor/thumbs/``project/Library/Artifacts/` 这类会随本地导入状态变化的内容,用结构模式表示。
```text
XCEngine/
|- .gitattributes
|- .gitignore
|- AGENT.md
|- CMakeLists.txt
|- README.md
|- build/ # 本地 CMake 构建输出
|- docs/
| |- api/
| | |- XCEngine/
| | |- _guides/
| | |- _meta/
| | |- _tools/
| | `- main.md
| |- issues/
| | `- Editor模块_Console面板错误绑定fallback sink导致运行时日志不显示4.3.md
| |- plan/
| | |- end/
| | | |- RHI模块设计与实现/
| | | | |- RHIFence.md
| | | | `- RHI模块总览.md
| | | `- 编辑器与运行时分层架构设计.md
| | |- 开题报告和任务书/
| | |- 旧版题目/
| | |- API文档实时同步任务池_2026-04-03.md
| | |- C#脚本模块下一阶段计划.md
| | |- Editor架构说明.md
| | |- Library启动预热与运行时异步加载混合重构计划_2026-04-04.md
| | |- Library启动预热与运行时异步加载混合重构计划_进度更新_2026-04-04.md
| | |- Renderer下一阶段_Unity风格Shader体系正式化计划_2026-04-06.md
| | |- Unity SRP API参考文档.md
| | |- XCUI_Phase_Status_2026-04-05.md
| | |- XCUI完整架构设计与执行计划.md
| | `- Unity绝区零开发文档还原版.md
| |- used/ # 历史材料、归档计划与截图
| | |- API文档实时同步任务池_2026-04-03_第一轮归档.md
| | |- API文档实时同步任务池_2026-04-03_第二轮归档.md
| | |- C#脚本模块的设计与实现_阶段一归档_2026-04-03.md
| | |- Library资产导入与缓存系统收口计划_完成归档_2026-04-03.md
| | |- Renderer结构收口与代码正式化计划_完成归档_2026-04-05.md
| | |- SceneViewport_Overlay_Gizmo_Rework_Plan_完成归档_2026-04-04.md
| | |- Shader与Material系统下一阶段计划_完成归档_2026-04-04.md
| | |- Unity式SceneView_Gizmo系统完整审查与正式化重构方案_完成归档_2026-04-06.md
| | |- Unity式Tick系统与PlayMode运行时方案-阶段进展.md
| | `- Unity式Tick系统与PlayMode运行时方案.md
| |- api-skill.md
| |- blueprint-skill.md
| `- blueprint.md
|- editor/
| |- CMakeLists.txt
| |- README.md
| |- bin/ # 编辑器输出目录,产物名为 XCEngine.exe
| |- resources/
| | `- Icons/
| `- src/
| |- Actions/
| |- Commands/
| |- ComponentEditors/
| |- Core/
| |- Layers/
| |- Layout/
| |- Managers/
| |- panels/
| | |- ConsolePanel.cpp
| | |- ConsolePanel.h
| | |- GameViewPanel.cpp
| | |- GameViewPanel.h
| | |- HierarchyPanel.cpp
| | |- HierarchyPanel.h
| | |- InspectorPanel.cpp
| | |- InspectorPanel.h
| | |- MenuBar.cpp
| | |- MenuBar.h
| | |- Panel.cpp
| | |- Panel.h
| | |- PanelCollection.h
| | |- ProjectPanel.cpp
| | |- ProjectPanel.h
| | |- SceneViewPanel.cpp
| | |- SceneViewPanel.h
| | `- ViewportPanelContent.h
| |- Platform/
| |- Scripting/
| |- UI/
| |- Utils/
| |- Viewport/
| | |- Passes/
| | | |- SceneViewportEditorOverlayPass.cpp
| | | |- SceneViewportEditorOverlayPass.h
| | | |- SceneViewportGridPass.cpp
| | | |- SceneViewportGridPass.h
| | | |- SceneViewportSelectionOutlinePass.cpp
| | | `- SceneViewportSelectionOutlinePass.h
| | |- IViewportHostService.h
| | |- SceneViewportCameraController.h
| | |- SceneViewportChrome.cpp
| | |- SceneViewportChrome.h
| | |- SceneViewportEditorModes.h
| | |- SceneViewportEditorOverlayData.h
| | |- SceneViewportHudOverlay.cpp
| | |- SceneViewportHudOverlay.h
| | |- SceneViewportInteractionActions.cpp
| | |- SceneViewportInteractionActions.h
| | |- SceneViewportInteractionFrame.h
| | |- SceneViewportInteractionResolver.cpp
| | |- SceneViewportInteractionResolver.h
| | |- SceneViewportMath.h
| | |- SceneViewportMoveGizmo.cpp
| | |- SceneViewportMoveGizmo.h
| | |- SceneViewportNavigation.h
| | |- SceneViewportOrientationGizmo.cpp
| | |- SceneViewportOrientationGizmo.h
| | |- SceneViewportOverlayBuilder.cpp
| | |- SceneViewportOverlayBuilder.h
| | |- SceneViewportOverlayFrameCache.cpp
| | |- SceneViewportOverlayFrameCache.h
| | |- SceneViewportOverlayHandleBuilder.h
| | |- SceneViewportOverlayHitTester.h
| | |- SceneViewportOverlayProviders.cpp
| | |- SceneViewportOverlayProviders.h
| | |- SceneViewportOverlaySpriteResources.cpp
| | |- SceneViewportOverlaySpriteResources.h
| | |- SceneViewportPassSpecs.h
| | |- SceneViewportPicker.cpp
| | |- SceneViewportPicker.h
| | |- SceneViewportRenderPlan.h
| | |- SceneViewportResourcePaths.h
| | |- SceneViewportRotateGizmo.cpp
| | |- SceneViewportRotateGizmo.h
| | |- SceneViewportScaleGizmo.cpp
| | |- SceneViewportScaleGizmo.h
| | |- SceneViewportShaderPaths.h
| | |- SceneViewportTransformGizmoCoordinator.cpp
| | |- SceneViewportTransformGizmoCoordinator.h
| | |- SceneViewportTransformGizmoFrameBuilder.h
| | |- ViewportHostRenderFlowUtils.h
| | |- ViewportHostRenderTargets.h
| | |- ViewportHostService.h
| | |- ViewportHostSurfaceUtils.h
| | `- ViewportObjectIdPicker.h
| |- Application.cpp
| |- Application.h
| |- EditorApp.rc
| |- EditorResources.h
| |- Theme.cpp
| |- Theme.h
| `- main.cpp
|- engine/
| |- CMakeLists.txt
| |- include/
| | `- XCEngine/
| | |- Audio/
| | |- Components/
| | |- Core/
| | | |- Asset/
| | | |- Containers/
| | | |- IO/
| | | `- Math/
| | |- Debug/
| | |- Input/
| | |- Memory/
| | |- Platform/
| | | `- Windows/
| | |- Rendering/
| | | |- Passes/
| | | |- Pipelines/
| | | |- CameraRenderer.h
| | | |- CameraRenderRequest.h
| | | |- ObjectIdPass.h
| | | |- RenderPipeline.h
| | | |- RenderSurface.h
| | | `- SceneRenderer.h
| | |- Resources/
| | | |- AudioClip/
| | | |- Material/
| | | |- Mesh/
| | | |- Shader/
| | | `- Texture/
| | |- RHI/
| | | |- D3D12/
| | | |- OpenGL/
| | | `- Vulkan/
| | |- Scene/
| | |- Scripting/
| | | `- Mono/
| | `- Threading/
| |- src/ # 与 include/XCEngine 中的主模块一一对应
| |- third_party/
| | |- assimp/
| | |- GLAD/
| | |- kissfft/
| | |- renderdoc/
| | `- stb/
| `- tools/
| `- renderdoc_parser/
|- managed/
| |- CMakeLists.txt
| |- GameScripts/
| `- XCEngine.ScriptCore/
|- mvs/
| |- 3DGS-Unity/
| |- D3D12/
| |- Music fluctuations/
| |- OpenGL/
| |- RenderDoc/
| |- Res/
| |- ui/ # 早期 ImGui + D3D12 UI 原型
| `- VolumeRenderer/
|- new_editor/
| |- app/
| | |- Host/
| | |- Application.cpp
| | |- Application.h
| | `- main.cpp
| |- bin/ # XCUIEditor.exe 输出目录
| |- include/
| | `- XCEditor/
| | |- Core/
| | `- Widgets/
| |- src/
| | |- Core/
| | |- Platform/
| | `- Widgets/
| |- ui/
| `- CMakeLists.txt
|- project/
| |- .xceditor/
| | |- imgui_layout.ini
| | `- thumbs/
| |- Assets/
| | |- Materials/
| | |- Materials.meta
| | |- Models/
| | |- Models.meta
| | |- New Folder.meta
| | |- New Folder 1.meta
| | |- New Material.mat
| | |- New Material.mat.meta
| | |- Scenes/
| | | |- Backpack.xc
| | | |- Backpack.xc.meta
| | | |- Main.xc
| | | |- Main.xc.meta
| | | |- NewFolder.meta
| | | `- NewFolder/
| | |- Scenes.meta
| | |- Scripts/
| | | |- ProjectScriptProbe.cs
| | | |- ProjectScriptProbe.cs.meta
| | | |- Textures/
| | | |- Textures.meta
| | | |- TickLogProbe.cs
| | | `- TickLogProbe.cs.meta
| | `- Scripts.meta
| |- Library/
| | |- ArtifactDB/
| | | `- artifacts.db
| | |- Artifacts/
| | | `- <bucket>/<artifact-id>/
| | |- ScriptAssemblies/
| | | |- GameScripts.dll
| | | `- mscorlib.dll
| | `- SourceAssetDB/
| | `- assets.db
| |- Assets.meta
| `- Project.xcproject
|- scripts/
| `- Run-RendererPhaseRegression.ps1
|- tests/
| |- CMakeLists.txt
| |- TEST_SPEC.md
| |- Components/
| |- Core/
| | |- Asset/
| | |- Containers/
| | |- IO/
| | `- Math/
| |- Debug/
| |- Editor/
| | |- CMakeLists.txt
| | |- test_action_routing.cpp
| | |- test_application_asset_cache_stub.cpp
| | |- test_builtin_icon_layout_utils.cpp
| | |- test_editor_console_sink.cpp
| | |- test_editor_script_assembly_builder.cpp
| | |- test_editor_script_assembly_builder_utils.cpp
| | |- test_play_session_controller.cpp
| | |- test_play_session_controller_scripting.cpp
| | |- test_scene_viewport_camera_controller.cpp
| | |- test_scene_viewport_chrome.cpp
| | |- test_scene_viewport_interaction_actions.cpp
| | |- test_scene_viewport_interaction_frame.cpp
| | |- test_scene_viewport_interaction_resolver.cpp
| | |- test_scene_viewport_move_gizmo.cpp
| | |- test_scene_viewport_navigation.cpp
| | |- test_scene_viewport_overlay_providers.cpp
| | |- test_scene_viewport_overlay_renderer.cpp
| | |- test_scene_viewport_picker.cpp
| | |- test_scene_viewport_rotate_gizmo.cpp
| | |- test_scene_viewport_scale_gizmo.cpp
| | |- test_scene_viewport_shader_paths.cpp
| | |- test_scene_viewport_transform_gizmo_coordinator.cpp
| | |- test_script_component_editor_utils.cpp
| | |- test_viewport_host_surface_utils.cpp
| | |- test_viewport_object_id_picker.cpp
| | |- test_viewport_render_flow_utils.cpp
| | `- test_viewport_render_targets.cpp
| |- Fixtures/
| | `- Resources/
| |- Input/
| |- Memory/
| |- NewEditor/ # 当前为空的预留测试根目录
| |- Rendering/
| | |- integration/
| | | |- backpack_lit_scene/
| | | |- backpack_scene/
| | | |- camera_stack_scene/
| | | |- cull_material_scene/
| | | |- depth_sort_scene/
| | | |- material_state_scene/
| | | |- offscreen_scene/
| | | |- textured_quad_scene/
| | | `- transparent_material_scene/
| | `- unit/
| |- Resources/
| | |- AudioClip/
| | |- Material/
| | |- Mesh/
| | |- Shader/
| | `- Texture/
| |- RHI/
| | |- D3D12/
| | | |- integration/
| | | `- unit/
| | |- integration/
| | | |- backpack/
| | | |- fixtures/
| | | |- minimal/
| | | |- quad/
| | | |- sphere/
| | | `- triangle/
| | |- OpenGL/
| | | |- integration/
| | | `- unit/
| | |- unit/
| | `- Vulkan/
| | |- integration/
| | `- unit/
| |- Scene/
| |- Scripting/
| |- Threading/
| `- UI/
| |- Core/
| |- Editor/
| |- Runtime/
| `- TEST_SPEC.md
|- 参考/
| |- Fermion/
| |- TransformGizmo/
| |- unity editor/
| |- unity-editor-icons/
| |- unity-icons/
| `- UnityRuntimeSceneGizmo-master/
`- .vscode/
```
## 关键文档入口
- 编辑器模块说明:[editor/README.md](editor/README.md)
- 面向引擎实现者和 coding agent 的协作基线:[AGENT.md](AGENT.md)
- API 文档入口:[docs/api/main.md](docs/api/main.md)
- 架构蓝图:[docs/blueprint.md](docs/blueprint.md)
- RHI 基线设计:[docs/plan/end/RHI模块设计与实现/RHI模块总览.md](docs/plan/end/RHI模块设计与实现/RHI模块总览.md)
- Library 启动与运行时加载主线:[docs/plan/Library启动预热与运行时异步加载混合重构计划_2026-04-04.md](docs/plan/Library启动预热与运行时异步加载混合重构计划_2026-04-04.md)
- Editor 当前架构:[docs/plan/Editor架构说明.md](docs/plan/Editor架构说明.md)
- 当前 Shader / Material 主线:[docs/plan/Renderer下一阶段_Unity风格Shader体系正式化计划_2026-04-06.md](docs/plan/Renderer下一阶段_Unity风格Shader体系正式化计划_2026-04-06.md)
- XCUI 总体蓝图:[docs/plan/XCUI完整架构设计与执行计划.md](docs/plan/XCUI完整架构设计与执行计划.md)
- XCUI 阶段状态:[docs/plan/XCUI_Phase_Status_2026-04-05.md](docs/plan/XCUI_Phase_Status_2026-04-05.md)
- 测试规范:[tests/TEST_SPEC.md](tests/TEST_SPEC.md)
## 许可说明
当前仓库根目录未看到独立的顶层许可证文件。涉及第三方库时,请分别遵循其所在目录中的许可证或随附说明。