英文原文正文为项目原始 README(英文),本站后续会翻译为中文,当前仅剔除图片与无关章节并统一排版。
Acid 是一个开源的跨平台游戏引擎,使用现代 C++17 编写,旨在实现高速、简洁且高度模块化的结构。
Vulkan 是唯一的图形 API,可以通过提供的 Acid 渲染管线在应用程序中访问 Vulkan。Metal 通过 MoltenVK 支持;最终,DirectX 将以类似方式得到支持。
该项目由一名开发者兼职开发,目前处于密集开发阶段,请预期可能存在错误、API 变更以及大量缺失的功能。
功能
- 多平台(Windows、Linux、MacOS,32位和64位)
- 多线程命令缓冲区和线程安全
- 即时 GLSL 到 SPIR-V 的编译和反射
- 延迟基于物理的渲染(PBR)
- 网络(HTTP、FTP、UDP、TCP)
- 对象序列化(JSON、XML)
- 使用序列化进行资源管理
- 带作用域函数的事件委托回调
- Bullet 物理引擎
- 实体组件系统
- 粒子特效系统
- 文件多路径搜索与打包
- UI 约束系统,以及 MSDF 字体渲染
- 音频系统(flac、mp3、ogg、opus、wave)
- 阴影映射
- 后期效果管线(镜头光晕、发光、模糊、SSAO 等)
- 模型文件加载(obj、glTF 2.0)
- 动画加载(Collada)
- 图像文件加载(png、jpeg、dng、tiff、OpenEXR、bmp、dds、ppm、tga)
代码片段
// Imports a 2D texture using nearest filtering.
auto guiBlack = Image2d::Create("Guis/Black.png", VK_FILTER_NEAREST);
// Imports a 3D cubemap (face names defined in Cubemap.cpp).
auto skyboxSnowy = ImageCube::Create("Objects/SkyboxSnowy", ".png");
// Imports a OBJ model.
auto dragon = ObjModel::Create("Objects/Testing/ModelDragon.obj");
// Creates a sphere model with 20 latitude and longitude bands with a radius of 1.
auto sphere = SphereModel::Create(20, 20, 1.0f);
// Plays a 3D sound (sound buffer resource internally managed), at half volume.
Sound jump("Sounds/Jump.ogg", Audio::Type::Effect, false, true, 0.5f);
// Loads a entity from a prefab file.
auto playerObject = GetStructure()->CreateEntity("Objects/Player/Player.json");
playerObject->AddComponent<Transform>();
// Creates a entity in code.
auto sphere = GetStructure()->CreateEntity();
sphere->AddComponent<Transform>(Vector3f(6.7f, 6.7f, -8.0f), Vector3f(0.0f, Maths::Radians(180.0f), 0.0f), Vector3f(3.0f));
sphere->AddComponent<Mesh>(SphereModel::Create(20, 20, 1.0f), // This will used the sphere buffers created earlier.
std::make_unique<DefaultMaterial>(Colour::White, Image2d::Create("Objects/Testing/Albedo.png"), 0.0f, 0.5f,
Image2d::Create("Objects/Testing/Material.png"), Image2d::Create("Objects/Testing/Normal.png")));
sphere->AddComponent<Rigidbody>(std::make_unique<SphereCollider>(), 2.0f); // Will be created weighing 2 units.
// Vector maths.
Vector2f a(3.0f, -7.2f);
Vector2f b(-1.74f, 15.4f);
Vector2f c = a * b;
// Distance between the two points.
float distance = a.Distance(b);
// Right shift of the x and y bits by 1.
Vector2i rightShift = Vector2i(5, 9) >> 1;
// Split a string by spaces.
std::string stringSource = "Hello world!";
std::vector<std::string> stringSplit = String::Split(stringSource, ' ');
// Will run a lambda on window resize, and when this object is deleted the lambda is removed.
Window::Get()->OnSize().connect([](Vector2ui size) {
Log::Out("Hello world: ", size, '\n');
});
// Time addition.
Time dateTime = 4h + 2min + 11s + 9ms + 1us + 4ns;
// Calls the function once after 150 milliseconds.
Timers::Get()->Once([]() {
Log::Out("Timer Once After\n");
}, 150ms);
// Calls the function every 4 seconds.
Timers::Get()->Every([]() {
Log::Out("Timer Every Tick\n");
}, 4s);
// Calls the function every 7 seconds 3 times.
Timers::Get()->Repeat([]() {
static uint32_t i = 0;
Log::Out("Timer Repeat Tick #", i, '\n');
i++;
}, 7s, 3);
截图
编译
所有平台依赖 CMake,版本需为 3.11.0 或更高,用于生成 IDE/make 文件。
CMake 选项(默认开启):
BUILD_TESTSACID_INSTALL_EXAMPLESACID_INSTALL_RESOURCES
如果您仅使用系统库安装了 Acid,那么在 CMake 中 find_package(Acid) 将能正常工作。版本控制也受到支持。在使用 find_package(Acid) 时,将创建导入目标 Acid::Acid。ACID_RESOURCES_DIR 变量也将可用,它将指向安装后的 Acid/Resources 的磁盘路径(如果已安装)。
开发 Acid 需要 Python 3、Vulkan SDK、OpenAL 和 OpenAL SDK。
确保您已将环境变量 VULKAN_SDK 和 OPENALDIR 设置为 Vulkan 和 OpenAL 的安装路径。
确保您使用的编译器完全支持 C17,在 Windows 上推荐使用 MSVC 或 MinGW w64。
如果使用 Visual Studio,则必须是 2019 或更高版本(查看为什么 2015 目前无法使用)。使用 Visual Studio 安装程序,并选择“使用 C++ 的桌面开发”和“Windows SDK”,如果尚未安装。之后,Acid 可以作为 CMake 工作区文件夹在 Visual Studio 中打开。
在 Linux 上,Acid 需要安装 xorg-dev、libopenal1 和 libvulkan1。请阅读关于如何在 Linux 上设置 Vulkan 以便找到 Vulkan SDK 的说明。
MacOS 上的设置与 Linux 类似,需要支持 C17 的编译器,例如 XCode 10.0。
贡献
你可以以任何你想要的方式为 Acid 做贡献,我们总是在寻找帮助。你可以从 GUIDELINES.md 了解 Acid 的代码风格。
- 本文标题:Acid - 高速 C 17 Vulkan 游戏引擎
- 本文链接:https://www.cn121.com/gameengine/eqmg-acid.html
- 原项目:EQMG/Acid 版权归原作者 EQMG 及贡献者所有
- 收录信息:本站于 2026-10-05 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
- 开源协议:收录时本项目采用 MIT(查看 LICENSE 原文),本站转载其原始文档(未改动文字,仅剔除图片与无关章节);使用、修改、分发请以该仓库 LICENSE 原文为准。
- 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 EQMG/Acid。
- 内容说明:本页正文为原项目 README 原文(英文),本站后续会翻译为中文(当前尚未译出,仅将二级标题译为中文,便于按栏目定位;标题原文可在下方原仓库中查看),仅剔除了图片与赞助等无关章节、并把相对链接改为绝对地址;页首简介为机器翻译自仓库描述。
- 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
- 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。