【UE5】マテリアルのパラメータを動的に変更する方法
プログラマー尾関です。今回はUE5でマテリアルパラメータを動的にする方法についてまとめてみました。
マテリアルのパラメータを動的に変更する方法
Unreal Engineでマテリアルのパラメータを動的に変更する主な方法は以下の3つあるようです。
- Material Instance Dynamic (DMI) を使う
- Custom Primitive Data (CPD) を使う
- Material Parameter Collection (MPC) を使う
それぞれの違いは以下のとおりです。
それぞれの違い

※MPCについては本記事では解説しません
方法1: Dynamic Material Instance (動的マテリアル [DMI or MID])の使い方
パラメータの定義方法
まずはマテリアル側でパラメータを定義します。パラメータとしてよく使うのは 4次元Vector の “VectorParameter“、単精度浮動小数(float)の “ScalarParameter” です。

パラメータの Parameter Name に定義した名前が、外部からアクセスするときのパラメータ名となります。例えば以下の設定であれば “Center” という名前がパラメータ名となります。

動的マテリアルの生成
Dynamic Material Instance (動的マテリアル) を生成するには、Construction Scriptなどで、Create Dynamic Material Instance を呼び出して、メッシュに生成したマテリアルを設定します。

パラメータの設定方法
マテリアルにパラメータを設定する場合は Set Vector Parameter Value などデータ型に合った設定ノードを呼び出します。

方法2: Custom Primitive Data (CPD) を使う
パラメータの定義方法
Dynamic Material Instanceと同様に、VectorParameter などでパラメータを定義します。

詳細タブから Use Custom Primitive Data にチェックを入れます。
これにより CPD としてデータを扱うことができます。
ここでのマテリアルは、Blend Mode を Masked にして特定の部分をマスクするマテリアルを作ってみます。

ノードは以下のように組みました。

中心座標が VectorParameter、半径が ScalarParameter となっています。
パラメータの設定方法
動的マテリアル(DMI) と同じように、マテリアルエディタでパラメータを設定できますが、プレビューはできません。

パラメータを確認するには、任意のメッシュにマテリアルを割り当てます。

すると “Custom Primitive Data Defaults” という項目が表示されますが警告が表示されます。

これはパラメータのアドレスが重なってしまっているためです。
そのため、パラメータのアドレスを重ならないように変更する必要があります。

修正方法はマテリアルを開いて、Sizeパラメータ (Scalarパラメータ) を選び、Primitive Data Index を「4」にします。(Scalarを4番目に移動)

「適用」ボタンをクリックして、マテリアルを適用します。

すると警告が消えました。「+」をクリックして要素を追加します。

これでエディタ上でパラメータが変更できるようになりました。

Custom Primitive Data の変更は Set Scalar[/Vector] Parameter for Custom Primitive Data で行います。
試しにTickイベントで、サインカーブを使ったマスクの半径サイズを動かしてみます。

サインカーブでくり抜きの円が拡縮するようになりました。

終わりに
今回紹介した方法以外にも、「Material Parameter Collection (MPC)」についてはまだ未調査のため、使い方が分かり次第、今後紹介できたらと思います。
なお、今回紹介した方法以外にも「Set Material でマテリアルを差し替える」という方法があります。
Set Material でマテリアルを差し替えると丸ごとパラメータを変えられるため、雰囲気を大きく変えたい場合に便利です。
ただパフォーマンスは良くないので多用(頻繁に入れ替える)は控えるべきです。
以上、この記事がUE5のマテリアルを扱うのに役立てれば幸いです。