Choose your operating system:
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 在内部利用的一项优化功能,旨在必要时减少着色器指令数。例如,
Sin(正弦)> 乘以(Mul)参数 > 加入(Add)某内容
表达式链可以并且将会由 UE4 折叠为单一指令,即最终的相加。可以做到这一点的原因是,该表达式的所有输入(参数)在整个绘制调用中保持不变,而不是随像素而变化。UE4 无法折叠 Custom(自定义)节点中的任何内容,与使用现有节点实现的等效版本相比,这可能会生成效率欠佳的着色器。因此,最好是仅当 Custom(自定义)节点允许您访问无法通过现有节点访问的功能时,才使用 Custom(自定义)节点。写入自定义节点的着色器代码必须为有效的HLSL。