UE5.8 材质图层与 Mask 混合:地形、血渍与图层控制实战
引子:一张地图上的三种地面和一道血痕
关卡美术小林第一次独立负责一张野外战场的地面材质。地图不大,但美术总监的要求很具体:要有被踩踏过的草地、裸露的泥土地、几块被雨水泡软的石头,再加上几处打斗留下的血渍。小林想着不就是把几张贴图混在一起嘛,打开材质编辑器就开始拖节点。
她用了五个 Texture Sample,再用五张 mask 做线性插值。草地连到 Base Color,泥土连到 Roughness,石头塞进 Normal,血渍通过一张手绘 mask 叠在最上面。节点图很快变成一团乱麻,但小林觉得功能到了就行。结果进游戏一跑,问题全冒出来了。
草地在石头缝隙里发光,像涂了荧光剂。血渍边缘有一圈黑边,像是贴歪了的创可贴。更奇怪的是,镜头拉远后泥土地和草地交界处出现网格状的摩尔纹。小林把 mask 的模糊度调高又调低,黑圈小了,但血渍也变得像一滩红油漆。
TA 阿杰站在旁边看了一会儿,指着节点图说:「你不是在混合材质,你是在把参数搅在一起。草地、泥土、石头、血渍是四种不同的表面,它们应该用图层来组织,而不是用 lerp 硬插。」
那天下午,阿杰带着小林把材质拆成了 Material Layer,用顶点颜色控制草泥过渡,用地形 weight map 控制大范围分布,再拿一张细节 mask 控制血渍的渗透范围。重新跑起来后,血渍沿着石头缝隙自然晕开,草地和泥土的边界有了厚度,远处的摩尔纹也消失了。
这就是 Layered Material 要做的事。
一、Layered Material 到底是什么
Layered Material 不是单指某个节点,而是一种组织材质的方式。它的核心思想是:把复杂的表面拆成若干层,每层负责一种材质外观,再通过某种 mask 控制这些层在哪些地方出现、出现多少。
传统做法是把所有贴图采样和参数运算堆在一个 Material 里,哪里需要混合就用 lerp 插值。这种方式在层数少的时候还能看,一旦超过三层,节点图就会变得难以维护。更关键的是,lerp 参数往往意味着把不同材质的物理属性强行平均,能量不守恒、法线方向混乱、粗糙度失真都会跟着来。
Layered Material 的做法是把每一层封装成可复用的单元。UE5.8 提供了两种主要方式:
- Material Layer 资产:一种特殊的材质资产,可以被其他材质引用,适合标准化图层;
- Material Function 层:把一组节点打包成函数,在父材质里调用,适合轻量组合。
两种方式都能实现分层,Material Layer 更强调复用和一致性,Material Function 更灵活。项目里通常会混合使用:地形、角色皮肤、车辆漆面用 Material Layer,局部细节用 Function。
flowchart TD
subgraph layered ["Layered Material 架构"]
parent["父材质"]
ml1["Material Layer 草地"]
ml2["Material Layer 泥土"]
ml3["Material Layer 石头"]
ml4["Material Layer 血渍"]
mask["Mask 输入"]
output["最终像素"]
end
parent --> ml1
parent --> ml2
parent --> ml3
parent --> ml4
mask --> parent
ml1 --> output
ml2 --> output
ml3 --> output
ml4 --> output上图展示了 Layered Material 的基本结构。父材质持有若干 Material Layer,mask 决定每层在最终像素中的权重,各层再把自己的 BSDF 贡献交给渲染器合并。图里画的是四层的例子,实际项目可能更少也可能更多,取决于性能预算。
二、Material Layer:把图层做成资产
Material Layer 是 UE5.8 中一种独立的资产类型。新建时右键选择 Material 下面的 Material Layer,会得到一个和常规材质很像的编辑器界面,但输出不是最终颜色,而是一组材质属性。
这些属性包括但不限于:
- Base Color
- Metallic
- Specular
- Roughness
- Anisotropy
- Normal
- Tangent
- Emissive Color
- Opacity
- Subsurface Color
- Clear Coat
一个 Material Layer 可以只输出其中一部分。比如草地层可能只输出 Base Color、Roughness、Normal 和 Ambient Occlusion;清漆层可能只输出 Clear Coat 相关的属性。父材质在引用时,会把各层的属性按 mask 权重合并。
Material Layer 的好处在于复用。团队可以建立一个图层库:草地、泥土、石头、金属、混凝土、血迹、积雪等。做新材质时,美术只需要从库里挑选需要的层,再指定 mask,不需要重新连节点。这比对每个材质都复制粘贴节点图要靠谱得多,修改一处就能影响所有引用者。
父材质引用 Material Layer 的方式有两种:
- Material Layer 节点:直接把 Material Layer 资产拖到父材质里,输出引脚会自动列出该层定义的属性;
- Material Attribute Layers 堆栈:在父材质的 Layer 面板里按顺序添加层,系统会自动处理混合。
第二种方式在 UE5.8 中更常用,因为它把层的顺序和 mask 暴露得很清楚,调试时可以直接在面板里调整。
flowchart TD
A["创建 Material Layer 资产"] --> B["定义该层的材质属性"]
B --> C["在父材质中添加 Layer"]
C --> D["为每层指定 Mask"]
D --> E["调整层顺序"]
E --> F["生成最终材质"]Material Layer 不是万能的。它适合表达同一对象表面的材质变化,不适合表达物体的空间结构。比如车身的清漆、金属漆、锈迹可以用 Layered Material;但车门和轮胎是完全不同的对象,应该做成两个独立材质,而不是硬塞进一个 Layered Material 里。
三、顶点颜色 Mask:最便宜的混合控制
顶点颜色是最常用的 mask 来源之一。它的成本极低:颜色数据已经随着网格顶点一起上传到 GPU,不需要额外的贴图采样,也不需要 UV 展开。一张中等密度的静态网格可以存四套顶点颜色,分别对应 R、G、B、A 四个通道。
小林最初做地面时,草地和泥土的过渡是靠一张灰度 mask 控制的。这张 mask 需要独立的贴图采样,还占了一张贴图内存。后来她改用顶点颜色 G 通道:顶点颜色为 0 的地方显示泥土,为 1 的地方显示草地,中间值自然过渡。这样不仅省了一张贴图,过渡也更加平滑,因为顶点颜色会在三角形内部自动插值。
顶点颜色 mask 的公式很简单。假设 Layer A 对应 mask 值 0,Layer B 对应 mask 值 1,那么某一点的混合结果可以写成:
其中 是顶点颜色通道的值, 和 分别是两层输出的材质属性。这个公式在材质编辑器里通常用一个 Lerp 节点就能实现,输入 Alpha 就是顶点颜色。
UE5.8 的材质编辑器里,顶点颜色通过 Vertex Color 节点获取,输出是 float4。用 Component Mask 可以单独取 R、G、B、A 中的任意通道。也可以把两个通道组合起来控制三层:R 控制 Layer A 和 B,G 控制 Layer B 和 C,这样三层只需要两个顶点颜色通道。
顶点颜色的缺点是精度受限于顶点密度。如果网格很稀疏,颜色过渡会被拉大,出现明显的色块。解决方法是:
- 在需要细腻过渡的区域加细分;
- 用贴图 mask 补充高频细节;
- 或者在 DCC 工具里烘焙高模顶点颜色到低模。
另一个常见问题是顶点颜色被误删或覆盖。FBX 导入时默认会保留顶点颜色,但如果模型在 Blender 或 Maya 里经过某些修改器,颜色可能会丢失。项目里应该在导入检查清单里加上「确认顶点颜色存在」这一项。
顶点颜色特别适合地形和大型环境资产。UE5.8 的地形系统本身就用顶点颜色做权重视觉化,美术在 Landscape 编辑器里画的每一笔本质上都是在改顶点颜色。后面讲地形材质层时会再展开。
四、贴图 Mask:控制高频细节
顶点颜色适合做大面积、低频率的过渡,但血渍、裂纹、锈斑这种高频细节需要贴图 mask。贴图 mask 是一张灰度图,白色表示该层权重为 1,黑色表示权重为 0,中间灰度做过渡。
小林的血渍就是典型例子。血渍不是均匀地铺在地面上的,它会沿着石头缝隙渗透,在草地上被吸收后边缘变浅,在泥土上则汇聚成深色的一滩。这种不规则形状用顶点颜色很难画,用一张手绘 mask 就自然得多。
贴图 mask 的采样和普通贴图一样,需要 UV 坐标。通常会用两套 UV:一套给 Base Color、Normal 等大尺寸贴图,另一套给 mask 或细节贴图。如果 mask 需要和模型对齐,比如门上的弹孔、墙上的涂鸦,就要用第二套 UV;如果 mask 只是表达随机分布,比如噪点、污渍,可以直接用世界坐标投影(World Position)来避免拉伸。
多层混合时,mask 的处理顺序很重要。假设有三层:基层泥土、中层草地、顶层血渍。最朴素的做法是:
但如果三个 mask 值 、、 不保证相加为 1,就会出现过曝或欠曝。更稳妥的做法先做归一化:
UE5.8 的地形系统内部就是这么做的,称之为 weight-based blending。在普通 Material Layer 里,如果层的 mask 都是独立控制的,美术需要手动保证权重合理。Material Attribute Layers 堆栈则会在内部做一层归一化,减少人工出错。
贴图 mask 还可以和顶点颜色结合。比如先用顶点颜色控制草地和泥土的大范围分布,再用一张 detail mask 控制血渍在局部是否出现。两者相乘得到最终权重:
这里 是顶点颜色绿色通道, 是血渍贴图 mask。这样血渍只会在原本有草地的区域出现,而且形状由贴图决定。
五、多层混合顺序:谁先谁后
Layered Material 的层顺序不是摆设。即使所有 mask 都相同,交换两层的位置也可能得到完全不同的结果。原因在于,mask 控制的是属性混合,而不是物理堆叠。先混合颜色再混合粗糙度,和先混合粗糙度再混合颜色,数学上并不等价。
考虑两层:草地和泥土。草地层的 Base Color 偏绿、Roughness 偏高;泥土层的 Base Color 偏棕、Roughness 中等。如果先做 Base Color 的 lerp,再做 Roughness 的 lerp,结果是颜色过渡和粗糙度过渡同步,这通常是想要的。
但如果把草地和石头、清漆、锈迹混在一起,情况就复杂了。清漆层不应该和其他层在同一优先级混合,因为它在物理上位于最外层。这时候需要把清漆单独处理,或者用 Substrate 的 Vertical Stack。Material Layer 本身只负责属性合并,不保证物理正确性。
UE5.8 的 Material Attribute Layers 堆栈有一个默认行为:按堆栈顺序从上到下依次混合,每一层的输出会作为下一层的输入。最底层的 Layer 可以勾选 Base Layer,表示它提供默认属性;上层的 Layer 通过 mask 决定是否覆盖或部分覆盖。
sequenceDiagram
participant V as "顶点颜色 Mask"
participant T as "贴图 Mask"
participant L1 as "Layer 1 泥土"
participant L2 as "Layer 2 草地"
participant L3 as "Layer 3 石头"
participant L4 as "Layer 4 血渍"
participant O as "最终属性"
V->>L1: 提供基础权重
V->>L2: 提供过渡权重
T->>L3: 提供局部出现权重
T->>L4: 提供细节渗透权重
L1->>O: Base Color Roughness Normal AO
L2->>O: 按 mask 覆盖部分属性
L3->>O: 在石头区域覆盖
L4->>O: 在缝隙处叠加
O->>O: 归一化后输出这个序列图展示了属性如何一层层叠加。注意最后一层血渍不是完全覆盖,而是只影响 Base Color 和 Roughness, Normal 和 AO 仍然保留下层值。这需要在 Material Layer 里只输出部分属性,或者在父材质里用 mask 精确控制每个属性的混合。
一个常见的错误是把所有层都输出完整属性,再用同一个 mask 全部混合。这样会导致法线被错误地 lerp,因为法线向量不是线性量。正确的做法是只在需要改变的属性上做混合,其他属性保持默认值或继承下层。
法线混合尤其要小心。两个法线贴图不能直接做颜色 lerp,否则会得到错误的方向。UE5.8 提供了 BlendAngleCorrectedNormals 节点,它先把法线从切线空间转换到世界空间,混合后再转回去。Layered Material 如果使用 Material Attribute Layers,系统会自动用法线混合节点处理 Normal 属性。
六、地形材质层: Landscape Layer Blend
地形是 Layered Material 最典型的应用场景。UE5.8 的 Landscape 材质不是普通 Material Layer,而是基于 Landscape Layer Blend 节点。这个节点专门处理地形权重图的采样和混合。
地形权重的来源有几种:
- Landscape Layer Info 对象:在 Content Browser 里创建,和地形关联;
- Weight Map 贴图:美术在 Landscape 编辑器里画出来的数据;
- Height-based Blend:根据地形高度自动混合;
- Slope-based Blend:根据地形的坡度自动混合。
小林的项目里,战场地形用了四层:草地、泥土、石头、碎石。美术在 Landscape 编辑器里用 Layer Info 画出权重:低洼处是泥土,平缓处是草地,陡坡是石头,山顶是碎石。每层对应一张 Weight Map,地形系统会自动按权重混合各层的材质属性。
Landscape Layer Blend 有两种混合模式:
- LB Weight Blend:按权重直接 lerp,权重会被地形系统归一化;
- LB Alpha Blend:按 alpha 值混合,适合作为细节叠加层。
大多数地形层用 Weight Blend。它要求所有激活层的权重之和为 1,地形系统内部会处理这一点。如果美术画的权重图有缝隙,交界处会出现黑色或亮色噪点,通常是因为权重没有正确归一化。
Height-based Blend 很实用。比如雪线以上自动出现积雪层,不需要美术手动画。它的公式可以简化理解为:
其中 是当前顶点高度, 和 是积雪开始和完全覆盖的高度。UE5.8 的 Landscape Layer Blend 节点可以直接读取地形高度并做这种映射。
Slope-based Blend 则适合做岩石裸露效果。坡度平缓处保留泥土或草地,坡度陡峭处露出石头。可以用点乘把地形法线和世界向上向量比较:
其中 是地形法线, 是世界向上向量, 和 是控制岩石出现坡度的阈值。
graph TD
A["Landscape Material"] --> B["Landscape Layer Blend"]
B --> C["Grass Layer"]
B --> D["Dirt Layer"]
B --> E["Rock Layer"]
B --> F["Snow Layer"]
G["Weight Map 草地"] --> C
H["Weight Map 泥土"] --> D
I["Weight Map 石头"] --> E
J["Height Mask"] --> F
K["Slope Mask"] --> E地形材质的性能问题和普通 Layered Material 类似,但有额外的地形系统开销。每层都会增加一张 weight map 的采样,地形材质本身的贴图采样数也随层数线性增长。UE5.8 的地形有最大采样器数量限制,通常建议把层数控制在 6 到 8 层以内,并把不常用的层合并到一张 mask 里。
七、性能考虑:层不是越多越好
每增加一层,材质就要多采样一次 mask、多评估一次 BSDF、多合并一次属性。这些开销会累积到像素着色器里,最终影响帧时间。
评估 Layered Material 的成本可以粗略拆成三块:
- Mask 采样成本:每个 mask 通常至少一次贴图采样,如果用了三平面投影或世界坐标,采样次数还会翻倍;
- 层属性评估成本:每层的 Base Color、Roughness、Normal 等贴图采样和运算;
- 混合成本:lerp、归一化、法线混合等操作的 ALU 指令数。
如果有 层,每层 张贴图,粗略的成本模型是:
其中 是一次贴图采样的平均成本, 是单次混合的固定开销。这个公式不精确,但能说明趋势:层数和每层的贴图数都是主要变量。
优化 Layered Material 的常见做法:
- 合并贴图通道:把 Roughness、Metallic、AO 打包到一张 ORM 贴图里,减少采样次数;
- 降低 mask 分辨率:mask 通常不需要 4K,1K 甚至 512 就够了;
- 共享采样器:如果几层用同一张噪波或细节法线,不要让每层独立采样;
- 控制层的屏幕覆盖面积:只在玩家能近距离看到的区域用复杂 Layered Material,远景用更简单的材质;
- 用顶点颜色代替贴图 mask 做低频控制:省下一次采样;
- 材质实例化:把不变的参数做成 Material Instance,减少 shader permutation。
UE5.8 的 Shader Complexity 视图可以直观地看到哪些像素着色开销高。开发过程中应该经常切到这个视图检查 Layered Material 的实际复杂度,而不是只看节点图美观不美观。
移动端尤其要注意。移动 GPU 的贴图带宽和 ALU 资源都有限,多层混合很容易导致带宽瓶颈。如果项目要兼顾移动平台,建议把 Layered Material 限制在关键资产上,地形层数也要比 PC 端少。
八、与 Substrate 的结合
UE5.8 的 Substrate 系统是分层材质的更高级形式。如果说 Material Layer 是在属性层面做混合,Substrate 就是在 BSDF 层面做物理堆叠。
在普通 Layered Material 里,各层的 Base Color、Roughness、Normal 被 mask 插值后,最终仍然输入到一个 Default Lit 的着色模型里。这意味着层的物理顺序被忽略了:清漆和锈迹可能被当成同一深度的参数混合。
Substrate 则把每一层视为独立的 BSDF。光线先碰到最上层,反射一部分,穿透的部分再进入下一层。这样清漆层的高光和金属漆层的颜色不会互相污染,锈迹可以只在清漆破损处出现。
Material Layer 和 Substrate 可以一起用。每个 Material Layer 内部可以是一个 Substrate BSDF,父材质里再用 mask 控制这些 BSDF 的 Horizontal Mix。这样既能享受 Material Layer 的复用性,又能获得 Substrate 的物理正确性。
flowchart TD
subgraph legacy ["传统 Layered Material"]
l1["Layer A 属性"]
l2["Layer B 属性"]
mix["Mask Lerp"]
lit["Default Lit BSDF"]
end
subgraph substrate ["Substrate Layered Material"]
s1["Clear Coat BSDF"]
s2["Paint Slab BSDF"]
s3["Rust Slab BSDF"]
stack["Vertical Stack"]
hmix["Horizontal Mix"]
root["SubstrateGraph"]
end
l1 --> mix
l2 --> mix
mix --> lit
s1 --> stack
s2 --> stack
stack --> hmix
s3 --> hmix
hmix --> root图中左侧是传统方式:层属性先混合,再进一个 BSDF。右侧是 Substrate 方式:每个层有自己的 BSDF,再通过 Vertical Stack 或 Horizontal Mix 组合,最后交给 SubstrateGraph。
小林后来负责的一个角色盔甲就用上了 Substrate Layer。盔甲基层是金属 Slab,表面叠加一层油漆 Slab,油漆磨损处用 mask 露出下面的金属,再在最外层加一点清漆。这个结构用传统 Default Lit 很难做对,因为金属、油漆、清漆的 Fresnel 行为差异很大,lerp 参数会把它们压平。
Substrate 的代价是更高的着色复杂度和 G-Buffer 内存占用。所以通常的做法是:远景和次要物体用普通 Layered Material,关键角色、武器、载具用 Substrate Layered Material。
九、实战:重新做那张战场地面
回到小林的项目。阿杰带她重新梳理了战场地面材质的完整流程。
9.1 拆分图层
战场地面被拆成四个 Material Layer:
- ML_Dirt:泥土基层,作为默认层;
- ML_Grass:草地层,覆盖在泥土之上;
- ML_Stone:石头层,只在局部露出;
- ML_Blood:血渍层,叠加在最上面,只影响颜色和粗糙度。
每个 Layer 只输出必要的属性。ML_Dirt 和 ML_Grass 输出 Base Color、Roughness、Normal、AO。ML_Stone 额外输出 Height,用于和周围做更好的混合。ML_Blood 只输出 Base Color 和 Roughness,Normal 继承下层,避免血渍改变地面凹凸。
9.2 Mask 来源
- 泥土和草地的过渡用顶点颜色 G 通道;
- 石头的分布用一张手绘 mask,乘以一个基于坡度的 mask;
- 血渍用一张细节 mask,再乘以顶点颜色 R 通道,让血渍只出现在特定区域。
最终血渍的权重写成:
其中 是顶点颜色 R 通道, 是血渍贴图 mask, 是石头权重。乘以 是为了避免血渍铺在石头上,因为石头表面不太会吸饱血迹。
9.3 层顺序
Material Attribute Layers 堆栈的顺序从上到下是:
- ML_Dirt(Base Layer)
- ML_Grass
- ML_Stone
- ML_Blood
血渍在最上面,只覆盖 Base Color 和 Roughness。石头在草地之上,但 mask 让它只在局部出现。草地通过顶点颜色和泥土自然过渡。
9.4 材质函数里的片段
下面是一个简化版的 HLSL 风格伪代码,展示 Layered Material 的混合逻辑。这不是完整可编译的代码,但能帮助理解内部运算:
// 采样 mask
float vGrass = VertexColor.g;
float vBlood = VertexColor.r;
float tStone = tex2D(T_StoneMask, UV).r;
float tBlood = tex2D(T_BloodMask, UV).r;
float slopeMask = saturate(1.0 - dot(WorldNormal, float3(0,0,1)));
// 石头权重受坡度和贴图共同影响
float mStone = tStone * slopeMask;
// 血渍权重
float mBlood = vBlood * tBlood * (1.0 - mStone);
// 草地和泥土互补
float mGrass = vGrass * (1.0 - mStone);
float mDirt = 1.0 - saturate(mGrass + mStone + mBlood);
// 归一化
float sum = mDirt + mGrass + mStone + mBlood;
mDirt /= sum; mGrass /= sum; mStone /= sum; mBlood /= sum;
// 合并属性
FGBufferData Out;
Out.BaseColor = mDirt * Dirt.BaseColor + mGrass * Grass.BaseColor
+ mStone * Stone.BaseColor + mBlood * Blood.BaseColor;
Out.Roughness = mDirt * Dirt.Roughness + mGrass * Grass.Roughness
+ mStone * Stone.Roughness + mBlood * Blood.Roughness;
Out.Normal = BlendAngleCorrectedNormals(
mDirt * Dirt.Normal + mGrass * Grass.Normal + mStone * Stone.Normal,
Blood.Normal
);这段代码省略了贴图采样的 UV 变换、法线混合的细节和能量守恒处理,但核心逻辑已经表达清楚。实际在 UE5.8 里,这些运算由 Material Layer 节点和 Landscape Layer Blend 节点自动完成。
9.5 调试过程
小林先用 Shader Complexity 视图检查,发现石头层的一张 4K mask 拉高了整片区域的复杂度。她把那张 mask 降到 1K,复杂度立刻降了一档,但视觉上几乎没区别。
接着她用 Material Layer 调试视图 单独看每一层的贡献。草地层的 Normal 在远处出现了重复的 tiling,她把草地 Normal 换成了一张无缝的细节法线,并在材质里加了一个 world-space 噪波来打破重复。
血渍最初还是有一点黑边。阿杰让她把血渍 mask 从 Linear 改成用一张略带羽化的手绘图,并把 Blood Layer 的 Blend Mode 从 Weighted 改为 Alpha Blend,黑边就消失了。
十、常见错误与排查
错误一:mask 没有归一化。多个 mask 直接相加超过 1,导致某些区域过亮或颜色发灰。解决方式是在相加后做 saturate 和归一化,或者使用 Material Attribute Layers 让引擎处理。
错误二:法线直接做颜色 lerp。两个法线贴图 lerp 后会出现错误方向,尤其是当两层法线差异较大时。应该用法线混合节点或只在同一法线基底下混合颜色属性。
错误三:所有层都输出完整属性。这会让不需要改变的属性也被覆盖,增加复杂度和出错概率。每个 Layer 只输出该层真正需要修改的属性。
错误四:mask 分辨率过高。很多 mask 不需要 4K,过高的分辨率只会浪费显存和带宽。根据实际屏幕占比选择合适的尺寸。
错误五:Layer 顺序和物理顺序不一致。清漆、锈迹、泥土等层如果物理上有上下关系,但用普通 Material Layer 按权重混合,会失去体积感。这种情况下应该考虑 Substrate。
错误六:地形 weight map 没有正确烘焙。Landscape Layer 的 Weight Map 如果丢失或未关联,地形会显示成默认的黑色或棋盘格。保存地形时要确认所有 Layer Info 都正确链接。
十一、写在最后
小林那张战场地面最后通过了验收。镜头从低角度扫过去,草地和泥土的交界处不再发亮,石头的缝隙里有淡淡的阴影,血渍沿着地面的起伏自然晕开。她没有增加更多贴图,只是把同一组素材用 Layer 和 Mask 重新组织了一遍。
Layered Material 的本质不是让材质更复杂,而是让复杂材质更可管理。它把一张大网拆成若干根线,每根线负责一种表面,再用 mask 决定这些线在哪里交织。只要层拆得合理、mask 用得恰当,画面质量和性能都能兼顾。
UE5.8 提供了 Material Layer、顶点颜色、贴图 mask、地形 Layer Blend、Substrate 等一整套工具。它们各有适用场景:
- 顶点颜色适合低成本、大面积的过渡;
- 贴图 mask 适合高频细节和不规则形状;
- Material Layer 适合标准化和复用;
- Landscape Layer Blend 适合地形;
- Substrate 适合需要物理堆叠的多层表面。
阿杰给小林定了一条简单规则:先用 Material Layer 把层拆清楚,再用最便宜的 mask 控制每层,最后只在关键资产上启用 Substrate。这条规则帮她在后面几个关卡里少踩了很多坑。
材质图层和 Mask 混合不是新功能,但 UE5.8 把它们整合得更加顺手。对于每天都在和贴图、mask、节点图打交道的美术和 TA 来说,这套工具最大的价值在于:让每一种材质都待在自己该在的位置,而不是被揉成一团。