# 材质蓝图入门1

此为UE4材质的学习笔记。参考资料如下:

# 模型着色

模型主要有三种着色方式:

  1. 顶点着色:无法表现更多细节,高效。
  2. 贴图着色:从平面贴图到3D模型需要映射,这个过程叫UV映射或贴图坐标系映射。
  3. 混合使用:顶点着色作为灯光烘焙效果,叠加在贴图上。

这里主要讲贴图着色。

# 贴图着色

# UV和UV坐标系

有两个概念需要搞懂:

  1. UV(贴图坐标)
  2. Texture Coordinate(贴图坐标系)

可以把贴图坐标系想象成画布,而UV是其上的内容,横向为U方向,纵向为V方向,长度均为1,UV指的是坐标系上具体的方块。

UVIntro

# UV展开

UV主要有三种展开方式:

  1. 完全展开,全部放到0-1空间,很少对此类模型的材质UV做手脚,不会在引擎中对其UV做进一步处理。
  2. Tiling展开,容易很多,展平就行。比如墙面。这种情况经常在引擎对UV做进一步处理。
  3. 不展开,使用世界坐标作为UV。

# UV通道

UV通道是在建模的时候指定好的,可以设置两种展开UV方式,第二套贴图一般是在灯光烘焙时用的,在导入模型是,可以勾选Generate Lightmap UV,这个时候会自动生成第二套UV。

在UE4中使用其他通道,是在TexCoord节点的Coordinate Index来指定其他通道。0是第一套,1是第二套。

# 贴图和材质

贴图(Texture)仅仅是一张图片,它有很多形式,比如图片文件,程序化生成的渐变色,3D场景的深度信息采样,或者是3D物体的颜色位置信息,总之贴图就是颜色数据的集合。

材质(Material)是一串揭示表面如何同光交互的指令,比如它们是否透明,是否发光或者吸收光,以及其他属性。

在UE4的材质编辑器中我们创建或者改变贴图,把他们输出到输出节点来创建材质。

# 材质和材质实例

材质可以暴露参数给材质实例,这样材质实例便可以通过修改参数来定制材质。

如果要查看材质实例和材质的对应关系,可以在材质实例中查看Parent,或者在材质编辑器中查看Hierarchy。

在材质编辑器中要快速查看节点关系,可以打开hide unrelated,这样会把不相关的节点变为灰色。

# 表面材质

此处主要讲Material Domain中几种blend mode:

  • Opaque:不透明的。比如金属,石头,木头以及其它不透明的材质可以使用这个。
  • Masked:蒙版。要透明的部分全透明,不需要透明的部分完全不透明,比如树叶,像剪切下来的一样,不会出现半透明。
  • Translucent:半透明,比如玻璃,这时Metallic,Specular,Roughness变灰色,这些是和光反射有关的,也就是半透明默认是不支持光反射,在光照模型(Lighting Mode)中,可以切换为支持光反射的(Surface TranslucencyVolume),但是切换为这个模型代价会比较高,游戏性能会下降很快。
    • Subsurface:该Shading模式常用于制作皮肤,蜡烛,雪,它是一种半透明的东西,光照进去,散射开,再从表面散发出来。
      • subsurface

# 基本输出节点

下面是材质的基本输出节点:

  1. BaseColor:在没有光照信息时的表面的颜色信息。
  2. Metallic:控制表面的金属度。0为没有金属度,1为最高金属度。介于0和1的值在现实世界中很少见,看起来会有点假。
  3. Specular:用来控制非金属对象的反射。如果有任何金属度的值,高光将不会做任何事。
  4. roughness:用来控制亮点和反射,大值是粗糙,小值是光滑。
  5. Emissive:用来控制材质自发光,可用于灯泡和火山岩浆。
  6. Opacity:控制透明度,1为全透明,0为完全不透明。
  7. Normal:法线是用来调整并不是由模型自身引起的shading细节。比如一个纯蓝的法线会让它看起来是平的,可用来创造路上的小水坑。
  8. WorldPositionOffset:用来改变模型顶点的位置。
  9. WorldDisplacement:会为了体现更多的细节会细分模型的多边形,该节点用来偏移这些多边形,可以让网格体看起来更复杂。
  10. SubsurfaceColor:在上面细分模型的模式中,这个值会模拟光如何散透在材质中。这是让皮肤材质看起来更真实的主要方面,也适用于蜡和雪。
  11. clearcoat:和clearcoatroughness用来模拟表面薄膜的感觉,比如说碳纤维,纤维有它自己的粗糙度,但是有一层丙烯酸薄膜在它上面,有它自己的粗糙度。
  12. refraction:用来控制材质如何扰乱它后面的场景。只适用于半透明材质,比如水,玻璃。可同Normal结合来得到更复杂的折射。

# PBR

Physically Based Rendering:基于物理的渲染。次时代游戏常用这个。PBR有两种常用的流程:

  1. 金属度(Metallic)+粗糙度(Roughness)+Normal+AO。虚幻中通常使用这个流程。
  2. 高光(Specular)+平滑度+Normal+AO。平滑度和粗糙度总和为1,互为相反。

# 材质编辑器

# 快捷键

快捷键名称 作用
按住U点鼠标左键 快速放置TexCood[0]
按住1,2,3再点左键 快速放置1维,2维,3维向量
按住T点鼠标左键 快速放置TextureSample

# 常量和参数

常量是运行过程中不会改变的值,注意对于常量使用component mask时,勾选RG和RB是一样的二维向量,后者并不是(1,0,1),它们都是(1,1,0)。

参数节点是可在材质实例中更改的值,常量节点可以转换为参数节点。在运行中要修改材质中的参数有:

  1. 使用材质的参数节点,在蓝图中通过节点SetScalarParameterValueOnMaterials来设置。
  2. 使用MaterialParameterCollection,在蓝图中通过SetScalarParameterValue来选择对应的参数集并进行设置。

# 基础节点

  • Clamp:获得值小于等于Max,大于等于Min。
  • TextureSample:当该图为法线图的时候,它的RGB不再代表颜色,而是一个向量,为光线反射时的向量,会影响光反射时的效果。

下面是一些其他基础节点及其详细解释:

# Add

对于UV加一个数,实质上是把贴图做平移

对于UV同时偏移:

UVAdd1

只在一个维度加偏移:

UVAdd2

让其连续在某一个维度偏移:

UVAdd3

# Multiply

UV乘以一个数,UV变大,坐标系变大,映射的贴图更多了,密度也越大了。如果乘以一个2维向量,可以控制在UV某个维度上单维度拉伸。

UVMultiply

这样会来回的缩放,下面也是一个类似心脏跳动的效果,不过它是按法向量偏移:

MaterialMove

如果是颜色相乘,会让白色的部分向被乘色靠近。

# Panner

上面随着时间变化有一种更快捷的方式,就是panner节点:

UVPanner

还有就是旋转,使用Rotator节点。

# 叠加噪点

叠加噪点能让一张图叠加噪点,起到将目标图揉乱的目的:

UVNoise