MetaCore/PLAN.md

100 lines
6.7 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.

# MetaCore 最终开工计划
## 摘要
-`D:\MetaCore` 新建全新纯 C++ 工程,完全不继承 EG 项目文件格式,也不做 EG 自动导入。
- 对外目标:编辑器核心功能、布局逻辑、操作路径对齐现有 EG对内目标彻底模块化、职责清晰、修正旧项目中的耦合和不完整逻辑。
- UI 职责固定为:`ImGui + ImGuizmo` 仅用于编辑器与开发工具,`RmlUi` 仅用于运行时/玩家界面。
- 渲染固定为Panda3D 底层后端,`simplepbr` 只复用 shader 源码与参数语义MetaCore 用 C++ 重写 shader 调用、材质系统和 pass。
## 技术基线
- 语言与构建:`C++20`、`CMakePresets`、`VS2022`、`vcpkg`
- 底层后端:`Panda3D 1.10.16` 作为 v1 基线,后续升级 `1.11`
- 编辑器 UIDear ImGui docking + ImGuizmo
- 运行时 UIRmlUi
- 渲染MetaCore 自研 `MetaRender`shader 来源参考 `simplepbr`
- 数据格式JSON + `.meta` 资源描述
- 首版不做脚本系统、VR、Prefab 工作流、完整打包链路、URP 级渲染
## 工程结构
- `MetaCore/`
- `MetaCore/foundation`日志、配置、GUID、文件系统、事件、任务、序列化辅助
- `MetaCore/platform/panda`窗口、输入、模型纹理加载、Panda 节点适配、shader 绑定、渲染上下文
- `MetaCore/engine/assets`:资产索引、`.meta`、依赖、导入缓存
- `MetaCore/engine/scene``Scene`、层级、实体、组件、场景保存加载
- `MetaCore/engine/render``ShaderProgram`、`ShaderVariantKey`、`MaterialDescriptor`、`MaterialInstance`、各类 render pass
- `MetaCore/engine/runtime_ui`RmlUi 文档、输入、字体、纹理、预览桥接
- `MetaCore/engine/editor_core`选择、Gizmo 状态、命令栈、撤销重做、Inspector 数据模型、脏标记
- `MetaEditor/`ImGui 编辑器外壳、菜单、Docking、各面板
- `MetaPlayer/`:运行时播放器
- `third_party/simplepbr-shaders/`:镜像 `simplepbr.vert/.frag`、`shadow.vert/.frag`、`skybox.vert/.frag`、`post.vert`、`tonemap.frag` 及许可说明
## 核心职责边界
- ImGui菜单栏、Hierarchy、Inspector、Project/Assets、Console、Scene View 工具栏、调试工具、材质编辑器、RmlUi 资源编辑器/预览器
- ImGuizmo视口中的平移/旋转/缩放操控;不负责命令记录和业务状态
- RmlUi运行时主菜单、HUD、背包、任务、设置、弹窗、加载界面等玩家 UI
- MetaCore 服务层:负责“改什么、怎么存、怎么撤销重做”,不让 UI 直接操作底层数据
- Panda3D仅作为内部后端不出现在公共 API、项目 schema、用户术语里
## 域模型与接口
- 核心对象:`Project`、`Scene`、`EntityId`、`SceneObjectHandle`、`AssetId`
- 首版组件:`TransformComponent`、`MeshRendererComponent`、`LightComponent`、`CameraComponent`、`UIDocumentComponent`、`CollisionComponent`、`EditorMetadataComponent`
- 核心服务:`ProjectService`、`SceneService`、`AssetService`、`EditorLayoutService`、`SelectionService`、`TransformGizmoService`、`CommandService`、`ViewportService`、`InspectorService`
- 渲染接口:`IMetaRenderBackend`、`ShaderProgram`、`MaterialInstance`、`FrameUniforms`、`LightUniforms`、`TonemapSettings`
- 首版预留不交付:`PrefabAsset`/模板化接口、未来脚本挂载接口
## 编辑器交付范围
- 布局与职责对齐现有 EG顶部菜单、左侧层级树、资源面板、中心视口、右侧属性、底部控制台、工具栏、默认 Docking
- 交互对齐现有 EG创建/删除/重命名、选择高亮、F 聚焦、W/E/R、局部/世界切换、吸附、撤销重做、项目与场景保存加载
- 实现策略:外部体验尽量一致,内部完全重构;不迁移 EG 旧 Gizmo不复用 EG 混杂管理器结构
- 允许修正旧项目中的明显错误、状态不同步、生命周期缺失和脏逻辑
## 渲染实现
- 使用 simplepbr shader 源码,但不使用其 Python `Pipeline`
- C++ 层负责 shader define 组合、材质参数、贴图槽、灯光数组、阴影输入、天空盒、后处理、色调映射
- v1 pass 固定为:`ShadowPass`、`MainPbrPass`、`SkyboxPass`、`TonemapPass`
- v1 能力固定为:基础 PBR、法线贴图、发光、环境光、点光/方向光/聚光、简单阴影、天空盒、色调映射
- IBL 与 URP 风格渲染只预留接口,不在 v1 做完整实现
## 数据与项目格式
- 项目文件:`MetaCore.project.json`
- 场景文件:`Scenes/*.mcscene.json`
- 资源目录:`Assets/Models`、`Assets/Textures`、`Assets/Audio`、`Assets/UI`、`Assets/Materials`
- 缓存目录:`Library/AssetDB.json`、缩略图缓存、导入缓存、布局缓存
- 每个资源配套 `.meta`
- 场景数据、编辑器布局、运行时缓存严格分离,禁止把运行时状态写回场景对象
## 实施顺序
1. 建立仓库、CMake、第三方依赖、基础目录和空应用启动骨架
2. 完成 `foundation``platform/panda`,确保窗口、输入、相机、基础场景显示正常
3. 完成 `engine/scene``engine/assets`,跑通新建项目、新建场景、保存重开
4. 接入 ImGui docking搭建编辑器外壳与固定面板布局
5. 接入 ImGuizmo完成选择、变换、命令栈、撤销重做
6. 完成 `MetaRender` 与 simplepbr shader C++ 调用链
7. 完成 Inspector、资源面板、Hierarchy 与视口联动
8. 接入 RmlUi 运行时显示与编辑器内预览
9. 做稳定性补齐、布局恢复、错误处理、测试与文档
## 测试与验收
- 单元测试:项目/场景 schema、组件增删改、命令栈、资产索引、shader 参数绑定
- 集成测试新建项目、保存重开、Hierarchy 与 Inspector 联动、Gizmo 变换持久化、布局恢复、RmlUi 文档加载
- 验收标准:
- 能用 `MetaEditor` 完成现有 EG 的核心编辑流程
- 能稳定创建全新 MetaCore 项目并反复保存/重开
- `MetaPlayer` 能正确运行场景并显示 RmlUi
- 代码中不存在新的 God Object 和跨层硬耦合入口
## 已锁定默认
- 全项目纯 C++
- 不导入 EG 项目,只做全新重构
- `ImGui` 只做编辑器,`RmlUi` 只做运行时 UI
- `ImGuizmo` 取代 EG 旧 Gizmo
- 功能参考 Unity但不高仿 Unity 命名
- 首版只预留 Prefab 与脚本接口,不交付完整功能
- Panda3D 先用 `1.10.16` 起步,后续再升 `1.11`
## 参考基线
- Panda3D 下载页:[panda3d.org/download](https://www.panda3d.org/download/)
- Panda3D 1.11 C++ 手册:[docs.panda3d.org/1.11/cpp](https://docs.panda3d.org/1.11/cpp/index)
- simplepbr 仓库:[github.com/Moguri/panda3d-simplepbr](https://github.com/Moguri/panda3d-simplepbr)
- RmlUi 文档:[mikke89.github.io/RmlUiDoc](https://mikke89.github.io/RmlUiDoc/pages/cpp_manual/building_with_cmake.html)