99 lines
5.8 KiB
Markdown
99 lines
5.8 KiB
Markdown
# MetaCore
|
||
|
||
MetaCore 是一个使用 `C++20` 开发的自主 3D 引擎与编辑器原型。项目以 **EnTT ECS** 为底层架构,使用 **Google Filament** 作为现代渲染核心,使用 **Dear ImGui** 构建编辑器界面,并规划使用 **RmlUi** 承载运行时 UI。目标是在轻量、可控、可国产化适配的基础上,形成类似 Unity / Unreal Engine 的可视化 3D 应用开发工作流。
|
||
|
||
当前阶段的核心策略是:**编辑期优先 JSON 与可读元数据,快速迭代、便于调试和版本管理;发布期再通过 Cook / Package 转换为二进制运行时资产,保证交付性能和封装性。**
|
||
|
||
## 当前定位
|
||
|
||
- **底层架构**:基于 `EnTT` 的 ECS,外层提供 `GameObject + Component` 的编辑器友好语义。
|
||
- **编辑器界面**:使用 `Dear ImGui Docking` 构建 Hierarchy、Scene、Inspector、Project、Console 等编辑器面板。
|
||
- **渲染核心**:以 `Google Filament` 为主渲染后端,面向 PBR、glTF/GLB、材质、灯光和现代多图形 API 能力。
|
||
- **运行时 UI**:规划使用 `RmlUi` 作为正式项目 UI 系统,定位类似 Unity UGUI;ImGui 只作为编辑器和工具 UI。
|
||
- **模型导入**:当前优先围绕 `glTF/GLB` 与 `gltfio` 建立模型、材质、贴图、节点层级导入闭环。
|
||
- **资产路线**:编辑器阶段使用 JSON / `.mcmeta` / 可读项目文件;打包阶段生成 cooked 二进制资产与运行时配置。
|
||
- **交付方向**:编辑器面向 Windows、Linux、统信 UOS、麒麟等桌面系统;运行时面向 C/S 桌面交付,并为 B/S / WebGPU 嵌入预留边界。
|
||
- **行业对标**:工作流对标 Unity,渲染和工程化目标参考 Unreal Engine,但第一阶段更聚焦工业仿真、数字孪生和实时可视化交付。
|
||
|
||
## 技术栈
|
||
|
||
- **核心语言**:`C++20`
|
||
- **构建系统**:`CMake`
|
||
- **包管理**:`vcpkg`
|
||
- **ECS**:`EnTT`
|
||
- **渲染核心**:`Google Filament`
|
||
- **模型导入**:`gltfio` / `glTF` / `GLB`
|
||
- **编辑器 UI**:`Dear ImGui (Docking)`
|
||
- **运行时 UI**:`RmlUi`(规划主线)
|
||
- **3D 操控**:`ImGuizmo`
|
||
- **数学库**:`glm`
|
||
- **数据通信**:`Winsock2`、文件回放、运行时数据绑定
|
||
|
||
## 渲染目标
|
||
|
||
MetaCore 当前不从零自研完整 RHI,而是借助 Filament 的成熟后端能力逐步覆盖多平台渲染:
|
||
|
||
- `Vulkan`:首选高性能现代图形 API。
|
||
- `OpenGL`:用于兼容、过渡和更广泛设备适配。
|
||
- `DirectX 12`:面向 Windows 高性能运行时。
|
||
- `WebGPU`:面向未来 B/S 架构、浏览器嵌入和 Web 交付。
|
||
|
||
## 目录结构
|
||
|
||
- [Source/MetaCoreFoundation](D:/MetaCore/Source/MetaCoreFoundation):GUID、项目文件、包、反射、日志等基础服务。
|
||
- [Source/MetaCorePlatform](D:/MetaCore/Source/MetaCorePlatform):平台窗口、输入与宿主环境抽象。
|
||
- [Source/MetaCoreScene](D:/MetaCore/Source/MetaCoreScene):EnTT ECS、GameObject、Component、场景树、快照和序列化。
|
||
- [Source/MetaCoreRender](D:/MetaCore/Source/MetaCoreRender):Filament 渲染桥、编辑器视口渲染、ImGui/渲染纹理衔接。
|
||
- [Source/MetaCoreRuntimeData](D:/MetaCore/Source/MetaCoreRuntimeData):TCP、文件回放、数据点、绑定、诊断与实时数据驱动。
|
||
- [Source/MetaCoreEditor](D:/MetaCore/Source/MetaCoreEditor):编辑器上下文、模块系统、面板、资产导入、Inspector、Prefab、Undo/Redo。
|
||
- [Apps/MetaCoreEditor](D:/MetaCore/Apps/MetaCoreEditor):编辑器独立程序入口。
|
||
- [Apps/MetaCorePlayer](D:/MetaCore/Apps/MetaCorePlayer):运行时 Player 程序入口。
|
||
- [docs/designs](D:/MetaCore/docs/designs):产品定位、阶段路线、引擎能力、资产、渲染、UI 和打包设计文档。
|
||
- [tests](D:/MetaCore/tests):Smoke Tests 与渲染 Demo。
|
||
|
||
## 构建与验证
|
||
|
||
### 前提条件
|
||
|
||
1. 已安装 Visual Studio 2022 / MSVC 工具链。
|
||
2. 已安装 `vcpkg` 并正确设置 `VCPKG_ROOT`。
|
||
3. `third_party/filament_installed` 下存在已编译好的 Google Filament SDK,或根据 [cmake/MetaCoreFilament.cmake](D:/MetaCore/cmake/MetaCoreFilament.cmake) 配置对应路径。
|
||
|
||
### 构建步骤
|
||
|
||
```powershell
|
||
cmake -B build -G "Visual Studio 17 2022" -A x64
|
||
cmake --build build --config RelWithDebInfo --target MetaCoreEditorApp
|
||
cmake --build build --config RelWithDebInfo --target MetaCoreSmokeTests
|
||
.\build\RelWithDebInfo\MetaCoreSmokeTests.exe
|
||
```
|
||
|
||
## 当前能力
|
||
|
||
- 原生窗口、输入和主循环。
|
||
- 基于 EnTT 的场景对象、组件、层级、快照和序列化。
|
||
- Dear ImGui Docking 编辑器框架。
|
||
- Filament 离屏视口桥接与 PBR 场景渲染。
|
||
- glTF/GLB 模型导入、节点层级同步和模型实例化。
|
||
- ImGuizmo 移动、旋转、缩放工具链。
|
||
- 资产 GUID、`.mcmeta`、AssetDatabase、导入与重导入基础链路。
|
||
- 编辑期 JSON 场景/资产元数据方向,运行期 Cook / Package 二进制方向。
|
||
- TCP / 文件回放 runtime data 驱动,支持绑定到场景组件。
|
||
- Smoke Tests 覆盖场景编辑、选择、Undo/Redo、模块组合、资产导入、运行时数据、UI 文档序列化等基础行为。
|
||
|
||
## 开发原则
|
||
|
||
- **敏捷开发,快速迭代**:先打通可运行闭环,再逐步工程化和性能化。
|
||
- **编辑期可读优先**:JSON、元数据、项目文件必须便于 diff、调试、人工修复和团队协作。
|
||
- **运行期性能优先**:发布包通过 Cook 生成二进制资产与运行时配置。
|
||
- **模块边界清晰**:ECS、渲染桥、编辑器 UI、运行时 UI、资产导入、数据源都应保持可替换。
|
||
- **国产化适配优先**:Windows 先行,同时面向 Linux、统信、麒麟等环境保留平台抽象。
|
||
|
||
## 参考
|
||
|
||
- [Google Filament](https://github.com/google/filament)
|
||
- [EnTT](https://github.com/skypjack/entt)
|
||
- [Dear ImGui](https://github.com/ocornut/imgui)
|
||
- [ImGuizmo](https://github.com/CedricGuillemet/ImGuizmo)
|
||
- [RmlUi](https://github.com/mikke89/RmlUi)
|