Substrate は Unreal Engine のマテリアル オーサリング手法です。デフォルト ライティングやクリア コートなどの決まった組み合わせのシェーディング モデルやブレンド モードに代わって、より表現力に優れたモジュール式のフレームワークを提供します。
Substrate ではない (つまり従来の) マテリアル システムの特定の抽象化は Substrate によって廃止され、物質の測定されたプロパティで置き換えられています。 そうすることで、より幅広い動作範囲のパラメータ空間が生み出され、金属、ガラス、プラスチックなどの個別のサーフェス タイプの間でより正確にブレンドできるようになっています。 また、Substrate ではマテリアルのレイヤー化のプロセスが効率化されるため、金属上の液体やサブサーフェス散乱でのクリア コートのようなサーフェスを表現するのが容易になります。
Substrate におけるマテリアルは「物質のスラブ」として概念化されています。これらのスラブは Principled BSDF (双方向散乱分布関数) 表現であり、明確に定義された単位による物理量でパラメータ化されます。 マテリアルは (ミキシングやレイヤー化などの) 操作対象にあるスラブのグラフとして表現されます。 原則に基づいた表現であるため、Substrate マテリアルは、ビジュアル品質と引き換えにパフォーマンスが向上するようにプラットフォームの能力に応じて単純化することができます。
新規プロジェクト
新規作成されるプロジェクトでは、Substrate がデフォルトで有効になっています。 UE 5.7 以降にアップグレードする既存のプロジェクトでは、プロジェクト設定で Substrate のサポートを明示的にオプトインしていない限り、デフォルトで非 Substrate のパスが引き続き使用されます。
これらの既存プロジェクトの場合は、[Project Settings (プロジェクト設定)] > [Rendering (レンダリング)] で Substrate にオプトインし、Substrate マテリアル を有効にして、プロジェクトを再起動して変更を反映させることができます。
Substrate がデフォルトで有効になっている新規プロジェクトでは、ビジュアル忠実度よりも速度を優先するために、ブレンダブル GBuffer 形式が使用されます。 この形式は、プロジェクトのレンダリング設定で変更できます。
自動車や建築など、一部のテンプレート プロジェクトでは、パフォーマンスよりもビジュアルの忠実度を優先するために、デフォルトでアダプティブ GBufferが使用されます。
プロジェクトの GBuffer 形式の設定の詳細は、このページの「GBuffer 形式」セクションを参照してください。
マテリアル エディタの変換
既存の非 Substrate マテリアルは、そのまま機能しますが、Substrate ノードには自動的に変換されません。 非 Substrate の既存のマテリアル、または新たに作成されたマテリアルでは、非 Substrate ルート ノードのパラメータ化が引き続き使用され、コンパイル時に Substrate に変換されます。 これにより、プロジェクトの移行が簡素化されて、アセットの変更や再保存が必要なくなり、クック処理にかかる負荷が軽減されます。
マテリアルを Substrate に変換するには、ルート ノードを右クリックして、[Convert to Substrate (Substrate に変換)] を選択します。 これにより、自動的にSlab (スラブ) が作成されて、ルート ノードの Front Material (フロント マテリアル) に接続され、非 Substrate ルート ノードから Slab への入力が接続されます。
既存のプロジェクトで Substrate を有効にする場合や、Unreal Engine 5.7 以降のバージョンに移行する場合は、次のガイドラインに従ってください。
Substrate が有効になっているプロジェクトで Substrate ではない既存のマテリアルを開いても、そのマテリアルは変更されません。 Substrate ではないプロジェクトとの互換性が維持されます。
明示的に変換されたマテリアルは、Substrate ではないプロジェクトと互換性がありません。 その変換は永続的であるため、Substrate ではないマテリアルに戻すことはできません。
プロジェクトで Substrate が無効になっている場合、Substrate マテリアルは黒色でレンダリングされます。 変換済みのマテリアルから作成された従来の Substrate マテリアルも同様です。 変換された Substrate マテリアルを従来のスタイルのマテリアルに手動でつなぎ直すことはできますが、そうしてもマテリアル グラフに存在する Substrate ノードは取り除かれません。
ビジュアル忠実度を高める GBuffer 形式
Substrate は、マテリアル データの格納用に ブレンダブル GBuffer と アダプティブ GBuffer という 2 つの異なる GBuffer 形式をサポートしています。 これらの形式には、速度、メモリ、ビジュアル忠実度に関して、異なるトレードオフがあります。
ブレンダブル GBuffer
この形式は、第一原則として、固定メモリ使用量と予測可能な速度を目標としています。 主な用途は、60Hz プロジェクトです。 これには限定された機能セットが含まれ、非 Substrate パスと似ています。
パフォーマンスは、非 Substrate パスと同等です。
パフォーマンス指向のプロジェクト (60Hz) 対象にしています。
全てのプラットフォームで、ビジュアルの一貫性を確保できます。
クック オーバーヘッドはありません。
DBuffer デカール技法を強制的に有効にするわけではありません。
アダプティブ GBuffer
この形式は、ビジュアル忠実度を目標としており、Substrate の可能性を最大限に活用することで、充実したマテリアルの複雑度を実現します。
パフォーマンス負荷の値が大きくなり、画面上で表示されるマテリアルの複雑さに左右されます。
ビジュアル忠実度を目標とし、より複雑なシェーディング動作を可能にします。
ビジュアル忠実度の高さは、プラットフォームに左右されます。
ブレンド可能形式と比べて、クック時間が約 15% 長くなります。 複雑なシェーディング動作をするマテリアルを使用すると、クック時間がさらに長くなります。
DBuffer デカール技法を強制的に有効にします。
クロージャー数とピクセルごとのバイト数の追加コントロールは、プロジェクト設定とコンソール変数から行います。
この形式がサポートされているのは、現行世代のコンソールである Xbox Series X/S、PlayStation 5 および PlayStation 5 Pro、Windows PC (SM6)、macOS (SM6)、Linux (SM6) のみです。 その他のプラットフォーム (SM5 プラットフォームを含む) では、マテリアルは簡素化され、ブレンダブル GBuffer 形式で実行されます。
アダプティブ GBuffer 使用に関する既知の問題は、このページの「制限事項および既知の問題」セクションを参照してください。
DBuffer
ブレンダブル GBuffer 形式は、ブレンダブル デカールと DBuffer デカールの両方を引き続きサポートします。 DBuffer デカールはデフォルトで有効になっていますが、プロジェクト設定でオプトアウトすることができます。
アダプティブ GBuffer 形式は、DBuffer デカールのみをサポートします。 プロジェクトで DBuffer デカールが使用されていない場合、アダプティブ GBuffer 形式がサポートされているプラットフォームでは、レンダリング システムが自動的に有効になります。
DBuffer デカールを使用する場合、Substrate は実験的パスとして DBuffer 評価中のマテリアルの法線読み取りをサポートします。これは r.Substrate.DBufferPass で有効にできます。 これにより、DBuffer マテリアルでは、時間的再投影や深度ベースの法線の再構築を行わずに、マテリアルの法線を使用できるようになります。
任意選択のプロジェクト設定とコンソール変数
Substrate には、以下の任意選択のプロジェクト設定とコンソール変数があります。
| プロジェクト設定 | 説明 |
|---|---|
Substrate GBuffer 形式 (プロジェクト) | プロジェクトで使用する GBuffer 形式を選択します。
|
Substrate ピクセルごとのクロージャー (プロジェクト) | ピクセルごとに評価できるクロージャーの最大数を定義します。 これよりも多くのクロージャーがマテリアルに含まれる場合、マテリアルはプロジェクトのバジェットに収まるまで反復的に簡略化されます。 さらに、各プラットフォームには独自のクロージャー数の上限があり、以下の設定でオーバーライドできます。
|
Substrate ピクセルごとのクロージャー オーバーライド | 各プラットフォームでピクセルごとに評価されるクロージャーの最大数を、どのように定義するか選択します。
|
Substrate の不透明型マテリアルの粗い反射 (実験的機能) | オンであれば、他のマテリアルをコーティングする粗いサーフェスで、物理的に妥当な方法で下層のレイヤーをぼかすことができます。 これは実験段階の機能です。 |
Substrate 透過処理マテリアルの粗い屈折 | 有効にすると、透過サーフェスでラフネスの関数として粗い屈折を生成できます。 これを有効にすると、歪みパスにより負荷がかかります。 |
Substrate 詳細ビジュアライゼーション シェーダー(エディタ/Win64/DX12 のみ) | Substrate マテリアルの高度なデバッグ ビジュアライゼーション シェーダーを有効にします。 ベース パス シェーダーは、そのような高度なデータを出力できます 現時点で Win64 用に構築され、DX12 グラフィック API を実行しているエディタでのみ利用可能です。 |
Substrate のマテリアル レイヤーサポートを有効化 (実験的機能) | Substrate マテリアルのレイヤー化とユーザー インターフェースを有効にします。 注: このサポートは一方向のみであり、従来のレイヤー マテリアルは自動的にアップグレードされ、アセットを再保存した後は手動でのみ元に戻すことができます。 |
| コンソール変数 | |
| Substrate マテリアルが自動的に単純化される前のピクセルあたりのストレージ バイト数を指定する方法を提供します。 この変数は、デフォルトではピクセルあたり 80 バイトに設定されています。 より大きいストレージ要件がある複雑なマテリアルでは、この値を増やすことができます。 この値を大きくするほど使用されるメモリ量が増え、メモリ帯域幅や他のパフォーマンス特性に影響を及ぼす可能性があります。 この変数とパフォーマンスの関係は、そのコンテンツとプラットフォームの両方に大きく依存します。 必要に応じて、「platform.ini」コンフィギュレーション ファイルで、この値をプラットフォームごとに指定できます。 |
| ピクセルごとに評価されるクロージャーの数を固定する手段を提供します。 マテリアルにこの値より多くのクロージャーがある場合、マテリアルはクロージャー数に従って自動的に単純化されます。 |
| 有効にすると、Substrate は、ピクセルごとに単一のシェーディング モデルを使用してすべてのマテリアルを従来の GBuffer に変換します。 これは、ローエンド プラットフォームで使用すると、それを必要とする一部のプロジェクトでパフォーマンスを向上させることができます。 |
Substrate とマテリアル レイヤーの関係
Unreal Engine での従来のマテリアル レイヤー (グラフベース と カスタム レイヤー GUI の両方) はパラメータ ブレンディングの概念に基づいています。 各レイヤーでは、ブレンドされて最終的なシェーディング モデルに与えられる、パラメータのパターン グラフが定義されています。
マテリアル レイヤー駆動型のパラメータを Substrate で定義されているシェーディング モデルに与えることを妨げるものは何もありません。 ただし、親マテリアルでMaterial Attributeノードの出力を使用して、このロジックを手動でセットアップする必要があります。 この方法での制限事項は、マテリアル属性システムにはパラメータの固定リストがありますが、Substrate を使用する複数スラブの設定に与えるのに十分な数のスロットがない可能性があるということです。これは、実際の意味とは無関係な任意のピンの使用が必要になる可能性があります。
このページで説明されているように、Substrate はパラメータ ブレンディングをネイティブに使用することができますが、Material Layers インターフェースからその機能にアクセスする方法はありません。 Substrate とマテリアル レイヤーの統合は、今後の開発で非常に関心のある分野です。
ここで重要なのは、マテリアル属性とマテリアル レイヤーは物質の実際のレイヤー化を処理するものではないということです。つまり、クリア コートをシミュレートすることはできますが、最上位レイヤーの色付き透過率を別のレイヤーの上に配置することはできません。 これらは、サーフェス上で 2 つのマテリアルのブレンド、または水平方向のミキシングを行うだけであり、別の物質の上にあるスラブのレイヤー化はできません。
Substrate マテリアルを操作する
Substrate マテリアルは従来のマテリアルと同様の方法で作成されます。 このセクションでは、ノード、ブレンド モード、作成できるマテリアルのタイプに関する詳細など、Substrate マテリアルを構成する主な要素について説明します。
Substrate の Material Root ノード
従来のマテリアルと同様に、マテリアル ルート ノードは、Substrate スラブおよび他の Substrate ノード (演算子ノードや構成要素ノードなど) がフロント マテリアルを介して供給される場所です。
Substrate マテリアルのすべてのグラフは、ルート ノードのフロント マテリアル入力に接続されている必要があります。 この入力が Substrate のすべてのグラフの終点です。
また、レガシー マテリアルと同様に、マテリアル ルート ノードを選択すると、[詳細] パネルを使用して [ブレンド モード] やマテリアルの外観を定義するその他のプロパティを設定できます。 マテリアル ドメインとシェーディング モデルは、グラフから自動的に推定されます。
Substrate のブレンド モード
Substrate では、マテリアルのカラーを背景とどのようにブレンドするかを定義するために、独自のブレンド モードのセットを使用します。 従来のマテリアルのブレンド モードは、他のマテリアルとどのようにミックスおよびブレンドできるかに限定されているため、作成できるマテリアルのタイプが限定されています。 Substrate では、まとめてブレンドしてあらゆるタイプのマテリアルを作成できる、ブレンド モードの幅広い選択肢が提供されています。 このことは、半透明サーフェスの物理的に正しいシェーディングを実現する上で特に重要です。
Substrate には以下のブレンド モードがあります。
| ブレンドモード | 説明 |
|---|---|
Opaque (不透明) | 光が通過することも浸透することもないサーフェスを定義します。 カバレッジが 1 である不透明なサーフェス。 これは従来の不透明ブレンド モードと同じです。 |
Masked (マスク) | 可視性を 2 値 (オン/オフ) 方式で選択的に制御する必要があるマテリアルに使用されます。 カバレッジが 1 または 0 である不透明なサーフェス。 これはレガシー マスク ブレンド モードと同じです。 |
透過 - グレー透過率 | 色付きサーフェスと被覆率があるが、透過率がグレースケールに減っている半透明マテリアル。 これは、変調パスへの被写界深度のポスト透過処理の追加レンダリングが抑止されるため、より高速です。 ハードウェア色付き透過処理 (デュアル ソース カラー ブレンディングと呼ばれる) がサポートされていないプラットフォームでのフォールバック ブレンド モードです。 これはレガシー透過ブレンド モードに似ています。 |
Additive (加算) | マテリアルのカラーを背景のカラーに加算し、最終カラー = 変換元カラー + 変換先カラーになります。 |
色付き透過率のみ | マテリアルの透過率のみが使用されます。 サーフェス インタラクションが 0 に減っています。 これはレガシー乗算ブレンド モードと同じです。 |
AlphaComposite (Premultiplied Alpha) (アルファコンポジット (乗算済みアルファ)) | このブレンド モードでは、シーンに加算的にブレンドされたマテリアルの色の寄与と、背後のシーンの可視性を低下させるカバレッジをより詳細に制御できます (マテリアルのカバレッジは、ルート ノードのオパシテ入力を使用してオーバーライドできます)。 レガシーアルファ コンポジット (プリマルチプライド・アルファ) ブレンド モードと同様に機能します。 |
AlphaHoldout (アルファ提供) | このブレンド モードでは、オブジェクトを貫通する穴を開けてその背後にあるオブジェクトが見えるようにできるアルファが提供されます。 従来の AlphaHoldout ブレンド モードと同様に機能します。 |
透過 - 色付き透過率 | 色付きサーフェス、被覆率、および色付き透過率があるフル機能の半透明マテリアル。 従来の ThinTranslucent シェーディング モデルと同様に、透過率成分を個別のバッファでレンダリングする必要があるため、ポスト被写界深度で個別の半透明処理を使用する場合にコストがより大きくなります。 |
Substrate では、半透明ブレンド モードが目的ごとに、より効果的に定義されているため、従来のマテリアルよりも簡単に半透明処理を操作できます。 2 つの間で変わらないままなのは、どの透過ブレンド モードでもライティング モードを設定して、そのサーフェスに対してライティングがどのように定義するされるかを定義する必要があることです。 これは、半透明マテリアルの正しい外観を実現するために重要です。
ユーザーが作成する透過処理マテリアルの大多数で使用されるのは、Surface Translucency Volume または Surface Forward Shading です。
以下のライティング モードから選択できます。
| ライティング モード | 説明 |
|---|---|
Volumetric NonDirectional (非指向性のボリュメトリック) | 指向性は考慮せずに、ボリュームに対するライティングが計算されます。 煙や埃のようなパーティクル エフェクトに使用します。 これは最も低コストのピクセルごとのライティング方法ですが、 マテリアルの法線は考慮されません。 |
Volumetric Directional (指向性のボリュメトリック) | 指向性を含めてボリュームに対するライティングが計算されるため、マテリアル法線は考慮されます。 パーティクル接線空間はデフォルトでカメラの方を向いているため、Generate Spherical Particle を有効にすることで、接線空間がより使いやすくなります。 |
Volumetric PerVertex NonDirectional (非指向性の頂点ごとのボリュメトリック) | Volumetric NonDirectional と同じですが、ライティングは頂点でのみ評価されるため、ピクセル シェーダーのコストが大幅に小さくなります。 ライティングは引き続きボリューム テクスチャから生じるため、範囲は制限されます。 ディレクショナル ライトは距離が離れるとシャドウがなくなります。 |
Volumetric PerVertex Directional (指向性の頂点ごとのボリュメトリック) | Volumetric Directional と同じですが、ライティングは頂点のみで評価されるため、ピクセル シェーダーのコストが大幅に小さくなります。 ライティングは引き続きボリューム テクスチャから生じるため、範囲は制限されます。 ディレクショナル ライトは距離が離れるとシャドウがなくなります。 |
Surface Translucency Volume (サーフェス透過処理ボリューム) | サーフェスに対してライティングが計算されます。 ライトはボリュームに累積されるため、その結果はぼやけるようになり、距離は制限されますが、ピクセルあたりのコストが非常に小さくなります。 ガラスや水のような半透明サーフェスに使用します。 サポートされているのはディフューズ ライティングのみです。 |
Surface ForwardShading (サーフェス フォワード シェーディング) | サーフェスに対してライティングが計算されます。 ガラスや水のような半透明サーフェスに使用します。 これはフォワード シェーディングで実装されるため、ローカル ライトからのスペキュラ ハイライトはサポートされますが、ディファードのみの機能の多くはサポートされません。 それぞれのライトの影響がピクセルごとに計算されるため、最もコストのかかる透過処理ライティング方法です。 |
Substrate マテリアルでの透過処理のセットアップと使用の例については、このページの透過処理セクションを参照してください。
Substrateスラブ
Substrate スラブは Substrate マテリアルを組み立てる際の基本構成要素であり、 マテリアルの外観の大部分を実現できる必要最小限のパラメータのセットになるように設計されています。 そのため、より表現力の高い外観作成の基礎になっています。
スラブはインターフェースと媒質から成る物質のスラブの、原則に基づいた表現です。
Substrate Slab の組成:インターフェース (1) と媒質 (2)。
インターフェースは、光がマテリアルの表面と相互作用する境界です。 インターフェースのプロパティは主に、そのインターフェースに与えられる Roughness、Normal、Diffused Albedo、F0、F90 の値で定義されます。
媒質はインターフェースの下にある物質のボリュームであり、そこで光が散乱、伝達、吸収されます。 媒質のプロパティは主に、平均自由行程 (MFP) とディフューズ アルベド入力によって定義されます。
Substrate スラブは、Substrate ではないマテリアルでのモノリシックな Material Root ノードのモジュラー式代替物です。 複数のサーフェス属性 (Diffuse、Specular、Roughness、Emissive、Cloth、Anisotropy など) から成っています。 すべての Substrate BSDF ノード には、生成するマテリアルの型の名付けられた出力 (目、髪、シンプル クリア コート など) に関連するプロパティが含まれています。
従来のマテリアルではブレンド モードを利用して、使用できる入力を提示していました。 Substrate では、そのさまざまな BSDF スラブを使用してマテリアルのタイプが定義されています。 また、それらはブレンド モードに直接結び付けられなくなったため、それらをレイヤー化およびミキシングしてさまざまなマテリアル タイプを生成できます。
使用される主な Substrate スラブ BSDF ノードには以下の入力があります。
| Substrate スラブの入力 | 定義 |
|---|---|
ディフューズ アルベド | サーフェスからディフューズとして反射される光の割合を定義します。 これは媒質のローカル ベース カラーと似ています。 デフォルト値は 0.18 です。 ディフューズ アルベドは、シンプルなボリュームのサブサーフェス表現が使用される場合に、関与媒質によって散乱される光の割合も表します。 |
F0 | サーフェスがカメラと直交する場合の、スペキュラ ハイライトの色と明るさを定義します。 誘電体マテリアル (プラスチックや他の非金属) では、通常この値は 0 ~ 0.08 の範囲です。 メタリック マテリアルでは、1 までの範囲で設定できます。 ジェムストーンは 0.16 程度までの範囲です。 |
F90 | サーフェス法線がカメラに対して 90 度である場合の、スペキュラ ハイライトの色を定義します。 つまり、カメラ ビューを基準とするグレージング角での色です。 明るさは 1.0 で固定されているため、色相と彩度だけが認識されます。F0 が 0.02 を下回ると、これは黒色にフェードします。 |
ラフネス | マテリアルの粗さの度合いを制御します。 0 から 1 のサーフェスのラフネス。 0 (滑らか) であれば、ラフネスは鏡面反射であり、 1 (完全に粗い) であれば、ラフネスは完全なマット、つまり乱反射です。 異方性が使用されている場合、ラフネス値は接線軸に沿って使用されます。 |
Anisotrophy (異方性) | マテリアルの異方性の方向を制御します (-1:ハイライトは双接線に揃う、1:接線と一直線になる)。 |
Normal | サーフェス法線を入力として受け取ります。 法線は、マテリアルのルート ノードでの空間プロパティに応じて接線またはワールド空間と見なされます。 この入力によって、ピクセルごとのシェーディング法線が定義されます。 |
接線 | サーフェス接線を入力として受け取ります。 法線は、マテリアルのルート ノードでの空間プロパティに応じて接線またはワールド空間と見なされます。 この入力によって、ピクセルごとのシェーディング接線が定義されます。 |
SSS MFP | サブサーフェス散乱の平均自由行程 (MFP)。 これはマテリアルの知覚密度を制御し、マテリアルによる光の吸収と散乱に影響を及ぼします。 もっと正確には、光子が物質の粒子と相互作用する平均距離 (cm単位) を定義します。 その距離はカラー チャンネルごとに制御されます。 MFP は、スラブ内で散乱する光の透過率および散乱量と直接作用します。
この入力は、マテリアルのルート ノードにサブサーフェス プロファイル アセットが割り当てられていない場合にのみ使用されます。 |
SSS MFP スケール | この入力によって、サブサーフェス プロファイルのサブサーフェス散乱平均自由行程半径が 0 から 1 の値にスケールされます。 |
SSS 位相異方性 | 正の値であれば、光の方向に沿ってフェーズ関数が引き伸ばされて、前方散乱になります。 負の値であれば、光の方向の逆向きにフェーズ関数が引き伸ばされて、後方散乱になります。 |
エミッシブ カラー | マテリアル サーフェスの上部のエミッシブ カラーを制御します。 |
2番目のラフネス | セカンダリ スペキュラ ローブのラフネスを制御します。 0 (滑らか) であれば、ラフネスは鏡面反射であり、 1 (完全に粗い) であれば、ラフネスは完全なマット、つまり乱反射です。 この入力はディフューズ ラフネスには影響を及ぼしません。 |
2番目のラフネス ウェイト | プライマリとセカンダリのスペキュラ ローブの間のミックス係数。 Roughness を使用するプライマリ スペキュラのウェイトは (1 - SecondRoughnessWeight) です。 この値が 0 であれば、プライマリ ローブのみがレンダリングされ、 0.5 であれば、両方のラフネスの 50% ミックスがレンダリングされ、1.0 であれば、セカンダリ ローブのみがレンダリングされます。 |
産毛のラフネス | ファズ レイヤーの粗さの度合いを制御します。 ラフネスが 0 であれば滑らかな (光沢が強い) ファズであり、1 であれば完全に粗い (マット) ファズです。 |
産毛の量 | 0 より大きい場合、インターフェースでファズのようなレイヤーを付加して、色の再帰反射を引き起こします。 この値によってサーフェス レイヤーの上に適用されるファズの量が制御されます。 通常、ファブリック マテリアルの作成に使用されます。 |
産毛の色 | ファズ レイヤーの色を定義します。 |
Glint Density | マテリアルのサーフェスでのマイクロ ファセット密度の対数表現。 ConsoleVariables.ini コンフィギュレーション ファイルで |
グリント UV | マテリアルのサーフェスでのグリントの位置とスケールを制御します。 ConsoleVariables.ini コンフィギュレーション ファイルで |
スラブのサブサーフェスでの動作は、そのスラブのサブサーフェス型プロパティによって定義されます。 特定のスラブで使用される散乱モデルを定義する。 既存のレガシー動作や異なる外観を実現するための明示的なコントロールを提供します。
利用可能なサブサーフェス型は次のとおりです。
ラップ:ラップ ライティング モデルを使用して光の散乱をエミュレートします。 これはレガシー サブサーフェス シェーディング モデルと同等です。
両面ラップ:光の散乱をエミュレートするために、サーフェスの両面にラップ ライティング モデルを使用します。 これはレガシー両面フォリッジ シェーディング モデルと同等です。
ディフュージョン:光の散乱を更新するためにディフュージョン モデル (スクリーン空間またはレイトレース) を使用します。 SSS プロファイルが指定されている場合、レガシー サブサーフェス プロファイル シェーディング モデルと同等です。 オフであれば、MFP はスラブで直接制御できます
シンプル ボリューム:透過部分に Beer-Lambert モデルを使用し、散乱部分にフィットさせたモデルを使用します。
垂直方向にレイヤー化されたスラブでは、シンプル ボリューム サブサーフェス 型のみが有効です。 レイヤー型ごとのサブサーフェス型サポートのリスト:
| 最下レイヤー | 上位レイヤー |
|---|---|
None (なし) シンプル ボリューム ラップ 両面ラップ 拡散 | Non シンプル ボリューム |
プラットフォームとシェーディング パスによっては、拡散サブサーフェス型が利用できない場合があります。 その場合は、シンプルな非散乱ディフューズ モデルにフォールバックします。 ディフュージョンは、ディファード パスとパス トレーシング パスでのみサポートされており、Xbox One、Xbox Series S、Xbox Series X、PlayStation 4 および 5、PC DX11、PC DX12、Linux Vulkan、Mac OS のプラットフォームで使用することができます。 モバイルなどのローエンド プラットフォームでは拡散モデルはサポートされていません。 各スラブ ノードの下部に、トポロジに基づいて使用される散乱モデルを示すタグが付けられています。 この散乱タイプがトポロジと互換性がない場合、サブサーフェス タイプ プロパティで指定されたタグと異なる可能性があります。
Substrate マテリアルのパラメータ化
Substrate では、非 Substrate パスで Base Color/Specular/Metalness によるパラメータ化が行われていたのに対し、 F0 / Diffuse Albedo によるパラメータ化が使用されます。 このパラメータ化によって、エネルギー保存を確保しながら、より柔軟に対応することができます。 ただし、F0 の適切な値の選択は、最初は直感的ではないかもしれません。
簡単なガイドラインとして、マテリアルを以下の2つのグループにわけることができます。
誘電体マテリアル:金属的な質感が 0 のマテリアルで、線形空間では通常 0.02 ~ 0.06 の F0 値になります。 宝石は、線形空間では ~0.18 の F0 値にできます。
導体マテリアル:金属的な質感が 1 のマテリアルで、線形空間では通常、0.5~1 の F0 値になります。
この範囲の中間にあるものは、実世界ではめったに見られない半導体マテリアルです。
Adobe Substances から取得した図。
以下は、一般的なマテリアルの F0 値のリストです。
このリストは、Tomas Akenine-Moller、Eric Hanes、Naty Hoffman のリアルタイム レンダリング第 3 版から抜粋されたものです。
| マテリアル | F0 線形 | F0 sRGB | 色 |
|---|---|---|---|
水 | 0.02 | 0.15 | |
プラスチック / ガラス (低) | 0.03 | 0.21 | |
プラスチック (高) | 0.05 | 0.24 | |
ガラス (高) / ルビー | 0.08 | 0.31 | |
ダイヤモンド | 0.17 | 0.45 | |
鉄 | 0.56、0.57、0.58 | 0.77、0.78、0.78 | |
銅 | 0.95、0.64、0.54 | 0.98、0.82、0.76 | |
金 | 1.00、0.71、0.29 | 1.00、0.86、0.57 | |
アルミニウム | 0.91、0.92、0.92 | 0.96、0.96、0.97 | |
銀 | 0.95、0.93、0.88 | 0.98、0.97、0.95 |
マテリアルの簡略化
マテリアルの簡略化は、次の制限のいずれかにマテリアルが一致しない場合に、行われます。
ブレンダブル GBuffer 形式。マテリアルに複数のクロージャーがある場合。
アダプティブ GBuffer 形式。マテリアルに、ピクセルごとのクロージャー数がプロジェクト/プラットフォーム設定よりも多い場合、またはピクセルごとのバイト数がプロジェクト設定よりも多い場合。
これらのパラメータを考慮して、要件を満たすまでパラメータ ブレンドを使用してスラブをマージすることで、マテリアルを簡略化します。 簡略化の理由と詳細は、Substrate パネル ([Window (ウィンドウ)] > [Substrate]) で確認できます。
ブレンダブル GBuffer 形式を使用するプロジェクト/プラットフォームでは、最終的なマテリアルは、従来のシェーディング モデルに対応する、ピクセルごとに単一の機能を使用することを強制されます。 これらの機能は、次のとおりです (優先度順)。
Fuzz (ファズ)
サブサーフェス スキャタリング (プロファイルあり/なし)
かすみ
特定のピクセルに対して複数の機能が同時に有効になっている場合は、優先度が最も高い機能のみが使用されます。 異方性は、他の機能とは別に有効にできます。
以下のサンプル マテリアルでは、Substrate マテリアルがバジェットの範囲外であったため、マテリアル エディタの [Substrate Stats (統計)] パネルを見ると、それに応じて簡略化されています。
Substrate では、各スラブに対して有効にできる(または、SubstrateShadingModel 式ノードを使用している場合は自動的に有効になる)、複数のビジュアル機能がサポートされています。 これらのシェーディング モデルは、次のとおりです。
F90
Fuzz (ファズ)
SSS エフェクト (SSS プロファイル、ラップ、シンプル ボリューム)
かすみ
異方性
スペキュラプロファイル
Glints (グリント)
ブレンダブル GBuffer 形式を使用する場合、一部の機能がサポートされません。 例としては、次のようなものがあります。
F90
ピクセルごとの MFP による拡散 SSS
かすみ
Glints (グリント)
この場合、この機能はマテリアルで視覚的に欠落します。 スペキュラ LUT はサポートされていますが、視点依存のみのエフェクトとして近似されることに注意してください。
以下は、これら 2 つの GBuffer 形式による機能の視覚的比較です。
パフォーマンス上の理由から、ライティング評価時にはこれらの機能が複雑度セットにマッピングされますが、これによって評価負荷がますます大きくなります。
Simple (シンプル):デフォルトのライティングマテリアル (色付きのディフューズとスペキュラ、ラフネス)
Single (シングル):F90 カラー、ファズ、SSS エフェクト (プロファイル、ラップ、MFP 使用のシンプル ボリューム)、クリア コート。
Complex (複雑):異方性、スペキュラ プロファイル、目、髪
Complex Special (複雑スペシャル):グリント
Substrate マテリアルのノード
Substrate マテリアルの作成には以下のタイプのノードを使用できます。
| ノードのタイプ | 説明 |
|---|---|
これらのノードは、単純なマテリアルから髪や目や水のような複雑なマテリアルまで、ほとんどのタイプのサーフェスを表します。 | |
これらのノードは、複数の Substrate スラブ BSDF をミックスおよびレイヤー化して、複雑で多様なサーフェスを作成します。 | |
これらのノードは、コーティングされたレイヤーや Unreal Engine のデフォルトの従来のマテリアル シェーディング モデルの作成など、よく使われるマテリアル タイプを Substrate で使用できるように変換します。 | |
これらのノードは、Substrate マテリアルのマテリアル ドメインを定義し、それぞれ従来のマテリアル ドメインの同じ名前のものとよく似ています。 | |
これらのノードは、Substrate スラブの透過率を平均自由行程にマッピングするなど、マテリアル内で何らかの変換を行うために使用されます。 |
Substrate BSDF ノード
Substrate BSDF (双方向散乱分布関数) ノードはほとんどのタイプのサーフェスを表すために使用され、作成されるマテリアルの見た目を制御し、それに応じてそのドメインとシェーディング モデルを自動的に設定します。 これは、マテリアルのルート ノードの [Details] パネルからそれらの側面が手動で設定されないようにすることを目標としています。
Substrate には以下の BSDF があります。
スラブ BSDF は Substrate でオーサリングを行うためのプライマリ ノードであり、他のスラブとレイヤー化することができます。 その他の BSDF ノードは特殊なユースケース用であり、他の BSDF と混在させずに単独で使用する必要があります。
| Substrate BSDF ノード | 説明 |
|---|---|
Substrate スラブ BSDF | 複数の成分 (ディフューズ、スペキュラ、かすみの度合い、クロスの毛羽、異方性) を集約する、物質のスラブの原則に基づいた表現。 不透明のサブサーフェス、半透明な散乱と半透明な透過率のサブサーフェス散乱などのエフェクトをレンダリングできます。 |
Substrate 目 BSDF | Substrate による目のマテリアルのレンダリング専用の BDFS。 角膜と虹彩用の特定の入力があります。 |
Substrate 髪 BSDF | Substrate による髪のマテリアルのレンダリング専用の BDFS。 |
Substrate シンプル クリア コート | クリア トップ コートがあるマテリアルをレンダリングするための単純で高速な方法を提供します。 このノードは、バックグラウンドで Substrate スラブ BSDF を使用しますが、クリア コートのレンダリングのワークフローを単純化します。 このノードは従来の Clear Coat マテリアルのレンダリングに最適化されています。 |
Substrate 単一レイヤー ウォーター BSDF | 主にウォーター システムで使用される単一レイヤー ウォーター マテリアルのレンダリング専用の BSDF。 |
Substrate 非ライティング BSDF | 色付きエミッシブ輝度がある非ライティング要素のレンダリングに使用される BSDF。 この Substrate ノードは従来のグレースケール不透明度を色付き透過率で置き換えます。 Unlit Slab をブレンドする必要がある場合は、Emissive Color 入力のみが使用される通常の Substrate スラブを使用します。 カバレッジ ウェイト演算子を使用できます。 |
Substrate Volumetric-Fog-Cloud BSDF | 関与媒質を表すために使用される BSDF。 このノードはボリュメトリック クラウドと異種ボリュームをレンダリングするために使用されます。 |
Substrate 演算子ノード
Substrate 演算子ノードは、複数のSubstrate スラブをミックスまたはレイヤー化して、複雑で多様なサーフェスを作成します。 Substrate スラブが物質の 1 つのピースを表している場合、演算子はそれらのピースを組み合わせる方法を提示します。
以下の Substrate 演算子から選択できます。
Substrate 演算子は、すべての Substrate BSDF で機能するわけではありません。 これらの演算子ノードを使用できるのは、Substrate スラブ BSDF と Substrate シンプル クリア コート のみです。
| Substrate 演算子ノード | 説明 |
|---|---|
Substrate カバレッジ ウェイト | この演算子は、スラブからの入力を受け取り、使用される被覆率の量を制御します。Weight はカバレッジの量です。 ウェイトを小さくすると、スラブの物質の被覆率が小さくなり、その下にある物質まで見えるようになります。 このウェイトは、レガシー マテリアルのルート ノードのオパシテ入力に似ています。 たとえば、これは、透過ブレンド モードを使用するときにサーフェスを透過にする場合や、クリア コートの最上位レイヤーの可視性を低下させる場合に使用できます。 |
Substrate 水平ブレンド | この演算子は、Background と Foreground の 2 つのスラブから入力を受け取ります。 Mix 入力は、線形補間を使用してそれら 2 つのスラブをどの程度混在させるかを制御します。 これは、サーフェス上のスラブ間のソフトな遷移に使用できます。 |
Substrate 垂直レイヤー | この演算子は、Top レイヤーと Bottom レイヤーの 2 つのスラブから入力を受け取ります。 上層のスラブは下層のスラブの上に重ねられ、下層レイヤーの外観は上層レイヤーのプロパティの影響を受けています。 Top Thickness 入力を使用して、Top レイヤーが Bottom レイヤーを覆う厚さを制御します。 この演算子は、車の塗装、木材のニス、サーフェス上の水分を作り出すのに最適です。 |
Substrate 追加 | この演算子は、2 つのスラブから入力を受け取って、それらを加算します。 作成されるマテリアルは物理的に妥当なものではありません。サーフェスに入ってくるエネルギーよりもサーフェスから出て行くエネルギーの方が大きくなるからです。 このノードはできる限り使用しないことをお勧めします。 |
Substrate Select (選択) | この演算子は、2 つの Substrate マテリアル パスから入力を受け取り、単一のマテリアル パスを選択します。 どちらのパスでも、最終的に Slab (スラブ) マテリアルが 1 つだけ残るように、パラメータ ブレンディングが有効になっています。 これを使うと、例えば、ブルー ノイズを使って、サブサーフェス プロファイルあり/なしのスラブを確率的に選択できます。 出力として単一のスラブを強制するため、パフォーマンスの面で興味深い機能です。ピクセルごとの単一のクロージャーがライティング パス中に評価されるためです。 |
演算子ノードには、[Use Parameter Blending (パラメータ ブレンディングを使用)] がオンになっている場合に、入力スラブを単一のスラブにパラメータ ブレンドするオプションが含まれています。 Substrate 演算子は、複数のスラブをミックスおよびレイヤー化することによってマテリアルの複雑な外観を作り出すことができるため、ランタイム時のコスト (主にライティングの評価によるコスト) は、パフォーマンスに大きな影響を与える可能性があります。 パラメータ ブレンディングは、視覚的な精度とコストが大きいライティングの評価と引き換えに、ランタイム パフォーマンスが向上し、ライティングの評価のコストが小さくなる最適化です。
このパラメータ ブレンディング最適化の詳細については、このページの「パラメータ ブレンディング」セクションを参照してください。
Substrateカバレッジウェイト
Substrate カバレッジ ウェイト演算子は、垂直レイヤー化操作での 2 つのスラブの比率を制御します。 ウェイト入力は、 Substrate 垂直レイヤー演算子 と併用してレイヤー化する場合の、このマテリアルのカバレッジを制御します (下記の例を参照)。 また、アルファをカバレッジとしてまたはアルファを不透明度として使用する場合に、透過ブレンド モードで不透明度がどのように使用されるかと同様に、演算子を使用してインスタンスの透過サーフェスを実現することもできます。
上記のグラフでは、Substrate カバレッジ ウェイト演算子が使用されており、ウェイトによってボトム スラブに適用されるカバレッジが制御されています。 Weight が 1 であれば完全に不透明であり、緑色のテクスチャ パターンが遮られます。 0.5 であれば 50% 透明であり、2 つのマテリアルの色がミックスされたテクスチャ パターンが見えます。 0 であれば完全に透明であり、緑色のテクスチャ パターンのみが見えます。
Substrate Horizontal Layer
Substrate 水平レイヤー演算子は、一つが背景を表し、もう一つが前景を表す 2 つのスラブをミックスさせます。 ミックス入力は、線形補間によるミックス比率を制御します。
背景入力が 0 の場合、完全に表示され、前景は 1 の場合、完全に表示されます。 ミックス比率が 0.5 であれば、2 つのスラブがミックスされ、ピクセルごとにミックスが評価されます。 Mix 入力で、次の例のようにテクスチャを使用して、ミックス比率を制御することもできます。
Substrate 垂直レイヤー
Substrate 垂直レイヤー演算子は、上層のスラブと下層のスラブをレイヤー化します。 このノードは Top レイヤーの厚さを考慮して、物理的に正しい透過率と散乱を適用します。これは、Top レイヤーが Bottom レイヤーを覆うコーティング操作と似ています。 Bottom スラブの外観は Top スラブのプロパティに依存します。 上層入力に渡される BSDF が完全に不透明であれば、下層のスラブはまったく見えません。
垂直レイヤー化は、不透明の下位レイヤーの上に透明または半透明トップ コートを必要とする場合に特に便利です。 そのような例として、車の塗装、木材のニス、サーフェス上の水分 (水たまりなど) があります。
Substrate追加
Substrate 追加演算子は、2 つのスラブを組み合わせてその結果を出力します。 この演算子は、物理的に妥当なものとは見なされません。サーフェスに入ってくるエネルギーよりもサーフェスから出て行くエネルギーの方が大きいマテリアルが生成される可能性があるからです。 これは、アート ディレクションが物理的に妥当であることよりも重要な場合に役立ちます。 ただし、物理的に正確なサーフェスを維持するには、この演算子を使用しないことをお勧めします。
Substrate 構成要素ノード
Substrate 構成要素ノードは、ある程度一般的なユースケース向けの変換を提供するマテリアル関数のセットです。 これらはマテリアル関数であるため、直接開いて調べることができます。
以下の Substrate 構成要素から選択できます。
| Substrate 構成要素ノード | 説明 |
|---|---|
Substrate Coated Layer | 互いにレイヤー化されている 2 つのスラブから成る 1 つのコーティングされたマテリアルを作成するマテリアル関数です。 コートのインターフェースと吸収を制御するための使いやすいパラメータが公開されています。 |
Substrate Standard Surface Opaque | 不透明なサーフェス用の使いやすいパラメータ化を備えた、万能シェーダーのような Substrate マテリアルを作成するマテリアル関数。 パラメータ化では、業界標準の用語と概念が使用されています。 |
Substrate Standard Surface Translucent | 半透明なサーフェス用の使いやすいパラメータ化を備えた、万能シェーダーのような Substrate マテリアルを作成するマテリアル関数。 パラメータ化では、業界標準の用語と概念が使用されています。 |
Substrate UE4 Default Shading | Substrate ではないマテリアルで使用されるディフューズ、メタリック、スペキュラをパラメータ化するために、Substrate でのデフォルトのシェーディング モデルをレプリケートするマテリアル関数。 |
Substrate UE5 Unlit Shading | UE4 の Unlit シェーディング モデルを Substrate で作り直すマテリアル関数。 |
Substrate エクストラ ノード
Substrate Extras ノードは、マテリアルのタイプとそれが提供する関数を指定します。たとえば、Substrate マテリアルがデカール関数またはライト関数として使用されるように設定します。 これらのノードは、マテリアル ドメインの一部として割り当てられた、Substrate ではないマテリアルとよく似ています。
以下の Substrate エクストラから選択できます。
これらのノードはモノリシックであり、単独で使用する必要があります。 Substrate 演算子と互換性がありません。
このような場合は、これらのノードをマテリアル グラフの最後 (フロント マテリアル入力に接続する直前) に配置することをお勧めします。
| Substrate エクストラ ノード | 説明 |
|---|---|
Substrate をデカールに変換 | 任意のマテリアル グラフをデカールとして使用できます。 このノードは、マテリアルが変換されてデカール マテリアルとしてのみ使用されるように指定します。 |
Substrate ライト関数 | このノードは、マテリアルがライト関数としてのみ使用されるように指定します。 これは単独で使用する必要があります。 |
Substrate ポスト プロセス | このノードは、マテリアルがポスト プロセス マテリアルとしてのみ使用されるように指定します。 これは単独で使用する必要があります。 |
Substrate UI | このノードは、マテリアルがユーザー インターフェース要素としてのみ使用されるように指定します。たとえば、UMG UI Designer で使用できるように設計されているマテリアルに使用します。 これは単独で使用する必要があります。 |
たとえば、 Substrate Convert To Decal (デカールに変換) ノードを使用すると、任意の Substrate マテリアルをデカール マテリアルとして使用して、シーンにあるメッシュ デカールやデカール アクタに適用できます。
エクストラ ノードでは、マテリアルのルート ノードのフロント マテリアル入力に接続されると、マテリアル ドメインが自動的に設定されます。 一部のエクストラ ノードでは、出力がサポートされるようにブレンド モードを変更する必要があります。
Substrate Convert To Decal ノードを使用する場合、ブレンド モードを TranslucentGrey Transmittance、Colored Transmittance、TranslucentColorTransmittance、AlphaComposite (Premultiplied Alpha) のいずれかに設定する必要があります。 設定しない場合、マテリアル エディタの [統計] パネルにエラーが表示されます。
Substrate ヘルパー ノード
Substrate Helper ノードは、何らかの変換を行うか、従来のマテリアルで行うことができた何かを実現するためのノードとマテリアル関数のセットです。
| Substrate ヘルパー ノード | 説明 |
|---|---|
Substrate Flip Flop | 視点入射光角に基づいてサーフェスの反射性を制御します。 視野角に基づいて法線方向の色 (F0) をグレージング角での色 (F90) まで補間できるようにし、Falloff パラメータで補間速度を制御します。 |
Substrate Haziness-To-Secondary-Roughness | ベース サーフェスのラフネスとかすみの度合いから、セカンダリ スペキュラ ローブのラフネスを算出します。 このパラメータ化によって、かすみの度合いが物理的に意味をなし、知覚的に作成しやすくなります。 |
Substrate IOR-To-F0 | 誘電体の IOR を F0 値に変換します。 |
Substrate Metalness-To-DiffuseColorF0 | メタルネスのパラメータ化 (BaseColor/Specular/Metallic) を DiffuseAlbedo/F0 のパラメータ化に変換します。 |
Substrate Rotation-To-Tangent | 回転角を接線ベクターに変換します。 |
Substrate Thin-Film | 生成されるマテリアルのスペキュラ パラメータ F0 と F90 を、薄膜のパラメータに従って算出します。 |
Substrate Transmittance-To-MeanFreePath | サーフェスに直交して表示される関与媒質のスラブに相当する透過カラーを平均自由行程に変換します。 このノードは スラブ BSDF SSS MPF の入力に直接マッピングします。 |
Substrate View-Dependent-Coverage | 視点入射光角に基づいて被覆率を変化させます。 このノードは、視点依存エフェクトを意味するのに十分大きい厚さがあるレイヤーをミックスすることに役立ちます。 たとえば、入射光角と比べてグレージング角でより大きなオクルージョンがある大粒の埃に役立ちます。 |
Substrate ノードに関する追記
Substrate デカール マテリアル
Substrate デカールは現時点では従来のデカール ブレンド モード パスと同じ機能を使用しています。
Substrate デカールの将来のバージョンでは、水、血、粘液などのためのレイヤー透過処理スラブなど、すでに Substrate で利用可能な他の機能と同様の、より堅牢な機能セットを提供することを目指しています。 たとえば、車の塗装の傷、地面の足跡、タイヤ痕のように厚さに応じて侵食できるレイヤーがあります。
Substrate シェーディング モデル ノード
Substrate がプロジェクトで有効になっている状態で、以前に作成したマテリアルを開くと、そのスラブを使用するようにマテリアルが自動的に変換されます。 既存のすべての入力は、Substrate シェーディング モデル ノードに与えられます。
新規の Substrate マテリアルを作成するときに、このノードを手動で作成したり使用したりしないでください。
Substrate の [Stats (統計)] パネル
Substrate の [統計] パネルは、マテリアル エディタでマテリアル グラフの下にあります。
Substrate パネルには、マテリアル、トポロジ、その機能、および単純化に関する統計が表示されます。
演算子でのパラメータ ブレンディング
ピクセルごとに複数の BSDF (双方向散乱分布関数) を使用すると、マテリアル グラフでの BSDF の数に比例してレンダリング プロセスの所要時間が長くなります。 2 つの BSDF に対するライティングの評価にかかる時間は、1 つの BSDF の場合の 2 倍になります。 このことは、不透明なサーフェスと半透明なサーフェスのどちらにも当てはまります。
演算子ノードには、グラフでのミキシングとレイヤー化のすべての操作の外観を維持しながらマテリアルのパフォーマンスとメモリ使用量の最適化を試行する [Use Parameter Blending (パラメータ ブレンディングを使用)] チェックボックスがあります。 この設定を有効にする必要があるのは、マテリアルのルート ノードの前で一番右側にある演算子ノードだけです。 グラフ内の他のすべてのノードにはパラメータ ブレンディングが自動的に適用されます。
1 つのマテリアルにある複数のスラブのパフォーマンスが懸念される場合、パラメータ ブレンディングは適切なフォールバック オプションです。 有効になっていれば、2 つのスラブがマージされて、1 回のライティングの評価のみを必要とする単一のスラブになります。 このマージにより、2 つの個別のスラブよりもメモリ使用量が大幅に減ります。
下記の例のマテリアルは、コンテンツ例 Substrate レベル から抜粋したもので、[Use Parameter Blending (パラメータ ブレンディングを使用)] が有効になっている場合となっていない場合を示しています。
このマテリアル (M_Substrate_ShaderBall_IceRocks) は 2 つの BSDF を使用します。 左側はブレンディングなしで、右側はパラメータ ブレンディングを使用しています。
これは、2 つの Vertical Layer 演算子と 1 つの Coverage Weight 演算子を使用して 4 つのスラブをブレンドする、より複雑なマテリアル (M_Substrate_ShaderBall_AnisoOverSSS) です。 マテリアルのメモリ使用量はピクセルあたり 108 バイトです。 Use Parameter Blending が有効になっていると、すべての演算子でのブレンディングによって、ピクセルあたり 28 バイトに減ります。 左側のマテリアルはブレンディングなしで、右側はパラメータ ブレンディングを使用しています。
演算子ノードでのパラメータ ブレンディングではなく、以下のいずれかのワークフローを使用することでも同様の結果が得られます。
グラフ内で DiffuseAlbedo、F0、F90、Roughness、および他の属性を手動でブレンドします。 すべての属性を、Front Material 入力につながれている単一のスラブに渡します。 この手法は単独の場合はうまく機能しますが、複雑なマテリアルの大規模なライブラリでは手に負えなくなる可能性があります。
グラフベースのレイヤー化マテリアルワークフローを使用します。 この方法ではマテリアル関数を使用して作業を再利用するため、1 つ目の方法よりもうまくスケーリングできます。
モバイルなどのローエンド プラットフォームでは、パフォーマンスが向上するようにコンパイラが自動的にパラメータ ブレンディングを有効にします。 中程度のプラットフォームでは、ターゲットのパフォーマンスとメモリ制約を超えないように、マテリアルの下部レイヤーでパラメータ ブレンディングが積極的に導入されています。
メタルネスとスペキュラ レスポンス
Substrate で使用されるパラメータ化は、Substrate ではない (従来の) マテリアルでの DefaultLit シェーディング モデルとは異なり、Metallic 入力はなくなっています。 このパラメータ化では、抽象化された値 (メタリックやスペキュラなど) を使わずに、実世界の単位による物理的プロパティに移行しています。
Substrate マテリアルの反射プロパティとスペキュラ レスポンスは、DiffuseAlbedo、F0、F90 という 3 つの属性で定義されています。 Substrate ではエネルギー保存が自動的に適用されるため、スペキュラのインターフェースと媒質ではエネルギーは付加されません。 したがって、F0 が大きいほど、ディフューズの寄与が見えにくくなります。
メタルネスは、Substrate Metalness-To-DiffuseAlbedo-F0 ヘルパー ノードを使用してエミュレートされています。 BaseColor、スペキュラおよびメタリックの値を入力として受け取って、Substrate スラブのディフューズ アルベドと F0 にマッピングする値にそれらを変換します。
EdgeColor 入力または F90 入力を使用して、ライティングへの複雑なマテリアルの幅広いディフューズとスペキュラ レスポンスを実現できます。 たとえば、接線に直交するシアンから黄色へのスペキュラ反射がある赤色の球体を実現できます。
Substrate フリップフロップ ヘルパー ノードは、法線ベースのスペキュラのカラー化を実現するのに役立ちます。 このノードは、F0 と F90 のスペキュラ カラーを、調整可能なフォールオフ トランジションがある NoV の関数として制御します。
粗い屈折
Substrate では、半透明オブジェクト、および半透明の最上位レイヤーがあるレイヤー化不透明マテリアル上で、粗い屈折がサポートされています。 シーン背景のぼやけや屈折したオブジェクトまでの距離は、歪み/屈折を使用する場合のプライマリ マテリアルのラフネスと、屈折したオブジェクトまでの距離から算出されます。
半透明の粗い屈折
粗い屈折がある透過処理マテリアルを作成するには、[Details (詳細)] パネルで以下のプロパティを設定します。
ブレンド モード:TranslucentColoredTransmittance、TranslucentGreyTransmittance、ColoredTransmittanceOnly のいずれか。
屈折方法: 屈折率、Pixel Normal Offsetまたは 2D オフセット。
屈折、ラフネスおよび SSS MFP に値を渡します。 次のグラフでは、ラフネスが 0 より大きい場合に、シンプルなすりガラスの結果が生成されます。 高い SSS MFP の値は、完全に透明なマテリアルの作成に使用され、IOR が 1.514 であればガラスの IOR に似ています。
下記の例では、Roughness の値が大きいほど (左から右に 0、0.2、0.6)、ガラスの背後にあるオブジェクトのぼやけが強くなっています。
粗い屈折によるぼやけでは、シーン内にある半透明な要素の背後の深度が考慮されるように近似値が使用されます。
不透明の粗い屈折
Substrate のコーティング レイヤーでは、その下にあるレイヤーを、トップ コーティング レイヤーのラフネスと厚さに基づいてぼかすことができます。 このタイプの屈折はパフォーマンスへの影響が大きく、プロジェクトに対して、[プロジェクト設定] の [Engine (エンジン)] > [Rendering (レンダリング)] カテゴリで有効にする必要があります。 この機能を有効にするには、Substrate の不透明型マテリアルの粗い屈折のチェックボックスをオンにします
下記のグラフは、不透明なチェッカーボードの上にクリア コートがある垂直レイヤー化マテリアルを使用して、不透明マテリアルの粗い屈折を使用する例を示しています。
ラフネスと厚さのパラメータによって、下層のマテリアル レイヤーに適用されるぼやけの強度が決まります。 いずれかの値を大きくするほど、屈折によるぼやけが強くなります。
下記の例でそれを確認できます。左側の例では、クリア コートの最上位レイヤーの Roughness と Thickness が 0.1 です。 右側の例では、Roughness が 0.8、Thickness が 6 であるため、下層のレイヤーがぼやけています。
Substrate レイヤー
一番下のレイヤーの厚さは、暗黙的に 0.01 センチメートルに固定されています。
不透明なサーフェス (中が見えないサーフェス) では、この厚さは関係ありません。
透過サーフェス (中が透けて見えるサーフェス) については、Transmittance to MFP ノードを使用すると、所定の透過率を特定の厚さで表現できます。
For 薄いサーフェス (ジオメトリでモデル化するには薄すぎるものの、厚みがあるサーフェス) では、マテリアルの [Is Thin Surface (薄いサーフェスである)] オプションを有効にします。 そして、一番下のレイヤーの厚さは、ルート ノードで指定されます。
Substrate マテリアルインスタンスオーバーライド
マテリアル インスタンスの特定のマテリアル プロパティをオーバーライドすることができます (シェーディング モデル、スペキュラ プロファイルなど)。 これらのオーバーライドには、いくつかの制限があります。
シェーディング モデルのオーバーライドは、マテリアルに SubstrateShadingModel ノードのみが含まれている場合にのみ使用できます。 マテリアルにスラブが含まれている場合、オーバーライド オプションは使用できません。
スペキュラ プロファイルをオーバーライドする機能は、スラブがスペキュラ プロファイルを含む場合にのみ利用できます。 オーバーライドが指定されている場合、すべてのスラブのスペキュラ プロファイル(存在する場合)をオーバーライドします。
サブサーフェス散乱と関与媒質
Substrate スラブには関与媒質があり、それを使用してさまざまなボリュメトリックの外観をシミュレートできます。
たとえば、不透明なマテリアルのみをレンダリングする場合、マテリアル トポロジの下層にあるスラブではサブサーフェス散乱が考慮されます。 ここで考慮が必要な点が 2 つあります。
マテリアルの [詳細] パネルでサブサーフェス プロファイルがスラブに割り当てられている場合、プロファイルはピクセル単位で使用されます。 サブサーフェス プロファイルはブレンド不可であることに注意してください。
サブサーフェス プロファイルが割り当てられていなければ、そのスラブの DiffuseAlbedo と SSS MPF プロパティによって散乱が決まります。 これらのプロパティは ブレンド可能 です。
サブサーフェス スキャッタリングの MFP (または平均自由行程) は、さまざまな波長の光が衝突に遭遇する前に媒体を通過する距離 (センチメートル単位) です。 下記の例は、左から右に 0 から 1 までスケーリングされた DiffuseAlbedo (白で色付け) とSSS MFP (赤で色付け) を示しています。
不透明なマテリアルの下層ではないスラブか、透明のマテリアルで使用されているスラブは、ボリュメトリック表現で考慮されます。それも DiffuseAlbedo と SSS MFP 属性によって決まります。 DiffuseAlbedo は、単一散乱と多重散乱を考慮する、媒質のベース カラーを表します。
SSS MFP 属性は、サーフェスに直交する視点に対する媒質の透過率を制御する手段であり、下にあるサーフェスがどの程度見えるかを表します。 ディフューズ カラーは光の散乱量を表し、MFP 距離も考慮します。
透過色が左から右に黒色から青色の範囲で変化し、DiffuseAlbedo が下から上に黒色から白色の範囲で変化するマテリアルの例。
別のスラブの上にあるスラブの垂直レイヤー化は、コーティング操作と似ています。 下層のスラブの可視性は上層のスラブの透過率に依存します。 上層のスラブ (サーフェス上の水たまりのエッジなど) の被覆率を小さくして、徐々に消えていくようにすることができます。 これは、アルファ ブレンディングと似ているカバレッジ ウェイト演算子ノードを使用して実現できます。
透過率が左から右に黒色から青色の範囲で変化し、カバレッジが下から上に 0 から 1 の範囲で変化するマテリアルの例。
特定の透過カラーまたは散乱カラーを実現するには、Substrate Transmittance-To-MeanFreePath ヘルパー ノードを使用します。 MFP は、サーフェスが法線に沿って垂直に見られている場合に、法線入射で一致するように、TransmittanceColor に対して導出されます。
下記の例は、ピンク色の不透明なマテリアルの上での青色のサブサーフェス散乱を示しており、SSS MFP は Transmittance Color から導出されています。
オーソリングに関する推奨事項:
平均自由行程 (MFP) は、サブサーフェス スキャタリングを使用した透過または不透明なマテリアルに対する同じ光の動作を表します。光が物質と相互作用する (つまり、吸収または散乱される) 前の媒質内の平均パスです。 ただし、ユース ケースごとに異なる方法でオーサリングするのは興味深いことです。
MFP は色ではなく、光の伝達の測定であるため、透過処理 (光学に薄く、シースルー) サーフェスで、特定の透過カラーを実現しようとする場合に、MFP を直接制御することはお勧めしません。 代わりに、Transmittance-To-MeanFreePath ノードを使用することをお勧めします。
サブサーフェス スキャタリング (光学的に厚みがあり不透明) であるサーフェスでは、MFP を直接作成できます。 この場合、コンポーネントごとに、ライトが散乱する距離 (センチメートル単位) を大まかに表します。
カバレッジと透過率の比較
カバレッジはマテリアルの存在を定義し、マテリアルが存在する場所と、その程度を定義する「マスク」と考えることができます。
0 はまったくカバレッジがないことを意味します。レイヤーは表示されません。
1 は完全なカバレッジを意味します。レイヤーはサーフェスを完全に覆います。
マテリアルは、カバレッジを調整することでブレンドできます。 Substrate では、カバレッジはカバレッジ ウェイト ノードで制御されます。
透過率は、光がマテリアルとどのように相互作用するか、つまり光がどれくらいマテリアルを通過するかを定義します。
0 はライトを透過しないことを意味します。マテリアルは完全に不透明です。
1 であれば、光は完全に透過されます。マテリアルは光を吸収せず、それを完全に通すことができます。
Substrate では、透過率はスラブの MeanFreePath 入力によって制御されます。 平均自由行程 (MFP) は、光線が物質と相互作用する平均パスを定義する。
MFP が 0 の場合、光線は常に物質に当たり、マテリアルを通過しないことを意味します。 これは透過率が 0 の場合に相当します。
無限の MFP とは、光線が物体に当たることがないため、物体の中を進むことを意味します。 これは 1 の透過率に相当します。
操作を容易にするために、特定の深度で実現される特定の透過色を平均自由行程に変換する Transmittance-To-MFP ノードが指定されます。
カバレッジは、マテリアルの外観に「グレー スケール」の影響のみを及ぼします (可視になるマテリアルの度合いは上下します)。 一方、透過率は MFP 値に基づいて透過した光の色を変更することができます。 特定の色は吸収され、他の色は送信されて、色付き送信が作成されます。 それを実現するには、ブレンドモードを TranslucentColoredTransmittance に設定する必要があります。 パフォーマンスのため、TranslucentGreyTransmittance を使用してグレー透過にフォールバックすることもできます。
透過処理とブレンド モード
Substrate では、Substrate ではない従来のマテリアルで可能なオプションよりも堅牢な半透明サーフェス シェーディング用のオプションが提供されています。 サーフェスが物質 (Substrate スラブ) から成っていることを考慮する場合は、Substrate のブレンド モードのリストを利用する方が理にかなっています。
半透明マテリアルを作成するには以下の手順に従います。
透過処理がサポートされている ブレンド モード を選択します。
TranslucentColoredTransmittance
TranslucentGreyTransmittance
ColoredTransmittanceOnly
マテリアルのルート ノードを選択した状態で、[詳細] パネルを使用して [ライティング モード] を選択します。 次の選択肢から選択します。
サーフェス フォワード シェーディング
サーフェス透過処理ボリューム – このオプションではサーフェス上の反射がサポートされています。
非指向性のボリュメトリック – 使用コストは小さいが、光を反射しない。
半透明 Substrate マテリアルのセットアップの例を以下に示しています。 ブレンド モードは、TranslucentColoredTransmittance に設定され、Surface ForwardShading ライティング モードを使用します。 マテリアルのルート ノードの Front Material ピンに渡される 1 つの スラブを使用して、不透明に見える半透明マテリアルを生成しています。
スラブとフロント マテリアル入力の間で Substrate カバレッジ ウェイト演算子を使用して、マテリアルの透過率を制御しています。 Substrate カバレッジ ウェイト ノードのウェイト入力を使用して、マテリアルの透明度を制御しています。
0 ~ 1 の範囲の定数値を使用して、(上図のように) マテリアル全体の不透明度を制御するか、(下図のように) テクスチャを使用してマテリアルの部分的な不透明度を制御します。
さらに一歩進んで、関与媒質の MFP を指定することで、色付きガラスのような物質のスラブを作成することができます。 下記は Transmittance-To-MeanFreePath ヘルパー ノードの使用例で、SSS MFP につながれているオレンジ色の TransmittanceColor を使用して、光を透過する領域だけマテリアルをオレンジ色に着色するようにセットアップしています。 指定されている TransmittanceColor は「ターゲット」のカラーであり、指定されている厚さ入力 (デフォルトは 0.01 センチメートル) に達しています。
Substrate の透過処理に関する追記
半透明マテリアルでは、スラブが関与媒質のボリュームと見なされる場合でも、スクリーン空間サブサーフェス散乱は サポートされていません。
Substrate パフォーマンス
パフォーマンス上の負荷の概要:
単一の SubstrateShadingModel ノードを使用する場合、または従来の入力を使用する場合、全体的なコストは従来のモデルと同様になります。 ベース パス、ライティング、パスなどの負荷はほぼ同じである必要があります。
1 つのスラブに複数の機能を適用する場合 (複数の機能の同時使用など)、高度な機能 (グリントなど)、またはマテリアル内で複数のスラブを使用する場合は、フレーム コストが増加します。
パラメータ ブレンディングなしで複数のスラブを使用する場合、2 番目のスラブのコストはより高くなり、次のスラブのコストはほぼ直線的に増加します。
Substrate では、ライティング パスがより効率的に実行されるように、ベース パスの後にマテリアル分類パスを使用します。 これにより、ベース パスの後に小規模の固定オーバーヘッドが追加されますが、全体的なライティング コストの削減に役立ちます。 デバッグ表示モードを使用すると、コストを把握することができます。
マテリアル数には、ピクセルごとに実行されたクロージャーの数が表示され、潜在的にコストが高くなっているものが視覚化されます。
マテリアル分類は、実行されるピクセル/タイルにおけるライティングの複雑度を表示します。
Substrate のデバッグ表示モード
Substrate を使用する場合、そのマテリアルがどのように行われていて、どれに注目することにメリットがあるかを確認することは役立ちます。 Substrate のデバッグ ビジュアライゼーション モードは、[Substrate] カテゴリ の [View Mode (表示モード)] ドロップダウン リスト内にあります。
Substrate には以下のデバッグ用ビジュアライゼーション モードがあります。
表内の画像をクリックすると拡大表示されます。
| デバッグビジュアライゼーション | デバッグ ビジュアライゼーション名 | 説明 |
|---|---|---|
マテリアル プロパティ | マウス カーソルの下にある Substrate のプロパティを視覚化します。 調べたいピクセルの上にマウス カーソルを乗せると、ライティングに使用されるマテリアルのパックされた最終的なクロージャー (プロパティ、色付きウィジェット、マテリアルで有効になっている機能、使用バイト数など) が表示されます。 | |
マテリアル数 | ピクセルあたりの Substrate マテリアルの数を視覚化し、使用されている BSDF スラブ ノードの数に応じて色付けします。 | |
マテリアルのバイト数 | ピクセルあたりの Substrate マテリアルの使用量を視覚化します。 マテリアルは、使用しているバイト数で色分けされます。 また、マウス カーソルをマテリアルに乗せると、そのマテリアルのピクセルあたりのバイト数が表示されます。 | |
Substrate 情報 | このモードでは、プロジェクトでの Substrate の使用状況に関する情報の要約が表示されます。最大メモリ使用量、(単純化のしきい値を設定するのに役立つ) ピクセルあたりの最大バイト数、有効になっている Substrate 機能などに関する情報が含まれます。 | |
| Substrate Advanced View Modes (Substrate 詳細表示モード) | ||
詳細マテリアル プロパティ | 現在マウス カーソルの下にあるマテリアルを構成しているさまざまな Substrate スラブに関する情報が表示されます。 スラブごとに個別に画面に提示されます。 この表示モードは、[プロジェクト設定] の [Engine (エンジン)] > [Rendering (レンダリング)] カテゴリで、[Substrate advanced visualization shaders (Substrate 詳細ビジュアライゼーション シェーダー)] チェックボックスをオンにして有効にする必要があります。 | |
マテリアル分類 | このモードでは、タイルごとのマテリアルの複雑さが示され、次のように色分けされた結果が返されます。
| |
ラフな屈折の分類 | このモードでは、Opaque Rough Refraction プロパティを使用するマテリアルが表示されます。 また、このモードでは Substrate マテリアルでサブサーフェス散乱が有効か無効のどちらになっているかも区別されます。 これらのビジュアライゼーション モードのいくつかで示されるタイルは、後で最適化されたポストライティング パスの実行に使用されます。 これらは、使用されるスラブの数と有効になっている機能の数を減らすことによって Substrate マテリアルを最適化するのに役立ち、演算子でパラメータ ブレンディングを使用するのに役立ちます。 ミックスおよびレイヤー化されているいくつかのマテリアルから成っているが、(動的マスキングのため、または透過率値が小さいために) どのピクセルでも単一のスラブだけが見えているマテリアルでは、見えていないスラブのビジュアライゼーションは示されません (または除外されます)。 |
制限事項および既知の問題
Substrate はベータ版の機能であるため、実際の制作作業には使用しないことをお勧めします。
プラットフォームのサポートおよびテストは現時点では不十分です。 製品版への移行に伴い、テストのカバレッジが大きくなる予定です。
機能および UX では、既存のアセットで動作が変わることや完全に無効になるといった変更が行われる可能性があります。
パス トレーサーのベータ サポートを提供
DirectX 11 (DX11) や Mac など、一部のプラットフォームやレンダリング パスでは問題が発生しており、完全には機能しない可能性があります。
アダプティブ GBuffer を使用すると、次のようになります。
単純なマテリアルであっても、ブレンダブル GBuffer を使用する場合と比べて、クック時間 (シェーダーのコンパイル時間) は長くなります。 これは、アダプティブ GBuffer ではより多くの処理が必要になり、エンコード/デコードの手順がより複雑であるためです。
ランタイム パフォーマンスは、まったく同じプロジェクトの場合、ブレンダブル GBuffer のパフォーマンス低下と比較して、低下します。 この原因は主に、エンコード/デコードの手順と、より複雑なランタイム評価です。
その他のリソース
The State of Unreal ライブストリーム — タイムスタンプ:02:29:42
機能別サンプル プロジェクトには「SubstrateMaterials」というレベルがあり、そのレベルでさまざまな例や Substrate マテリアルがどのように機能するかのデモを詳しく調べることができます。
Content Examples プロジェクトで Substrate を使用するには、このプロジェクトで Substrate を有効にする必要があります。 Substrate を有効にした状態で使用できることが検証されているのはこのマップだけです。 コンテンツ例プロジェクトの 1 つのインスタンスのみを使用している場合は、このレベルに対してのみ Substrate を有効にし、プロジェクトの他の部分を使用しているときは Substrate を無効にすることをお勧めします。