游戏开发
我在这里大胆预言:Rust未来会成为和C++
同级别的游戏开发语言,特别是在游戏引擎方面,会大放异彩。
目录索引
- 游戏引擎: bevy, fyrox, ggez, oxygengine, macroquad, godot-rust, piston, amethyst
- GPU和图形渲染: wgpu, rust-gpu,kajiya, lyon, ash, vulkano, rend3, rafx, gfx, luminance, miniquad, glow
- 学习资料和新闻
游戏引擎
Bevy
bevy是一个数据驱动的游戏引擎,支持2D和3D图形开发,优点是社区活跃、更新快、模块化设计优秀、性能高,缺点是还处于快速开发中,并不适合生产使用。
同时bevy
的文档齐全,官方示例很多,非常适合学习和使用。
Fyrox(前rg3d)
fyrox是一个2D
和3D
游戏图形化引擎,功能丰富,生产可用(官方宣称)。
该项目前身是rg3d
,但是被收购后,更名为fyrox
,潜力应该是相当好的,下面截图来源于基于该引擎开发的游戏StationIapetus
。
ggez
ggez是一个轻量级的2D
游戏图形引擎,它的目标是让游戏开发尽量的简单,因此它的功能并不是很强大,例如如果你想要强大且真实的物理引擎,它可能无能为力,但你可以选择在它的基础上构建自己的更高级的引擎。
oxygengine
oxygengine是一个2D
HTML5游戏引擎,支持编译成WASM在浏览器中运行。
macroquad
macroquad是一个2D
游戏引擎,特点是简单易用,例如它试图让使用者不会遇到Rust生命周期的难题。
godot-rust
godot-rust是大名鼎鼎的godot
引擎的Rust
绑定,godot
是c++
开发的游戏2D/3D
引擎,但是对Rust语言提供了很好的支持。
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
应用了非常先进的论文和设计理念,因此非常值得有志于游戏引擎开发的同学学习。但目前还不适用于生产级使用,具体见这里。
lyon
lyon可以使用GPU进行向量路径渲染,例如高效渲染复杂的svg
等。
ash
ash是一个轻量级的Vulkan
绑定。
vulkano
vulkano是一个安全、特性丰富的Vulkan
绑定。
rend3
rend3是一个简单易用、可定制性强、高效的3D渲染库,基于wgpu
开发。
rafx
rafx是一个多后端渲染器,目标是性能、扩展性和生产力。
gfx
gfx是一个底层的图形库,目前已经不怎么活跃,主要原因是:它的核心组件gfx-hal
最开始的目标是为wgpu
提供功能,但是后面wgpu
实现了自己的wgpu-hal
,因此gfx-hal
目前仅处于维护状态。
luminance
luminance是一个类型安全、无状态的图形框架,目标是让图形渲染变得简单和优雅,最开始是通过Haskell
语言实现,然后在2016
年移植到Rust
上。
它很简单,功能也不够强大,如果你没有OpenGL
、Vulkan
的经验,可以使用它做一些简单的图形渲染项目试试。
miniquad
miniquad是一个安全和跨平台的图形渲染库,它提供了较为底层的API,如果需要抽象层次更高的API,可以使用之前提到的macroquad,后者是基于miniquad
封装实现。
glow
glow提供了各种GL
绑定(OpenGL, WebGL), 提供了一定的抽象,避免你写平台相关的特定代码实现。
学习资料
游戏开发最新新闻
一些学习资料(英文)
- Hands-on Rust
- 使用bracket-lib和其配套书籍进行学习
- 想要没有困难的开发一个跨平台的2D游戏?使用
macroquad
,并且可以参考用它开发的两个游戏: fish fight和zemeroth - 想要开发一个简单的3D游戏并且需要一个编辑器?可以试试
fyrox(rg3d)
- 想要开发一个复杂的游戏或者想要做一个demo,未来可以基于该demo继续开发,最终完成一个复杂游戏?可以试试
godot
引擎提供的Rust
绑定:godot-rust - 喜欢钻研前沿技术?试试
bevy
,它拥有最好的ECS
实现和最先进的设计理念(可能)
ECS(Entity Component System)和DOD(面向数据设计)资料
我们在上面提到的很多系统都使用了ECS
和DOD
,因此这两者对于游戏开发是极其重要的,下面是一些相关的英文资料(部分需要翻墙),可以帮助大家理解相关概念。
- hecs, 一个用Rust实现的ECS世界
- Understanding data-oriented design for entity component systems - Unity at GDC 2019
- CppCon 2018: Stoyan Nikolov “OOP Is Dead, Long Live Data-oriented Design”
- RustConf 2018 - Closing Keynote - Using Rust For Game Development by Catherine West
- "Data-Oriented Design" web book by Richard Fabian