SciFi Bunk:材质实例

此文档说明在 SciFi Bunk 项目中构建环境时主材质和材质实例的使用方式。

Windows
MacOS
Linux

前言

此教程由社区成员 Liam Tart(PogoP)提供,授权转载于此。

Liam,感谢你!

此教程将说明如何使用主材质和材质实例快速有效地构建一套平铺材质,应用到场景中的模型上。使用平铺材质设置模型贴图后,便无需依赖高多边形模型的烘焙,快速修改场景的观感效果。

此教程的编写随 Unreal Launcher Learn 标签下的 Sci-fi Bunk Room 场景制作过程编写。推荐下载此场景,在实际操作中了解材质实例的使用。

此教程将说明如何设置有效主材质,将其实例化,用于制作广泛的不同材质类型(如各种金属和塑料),然后再应用到模型上不同的材质 ID。主材质还使用大量开关,根据制作中的材质开关特定函数,如视差贴图和细节法线贴图。

开始此教程之前推荐阅读 材质 文档,理解材质和材质实例的工作原理。此教程说明如何将这些概念应用到工作环境。

目标

设置主材质的目标是创建一个可被实例化的材质,并访问多个参数,以便快速对材质进行调整。可将所需的任意选项和特性放入主材质。作为基础,主材质允许选项输入指定的反射率、粗糙度、金属感和法线贴图,并添加反射色度和粗糙度以及金属感数值,对这些特性进行微调控制。

下方的截图展示了它能为场景带来的灵活度,调整几项数值便可迅速改变场景的效果。

Material Instance Color: Orange

Material Instance Color: White

主材质设置

从创建主材质开始。场景中的所有材质均从主材质实例化而来。因此需要对其进行正确有效的设置,避免过度复杂。使用主材质的一个优点是 — 如果之后需要为材质添加更多特性,只需将其应用到主材质即可,将向下传递到实例。

下例为最终的主材质设置。此材质中的所有输入纹理和常量将被参数化,以便在实例化材质中访问。可在数值或贴图上点击右键选择 Convert to parameter 执行此操作,然后为其指定一个命名。这便于在材质实例中进行快速修改。

此外,Static Switch 参数大量应用于此材质中,便于在特定设置之间进行选择(如细节法线贴图、视差贴图等)。这可关闭不需要的特性,降低最终材质实例的开销。可在此处阅读更多内容: Parameter Expressions

image_1.jpg

反射率设置

image_2.jpg

在此部分中,您可选择使用指定的反射贴图或简单颜色值。指定一个简单值获得正确的反射率,迅速完成材质原型。可将此数值转到 Photoshop 中使用,作为最终反射率贴图的基础。这也将应用到此教程的 粗糙度设置 部分。

如之前所述,可使用此设置为基础色彩选择使用反射率贴图或色彩值。可通过实例化材质中名为 UseDiffuseMap? 的静态切换参数在二者之间进行选择。如此项设为 true,即可输入特定的反射率纹理。此纹理将添加一个 DiffTint 常量值,此值用于特定反射率贴图的着色。如未使用反射率贴图,可使用 DiffuseValue 定义反射率数值。

在 DiffMap 纹理输入的左边,一个节点已被插入 UV 槽。它连接到主材质的 Parallax 部分。也可加入 UV 平铺设置,在 UE4 中(而不在 3D 模型包中)控制材质平铺。

下例展现了该系统的灵活性。左图为使用单色的反射率贴图。中图为反射率贴图。右图为着色为橘色的反射率贴图。这说明了如何使用相同贴图在引擎中实现多种效果。

image_3_1.png

image_3_2.png

image_3_3.png

单色反射率贴图

反射率贴图

带色彩的反射率贴图

image_3.jpg

金属感设置

image_4.jpg

该设置非常简单,选择使用金属感贴图或单一值定义材质的金属感属性。

此设置十分实用,可选择使用单一值(便于平铺金属材质);也可选择指定金属感贴图,将材质的一部分设为非金属感,其他部分设为金属感。

下例为实际效果。左边材质使用的金属感值为 0,中间材质的值为 1,右边材质使用特定的金属感贴图。

image_5_1.png

image_5_2.png

image_5_3.png

金属感值 - 0

金属感值 - 1

金属感纹理贴图

粗糙度设置

image_6.jpg

和反射率设置相似,该设置可选择使用粗糙度贴图或单一值来定义整体粗糙度。这便于将粗糙度值快速指定到材质,之后将此值转入 Photoshop,为材质创建独特的粗糙度贴图。

