100 lines
6.7 KiB
Markdown
100 lines
6.7 KiB
Markdown
# 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`
|
||
- 编辑器 UI:Dear ImGui docking + ImGuizmo
|
||
- 运行时 UI:RmlUi
|
||
- 渲染: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)
|