>100 Views
April 03, 26
スライド概要
Game Creator Conference 2026 (https://gc-conf.com/) での講演スライドです。
Substrateの基礎から互換性、二つのGBufferの説明、パフォーマンステストなどについて解説しています。
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
Game Creator Conference 2026 UE5の新標準マテリアルシステム Substrateの内部構造とパフォーマンス Epic Games Japan, Senior Software Engineer, Developer Relations Takashi Suzuki
マテリアル、 デフォルトでサブストレートに 変わるってよ Substrateです!
はじめに いやいや 急にSubstrateを使え と言われても 今まで積み上げてきた いままで作ってきた アセットはどうなるの? マテリアルは作り直し? 重くなりそう 移行しないとだめ?
資料1 Unreal Engine Substrate: Authoring Materials that matter https://advances.realtimerendering.com/s2023/2023%20S iggraph%20%20Substrate.pdf
資料2 Exploring Substrate Materials Basic to Advanced Techniques https://www.youtube.com/watch?v=4X-nZ7qflcw
資料3 Everything You Wanted to Know About Substrate (But Are Too Afraid to Ask) https://www.youtube.com/watch?v=SqPaL8HS_Lw
Substrateとは BSDF 目次 旧マテリアルとの互換性 AdaptiveGBufferと BlendableGBuffer パフォーマンス比較
Substrateとは BSDF 目次 旧マテリアルとの互換性 AdaptiveGBufferと BlendableGBuffer パフォーマンス比較
Substrateとは
Substrateとは 物体の表示のされ方を定義するマテリアルの新しいオーサリング形式 従来のマテリアルシステムの制限などで実現できなかった 複雑な表現を可能にし、モバイルから映像制作、工業デザインまでに対応
Substrateのモチベーション 旧マテリアルはUE4時代から連綿と受け継がれてきた構造をもち いくつかの制約がでてきました。 それを乗り越えるということがモチベーションになりました。 業界標準との連携 金属から非金属への ブレンド時に発生する 白化アーティファクト 複雑な光学現象を低リソー スで標準実装
Substrateで実現される 新しい表現 複数の層が積み重なった 複雑なコーティングに さらに埃の層を重ねる
Substrateで実現される新しい表現 薄膜 シャボン玉や油膜の表現
高性能BSDF 表面や物体の充填媒質を表現する 多彩なパラメータ シンプルで軽量な表現から複雑な光 学現象までを表現
Substrateでの シェーディングモデル SSS 複数の材質を 一つのマテリアルで重ねて出力できる ように Lit
Substrateとは BSDF 目次 旧マテリアルとの互換性 AdaptiveGBufferと BlendableGBuffer パフォーマンス比較
Substrateのマテリアル構造 ルートノード Substrateのマテリアルはルートノードの FrontMaterialにBSDFノードを接続する形で 構成する BSDF BSDFのピンは紫色 ここに繋ぐ
BSDFノード BSDF = 双方向散乱分布関数 物体のシェーディングを表現 Substrateの標準BSDFとなっている SlabBSDFが幅広い表現力を持つ 特殊な表現をもつHairやUnlit、 SingleLayerWaterなどは独立したBSDFノー ドとして実装されている
Slab BSDF 大半の物質を表現できる汎用BSDF スラブは「平らな板」という意味です が、ある程度の厚みを持った物質の塊 という意図で名づけられている その表面と媒質を表現 標準的なパラメータ以外はオプトイン (省略可能)機能として実装
Slab BSDF ノードインターフェイスには 旧マテリアルから続投パラメータもあり 概ね同じ意味を持つ 続投パラメータ
Slab BSDF この部分は物質の表面の性質を表現す るパラメータ達です。 表面の 反射特性 ラフネス 特殊な 反射特性
媒質の色 Slab BSDF この部分は媒質の特性を示す 媒質の特性
DiffuseAlbedo 従来のBaseColorに近いパラメータ 拡散反射色を示す 金属のスラブであれば基本的に DiffuseAlbedoは真っ黒 SubstrateMetalnessToDiffuseAlbedo-F0 ヘルパーノードで 慣れ親しんだMetalicを利用できる ヘルパーノード
F0 鏡面反射色 リニアカラー(V3)を入力可 一般的に誘電体(≒非金属)は 0.02~0.08のグレーの値を設定
代表的なF0値 https://dev.epicgames.com/documentation/ja-jp/unreal-en gine/overview-of-substrate-materials-in-unreal-engine#su bstrate%E3%83%9E%E3%83%86%E3%83%AA%E3%82 %A2%E3%83%AB%E3%81%AE%E3%83%91%E3%83%A 9%E3%83%A1%E3%83%BC%E3%82%BF%E5%8C%96
BaseColor⇔DiffuseColor と Specular⇔F0 BaseColor × 1-Metallic = ・旧マテリアル MetallicでBaseColorをDiffuse(拡散反射)と Specular(鏡面反射)に振り分ける Specular (0.0~0.08) × 1-Metallic + ・Substrate DiffuseColor F0 BaseColor × Metallic = =Diffuse(拡散反射) =Specular(鏡面反射) Diffuse Specular 旧マテリアル Substrate DiffuseAlbedo = Diffuse F0 = Specular
BaseColor/DiffuseColorと Specular/F0 シェーダーコード中の変換コードを みると理解しやすい MetalnessToDiffuseAlbedoF0の中でもこの コードが走っている float DielectricSpecularToF0(float Specular) { return float(0.08f * Specular); } float3 ComputeF0(float Specular, float3 BaseColor, float Metallic) { return lerp(DielectricSpecularToF0(Specular).xxx, BaseColor, Metallic.xxx); } float3 ComputeDiffuseAlbedo(float3 BaseColor, float Metallic) { return BaseColor - BaseColor * Metallic; }
F90 いわゆるフレネル項の部分に現れる色 薄膜やキチン質、特殊な金属などの 表現に使われる
FlipFlop 厳密には誤差があると思われますが、 Substrate FlipFlopノードで エッジ領域に対する鏡面反射色を エミュレートすることも検討できる
SpecularProfile スペキュラープロファイルアセット の中の色遷移バーを調整して視線に対 して独自の鏡面反射成分を出力 アセットはスラブの詳細にセット
SSS MFP MFP(Mean Free Path)は 媒質内のRGB毎の光の移動距離(cm)を 表す サブサーフェススキャッタリングや 色ガラスのような表現に利用 Substrate Transmittance-To-MeanFreePath が色と厚みで計算してくれて デザイナーフレンドリー
SSS MFP と SubsurfaceProfile SubsurfaceProfileが設定されると MFPは無視される
SSS MFP を ColoredTransmittanceで使う 半透明として使いたい場合 Slab > Sub-Surface Typeを Simple Volumeに 詳細 > BlendModeを以下に設定 ● TranslucentGrayTransmittance 旧Translucentブレンドモード SSSMFPがグレイ ● ColoredTransmittanceOnly 軽量 DiffuseやF0などが不要なら ● TranslucentColordTransmittance 旧マテリアルのThinTranslucentに相当 SSSMFPが色付き場合はこちらを選択
Coverage Weight ノード スラブの被覆率を表す 多層Slab利用時の上位層の透過率や 半透明描画時のαとして機能する 1.0 0.5 Top Slab Bottom Slab 0.25
Coverage Weight ノード - 半透明 ブレンドモードが半透明の時はαとして機能
Fuzz 布や産毛の表現に使われるパラメータ エッジ領域をピークとして FuzzRoughnessで広がりを調整
SecondRoughness 二つのラフネスのライティング結果をブレンドして 複雑な反射特性を作る = Dual Specular Roughness 0.9 Roughness 0.9 Second 0.1(25%) Roughness 0.5 Roughness 0.9 Second 0.1(50%) Roughness 0.1 Roughness 0.9 Second 0.1(75%) 鏡面反射の「面積」 が維持されている
Glint 塗料のフレークのような確率的に現れる鏡面反射 GBufferの出力量がかなり増えるため 一撃でComplexSpecialに
複雑度 各BSDFの複雑度 Single(最軽量) < Single < Complex < Complex Special スラブノードに接続されているパラメータで 複雑度が変化しノードのヘッダに表示される Substrateタブでマテリアル全体の複雑度や パフォーマンスの指標値を確認できる
GPUパスの変化 - タイル毎の複雑度 Substrateでは深度プレパスが強制されるほか、 ライティングの前にタイル分類パスが追加される このパスではタイル内のピクセルの複雑度を参照して タイルの複雑度を確定させる タイル毎に最適なライティングシェーダーが選択される CitySampleの 車両やビルのガラスはClearCoat 深度プレパス ベースパス タイル分類パス ディファード ライティング パス リフレクション 半透明
複雑度の確認方法 ビューポートでピクセルの複雑度やピクセル毎の マテリアルの状態を確認できる ● ● ● ● MaterialProperties カーソル下にあるパラメータを確認 Material Bytes Count 出力Byte数≒描画負荷 Substrate Info GBuffer使用量や設定を表示 Material Classification タイル毎の分類を表示
オペレーターノード 2つのスラブを合成するSubstrateの強力な機能 接続するとノード上にクロージャの構造が表示される クロージャはBSDFがライティングパスで評価されるための データの塊を示す
オペレーターノード パラメーターブレンディング パラメータブレンディングオプションで 入力BSDFをパラメータのブレンディングで合成することができる ライティングパスに渡されるパラメータが変わるため絵は変化してしまうが 出力されるBSDFの数が減るので大幅な軽量化が効果が得られる
Substrateとは BSDF 目次 旧マテリアルとの互換性 AdaptiveGBufferと BlendableGBuffer パフォーマンス比較
旧マテリアルは廃止? SubstrateはUE5.7でProduction Readyとなりました。 今後いくつかのバージョンを経て旧マテリアルシステムは廃止予定となります。 ベータ ステータスへ Strata 公開 UE 5.1 UE 5.2 Substrateに 改名 UE 5.5 完全移行 UE 5.7 Production Ready &デフォルト Future
マテリアルの破壊的アップデートが必要? 旧マテリアルからSubstrateへの変換はUE5.6までアセットの破壊的な変更が必要で、 一旦Substrateに変換するともとに戻せないという仕様でした。 UE5.7ではこの点が改善され、変換をシェーダーコンパイラが吸収するようになりました。
新旧両対応の マテリアルルートノード 旧パラメータと新パラメータの両方を備える 新規作成したマテリアルでは ShadingModelなども従来通り存在 全部入りルートノード ShadingModelなど 従来のパラメータ
新旧両対応の マテリアルルートノード マテリアルアトリビュートを利用した マテリアルでは 右のようなルートノードになります MaterialAttribute
新旧両対応の マテリアルルートノード 旧来のインターフェイスだけに接続すれば 互換マテリアルとしてそのまま利用可能
新旧両対応の マテリアルルートノード 「Substrateの書き方」にして接続すると ルートノードが変化し MaterialDomainやShadingModelが グレーアウト どちらの書き方も許容されます 旧パラメータの一部が 無くなった! グレーアウト
互換性や変換用のヘルパーノード アーティストフレンドリーな調整や互換性のためのいくつかのヘルパーノード ごくわずかな変換のための命令が付加されることもあるが多くはコンパイラが吸収する
Substrateとは BSDF 目次 旧マテリアルとの互換性 AdaptiveGBufferと BlendableGBuffer パフォーマンス比較
GBufferの切り替え Substrateのパワーを全て利用できる 先進的なAdaptiveGBufferと すべてのプラットフォームで動作可能な BlendableGBufferを切り替えられる AdaptiveGBufferはSM6世代の機能が必要
AdaptiveGBuffer 様々な複雑度のマテリアルをGBufferに格納する ための仕組み 書き込むデータ量に応じて任意のサイズの情報 を書き出す Substrate用レンダーターゲット: ● MaterialBuffer 3枚 12Byte ● TopLayer 1枚 4Byte or 8Byte (r.GBufferFormatに応じて変化) RenderTarget SceneColor Velocity (OptIn) PrecomputeShadow (OptIn) RT0:MaterialBuffer0 RT1:MaterialBuffer1 RT2:MaterialBuffer2 TopLayer TextureArray TextureArray0 MaterialBuffer3 追いパラメータ用テクスチャアレイ: 4枚目(13byte)以降はこちらに書き込み 要求に応じて設定で許容された値まで自動拡張 TextureArray1 MaterialBuffer4 TextureArray2 MaterialBuffer5 TextureArray3 MaterialBuffer6 TextureArray4 MaterialBuffer7 TextureArrayN MaterialBufferN+3
AdaptiveGBuffer 様々な複雑度のマテリアルをGBufferに格納する ための仕組み 書き込むデータ量に応じて任意のサイズの情報 を書き出す Substrate用レンダーターゲット: ● MaterialBuffer 3枚 12Byte ● TopLayer 1枚 4Byte or 8Byte (r.GBufferFormatに応じて変化) RenderTarget SceneColor Velocity (OptIn) PrecomputeShadow (OptIn) Simple 12Byte RT0:MaterialBuffer0 RT1:MaterialBuffer1 Single 20Byte RT2:MaterialBuffer2 Simple 12Byte TopLayer TextureArray0 MaterialBuffer3 Complex TextureArray 追いパラメータ用テクスチャアレイ: 4枚目(13byte)以降はこちらに書き込み 要求に応じて設定で許容された値まで自動拡張 TextureArray1 MaterialBuffer4 TextureArray2 MaterialBuffer5 TextureArray3 MaterialBuffer6 TextureArray4 MaterialBuffer7 TextureArrayN MaterialBufferN+3
データレイアウト Simple 4Byte 出力はビット演算を使ってツメツメにパック Header(8b)|AO(8b) DiffuseやF0はR7G7B6+ディザ BSDFの種類や使っている機能によってデータ レイアウトは大きく変化する Roughness (8b) Diffuse (20b) TopLayer Roughness (8b) F0(8b) F0(12b) Normal(22b) ※低精度Normal Single F90|SecondRoughness Header(8b)|AO(8b) LegacyMode(3b)| BSDFState(12b) Diffuse (20b) F0(12b) F0(8b) Roughness (8b) Diffuse F90 (16b) (20b) TopLayer Roughness (8b) Anisotropy (8b) SSSPhase Aniso(8b) Haziness (16b) Normal(22b) ※低精度Normal
BlendableGBuffer MRT0 SceneColor (Emissive) - MRT1 WorldNormal PerObject GBufferData ● ハードウェアブレンディングが利用可能 MRT2 Metallic ● Slabのオプトイン機能が省略される ● F90/Glint/Fuzz/SecondRoughness等 MRT3 BaseColor MRT4 CustonData ● コンソール機での60fpsターゲット向け ● 従来と同等の20Byte+のRenderTargetで出力 ● ClosureCountは1固定 Specular Roughness ShadingModel+ Mask AO
機能制限表 LegacyMaterial BlendableGBuffer AdaptiveGBuffer マテリアルデータ保存先 固定 固定 可変(テクスチャアレイ) クロージャ(BSDF)数 1 1 1~4 ハードウェアブレンディング 可 可 不可 デカール方式 Blendable or DBuffer Blendable or DBuffer DBuffer 高度なライティング機能 × × ○ 全プラットフォーム 全プラットフォーム SM6世代 F90 Glint SecondRoughness DiffusionSSS など 対応プラットフォーム デスクトップ&現世代コンソール
Substrateの調整
● コンソール変数でシェーダーの動作を調整
r.Substrate.*
● デスクトッププラットフォームではほとんどの
設定がiniファイルで有効化されているが、
コンソールプラットフォームはデフォルトで無
効になっているものが多いことに注意
r.Substrate.ClosuresPerPixel
クロージャの最大数
r.Substrate.ShadingQuality
シェーディング精度
r.Substrate.BytesPerPixel
GBufferの最大サイズ
r.Substrate.RoughDiffuse
1:ラフ拡散モデル 0:ランバート
r.Substrate.Glints
Glintsの有効化
r.Substrate.OpaqueMaterialRou
ghRefraction
不透明サーフェスでの荒い屈折表現の有効化
static TAutoConsoleVariable<int32> CVarSubstrateShadingQuality(
TEXT("r.Substrate.ShadingQuality"),
0, // Substrate 60fps by default
TEXT("Define Substrate shading quality (0: approximate lighting, 1: accurate lighting). This variable is read-only."),
ECVF_ReadOnly | ECVF_RenderThreadSafe | ECVF_Preview);
AdaptiveとBlendableに 両対応する ● Platform毎にBlendableとAdaptiveを 切り替える事自体は可能 ● マテリアルエディタ上で切り替えて確認する ワークフローには対応していない ● GBufferフォーマットでのSwitch無し ● Adaptive専用の表現を使った場合 Blendableへのフォールバック時の 再現性には妥協が必要 ● 下限プラットフォームに合わせて GBufferFormantを選択して全プラットフォー ムで共通化することを推奨します (Platform)Engine.ini [/Script/Engine.RendererSettings] r.Substrate=True ; 0=Blendable, 1=Adaptive r.Substrate.ProjectGBufferFormat=0
Substrateとは 旧マテリアルとの互換性 目次 BSDF AdaptiveGBufferと BlendableGBuffer パフォーマンス比較
CitySample CitySample on PS5 冒頭600frames ● Substrate+Adaptive ● Substrate+Blendable ● 旧マテリアル
CitySample Material Byte Count すべてが16Byte以下 Material Classification グリーンがDefaultLit オレンジがClear Coatを含むタイル
FrameTime フレームタイムは概ね同じような動き →DynamicResolutionが吸収しているから
DynamicResolutionPercentage 動的解像度スケールはBlendableとSubstrateOffがほぼ同等 Adaptiveは2~4%程度の低下が見られるフレームがある
パス毎の個別グラフ AdaptiveにおいてBasePassとLumenReflectionに有意な負荷削減が見られる代わりに ライティングパスの負荷が増加
AdaptiveとBlendableどちらを採用するべきか パフォーマンス面ではBlendableGBufferが旧マテリアルとほぼ同等のパフォーマンスを達成している 現世代コンソール(SM6世代)以降で、かつレガシーBSDFやシンプルBSDFが画面の大半を占めているならば AdaptiveGBufferでもほぼ同等のフレームレートを達成可能ではあるが 高度な機能を使った場合のシェーダーのサイズ増加やGBufferの拡張による消費メモリには注意が必要 ゲーム開発においては、複層スラブ(クロージャ)や高度な表現を(ある程度気軽に)盛り込めるようになるのは 次世代コンソールからと考えて良いと思います
おまけ ToonShadingSlab
Toon BSDF 5.8 (TBD) 今後のバージョンで 待望のエンジン組み込みの トゥーンBSDFが追加される予定
Toon Profile 5.8 (TBD) シェーディングの諧調などをアセットで調整 プロジェクトにあった様々な表現を追究できる ディザ/ハッチングパターンなどの対応も
まとめ SubstrateがついにProductionReadyに! UE5.7で移行の痛みが限りなく縮小した 開発者は既存のアセットを任意のタイミングで段階的に移行でき、いざというときはレガシーマテリアルイン ターフェイスへ戻すことも可能 AdaptiveとBlendableの選択はまずターゲットプラットフォームを念頭に置くことが重要 リッチなマテリアルはライティング負荷を数倍に増加させる可能性がある 高フレームレートを維持するためにはできる限りSimpleスラブで表現すること 今後マテリアルの表現力の向上はSubstrateに対して行われることをご承知ください!
UE5の最新動向は @UnrealEngineJP でチェック! https://x.com/UnrealEngineJP
Thanks!