如果你写过 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 / OpenGl | Vulkan 绑定、抽象层、内存分配器、着色器编译 |
| 窗口与 UI | Brutal.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 最有说服力的部分:它已经跑在真实商业游戏里。
| 产品 | 工作室 | 引擎 |
|---|---|---|
| RimWorld | Ludeon Studios | Waylith(基于 BRUTAL) |
| Kitten Space Agency | RocketWerkz | 直接基于 BRUTAL |
| Torpedia | RocketWerkz | 直接基于 BRUTAL |
| Art of the Rail | RocketWerkz | 直接基于 BRUTAL |
| Gruntz | RocketWerkz | 直接基于 BRUTAL |
| Afterskies | Floating 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/
















cqlbgzs@163.com 1年前0
d好879445037@qq.com 2年前0
购买了 无法下载Alexcc 3年前0
强大Alexcc 3年前0
看不了教程Alexcc 3年前0
雷刺下载Alexcc 3年前0
下载Alexcc 3年前0
下载dsa456159 3年前0
下载