ゲームエフェクトデザイナーのブログ | A Real-Time VFX Artist's Blog

About Making Materials on UE, Making Tools with C#, etc

UE5 マテリアル関数インスタンスを試してみた

@tonkotsu3656 さんに続いて「UE Advent Calendar 2023」2 日目の記事になります!

いつの頃からか存在していたアセット「Material Function Instance(マテリアル関数インスタンス」が気になっていたのですが、世の中にこちらについて書かれた記事が見当たらず、また自分でも試したことが無かったので試してみました。

作成方法


コンテンツブラウザ上で新規アセットを追加するメニュー内に確認できますが‥

親のマテリアル関数を指定する項目が見当たらないため使い方が分かりません。。(UE5.3 でテスト。まだ実験的な機能なのでしょうか?)

そこで、コンテンツブラウザ上でマテリアル関数を選択して右クリック「Create Function Instance(マテリアル関数のインスタンスを作成)」からなら、親のマテリアル関数が指定された状態でインスタンスを作成できます。

例えばカラー値を決めるだけのマテリアル関数「MF_GetColorBlack」を作成して、パラメータ「Color」のデフォルト値は黒にします。

そのマテリアル関数をコンテンツブラウザで右クリックしてインスタンスを作成して開くと、パラメータ「Color」が表示されるので赤に変更。こちらのインスタンスの名前は「MF_GetColorRed_inst」にします。

さて、この2つのマテリアル関数をマテリアルに放り込んでみると、それぞれのパラメータの値が違っていることが分かります。つまりマテリアル関数のデフォルト値を変えたい場合に利用すると良さそうです。

リファレンスビューワはこんな感じになります。

どんな時に利用するのか?


マテリアル関数を用意したものの、デフォルト値を変えたいという場面はちょくちょくあります。例えば、ディゾルブのマテリアル関数を作成した時に、使用した瞬間ディゾルブが効いていることが分かるよう入力した絵を途中まで削った状態をデフォルト値にすることがあります。(何かの機能を追加した時にその機能が反映されて効果がすぐ分かる方が良いという考え)

でも、既存のマテリアルに新たにディゾルブ機能を追加したい場合にそのままマテリアル関数を組み込むと、すでにそのマテリアルをアサインしているモデルやエフェクトの見た目に影響が出てしまうので、ディゾルブのデフォルト値は削っていない状態にしたいですよね。

そういう場合に便利なのかなと思います。

ただ‥今のディゾルブの値の例で言えば、エフェクトでは Dynamic Parameter でパーティクルごとに動的に値を変更可能にするケースが多いため、マテリアル関数インスタンスではそこは補えないのが実情です。。マテリアル関数内の Dynamic Parameter のデフォルト値もインスタンス側で変えられたら嬉しいですが‥!

(全く余談ですが、ついでに言えばマテリアルインスタンスで Dynamic Parameter の値を自由に変えてプレビューできたりすると嬉しいですね!)

 

という訳で本記事はこれで終了です。いかがだったでしょうか?

親のマテリアル関数の指定方法がお分かりの方はぜひ教えてください‥!