On this page |
代わりにVOPを使用してマテリアルを構築するには、VOPでマテリアルを構築する方法を参照してください。
概要 ¶
PBRサーフェスシェーダの記述には、サーフェスに対して双方向散乱分布関数である Bidirectional Scattering Distribution Function (BSDF)の設計が伴います。この関数には、ライトがサーフェスに当たった時の光の散乱の仕方を記述しています。 BSDFはVEXでは不透明なデータタイプです。これは他のプリミティブタイプと同じように保存と操作をすることができます。
新しいグローバル変数F
によってシェーダに対して最終的なBSDFを出力します。VOPでは、BSDFを出力ノードのF
コネクションに接続することができます(以下のVOPを参照)。
BSDFには、自己完結型でサーフェスが光を反射する方法を記述します。PBRでは、照明計算(例えば、illuminanceループやtrace()
コール)をする必要がありません。単にbsdf
を用意すれば良いだけです。
独自でscattering(散乱)関数を記述する必要はありません。基本のBSDFを、加算、乗算、スカラー乗算の組み合わせでBSDFを作成することができます。以下の“基本のBSDF”と“BSDFの組み合わせ”を参照してください。必要に応じて、CVEXを使って独自のBSDF関数を記述することができます。
レンダリングで選択した設定に基づいて、Mantraはあらゆる方法でシェーダで計算したBSDFを使用することができます。例えば、これは、直接照明、間接照明を実行したり、フォトンマッピングのようなアルゴリズムのために、ライティングを逆に評価する場合があります。
従来のレンダリングと物理ベースのレンダリングの両方に対応したシェーダを設計することができます。シェーダには、値を両方のタイプの出力変数(従来のレンダリング用にCf
、Of
、Af
。PBRレンダリング用にF
)に割り当てる必要があります。
基本のBSDF ¶
BSDFの組み合わせ ¶
-
bsdf +(bsdf, bsdf)
2つのBSDFを合計します。BSDFを合計すると、2つ以上のタイプのコンポーネントを含めることができます。例えば、diffuse()とphong()を合計することができます。
-
bsdf *(float scale, bsdf)
-
bsdf *(vector scale, bsdf)
BSDFをカラーやスケール係数でスケールします。BSDFのスケールは、サーフェスカラー(例えば、テクスチャリング)をBSDFに組み込むことができます。
-
bsdf *(bsdf, bsdf)
2つのBSDFを生成します。この関数は、specular bsdfをdiffuse()でスケールするのに非常に役に立ちます。
-
vector albedo(bsdf)
bsdf
の反射光の配分を返します。戻り値はエネルギーを保存するBSDFに対して0から1の間になるはずです。デフォルトのdiffusebsdf
に対するalbedoは0.5ですが、ベクトルのスケール係数と他のbsdf
コンポーネントに基づいて変わります。