SedulousWorks/SedulousEngine

GitHub: SedulousWorks/SedulousEngine

Sedulous是一个用Beef语言编写的模块化游戏引擎,旨在简化游戏和交互式应用的开发,提供跨平台渲染和丰富功能支持。

Stars: 14 | Forks: 1

# Sedulous 引擎 [![Discord](https://img.shields.io/badge/Discord-Join-5865F2?logo=discord&logoColor=white)](https://discord.gg/WSvxW8mWH5) [![许可证:MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![文档](https://img.shields.io/badge/Docs-Read-blue)](https://sedulousworks.github.io/Docs/) 一个用 [Beeflang](https://www.beeflang.org/) 编写的模块化游戏引擎, 具备跨平台 RHI(Vulkan + DX12)、前向 PBR 渲染器、实体-组件 场景系统、资源管线以及一个受 Android 启发的保留模式 UI 框架。 ![Sedulous 编辑器](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/4833e40b11023731.png) ## 架构 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、物理、音频和导航。 ![EngineSandbox](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/e667810001023732.png) **Showcase** 展示了资源导入管线,通过一个风格化的自然场景演示, 该场景由 glTF 模型构建,并在导入过程中实现了材质去重。 ![Showcase](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/3a35500708023733.png) ## 系统要求 - [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), 实体组件系统, 实时渲染, 导航系统, 模块化设计, 渲染上下文, 游戏开发, 游戏引擎, 物理引擎, 粒子系统, 编辑器工具, 自动化修复, 计算蒙皮, 资源管理, 资源管道, 跨平台开发, 阴影渲染, 音频系统