游戏开发

我在这里大胆预言:Rust未来会成为和C++同级别的游戏开发语言,特别是在游戏引擎方面,会大放异彩。

目录索引

游戏引擎

Bevy

bevy是一个数据驱动的游戏引擎,支持2D和3D图形开发,优点是社区活跃、更新快、模块化设计优秀、性能高,缺点是还处于快速开发中,并不适合生产使用。

同时bevy的文档齐全,官方示例很多,非常适合学习和使用。

fyrox screenshot

Fyrox(前rg3d)

fyrox是一个2D3D游戏图形化引擎,功能丰富,生产可用(官方宣称)。

该项目前身是rg3d,但是被收购后,更名为fyrox,潜力应该是相当好的,下面截图来源于基于该引擎开发的游戏StationIapetus

fyrox screenshot

ggez

ggez是一个轻量级的2D游戏图形引擎,它的目标是让游戏开发尽量的简单,因此它的功能并不是很强大,例如如果你想要强大且真实的物理引擎,它可能无能为力,但你可以选择在它的基础上构建自己的更高级的引擎。

ggez screenshot

oxygengine

oxygengine是一个2D HTML5游戏引擎,支持编译成WASM在浏览器中运行。

oxygengine screenshot

macroquad

macroquad是一个2D游戏引擎,特点是简单易用,例如它试图让使用者不会遇到Rust生命周期的难题。

godot-rust

godot-rust是大名鼎鼎的godot引擎的Rust绑定,godotc++开发的游戏2D/3D引擎,但是对Rust语言提供了很好的支持。

godot screenshot

piston

piston是前两年较火的模块化的游戏引擎,但是最近半年开发速度缓慢,我调查了一番,但不清楚发生了什么。

Amethyst

Amethyst, 前几年较火的Rust游戏引擎,但是最近开发已经停滞,经过我调查,是因为作者团队转型Rust游戏开发知识分享,因此项目被放弃

GPU和图形渲染

wgpu

wgpu是一个纯Rust实现的图形化API库,具有安全、可移植等优点,如果你使用基于wgpu构建的库,那该库可以很多平台上运行:Linux, windows, MacOS, Android和IOS。

它可以原生的运行在Vulkan, Metal等主流平台上,且可以使用wasm的方式运行在WebGPU上,同时API兼容WebGPU标准。

总之,如果你要使用WebGPU, 选它就对了。

rust-gpu

rust-gpu的目标是让Rust成为GPU编程的第一梯队语言,由大名鼎鼎的Embark公司开发,后台较硬。

如果需要通用的GPU编程,选它就对了。

kajiya

kajiya是一个实时的、全局光照渲染系统,由Embark公司开发,该公司在秘密研究基于Rust的游戏引擎,据说准备应用在新游戏上,有朝一日它可能会是推动Rust游戏引擎爆发式发展的功臣。

kajiya应用了非常先进的论文和设计理念,因此非常值得有志于游戏引擎开发的同学学习。但目前还不适用于生产级使用,具体见这里

kajiya screenshot

lyon

lyon可以使用GPU进行向量路径渲染,例如高效渲染复杂的svg等。

ash

ash是一个轻量级的Vulkan绑定。

ash screenshot

vulkano

vulkano是一个安全、特性丰富的Vulkan绑定。

rend3

rend3是一个简单易用、可定制性强、高效的3D渲染库,基于wgpu开发。

rend3 screenshot

rafx

rafx是一个多后端渲染器,目标是性能、扩展性和生产力。

rafx screenshot

gfx

gfx是一个底层的图形库,目前已经不怎么活跃,主要原因是:它的核心组件gfx-hal最开始的目标是为wgpu提供功能,但是后面wgpu实现了自己的wgpu-hal,因此gfx-hal目前仅处于维护状态。

luminance

luminance是一个类型安全、无状态的图形框架,目标是让图形渲染变得简单和优雅,最开始是通过Haskell语言实现,然后在2016年移植到Rust上。

它很简单,功能也不够强大,如果你没有OpenGLVulkan的经验,可以使用它做一些简单的图形渲染项目试试。

miniquad

miniquad是一个安全和跨平台的图形渲染库,它提供了较为底层的API,如果需要抽象层次更高的API,可以使用之前提到的macroquad,后者是基于miniquad封装实现。

miniquad screenshot

glow

glow提供了各种GL绑定(OpenGL, WebGL), 提供了一定的抽象,避免你写平台相关的特定代码实现。

学习资料

游戏开发最新新闻

一些学习资料(英文)

  • Hands-on Rust
  • 使用bracket-lib和其配套书籍进行学习
  • 想要没有困难的开发一个跨平台的2D游戏?使用macroquad,并且可以参考用它开发的两个游戏: fish fightzemeroth
  • 想要开发一个简单的3D游戏并且需要一个编辑器?可以试试fyrox(rg3d)
  • 想要开发一个复杂的游戏或者想要做一个demo,未来可以基于该demo继续开发,最终完成一个复杂游戏?可以试试godot引擎提供的Rust绑定:godot-rust
  • 喜欢钻研前沿技术?试试bevy,它拥有最好的ECS实现和最先进的设计理念(可能)

ECS(Entity Component System)和DOD(面向数据设计)资料

我们在上面提到的很多系统都使用了ECSDOD,因此这两者对于游戏开发是极其重要的,下面是一些相关的英文资料(部分需要翻墙),可以帮助大家理解相关概念。

一些游戏开发的生产力工具