ゲーム開発備忘録

ゲームプログラマー UE4・5向けの記事を書いておりますので見ていただけるとありがたいです。

【ゼロからアンリアルエンジン5】 ⑭ブループリントからマテリアルに情報を渡す方法

目次

 

はじめに

注意

UE5Preview2の現在の情報です。

今後のアップデートによりUIや機能が変更される可能性があることをあらかじめご理解ください。

 

砲台の射程範囲マテリアルの続きです。

まずMinDistanceMeshのスケールや位置といった情報をマテリアルに流し

その情報からマテリアルをくり抜く処理を行いたいと思います。

前話からの続きで実装しているため不明なところは第⑬回と合わせてお読みください。

namiton.hatenablog.jp

 

解説

①マテリアルパラメータコレクションの作成

ブループリントからマテリアルに情報を渡すには

マテリアルパラメータコレクションを使うのが一般的です。

コンテンツから作成して、名前をMPC_MinMeshDataとします。

f:id:namiton:20220315115459p:plain

②マテリアルパラメータコレクションに変数を追加

作成したものを開くと画像のようになります。

今回は位置とスケールの情報が欲しいので(X,Y,Z)を格納できるVector型を2つ作成します。

f:id:namiton:20220315115904p:plain

LocationとScaleを作りました。

保存しておきましょう。

f:id:namiton:20220315120103p:plain



③マテリアルにパラメータコレクションの追加

前回作成したM_Distanceを開きMPC_MinMeshDataをコンテンツからドラッグアンドドロップします。すると画像のようにノードが表示されます。

f:id:namiton:20220315120337p:plain

LocationとScaleの2つが必要なので

もう一つ作成し、詳細からParameterNameをそれぞれ適応しましょう。

f:id:namiton:20220315120446p:plain

 

④M_Distanceにマスク(くり抜く)処理を組む

マテリアルパラメータコレクションのVectorは(RGBA)のfloat4ですが今回は(X,Y,Z)の情報しか使わないためコンポジットマスクでRGBのfloat3に変換します。

f:id:namiton:20220315120727p:plain

worldPositionから絶対ワールド位置を出して

f:id:namiton:20220315125530p:plain

SphereMaskにつなげます。

またHardnessは変数にしましょう。(変数のやり方は前回解説)

f:id:namiton:20220315125619p:plain

OneMinusで反転させPowerノードで境界をぼかせるようにします。

f:id:namiton:20220315125809p:plain

3ColorBlendノードでAlpha値から透明度を変更します。

f:id:namiton:20220315125937p:plain

保存してこのマテリアルは完成です。

f:id:namiton:20220315130100p:plain

 

⑤ブループリントからマテリアルパラメータコレクションに値を設定

BP_Cannonを開きます。

前回のノードの続きからノードを追加します。

f:id:namiton:20220315130335p:plain

SetVactorParameterValueから先ほどのパラメータコレクションを選び

LocationにMinDistanceMeshのワールド座標を入れます。

f:id:namiton:20220315130423p:plain

同様にScaleも入れましょう。
スケールには相対スケールを入れています。(親のスケールが変更されても問題ないようにするため)

f:id:namiton:20220315130541p:plain

 

SetVector/ScalarParameterValue

ブループリントからマテリアルパラメータコレクションに作成した変数に値を設定するノード

f:id:namiton:20220315133545p:plain

 

 

⑥実行と調整

MI_Distanceを開いておきましょう。

f:id:namiton:20220315130751p:plain

実行すると

大砲付近がマスクされていることが分かります。

f:id:namiton:20220315130903p:plain

試しにBP_CannonのMinDistanceの値を変更してみましょう。

それに応じてマスクする範囲が移動します。

f:id:namiton:20220315131006p:plain

MaxAlphaの値を変更すると全体の透明度が上がります。

f:id:namiton:20220315131127p:plain

ブラーの値を上げると境界にぼかしが入ります。

f:id:namiton:20220315131241p:plain

境界がズレるときは

Scaleの値を調整してください。

f:id:namiton:20220315131342p:plain

調整して自分好みの見た目に調整しましょぅ。

f:id:namiton:20220315131735p:plain

 

⑦最適化

調整が終わったらTickからの信号を切断しましょう。

砲台が移動するなどしない場合は毎フレーム呼ばれる必要はありません。

f:id:namiton:20220315131854p:plain

 

最後に

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。