PBRマテリアル

ここでは、OSPRayの挙動に限らないPBRマテリアルの一般的な動作について記載します。
DOKIで使用しているOSPRayのマテリアルはPBRマテリアルがベースとなっています。
これにより、PBRマテリアル対応のDCCツールやゲームエンジンとパラメータを共有しやすくなります。
このPBRマテリアルは、Shade3D ver.20から搭載されているPBRマテリアルと挙動が同じになります。

項目名 色/値 OSPRayでのサポート 説明
ベースカラー RGB O 物体色、アルベドとも呼ばれる
不透明度(Opacity) Grayscale O 不透明度
メタリック Grayscale O 反射の強さ
ラフネス Grayscale O 表面のざらつきの強さ
法線 RGBと値 O 凸凹の表現(マッピングとして指定)
発光 RGBと値 O 発光の表現 (*1)
透明 RGBと値 O 透明度の色と透明度の値を持つ
屈折 O 屈折率 1.0 ~

「ベースカラー」「不透明度(Opacity)」「メタリック」「ラフネス」「法線」「発光」「透明」は、テクスチャを持てる場合が多いです。
(*1) OSPRayでは、「発光」でテクスチャを指定できません。

「ベースカラー」のデフォルトは、0.8くらい(RGBで(204,204,204)くらい)を指定している場合が多いです。
透明体ではない場合は、RGB(255, 255, 255)などになることはほとんどありません。
ベースカラーの値が大きすぎる場合は、レンダリング時の間接照明の計算で白く飛んでしまうことになります。

「不透明度(Opacity)」は、リアルタイム環境は「ベースカラー」のAlpha要素として格納される場合が多いです。

「発光」はOSPRayでは、テクスチャマッピングの指定はできません。「Luminous」という専用のマテリアルで表現します。

「透明」はTransparencyまたはTransmissionと呼ばれ、1.0に近づくほど透明になります。
「不透明度(Opacity)」の指定は「屈折」の影響を受けませんが、「透明」は「屈折」の影響を受けます。

金属のような反射が行われるマテリアル、ハイライト表現が必要なマテリアルの場合は、不透明でも「屈折」で1.0よりも大きい値を指定する必要があります(デフォルトは1.5である場合が多いです)。
また、ハイライトを出す場合は「ラフネス」が0.0よりも大きい値を指定する必要があります。

ゲームエンジンのようなリアルタイム環境では、「透明」「屈折」のパラメータが存在しない場合もあります。

「メタリック」0.0、「ラフネス」0.0の場合

「ベースカラー」を青色、「メタリック」0.0、「ラフネス」0.0、「屈折」1.5、「透明」0.0を指定した場合、以下のようなレンダリング結果になります。
shade3d_ospray_pbrmaterial_01.jpg
「メタリック」が0.0の場合でも、「ラフネス」値が小さい場合は映り込みが表現される点に注意してください。
また、「ラフネス」が0.0の場合はハイライトは表現されません。

ハイライトの表現

「ベースカラー」を青色、「メタリック」0.0、「ラフネス」0.2、「屈折」1.5、「透明」0.0を指定した場合、以下のようなレンダリング結果になります。
shade3d_ospray_pbrmaterial_02.jpg

ハイライトを出すには、「ラフネス」は0.0より大きな値を指定、「屈折」は1.0より大きな値を指定する必要があります。

メタリックでの色の指定

金属のような色を持った反射は、「メタリック」を1.0、「ベースカラー」を反射色として表現します。
「ベースカラー」をRGB(154,107,50)、「メタリック」1.0、「ラフネス」0.25、「屈折」1.5、「透明」0.0を指定した場合、以下のようなレンダリング結果になります。
shade3d_ospray_pbrmaterial_04.jpg

「メタリック」はほどんどの場合は、0.0もしくは1.0を指定することになります。
金属の場合は「メタリック」1.0を指定し、「ラフネス」で映り込みの鈍さを表現するようにします。

ラフネスの表現

「ラフネス」で表面にざらつきを与えていきます。
「ベースカラー」をRGB(200,200,200)、「メタリック」1.0、「ラフネス」0.0、「屈折」1.5、「透明」0.0を指定し、ラフネス値を変えていきます。
「メタリック」1.0を指定することで鏡面反射を行っています。
下画像は、左からラフネスを0.0/0.2/0.6/1.0と変化させました。
shade3d_ospray_pbrmaterial_03.jpg

不透明度(Opacity)の指定

不透明度(Opacity)は、テクスチャマッピング時のピクセル透過などで使用されます。
たとえば木の葉の表現の場合、1枚の四角形ポリゴンに対してテクスチャマッピングします。
shade3d_ospray_pbrmaterial_05.jpg

この場合は、葉のテクスチャは以下のようにRGBとAlpha要素を持ちます。
shade3d_ospray_pbrmaterial_06.jpg

Alpha要素が「不透明度(Opacity)」のテクスチャ指定となります。
レンダリングすると以下のようになります。
shade3d_ospray_pbrmaterial_07.jpg

「不透明度(Opacity)」はマスクの意味合いが強く、「屈折」の影響を受けません。
透明度の表現を行いたい場合は「透明」を使用します。

透明を指定

「透明」で透明表現を行います。
「屈折」で1.0より大きい屈折率が指定されている場合は、屈折表現も行われます。
「ベースカラー」をRGB(255,255,255)、「メタリック」0.05、「屈折」1.5、「透明」0.95を指定した場合、以下のようなレンダリング結果になります。
左が「ラフネス」0.0、右が0.2を指定しました。
shade3d_ospray_pbrmaterial_10.jpg

注意点として、「メタリック」+「透明」の値は合計で1.0を超えないように調整します。

透明色を指定した場合、その色が影に反映されます。
以下は透明色を黄色にしました。
shade3d_ospray_pbrmaterial_11.jpg

また、OSPRayでは透明時の減衰距離を指定することで、距離による色の影響を調整することができます。

法線マップで凸凹を表現

法線マップのテクスチャを指定して凸凹の表現を行います。
以下のようなタイリング加工された法線マップを用意しました。
shade3d_ospray_pbrmaterial_08.jpg

レンダリングすると以下のようになります。
shade3d_ospray_pbrmaterial_09.jpg

発光を表現

任意の形状の表面を発光させます。
発光体からの光は周囲を照らす効果があります。
shade3d_ospray_pbrmaterial_12.jpg

なお、OSPRayの場合は発光でテクスチャを使用することができません。