Skip to content

3D 入门:Mesh 与 Material

《打瓦》收了官,戏班的家底也厚了。老雷拍板盘下城南的老园子“得月楼”——好台口,就一桩麻烦:台是伸出去的三面台,看客从左、中、右三面围坐。开箱那天问题就亮了相:跑遍前十几章的那批布景,全是第 15 章的“剪纸道具”——正面看是月亮是远山,侧面看就是一条线。三面台容不下剪纸,桌子得是真有四条腿的桌子,鼓得是真有一圈鼓身的鼓。老雷请来木匠老鲁,开了第四部分的工:立体布景

好消息在第 20 章结尾就预告过:进入三维,没有一个概念需要推倒重学。你早就用过 Mesh——第 15 章的满月就是 meshes.add(Circle::new(64.0)) 铸出来的;坐标系本来就是三维的(第 12 章),相机的透视投影也验过机(第 13 章),资产还是那套提货单(第 14 章)。本章只是把这套手艺原样升维,再补上三维世界独有的一笔新债:

一路跟着作坊的工序走:

  • 亮相——把第 15 章的两行咒语升维成 Mesh3d + MeshMaterial3d<StandardMaterial>,亲眼看看没点灯的 3D 世界长什么样,再点起本章唯一的一盏灯;
  • 开料单——内置几何体全家福:CuboidSphereTorus……哪些一句话就能铸,哪些要进 builder 拧旋钮;顺手踩一脚“想省一道入库手续”的编译错误;
  • 上漆——StandardMaterial 初见:base_colormetallicperceptual_roughness 三根旋钮调出一面材质墙,看金属和粗糙度在画面上的肉眼差异,捎带一张贴图;
  • 手搓坯子——Mesh 的内里:顶点、三角形、索引与缠绕顺序,亲手凿一面班旗,亲眼看它“对灯失聪”再把它治好;
  • 法线——受光的方向:同一顶亭盖,共用顶点是馒头、拆开顶点是利落,解开“立方体为什么 24 个顶点”和“低细分的球为什么看着圆”两桩悬案;
  • 得月楼开张——布景合龙,转台上的绣球按一下空格换一种漆。

这些类型分住几个 crate:Mesh 本体、Mesh3d 组件与内置几何体的铸模工序在 bevy_meshStandardMaterialMeshMaterial3dbevy_pbr(基于物理的渲染管线,名字 21.3 节解释);灯在 bevy_light。日常写代码不用记这些门牌——常用项全在 bevy::prelude 里,只有手搓网格时要从 bevy::mesh 显式引入 IndicesPrimitiveTopology,从 bevy::asset 引入 RenderAssetUsages

配套 crate 是 code/ch21-meshes,不需要任何新依赖。本章唯一的图片资产是一面雷字班旗(assets/textures/banner.png),由 scripts/make_ch21_assets.py 用 PIL 现场绘制,一键就位:

console
py -3.11 scripts/make_ch21_assets.py

开工。