SedulousWorks/SedulousEngine
GitHub: SedulousWorks/SedulousEngine
Sedulous是一个用Beef语言编写的模块化游戏引擎,旨在简化游戏和交互式应用的开发,提供跨平台渲染和丰富功能支持。
Stars: 14 | Forks: 1
# Sedulous 引擎
[](https://discord.gg/WSvxW8mWH5)
[](LICENSE)
[](https://sedulousworks.github.io/Docs/)
一个用 [Beeflang](https://www.beeflang.org/) 编写的模块化游戏引擎,
具备跨平台 RHI(Vulkan + DX12)、前向 PBR 渲染器、实体-组件
场景系统、资源管线以及一个受 Android 启发的保留模式 UI 框架。

## 架构
Sedulous 采用分层构建。每一层仅依赖其下方的层。
```
Applications -- Game, Editor, Sandboxes
Engine Layer -- Engine.Core (Scene, Entities, Components, Transforms, Serialization)
Subsystems: Scene, Input, Physics, Animation, Audio, Navigation, Render, UI
Renderer Layer -- RenderContext, Pipeline, PostProcessing, Shadows, Particles
Foundation -- RHI, Shell, VG, Fonts, UI, Resources, Jobs, Shaders, Math
```
**基础** 库是自包含的,可以在工具、沙盒和测试中独立使用,无需引擎。
**渲染器** 与场景无关 -- 它接收扁平的渲染数据并将其绘制出来。
场景集成存在于引擎层中。
**引擎** 提供了 Engine.Core(场景模型、变换、序列化)以及
由一个处理生命周期和更新排序的 Context 管理的子系统(物理、音频、渲染等)。
需要资源的子系统会通过显式的构造函数参数接收它们。
**应用程序** 拥有呈现部分(交换链、帧同步、位块传输)并决定
渲染什么以及渲染到哪里。
## 核心功能
### 渲染
- 基于 Cook-Torrance BRDF 的前向 PBR(支持方向光、点光源、聚光灯)
- 深度预渲染通道,支持带掩码的几何体
- 微型 G 缓冲区(法线 + 运动矢量),用于未来的后期特效
- 计算蒙皮(72->48 字节顶点变换)
- 层级化阴影图集(级联方向光、点光源立方体贴图、聚光灯)
- GPU 实例化精灵(3 种朝向模式)
- 深度重建的投射贴花
- CPU 粒子系统,支持公告板/尾迹渲染、子发射器、LOD
- 后期处理:SSAO、泛光、TAA、FXAA、ACES 色调映射
- 调试绘制(线框形状、屏幕文本、灯光辅助图标)
- 逐场景管线 -- 多个场景可独立渲染
### RHI(渲染硬件接口)
- 受 WebGPU 启发的较低层级 API
- Vulkan 和 DX12 后端
- 用于调试的验证包装器
- 命令编码器模式(ICommandEncoder -> IRenderPassEncoder -> ICommandBuffer)
- 依赖驱动的渲染图,带有临时纹理池
### 场景系统
- 使用轻量级句柄(索引 + 生成数)的实体-组件系统
- ComponentManager 池化,支持延迟初始化
- 带有脏标志传播的层级变换
- 8 个更新阶段,包括并行的 AsyncUpdate
- 通过 ISerializableComponent 进行场景序列化
### 物理
- Jolt Physics 集成(多线程)
- RigidBodyComponent,提供完整配置(形状、质量、摩擦)
- 碰撞事件(添加、持续、移除)
- 支持实体句柄解码的射线检测
### 动画
- 骨骼动画(动画片段播放、动画图)
- 带绑定器注册表的属性动画
- SkinnedMeshComponent 与动画解耦
### 音频
- SDL3 音频后端,基于图的混音
- 总线层级结构(主总线/音效/音乐/自定义),每个总线可独立控制音量和静音
- DSP 效果链:混响、延迟、均衡器、压缩器、低通/高通滤波器
- 3D 空间化,支持可配置衰减曲线、锥形发射、多普勒效应
- 声音提示,支持音频片段变体、音高/音量随机化
- 音乐流式传输、一次性播放 API、AudioSourceComponent
### 导航
- Recast/Detour 集成
- NavMesh 构建、人群管理、障碍回避
- NavAgent 和 NavObstacle 组件
### UI 框架 (Sedulous.UI)
- 受 Android 启发的保留模式:View/ViewGroup/RootView 层级结构
- FlexLayout、DockLayout、GridLayout、FlowLayout、AbsoluteLayout
- BoxConstraints / SizeSpec 布局系统
- 支持类型/类/状态选择器的样式表,主题注册表(深色、浅色、圆角)
- 输入路由、焦点管理、拖放、快捷键
- 弹出窗口、对话框、上下文菜单、工具提示
- 屏幕空间和世界空间 UI 渲染
- 支持无头模式运行用于测试 -- 无引擎依赖
### UI 工具包 (Sedulous.UI.Toolkit)
- DockManager,标签页位于顶部,每个标签页有关闭按钮,可停靠操作系统窗口
- SplitView、MenuBar、StatusBar、Toolbar、BreadcrumbBar
- PropertyGrid,带类型特定编辑器(浮点数、布尔值、字符串、向量3、枚举、颜色)
- TreeView、ColorPicker、TabView(可关闭)
- DraggableTreeView、IDockableWindowHost
- 布局持久化(ExportLayout/ApplyLayout,使用 PersistenceId)
### 编辑器 (Sedulous.Editor)
- 基于插件的架构([EditorPlugin] 自动发现)
- 项目管理(.sedproj),支持最近项目列表
- 场景编辑器,带层级结构(拖放重排/重新父级化、内联重命名)、3D 视口、检查器
- 独立的编辑器相机(环绕/飞行/平移/缩放),支持 CameraOverride
- 变换辅助工具(平移/旋转/缩放),支持局部/世界朝向
- GPU 实体拾取(PickPass,带异步回读,非网格实体使用代理球体回退)
- 资源浏览器,带注册表树、列表/网格内容视图、面包屑导航
- 注册表管理(挂载/创建/卸载,.sedproj 持久化)
- 资源导入管线(模型 + 纹理导入器,导入预览对话框)
- 上下文菜单(创建资源、删除、复制路径/GUID、在资源管理器中显示)
- 通过 [Property] 属性编译时生成组件检查器
- 逐页撤销/重做命令栈,支持拖动合并
- LogView,带线程安全的日志捕获
- 多窗口停靠,支持跨窗口拖放
- ViewportView,通过外部纹理缓存实现渲染到纹理
## 示例
**EngineSandbox** 是引擎功能的主要测试平台 -- 涵盖 PBR
渲染、阴影、蒙皮网格、粒子、精灵、贴花、调试绘制、
世界空间 UI、物理、音频和导航。

**Showcase** 展示了资源导入管线,通过一个风格化的自然场景演示,
该场景由 glTF 模型构建,并在导入过程中实现了材质去重。

## 系统要求
- [Beeflang 夜间版](https://nightly.beeflang.org/index.html) (BeefBuild 或 Beef IDE)
- [Vulkan SDK](https://vulkan.lunarg.com/) (用于着色器编译)
- 支持 Vulkan 1.3 或 DX12 的 GPU
## 构建
```
cd Code
BeefBuild -workspace=. -project=EngineSandbox # Game sandbox
BeefBuild -workspace=. -project=Sedulous.Editor.App # Editor
BeefBuild -workspace=. -project=UISandbox # UI demo
```
**着色器编译说明:** EngineSandbox 的首次运行可能需要较长时间,因为
所有着色器都会在启动时进行编译。要加速后续运行,可以在
`Code/Engine/Sedulous.Engine.App/src/EngineAppSettings.bf` 中启用着色器缓存:
```
public bool EnableShaderCache = true; // default is false
```
默认情况下着色器缓存是禁用的,因为目前还没有自动更改检测机制 -- 如果你修改了着色器,必须手动删除缓存目录才能让它们重新编译。
## 项目结构
```
Code/
Foundation/ -- Core libraries (RHI, Shell, VG, UI, Physics, Audio, etc.)
Engine/ -- Engine.Core (scene model) + subsystems (Input, Physics, Render, UI, etc.)
Editor/ -- Editor core + application
Samples/ -- EngineSandbox, UISandbox, RHI samples, etc.
Deprecated/ -- Legacy UI stack (replaced by Sedulous.UI)
Dependencies/ -- Third-party bindings (Bulkan, SDL3, Jolt, Recast, etc.)
Documentation/
Architecture.md -- Full architecture reference
Roadmap/ -- RendererRoadmap, EditorRoadmap, EngineRoadmap, UI.md
```
## 文档
- [**手册**](https://sedulousworks.github.io/Docs/) -- 入门指南、教程和 API 参考
- [架构](Documentation/Architecture.md) -- 完整的架构参考
- [编辑器路线图](Documentation/Roadmap/EditorRoadmap.md) -- 编辑器实现计划
- [渲染器路线图](Documentation/Roadmap/RendererRoadmap.md) -- 渲染功能计划
- [引擎路线图](Documentation/Roadmap/EngineRoadmap.md) -- 引擎差距分析
- [UI 计划](Documentation/Roadmap/UI2_PLAN.md) -- UI 框架设计和阶段计划
## 依赖项
基于以下 Beeflang 绑定库构建:
- **Bulkan** -- Vulkan API
- **Win32-Beef** -- DirectX 12 / Win32 API
- **SDL3-Beef** -- 窗口、输入、音频
- **joltc-Beef** -- Jolt Physics
- **recastnavigation-Beef** -- NavMesh / 寻路
- **Dxc-Beef** -- HLSL 着色器编译
- **stb_image-Beef**、**stb_truetype-Beef** -- 图像加载、字体光栅化
- **cgltf-Beef** -- glTF 模型加载
- **ufbx-Beef** -- FBX/OBJ 模型加载
## 灵感来源
Sedulous 的灵感来源于 [ezEngine](https://github.com/ezEngine/ezEngine)、
[LumixEngine](https://github.com/nem0/LumixEngine) (主要是早期版本)
和 [Traktor](https://github.com/apistol78/traktor)。
标签:3D引擎, Beeflang编程语言, DirectX 12, UI框架, Vulkan图形API, 保留模式UI, 前向渲染, 动画系统, 后处理, 图形API, 图形编程, 场景管理, 基于物理的渲染(PBR), 实体组件系统, 实时渲染, 导航系统, 模块化设计, 渲染上下文, 游戏开发, 游戏引擎, 物理引擎, 粒子系统, 编辑器工具, 自动化修复, 计算蒙皮, 资源管理, 资源管道, 跨平台开发, 阴影渲染, 音频系统