PBR 素材

"PBR 素材" は、Azure Remote Rendering でサポートされている 素材の種類の 1 つです。 これらは、リアルな照明を受ける必要があるメッシュに使用されます。

PBR は、P hysically B ased R endering (物理ベース レンダリング) の頭文字であり、すべての照明条件下で現実的な結果が得られるように、物理的に適切な方法で表面のビジュアル特性が素材において記述されることを意味します。 リアルタイム レンダリング用に現実世界を近似する手段としては PBR が最適であると考えられているため、最新のゲーム エンジンやコンテンツ作成ツールでは、PBR 素材がサポートされています。

ARR によってレンダリングされたヘルメットの glTF サンプル モデル

ただし、PBR 素材は万能のソリューションではありません。 見る角度によって色の反射が異なる素材があります。 たとえば、一部の織物や自動車の塗装などです。 この種の素材は、標準的な PBR モデルでは処理されず、現状 Azure Remote Rendering ではサポートされていません。 これには、Thin-Film (多層表面) や Clear-Coat (自動車の塗装用) などの、PBR 拡張機能が含まれます。

素材の共通プロパティ

これらのプロパティは、すべての素材に共通です。

  • albedoColor: この色には、albedoMap や " vertex カラー" など、その他の色が乗算されます。 素材に対して 透明度 が有効な場合、アルファ チャネルを使用して不透明度が調整されます。ここで、1 は完全に不透明、0 は完全に透明を意味します。 既定値は白です。

    注意

    まったく汚れのないガラスのように、PBR 素材が完全に透明な場合でも、環境が反射されます。 太陽のような明るいスポットは、反射でもやはり見えます。 これは、色素材とは異なります。

  • albedoMap: ピクセル単位の albedo 値の 2D テクスチャ

  • alphaClipEnabledalphaClipThreshold: alphaClipEnabled が true の場合、albedo アルファ値が alphaClipThreshold よりも小さいすべてのピクセルは描画されません。 アルファ クリッピングは、透明度を有効にしなくても使用でき、レンダリングがはるかに高速になります。 ただし、アルファ クリッピングされた素材は、完全に不透明な素材と比べると、レンダリングは遅くなります。 既定では、アルファ クリッピングは無効になっています。

  • textureCoordinateScaletextureCoordinateOffset: スケールが UV テクスチャ座標に乗算され、オフセットが追加されます。 テクスチャの伸縮とシフトに使用できます。 既定のスケールは (1, 1) で、オフセットは (0, 0) です。

  • useVertexColor: メッシュに vertex カラーが含まれていて、このオプションが有効になっている場合は、メッシュの vertex カラーが albedoColoralbedoMap に乗算されます。 既定では useVertexColor は無効になっています。

  • isDoubleSided: 両面に対する表示が true に設定されている場合、この素材が表示されている三角形は、カメラが背面を見ている場合でもレンダリングされます。 PBR 素材の場合、照明も背面に対して適切に計算されます。 既定では、このオプションは無効になっています。 「Single-sided レンダリング」も参照してください。

  • TransparencyWritesDepth: 素材に TransparencyWritesDepth フラグが設定されていて、その素材が透明である場合、その素材を使用した物体も、最終的な深度バッファーに寄与します。 次のセクションの PBR 素材フラグ transparent を参照してください。 実際のユース ケースで、完全に透明なシーンの Late Stage Reprojection の現実感を高める必要がある場合は、この機能を有効にすることをお勧めします。 不透明と透明が混在するシーンでは、この設定によって、非現実的な再投影動作や再投影アーティファクトが生じることがあります。 このため、一般的なユース ケースにおいて推奨される既定の設定は、このフラグを無効にすることです。 書き込まれる深度値は、カメラに最も近い物体のピクセルごとの深度レイヤーから取得されます。

  • FresnelEffect: この素材フラグを使用すると、個々のマテリアルに対して付加的な フレネル効果を有効にすることができます。 この効果の外観は、以下で説明する、他のフレネル パラメーターによって制御されます。

  • FresnelEffectColor: この素材に使用されるフレネルの色。 この素材に対してフレネル効果ビットが設定されている場合にのみ重要です (上記を参照)。 このプロパティによって、フレネル光沢の基本色が制御されます (詳細な説明は「フレネル効果」を参照してください)。 現在は、rgb チャネル値のみが重要であり、アルファ値は無視されます。

  • FresnelEffectExponent: この素材に使用されるフレネル指数。 この素材に対してフレネル効果ビットが設定されている場合にのみ重要です (上記を参照)。 このプロパティによって、フレネル光沢の拡散が制御されます。 最小値 0.01 の場合、オブジェクト全体にわたって拡散されます。 最大値 10.0 では、光沢が抑制され、最グレージング端にのみ表示されます。

PBR 素材のプロパティ

