页面将讲解制作材质时可用的输入。向这些输入填入值(通过常量、参数和纹理),你就可以定义想象中的任何物理表面。
并非所有输入都能与混合模式(Blend Mode)和着色模型(Shading Model)的每个组合一同使用。因此我们将指定每个输入可供使用的时间,以便你了解你创建的每种材质类型都使用哪些输入。
输入和材质设置
并不是所有输入都对你创建的每种类型材质都有用。例如,在开发光照函数(Light Function)时——一种应用到光源的材质——你只能在材质上使用自发光颜色(Emissive Color)输入,而不能使用其他任何输入,因为其他输入(如金属感(Metallic)或粗糙度(Roughness))不适用。正因为如此,为了避免你过度担心输入,了解正在创建的材质类型非常重要。其中三个主要的控制属性是:
- 混合模式(Blend Mode)——此属性将控制你的材质如何混入它后面的像素。
- 着色模型(Shading Model)——此属性定义如何计算材质表面的光源。
- 材质域(Material Domain)——此属性控制材质的使用方式,例如它作为表面的一部分、光照函数,还是后期处理材质。
幸运的是,虚幻引擎4不需要你猜测各种材质应使用什么输入。在材质(Material)中更改这些设置时,你会注意到可用的输入将更新,而不需要的输入将被禁用。
底色
底色(Base Color) 定义材质的整体颜色。它接收 Vector3 (RGB) 值,并且每个通道都自动限制在 0 与 1 之间。
如果是从现实世界获得的,那么这是使用偏振滤光器拍摄时获得的颜色 (偏振在校准时会消除非金属材质的镜面反射)。

金属感
金属色(Metallic)输入控制表面在多大程度上“像金属”。非金属的金属色(Metallic)值为 0, 金属的金属色(Metallic)值为 1。对于纯表面,例如纯金属、纯石头、 纯塑料等等,此值将是 0 或 1,而不是任何介于它们之间的值。创建受腐蚀、落满灰尘或生锈金属之类的混合表面时, 您可能会发现需要 介于 0 与 1 之间的值。

高光度
在编辑 非金属 表面材质时,您有时可能希望调整它反射光线的能力,尤其是它的 高光 属性。 要更新材质的高光度,需输入介于0(无反射)和1(全反射)之间的标量数值。注意,材质的默认高光值为0.5。

粗糙度
粗糙度(Roughness)输入控制材质表面的粗糙或平滑程度。与平滑的材质相比,粗糙的材质将向更多方向散射所反射的光线。 这决定了反射的模糊或清晰度(或者镜面反射高光的广度或密集度)。 粗糙度 0(平滑)是镜面反射,而粗糙度 1(粗糙)是漫射(或无光)表面。
粗糙度是一个属性,它将频繁地在对象上进行贴图,以便向表面添加大部分物理变化。

各向异性与切线
可以利用 各向异性(Anisotropy) 和 切线(Tangent) 输入控制材质粗糙度的各向异性和光源方向性。如果材质要展现类似拉丝金属的各向异性效果,这两项输入至关重要。

在不使用各向异性(Anisotropic)和切线(Tangent)输入的情况下,材质拥有各向同性响应。当各向异性输入的值为0时也是如此。


可以使用-1.0到1.0之间的值来控制各向异性响应,其中0值表示没有各向异性效果。
各向异性材质是默认启用的,但可以通过控制台命令 r.AnisotropicMaterials.
禁用。启用后,各向异性可以用于受支持的第五代(Gen5)平台,也能在可扩展设置为高(High)、极高(Epic)或电影级别(Cinematic)时使用。











拖动滑块将显示各向异性响应从0.0正增加到1.0。
使用 切线(Tangent) 输入,利用纹理或向量表达式来定义光的方向性。
自发光颜色
由于材质在发光,所以 自发光颜色(Emissive Color) 输入将控制材质的哪些部分会发光。理想情况下这将获得一个遮罩纹理(除了需要发光的区域之外,大部分呈黑色)。
由于支持HDR光照,所以允许大于1的值。

不透明度
使用半透明混合模式时,会用到 不透明度(Opacity) 输入,通常适用于 半透明(Translucent)、添加(Additive) 和 调制(Modulated) 材质。可以输入0与1之间的值,其中:
- 0.0代表完全透明。
- 1.0代表完全不透明。
使用一个次表面着色模型时,不透明和遮罩混合模式也使用不透明度。

