HOME / 第 5 部分 · 3D 游戏开发 / 第 50 课
MODULE 5 · 3D 游戏开发
第 50 课 · 3D 材质与网格
🎯 本课学习目标
- 理解材质(Material)与网格(Mesh)
- 用 StandardMaterial3D 调颜色/金属/粗糙度
- 给模型贴纹理
3D 物体「长什么样」由材质决定。本课掌握 StandardMaterial3D 的常用设置。
📖 详细教学步骤
Mesh 与 Material 的关系概念
- Mesh(网格):物体的「形状」——顶点和面的集合
- Material(材质):物体「表面怎么反光」——颜色、金属、粗糙度、贴图
- MeshInstance3D 同时引用 Mesh 和 Material
给物体添加材质实操
- 选中 MeshInstance3D
- 检查器 Material → 展开 → 新建
StandardMaterial3D - 材质出现子属性,调整即可
💡 StandardMaterial3D 是 Godot 最常用的 PBR 材质(物理渲染)。
常用材质属性属性
- Albedo Color:基础颜色(表面色)
- Metallic:金属度(0 绝缘体、1 金属)
- Roughness:粗糙度(0 镜面光滑、1 粗糙)
- Emission:自发光(发光物体、屏幕)
- Transparency:透明度(玻璃、水)
💡 金属=高 Metallic 低 Roughness;塑料=0 金属中 Roughness;发光=开 Emission。
贴纹理实操
- 准备一张纹理图(如木纹)
- 材质 Albedo → Texture 选纹理图
- Albedo Color 调成白色(否则会和纹理混合)
- UV 自动映射到网格
💡 需要法线贴图(立体感):材质 → Normal → Normal Map。
材质资源复用概念
材质是资源,可独立保存复用:
- 调好材质后,材质资源面板点「保存」按钮 → 存成 .tres
- 多个物体用同一个材质,改一处全部更新
- 批量给多个 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;材质是资源可复用、代码可运行时改。