Language:
Page Info
Skill Level:
Engine Version:
The translation of this page is out of date. Please see the English version for the latest version of the page.

Custom 表現式

Custom

Custom は、任意量の入力を実行するカスタム HLSL シェーダーコードを書いて、実行結果を出力します。

アイテム

説明

プロパティ

Code

表現式が実行するシェーダー コードを含みます。( 後述の 警告 をご覧ください)

Output Type

表現式によって出力される値のタイプを指定します。

Description

マテリアル エディタの表現式のタイトルバーの表示されるテキストを指定します。

Inputs

表現式が使用する入力配列です。

入力名

入力名を指定します。マテリアル エディタの表現式上に表示される名前となる他に、入力値を参照する HLSL コード内でも使用されます。

入力配列には好きなだけ入力を追加し、名前を付けてください。その後、 Code プロパティにコードを書きます。例のように return 文で関数全体を入力しても良いですし、Input.bgr などの簡単な表現式を使っても良いです。OutputType で出力データ タイプも指定しなければなりません。

T_Custom_Node.png

上図で使った以下のコードを使って、自分でカスタム ノードを作成できます。

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;

カスタム ノードは定数畳み込みを防止します。また、ノードでビルドされた同等バージョンと比べて、かなり多くのインストラクションを使用する場合があります。 定数畳み込みは UE4 内部で使用する最適化で、必要に応じてシェーダー インストラクション数を畳み込み処理します。例えば、[Time->Sin->Mul by parameter->Add to something] といった一連の表現式は、UE4 では一つのインストラクションに折り畳まれます。表現式 (Time、パラメータ) の全ての入力値が全体のドローコールに対して定数であり、ピクセルによって変更しないためこれが可能となります。UE4 はカスタムノードにあるものは全て折りたたむことが出来ないため、既存ノードで作成した同等レベルのシェーダーよりも効率が悪くなります。結果として、カスタムのノードの使用は、既存ノードでは不可能な機能性へアクセスがある場合のみが最適です。

カスタムノードで書かれているシェーダーコードは、「そのままの状態」でターゲットプラットフォームに対してコンパイルされます。 つまり、シェーダーが PC でコンパイルされている場合、有効な HLSL コードとみなされます。PS3 でコンパイルされている場合、有効な Cg とみなされます。