不透明度主要用于 半透明材质(Translucent)、添加材质(Additive) 和 调制材质(Modulated Materials)。
不透明遮罩
不透明遮罩(Opacity Mask) 类似于不透明度(Opacity),但仅在使用遮罩(Masked)混合模式时可用。与不透明度(Opacity)一样,它的值在0.0到1.0之间,但与不透明度(Opacity) 不同 的是,结果中看不到不同深浅的灰色。 在遮罩模式下时,材质要么完全可见,要么完全不可见。当你需要可以定义复杂实心表面(如铁丝网、链环围栏等等)的材质时,它将成为一种理想的解决方案。不透明部分仍将遵循光照。
你可以使用基础材质节点上的 不透明度遮罩剪切值(Opacity Mask Clip Value) 属性来控制剪切发生点。欲知更多详情,请参阅遮罩混合模式文档。

法线
法线(Normal) 输入接收法线贴图,后者将打乱每个单独像素的“法线”或朝向方向,为表面提供重要的物理细节。

在上图中,两种武器都使用了相同的静态网格体。下图显示了一个非常详细的法线贴图,其提供了更多细节,带来一种表面包含的多边形比实际渲染多出许多的错觉。 法线贴图通常是从高分辨率建模包创建的。

世界位置偏移
世界位置偏移(World Position Offset) 输入允许网格体的顶点在世界空间中由材质操纵。这有助于实现使对象移动、改变形状、旋转和各种其他效果。这适用于环境动画之类的内容。
点击查看大图。
上面的网络会使得物体同时旋转并上下波动,如同在跳舞一样!
当使用世界位置偏移(World Position Offset)将对象扩展到超出其原始边界时需注意,渲染程序仍将使用那些原始边界。这意味着你可能会看到剔除和阴影错误。你可以进入一个网格体的属性,设置它的 范围边界(Scale Bounds) 属性来进行补偿,但这样会影响性能,并可能导致投影错误。
世界位移和曲面细分乘数
世界位移(World Displacement) 的工作方式与世界位置偏移(World Position Offset)非常相似,但它使用曲面细分顶点,而非网格体的基础顶点。为了启用此功能,材质上的曲面细分(Tessellation)属性必须设为 无(None) 以外的值。
曲面细分乘数(Tessellation Multiplier) 控制沿表面的曲面细分量,能够在需要的地方添加更多细节。与世界位移(World Displacement)一样,为了启用这个功能,曲面细分(Tessellation)属性必须设为 无(None) 以外的值。

使用世界位移(World Displacement)将对象扩展到超出其原始边界时需注意,渲染程序仍然使用那些原始边界。这意味着你可能会看到剔除和投影错误。 为了解决这类问题,可以编辑网格体的 缩放边界(Scale Bounds) 属性,但编辑行为可能导致性能损耗,进而引发其他错误(如投影出错)。
次表面颜色
只有在着色模型属性设为次表面(Subsurface)时,才会启用 次表面颜色(Subsurface Color)。 你可以使用此输入将一种颜色添加到材质,模拟光通过表面时颜色的变化。举例而言,人类角色的皮肤上可能有一种红色的次表面颜色,来模拟其表面之下的血液。

毛发
毛发(Hair) 着色模型用于更好地模拟头发的半透明特性,并模拟光源穿过毛发的方式,因为毛发并不是完美的圆柱体。同样,由于每束毛发通常指向不同的方向,因此镜面高光并不统一,而是根据毛发指向的方向独立放置。

毛发着色模型(Hair Shading Model)在主材质(Main Material)节点上开辟了三种输入。
- 散射(Scatter):此输入控制允许穿过毛发的光线散射量。
- 切线(Tangent):此输入可代替 法线(Normal) 输入,用于控制沿U和V纹理坐标的法线方向。
- 背光(Backlit):此输入控制影响毛发材质的背光量。
有关使用此着色模型设置毛发的示例,请参阅Epic Games Launcher中 学习(Learn) 选项卡中的数字人类文档和示例项目。
布料
布料(Cloth) 着色模型可以用来更好地模拟材质表面有一层薄绒毛的布料类材质。

