2398 字
7 分钟
[写给自己]从零了解 Bevy 引擎与 WGSL 着色器
2026-04-10

🦀 Rust 游戏开发之旅:从零到 Bevy 引擎与 WGSL 着色器精通#

作者人设:资深 Rust 工程师 / 游戏引擎开发工程师 / 知识分享爱好者
面向人群:Rust 初学者、对游戏开发和底层渲染感兴趣的开发者
学习理念:知其然,更知其所以然。不盲目堆砌概念,从底层 GPU 通信到上层引擎架构,由浅入深攀登游戏开发高峰。


🌟 写在前面的话#

欢迎来到 Rust 游戏开发的世界!Rust 以其内存安全和零成本抽象,正在重塑游戏引擎的未来。Bevy 是目前 Rust 生态中最耀眼的数据驱动型 ECS 游戏引擎,而 wgpu 和 WGSL 则是 Bevy 渲染层的底层基石。
本计划专为 Rust 初学者设计,我们将避开“从天而降的黑盒”,按照 “Rust 基础 -> 底层图形 API (wgpu/WGSL) -> 顶层引擎” 的路径,让你不仅会写代码,更懂其背后的原理。


📅 第一阶段:Rust 语言与游戏开发思维筑基(2-3 周)#

游戏开发是 Rust 最具挑战性的应用领域之一,必须先打下坚实的语言基础。

1. Rust 核心语法速通#

  • 所有权与借用:这是 Rust 的灵魂,后续处理 ECS 中的实体和组件、多线程渲染时无处不在。
  • 结构体与枚举:游戏中的状态机、伤害类型、物体种类全靠它们。
  • 特征与泛型:理解 Bevy 中大量的 Component, Resource, System 标记派生宏。
  • 闭包与迭代器:Bevy 的 Query 查询大量使用函数式编程思维。

2. 游戏开发必备 Rust 特性#

  • 生命周期:理解为什么 Bevy 的 System 不能随意持有数据的可变引用。
  • 智能指针Arc, Mutex, RwLock 在多线程资源加载中的应用。
  • :了解声明宏和过程宏,看懂 Bevy 的 #[derive(Resource)] 等魔法。

3. 阶段实战#

  • 任务:用纯 Rust(不需要任何图形库)在终端写一个“贪吃蛇”或“井字棋”。
  • 目标:熟练掌握 Rust 的模块化、状态管理和逻辑循环。

🎨 第二阶段:GPU 编程基础与 WGSL 着色语言(2-3 周)#

WGSL (WebGPU Shading Language) 是 wgpu 和 Bevy 使用的着色器语言。不要被引擎的封装迷惑,着色器永远是图形学的高级核心。

1. 图形渲染管线初探#

  • CPU 与 GPU 的分工:为什么我们需要着色器?
  • 渲染管线流程:顶点数据 -> 顶点着色器 -> 图元装配 -> 光栅化 -> 片段着色器 -> 帧缓冲。

2. WGSL 语法精讲(对比 Rust 学习)#

  • 变量与类型f32, u32, vec3<f32>, mat4x4<f32>(注意:WGSL 没有自动推导,类型必须显式声明)。
  • 入口点@vertex, @fragment, @compute
  • 绑定与分组:理解 @group(0) @binding(0),这是 CPU 向 GPU 传数据的桥梁(Uniform, Storage Buffer)。
  • 向量和矩阵运算:点乘、叉乘、矩阵乘法在图形学中的物理意义。

3. 阶段实战#

  • 任务:在纸上或用在线工具(如 SHADERed)写出简单的 WGSL 代码。
  • 目标:实现一个只输出红色的片段着色器,和一个能根据时间变换颜色的顶点着色器。

⚙️ 第三阶段:底层图形 API —— wgpu 基础与实战(3-4 周)#

wgpu 是 Rust 版的 Vulkan/Metal/D3D12 抽象层。学习 wgpu 能让你深刻理解 Bevy 底层到底在干什么。

1. wgpu 核心概念映射#

  • Instance & Adapter & Device & Queue:从显卡选择到命令提交的层级关系。
  • Surface:画布,与操作系统窗口绑定。
  • Buffer & Texture:GPU 内存中的数据长什么样?
  • Bind Group & Pipeline Layout:WGSL 中的 @group 在 CPU 端如何对应?

2. 渲染管线构建(手撕三角形)#

  • 配置 Surface
  • 编写顶点缓冲并加载。
  • 创建渲染管线,将 WGSL 代码植入 wgpu。
  • 里程碑:在屏幕上画出一个彩色三角形(图形界的 Hello World)。

3. 进阶:3D 变换与深度缓冲#

  • 引入 cgmathglam 库(Bevy 底层使用 glam)。
  • 理解 MVP 矩阵。
  • 深度纹理的配置与使用。

4. 阶段实战#

  • 任务:跟随 Learn Wgpu 教程,实现一个带有贴图、光照和相机的 3D 旋转立方体。
  • 目标:彻底搞懂从 CPU 数据到 GPU 像素的完整链路。

