HOME / 第 5 部分 · 3D 游戏开发 / 第 50 课
MODULE 5 · 3D 游戏开发

第 50 课 · 3D 材质与网格

⏱ 预计时长 35 分钟📊 难度 入门📚 模块 第 5 部分 · 3D 游戏开发

🎯 本课学习目标

3D 物体「长什么样」由材质决定。本课掌握 StandardMaterial3D 的常用设置。

📖 详细教学步骤

Mesh 与 Material 的关系概念

  • Mesh(网格):物体的「形状」——顶点和面的集合
  • Material(材质):物体「表面怎么反光」——颜色、金属、粗糙度、贴图
  • MeshInstance3D 同时引用 Mesh 和 Material

给物体添加材质实操

  1. 选中 MeshInstance3D
  2. 检查器 Material → 展开 → 新建 StandardMaterial3D
  3. 材质出现子属性,调整即可

💡 StandardMaterial3D 是 Godot 最常用的 PBR 材质(物理渲染)。

常用材质属性属性

  • Albedo Color:基础颜色(表面色)
  • Metallic:金属度(0 绝缘体、1 金属)
  • Roughness:粗糙度(0 镜面光滑、1 粗糙)
  • Emission:自发光(发光物体、屏幕)
  • Transparency:透明度(玻璃、水)

💡 金属=高 Metallic 低 Roughness;塑料=0 金属中 Roughness;发光=开 Emission。

贴纹理实操

  1. 准备一张纹理图(如木纹)
  2. 材质 Albedo → Texture 选纹理图
  3. Albedo Color 调成白色(否则会和纹理混合)
  4. UV 自动映射到网格

💡 需要法线贴图(立体感):材质 → Normal → Normal Map。

材质资源复用概念

材质是资源,可独立保存复用:

  1. 调好材质后,材质资源面板点「保存」按钮 → 存成 .tres
  2. 多个物体用同一个材质,改一处全部更新
  3. 批量给多个 MeshInstance3D 指定同一材质

代码换材质/换色代码

运行时改材质:

GDSCRIPTextends Node3D

@onready var mesh: MeshInstance3D = $MeshInstance3D

func _ready():
    var mat = StandardMaterial3D.new()
    mat.albedo_color = Color(1, 0.2, 0.2)   # 红色
    mat.metallic = 0.8
    mat.roughness = 0.2
    mesh.material_override = mat   # 覆盖材质

func flash_color():
    mesh.material_override.albedo_color = Color(1, 1, 0)
⚠️
贴图后物体全白/全黑?

Albedo Color 若被调成非白色会覆盖纹理观感;纹理没加载成功也会异常。先确认纹理导入正常。

⚠️
材质改了没效果?

确认材质挂到了 MeshInstance3D 的 material 或 material_override 上。

🧪 动手试一试

🏋️ 课后练习

做 4 个球:金属球(Metallic 1/Roughness 0.1)、塑料球(Metallic 0/Roughness 0.5)、发光球(Emission)、透明玻璃球(Transparency)。

SphereMesh + 4 个 StandardMaterial3D 各调参数。

💡

PBR 三要素:颜色 + 金属度 + 粗糙度,调好这三样,物体就「真实」。

💡

材质存成 .tres 资源,可跨场景复用。

🎓 本课小结

Mesh 是形状、Material 是表面;StandardMaterial3D 调颜色/金属/粗糙度/发光/透明;纹理贴 Albedo;材质是资源可复用、代码可运行时改。