Mantra – Physically Based Rendering


どうも篠島です。今回は Mantra の Physically Based Rendering について説明したいと思います。

 

Physically Based Rendering (以下PBRと呼びます)は物理的に正しい光のシミュレーションをするようにしたエンジンです。サーフェースにヒットしたレイのセカンダリレイがどのように反射(物理的に正しい方向に)するかという BSDF (シェーダー内での変数名 F)をシェーダーが計算し、Compute Lighting VOP によって pbrlighting() という関数が呼ばれ、パストレーサーがその BSDF を元にレイを物理的に正しい方向にランダムに飛ばして色の計算をします。

 

PBR は Ray Tracing (以下RTと呼びます)と非常に似ていて、主な違いがシェーダー内部で色を計算するのに F (BSDF)を評価して、Cf は完全に無視して計算をしません。逆に RT やMicropolygon Rendering (以下MP)では Cf を評価して F は無視します。

 

前回の記事でMPとRTではシェーダーで全てをコントロールできると書きましたが、Principled シェーダーを使うと、内部では BSDF を計算して最後に Compute Lighting VOP により、 BSDF から色情報 Cf に変換しています。なので Principled シェーダー、Classic シェーダーなど、BSDF を内部に保持しているシェーダーを使ってレンダリングした場合、各レンダリングエンジンでのレンダリング結果が物理的に正しいのでほぼ同じになります(得に PBR と RT はディスプレイスメントやノイズ等、非常に似たレンダリング結果になります)。

 

 

レンダリングエンジンの分類

前回の記事でMPとRTでのサンプリングについて簡単に説明しました。MRとRTでのサンプリング方法による分類と、PBRと非PBR のシェーディング方法による 分類をまとめると下の表の様になります。

SideFXではで Physically Based Rendering の使用を進めていますが、これはプロジェクトにより変化すると思います。トゥーンシェーダを多用する日本では物理的に正しいレンダリングをされると困ることがあると思うので、その場合は 非PBR 系のレンダリングエンジンを使うことになると思います。物理的に正しくするか、正しくしないかが分かれば、後はサンプリング方法をマイクロポリゴンにするのか、レイトレースにするのかでそのシーンに合ったレンダリングエンジンを選ぶことができると思います

また MR や RT だから物理的に正しくないという事ではなく、MR や RT でも物理的に正しいシェーダーを適用させることで、物理的に正しい絵を作る事ができるわけです。逆にPBRエンジンを使うと物理的に正しくない絵を作ることは(特別なことをしない限り)できません。

 

その他、補足

煙などをレンダリングする際はレイトレース系よりもマイクロポリゴンでレンダリングすると綺麗にレンダリングできます。下のGIFはデフォルトの Mantra の設定でレンダリングしたのを比較したものです。Physically Based Rendering のレンダリング結果にノイズが乗っているのは、Stochastic Transparency が原因で、この設定を調整したりオフにするとノイズは減ります。

 

Physically Based Rendering を使ったから絶対に物理的に正しくなるという事でもなく、これもまたシェーダーによって異なります。例えば、現実世界ではサーフェースから反射される光は、照らされた光以上の光を反射することは不可能なのですが、例えば下の図の様にBSDFを2倍にしてやると簡単に物理的に正しくない結果(入ってくるエネルギーよりも出力するエネルギーが多い)が得られたりします。

 

また、Houdini 標準シェーダーのTool Color Shader は物理的には正しくないシェーダー(F が無い)なのに PBR でレンダリングできてしまいます。これはプライマリレイの色を発光させることにより、無理やりカラーチャンネルに色を出力しているためです。

シェーダーでいろんな事がコントロール出来たのがわかったと思いますが、この様に PBR では物理的に正しくない絵も作れてしまうので、PBR エンジンは BSDF を使って計算するくらいに考えると分かりやすいかもしれません。