游戏引擎 活跃维护

Acid

EQMG/Acid

高速 C 17 Vulkan 游戏引擎

2026
Stars 标星
166
Forks 分支
79
Watchers 关注
21
Open Issues
C++
主要语言
MIT
开源协议
173.2 MB
仓库大小
3 年前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:EQMG/Acid
git clone https://github.com/EQMG/Acid.git
git clone git@github.com:EQMG/Acid.git
README.md master

英文原文正文为项目原始 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_TESTS
  • ACID_INSTALL_EXAMPLES
  • ACID_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://cn121.com/gameengine/eqmg-acid.html
  • 原项目:EQMG/Acid 版权归原作者 EQMG 及贡献者所有
  • 收录信息:本站于 2026-10-05 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
  • 开源协议:收录时本项目采用 MIT(查看 LICENSE 原文),本站转载其原始文档(未改动文字,仅剔除图片与无关章节);使用、修改、分发请以该仓库 LICENSE 原文为准。
  • 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 EQMG/Acid。
  • 内容说明:本页正文为原项目 README 原文(英文),本站后续会翻译为中文(当前尚未译出,仅将二级标题译为中文,便于按栏目定位;标题原文可在下方原仓库中查看),仅剔除了图片与赞助等无关章节、并把相对链接改为绝对地址;页首简介为机器翻译自仓库描述。
  • 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
  • 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。