【UE4】Custom Data Valueを利用してブループリントからマテリアルにランダム値を渡したい

Pocket
LinkedIn にシェア
LINEで送る

先週に紹介したBlueprintでInstanced Static MeshのTransformのいち部分に値を仕込んでマテリアル側にランダム値を渡す方法・・・この話には実は続きがありまして。
Twitter上でナスヴィッチ様から情報をいただいたのですが、先日紹介した回避的な方法を採らなくても、Unreal Engine 4.25からはカスタム値をシェーダーに渡すことが正式に出来るようになっているとのことです。
具体的なノード名で言うと、Blueprint側は「Set Custom Data Value」。Material Editor側は「PerInstanceCustomData」です。
 
ナスヴィッチさん本当にありがとうございました。UE4がより楽しくなっていきますね!

やってみよう

4.25から利用可能です。

動画版

ブループリント側

[Set Custom Data Value]というノードに値をセットします。inの[Custom Data Index]にユニークなインデックスをセットして、[Custom Data Value]に例えばランダム値を渡します。
[For Loop]と[Get Instance Count]で回すのも同じ。
ちなみにブループリント内の「110」という定数は、Cubeの配置間隔です。

  画像を等倍で見たい場合はこちら

で、すごい重要なのが、Instanced Static Meshが何個のカスタムデータを参照するか宣言しておかねばなりません。(私はこれで小一時間ハマってしまった。)
  [コンポーネント]で[Instanced Static Mesh]を選択して、
  [詳細]の[インスタンス]項目にある[Num Custom Data Floats]の値をセットします。
今回の私の例だと「3」になります。

マテリアルエディタ側

[PerInstanceCustomdata]というノードを使います。PerInstanceCustomdata[2]のような[]括弧の数字は、ブループリント側でセットした[Custom Data Index]と一致します。
3つ受け取れるはずなので、PerInstanceCustomdata[0]、PerInstanceCustomdata[1]、PerInstanceCustomdata[2]と3つ作ります。

完成

さて試してみましょう。

おおーできてる! グーだね。
FPSもほぼ落ちていません。確認したPCがGPU非搭載なのですが、10,000個のCubeを置いて3fps落ちた程度。

回避策を見つけて道を切り開いてくれた先輩もすごいが、リリース後すぐ対応されているナスヴィッチさんもすごい。UE4はユーザーサイドもレベル高い方が多いので私ももっと情報を得て勉強して適用をスピード感持ってやっていきたいです。

参考サイト

Set Custom Data Value – Unreal Engine 4 Documentation

この記事はお役に立ちましたか?
8
お気に召していただけましたか?

購入によるお支払(ご支援)も承っています。お値段は200円からお好きな価格を。

ご注意:返金のご対応はいたしかねます。

JPY

管理人が読んだおすすめの建築本

    

コメントを残す