174

Click here to load reader

マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

Embed Size (px)

Citation preview

Page 1: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Material 管理の問題点とMaterial と Material Instance の仕組み

Epic Games JapanNori Shinoyama

Page 2: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

備考

• 4.13 & 4.14 で基本的には検証

• PS4 で計測

• 資料はすぐに公開されます

Page 3: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

なぜ Material 管理を注意する必要があるか?

Page 4: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

エディタで視覚的にマテリアルを作成することが可能エンジニア以外も自由にマテリアルを作れる

Page 5: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルは大量につくられ、管理が大変になりがち。

Page 6: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルで問題となる複数の視点

Management 誰が作るの? 命名規則は? どこに置くの?

Development 日々の開発を効率的に、イテレーションしやすく

Runtime処理が重たい、

メモリに乗らないパッケージサイズでかすぎ

Page 7: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルワークフローの悪循環

Management

Development

Runtime

2. 関連するマテリアルってどれ?

3. 終わらない Shader Compile

1. 処理が重たい、メモリに乗らない。パッケージサイズがでかすぎる。

Page 8: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアル構成は、管理のしやすさだけではなく、

Runtimeや日々のイテレーションも考慮した方が良い

開発後半の抜本的修正は非常に苦痛

Page 9: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルが問題となる問題となる複数の視点

Management

Development

Runtime

はじめに、気をつけるべき点とその仕組みを

Epic Games がご説明。

Page 10: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルが問題となる問題となる複数の視点

Management

Development

Runtime

その後、実タイトルがどのように実践しているかを、

バイキング様、SQEX 様に

ご説明していただきます。

Page 11: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

アジェンダ

1. マテリアル開発の基本イメージ2. マテリアルとは?3. マテリアルインスタンスとは?4. まとめ

Page 12: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

アジェンダ

1. マテリアル開発の基本イメージ2. マテリアルとは?3. マテリアルインスタンスとは?4. まとめ

Page 13: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルをノードベースで作成できる。

Page 14: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

このマテリアル機能だけだと。。。

Page 15: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

MaterialA

MaterialB

同じ処理が様々なマテリアルに 

テクスチャやパラメータだけが違うマテリアル

Page 16: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

共通項を抽出する2つの機能

同じ処理が様々なマテリアルに 

テクスチャやパラメータだけが違うマテリアル

MaterialFunction

MaterialInstance

Page 17: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Material Function

Page 18: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

様々なマテリアルで同様の機能を組むことに

MaterialA

MaterialB

MaterialC

Page 19: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Material Functionマテリアルエディタで内で使用できる関数のノードを作成する

Page 20: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Material Function で関数を共通化

MaterialA

MaterialB

MaterialC

参照

Material Function

Page 21: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Material Instance

Page 22: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルだけならば、テクスチャ差し替えやパラメータを変えるだけでも、別マテリアルを用意しなければいけない。

Page 23: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Material Instance親マテリアルに設定されたパラメータなどを独自に設定 ( 上書き ) できるマテリアル

Material

MaterialInstance

MaterialInstance

Page 24: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Material Instance親マテリアルに設定されたパラメータなどを独自に設定 ( 上書き ) できるマテリアル

Material

MaterialInstance

MaterialInstance

親のマテリアルにパラメータを追加

Page 25: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Material Instance親マテリアルに設定されたパラメータなどを独自に設定 ( 上書き ) できる Material

Material

MaterialInstance

MaterialInstance

子のマテリアルにパラメータが出て上書き可能に

Page 26: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

乱立していたマテリアルが。。。

Page 27: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

一つのマスターマテリアル ( ベースマテリアル ) とそれが持つパラメータの上書きで表現可能に。

Page 28: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Tips: Static Switch Parameter でマテリアルの処理を”静的に”切り替える事が可能。

Material

MaterialInstance

MaterialInstance

Page 29: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Tips: Static Switch Parameter でマテリアルの処理を”静的に”切り替える事が可能。

Material

MaterialInstance

MaterialInstance

Page 30: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Tips: マテリアルインスタンスはマテリアルインスタンスを親にできます。

Material

MaterialInstance

MaterialInstance

MaterialInstance

