UE4のマテリアルのCustomノードでの拡張テクニック
UE4でいろいろとマテリアルを触る時に、基本的に与えられたノードだけじゃ複雑なものがちゃんと書けないことがありました。という時に使ってこなすのがCustom
というノードで、これは直接HLSLコードを書いてシェーダーを作成することが出来ます。
しかしCustom
ノード自体にもただ使うにはいくつかの限界があります。Functionが書けないとかですね。しかし上の記事ではCustom
ノードのHLSLをコードなどでいくつかのリミットを乗り越えることが出来たそうです。自分も勉強兼ねてメモしてみました。
1. Custom Functions
UE4で全域のマテリアルシェーダー関数を作成するには.usf
ファイルを弄って追加か削除することが出来る。しかしこうすると.usf
が適用される全てのマテリアルアセットが再度コンパイル通さなければならない。
しかしHLSL
コードでstruct
みたいな構造体を宣言、その中に関数を定義することで関数を使用してより構造化されたマテリアルが作れる。
struct Functions { float3 OrangeBright(float3 c) { return c * float3(1, .7, 0); } float3 Out() { return OrangeBright(InColor); } }; Functions f; return f.Out();
上のコードではインプット引数としてInColor
だけを入れればこれで終わる。こうして得られる長所は全域の.usf
を弄らずすばやくマテリアルを仕上げることが出来るというところだ。
2. External Code and #include
#include "Your Path...\Test.hlsl" return 0; // enter spaces here and press enter to retrigger compilation
内部のエディタからコードを作成する必要なく、ただ外部からhlsl
ファイルを#include
して作成する。ただし記事のコメントによると外部のhlsl
ファイルは#pragma once
を付けないとならないらしい。
そしてコードのreturn 0;
は意図的なもので、UE4の独特なシェーダーコンパイル環境で追加コードなし#include
をさせるために使われるものだそう。また最後の行で追加的なコードを書かないとしたらスペースを一個書かなければならないらしい。
No.3とNo.4はなんのことかわかりませんけどわかる次第に追記しますね。