[ver.20] PBRマテリアル

  • PBRマテリアル
  • マスターサーフェスからマスターマテリアルに名称変更
  • 表面材質設定のファイル保存/読み込み (shdmtl)


Shade3D ver.20で追加されたPBRマテリアルは、リニアワークフローとともに利用します。
なお、PBRマテリアルはProfessional版のグレードで使用できます。

PBR(Physically-based Rendering)は「物理ベースレンダリング」と呼ばれ、よりリアルなレンダリングを行う場合の手段になります。
昨今のリアルタイムゲームエンジンでは標準的に使用されており、3DCG統合ツール(DCCツール)のオフラインレンダラでも一般的に使われています。
※ Shade3DもDCCツールになります。

Shade3D ver.20では、PBRのマテリアル指定に対応しました。
Shade3DのPBRマテリアルは、Disney社の「Principled BRDF」(Disney 原則BRDF)をベースとして実装されています。
「PBRマテリアル」は、「PBS (Physically-based shading)」とも呼ばれます。
「PBRマテリアル」は、ver.19までの表面材質のパラメータと大きく異なりますが、どちらもある程度似せることが可能です。
なお、ver.20では従来のShade3Dの表面材質は「Shade3Dマテリアル」と呼んでいます。

PBRマテリアルを使用することで、他のツール間で同一のマテリアルパラメータで扱いやすい、
インポート・エクスポートで同じマテリアルを再現しやすくなるという利点があります。
PBR対応のファイルフォーマットとしては、KhronosGroupのglTF ( https://github.com/KhronosGroup/glTF )や
Pixar社のUSD ( https://graphics.pixar.com/usd/docs/index.html )があります。
どちらもオープンソースです。
Shade3D ver.20では、まだPBRマテリアルを外部にインポート・エクスポートする機能は搭載されていません。

ver.20での名称変更

ver.19までは「マスターサーフェス」として表面材質を指定していました。
ver.20ではこの名称が「マスターマテリアル」と変更されました。
「マテリアル」はほとんどの3DCGツールやリアルタイムゲームエンジンで使われている単語と同じ意味になります。
形状に割り当てることができる材質を「マテリアル」と呼んでいます。

「マスターマテリアル」となる場合は、形状とは分けて管理できるマテリアルになります。
複数の形状で同一のマテリアルを使用したり、同時にマテリアルのパラメータを変更したい場合は「マスターマテリアル」を使用します。
ほとんどの3DCGツールでは、材質については「マスターマテリアル」的に扱う場合が多いです。

PBRマテリアルの利点と欠点

Shade3DのPBRマテリアルは以下のような利点があります。

  • 物理的により正確なレンダリング結果を得られる
  • 少ないパラメータで直感的に材質を調整できる
  • 値やテクスチャなど、他のツールと同じパラメータを指定できる

ただし、従来の「Shade3Dマテリアル」と比べて欠点もあります。

  • すべてが反射する材質になるため、レンダリング速度が低下する
  • 表面材質の継承は使用できない
  • 材質の色(ベースカラー)と異なる反射の色を与えることができない
  • Shade3Dマテリアルでのソフトグローやバックライト、メタリックなど(フェイク寄りの効果)が使用できない
  • ホワイトキーマスクやブラックキーマスクが使用できない
  • テクスチャがRGBA要素を持つ場合のアルファ値でのトリミングが手間

これらは一般的なPBR/PBSの特徴というわけではなく、Shade3Dでの利点と欠点となります。
欠点については今後のバージョンアップで改善されるかもしれませんが、
PBRマテリアルは他ツールのマテリアルのパラメータとの互換性を確保する意味合いもあるため、
物理的ではないフェイク寄りの効果については実装されていません。
※ 他のDCCツールではPBR(PBS)を拡張/カスタマイズする手段として、シェーダーを用意している場合が多いです。

ver.20では、表現によってはShade3Dマテリアルとの併用が必要となりそうです。
テクスチャのアルファ要素でのトリミングやレンダリング速度については、別記事で解説予定です。

マテリアルの種類を指定

形状に対して新規にマテリアルを割り当てる場合、統合パレットの表面材質ウィンドウで
「作成」をクリックしてポップアップメニューを表示します。

「PBRマテリアル」か「Shade3Dマテリアル」のどちらかを指定できます。
なお、「PBRマテリアル」と「Shade3Dマテリアル」は互換性がありません。
片方に切り替えた場合は、マテリアルの全パラメータはクリアされます。

「Shade3Dマテリアル」は、従来のShade3Dのマテリアル指定になります。
「PBRマテリアル」がver.20で追加されたマテリアル指定です。
マテリアルをマスターマテリアルにした場合、ブラウザの「マスターマテリアルパート」では
「Shade3Dマテリアル」は(Shade3D)のラベルが付きます。
「PBRマテリアル」は(PBR)のラベルが付きます。

PBRマテリアルのパラメータ

「PBRマテリアル」は、「Shade3Dマテリアル」よりも指定できるパラメータが少ないです。
PBRマテリアルを使用することでパラメータを減らすことができる箇所として、光沢や光沢サイズ、フレネルなどがあります。
物理ベースのPBRでは、これらは自動的に計算されます。
PBRマテリアルを使用することにより、「Shade3Dマテリアル」よりも直感的にマテリアル指定できます。

PBR(PBS)表現では、「BaseColor(ベースカラー)」「Metallic(メタリック)」「Roughness(ラフネス)」「Emissive(発光)」「Normal(法線)」「Occlusion(オクルージョン)」がよく使用されます。
UnityやUnreal Engineなどのリアルタイムエンジンでは、それぞれにテクスチャを用意し割り当てることが多いです。
Metallic/Roughness/Occlusionはグレイスケールで表現され、テクスチャとしてRGB(A)のそれぞれに割り当ててパックしてリソースを節約する場合もあります。

リアルタイムエンジンでは透過や屈折は負荷が高いため、簡易的な表現になっているか別シェーダーで実装する場合が多いですが、
PBRマテリアルが存在するオフラインレンダラでは、加えて「透明度」や「屈折率(スペキュラ)」が使用できます。
Shade3D ver.20では、PBRマテリアルの基本要素+「透明度」「屈折率(スペキュラ)」が使用できることになります。

基本設定


基本設定の以下のパラメータでマテリアルを表現することになります。

この基本設定それぞれにテクスチャマッピングを割り当てることができます。

パラメータ名 要素 内容
ベースカラー 色(RGB) マテリアルの色情報。アルベド(Albedo)とも呼ばれます。
メタリック グレイスケール(0.0-1.0) 映り込みの強さ
ラフネス グレイスケール(0.0-1.0) 荒さ。1.0に近づくほどざらついた表現になります。
屈折率/スペキュラ グレイスケール
(屈折率の場合 1.0-3.0、
スペキュラの場合 0.0-1.0)
屈折率/スペキュラをポップアップメニューで切り替えることができます。
透明度 グレイスケール(0.0-1.0) 透過の強さ
発光 グレイスケール(0.0-1.0) + 色(RGB) 発光の強さ。発光色を指定できます。

PBRマテリアルの場合は反射や透過が発生する場合でも、ベースカラーを黒に近づける必要はありません。

ベースカラーを変化させた場合は以下のようになります。


ベースカラーは、初期値として真っ白(RGB(1.0, 1.0, 1.0))ではなく若干灰色寄り(RGB(0.9, 0.9, 0.9))になっています。
これは、現実には完全な白の材質を持つ物体がほぼ存在しないというのと、
レンダリング時に相互反射が起きる箇所で減衰が起きないことにより、白く発光するかのような表現になるのを防ぐ効果があります。
ただし、鏡のような反射やガラスのような透明を指定する際に、
ベースカラーをRGB(1.0, 1.0, 1.0)に近づけるほうがよりよい表現となる場合もあります。

メタリックを0.0から1.0に変化させた場合は以下のようになります。


PBRマテリアルは、メタリックが0の場合でも映り込みが発生するマテリアルになります。
大部分は、メタリックは0.0か1.0のどちらかを使うことになりそうです。
映り込みをなくすにはラフネスの値を大きくします。
鏡のような鏡面反射(正反射)を行う場合、ベースカラーは白に近づけるようにします。
「Shade3Dマテリアル」の「拡散反射」と逆の色指定を行うことになります。

ラフネスを0.0から1.0に変化させた場合は以下のようになります。


PBRマテリアルでラフネスを使用する場合、レンダリング時にレンダリング手法が「レイトレーシング」の場合でも荒さ表現が反映されます。
「Shade3Dマテリアル」の場合は、レンダリング時にレンダリング手法が「レイトレーシング」の場合は「荒さ」は反映されません。
「Shade3Dマテリアル」で「荒さ」表現を行う場合、レンダリング手法を「パストレーシング」にする必要があります。

屈折率(IOR)/スペキュラは相互に変換できるパラメータになります。
屈折率/スペキュラの変換は、以下の計算式になります。

Specular = (((IOR - 1) / (IOR + 1))^2 ) / 0.08

※ 「^2」は2乗の計算。

屈折率/スペキュラを使用することで、映り込みの反射具合や透過時の屈折表現ができます。

以下は、透明度が0.0の場合/1.0の場合のそれぞれで屈折率を変化させています。

この値は、金属やガラスなどの材質の種類によって異なります。
初期状態では、屈折率は1.5、スペキュラは0.5となっています。

スペキュラを変化させると、フレネルに相当する効果も確認できました。

透明度を変化させた場合は以下のようになります。


形状が落とす影は透明度によって変化し、影はベースカラーの色で反映されます。
ガラスのような表現を行う場合、ベースカラーは白に近づけるようにします。
「Shade3Dマテリアル」の「拡散反射」と逆の色指定を行うことになります。

発光を変化させた場合は以下のようになります。黄色を指定しました。

これらのパラメータを組み合わせることで、様々なマテリアルを指定することになります。

マッピング

マッピングはイメージのほか、ストライプ/チェック/スポット/雲などのプロシージャルテクスチャ(ソリッドテクスチャ)も指定できます。

PBRマテリアルも含めて他のツール間で形状をやり取りする場合は、マッピングは極力イメージを使用するほうがいいかもしれません。
プロシージャルテクスチャは3DCGツール別に個々のパラメータを持ち、どのツールにおいても他ツールと互換性はほぼありません。
また、プロシージャルテクスチャを完全に受け渡しできる形状ファイルフォーマットもありません。

テクスチャイメージを使用したマッピングで、
「ベースカラー」「メタリック」「ラフネス」「スペキュラ」「透明度」「発光」「オクルージョン」「法線」を指定できます。
「ベースカラー」「発光」はRGBのカラーマップテクスチャ、「法線」は法線マップテクスチャ、
それ以外はグレイスケールのテクスチャを指定します。

凸凹のシェーディングを行う場合は、PBRマテリアルではバンプマップは使用できません。
その場合は、法線マップを使用するようにします。

木の葉のようにピクセル透過が必要な場合は、「ベースカラー」「スペキュラ」「透明度」のテクスチャを使用することになります。
この表現については、次回解説予定です。

表面材質設定のファイル保存/読み込み

表面材質ウィンドウの「保存」ボタンを押すと、ファイルに表面材質設定を保存できます。

「Shade3Dマテリアル」での表面材質情報をファイル保存した場合の拡張子は「shdsfc」となります。
読み込み時は「読込」ボタンを押し、shdsfcファイルを読み込みます。
ver.20で「PBRマテリアル」を指定した場合、拡張子は「shdmtl」として保存できます。
これは、PBRマテリアルを指定した場合の区別としての拡張子変更になります。

次回は、PBRマテリアルで木の葉のようなトリム表現を行う方法について説明していく予定です。

カテゴリー: リニアワークフローとPBRマテリアル