BRUTAL:不给编辑器,只给地基的 C# 游戏框架,RimWorld 用它把引擎从 Unity 换了下来

如果你写过 C# 游戏,多半经历过这样一件事:引擎替你做了所有决定——渲染管线长什么样、对象怎么分配、脚本循环什么时候跑——然后某天你发现,想改其中任何一个,都要先跟引擎作者的架构思路博弈一轮。

今天要介绍的 BRUTAL 走的是完全相反的路。它不是一个”什么都有”的引擎,而是一套刻意做小的底层框架:给你一块干净的地基,上面盖什么由你自己决定。更有意思的是,它不是实验室里的玩具——RimWorld 的开发商 Ludeon 已经把 RimWorld 从 Unity 迁移到基于 BRUTAL 自研的 Waylith 引擎上,官方实测报告了 2 到 4 倍的性能提升。

项目在 2026 年 10 月 14 日开源,几天内就收获了 1800 多 Star。

这是什么

用作者自己的话概括:

一个免费、开源的 C# 框架。你可以直接用它做一个游戏,也可以把它当作地基,去造属于你自己的游戏引擎。

它的核心是一层自研的 interop 层,让 C# 能直接、低成本地调用原生 API 和原生库。围绕这层地基,BRUTAL 提供数学库、内存管理、字符串、集合、任务调度、日志、本地化,以及 Vulkan、GLFW、Dear ImGui、FMOD、RakNet、Jolt、Box2D 等一长串绑定。

项目信息内容
仓库ahwootech/BRUTAL
语言C#(目标 .NET 10)
图形Vulkan 1.3(另有 OpenGL 绑定)
平台Windows / Linux
授权基于 MIT 的自定义许可证(带署名要求),商用免版税
开发者RocketWerkz 企业内部团队
代表作Kitten Space Agency(直接构建)、RimWorld / Waylith(基于 BRUTAL)

它解决什么问题

BRUTAL 的 README 里有一句话,基本就是它的全部动机:“你的工具有多独立,你就有多独立。”

作者认为,开发者已经把对自己作品的极大控制权,交给了利益未必一致的公司。他们并不是劝每个人都去自研引擎——而是认为,每个开发者都应该有能力这么做,而不必先花四年时间从零写基础层。

把这个动机翻译成具体痛点,大致是这几条:

  • 引擎太重,改不动。Unity、Unreal 这类引擎的架构决策已经固化,遇到非主流需求(超大规模世界、自定义网络模型、特殊渲染路径)时,绕开引擎的成本往往比写引擎还高。
  • 托管语言的性能天花板。用 C# 写游戏本来很舒服,但 GC 停顿、装箱、频繁分配在高频循环里是硬伤。BRUTAL 的取向是”避开分配、用非托管内存、该 unsafe 就 unsafe”。
  • 许可与抽成。不少商业引擎按营收抽成。BRUTAL 不收版税,只要署名。
  • 重新造地基太贵。很多人真动手写引擎,最后 80% 时间花在写内存分配器、数学库、Vulkan 绑定上,而不是写游戏。

所以 BRUTAL 的定位非常明确:它提供的是内核,不是发行版。作者用 Linux 内核和 Ubuntu 的关系作比——它不做架构决策,只把那些”每个引擎都得重写一遍、但写起来很无聊”的底层部分做好。

怎么做到的:技术架构

1. 一层自己写的 interop,而不是 P/Invoke 堆叠

大多数 C# 原生绑定的做法是:用工具把 C 头文件生成一大堆 [DllImport] / LibraryImport 声明,然后到处 Marshal。这种做法能用,但在游戏这种高频调用的场景里,编组开销和 GC 压力都很可观。

BRUTAL 选择自己实现一层 interop,目标是让 C# 到原生 API 的调用接近零额外开销,并且全程可以用非托管内存和指针来组织数据。这是整个框架最底层的差异点,上面所有库都建立在它之上。

2. 一个库就是一个 NuGet 包

仓库里每个顶层文件夹对应一个独立发布的 NuGet 包。你只引你需要的部分,不需要为了用一个 Job System 把整个引擎拖进来。核心包大致分布如下:

层包作用
基础Brutal.Core / Interop / Memory基础类型、平台检测、指针工具、Roslyn 分析器、非托管内存与分配器
数据结构Brutal.Collections / Strings / Maths / Numerics零分配的集合与字符串构建、向量矩阵数学
并发Brutal.Concurrency任务系统与线程
图形Brutal.Vulkan / Vma / ShaderC / Slang / OpenGlVulkan 绑定、抽象层、内存分配器、着色器编译
窗口与 UIBrutal.Glfw / Sdl / ImGui / ImPlot窗口、输入、即时模式调试 UI
资源Brutal.Gltf / Texture / Ktx / Gli / Stb / FreeType模型、纹理、压缩格式、字体栅格化
音频 / 网络 / 物理Fmod / OpenAl / RakNet / Jolt / Box2D声音、网络、3D 与 2D 物理
工具RenderDoc / Monitor / NotCurses / NativeFileDialog抓帧集成、运行时监控、终端 UI、原生文件对话框

3. 不帮你做决定,也不阻止你做决定

这一点很关键:没有编辑器、没有场景图、没有渲染器,而且作者明确表示不打算加。它甚至会把偏离这个范围的 PR 直接拒掉,理由是”什么都加”正是导致业界只剩那几种引擎的原因。

