---
title: UETokyo.dev #2 Unreal Engine 動的マテリアル更新ノウハウ
tags:  #uetokyo #unreal engine #ue  
author: [なみとん🟢](https://www.docswell.com/user/Namiton)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/Y79N631X73.jpg?width=480
description: 2023.11/17日に開催されたUE コミュニティイベントUE Tokyo .devの登壇スライドです。  経験・検証による内容が多いためご指摘等ありましたら Ｘ でご連絡くださいよろしくお願いいたします。  イベントURL↓ https://ue-community-tokyo.connpass.com/event/297057/
published: November 18, 23
canonical: https://www.docswell.com/s/Namiton/KGXVLP-2023-11-18-123203
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/Y79N631X73.jpg)

Unreal Engine
動的マテリアル更新
ノウハウ


# Page. 2

![Page Image](https://bcdn.docswell.com/page/G78KZM49JD.jpg)

自己紹介
●
趣味で Unreal Engine のブログ
（ゲーム開発備忘録）を書いています。
●
ギターとインディーゲームと猫が好きです。
●
X のフォローよろしくお願いいたします！
koituwasugee
ゲーム開発備忘録
# UE Tokyo .dev


# Page. 3

![Page Image](https://bcdn.docswell.com/page/L7LZD36MER.jpg)

環境 と 前置き
●
Unreal Engine 5.3.1 (Launcher 版)
●
CPU - AMD Ryzen5 5600X 6 - Core Processor
●
メモリ - 32.0GB
●
GPU - RTX 3070
●
本公演の内容は個人の経験と検証に基づく内容です。
参考程度にお聞きください。
●
スライドは後日公開予定です。
# UE Tokyo .dev


# Page. 4

![Page Image](https://bcdn.docswell.com/page/4EMVPD56EW.jpg)

マテリアル による見た目の変更
何を使っていますか？
# UE Tokyo .dev


# Page. 5

![Page Image](https://bcdn.docswell.com/page/PER2143N79.jpg)

マテリアルを変更する主な機能
Set Material
Dynamic
Material
Instances
Custom
Primitive
Data
Material
Parameter
Collection
# UE Tokyo .dev


# Page. 6

![Page Image](https://bcdn.docswell.com/page/P7XDY248JX.jpg)

いっぱいあるけど、
何を使うのがいい？？
# UE Tokyo .dev


# Page. 7

![Page Image](https://bcdn.docswell.com/page/37KX3MZLJD.jpg)

それぞれ特徴を見ていこう
Set Material
Dynamic
Material
Instances
Custom
Primitive
Data
Material
Parameter
Collection
# UE Tokyo .dev


# Page. 8

![Page Image](https://bcdn.docswell.com/page/LJ35GYD675.jpg)

まずは、Set Material から
Set Material
Dynamic
Material
Instances
Custom
Primitive
Data
Material
Parameter
Collection
# UE Tokyo .dev


# Page. 9

![Page Image](https://bcdn.docswell.com/page/8JDD15PMJG.jpg)

Set Material
Material
Mesh
# UE Tokyo .dev


# Page. 10

![Page Image](https://bcdn.docswell.com/page/VEPXQGNQJ8.jpg)

Set Material
●
メッシュに対して
事前に準備したマテリアルや
マテリアルインスタンスを
適用する方法。
●
Element Index の数字が
メッシュのマテリアルの Index
に対応している。
# UE Tokyo .dev


# Page. 11

![Page Image](https://bcdn.docswell.com/page/27VL56KPEQ.jpg)

Set Material
メリット
●
●
マテリアルの属性（ Modeや
Model）が異なる
マテリアルを適用することが
できる
Element Index により、
変更したいモデルの部位を
指定できる
デメリット
●
マテリアル内で利用して
いる値を変更できない
●
色違いなど、パターンが
ある場合、パターン毎に
マテリアルを事前に用意す
る必要がある
●
負荷が大きい
⇒ マテリアルの属性をどうしても変えたい時に
しぶしぶ利用することが多い。
# UE Tokyo .dev


# Page. 12

![Page Image](https://bcdn.docswell.com/page/5JGX6NQQ7L.jpg)

マテリアルを変更する主な機能
Set Material
Dynamic
Material
Instances
Custom
Primitive
Data
Material
Parameter
Collection
# UE Tokyo .dev


# Page. 13

![Page Image](https://bcdn.docswell.com/page/47Q84QKWEP.jpg)

Dynamic Material Instances ( MID )
生成
Material
Create MID
加工
Mesh
BP
# UE Tokyo .dev


# Page. 14

![Page Image](https://bcdn.docswell.com/page/KE42QNP171.jpg)

Dynamic Material Instances ( MID )
●
ダイナミックマテリアルインスタンスは
その名の通り、ランタイム（実行時）にインスタンスを生成して、
内部の変数を変更できるマテリアル。
●
マテリアル内で変数化された値の名前を利用して
BP から動的に制御できる。
# UE Tokyo .dev


# Page. 15

![Page Image](https://bcdn.docswell.com/page/L71MP595JG.jpg)

Dynamic Material Instances ( MID )
メリット
●
マテリアルで変数化した、
Scalar / Vector /
Texture など
幅広い値を BP から
動的に制御できる
デメリット
●
複数のマテリアルを
変更したい場合、
BP 側の実装が大変
●
アクタを跨ぐマテリアルの
同時制御は苦手
●
似たノードでSet ～
Parameter Value on
Materials があるが、
これは全く別物
⇒ 使い勝手が良いが制御したいマテリアル数が増えると管
理やパフォーマンス調整が大変なので注意が必要。
# UE Tokyo .dev


# Page. 16

![Page Image](https://bcdn.docswell.com/page/G7W325QW72.jpg)

マテリアルを変更する主な機能
Set Material
Dynamic
Material
Instances
Custom
Primitive
Data
Material
Parameter
Collection
# UE Tokyo .dev


# Page. 17

![Page Image](https://bcdn.docswell.com/page/4JZVDNW273.jpg)

Custom Primitive Data ( CPD )
加工
Material
Primitive
BP
# UE Tokyo .dev


# Page. 18

![Page Image](https://bcdn.docswell.com/page/YE6518X6JV.jpg)

Custom Primitive Data ( CPD )
●
カスタムプリミティブデータも MID 同様
ランタイム（実行時）に値を変更できるマテリアル。
●
マテリアル内で変数化され、 UseCustomPrimitive が
有効になっている Scalar / Vector のみ BP から
動的に制御できる。
# UE Tokyo .dev


# Page. 19

![Page Image](https://bcdn.docswell.com/page/GE5Y49X5E4.jpg)

Custom Primitive Data ( CPD )
●
プリミティブ自体に固有のカスタムデータを
保存することができる。
●
そのため、動的制御以外にも同一マテリアルで、
パラメータのみを詳細から変更できる機能が非常に便利。
# UE Tokyo .dev


# Page. 20

![Page Image](https://bcdn.docswell.com/page/972GV2XG7R.jpg)

Custom Primitive Data ( CPD )
メリット
●
Auto Instancing で
ドローコールの軽減
●
BP 側の準備が容易
●
Target がプリミティブ
なのでマテリアルが別でも
Index を揃えれば実装を共
通化できる
デメリット
●
Scalar / Vector しか
利用できず Texture
などを直接指定できない
●
パラメータ上限が 32
⇒ MIDを使う前にCPDで実装できないか考える。
草や木などAuto Instancingが活用できそうな部分で積
極的に活用。
# UE Tokyo .dev


# Page. 21

![Page Image](https://bcdn.docswell.com/page/DJYV3Y8GJM.jpg)

マテリアルを変更する主な機能
Set Material
Dynamic
Material
Instances
Custom
Primitive
Data
Material
Parameter
Collection
# UE Tokyo .dev


# Page. 22

![Page Image](https://bcdn.docswell.com/page/V7NMVPQ8E8.jpg)

Material Parameter Collection ( MPC )
MPC
Mesh
BP
Material
# UE Tokyo .dev


# Page. 23

![Page Image](https://bcdn.docswell.com/page/YJ9N63DXJ3.jpg)

Material Parameter Collection ( MPC )
●
独立したアセット、マテリアルパラメータコレクションで
定義した Scalar / Vector の値を動的に制御できる。
●
マテリアル内でマテリアルパラメータコレクションを
配置することでマテリアルを横断してパラメータを
一括で制御できる。
# UE Tokyo .dev


# Page. 24

![Page Image](https://bcdn.docswell.com/page/GJ8KZM39ED.jpg)

Material Parameter Collection ( MPC )
メリット
デメリット
●
マテリアルを横断した
パラメータを一括で
制御できる
●
複数のマテリアルに
独立した値を設定する
用途に向かない
●
パラメータの選択が
プルダウンメニューから
指定できるので設定が
分かりやすい
●
複数箇所から制御すると
意図しない値になる可能性
があるので注意
●
複数のアセットとの依存が
強くなるため注意が必要
●
パラメータ上限が 1024
●
シーケンサーから
扱いやすい
⇒ 背景演出や、シーケンサーによるカットの作成など、大規
模な変更や視認性を重視する場合に利用。
# UE Tokyo .dev


# Page. 25

![Page Image](https://bcdn.docswell.com/page/LJLZD3VM7R.jpg)

負荷検証 - 実践 -
# UE Tokyo .dev


# Page. 26

![Page Image](https://bcdn.docswell.com/page/47MVPDG67W.jpg)

負荷検証 - 前提 ●
1秒おきにマテリアルを変更する BP
# UE Tokyo .dev


# Page. 27

![Page Image](https://bcdn.docswell.com/page/P7R214ZNJ9.jpg)

負荷検証 - 前提 ●
1秒おきにマテリアルを変更する BP
●
真上から撮影してカメラは動かない
●
4種類のメッシュを割り当てた BP
3,615個を配置して負荷を検証
●
実行時負荷は通常 85~110FPS
# UE Tokyo .dev


# Page. 28

![Page Image](https://bcdn.docswell.com/page/PJXDY298EX.jpg)

負荷検証 - Set Material ●
あらかじめ用意したマテリアル 5種を
ランダムで選択して反映
# UE Tokyo .dev


# Page. 29

![Page Image](https://bcdn.docswell.com/page/3JKX3MPLED.jpg)

負荷検証 - Set Material ●
Mesh draw calls は 35 ~ 41
と比較的軽量
●
ピーク時負荷 9 ~ 10 FPS まで低下
# UE Tokyo .dev


# Page. 30

![Page Image](https://bcdn.docswell.com/page/LE35GYX6J5.jpg)

負荷検証 - MID and CPD ●
BP それぞれで変数化した Vectorパラメータに
ランダムな値を入れる
▼ MID
▲ CPD
# UE Tokyo .dev


# Page. 31

![Page Image](https://bcdn.docswell.com/page/8EDD152MEG.jpg)

負荷検証 - MID and CPD ●
いずれもピーク時負荷 19 ~ 24 FPS
SetMaterialよりも軽量だが、
この2つの検証では大きな差はみられなかった
（ 単一のマテリアルを使っていたからかも ）
●
Mesh draw calls は
MID 2915 ~ 2950
CPD 19 ~ 25 と大きな差があった。
▼ MID
▲ CPD
# UE Tokyo .dev


# Page. 32

![Page Image](https://bcdn.docswell.com/page/V7PXQG1QE8.jpg)

負荷検証 - MPC ●
BP それぞれで変数化した Vectorパラメータに
ランダムな値を入れる
●
MPCの特性上同一の値になってしまう。
# UE Tokyo .dev


# Page. 33

![Page Image](https://bcdn.docswell.com/page/2JVL56YP7Q.jpg)

負荷検証 - MPC ●
ピーク時負荷 24 ~ 29 FPS
個別にランダムなマテリアルを入れている他のものと異なり、
同じ値が入ってしまうので比較できる結果は得られなかった。
解説でも出したようにランダムな値を制御する場合は他の手段が良い。
●
Mesh draw calls は 21 ~ 42
# UE Tokyo .dev


# Page. 34

![Page Image](https://bcdn.docswell.com/page/5EGX6N9QJL.jpg)

まとめ
Set Material
Dynamic Material
Instances
（MID）
Custom
Primitive Data
（CPD）
Material
Parameter
Collection
(MPC)
事前準備
△ 事前に全パターンを
用意する必要あり
△ BP側のランタイム
生成と管理が煩雑
◎ マテリアルの変数化と
Index の指定
〇 アセットの
作成と利用
個別制御
× ケースごとに
大量の分岐が必要
◎ パラメータの
種類が豊富
〇 MIDより少ないが
マテリアルの工夫次第
× MPCのパラメータ量を
増やす必要あり
同時制御
× 管理クラスが必要
× 管理クラスが必要
× 管理クラスが必要
◎ MPCを制御するだけ
△ ヒッチの原因になるかも
〇 インスタンスの
生成タイミングや
生成数の調整が必要
◎ 条件により
Auto Instancing
の恩恵を受けられる
△ 依存の増加に
よるロード負荷
負荷
# UE Tokyo .dev


# Page. 35

![Page Image](https://bcdn.docswell.com/page/4JQ84QWW7P.jpg)

まとめ
Yes
Yes
Material
Parameter
Collection
複数同時に
制御したい
No
マテリアルの属性
（Mode や Model）
が異なる
No
Set
Material
Yes
Custom
Primitive
Data
同じメッシュ
が大量にある
No
Dynamic
Material
Instances
# UE Tokyo .dev


# Page. 36

![Page Image](https://bcdn.docswell.com/page/K742QNK1J1.jpg)

ご清聴ありがとうございました！
# UE Tokyo .dev


