nytrのレンダラ部解説

NPR(Non-Photorealistic Rendering)なレンダリングを行えるPBR(Physically-based Rendering)なレンダラというのはそもそも矛盾しているので、NPRをポストエフェクト的に実装することを考えました。

http://nyaxtstep.com/pubdata/img/nytrdiagram.gif

大雑把な構成は図のような形になっています。

PBRなレンダリングを行う際は、PBRレンダラ部のみでレンダリングを行います。MLT, ERPT, Stochastic パストレ, LightCuts等レンダリング方程式派生アルゴリズムの実装が可能です。XYZ空間やSpectrum-basedで演算も可能です。BRDF(BTDF?)として表せるシェーダならPBR部でも用いることができます。

NPRなレンダリングは、PBR結果に対するポストエフェクトで実装します。
単純にイメージ全体にフィルタをかけるわけにはいかないので、Whittedレイトレやラスタライズを行い、そこでRenderMan並に自由度の高いシェーダを走らせます。ここでPBRへ情報をリクエストすることも可能です*1

ここで、問題になってくるのはシェーダの分散です。PBR部に用いるBRDFシェーダ部とNPRで用いるNPRシェーダ部で分離しています。また、PBR部ではさらに重点的サンプリング用サンプラや(ロシアンルーレット付きの)フォトン反射関数も必要になります。

これは専用のGUIシェーダデザイナで解決します。PRManシェーダでは直接記述していた各種BRDFをモジュール化し、シェーダツリーからこれらのシェーダを生成するジェネレータを作成します。

PRManやBMRTとの大きな違いはとにかくレンダリングアルゴリズム依存部をシェーダから追い出すような構成になっていることと、完全に物理ベースなレンダリングが可能で、ほぼ全てのPBRアルゴリズムが実装可能なことです。

他にも利点としてはPBRもNPRも同様のレンダラで可能ということがあげられます。レンダーファームでNPRレンダラ、PBRレンダラの2つを走らせる必要がなくなります。*2またPBRで作ってみたけどちょっとここを修正したい、というときにNPRシェーダでいじってみたりするシナリオを考えています。

*1:直接照明結果、大域証明結果等。簡単なフィルタも考えています(特定のライトを無視等)

*2:NPR, PBRレンダラ両方がジョブを取得してしまうということがなく、負荷分散が適切に行えます。