点击这里查看那只猴子。
我完全没有Rust的知识,在编写了382小时的Rust项目后,我编写了一个Rust游戏引擎,用来渲染这个PBR模型。
今年我开始学Rust了。这是一篇简短的文章,讲述了我学到了什么以及进展如何。
猴子?下面展示的是一个快速搭建的Rust“游戏引擎”,它用PBR材质渲染了Blender中的猴子苏珊。
请参阅这里获取引擎的源代码。
由于这是一个学习项目,我尽可能多地自己动手做。我用到的唯一crate有png(用于加载图片)、windows-rs(用于Windows支持)以及web-sys、wasm-bindgen和js-sys(用于Web支持)。
这里有一些很酷的引擎特性,并没有什么太复杂的。
- 引擎可以在Windows和Web上运行。
- 在Windows上使用OpenGL进行渲染。
- 在Web上使用WebGL进行渲染。
- 所有的OpenGL绑定和加载过程都是我自己完成的。
- 使用基于物理的渲染(PBR)着色器(主要参考LearnOpenGL.com)
- 矩阵和向量的数学运算
- 架构将平台与引擎、游戏代码与引擎代码、以及渲染后端与引擎分离。
- 支持Windows开发中的DLL热重载。
简单介绍一下背景。我目前的日常工作是 Unity 高级软件工程师一职,在这里工作了大约 8 年。我已经使用 Unity 超过 13 年时间。我编写了自己的 C++ 游戏引擎和 PBR 和 IBL 渲染器,但没有正式发布或投入专业使用。
这里有一些今年我参与的Rust项目,以及我为此花费的时间。
- Gengar 是这个游戏引擎的名字。从头到尾,花了128个小时构建引擎的框架、渲染器以及支持Windows和Web。
- 一个未完成且未发布的预算应用,使用Tauri + Leptos。
- Advent of Code 是2023年Advent of Code的20天Rust解决方案。代码库在这里。
- 基于Rust的8086处理器模拟器,遵循Casey Muratori的计算机增强课程。代码库在这里。
- 通过阅读Rust官方书籍和跟随各种Rust教程来学习。
- 研究基于Rust的区块链。
- 最后,研究Graphite.rs编辑器项目,希望能尽快为该项目做出贡献。
我主要写的是C#。那对我来说是主要的语言。
不像别人说的那样难用。也许是因为我以前用过C++,而且我一般不怎么用面向对象的编程。但所有权模型和借用检查器用起来感觉很自然。我从未和借用检查器“过不去”。借用检查器会指出很多问题,但通常它是对的。
Cargo真是棒,我可以写很多测试。我在Rust里写了好多测试,因为Cargo让写测试变得异常简单。自然而然地,我在开发新功能时就会写测试,这比手动测试简单多了。然后我就可以一直保留这些测试!这真是太棒了!
与 C# 相比,枚举和穷尽模式匹配感觉像拥有了超能力。这也使得错误处理变得简单。相比 C#,这种错误处理方式感觉非常好。特别是 Unity 项目中充满了关于什么可以或不可以为空的隐式假设。如果你不假设某些变量是否为空,那么你的代码将有 10% 的业务逻辑和 90% 的空值检查。同样的道理也适用于异常处理。记得要捕获异常,因为它们可能随时出现。
总体来说,Rust 感觉 使用起来更简单。我需要记住的东西更少才能处理一个Rust项目。通过特质和组合而非继承,我不需要在理解一个方法时记住一堆继承关系。代码明确地告诉我发生了什么。隐式性则要求我从记忆中调取信息。
这就结束了我的思考。这里没什么特别新奇或深奥的内容。谢谢大家的阅读,接下来咱们就继续下一个项目吧!
共同学习,写下你的评论
评论加载中...
作者其他优质文章