惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
雷峰网
雷峰网
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog
Y
Y Combinator Blog
WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
小众软件
小众软件
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
博客园 - 叶小钗
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
量子位
The Cloudflare Blog
T
The Blog of Author Tim Ferriss
博客园_首页
B
Blog RSS Feed
Hugging Face - Blog
Hugging Face - Blog
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
L
LangChain Blog
宝玉的分享
宝玉的分享

博客园 - 悉野

go编译期接口断言 / 编译期接口检查(compile-time interface assertion / compile-time interface check) Go 的类型断言 ssh连结vmware中ubuntu的共享文件夹 spring加载冲突问题 spring一个错误修正 抓安卓日记到文件 注册表删除桌面顽固图标 github买的账号无法拉取代码的解决方法 apk常用命令 java服务器异常处理 ES6 学习难度分层 promise原理 TCP与UDP区别 javascript中=>与function的区别 javascript中函数解析过程 cocos使用fgui 几种服务注册与发现的区别 mybatis测试 向量点乘与叉乘 unity画布3种渲染模式 go学习笔记10(HTTP) go学习笔记9(TCP) go学习笔记8(反射) c++简单的线程池 operator new 是 C++ 动态内存分配的核心函数,负责分配原始内存,不调用构造函数 C++的定位放置new(Placement new) go学习笔记7(泛型,文件读写,测试) go学习笔记6(协程与channel,select使用,线程安全,异常处理) go学习笔记5(函数,结构体,自定义类型和类别名,接口) go学习笔记4(数组与切片,map,if,switch,for循环)
材质, 纹理, shader之间的关系
悉野 · 2026-05-11 · via 博客园 - 悉野

可以把“材质、纹理、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

绘画技法(水彩、油画、素描)

材质

整幅画的“配方”:用什么技法 + 什么颜料


六、常见误区澄清

  1. “材质就是贴图?”

    错。材质可能包含贴图,但也包含 Shader 和大量参数。

  2. “Shader 里已经写了贴图,还要材质干嘛?”

    Shader 只是声明“我需要一张贴图”,真正指定“用哪一张”的是材质。

  3. “同一个 Shader,不同物体看起来不一样?”

    因为材质不同(贴图或参数不同),Shader 是复用的。