← 博客

介绍 Turian:纯 Zig 编写的 3D 游戏引擎

介绍 Turian:纯 Zig 编写的 3D 游戏引擎

2026-06-10
本页面为自动翻译,可能包含错误。如果发现问题,请通过“编辑此页面”链接帮助修正。

游戏引擎往往迫使你做出选择。你可以拥有可视化编辑器的高生产力——场景层级、检视面板、拖放资源——或者拥有系统语言的控制力和可预测性。二选一。

Turian 拒绝这种取舍。 它是一个完全用 Zig 编写的基于组件的 3D 游戏引擎,今天我们为其发布了首个公开主页。

这一切如何开始

当 MEGA4 计划启动时,目标很明确:构建一个受 Unity 启发的游戏引擎和编辑器。当时,引擎用 C# 编写,已接近可称为 v1 发布的状态。

那么为什么选择 Zig?

诚实的答案比任何技术理由都要简单:我想学习它。

起初只是探索 Zig 语言特性的小实验,随着我发现自己正在重建引擎的各个部分,这个项目逐渐壮大。到了某个节点,这个旁支探索变得足够认真,我决定完全重建 Turian。

让这一转变变得容易得多的是 DVUI,一个现有的 Zig GUI 库。我不必花费数月从头构建编辑器 UI 框架,而是从第一天起就可以着手编辑器功能。

今天已实现的功能

Turian 已达成了第一个可用形态,正在迈向 v0.1 · Hello Game 里程碑(大致相当于 Godot 3 的水平):

  • 真正的编辑器。 Turian Studio 提供了场景层级、检视面板、资源浏览器和由 SDL3 GPU(Vulkan / Metal / D3D12)驱动的实时 3D 视口——全部集成在一个窗口中。
  • 组件就是 struct。 在任何 Zig struct 中添加 pub const is_component = true;,它就会出现在添加组件中,其公开字段会在检视面板中显示。编辑器解析的是真实的 Zig 源代码,而非正则表达式,因此注释和条件编译永远不会造成问题。
  • 实时脚本发现。.zig 文件放入项目的 assets/ 目录,点击刷新,你的组件立即可用。
  • 无头构建。 turian-cli build 负责处理资源并输出一个独立的可执行文件——与编辑器生成的产物完全一致,非常适合 CI。

为什么选择 Zig?

一种语言,贯穿始终:引擎、编辑器、游戏逻辑和构建工具全部使用 Zig。没有脚本桥接,没有 FFI 开销,没有垃圾回收器。你所写即机器所执行——你的游戏以一个单一原生二进制文件交付,可以交给什么都没安装的朋友直接运行。

Zig 的 C 互操作性值得特别提及。游戏开发生态系统建立在数十年的 C 和 C++ 软件之上:图形 API、物理引擎、资源导入器、音频系统。能够直接使用 C 库降低了集成成熟解决方案的门槛,同时保留了后续替换或重写部分代码的选项。

Zig 改变了什么

从更成熟的引擎转向 Zig 需要思维方式的转变。Zig 没有类、没有继承、没有接口、没有属性、没有你可能习惯的那种运行时反射。相反,它强调组合、显式性和编译时编程。

编译时替代运行时反射。 Turian 的组件系统使用 Zig 的编译时设施来检查组件定义并自动生成编辑器集成。编辑器通过解析真实的 Zig 源代码来发现 pub const is_component = true;——注释、条件编译和格式化都能正常工作。

显式内存管理。 不同的系统根据各自需求使用不同的分配策略:临时帧分配器、持久场景分配器、资源加载区域等等。这需要更仔细地考虑所有权问题,但这种控制在引擎代码中非常有价值。

诚实的权衡

有一个值得坦诚说明的问题:Zig 没有稳定的 ABI,因此引擎无法作为预编译库发布。你的游戏需要引擎源代码一同编译。SDK 提供源码;你自行准备 Zig 编译器。作为交换,运行时不会出现版本不匹配的意外。

选择 Zig 也意味着接受许多熟悉的便利功能尚不存在。通常用继承、接口和反射实现的功能需要围绕组合和编译时编程采用不同的方法。这门语言还很年轻,工具链在持续改进,最佳实践仍在形成之中。

坦率地说,我也在学习中。用 Zig 构建 Turian 意味着与社区一同学习,发现什么方法行之有效,必要时改变方向,偶尔重建几个月前看似已经完成的系统。这种不确定性正是项目的一部分。

在 MEGA4 中的定位

Turian 是第一个运行在 Zig 上的 MEGA4 项目。其编辑器计划最终成为 Gaya 的插件,以 Guinevere 作为底层 GUI 层——与 MEGA4 其他部分相同的架构。用其构建的第一款真正游戏将是 Mystery。

未来方向

Turian 以里程碑的方式发布,每个里程碑都是一次可用的飞跃。关注 GitLab 上的实时路线图,如果你想现在尝试,请从教程开始。

它是遵循 GPLv3 的自由软件——无需席位费,无需收入分成,无需按标题付费。我们在编辑器中见。

#release#engine#mega4