物理ベース レンダリングの中心になる概念は、BaseColorMetalnessRoughness プロパティを使用して、さまざまな現実世界の素材をエミュレートすることです。 PBR の詳細については、この記事では説明しません。 PBR について詳しくは、他のソースをご覧ください。 次のプロパティは、PBR 素材に固有のものです。

  • baseColor: PBR 素材では、"アルベド カラー" は "ベース カラー" と呼ばれます。 Azure Remote Rendering では、"アルベド カラー" プロパティは素材の共通プロパティに既に存在するため、追加のベース カラー プロパティはありません。

  • roughnessroughnessMap: roughness では、表面の粗さまたは滑らかさを定義します。 粗い表面では滑らかな表面より多くの方向に光が散乱するため、反射がシャープではなくぼやけます。 値の範囲は 0.0 から 1.0 までです。 roughness0.0 の場合、反射はシャープになります。 roughness0.5 の場合、反射はぼやけるようになります。

    粗さの値と粗さのマップの両方を指定した場合、最終的な値は両方の積になります。

  • metalnessmetalnessMap: 物理的には、このプロパティは表面が導電性か誘電性かに対応します。 導電性の素材にはさまざまな反射特性があり、アルベド カラーなしで反射される傾向があります。 PBR 素材では、このプロパティによって、周囲の環境がどの程度反射されるかが決まります。 値の範囲は 0.0 から 1.0 です。 metalness を 0.0 にすると、アルベド カラーが完全に見えるようになり、素材はプラスチックやセラミックのようになります。 metalness を 0.5 にすると、塗装された金属のように見えます。 metalness を 1.0 にすると、表面はアルベド カラーをほぼ完全に失い、周囲の反射だけになります。 たとえば、metalness1.0 にして、roughness0.0 にした場合、表面は実際の鏡のように見えます。

    metalness の値と metalnessMap の両方を指定した場合、最終的な値は両方の積になります。

    さまざまな metalness と roughness の値を使用してレンダリングされた球

    上の図では、右下隅の球は実際の金属素材のように見え、左下はセラミックまたはプラスチックのように見えます。 アルベド カラーも、物理的なプロパティに応じて変化します。 粗さが増すと、素材の反射のシャープさが失われます。

  • normalMap: 微細なディテールをシミュレートするには、法線マップを提供できます。

  • occlusionMapaoScale: アンビエント オクルージョンを使用すると、間に隙間があるオブジェクトの隠されている領域にシャドウが追加されて、外観がいっそう現実的になります。 オクルージョン値の範囲は 0.0 から 1.0 です。0.0 は暗い (隠されている) ことを意味し、1.0 は隠されていないことを意味します。 2D テクスチャをオクルージョン マップとして提供した場合、効果が有効になり、aoScale は乗数として機能します。

    アンビエント オクルージョンあり/なしでレンダリングされたオブジェクト

  • transparent: PBR 素材の場合、透過性の設定は、有効か否かの 1 つだけです。 不透明度は、アルベド カラーのアルファ チャネルによって定義されます。 有効にすると、より複雑なレンダリング パイプラインが呼び出されて、半透明の表面が描画されます。 Azure Remote Rendering では、真の順序に依存しない透明度 (Order Independent Transparency: OIT) が実装されています。

    透明なジオメトリは、レンダリングの負荷が大きくなます。 表面に穴が必要なだけの場合は (木の葉など)、代わりにアルファ クリッピングを使用することをお勧めします。

    ゼロから完全までの透明度を使用してレンダリングされた球上の図では、右端の球は完全に透明ですが、反射がまだ表示されていることに注意してください。

    重要

    実行時に素材が不透明から透明に切り替わることが想定される場合は、レンダラーで TileBasedComposition レンダリング モードを使用する必要があります。 この制限は、最初から透明な素材として変換される素材には適用されません。

技術的な詳細

Azure Remote Rendering では、Cook-Torrance マイクロファセット BRDF と GGX NDF、Schlick フレネル、GGX Smith で相関された可視性項と Lambert 拡散項が使用されています。 このモデルは、現時点では事実上の業界標準です。 詳細については、次の記事をご覧ください: 「Physically based Rendering - Cook Torrance」(物理ベース レンダリング - Cook Torrance)

Azure Remote Rendering で使用されている Metalness-Roughness PBR に代わるものとして、Specular-Glossiness PBR モデルがあります。 このモデルでは、より広い範囲の素材を表すことができます。 ただし、コストが高く、通常、リアルタイムでは適切に機能しません。 (BaseColor、Metalness) に変換できない " (拡散、反射) " の値のペアがあるため、Specular-Glossiness から Metalness-Roughness に常に変換できるとは限りません。 (BaseColor、Metalness) のすべてのペアは明確に定義された " (拡散、反射) " のペアに対応するため、反対方向への変換は、より簡単で正確です。

API のドキュメント

次のステップ