18
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Epic Games Japan #4Advent Calendar 2019

Day 10

[UE4]Custom Primitive Dataを使ってAuto Instancing機能を活用する

Last updated at Posted at 2019-12-09

image.png
UE4.23からAuto Instancing機能が搭載され、上記の様に同一マテリアルの同一オブジェクトをレンダリングする際にインスタンシングされる(一つのドローコールにまとめる)様になりました。

下図の様にドローコールがLOD単位でひとまとめにされます。便利。
image.png

しかし、以下の様にマテリアルインスタンスを各オブジェクトに設定するとインスタンシングされません。(めんどくさかったので先頭の6つのオブジェクトしかやっていません。)
image.png
image.png

参考: 使用した親マテリアル
image.png
この様に異なったマテリアルインスタンスにしてしまうとインスタンス化はできないのですが、それだけだとちょっとパラメータが違うだけのオブジェクト達も常に別々にドローコールされてしまいもったいないです。UE4ではそれを解決するCustom Primitive Dataという手法を用意しています。

親マテリアルの変数を選択すると設定に、"Use Custom Primitive Data"という項目があります。こちらにチェックをいれます。
image.png

するとマテリアルの変数がCustom Primitive Dataという名前に変わります。
image.png

このCustom Primitive Dataはマテリアル単位で設定するのではなく、各Mesh Component単位で値を設定します。それぞれのメッシュのRenderingカテゴリの中に"Custom Primitive Data"という項目があると思うので、そこに今回設定したい色をそれぞれ設定します。 (この項目は4.24から。4.23ではC++/BPのみから設定可能?)
image.png

すると、別々のマテリアルインスタンスにすることなく、下図のように一つのマテリアルを用いながらも、Custom Primitive Dataをマテリアル内で参照することで、マテリアルインスタンスと同様の効果を得ることができます。
image.png

同一マテリアルなので、下図のようにAuto Instancingが機能しており、それぞれのメッシュのパラメータが違っていてもドローコールがまとめられています!
image.png

ご参考になれば幸いです。

18
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?