如果学习了游戏引擎理论和vulkan知识但不会实践动手开发一个游戏引擎那么这个游戏引擎项目或许会适合你。该引擎是一个轻量 3D 引擎以vulkan为渲染后端项目采用现代 C20 开发基于经典 Actor Component 组件化架构配套独立的 LLVM 离线反射代码生成工具。仓库地址https://github.com/KomdSpecific/Suzza该引擎 Vulkan 底层基础流程实例、设备、交换链、渲染通道、同步原语等参考了 Vulkan Tutorial 的示例代码代码部分为 CC0 1.0 协议在其基础上进行了面向 Actor-Component 引擎架构的封装、重构与扩展增加了资源管理框架、编辑器交互、反射系统等上层引擎能力。支持GLTF模型解析加载支持Stb_image纹理资源加载。你可以在项目的SuzzaApplication的Init函数添加如下代码测试运行const std::vectorsuz::ModelVertexData vertices { // -------- 面1X面向前面X0.5f4顶点 {{ 0.5f, -0.5f, -0.5f }, {1,1,1}, {0,0}}, {{ 0.5f, 0.5f, -0.5f }, {1,1,1}, {1,0}}, {{ 0.5f, 0.5f, 0.5f }, {1,1,1}, {1,1}}, {{ 0.5f, -0.5f, 0.5f }, {1,1,1}, {0,1}}, // -------- 面2‑X面朝后X-0.5f {{-0.5f, -0.5f, -0.5f }, {1,1,1}, {0,1}}, {{-0.5f, 0.5f, -0.5f }, {1,1,1}, {1,1}}, {{-0.5f, 0.5f, 0.5f }, {1,1,1}, {1,0}}, {{-0.5f, -0.5f, 0.5f }, {1,1,1}, {0,0}}, // -------- 面3Y面向右Y0.5f {{-0.5f, 0.5f, -0.5f }, {1,1,1}, {0,0}}, {{ 0.5f, 0.5f, -0.5f }, {1,1,1}, {1,0}}, {{ 0.5f, 0.5f, 0.5f }, {1,1,1}, {1,1}}, {{-0.5f, 0.5f, 0.5f }, {1,1,1}, {0,1}}, // -------- 面4‑Y面向左Y-0.5f {{-0.5f, -0.5f, -0.5f }, {1,1,1}, {0,0}}, {{ 0.5f, -0.5f, -0.5f }, {1,1,1}, {1,0}}, {{ 0.5f, -0.5f, 0.5f }, {1,1,1}, {1,1}}, {{-0.5f, -0.5f, 0.5f }, {1,1,1}, {0,1}}, // -------- 面5Z面顶面Z0.5f {{-0.5f, -0.5f, 0.5f }, {1,1,1}, {0,0}}, {{ 0.5f, -0.5f, 0.5f }, {1,1,1}, {1,0}}, {{ 0.5f, 0.5f, 0.5f }, {1,1,1}, {1,1}}, {{-0.5f, 0.5f, 0.5f }, {1,1,1}, {0,1}}, // -------- 面6‑Z面底面Z-0.5f {{-0.5f, -0.5f, -0.5f }, {1,1,1}, {0,0}}, {{ 0.5f, -0.5f, -0.5f }, {1,1,1}, {1,0}}, {{ 0.5f, 0.5f, -0.5f }, {1,1,1}, {1,1}}, {{-0.5f, 0.5f, -0.5f }, {1,1,1}, {0,1}}, }; const std::vectorsuz::uint32 indices { //前面 (0,1,2), (0,2,3) 0,1,2, 0,2,3, //后面 (4,5,6), (4,6,7) 4,5,6, 4,6,7, //左面 (8,9,10), (8,10,11) 8,9,10, 8,10,11, //右面 (12,13,14), (12,14,15) 12,13,14, 12,14,15, //底面 (16,17,18), (16,18,19) 16,17,18, 16,18,19, //顶面 (20,21,22), (20,22,23) 20,21,22, 20,22,23 }; m_scene std::make_uniquesuz::Scene(); suz::ModelResourceManager modelManager suz::Engine::GetModelResourceManager(); /* 加载Mesh */ suz::Mesh* mesh new suz::Mesh(vertices, indices); const std::string meshId modelManager.LoadMesh(mesh); /* 加载Material */ suz::Material* material1 new suz::Material(); const std::string materialId1 modelManager.LoadMaterial(material1); /* 创建Actor */ suz::Actor* actor1 new suz::Actor(FirstActor); m_scene-RegisterActor(actor1); suz::MeshComponent* meshComponentActor1 new suz::MeshComponent(); meshComponentActor1-CreateMesh(meshId); meshComponentActor1-CreateMaterial(materialId1); actor1-RegisterComponentsuz::MeshComponent(meshComponentActor1); actor1-SetActorLocation({ 3.0f,0.0f,0.0f }); /* 定义玩家Actor */ suz::PlayerController* player new suz::PlayerController(m_scene.get()); m_scene-RegisterActor(player); suz::CameraComponent* camera new suz::CameraComponent(); player-RegisterComponentsuz::CameraComponent(camera); player-SetActorLocation({ 0.0f,0.0f,0.0f }); player-SetActorRotation({ 0.0f,0.0f,0.0f }); return true;1.参考现代游戏引擎的经典架构实现了实体-组件解耦设计• Actor 作为场景实体基类管理生命周期、空间变换、层级关系• Component 作为功能组件实现渲染、逻辑、自定义功能扩展自研 LLVM 离线反射系统2.该引擎不使用宏反射、不使用第三方反射库基于LLVM实现了一套简单的类似虚幻引擎 UHT 的离线代码生成反射工具。反射工具为独立项目基于 libclang/LLVM 实现• 通过 Clang AST 语法树解析头文件• 识别自定义反射标记• 离线自动生成 StaticClass、ThisClass、Super 等标准引擎元数据结构• 自动完成类、成员的注册代码生成3.初步集成 ImGui Docking 分支搭建简易编辑器面板支持游戏运行时实时修改实体、组件参数• 语言标准C20 现代 C 特性• 构建工具纯 CMake 跨平台构建4.运行环境与工具要求Vulkan SDKMSVC编译器该引擎尚未测试GCC/Clang兼容性LLVM18.1.8你完全可以自由做这些• 免费学习、阅读源码、研究引擎架构• 基于本引擎二次开发、新增功能、改造架构• 用来做个人Demo、技术实践、图形学练习、课程作业• 用于自己的毕业设计参考、技术拓展、功能创新• 修改全部代码、更换架构、改命名、改宏、改工具逻辑• 公开分享自己修改后的版本所有个人学习、技术练习、二次开发、毕业设计拓展全部允许、完全合规、无任何限制。下面这套配置步骤是我本机MSVC Windows验证通过的流程仅作为参考。 不同电脑系统版本、显卡驱动、已装软件、环境变量冲突、LLVM/Vulkan 版本差异都有可能导致配置失败我无法保证在所有机器上都一键跑通。该引擎目前仅确认适配 MSVCGCC / Clang 尚未测试。 如果你遇到报错可以将问题告诉给AI或对照文末的常见问题进行自查如果仍然无法解决欢迎在仓库提 issue附上你的报错信息我会尽量协助排查。去LunarXchange网站下载Vulkan SDK我选择1.3.296下载。最新版的理论上也可以SDK下载链接LunarXchange接下来需要LLVM库反射系统的运行需要它。这里去GitHub下载我使用的版本是LLVM18.1.8LLVM地址llvm/llvm-project: The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.https://github.com/llvm/llvm-project在Release界面搜索18选择这个版本下载之后解压到自己的路径复制llvm的bin目录路径示例D:/Software/llvm/bin随后打开设置---系统---系统信息---高级系统设置---环境变量---系统变量在系统变量列表下找到Path点编辑---新建随后将复制好的bin目录的路径粘贴到其中点击确定退出。这样基本的配置要求就完成了。配置失败优先自查下面几项Vulkan SDK安装时勾选安装验证层Validation Layers确认显卡支持 Vulkan核显老旧显卡可能存在兼容性问题LLVM一定要下载预编译 Release 包不是源码注意最好使用LLVM18.1.8版本差一点都容易链接失败不要混用多个 LLVM 版本编译器必须使用 MSVCVisual StudioC 标准设置为 C20CMake检查环境变量、路径不要带中文、空格非常高频踩坑点依赖冲突电脑上之前装过别的版本 Vulkan/LLVM环境变量优先级冲突会出现头文件找不到、链接报错