6.7 KiB
6.7 KiB
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 passMetaCore/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 - 场景数据、编辑器布局、运行时缓存严格分离,禁止把运行时状态写回场景对象
实施顺序
- 建立仓库、CMake、第三方依赖、基础目录和空应用启动骨架
- 完成
foundation与platform/panda,确保窗口、输入、相机、基础场景显示正常 - 完成
engine/scene与engine/assets,跑通新建项目、新建场景、保存重开 - 接入 ImGui docking,搭建编辑器外壳与固定面板布局
- 接入 ImGuizmo,完成选择、变换、命令栈、撤销重做
- 完成
MetaRender与 simplepbr shader C++ 调用链 - 完成 Inspector、资源面板、Hierarchy 与视口联动
- 接入 RmlUi 运行时显示与编辑器内预览
- 做稳定性补齐、布局恢复、错误处理、测试与文档
测试与验收
- 单元测试:项目/场景 schema、组件增删改、命令栈、资产索引、shader 参数绑定
- 集成测试:新建项目、保存重开、Hierarchy 与 Inspector 联动、Gizmo 变换持久化、布局恢复、RmlUi 文档加载
- 验收标准:
- 能用
MetaEditor完成现有 EG 的核心编辑流程 - 能稳定创建全新 MetaCore 项目并反复保存/重开
MetaPlayer能正确运行场景并显示 RmlUi- 代码中不存在新的 God Object 和跨层硬耦合入口
- 能用
已锁定默认
- 全项目纯 C++
- 不导入 EG 项目,只做全新重构
ImGui只做编辑器,RmlUi只做运行时 UIImGuizmo取代 EG 旧 Gizmo- 功能参考 Unity,但不高仿 Unity 命名
- 首版只预留 Prefab 与脚本接口,不交付完整功能
- Panda3D 先用
1.10.16起步,后续再升1.11
参考基线
- Panda3D 下载页:panda3d.org/download
- Panda3D 1.11 C++ 手册:docs.panda3d.org/1.11/cpp
- simplepbr 仓库:github.com/Moguri/panda3d-simplepbr
- RmlUi 文档:mikke89.github.io/RmlUiDoc