下例为实际效果。左边材质使用的粗糙度值为 1,中间材质的值为 0,右边材质使用特定的粗糙度贴图。

image_7_1.png

image_7_2.png

image_7_3.png

粗糙度值 - 1

粗糙度值 - 0

粗糙度纹理贴图

通过 UseDetailRoughness? 静态切换可使用插入 DetailTiling 常量的细节粗糙度贴图。该常量与 TexCoord 叠加,对细节粗糙度贴图进行平铺。此值也将插入细节法线贴图。它适用于这类材质 — 拥有需要近距离观察的纹理且平铺率极高。

下例为实际效果。左边的材质并未使用细节粗糙度/法线贴图,中间的材质使用平铺率为 1 的细节贴图,右边材质的平铺率为 4。

image_75_1.png

image_75_2.png

image_75_3.png

未使用法线贴图

带法线贴图,平铺设为 1

带法线贴图,平铺设为 4

遮挡设置

image_8.jpg

此设置使用静态切换参数选择使用遮挡贴图或单一值。多数材质使用的遮挡值为 1(即为简单的白色),而此设置可选择使用特定的环境遮挡贴图(如材质需要)。例如材质用于一个独特的未包裹模型,此模型的部分区域无法接受光照。

自发光设置

image_9.jpg

可通过此设置选择材质是否自发光(默认设为 false,以便提升性能)。可使用另一个静态切换选择指定一个自发光贴图。如不使用指定的自发光贴图,可使用 EmissiveScale 参数设置自发光值。然而,指定自发光贴图时也将使用 EmissiveScale,以便更好地控制材质亮度。

下例为自发光设置的实际效果。左边材质的自发光值设为 0,中间材质的值设为 1,右边材质的值设为 2。

image_10_1.png

image_10_2.png

image_10_3.png

自发光值 - 0

自发光值 - 1

自发光值 - 2

法线设置

image_11.jpg

法线贴图设置看上去较难,实际却相当简单。此材质默认使用扁平法线贴图纹理,可添加开关将法线贴图关闭转而使用常量值,可节约纹理内存。

还可通过此设置将法线贴图和细节法线贴图组合。DetailTiling 常量与 TexCoord 叠加,对平铺率进行控制。可通过 DetailNormalStrength 控制细节法线贴图的强度。

视差设置

image_12.jpg

可通过视差设置使用 BumpOffset 节点,应用高度图后可在材质上形成虚拟景深效果。可在此处阅读更多内容 (Bump Offset )。

此设置将被插入所有上文提及部分的 UV 槽中,意味着启用视差后所有贴图均会获得效果。

下例为视差的实际效果。左图禁用了视差,右图中视差设为 0.007。此处效果不甚明显,但在某些材质上效果明显。

Parallax Disabled

Parallax Enabled

材质实例

主材质设置完成后,可右键单击主材质并创建一个材质实例。

image_14.jpg

可将此材质命名并放入任意文件夹中。推荐按材质类型设置文件夹,如金属文件夹、塑料文件夹等。

双击新建的材质实例将显示下图:

image_15.jpg

如图所示,在主材质中设置的所有参数化数值和静态切换均显示在材质实例中。使用 UseDiffuseMap? 之类的切换可输入自建弥散/反射率贴图,还可启用与此相连的特定参数(如此例中的弥散叠加选项)。

下图为 Sci-fi Bunk 场景的材质设置。此处使用诸多颜色和材质属性创建了一个平铺材质库,可轻松应用到场景中的模型上。

image_16.jpg

应用到模型

材质库设置完成后,即可将这些平铺材质应用到模型。如下图所示,此模型不使用任何单独烘焙的法线贴图,而通过平铺材质来构建效果惊艳的表面。拥有以此方法构建的模型库后,即可了解使用材质实例的优点 — 调整单一数值即可传播到整个场景。举例而言,如需修改此场景中使用的木头纹理,只需在木头材质实例中进行一次修改即可,整个场景皆会更新。较之于对数个单独的弥散贴图重新设置纹理,这种方法更加快捷。

image_17.jpg

更多特性

基础主材质和材质库设置完成后,即可轻松展开主材质添加更多特性。例如,在此材质设置中没有顶点绘制的选项。可添加一个基础插值函数,结合顶点绘制进行绘制(例如在材质表面绘制尘土)。可在此处阅读更多内容:为2路纹理混合创建材质

以上便是场景基础主材质设置的全部教学内容。请查看 Sci-fi Bunk 房间场景,确定具体的应用方法。祝您好运!

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback