材质, 纹理, shader之间的关系
可以把“材质、纹理、Shader”理解为决定物体“看起来什么样”的三层结构:
材质 = 配置文件,纹理 = 贴图数据,Shader = 计算规则。三者缺一不可,又各司其职。
一、纹理(Texture):表面的“像素数据”
1. 纹理是什么
-
纹理本质上是一张或多张图像(像素数组)。
-
它不关心“怎么用”,只负责存储颜色/数值信息,供 GPU 读取。
2. 常见纹理类型
|
纹理类型
|
作用
|
|---|---|
|
漫反射纹理(Albedo/Base Color)
|
表面基础颜色,如皮肤色、木头纹路
|
|
法线纹理(Normal Map)
|
扰动法线方向,模拟凹凸细节
|
|
粗糙度 / 光泽度纹理
|
控制表面粗糙还是光滑
|
|
金属度纹理(Metallic)
|
区分金属 / 非金属区域
|
|
AO 纹理(Ambient Occlusion)
|
阴影遮蔽,增强缝隙暗部
|
|
高度 / 置换纹理
|
实际移动顶点,产生几何起伏
|
可以把纹理理解为:给 Shader 准备的“原材料”。
二、Shader:渲染计算的“程序算法”
1. Shader 是什么
-
Shader 是运行在 GPU 上的小程序。
-
它定义了:
-
顶点如何变换(Vertex Shader)
-
每个像素最终颜色怎么算(Fragment/Pixel Shader)
-
2. Shader 的核心职责
-
读取纹理中的数值
-
结合光照模型(如 Blinn-Phong、PBR)
-
计算最终显示在屏幕上的颜色
示例简化逻辑:
Shader 不存“具体长什么样”,它只规定“如果有这些数据,该怎么算”。
三、材质(Material):连接纹理和 Shader 的“配置表”
1. 材质是什么
-
材质是一个资源/参数集合。
-
它的作用是:
-
指定使用哪个 Shader
-
为这个 Shader 提供具体的纹理和参数值
-
2. 材质中包含的内容
-
Shader 引用(例如:
PBRShader) -
纹理赋值:
-
Albedo Map = “Wood.png”
-
Normal Map = “Wood_Normal.png”
-
-
标量参数:
-
金属度 = 0.2
-
粗糙度 = 0.6
-
自发光强度 = 1.5
-
材质相当于:“用这个 Shader + 这些贴图 + 这些数值,去画这个物体”。四、三者关系总结(核心理解)
一句话概括:Shader 决定“计算方法”,纹理提供“输入数据”,材质把两者绑定在一起并应用到具体物体。工作流程示意
五、一个直观类比:画画
图形概念 现实类比 模型 画布形状(画在纸上还是木板上) 纹理 颜料、照片素材 Shader 绘画技法(水彩、油画、素描) 材质 整幅画的“配方”:用什么技法 + 什么颜料
六、常见误区澄清
“材质就是贴图?”错。材质可能包含贴图,但也包含 Shader 和大量参数。 “Shader 里已经写了贴图,还要材质干嘛?”Shader 只是声明“我需要一张贴图”,真正指定“用哪一张”的是材质。 “同一个 Shader,不同物体看起来不一样?”因为材质不同(贴图或参数不同),Shader 是复用的。
浙公网安备 33010602011771号