基于材质表达式

使用基于材质表达式的着色模型,将多个着色模型合并到单个材质中。

Windows
MacOS
Linux
See Also

基于材质表达式 的着色模型是一项高级功能,用于通过材质图表中的逻辑将多个着色模型合并到单个材质(或材质实例)中。

FromMatExpression.png

使用

  1. 在材质中选择 材质输入(Material Inputs)(左上)或 材质属性(Material Attributes)(左下)节点,并在其 细节(Details) 面板中,将 着色模型(Shading Model) 设置为 基于材质表达式(From Material Expression)

    Setting_FromMatExpresssion.png

  2. 选中后,材质输入节点 着色模型(Shading Model) 上将有一个新输入可用。

    MaterialInputs_ShadingModel.png

  3. 右键单击材质图表,搜索并添加 着色模型(Shading Model) 节点。

    ShadingModel.png

  4. 用其下拉菜单选择所要使用的着色模型。

    SelectShadingModel.png

以下是设置材质时使用不同工作流的一些示例。

材质中已用的着色模型

使用 着色模型(Shading Model) 表达式向材质添加不同着色模型时,若选择了 材质输入(Material Inputs)材质属性(Material Attributes) 节点,这些着色模型就会列示在 细节(Details) 面板中的 已用着色模型(Used Shading Models) 旁。

Mat_UsedShadingModels.png

此例显示使用着色模型(Shading Model)节点在此材质中设置了三个着色模型。

切记:由于 切换(Switch) 节点可用于删除图表中的所有部分(包括着色模型),因此此列表仅显示材质图表中设置的着色模型,并不表示实际编译的内容。例如,参阅下面的材质切换节点 部分。

混合材质属性

使用材质属性工作流程时,可使用自定义混合操作进行着色模型参数输入,其余材质属性参数则正常进行混合。

使用 着色模型(Shading Model) 节点从 细节(Details) 面板选择着色模型,然后使用 BlendMaterialAttributes 节点将两者混合。

BlendMaterialAttributes_Diagram.png

若透明度小于0.5f,着色模型 透明度(Alpha) 输入选择 A;若大于等于0.5f,则选择 B

此例中,材质图表显示使用 SetMaterialAttributes 节点设置两个单独的材质。这些材质使用碳纤维纹理,且图表顶部部分使用 默认光照(Default Lit) 着色模型。图表底部部分使用 透明涂层(Clear Coat) 着色模型。BlendMaterialAttributes 节点将这两种不同的着色模型混合起来,并将 透明度(Alpha) 输入参数作为合并材质上的遮罩。

点击查看大图。

材质应用于静态网格体时,此材质插槽仅使用单个(而非两个)绘制调用渲染这两个着色模型。应用透明度遮罩后,可看到左上角使用带双重法线的 透明涂层(Clear Coat) 着色模型,而右上角使用 默认光照(Default Lit)

BlendMaterialAttributes_Result.png

If语句

If 语句可用于 AB 的浮点值,以设置使用的 着色模型,如下例所示。

PerPixel_If_Graph.png

默认情况下,若未设置 B 值,默认值为 0。可在 细节(Details) 面板中设置硬编码值,使用从纹理或常量派生的另一个浮点值;或者为 B 输入设置参数,以便在材质实例中对其进行控制。

在下面的比较中,If表达式根据 AB 的值,以将阴影模型设置为 默认光照透明涂层。如果 A 的浮点值大于 B,使用 默认光照(Default Lit),如果 A 小于 B,使用 透明涂层(Clear Coat)

A > B:使用默认光照 | B = 0.0

A <= B:使用透明涂层 | B = 0.5

Switch节点

使用下述可用 Switch 节点控制材质的功能和质量。

Mat_Switches.png

  • 着色路径切换(Shading Path Switch)可指定用于渲染路径的材质逻辑部分。

  • 在使用引擎质量水平控制材质逻辑时,质量切换(Quality Switch) 十分适用。

  • 在设置材质用于不同设备时,特征等级切换(Feature Level Switch) 十分适用。

  • 静态切换(Static Switch)静态切换参数(Static Switch Parameter) 可在基本材质中排除材质的整个分支,或通过材质实例进行控制。

在下面的图表和对比中,若设为 True静态切换(Static Switch) 表达式将着色模型设为 默认光照(Default Lit),若设为 False,则设置为 透明涂层(Clear Coat)

点击查看大图。

Static Switch = True | 默认光照着色模型

Static Switch = False | 透明涂层着色模型

材质实例化

完全支持材质实例化,以便在材质图表中设置和使用逻辑,以驱动参数和变量来设置要使用的材质模型。

切记,材质实例着色模型显示为 基于材质表达式(From Material Expression),并可被覆盖为静态着色模型。但不可将材质实例着色模型覆盖为 基于材质表达式(From Material Expression),此覆盖将无征兆地失败且不产生任何作用。

其他信息

  • 着色模型输入始终显示为启用(Shading Model Input Always Shown Enabled)

    • 启用 使用材质属性(Use Material Attributes) 并使用Set、Get、Make或Break Material Attributes节点时,即使 基于材质表达式(From Material Expression) 未设为所选着色模型,着色模型 输入仍始终显示为启用(不显示为灰色)。除非 基于材质表达式(From Material Expression) 设为材质的着色模型,否则引脚不执行任何操作。这不影响默认的主材质输入节点。

  • 材质实例覆盖(Material Instance Overrides)

    • 可正常覆盖材质实例的 着色模型,但将着色模型设置为 基于材质表达式(From Material Expression) 会无征兆地失败且不产生任何影响,除非父材质使用着色模型。

  • 无光照着色模型

    • 里面有许多编译好的信息,这意味着不引入回归,就无法正确支持着色路径。

Tags
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