布料着色模型(Cloth Shading Model)在主材质(Main Material)节点上开辟了两种输入。
- 绒毛颜色(Fuzz Color):你可以通过此输入将颜色添加到材质,以模拟光通过表面时颜色的变化。
- 布料(Cloth):可以通过此输入控制 绒毛颜色 作为遮罩的强度。值为0表示绒毛颜色对底色没有影响,值为1则表示完全混合在底色上。
眼睛
这是一种高级着色模型,技术性很高,在着色器代码、材质、几何形状及其UV布局之间拥有非常强的依赖性。但是,你在开发自己的眼睛资产时以数字人类范例项目为起始点,或直接从此项目迁移资产。
眼睛(Eye) 着色模型用于模拟眼睛的表面。

下面的眼睛材质实例已设为对数字人类范例项目中眼睛着色器的不同生物构造部分进行艺术控制。
点击查看大图。
眼睛着色模型(Eye Shading Model)在主材质(Main Material)节点上增加了两种额外输入。
- 虹膜遮罩(Iris Mask):这有助于控制虹膜的折射率和深度。
在数字人类范例项目的材质 M_EyeRefractive 中,查看 IOR 和 深度范围(Depth Scale) 参数。
- 虹膜距离(Iris Distance):用于控制折射虹膜的凹度。
在数字人类范例项目的材质 M_EyeRefractive 中,查看 虹膜凹度比例(Iris Concavity Scale) 和 虹膜凹度幂(Iris Concavity Power) 参数。
透明涂层
透明涂层(Clear Coat) 着色模型可以用来更好地模拟材质表面有一层半透明薄膜的多层材质。除此之外,透明涂层着色模型也可以用于金属或非金属表面。事实上,它专门用来将第二类光滑彩色薄膜 蒙到非有色金属上。透明涂层材质的一些范例有:丙烯酸或涂漆的透明涂层,以及金属表面的彩色薄膜,如易拉罐或车漆。

透明涂层着色模型(Clear Coat Shading Model)在主材质(Main Material)节点上开辟了两种新的材质输入。
- 透明涂层(Clear Coat):透明涂层数量,0为标准着色模型,1为全透明涂层模型。这适用于遮罩。
- 透明涂层粗糙度(Clear Coat Roughness):透明涂层的粗糙度。小数值的近似模拟较为准确。此输入支持非常粗糙的透明涂层,但与其实际的世界对照物相比,这些涂层不会非常准确。
环境光遮蔽
环境光遮蔽(Ambient Occlusion) 输入用来帮助模拟在表面缝隙中发生的自阴影效果。 通常,此输入将连接到某种类型的环境光遮蔽纹理贴图,这种贴图通常在Maya、3ds Max或ZBrush等三维建模软件或Photoshop这类照片编辑软件中创建。

注意,这个输入需要光源使用 静态(Static) 或 固定(Stationary) 可移动性设置来构建光照。如果该材质与 可移动(Movable) 光源一起使用,则该材质会被默认忽略。
折射
折射(Refraction) 输入接受一个纹理或数值,其模拟表面的折射率。它适用于玻璃和水这样的物质,因为光穿过这些物质时会发生折射

常见折射指数 | |
---|---|
空气 | 1.00 |
水 | 1.33 |
冰 | 1.31 |
玻璃 | 1.52 |
钻石 | 2.42 |
像素深度偏移
像素深度偏移(Pixel Depth Offset) 可利用你设置的逻辑来控制着色器图表中的像素深度。你可以利用它来创建自己的逻辑,以根据对象的场景深度来混合或淡化对象。

在此比较中,将像素深度偏移与DitherTemporalAA材质函数结合使用,我们能够设置“偏移”值,该值利用点画图案纹理将地面与相交的对象混合。


着色模型
此输入要求在材质 细节(Details) 面板中将着色模型(Shading Model)设为 From材质表达式(From Material Expression)。
借助 着色模型(Shading Models) 输入,可以使用材质图表(Material Grpah)中的逻辑从可用的着色模型列表中选择,用于材质的部分。举例而言,当一个对象需要使用多个着色模型(例如透明涂层(Clear Coat)和默认光照(Default Lit))时,此输入十分实用。这样可以减少所需的材质数量,从而改善性能并减少绘制调用。所有这些都可以由材质中使用着色模型表达式节点和一些纹理遮罩的逻辑来驱动。
以下是使用 If 表达式选择着色模型的简单示例。

使用此示例时,如A大于B,产生的着色模型为 默认光照(Default Lit)。当A小于或等于B时,纹理遮罩用于在网格体的各个部分显示 默认光照(Default Lit) 和 透明涂层(Clear Coat) 着色模型。


欲知此输入用途的更多信息和示例,请参阅From材质表达式页面。