MaterialInstance

例 : マスターマテリアルのパラメータ・色・テクスチャ

Page 31: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Tips: マテリアルインスタンスはマテリアルインスタンスを親にできます。

Material

MaterialInstance

MaterialInstance

MaterialInstance

MaterialInstance

子供 : Texture を指定孫 : 色を指定 色違いのオブジェクトやキャラクタなどに

Page 32: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

まとめ

Page 33: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

まとめ

Material

MaterialInstance

MaterialInstance

MaterialInstance

MaterialInstance

1. Material 間の共有機能は Material Function にまとめる

2. 適切なパラメータを Material から抽出しMaterial Instance を作成。Material の共通化を行う。(Switch パラメータでシェーダの挙動を静的に変更可能 )

MaterialMaterial FunctionMaterial FunctionMaterial Function

Page 34: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

ここまでが基本的なイメージかと思います。

Page 35: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

では、どんな構成にしていくべきか?

Mat

Inst Inst Inst

Mat

Inst Inst

Mat

Inst Inst

Mat

Inst Inst

一つの大きなマスターマテリアルから派生

複数のマスターマテリアルからインスタンスを都度作成。

?? 孫を許す?

Page 36: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

ということで、マテリアルとマテリアルインスタンスについて

もう少し深くみていきたいと思います。

Page 37: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

アジェンダ

1. マテリアル開発の基本イメージ2. マテリアルとは?3. マテリアルインスタンスとは?4. まとめ

Page 38: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

質問

1つのマテリアルを表現するために必要なシェーダは何個でしょうか?

Page 39: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Color Buffer Depth Buffer

赤いポリゴンが一枚描画されるところをイメージします。

From CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい

Page 40: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

描画の流れを GPU 的に追っていきます。

Color Buffer Depth Buffer

Pixel Shader

Rasterizer

Vertex Shader

From CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい

Page 41: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

描画の流れを GPU 的に追っていきます。

Color Buffer Depth Buffer

Pixel Shader

Rasterizer

Vertex Shader

頂点シェーダで、画面のどこにポリゴンがあるかを計算します。

From CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい

Page 42: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

描画の流れを GPU 的に追っていきます。

Color Buffer Depth Buffer

Pixel Shader

Rasterizer

Vertex Shader

ラスタライザでそのポリゴンがどのピクセルを埋めるかを判断します。

From CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい

Page 43: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

描画の流れを GPU 的に追っていきます。

Color Buffer Depth Buffer

Pixel Shader

Vertex Shader

そして Pixel Shader でピクセルの色を計算する

Rasterizer

From CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい

Page 44: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Pixel Shader

Vertex Shader

Material

一つのオブジェクトをレンダリングするには頂点シェーダとピクセルシェーダが必要。

ならば、少なくとも 2 つはシェーダが必要だ。

。。。 2 つだけ?

Page 45: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

様々なオブジェクトの属性が、様々なライティングをされます。

Page 46: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

一つのマテリアルでも。。。

Page 47: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

様々なオブジェクトにアサインして、レンダリングすることができます。

※マテリアルドメインが違うものはアサインできません。例 : ポストプロセス用マテリアルを、メッシュにアサインするなどはできない。

Page 48: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

これが可能なのは、マテリアルは様々な場合に応じたシェーダを保持し、それぞれの場合に応じて使用しているからです。

Material

Shader Shader Shader Shader

Page 49: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

よくある疑問。。

Material

Shader!!

全部に対応できる高性能シェーダを1 つ作れば良いんじゃないの?

Page 50: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Color Buffer

Pixel Shader

シェーダは、一度に沢山の頂点と沢山のピクセルを計算する

Vertex Shader

Depth Buffer

Page 51: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Pixel Shader

シェーダの小さな負荷増減 -> GPU の処理負荷激増なことも

Vertex Shader 頂点シェーダの負荷 ×  頂点の数

ピクセルシェーダの負荷 ×  ピクセルの数

Page 52: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

描画負荷を軽くするために、シェーダはなるべくシンプルにする

( これはもうそういうものだと思っていただければ。。。 )

Page 53: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Material

Shader Shader Shader Shader

