材质与纹理的自动映射
glTF 的材质模型和 Bevy 的 StandardMaterial 几乎是一一对应的。加载器会自动完成映射,不需要手动转换。
glTF 材质 → StandardMaterial
| glTF 属性 | StandardMaterial 字段 | 说明 |
|---|---|---|
pbrMetallicRoughness.baseColorFactor | base_color | 固有色(RGBA) |
pbrMetallicRoughness.baseColorTexture | base_color_texture | 固有色贴图 |
pbrMetallicRoughness.metallicFactor | metallic | 金属感 |
pbrMetallicRoughness.roughnessFactor | perceptual_roughness | 粗糙度 |
pbrMetallicRoughness.metallicRoughnessTexture | metallic_roughness_texture | 金属-粗糙度贴图 |
normalTexture | normal_map_texture | 法线贴图 |
emissiveFactor | emissive | 自发光颜色 |
emissiveTexture | emissive_texture | 自发光贴图 |
occlusionTexture | occlusion_texture | 环境光遮蔽贴图 |
alphaMode | alpha_mode | Opaque / Blend / Mask |
doubleSided | cull_mode | 双面渲染 |
Bevy 的 PBR 渲染管线(第 24 章详述)直接消费这些字段。美术在 Blender 里调好的材质,导出 glTF 后在 Bevy 里看到的效果几乎一致。
纹理自动加载
glTF 文件里的纹理可以内嵌(.glb 二进制打包)或外部引用(.gltf + .png/.jpg)。无论哪种方式,加载器都会自动把纹理转成 Bevy 的 Image 资产,挂到对应的 StandardMaterial 字段上。
不需要手动加载纹理再赋值——整个过程对用户透明。
GltfMaterialName:按材质名查找
glTF 加载器会给每个网格实体附加一个 GltfMaterialName(String) 组件,记录该网格使用的材质名。第 23.6 节的材质覆写就靠它定位目标材质:
rust
use bevy::gltf::GltfMaterialName;
fn find_leather(query: Query<&GltfMaterialName>) {
for name in &query {
if name.0 == "LeatherPartsMat" {
// found it
}
}
}材质名来自 Blender 材质槽的命名。在 Blender 里给材质起有意义的名字,Bevy 里就能按名索引。
不支持的 glTF 扩展
Bevy 的 glTF 加载器支持大部分常用扩展(KHR_lights_punctual、KHR_materials_unlit、KHR_materials_ior 等),但不是全部。不支持的扩展会被忽略——不会报错,只是那些特性不生效。完整的支持列表见 bevy_gltf 的文档。