
观众老爷们大家好 我是邪修KING 欢迎来到我的TA->UE游戏引擎博客---进阶篇! C++!UE5精品!精选学习! 上一篇我们完成了 UE 中期架构升级,掌握了组件化开发与 Gameplay 框架,解决了代码逻辑的可维护性问题。本篇我们将进入技术美术(TA)的核心领域 ------材质与纹理艺术 。材质是决定游戏视觉品质的第一要素 ,也是区分普通开发者和专业 TA 的核心分水岭。我会从底层物理原理讲起,结合 UE 材质编辑器的实战操作,进行系统掌握工业级材质的制作方法。
学习前提:有 UE 基础操作经验、希望向 TA 方向发展的开发者,或想提升游戏视觉品质的程序 / 美术。无需深厚美术基础,重点讲解可复制的技术方法与底层逻辑。
前置准备
1.已掌握 UE 基础操作,能创建简单材质并赋予物体
2.了解基本的色彩理论与 3D 坐标系统
【[ 学习链接速成!]一次性讲清色彩与配色,色彩基础+色环使用+配色理论+色系认知+上色实战全方位扫盲色彩知识!】 https://www.bilibili.com/video/BV1AovrezE9j/?share_source=copy_web\&vd_source=fd04669a3f0f6a74eab6813325ed25d8
3.推荐安装:Substance Designer 2023+(程序化纹理制作)、Quixel Mixer(纹理混合)
4.引擎版本:UE5.1+(推荐 5.3 及以上,对 PBR 和虚拟纹理有大幅优化)
一、PBR 材质体系:所有材质的物理基础
PBR(基于物理的渲染)是现代游戏引擎的标准渲染方式,它不是一种特定的技术,而是一套基于物理光学原理的渲染规范。所有现代游戏的材质都建立在 PBR 体系之上,不理解 PBR,永远只能做出 "看起来假" 的材质。
1.1 核心物理原理:为什么你的材质看起来假?
所有 PBR 材质都遵循三个核心物理定律,违反任何一个都会导致材质不真实:
(1)能量守恒(Energy Conservation)
**核心原理:**物体反射的光能量永远不会超过它接收到的光能量。
漫反射(Diffuse):光进入物体内部,经过多次散射后反射出来,能量会衰减
镜面反射(Specular):光在物体表面直接反射,能量衰减较少
两者之和 ≤ 1.0
UE 中的实现与注意事项:
UE 的标准材质节点已经内置了能量守恒,不要手动同时提高基础色和高光的亮度
常见错误:给黑色塑料设置 0.8 的高光强度,同时基础色设为白色,导致总能量超过 1,材质会 "过曝发飘"
验证方法:在材质编辑器中按下Alt+2查看能量守恒模式,红色区域表示能量超标
(2)菲涅尔效应(Fresnel Effect)
核心原理 :物体的反射率会随着观察角度的变化而变化。视线与物体表面法线的夹角越大,反射率越高。
垂直观察(夹角 0°):反射率最低,看到的主要是物体本身的颜色
掠射观察(夹角 90°):反射率最高,几乎所有物体都会变成镜面
UE 中的实现与注意事项:
使用Fresnel节点或Lerp节点配合Dot Product实现
不同材质的菲涅尔指数不同:
金属:菲涅尔效应弱,指数约 2-3
非金属:菲涅尔效应强,指数约 4-6
玻璃 / 水:菲涅尔效应极强,指数约 10-15
常见错误:所有材质都用默认的菲涅尔参数,导致玻璃反射太弱,金属反射太强
(3)微表面理论(Microfacet Theory)
核心原理 :所有物体的表面在微观层面都是粗糙不平的,粗糙度决定了镜面反射的模糊程度。
粗糙度 = 0:表面绝对光滑,镜面反射是清晰的镜像
粗糙度 = 1:表面绝对粗糙,镜面反射完全扩散,变成漫反射
UE 中的实现与注意事项:
UE 使用粗糙度(Roughness) 工作流,而非光泽度(Glossiness)
粗糙度贴图是灰度图,黑色代表光滑,白色代表粗糙
常见错误:粗糙度贴图对比度太低,导致材质看起来 "灰蒙蒙" 没有层次;或者全黑全白,没有细节
1.2 金属度 / 粗糙度工作流:UE 的标准选择
UE 默认使用金属度(Metallic)/ 粗糙度工作流,这也是目前工业界的主流标准。它通过两个核心参数来区分所有材质:
| 参数 | 取值范围 | 作用 | 非金属(塑料 / 木头 / 皮肤) | 金属(铁 / 铜 / 金) |
|---|---|---|---|---|
| 基础色(Base Color) | RGB(0,0,0) - RGB(1,1,1) | 物体的漫反射颜色 | 物体本身的颜色(如棕色木头、白色塑料) | 黑色(金属没有漫反射,所有颜色都来自镜面反射) |
| 金属度(Metallic) | 0.0 - 1.0 | 区分金属和非金属 | 0.0 | 1.0 |
| 粗糙度(Roughness) | 0.0 - 1.0 | 控制镜面反射的模糊程度 | 根据材质表面光滑度调整(如光滑塑料 0.1,粗糙木头 0.8) | 根据金属表面磨损程度调整(如抛光金属 0.0,生锈金属 0.9) |
| 高光(Specular) | 0.0 - 1.0 | 控制非金属的镜面反射强度 | 0.5(默认值,绝大多数非金属都适用) | 无效(金属的高光由基础色控制) |
关键注意事项:
金属度只有 0 和 1 两个有效值 ,不要用 0.5 之类的中间值。世界上没有 "半金属" 的物质,中间值只会导致材质看起来像脏塑料
金属的颜色全部放在基础色 通道,不要在高光通道给金属加颜色
非金属的高光通道保持默认 0.5 即可,不要随意修改,否则会违反能量守恒
1.3 与高光 / 光泽度工作流的对比
有些软件(如 3ds Max、V-Ray)使用高光 / 光泽度工作流,两者的核心区别是:
金属度工作流 :用一个通道明确区分金属和非金属,逻辑更清晰,更容易上手
高光工作流 :用高光颜色通道控制金属的颜色,灵活性更高,但更容易出错
UE 中的转换方法:
高光贴图转金属度贴图:Metallic = 1.0 - (Specular.R * 0.2126 + Specular.G * 0.7152 + Specular.B * 0.0722)
光泽度贴图转粗糙度贴图:Roughness = 1.0 - Glossiness
二、8 种常见材质的美术特征与 UE 实现要点
掌握了 PBR 基础后,我们来拆解工业界最常用的 8 种材质,每种材质都有其独特的美术特征和实现技巧。
2.1 金属材质
核心美术特征:
没有漫反射,所有颜色都来自镜面反射
反射率高,菲涅尔效应弱
表面磨损处会露出底层金属或氧化层
UE 实现要点:
基础色:金属的本色(如铁是深灰色、铜是红棕色、金是黄色)
金属度:1.0
粗糙度:根据表面状态调整(抛光 0.0-0.1,拉丝 0.2-0.4,生锈 0.7-0.9)
高级技巧:用粗糙度贴图模拟磨损痕迹,用顶点色控制不同区域的氧化程度
常见错误:
给金属加漫反射颜色,导致看起来像塑料
金属度设为 0.5,变成 "脏塑料"
粗糙度太高,导致金属没有光泽
2.2 塑料材质
核心美术特征:
有明显的漫反射颜色
镜面反射清晰,高光小而亮
菲涅尔效应中等
UE 实现要点:
基础色:塑料的颜色(如红色、蓝色、白色)
金属度:0.0
粗糙度:0.1-0.3(光滑塑料),0.4-0.6(磨砂塑料)
高光:保持默认 0.5
高级技巧:用法线贴图模拟塑料表面的纹理,用自发光通道模拟透明塑料的透光效果
2.3 玻璃材质
核心美术特征:
高透明度,能看到背后的物体
有折射效果,光线穿过时会弯曲
菲涅尔效应极强,边缘反射率接近 100%
UE 实现要点 :
1.材质混合模式:透明(Translucent) 或 表面透明(Surface Translucency)
2.基础色:玻璃的颜色(如无色是白色,蓝色玻璃是淡蓝色)
3.金属度:0.0
4.粗糙度:0.0-0.1(越光滑的玻璃粗糙度越低)
5.折射:开启折射通道,折射率(IOR)设为 1.52(普通玻璃)
6.高级技巧:用菲涅尔节点控制透明度,边缘不透明,中心透明,更符合物理规律
注意事项:
透明材质排序问题:UE 会从后往前渲染透明物体,多个透明物体重叠时可能出现排序错误
性能问题:透明材质比不透明材质慢 3-5 倍,尽量减少场景中透明物体的数量
2.4 皮肤材质
核心美术特征:
次表面散射(SSS):光线穿过皮肤表层,在内部散射后透出,呈现出柔和的半透明效果
菲涅尔效应明显,边缘偏红
表面有细微的毛孔和皱纹
UE 实现要点:
材质着色模型:次表面散射(Subsurface Profile)
基础色:皮肤的颜色(注意不要太红,亚洲人皮肤偏黄)
金属度:0.0
粗糙度:0.4-0.6(脸部皮肤较光滑,手掌较粗糙)
次表面颜色:淡红色,控制次表面散射的颜色
高级技巧:用细节法线贴图模拟毛孔,用顶点色控制不同区域的次表面散射强度
2.5 布料材质
核心美术特征:
表面有织物纹理,粗糙度较高
各向异性反射:不同方向的反射强度不同(如丝绸的高光呈条状)
边缘有轻微的透光效果
UE 实现要点:
基础色:布料的颜色
金属度:0.0
粗糙度:0.6-0.9(棉布较粗糙,丝绸较光滑)
各向异性:开启各向异性通道,用纹理控制各向异性的方向和强度
高级技巧:用布料模拟节点制作褶皱效果,用顶点色控制不同区域的粗糙度
2.6 水体材质
核心美术特征:
动态的波浪效果
透明与反射的结合
水下有焦散效果
表面有泡沫
UE 实现要点:
材质混合模式:透明
基础色:水的颜色(深海是深蓝色,浅海是淡蓝色)
金属度:0.0
粗糙度:0.0-0.2
法线:用两张不同速度滚动的法线贴图叠加,模拟波浪效果
高级技巧:用深度缓冲模拟水的透明度,近处透明,远处不透明;用粒子系统模拟泡沫
2.7 地形材质
核心美术特征:
多层材质混合(如草地、泥土、石头、雪)
不同层之间有自然的过渡
有远距离的细节纹理
UE 实现要点:
使用 UE 的地形材质系统 ,支持最多 16 层材质混合
用高度图控制层之间的过渡,高处是石头,低处是泥土
用坡度控制层之间的过渡,陡坡是石头,缓坡是草地
高级技巧:用虚拟纹理解决大地形的纹理分辨率问题,用距离场纹理模拟远距离细节
2.8 毛发材质
核心美术特征:
极其细微的纤维结构
各向异性反射非常明显
有自阴影效果
UE 实现要点:
使用 UE 的Groom 系统制作毛发
毛发材质着色模型:毛发(Hair)
基础色:毛发的颜色
粗糙度:0.2-0.4
各向异性:0.8-0.9
高级技巧:用毛发卡片技术制作大面积毛发,用顶点色控制毛发的长度和方向
三、材质分层技术:工业级材质的核心
简单的单一层材质只能表现基础效果,工业级游戏中的材质几乎都是多层混合的。材质分层技术可以让你在一个材质中叠加多个效果,模拟出极其丰富的细节。
3.1 多层材质混合的核心原理
核心思想 :将复杂的材质拆分成多个基础层,然后用遮罩(Mask)控制每层的显示区域,最后将所有层混合在一起。
常见的分层方式:
基础层:材质的主要颜色和质感
细节层:叠加细微的纹理细节,如划痕、污渍、磨损
特效层:叠加自发光、反射、折射等特效
顶层:叠加灰尘、雨水、积雪等环境效果
3.2 UE 中实现分层材质的方法
(1)使用 Lerp 节点混合
这是最基础也是最常用的方法,用一个灰度遮罩图控制两个层的混合比例。
| plaintest |
|---|
| LayerA → Lerp(A) |
| LayerB → Lerp(B) |
| Mask → Lerp(Alpha) |
| Output → Lerp(Result) |
Mask 中黑色区域显示 LayerA,白色区域显示 LayerB
灰色区域显示两者的混合效果
(2)使用高度图混合
用高度图控制层之间的过渡,可以实现更自然的磨损效果。比如金属表面的划痕,划痕处会露出底层的金属。
高度图中白色区域是凸起的,黑色区域是凹陷的
用HeightLerp节点实现基于高度的混合
(3)使用顶点色混合
用模型的顶点色通道控制层的混合,不需要额外的纹理贴图,非常适合快速迭代。
UE 支持 4 个顶点色通道(R、G、B、A),可以控制 4 层材质的混合
可以在 UE 中直接用顶点绘制工具绘制顶点色
3.3 细节纹理叠加技巧
细节纹理是提升材质质感的关键,它可以在不增加主纹理分辨率的情况下,增加材质的细微细节。
实现方法:
1.准备一张高分辨率的细节纹理(如划痕、污渍、噪点)
2.将细节纹理的平铺次数设为 10-100 倍,使其在模型表面重复
3.用Multiply节点将细节纹理与主纹理的基础色、粗糙度或法线相乘
用一个参数控制细节纹理的强度,方便调整
注意事项:
细节纹理的强度不要太高,否则会盖过主纹理的效果
不同材质使用不同的细节纹理,避免所有材质看起来都一样
法线细节纹理的强度要比基础色细节纹理低,否则会导致表面过于凹凸不平
四、程序化纹理:无限细节的生成技术
程序化纹理是通过数学函数和算法生成的纹理,不需要手绘,具有无限分辨率、可参数化调整的优点,是现代 TA 必备的技能。
4.1 UE 中用数学节点生成基础纹理
UE 材质编辑器本身就是一个强大的程序化纹理生成工具,你可以用基础数学节点生成各种常用纹理:
| 纹理类型 | 实现方法 | 用途 |
|---|---|---|
| 渐变纹理 | Gradient节点 + Time节点 | 背景、过渡效果 |
| 棋盘格纹理 | Checkerboard节点 | 测试材质、地砖 |
| 噪声纹理 | Noise节点 | 地形、水面、污渍 |
| 细胞纹理 | Cellular节点 | 皮肤、石头、泡沫 |
| 分形纹理 | 多个噪声节点叠加 | 山脉、云朵、大理石 |
示例:生成大理石纹理
| plaintext |
|---|
| Time → 正弦节点 → 乘以0.1 → 加上噪声节点 → 乘以5 → 取绝对值 → 减去0.5 → 乘以2 → 作为基础色 |
4.2 Substance Designer 核心逻辑
Substance Designer 是工业界标准的程序化纹理制作软件,它的核心逻辑是节点式的流程化生成。
核心节点:
形状节点:生成基础形状(如圆形、方形、线条)
变换节点:对形状进行平移、旋转、缩放、扭曲
混合节点:将多个形状混合在一起
滤镜节点:对纹理进行模糊、锐化、色阶调整
输出节点:输出基础色、金属度、粗糙度、法线等贴图
工作流程:
分析材质的结构,拆分成多个基础元素
用形状节点生成每个基础元素
用变换和混合节点组合元素
用滤镜节点添加细节和质感
导出 PBR 贴图到 UE 中使用
4.3 程序化纹理的优势与适用场景
优势:
无限分辨率,放大后不会模糊
可参数化调整,修改一个参数就能改变整个纹理的效果
文件体积小,一个 SD 文件只有几 MB
易于版本控制和团队协作
适用场景:
地形、岩石、水面等自然材质
金属、塑料等工业材质
污渍、划痕、磨损等细节纹理
需要大量变体的材质(如不同颜色的衣服、不同款式的武器)
五、UE 材质编辑器高级技巧:工程化与性能优化
掌握了基础的材质制作后,你需要学习 UE 材质编辑器的高级技巧,提高工作效率,优化材质性能。
5.1 材质实例(Material Instance)
材质实例是基于父材质创建的实例,它可以继承父材质的所有逻辑,同时可以修改父材质暴露的参数。
核心优势:
提高工作效率:修改父材质,所有实例都会自动更新
节省内存:多个实例共享同一个父材质的 Shader 代码
便于美术调整:美术不需要懂材质逻辑,只需要调整参数即可
最佳实践:
一个父材质对应一类材质(如所有金属材质用一个父材质)
只暴露必要的参数,不要暴露所有节点
使用参数组对参数进行分类,方便查找
给参数设置合理的默认值和取值范围
5.2 材质函数(Material Function)
材质函数是将常用的材质逻辑封装成一个节点,可以在多个材质中重复使用。
常用的材质函数:
菲涅尔函数
三平面映射函数
细节纹理叠加函数
高度混合函数
最佳实践:
每个材质函数只做一件事
给函数和参数添加清晰的注释
将常用的函数整理成一个函数库
避免在材质函数中使用全局变量,保持函数的独立性
5.3 材质参数集(Material Parameter Collection)
材质参数集是一个全局的参数集合,可以被所有材质访问,用于控制全局的视觉效果。
适用场景:
全局光照强度调整
全局颜色校正
天气系统控制(如下雨、下雪)
游戏时间控制(如白天黑夜切换)
最佳实践:
不要在参数集中放太多参数,按功能分成多个参数集
给参数添加清晰的命名和注释
避免在 Tick 中频繁修改参数集的参数
5.4 虚拟纹理(Virtual Texture)
虚拟纹理是 UE5 引入的一项革命性技术,它可以将超大的纹理(如 16384x16384)分成多个小块,只加载当前相机可见的部分,极大地节省了内存。
适用场景:
大场景地形纹理
高精度的建筑纹理
影视级的角色纹理
注意事项:
虚拟纹理需要额外的硬盘空间存储缓存
不适合频繁变化的纹理
移动平台对虚拟纹理的支持有限
六、TA 材质制作避坑指南
永远不要违反 PBR 物理规则 :这是材质真实感的基础,任何违反物理规则的调整都会导致材质看起来假
不要使用过高的纹理分辨率 :4096x4096 已经足够绝大多数场景使用,8192x8192 只用于特写镜头
合理使用纹理压缩 :UE 提供了多种纹理压缩格式,根据纹理类型选择合适的压缩格式,节省内存
1.基础色:BC1/DXT1(不透明)、BC3/DXT5(透明)
2.法线:BC5/ATI2
3.金属度 / 粗糙度:BC4(单独通道)
避免过度使用复杂节点 :一个材质的节点数不要超过 100 个,复杂的逻辑拆分成材质函数
开启材质 LOD :远距离的物体使用低精度的材质,减少 Shader 计算量
不要在透明材质中使用复杂的计算 :透明材质本身性能就差,复杂计算会导致帧率大幅下降
统一材质命名规范 :如M_金属_铁_抛光、MI_塑料_红色_磨砂,方便团队查找和管理
测试不同光照环境 :材质在不同的光照下表现会完全不同,一定要在游戏的实际光照环境中测试
注意材质的可维护性 :给节点添加清晰的注释,使用组对节点进行分类,方便后续修改
平衡视觉效果和性能:TA 的核心工作不是做出最漂亮的材质,而是在有限的性能预算内做出最好的视觉效果
七、本篇总结
我们系统学习了 UE 材质与纹理艺术的核心知识,从底层 PBR 物理原理到工业级材质的制作技巧,覆盖了 TA 入门到进阶的核心内容。核心重点掌握 :
理解了 PBR 材质体系的三大物理定律,掌握了金属度 / 粗糙度工作流的正确使用方法
拆解了 8 种常见材质的美术特征与 UE 实现要点,能独立制作工业级标准的材质
掌握了材质分层技术和程序化纹理生成方法,能制作出细节丰富的复杂材质
学会了 UE 材质编辑器的高级技巧,能高效地制作和管理材质,同时优化性能
