Language:
Page Info
Skill Level:
Engine Version:
Share
此中文页面内容对应的英文页面有后续更新,如需浏览最新文档可切换至英文页面浏览。

基本材质概念

IntroToMaterialsHeader.png

材质是让您的对象和关卡具有您想要的外观的关键因素之一。本文档介绍一种快速且高级别的方法来创建您自己的材质。

如果您已经从前面的虚幻引擎使用过程中熟悉材质创建,那么您可能会对《快速入门指南》感兴趣,该指南会指出为了充分利用我们基于物理的材质系统而需了解的关键属性。

材质表达式节点与网络

关于材质,您需要知道的第一件也是最重要的事情就是,它们并非通过代码,而是通过材质编辑器中的可视脚本节点(称为材质表达式)所组成的网络来构建。每一个节点都包含 HLSL 代码 片段,并用于执行特定的任务。这意味着当您构建材质时,您是在通过可视化脚本编程来创建 HLSL 代码。

WoodFloor.png

在这个例子中,我们有一个非常简单的网络,它用来定义硬木地板。然而,材质表达式网络并非如此简单。有些材质经常会包含数十个材质表达式节点。

您可以在 材质表达式参考资料 中找到有关所有可用材质表达式的文档。

使用颜色和数字

正如您所知,颜色在数字成像方面,由 4 个主通道构成。它们是:

R - 红色

G - 绿色

B - 蓝色

A - 阿尔法

对所有数字图像中的每一个像素而言,其中任何通道的值都可以由一个数字表示。关于材质的许多工作无非是根据一系列的情况和数学表达式来处理这些数字。

材质使用浮点值来储存颜色信息。这通常意味着每个通道的值范围都是 0.0 到 1.0,而不像是某些图像编辑应用程序那样使用 0 到 255。需要注意的是,您在任何时候都可以使用超过此范围的值,这在某些情况下会产生特殊的行为。例如,将颜色发送到材质的“自发光”(Emissive)输入时(这将使材质发光),大于 1.0 的值会增加发光强度。

在 UE4 中考虑材质时,请记住,许多表达式的运作与各个颜色通道无关。例如,对于每个通道,“加法”(Add) 节点使用两个输入并将它们相加。如果您将两个 RGB 颜色(3 通道矢量值)相加,那么输出颜色将是:(红色 1+红色 2, 绿色 1+绿色 2, 蓝色 1+蓝色 2)。

红色 1 + 红色 2 = 红色 3

绿色 1 + 绿色 2 = 绿色 3

蓝色 1 + 蓝色 2 = 蓝色 3

执行单通道操作的节点一般需要具有相同通道数目的输入。例如,可以将一个 RGB 颜色与另一个 RGB 颜色相 加(Add) ,但不能将 RGBA(4 通道)颜色与 RGB(3 通道)颜色相加,这是因为 RGB 颜色没有阿尔法通道。这会产生错误,并导致材质无法编译。此规则有一个例外情况,即,其中一个输入是单通道(标量)值。在这种情况下,该标量的值将直接应用于所有其他通道。例如:

  • 如果将 RGB 值 (0.35, 0.28, 0.77) 与标量值 1.0 相加,那么结果将是:

    0.35 + 1.0 = 1.35

    0.28 + 1.0 = 1.28

    0.77 + 1.0 = 1.77

纹理

对于材质,纹理只是用于提供某种基于像素的数据的图像。这些数据可能是对象的颜色、光泽度、透明度以及各种其他方面。有一种过时的想法,认为“添加纹理”是给游戏模型上色的过程。虽然创建纹理的过程仍然很关键,但我们应该将纹理看作材质的“元件”,而不是将它们本身视为最终成品,这一点很重要。

一个单一材质有可能用到几个不同的纹理贴图作为不同的目的效果。比如,一个简单的材质可能会有一个基础颜色的纹理贴图,一个高光纹理,一个法线贴图。除此以外,还有可能有保存在透明通道中的自发光贴图以及粗造度贴图。

可以发现,虽然这些可能都同时存在于一个贴图的布局中,但纹理贴图中的不同的颜色被用于不同的目的。

纹理一旦创建并导入虚幻引擎,就会通过特殊的材质表达式节点( 例如 纹理取样(Texture Sample) 节点)引入到材质中。您可以在上文的硬木地板示例中看到这些内容。这些节点引用纹理资产,该资产存在于材质外部,可以在 内容浏览器 中单独找到。与某些 3D 应用程序不同,材质无法包含它自己的纹理。

有关纹理和创建纹理的更多信息,请参阅 纹理文档

属性与输入

您可以对材质执行的许多操作是由您对材质本身设置的各种属性,以及您建立并连接定义材质的材质表达式节点网络的方式来驱动的。为了能够全面运用虚幻引擎材质系统的强大功能,检视可用的属性和输入十分有益。您可以在下列位置找到它们:

材质属性 材质输入

将材质应用于表面

应用材质的方式随表面类型不同而有少许变化。

网格体

对网格网格体(静态、动态或骨骼)应用材质有许多种不同方法。您可以直接使用网格属性中的材质元素槽。在关卡中选中网格时,您可以在 细节(Details)面板中找到这些槽,也可以通过 右键单击 网格并从快捷菜单中选择“属性”(Properties)找到这些槽。您也可以在各种编辑器(例如静态网格编辑器或者人物骨骼网格编辑器)中找到这些槽。

  1. 选择要应用材质的网格。

    BoxSelected.png

  2. 细节(Details)面板中,单击材质元素下拉菜单的箭头。这会显示项目中所有的可用材质,您也可以使用搜索栏进行搜索。

    MaterialDetails.png MaterialDropdown.png GreenBox.png

  3. 或者,您可以在 内容浏览器 中选择所需材质,然后单击箭头按钮应用该材质。

    UseInContentBrowser.png

如果您希望某个材质成为给定网格的默认材质,请确保在该网格的属性中设置材质,操作如下:在 内容浏览器右键单击 并选择“属性”(Properties),或者在 内容浏览器双击 网格,然后使用出现的资产编辑器(例如静态网格编辑器或人物骨骼网格编辑器)来设置材质。

请记住,如果您在资产编辑器或 内容浏览器 中更改材质,那么该更改会影响资产本身。如果您使用已放入场景的网格的细节来更改材质,那么将只影响这个网格副本。

刷表面

将材质应用于刷表面的过程非常简单:

  1. 内容浏览器 中选中一个材质。

    MaterialSelected.png

  2. 单击要将该材质指派到的刷表面。

    BoxPanelSelected.png

  3. 细节(Details)面板中,单击 ArrowButton.png 按钮。单击这个按钮会将该材质应用于刷表面。

    AddingMaterialToBox.pngRedOnBox.png