そのため、使用方法に応じたシェーダを複数持つ必要があります。

Page 54: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Tips: コンパイルされるシェーダソースを表示するr.DumpShaderDebugInfo

Engine/Config/ConsoleVariables.ini

Page 55: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

GAMEPROJECT/Saved/ShaderDebugInfo に、シェーダが書き出されます。

Page 56: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Material のデータのメインは、使われる複数のシェーダ

Shader Binary

01001000…

01001000…

01001000…

Material

※非常にシンプルなシェーダは、予めエンジンが保有しており、それの参照のみ

Page 57: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

これを意識しておかないと。。。

Page 58: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

1 個で 30MB のマテリアルに

Page 59: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

終わらない Shader Compile

Page 60: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルのサイズ &コンパイル時間増加の原因

シェーダサイズ × シェーダの数

Page 61: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

朗報

Page 62: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

UE4.14 から、マテリアル内部のシェーダはそれぞれ圧縮されるようになります。

Shader Binary

01001000…

01001000…

01001000…

MaterialCompressedShader Binary

sb

sb

sb

Material

4.13 4.14

Page 63: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Loading Render

Memory

(4.14)

CompressedShader Binary

sb

sb

sb

Shader Binary

01001000…Decompress

Runtime (4.14)

HDD

Mat

使用される Shader だけ展開されるので、ロード時間、メモリどちらにもやさしい。

Page 64: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

4.14 からマテリアルのサイズがぐっと減ります。

4.13 4.14Material A 236kb 62kbMaterial B 38KB 31Kb

あるマテリアルの PS4 用クックの比較

Page 65: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

備考 クックあとの uasset の場所。

GAMEPROJECT/Saved/Coocked/PLATOFORM_NAME/Content…

Page 66: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

4.14 でサイズは改善されますが、気にしなくていいサイズにはなっていません。

また、この改善はシェーダコンパイル時間には影響しません

Page 67: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルのサイズ &コンパイル時間増加の原因

シェーダサイズ × シェーダの数

Page 68: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルのサイズ &コンパイル時間増加の原因

シェーダサイズ × シェーダの数

Page 69: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

悪意をもってシェーダの数を増やしてみる。

1 個のマテリアルで 240 個のシェーダを保有

Page 70: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

では、不要なシェーダを減らすために何をすべきか?

Page 71: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

減らす方法二点

1. 不要な Usage を減らす2. 4.13 からの Shader Permutation Reduction

を使う

Page 72: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

減らす方法二点

1. 不要な Usage を減らす2. 4.13 からの Shader Permutation Reduction

を使う

Page 73: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

様々な”使用法” = “Usage” について、それぞれ別に Shader を生成する。

Material

Shader Shader Shader Shader

Page 74: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Material の Usage 項目

このマテリアルが、どの様なオブジェクトにアサインされているかを指定する。

Page 75: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Material の Usage 項目

Page 76: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

“Automatically Set Usage in Editor” オプション

“Automatically Set Usage in Editor”(Default: ON)

オブジェクトにアサインした際に、必要な Usage 項目に自動的にチェックを着けてくれる機能。

※注意点 : アサインを外したりオブジェクトを消しても、自動的に Off になりません。

Page 77: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Usage がついてない場合、Default マテリアルに差し替えられる。

Page 78: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

サイズ比較

ありったけ Usage にチェック = 1837KB Static にだけチェック = 97KB

Page 79: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

不要な Usage がついてないか確認しましょう。(残念ながら、全マテリアルの Usage を

自動でチェックする機能などは現状ありません。 )

Page 80: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

減らす方法二点

1. 不要な Usage を減らす2. Shader Permutation Reduction

Page 81: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Usage とは別に、ライティングやポスト処理の組み合わせに対応できるよう、使用有無に関係なく前もって沢山のシェーダを持つ。

Material

Shader Shader Shader Shader

Page 82: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Project Settings / RenderingShader Permutation Reduction

• プロジェクトで使わない機能を前もって指定することで、その機能のシェーダを生成しない

Page 83: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

OFF のままその機能を使うと警告が出る( レンダリングはされない )

Project Settings / RenderingShader Permutation Reduction

Page 84: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