🎮 第四阶段:Bevy 引擎核心 —— ECS 架构与基础应用(3-4 周)#

终于来到了 Bevy!有了前面的基础,你会发现 Bevy 不是黑盒,而是优雅的封装。

1. ECS(实体-组件-系统)哲学#

  • Entity:仅仅是 ID。
  • Component:纯数据(Rust 结构体 + #[derive(Component)])。
  • System:纯逻辑(Rust 函数,通过 Query 查询组件)。
  • Resource:全局单例数据(如得分、时间、设置)。
  • Commands:延迟执行的结构变更(增删实体/组件)。

2. Bevy App 生命周期#

  • App::new() 与插件机制。
  • Startup 系统与普通系统。
  • 系统执行顺序与依赖(.before(), .after(), .in_set())。
  • 状态机(States)与 OnEnter / OnExit

3. Bevy 2D 游戏开发入门#

  • 坐标系与 Transform 组件。
  • Sprite 与 AssetServer 资源加载。
  • 处理键盘与鼠标输入(Res<Input<KeyCode>>)。
  • 时间与帧率无关的移动(Res<Time>)。

4. 阶段实战#

  • 任务:使用 Bevy 制作一个完整的 2D 游戏(如 Flappy Bird 或太空射击)。
  • 目标:熟练掌握 ECS 解耦逻辑,实现资源的加载、UI 分数显示和游戏状态切换。

🚀 第五阶段:Bevy 进阶 —— 渲染定制与 WGSL 融合(3-4 周)#

这是本计划的核心高光时刻:用 WGSL 写自定义着色器,并将其无缝接入 Bevy 引擎。

1. Bevy 的渲染架构剖析#

  • Extract 阶段:从 App World 提取渲染所需数据到 Render World。
  • Prepare 阶段:将数据转化为 GPU Buffer 和 Bind Group。
  • Queue 阶段:将渲染管线和实体关联,加入 Phase。
  • Render 阶段:真正执行 Draw 命令。

2. Bevy 中的材质定制#

  • 实现 Material 特征(针对 3D)或 SpecializedMaterial
  • 了解 Bevy 提供的内置 Bind Group(view, mesh, material)。
  • 如何在 WGSL 中引用 Bevy 的内置变量(如 bevy_pbr::forward_io 等)。

3. 后处理与 Compute Shader#

  • 后处理管线:如何将画面渲染到纹理,再通过全屏四边形和自定义 WGSL 片段着色器输出到屏幕。
  • Compute Shader 在 Bevy 中的应用:利用 @compute 实现粒子系统或 GPU 模拟。

4. 阶段实战#

  • 任务 1:在 Bevy 中编写自定义 WGSL 材质,实现一个“水面波纹”或“全息投影”的 3D 材质效果。
  • 任务 2:写一个简单的后处理 Shader(如屏幕灰度化、晕影效果)。

🏆 第六阶段:综合实战与性能优化(持续迭代)#

从玩家到工程师的蜕变,在于对性能和架构的极致追求。

1. 综合项目:3D 动作游戏 Demo#

  • 使用 Bevy 搭建 3D 场景,加载 GLTF 模型。
  • 实现角色控制器(Rapier 物理引擎集成)。
  • 使用自定义 WGSL 实现特效(受击闪烁、范围光晕)。

2. 性能分析指南#

  • Bevy 的性能分析工具(Tracy 集成)。
  • System 的并行执行条件(避免 ResMut 造成的锁竞争)。
  • 更改检测的代价。

3. 进阶架构模式#

  • 子 App 与渲染图自定义。
  • 插件开发规范:如何将你的系统封装成可复用的 Bevy Plugin 供社区使用。

📚 独家推荐学习资源库#

Rust 基础#

WGSL & 图形学#

wgpu#

Bevy#


💡 给初学者的三条忠告#

  1. 不要畏惧编译器:Rust 编译器是你最好的导师。在 wgpu/Bevy 开发中,很多错误在运行时表现为黑屏或 Panic,这是因为 GPU 端的错误很难追踪。严格遵守 Rust 的类型系统是避免此类 Bug 的第一道防线。
  2. 不要一开始就死磕 3D 自定义着色器:按照本计划的顺序,先用 Bevy 内置的 2D/3D 功能做出看得见的东西建立自信,再去碰底层的 WGSL 和 Render Graph。
  3. 拥抱社区:Bevy 的生态非常活跃。遇到问题,除了查文档,请大胆地在 Bevy Discord 或 GitHub Discussions 提问。

“Talk is cheap. Show me the code.” —— Linus Torvalds
现在打开你的终端,输入 cargo new my_game,开始你的 Rust 游戏开发之旅吧!

[写给自己]从零了解 Bevy 引擎与 WGSL 着色器
https://www.twocblog.site/posts/wgpu/hello-game/
作者
Twoc-Prime
发布于
2026-04-10
许可协议
CC BY-NC-SA 4.0