Пользовательские выражения материала в Unreal Engine 4

0
8
Пользовательские выражения материала в Unreal Engine 4

Пользовательское выражение Custom позволяет вам писать собственный шейдерный код HLSL, работающий на произвольном количестве входов и выводящий результат операции.

НазваниеОписание
Свойство
CodeСодержит код шейдера, выполняемый выражением. (См. Предупреждения ниже).
Output TypeЗадает тип значения, выводимого выражением.
DescriptionЗадает текст, отображаемый в строке заголовка выражения в редакторе материалов.
InputsМассив входов, используемых выражением.
Input NameЗадает имя входа. Это имя отображается в выражении в редакторе материалов, а также имя, используемое в коде HLSL, для ссылки на значение ввода.

Добавьте столько входов, сколько потребуется для массива Inputs, и назовите их. Затем вы можете написать код в свойстве Code. Вы можете ввести либо тело полной функции с возвратными формулировками, как показано в примере, либо простое выражение, такое как Input.bgr. Вы также должны указать тип выходных данных в OutputType.Пользовательские выражения материала в Unreal Engine 4

Вот код, который был использован выше, чтобы вы могли попробовать собственный узел для себя.

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;
  1. Использование настраиваемого узла предотвращает постоянное свертывание и может использовать значительно больше инструкций, чем эквивалентная версия, выполненная со встроенными узлами! Постоянное свертывание – это оптимизация, которую UE4 использует внутри для уменьшения количества команд шейдера, когда это необходимо. Например, цепочка выражений Time >Sin >Mul by parameter > Add to something может и будет свернута UE4 в одну команду, окончательную добавку. Это возможно, потому что все входы этого выражения (Time, parameter) являются постоянными для всего обратного вызова, они не меняются на пиксель. UE4 не может свернуть что-либо в пользовательском узле, который может создавать менее эффективные шейдеры, чем эквивалентная версия, созданная из существующих узлов. В результате лучше всего использовать только настраиваемый узел, когда он дает вам доступ к функциональности, недоступной существующим узлам.
  2. Шейдерный код, написанный на пользовательском узле, должен быть действительным HLSL.