このマテリアルで検証。(usage は static lighting のみ。 )

Page 85: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

全部つけたもの vs 全部消したもの25 17

シェーダ数を 32%削減

Page 86: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Project Settings / RenderingShader Permutation Reduction

• 4つのオプションをそれぞれ見ていく。

Page 87: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Shader Permutation ReductionSupport Stationary Skylight

Page 88: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Shader Permutation ReductionSupport Stationary Skylight

消えるシェーダ

Page 89: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Shader Permutation ReductionSupport low quality lightmap shader permutations

モバイル用ライトマップを使うか(Win や PS4/Xbox 開発だけならば使わない )

Page 90: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Shader Permutation ReductionSupport low quality lightmap shader permutations

消えるシェーダ

Page 91: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Shader Permutation ReductionSupport Atmospheric Fog

Page 92: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Shader Permutation ReductionSupport Atmospheric Fog

消えるシェーダ

Page 93: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Shader Permutation ReductionSupport Pointlight WholeSceneShadows

Page 94: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Shader Permutation ReductionSupport Pointlight WholeSceneShadows

• このオプション。。– いまのところ、シェーダ削減は何もしていない。– UE-40363 として対応中。

• "Support PointLight WholeSceneShadows" option doesn't seem to reduce shader permutations

Page 95: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

4.15 から Mobile 用Shader Permutation Reduction も。

Page 96: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Project Settings / RenderingShader Permutation Reduction

• プロジェクトで使わない機能を前もって指定することで、その機能のシェーダを生成しない

Page 97: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

シェーダの数を減らす方法二点

1. 不要な Usage を減らす2. Shader Permutation Reduction

Page 98: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルのサイズ &コンパイル時間増加の原因

シェーダサイズ × シェーダの数

Page 99: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

シェーダサイズの調べ方

• コンソールのGPUプロファイラならば、そのサイズがわかる– PS4: Razor GPU– XBOX: PiX

• r.DumpShaderDebugInfoでダンプされるソースファイルをコンパイルして生成 (付属のバッチをたたく )

– ※(Windows版はコンパイラのパスが間違っているので修正対応中 )– UE-40364

• Batches for PCD3D_SM5 in ShaderDebugInfo fail due to not finding a path to fxc.exe

Page 100: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

毎回バッチ叩いたり、起動してキャプチャとったりは

めんどくさい。。。

Page 101: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Stats の Instructions の数とシェーダのサイズは相関があります

Page 102: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

命令数とマテリアルの相関

4.13 4.14命令数 : 30 38KB 31KB

命令数 : 2500 236KB 62KB

とあるマテリアルで計測Usage: Static Lighting のみPlatform: PS4( 命令数は Stats の表示を記載 )

Page 103: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

じゃあ、どうすれば命令数を少なくできる?

正直、難しい。。。

不要な計算をしていないかなどの確認ぐらいか。。

Page 104: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

もしも命令数を減らしたかったら。。

• 命令数が多いノードの使用を控える– Noise– POM– (他にもありそう。。要調査 )

• よく見られる不要なノード– Min / Max / Clamp– lerp

Page 105: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

番外編

シェーダ命令数は、サイズよりも処理負荷の観点で見ることが多いので、

ここで、補足説明をしておきます。

Page 106: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

注意点

シェーダの命令数 ≠ シェーダの重たさ

( 大雑把に見れば = でもいいけど。。。 )

(Cycle 数と言おうか。。 )

Page 107: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

命令数と処理負荷の違い :1 1 命令の重たさの違い

パスワード変更しといて

GDC でアテンドしてきて

どちらも同じ 1 行 ( 命令 ) だけれども、タスク量 (Cycle 数 ) が違う。

Page 108: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

命令数と処理負荷の違い :2 同じシェーダでも処理負荷がランタイムで変わる

コンパイラは賢い。 アルファテストのあるシェーダを アルファテスト -> 色と計算するようにしたりする。 (Early Exit)

色の計算

アルファテスト透明部分の処理負荷

アルファテスト不透明部分の処理負荷

Page 109: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

命令数と処理負荷の違い :3 命令の仕方の違い

