SPARKCREATIVE Tech Blog

https://www.spark-creative.jp/

【UE5】シェーダーファイルのインクルード方法について(Customノード編)

こんにちは!そしてお久しぶりです!
エンジニアの桒村です。
今回は、前々回に書かせていただきました、Customノードについての続編にあたりますが、
Customノードの【Code】欄に直接HLSLコードを書くのではなく、UE専用のシェーダーファイルであるush、usfファイルを作成し、そちらのファイルを参照できるようにしていきます。

※前々回のCustomノードについての記事はこちらになります
tech.spark-creative.co.jp

まず初めに...

Customノードの【Code】欄に直接コードを書くことはもちろん可能ですが、長いコードを書くと考えると正直書きづらいです。
前々回の記事を書かせていただいた際でも、ちゃっかりVS側でコードを書き、コピペするという形をとっていました(^▽^;)
今回のように、シェーダーファイルを参照してあげることで、IDEも使用できるようになるので、作業効率がアップします。

IDE... 統合開発環境 - Wikipedia

とまあこんな感じで前置きをさせていただいた上で、シェーダーファイルのインクルード方法についてお話していきますのでよろしくお願いします。m(__)m

作業環境

windows 10
・UnrealEngine 5.3.2
・VisualStudio 2022

プロジェクト設定

まずは、UnrealEngine5.3.2を起動して、プロジェクトを作成してください。

今回もプロジェクト名は適当で大丈夫ですが、特にひねりなくProjects_CustomNodeにしてみました!
(もし、前々回の記事から始める際はそのままのプロジェクトを使用して頂いても大丈夫です!)
また、今回はファイルを参照するということで、BP(ブループリント)ではなく、C++を選択していただけたらと思います。

シェーダーファイルの作成

まず、プロジェクトフォルダの直下にShadersフォルダを作成します。

さらに作成したフォルダの中にシェーダーファイルを作成します。
※シェーダーファイルの拡張子は、『usf』か『ush』になりますので、ご注意ください。

.Build.csに依存関係を追加

先ほど作成したシェーダーファイルを適用させるために、Projects_CustomNode.Build.csRenderCore を追加します。

プロジェクトの開始ファンクションの追加

Projects_CustomNode.h を開き、新しく "Modules/ModuleManager.h" を インクルードします。
さらに、継承クラスとして FDefaultGameModuleImpl を宣言し、StartupModule関数 と ShutdownModule関数 を一緒にオーバライドします。


次に Projects_CustomNode.cpp を開いていただき、IMPLEMENT_PRIMARY_GAME_MODULE の最初の引数を Projects_CustomNode.h 側のクラス名に書き換えます。


最後に Projects_CustomNode.h 側で作成した StartupModule関数 に以下の処理を追加します。

以上の流れが完了しましたら、一度ビルドを行います。

Customノード側に参照

Customノードの『Code』欄にて、作成したシェーダーファイルをインクルードします。
※"/Project/作成したシェーダーファイル名"のProject部分は、Projectのままで作成したプロジェクト名を入力しないように気を付けてください。

問題なくいけばシェーダーファイルが正常に読み込まれていると思われます。
シェーダーファイルのインクルード方法については以上になります!


今回作成したGlitter.usfの中身とマテリアルの全体になります。

最終的な出力結果はこちらになります。

最後に

今回は、前々回の続きにあたるシェーダーファイルのインクルード方法についてお話しさせていただきました。
これまでの説明を踏まえて、Customノード用のインクルード方法は至ってシンプルな形となっています。
Customノードでシェーダーファイルをインクルードするかどうかは、どのようなシェーダーを作成するかによって必要or不必要になるかと思われますので、使用用途に合わせていただけたらと思います。
それでは、今回はここまでとなります。また次回よろしくお願いいたします!