9. 材质与着色器
2026/4/14大约 3 分钟
材质与着色器
模型只是形状,材质决定它"看起来像什么"。同样是方块,加上不同材质,可以是木头、金属、石头或玻璃。
什么是材质
材质就是定义物体表面外观的一组规则。它告诉渲染引擎:
- 这个表面是什么颜色的?(Albedo)
- 表面有多粗糙?(Roughness)
- 表面有多像金属?(Metallic)
- 表面有没有凹凸细节?(Normal Map)
StandardMaterial3D
Godot 4.x 的默认材质类型是 StandardMaterial3D,它使用 PBR(基于物理的渲染)。
创建方式:
- 在 MeshInstance3D 的
Surface Material Override属性中 - 选择
New StandardMaterial3D
常用参数
| 参数 | 作用 | 新手建议 |
|---|---|---|
Albedo Color | 基本颜色 | 先用纯色调试 |
Albedo Texture | 颜色贴图 | 后期替换为真实贴图 |
Metallic | 金属度(0-1) | 金属设为 1,非金属设为 0 |
Roughness | 粗糙度(0-1) | 镜面=0,粗糙表面=1 |
Normal Texture | 法线贴图 | 添加表面细节(不影响形状) |
Emission | 自发光 | 让物体自己发光(如屏幕、灯) |
Transparency | 透明度 | 做玻璃、水等透明物体 |
贴图通道详解
一个完整的 PBR 材质通常需要多张贴图:
Albedo(反照率)贴图
就是物体表面的颜色照片。比如木头的纹理、砖墙的花纹。
Normal(法线)贴图
不用增加模型面数就能增加表面凹凸细节的"魔法贴图"。比如一个平面加上砖墙法线贴图后,看起来就有砖缝了。
Roughness(粗糙度)贴图
用灰度图控制表面哪里粗糙、哪里光滑。白色=粗糙(不反光),黑色=光滑(反光)。
Metallic(金属度)贴图
控制表面哪里像金属、哪里不像。白色=金属,黑色=非金属。
Shader(着色器)
当 StandardMaterial3D 满足不了你的需求时,就需要写自定义 Shader。
什么时候需要自己写 Shader
- 水面效果(波浪、反射、透明)
- 卡通渲染(轮廓线、色块光影)
- 特殊粒子效果
- 扭曲效果(热浪、透视等)
- 程序化纹理(用代码生成图案)
Shader 基础
Godot 使用自己的 Shader 语言(类似 GLSL)。
GLSL
// Godot Shader: 简单的颜色渐变
shader_type spatial;
void fragment() {
// 根据UV坐标做从红到蓝的渐变
ALBEDO = vec3(UV.x, 0.0, 1.0 - UV.x);
}使用 VisualShader
如果你不想写代码,Godot 提供了可视化 Shader 编辑器:
- 创建
New Shader - 选择
Shader Type → VisualShader - 拖拽节点来连接效果
- 比写代码直观,但功能完全一样
材质复用
多个物体可以共用同一个材质。修改材质时,所有使用它的物体都会更新。
建议:
- 把常用材质保存为
.tres文件 - 放在
assets/materials/目录下统一管理
常见问题
模型导入后全灰色?
模型没有材质。添加 StandardMaterial3D 并设置 Albedo Color 即可。
贴图看起来很模糊?
检查贴图导入设置中的 Filter 模式。像素风格游戏应该关闭过滤(设为 Nearest)。
材质在远处变暗?
这是 Godot 的默认行为,为了节省性能。可以在项目设置中调大 Rendering → Texture → Decals → Texture 的相关参数。