命令数 : 50ビールで乾杯 ;もう一杯 ;もう一杯 ;もう一杯 ;…もう一杯 ;

命令数 : 150杯ビール飲む ;

50 行

1 行

※あくまでイメージです。コンパイラは賢く処理するし、実際に ForLoop が 1 命令になるわけではありません。

Page 110: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

注意点

シェーダの命令数 ≠ シェーダの重たさ

( 大雑把に見れば = でもいいけど。。。 )

(Cycle 数と言おうか。。 )

Page 111: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

シェーダの命令数とシェーダの重たさの違う例 1

悪意をもってマテリアルを作ると。。。スフィアに貼り付けただけで、

39 命令のシェーダでも、

20ms の処理負荷に

Page 112: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

シェーダの命令数とシェーダの重たさの違う例 2

悪意をもってマテリアルを作ると。。。スフィアに貼り付けただけで、

2533 命令のシェーダでも、

0.04ms の処理負荷で済む。

Page 113: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

このように、処理負荷は命令数だけでは厳密にはわかりません。

一番怖いのは、効果の少ない最適化をしてしまうこと

Stats を見て必死に命令数を減らしても効果がないかもしれません。

ダメな例 : テクスチャの参照回数がネックなのに、

キャラの重要な強調表現を端折る。

Page 114: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

GPU の処理負荷が気になる場合、エンジニアにご相談を。

Page 115: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルのサイズ &コンパイル時間増加の原因

シェーダサイズ × シェーダの数

Page 116: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルのまとめ

Page 117: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルの中には様々な用途に応じたシェーダが入っています。

Shader Binary

01001000…

01001000…

01001000…

MaterialCompressedShader Binary

sb

sb

sb

Material

4.13 4.14

Page 118: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルのサイズ &コンパイル時間増加の原因

シェーダサイズ × シェーダの数

Page 119: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルのサイズ &コンパイル時間増加の原因

シェーダサイズ × シェーダの数

対策1. 不要な “Usage” の消去2. Shader Permutation Reduction

Page 120: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルのサイズ &コンパイル時間増加の原因

シェーダサイズ × シェーダの数

対策1. 可能ならば、不要な計算式の除去( 命令数だけで最適化を進めるのは控えた方がよい )

Page 121: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

最後に、悪意をもってマテリアルを作ってみる

• 可能な Usage全てを ON• Shader Permutation Reduction を使わない• 命令数 2500• UE4.13

30MB超えマテリアルのできあがり。

Page 122: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

アジェンダ

1. マテリアル開発の基本イメージ2. マテリアルとは?3. マテリアルインスタンスとは?4. まとめ

Page 123: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

1. 参照するマテリアルはどれか?2. 上書きするパラメータの値

Shader Shader Shader Shader…

Material Instance は何のデータを持つか

MaterialInstance

MaterialInstance

Material

Page 124: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

なので、 Material Instance のデータサイズは軽い

Material 30KBMaterial Instance 2KB

Page 125: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

しかし。。。マテリアルインスタンスがマテリアルのデータぐらい大きくなる場合がある。

Material 30KBMaterial Instance 30KB

Page 126: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Shader Shader Shader Shader…

親と違う Shader を使わなければいけないとき、マテリアルインスタンスは独自のシェーダを保有する。

MaterialInstance

MaterialInstance

Shader Shader Shader ShaderMaterial …

親と別のシェーダが必要!

名前はマテリアルインスタンスだが、中身はほぼマテリアルと一緒

Page 127: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

どんなときに、マテリアルインスタンスは別のシェーダを持つのか?

Page 128: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

独自のシェーダを必要としない場合

• テクスチャ• 数値パラメータ

これらは別のシェーダを必要としない。

Page 129: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルインスタンスが別シェーダを必要とするとき

1. Override properties2. Static Switch

Parameter3. Static Component Mask

Parameter

Page 130: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルインスタンスが別シェーダを必要とするとき

1. Override properties2. Static Switch

Parameter3. Static Component Mask

Parameter

Page 131: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルインスタンスが別シェーダを必要とするとき

1. Override properties2. Static Switch

Parameter3. Static Component Mask

Parameter

Page 132: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルインスタンスが別シェーダを必要とするとき

