自定义表达式

允许使用自定义普通着色器代码的表达式。

Windows
MacOS
Linux

自定义(Custom)表达式允许您编写自定义 HLSL 着色器代码,这些代码可对任意数量的输入执行操作,并输出操作结果。

项目

说明

属性

代码(Code)

包含表达式将执行的着色器代码。(请参阅下文中的 警告

输出类型(Output Type)

指定表达式所输出的值的类型。

说明(Description)

指定要在材质编辑器中的表达式栏中显示的文本。

输入(Inputs)

表达式所使用的输入数组。

输入名称(Input Name)

指定输入的名称。这是材质编辑器中显示在此表达式上的名称,并且是 HLSL 代码中用来引用输入值的名称。

请向"输入"(Inputs)数组添加任意数目的输入,并对其进行命名。然后,您可以在"代码"(Code)属性中编写代码。您可输入包含 return 语句的完整函数体(如示例所示),也可输入简单表达式,例如 Input.bgr。另外,您还必须在 OutputType(输出类型)中指定输出数据类型。

点击查看大图。

这里是以上示例中使用的代码,您可以使用此代码自行尝试 Custom(自定义)节点。

float3 blur = Texture2DSample(Tex, TexSampler, UV);

for (int i = 0; i < r; i++)
{

  blur += Texture2DSample(Tex, TexSampler, UV + float2(i * dist, 0));
  blur += Texture2DSample(Tex, TexSampler, UV - float2(i * dist, 0));

}

for (int j = 0; j < r; j++)
{ 

  blur += Texture2DSample(Tex, TexSampler, UV + float2(0, j * dist));
  blur += Texture2DSample(Tex, TexSampler, UV - float2(0, j * dist));

}

blur /= 2*(2*r)+1;
return blur;
  • 使用 Custom(自定义)节点会阻止常量折叠,并且,与使用内置节点实现的等效版本相比,可能会大幅增加所使用的指令!常量折叠是 UE4 在内部利用的一项优化功能,旨在必要时减少着色器指令数。例如,Time(时间)> Sin(正弦)> 乘以(Mul)参数 > 加入(Add)某内容 表达式链可以并且将会由 UE4 折叠为单一指令,即最终的相加。可以做到这一点的原因是,该表达式的所有输入(Time(时间)和参数)在整个绘制调用中保持不变,而不是随像素而变化。UE4 无法折叠 Custom(自定义)节点中的任何内容,与使用现有节点实现的等效版本相比,这可能会生成效率欠佳的着色器。因此,最好是仅当 Custom(自定义)节点允许您访问无法通过现有节点访问的功能时,才使用 Custom(自定义)节点。

  • 写入自定义节点的着色器代码必须为有效的HLSL。

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