Skip to main content
UE4勉強会 in 大阪
マテリアルの注意すべきこと!
Slideshare用壁紙
Slideshare用壁紙
自己紹介
● Twitter: @com04
● ゲームプログラマー
● 作ったものとかは大体twitterモーメントに
○ https://twitter.com/i/moments/847072031048814594
○ https://twitter.com/i/moments/986364547098275840
● マーケットプレイスに出品しました
○ ComMaterialTools - マテリアル検索の便利ツール
■ https://www.unrealengine.com/marketplace/commaterialtools
自己紹介
● 講演したスライド
− マテリアル基礎・初級: https://www.slideshare.net/com044/ue4-80326829
− UE4でのチーム製作: https://www.slideshare.net/com044/4ue4-in-ue4
− アニメーション基礎: https://www.slideshare.net/com044/ue4-in-91056422
− もっとアニメーションBP: https://www.slideshare.net/com044/ue4-in-bp
− UE4 LODs for Optimization -Beginner-:
https://www.slideshare.net/com044/lods-for-optimization-beginner
− Volumetric Fogで空間を演出する!:
https://www.slideshare.net/com044/ue4-volumetric-fog
− UE4でTranslucencyやUnlitに影を落としたい!:
https://www.slideshare.net/com044/ue4translucencyunlit
− AI基礎 : https://www.slideshare.net/com044/ai-128474721
− UE4でAIとビヘイビアツリーと-基礎- : https://www.slideshare.net/com044/ue4ai
5
もくじ
● はじめに
● マテリアルでロードされるテクスチャ
○ パターン1~8
● Switch / Override
○ パターン1~4
● 痒いところのTips
○ Texture枚数
○ Vertex Interpolator
version: UE4.21.3
もくじ
● はじめに
● マテリアルでロードされるテクスチャ
○ パターン1~8
● Switch / Override
○ パターン1~4
● 痒いところのTips
○ Texture枚数
○ Vertex Interpolator
はじめに
今日話さない事
● マテリアルの組み方
● マテリアルの最適化
はじめに
今日話す事
● 地味な検証の話
はじめに
※注意して検証を行いましたが、もし環境によっての違い
や、間違い等ありましたらごめんなさい
もくじ
● はじめに
● マテリアルでロードされるテクスチャ
○ パターン1~8
● Switch / Override
○ パターン1~4
● 痒いところのTips
○ Texture枚数
○ Vertex Interpolator
マテリアルでロードされるテクスチャ
マテリアルで使用されるテクスチャ。
どんな条件でロードされるのかを調べてみました
マテリアルでロードされるテクスチャ
確認方法
マテリアルでロードされるテクスチャ - 確認方法
Shippingパッケージして確認します。
エディター上では正確に取れない事があります。
マテリアルでロードされるテクスチャ - 確認方法
1. BP内の変数でObject型の「Soft Object Reference」を
作成します。
マテリアルでロードされるテクスチャ - 確認方法
2. 調べたいアセットを変数に設定します
マテリアルでロードされるテクスチャ - 確認方法
3. アセットの変数を「Resolve Soft Reference」して確認し
ます。存在していればロード済みです。
マテリアルでロードされるテクスチャ - 確認方法
4. 後は調べたいマテリアルを貼ったメッシュをサブレベル
に配置して、「Load Stream Level」で読み込んで調べます
もくじ
● はじめに
● マテリアルでロードされるテクスチャ
○ パターン1~8
● Switch / Override
○ パターン1~4
● 痒いところのTips
○ Texture枚数
○ Vertex Interpolator
マテリアルでロードされるテクスチャ
パターン1
Texture
マテリアルでロードされるテクスチャ - パターン1
TextureSampleParameter2Dで「緑」テクスチャを貼ったマ
テリアル
マテリアルでロードされるテクスチャ - パターン1
結果
ロードされます。問題なし。
マテリアルでロードされるテクスチャ
パターン2
マテリアルインスタンスで上書き
マテリアルでロードされるテクスチャ - パターン2
TextureSampleParameter2Dで「緑」を貼ったマテリアル
マテリアルでロードされるテクスチャ - パターン2
そこから子マテリアルインスタンスを作成してテクスチャを
「赤」で上書き。
マテリアルでロードされるテクスチャ - パターン2
この「赤」のマテリアルインスタンスのみを貼り付けて使用
します。
親 子
マテリアルでロードされるテクスチャ - パターン2
結果
実際には使用していない親マテリアルの「緑」テクスチャも
ロードされています。
マテリアルでロードされるテクスチャ - パターン2
使用するマテリアルインスタンスで使っていなくても、親マ
テリアルが使用しているだけでロードされてしまいます。
マテリアルでロードされるテクスチャ - パターン2
親マテリアルで使用するテクスチャは、ロードされても問題
のない
1x1のような小さいテクスチャを貼り付けておきましょう。
マテリアルでロードされるテクスチャ
パターン3
中間のマテリアルインスタンス
マテリアルでロードされるテクスチャ - パターン3
TextureSampleParameter2Dで「緑」を貼ったマテリアル
マテリアルでロードされるテクスチャ - パターン3
そこから子マテリアルインスタンスを作成してテクスチャを
「赤」で上書き。
更に子マテリアルインスタンスを作成して「緑」で上書き
マテリアルでロードされるテクスチャ - パターン3
緑→赤→緑
で子マテリアルインスタンスを作成。
この一番下の「緑」マテリアルインスタンスを使用する
親 子 子子
マテリアルでロードされるテクスチャ - パターン3
結果
実際には使用していない中間マテリアルの「赤」テクスチャ
もロードされています。
マテリアルでロードされるテクスチャ - パターン3
マテリアルの親子階層全てのテクスチャがロードされます。
マテリアルインスタンスの親子付けを構築する際は、親マ
テリアルのテクスチャ設定に気をつけましょう
マテリアルでロードされるテクスチャ
パターン4
TextureSampleに残っていた設定
マテリアルでロードされるテクスチャ - パターン4
「赤」を設定されたTextureObjectから、TextureSampleす
るだけのノード構成。
マテリアルでロードされるテクスチャ - パターン4
しかしよく見ると、TextureSampleノードのデフォルト値に
「緑」が付きっぱなし!
(でも一切使用されない)
マテリアルでロードされるテクスチャ - パターン4
結果
「緑」テクスチャもロードされます。一切使用されないですが
……
マテリアルでロードされるテクスチャ - パターン4
どうやったらこのノード出来るの?
マテリアルでロードされるテクスチャ - パターン4
1. TextureSampleノードを作って「緑」テクスチャを設定し
ます
マテリアルでロードされるテクスチャ - パターン4
2. やっぱり複数箇所で同じテクスチャ使いたい!となりまし
た。
Texピンから引っ張って「TextureObject」ノードを作ります
マテリアルでロードされるテクスチャ - パターン4
3. 調整していくと「赤」を使う事に決まったので
TextureObjectを「赤」にします
マテリアルでロードされるテクスチャ - パターン4
4. この手順で一番初めに設定したTextureSampleノードに
古いテクスチャが残ったままになります
マテリアルでロードされるテクスチャ - パターン4
もうひとつのパターン。
TextureObjectノードからTextureSampleノードを出しま
す。
マテリアルでロードされるテクスチャ - パターン4
この時、コンテンツブラウザでテクスチャが選択されている
と、そのアセットが設定されます!
マテリアルでロードされるテクスチャ - パターン4
修正方法
マテリアルでロードされるテクスチャ - パターン4
そのままでは編集出来ないようになっているので……
マテリアルでロードされるテクスチャ - パターン4
Texピンの接続を一旦切ると編集出来るようになります。
その後、TextureSampleノードのTexture欄をクリアします。
マテリアルでロードされるテクスチャ - パターン4
クリア出来たら再度Texピンを繋いで完了!
マテリアルでロードされるテクスチャ - パターン4
TexピンからTextureObjectを出したい時は、一旦テクス
チャ設定をクリアする癖を付けましょう。
後はReference Viewerで確認しましょう(後述)
マテリアルでロードされるテクスチャ
パターン5
マテリアル関数のPreview
マテリアルでロードされるテクスチャ - パターン5
マテリアル関数の引数Texture2DのPreview用に「緑」テク
スチャを設定します。
(このマテリアル関数内でのみプレビューする用)
マテリアルでロードされるテクスチャ - パターン5
そのマテリアル関数を使う所で、引数にTextureObjectで
「赤」を渡します。
マテリアルでロードされるテクスチャ - パターン5
結果
Previewにしか繋いでない筈の「緑」テクスチャがロードさ
れます。
マテリアルでロードされるテクスチャ - パターン5
対処方法
マテリアルでロードされるテクスチャ - パターン5
● Preview用は消しておいて、Developフォルダにマテリ
アル関数確認用のマテリアル作るか……
● Preview用の軽い共通テクスチャを用意するとか
……?
(でもエンジンコンテンツのマテリアル関数にもこのパターン一杯ある……)
マテリアルでロードされるテクスチャ
パターン6
どこにも繋がってないノード
マテリアルでロードされるテクスチャ - パターン6
そもそもどこにも繋がってなくて使ってない。
けどノードだけ残ってる
マテリアルでロードされるテクスチャ - パターン6
結果
どこにも繋がってない「緑」テクスチャがロードされた。
マテリアルでロードされるテクスチャ
パターン7
BPで上書き
マテリアルでロードされるテクスチャ - パターン7
「緑」テクスチャをくっつけたマテリアルを用意。
メッシュエディターでそのマテリアルを設定。
マテリアルでロードされるテクスチャ - パターン7
新規のBPを作って先程のメッシュを設定します
マテリアルでロードされるテクスチャ - パターン7
今度は「赤」テクスチャだけのマテリアルを用意。
BPのメッシュ欄マテリアルに設定。デフォルトのマテリアル
を上書きします。
マテリアルでロードされるテクスチャ - パターン7
こんな感じ
メッシュデフォルトのマテ
リアルを上書き
マテリアルでロードされるテクスチャ - パターン7
結果
BPで「赤」に上書きしたけど、デフォルトマテリアルの「緑」
テクスチャも読み込まれます
マテリアルでロードされるテクスチャ - パターン7
同じメッシュから、マテリアルでカラーバリエーションを作る
際はご注意を……
マテリアルでロードされるテクスチャ
パターン8
レベル上で上書き
マテリアルでロードされるテクスチャ - パターン8
先ほどと同じようにBPに「緑」テクス
チャのメッシュを登録。
今度はBP上ではなく、レベル上で
「赤」テクスチャのマテリアルに差し
替え。
マテリアルでロードされるテクスチャ - パターン8
結果
同じように「緑」テクスチャも読み込まれます
マテリアルでロードされるテクスチャ
まとめ
マテリアルでロードされるテクスチャ - まとめ
割と簡単に使ってないテクスチャが読み込まれます。
細かく注意していきましょう。
マテリアルでロードされるテクスチャ
エディター上での確認
マテリアルでロードされるテクスチャ - エディター上での確認
コンテンツブラウザでアセットを右クリック。
「Reference Viewer」で何が読み込まれるか確認できま
す。
右側のアセットが同時に
読み込まれる
マテリアルでロードされるテクスチャ
読み込んだテクスチャリストを表示
マテリアルでロードされるテクスチャ - 読み込んだリストを表示
スタンドアローン起動、もしくはDevelopパッケージ版で起動
します。
起動して確認したいタイミングで、「@」キーを押したら出てく
るコンソールから「Obj List Class=Texture2D」
マテリアルでロードされるテクスチャ - 読み込んだリストを表示
コマンドを打ち込むとログに出力されます。
「@」キーを2回押すと枠が拡張されてログが確認出来ま
す。
(もしくはプロジェクトフォルダのSaved/Logs/内)
もくじ
● はじめに
● マテリアルでロードされるテクスチャ
○ パターン1~8
● Switch / Override
○ パターン1~4
● 痒いところのTips
○ Texture枚数
○ Vertex Interpolator
Switch / Override
Static Switch Parameter もしくは Static Bool Parameter
ノード。
子マテリアルインスタンス側でフラグを操作して処理を変更
することが出来ます。
Switch / Override
もしくは、子マテリアルインスタンス側で変更出来るBlend
ModeやShading Model, Two Sidedなど。
Switch / Override
について。
Switch / Override
UE4マテリアル触る人のバイブル。
● 大規模タイトルにおけるエフェクトマテリアル運用 (SQEX
大阪: 林武尊様)
○ https://www.slideshare.net/EpicGamesJapan/sqex-ue4dd
Switch / Override
「分岐を変えると別シェーダーになり」
引用:
https://www.slideshare.net/EpicGame
sJapan/sqex-ue4dd
Switch / Override
UE4マテリアル触る人のバイブル。
● マテリアルとマテリアルインスタンスの仕組みと問題点
の共有 (Epic Games Japan: 篠山範明)
○ https://www.slideshare.net/EpicGamesJapan/epic-games-japan-ue4dd
Switch / Override
「データサイズやロード時間」「同一組み合わせのシェーダ
は一つのインスタンスのみ」
引用: https://www.slideshare.net/EpicGamesJapan/epic-games-japan-ue4dd
Switch / Override
影響するのは
ディスクサイズ?(+ロード時間)
シェーダーメモリ?
レンダリング時は同じシェーダー?
マテリアルインスタンスが兄弟の時は?
Switch / Override
2つのスライド。UE4バージョン4.13~4.14
→2016年11月
Today 2019年3月
現在の4.21だと?
→結論を先に出しますが、バージョンで挙動に違いはあり
ませんでした。
Switch / Override
気になったので調べました
Switch / Override
確認方法
Switch / Override - 確認方法
マテリアル
● Static Switch Parameter を用意。テクスチャ使うかどう
か。デフォルトOFF。
● デフォルトOpaque
● この子マテリアル
インスタンスのみで
調べます
○ (マスターマテリアルは
共通です)
Switch / Override - 確認方法
メモリ系はstat系のコマンドを使用します。
「stat shaders」と「stat memory」
Switch / Override - 確認方法
● Num Shader Resources Loaded
○ 読み込んだシェーダーのリソース数
● PixelShader Memory
○ ピクセルシェーダーのメモリ量
Switch / Override - 確認方法
ディスクサイズはパッケージングした結果で確認します。
もくじ
● はじめに
● マテリアルでロードされるテクスチャ
○ パターン1~8
● Switch / Override
○ パターン1~4
● 痒いところのTips
○ Texture枚数
○ Vertex Interpolator
Switch / Override
パターン1
Switch ON→OFF→ON
Switch / Override - パターン1
子マテリアルインスタンスでON。
更にその子マテリアルインスタンスでOFF
親
子
子子
①
②
③
数字の順にロードし
ていきます
Switch / Override - パターン1
結果
Shader Resources
Loaded
Pixel Shader
Memory
ディスクサ
イズ
レンダリング時の
シェーダー
①Switch OFF(親) 2,192 2.61 MB 4 KB A
②Switch ON (子) 2,274 2.79 MB 1,220 KB B
③Switch OFF (子子) 2,274 2.79 MB 1,220 KB A
同じ文字IDだと
同じシェーダーが走ってる
Switch / Override
パターン2
プロパティオーバーライド Opaque→Masked→Opaque
Switch / Override - パターン2
子マテリアルインスタンスでMasked。
更にその子マテリアルインスタンスでOpaque。
親
子
子子
①
②
③
Switch / Override - パターン2
結果
Shader Resources
Loaded
Pixel Shader
Memory
ディスクサ
イズ
レンダリング時の
シェーダー
①Opaque(親) 2,192 2.61 MB 4 KB A
②Masked(子) 2,378 2.83 MB 2,355 KB B
③Opaque(子子) 2,378 2.83 MB 1,220 KB A