1. Override properties2. Static Switch

Parameter3. Static Component Mask

Parameter

Page 133: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

上記オーバライドを行うと、シェーダの書き換えが必要なため、Material Instance もシェーダを持ちます。

MaterialInstance

MaterialInstance

Shader Shader Shader ShaderMaterial …

Shader Shader Shader Shader…

親と別のシェーダが必要!

Page 134: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Inst Inst Inst

想像できる恐怖

全てのマテリアルインスタンスがそれぞれシェーダを持つ

Mat

Page 135: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Tips: 孫のマテリアルインスタンス

MaterialInstance

MaterialInstance

MaterialInstance

Shader Shader Shader Shader…Material

Shader Shader Shader Shader…MaterialInstance

前述のオーバライドを行わなければ、親のシェーダを参照する。

Page 136: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルインスタンスの組み方でサイズが変わる簡単な一例を。。

Page 137: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

パラメータは三つ1.) テクスチャ、 2) テクスチャ使用有無 , 3) 乗算される色

Material

MaterialInstance

MaterialInstance

Page 138: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

どちらがよいでしょうか?

MaterialInstance

Material

Page 139: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

どちらがよいでしょうか?

switch switch switch switch

まず最初に色を変える。

1

その後に、 UseTexture スイッチを On にして、テクスチャをあてがう。

2

末端のマテリアルインスタンス 4 つがシェーダを持つ。

Page 140: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

どちらがよいでしょうか?

子の 2 つがシェーダを持ち、孫の 4 つはシェーダを持たない。

switch switch

その後に色を変える。

2

Use Texture スイッチを On にして、テクスチャをあてがう

1

Page 141: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

どちらがよいでしょうか?

データサイズやロード時間を考えると ,右の方が良い。

( 赤で囲まれたマテリアルインスタンスがシェーダを持つ )

switch switch

switch switch switch switch

Page 142: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Inst Inst Inst

サイズやロードを加味したマテリアルインスタンスの構築

スイッチやプロパティのオーバライドは、なるべく上位のインスタンスでやる。

Mat

こうすればその子供達は

シェーダを持たない

上の方でスイッチを使う

Page 143: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Switch を上の方で行えば左側の作り方でも OK?

Mat

Inst Inst Inst

Mat

Inst Inst

Mat

Inst Inst

Mat

Inst Inst

一つの大きなマスターマテリアルから派生

複数のマスターマテリアルからインスタンスを都度作成。

?? 孫を許す?

Page 144: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Tips

マテリアルインスタンス VS 親マテリアルの Usage

Page 145: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Material の Usage 項目

再掲載

Page 146: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Tips: マテリアルインスタンスは Usage を持たない。親のマテリアルの Usage を On にする。

Material

Inst Inst Inst Inst

Page 147: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Mat

Inst Inst Inst

一つの大きなマスターマテリアルから派生

• 管理も難しく、

• 一つのシェーダ修正が沢山のマテリアルインスタンスに影響し

• 更に Usage が爆発するのでおすすめできない。

はおすすめできない

Page 148: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Mat

Inst Inst Inst

Mat

Inst Inst

Mat

Inst Inst

Mat

Inst Inst

一つの大きなマスターマテリアルから派生

複数のマスターマテリアルからインスタンスを都度作成。

程よく分散しましょう

Page 149: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

アジェンダ

1. マテリアル開発の基本イメージ2. マテリアルとは?3. マテリアルインスタンスとは?4. まとめ

Page 150: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Advanced

シェーダを持つマテリアルインスタンスの

コンパイルとメモリ展開

Page 151: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Inst Inst Inst

みんながシェーダを持つとコンパイルも大変だしメモリがすぐ埋まってしまいそうだ。。。

Mat

Page 152: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

ShaderCompile

ShaderShaderShaderShader

InstA

Switches

ShaderShaderShaderShader

InstB

Switches

ShaderShaderShaderShader

InstC

Switches

マテリアルインスタンスのシェーダコンパイルの流れ

同じスイッチの組み合わせならば、前のシェーダをコピーする

同じ組み合わせのシェーダコンパイルは一度しか起きない

Page 153: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Loading