你可以混用任意 NuGet 包,包括第三方库。BRUTAL 不锁定你的技术栈,也不要求你按它的方式组织代码。

4. 性能数据来自真实产品,不是跑分

这是 BRUTAL 最有说服力的部分:它已经跑在真实商业游戏里。

产品工作室引擎
RimWorldLudeon StudiosWaylith(基于 BRUTAL)
Kitten Space AgencyRocketWerkz直接基于 BRUTAL
TorpediaRocketWerkz直接基于 BRUTAL
Art of the RailRocketWerkz直接基于 BRUTAL
GruntzRocketWerkz直接基于 BRUTAL
AfterskiesFloating Origin Interactive直接基于 BRUTAL

Ludeon 在自己的测试里报告 Unity 版本的 2 到 4 倍性能,而且绝大多数现有 Mod 仍然兼容。Kitten Space Agency 则是一个按真实尺度运行整个太阳系的太空模拟,也是第一个直接构建在 BRUTAL 上的大型项目。

怎么用

环境准备

需要 .NET 10 SDK;如果要渲染,还需要一块支持 Vulkan 1.3 的显卡和较新的驱动;开发期间想看校验层的话再装 Vulkan SDK。平台目前是 Windows 和 Linux。

如果你只是想读源码或者 fork,直接克隆仓库即可。注意作者说明:目前构建脚本和解决方案文件还没放出来,现阶段推荐用 NuGet 包,仓库主要供阅读和 fork。

git clone https://github.com/ahwootech/BRUTAL.git

第一个窗口

先建一个控制台项目,只引 Core 和 GLFW 两个包:

dotnet new console -n HelloBrutal
cd HelloBrutal
dotnet add package Ahwoo.Brutal.Core
dotnet add package Ahwoo.Brutal.Glfw

然后把 Program.cs 换成下面这段。注意 GlfwWindowHint.ClientApi, 0 这一行:它告诉 GLFW 不要创建任何图形上下文,窗口就只是一个空壳,渲染 API 由你自己后面接。

using Brutal.GlfwApi;
using Brutal.Numerics;

if (!Glfw.Init())
    throw new Exception("Failed to initialize GLFW");

Glfw.WindowHint(GlfwWindowHint.ClientApi, 0);
var window = Glfw.CreateWindow(new GlfwWindow.CreateInfo
{
    Title = "Hello BRUTAL",
    Size = new int2(1280, 720),
});

while (!window.ShouldClose)
    Glfw.PollEvents();

Glfw.Terminate();
dotnet run

跑起来你会得到一个空窗口。接下来接什么完全由你决定:

  • 渲染:Ahwoo.Brutal.Vulkan.Abstractions + Ahwoo.Brutal.Vulkan.Vma 搭 Vulkan 渲染器,Ahwoo.Brutal.ShaderC 负责运行时编译着色器。
  • 调试 UI:Ahwoo.Brutal.ImGui 与 Ahwoo.Brutal.ImPlot,走的是 docking 分支。
  • 并行:Ahwoo.Brutal.Concurrency 给的是任务系统。
  • 音频与联机:Ahwoo.Brutal.Fmod、Ahwoo.Brutal.RakNet。

适合谁,不适合谁

作者写得非常坦诚:BRUTAL 在某些方面比 Unity、Unreal、Godot 难用得多,在另一些方面——尤其是你要做一些不寻常的事情时——又明显更容易。前提是你得先真正知道自己要做什么。

  • 适合:想自研引擎但不想重写地基的团队;有非主流技术需求(超大规模模拟、自定义网络、特殊渲染路径)的项目;对 GC 和分配敏感的 C# 老手。
  • 不适合:想要开箱即用、拖拽就能做出游戏的独立开发者。这里没有编辑器、没有场景图,也没有”点一下就能跑”的模板。

授权注意点

BRUTAL 的许可证以 MIT 为基础,但加了一条署名要求。用它做出来的游戏或产品需要:在致谢画面中包含版权声明;在游戏正式开始前展示 BRUTAL 的 logo;随产品附带 NOTICE.txt。不收版税。

如果不方便做这些,可以和作者另行商谈商业授权;非营利项目、以及展示 logo 会有损应用用途的情况,可以申请豁免。目前这个许可证还没通过 OSI 认证,作者说打算提交,并根据社区反馈继续完善。介意这一点的团队建议先读完整的 LICENSE 文本。

小结

BRUTAL 的价值不在于”又一个游戏引擎”,而在于它把一件行业里几乎没人愿意做的事摊开了:把自研引擎最枯燥、最容易重复劳动的那 20% 底层,做成一套小而干净的 C# 库,然后说——剩下的交给你。

它显然不适合所有人。但它已经证明了这条路能走通:一个跑了十几年的商业游戏(RimWorld)用它把引擎从 Unity 换了下来,还快了 2 到 4 倍。对一个刚开源几天的框架来说,这可能是最硬核的背书。

项目地址:https://github.com/ahwootech/BRUTAL
官网与游戏平台:https://ahwoo.com/brutal
讨论区:https://forums.ahwoo.com/forums/brutal/
Kitten Space Agency(可直接体验):https://ahwoo.com/app/100000/kitten-space-agency/

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享