UE5勉強中のプログラマー尾関です。
今回はマテリアルパラメータを動的に変更する方法を紹介します。
- 動作確認バージョン:UE 5.4.4
マテリアルのパラメータを動的に変更する方法
Unreal Engineでマテリアルのパラメータを動的に変更する方法は以下の3つです。
- Material Instance Dynamic (DIM) を使う
- Custom Primitive Data (CPD) を使う
- Material Parameter Collection (MPC) を使う
これ以外にも Set Material でマテリアルを丸ごと差し替える方法もありますが、パフォーマンスは良くないので多用(頻繁に入れ替える)は控えるべきです。
それぞれの違い
それぞれの違いを以下にまとめました。
少し使ってみた印象は以下のとおりです。
- Material Instance Dynamic: 柔軟で何でもできる
- Custom Primitive Data: Drawコールを抑えて高速化できる
- Material Parameter Collection はパラメータを一元管理できる
なお今回は Material Instance Dynamic と Custom Primitive Data の使い方の紹介となります。(Material Parameter Collectionは紹介しません)
方法1: Dynamic Material Instance (動的マテリアル [DMI or MID]) を使う
概要
マテリアルをそのまま使うとパラメータを変更できないので、Material Instance Dynamic (動的マテリアル) を使用する必要があります。
パラメータの定義方法
まずはマテリアル側でパラメータを定義します。パラメータとしてよく使うのは 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 となっています。
パラメータの設定方法
Custom Primitive Data (CPD) は 動的マテリアル (DMI) と同じように、マテリアルエディタでパラメータを設定できますが、プレビューはできません。
ただ、マテリアルエディタで設定した値はデフォルト値として扱われます。
マテリアルの変化を確認するために、任意のメッシュにマテリアルを割り当てます。
すると “Custom Primitive Data Defaults” という項目が追加されますが、警告が表示されてしまいます。
これはパラメータのアドレス重複が原因です。具体的には、アドレスの初期値は [0] であるため、お互いの場所が衝突しています。
そのため、パラメータのアドレスを重ならないようにする必要があります。
修正方法はどちらかのアドレスを移動させる必要がありますが、ここでは Scalar を後ろに動かしてみます。
マテリアルを開いて、Sizeパラメータ (Scalarパラメータ) を選び、Primitive Data Index を「4」にします。(Scalarを4番目に移動)
「適用」ボタンをクリックして、マテリアルを適用します。
すると警告が消えました。「+」をクリックして要素を追加します。
これでエディタ上でマテリアルのパラメータが動かせるようになりました。
ブループリントでCustom Primitive Data のパラメータを変更するには Set Scalar[Vector] Parameter for Custom Primitive Data で行います。
試しにTickイベントで、サインカーブを使ったマスクの半径サイズを動かしてみます。
これでサインカーブでくり抜きの円が拡縮するようになりました。
おしまい
以上、マテリアルのパラメータを動的に変更する方法でした。
今回の記事がマテリアルの理解に役立てれば幸いです。