ShaderShaderShaderShader

InstA

Switches

ShaderShaderShaderShader

InstB

Switches

ShaderShaderShaderShader

InstC

Switches

マテリアルインスタンスのロードの流れ

Page 154: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Loading

ShaderShaderShaderShader

InstA

Switches

ShaderShaderShaderShader

InstB

Switches

InstC

Switches

自身のシェーダをメモリから消して、先のを参照する

マテリアルインスタンスのロードの流れ

同一組み合わせのシェーダは一つのインスタンスのみ生き残る

Page 155: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Inst Inst Inst

シェーダコンパイルやメモリに残る量は、組み合わせの数以上は起きない。

Mat

Page 156: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Advanced

シェーダを持つマテリアルインスタンスの

コンパイルとメモリ展開

おしまい

Page 157: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

アジェンダ

1. マテリアル開発の基本イメージ2. マテリアルとは?3. マテリアルインスタンスとは?4. まとめ

Page 158: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルが問題となる複数の視点

Management

Development

Runtime

誰が作るの? 命名規則は? どこに置くの?

日々の開発を効率的に、イテレーションしやすく

処理が重たい、メモリに乗らない。

Page 159: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアル

Page 160: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルの中には様々な用途に応じたシェーダが入っています。

Shader Binary

01001000…

01001000…

01001000…

MaterialCompressedShader Binary

sb

sb

sb

Material

4.13 4.14

Page 161: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルのサイズ &コンパイル時間増加の原因

シェーダサイズ × シェーダの数

Page 162: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルのサイズ &コンパイル時間増加の原因

シェーダサイズ × シェーダの数

対策1. 不要な “Usage” の消去2. Shader Permutation Reduction

Page 163: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルのサイズ &コンパイル時間増加の原因

シェーダサイズ × シェーダの数

対策1. 可能ならば、不要な計算式の除去( 命令数だけで最適化を進めるのは控えた方がよい )

Page 164: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルインスタンス

Page 165: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

1. 参照するマテリアルはどれか?2. 上書きするパラメータの値

Shader Shader Shader Shader…

Material Instance は何のデータを持つか

MaterialInstance

MaterialInstance

Material

Page 166: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Shader Shader Shader Shader…

親と違う Shader を使わなければいけないとき、マテリアルインスタンスは独自のシェーダを保有する。

MaterialInstance

MaterialInstance

Shader Shader Shader ShaderMaterial …

親と別のシェーダが必要!

名前はマテリアルインスタンスだが、中身はほぼマテリアルと一緒

Page 167: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

マテリアルインスタンスが別シェーダを必要とするとき

1. Override properties2. Static Switch

Parameter3. Static Component Mask

Parameter

Page 168: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Inst Inst Inst

サイズやロードを加味したマテリアルインスタンスの構築

スイッチやプロパティのオーバライドは、なるべく上位のインスタンスでやり、

その下で単純なパラメータを編集する。

Mat

こうすればその子供達は

シェーダを持たない

上の方でスイッチを使う

Page 169: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Tips: マテリアルインスタンスは Usage を持たない。親のマテリアルの Usage を On にする。

Material

Inst Inst Inst Inst

Page 170: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Mat

Inst Inst Inst

一つの大きなマスターマテリアルから派生

• 管理も難しく、

• 一つのシェーダ修正が沢山のマテリアルインスタンスに影響し

• 更に Usage が爆発するのでおすすめできない。

はおすすめできない

Page 171: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

Mat

Inst Inst Inst

Mat

Inst Inst

Mat

Inst Inst

Mat

Inst Inst

一つの大きなマスターマテリアルから派生

複数のマスターマテリアルからインスタンスを都度作成。

程よく分散しましょう

Page 172: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

まとめ

Management

Development

Runtime

マテリアルとマテリアルインスタンスのデータ構造から、

マテリアル構築時の注意点をみてきました。

ランタイムやコンパイル時間に影響するので、開発後半で致命的にならないよう、

開発初期に、検討してみてください。

Page 173: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

まとめ

Management

Development

Runtime

Byking 様、SQEX 大阪様の

セッションへGO!

Page 174: マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD

#UE4DD

End