UE4-4.19 で Material Layers を試用する手順
概要
従来の UE4 では「マテリアルのレイヤーブレンド機能」=「マテリアル関数の合成機能」でした。4.19以降で試験実装された "Material Layers" を使うと「マテリアル関数」ではなく、新たなアセットとして追加される「マテリアルレイヤー」と「マテリアルレイヤーブレンド」を用いた新しいマテリアルのレイヤー合成を試用できます。と、いうわけで基礎的な使い方を確認しつつ試用してみます。
なお、この機能の利点は複雑なマテリアルを作成したい場合に、マテリアル1つで全てを実装しようとするとグラフが混沌となってしまう問題をレイヤーと合成それぞれを独立したアセットに分割する事で解消しつつ、従来のマテリアル関数を組み合わせる方法に比べてもマテリアルインスタンスでの一元的なパラメーターの取り扱いが可能となるなど便利も向上する、ということで試験実装が進められたようです。
実際、すっきりするし使いやすい。(この機能追加のために 4.19 からは MaterialInstance 系の実装が C++er 的にはしれっと変更されていて 4.18 までの C++ コードは少し変更してあげないと翻訳不能になっていたりとかあります。 Blueprint で本記事くらいの機能と動作の確認をした上で実装変更をドキュメントなど眺めると、なるほどそれでこうなったのか、とわかります。知らんと翻訳エラーの発生と対応方法に若干戸惑うかも。)
準備
- 4.19 以降のエンジンとプロジェクトを用意する
- UE4Editor のメニュー "Edit" から "Project Settings" の "Engine - Rendering" の "Experimental" にある "Support Material Layers" チェックボックスをON
Note: OFF -> ON にすると UE4Editor の再起動を促されます。
試用
手順
2つのマテリアルレイヤー la
lb
と、1つのマテリアルレイヤーブレンド blend
を使うマテリアル m
を作成し、 m
のインスタンス i
を適当な Static Mesh の Material に設定するまで:
- "Content Browser" の "Add New" から "Materials & Textures" -> "Material Layer" でマテリアルレイヤーアセット
la
を作る - 同様に "Material Layer" アセットの
lb
も作る - 同様に "Material Layer Blend" アセットの
blend
も作る - 同様に "Material" アセット
m
も作る m
の出力ノードの "Details" の "Material" の "Use Material Attributes" チェックボックスを ON にするm
を "Content Browser" のコンテキストメニューから "Create Material Instance" してマテリアルインスタンスアセットi
を作る- 適当な "Static Mesh" なり "SK_Mannequin" などを配置して "Mesh" の "Material" に
i
を設定
動作確認として la
lb
blend
それぞれに適当なパラメーターを噛ませた出力を実装:
la
lb
に自動的に追加されている "SetMaterialAttributes" ノードの "Details" の "Material Attributes" の "Attribute Set Types" に設定したいマテリアル属性の項目を追加し、出現するピンへ "Texture Sample" や "VectorParameter" などのノードを追加してパラメーターを接合blend
に自動的に追加されている "BlendMaterialAttributes" ノードに "ScalarParameter" ノードを追加して接合し、適当な既定値を設定m
に "Material Attribute Layers" ノードを適当な名前で追加し、出力ノードへ接合m
に追加した "Material Attribute Layers" ノードの "Details" の "Layers" の "Bacbkground" の "Layer Asset" にla
を設定m
に追加した "Material Attribute Layers" ノードの "Details" の "Layers" に "Layer 1" を追加し、 "Layer Asset" にlb
を、 "Blend Asset" にblend
をそれぞれ設定i
の "Layer Parameters" にla
,lb
blend
で追加した設定可能な "Parameters" 系のノードの値を適当に調整
動作確認:
i
を設定した "Mesh" を眺めるなりプレイするなりしてla
をベースにlb
をblend
するマテリアルのインスタンスが意図通り動作する事を確認
補足図
↓ "Support Material Layers" を ON にしたプロジェクトでは作成できるアセットに "Material Layer" と "Material Layer Blend" が増える
↓ "Material Layer" アセット作成直後のグラフ
↓ "Material Layer Blend" アセット作成直後のグラフ
↓ "Material" アセット m
の "Details" の "Use Material Attributes" チェックボックス
↓ "Material" アセット m
に "Material Attribute Layer" ノードを追加し、 "Use Material Attributes" で変化した出力のピンと接合
↓ la
に動作確認用に例として "TextureSampler2D" パラメーターノードを "SetMaterialAttributes" の "BaseColor" へ追加したグラフ
↓ lb
に動作確認用に例として "VectorParameter" パラメーターノードを "SetMaterialAttributes" の "BaseColor" へ追加したグラフ
↓ blend
に動作確認用に例として "ScalarParameter" パラメーターノードを "BlendMaterialAttributes" の "Alpha" へ追加したグラフ
↓ m
に追加した "Material Attribute Layers" ノードの "Details" の "Layers" に la
lb
blend
を設定
↓ i
の "Layer Parameters" で la
, lb
, blend
のパラメーターを調整
↓ マネキンのマテリアルに i
を設定した状態での動作確認
参考
- Material Layering Feedback for 4.19 - Unreal Engine Forums
- 試験実装中のマテリアルレイヤー機能の公式スレッド
- http://historia.co.jp/archives/955/
- 従来から使用できるマテリアル関数ベースのマテリアルレイヤー合成機能の参考