February 21, 2009

mental ray 3日目

mental ray について考える前に

これを[mental ray]を使うと、より写真に近い(フォトリアルな)絵を書き出すことが可能です。

以前、こんなことを書きました。ただ、そのフォトリアルな絵を実現するためにはシェーディングやライティング、レンダリングを正しく理解していることが条件です。そうでなければ望む結果を得られません。

そういうわけで、まずはレンダリングについて調べた

レンダリングのことを考えるとなると、レンダリングのことだけを考えればいいわけでありません。そういうよりは、レンダリングについて考えると、レンダリングだけを考えられません。やはり、シェーディング、ライティングについて考える必要があります。

しかしながら、大きく占めているのは照明である気がします。なぜならば、現実の世界と同様に3DCGソフトウェアが出すレンダリング結果でも、光が無いところでは物体は見えないからです。そのため、レンダリングと照明は表裏一体なものと捉える必要があります。

3DCGの照明方法を簡単に分けると2種類

  • ローカルイルミネーション(局所照明)
  • グローバルイルミネーション(大域照明)

前者のローカルイルミネーション(局所照明)は経験則に基づくため結果に個人差がありますが、レンダリング時間は比較的短いです。後者は物理シュ ミレーションに基づきます。正確ですが、レンダリング時間は比較的長くなります。PCの性能によって差が最も出やすいところです。また後者の場合、「レン ダリングが終わらねぇ!」といった発言の源泉となりやすいように思われます。

ローカルイルミネーション と グローバルイルミネーションの違い

この2つの大きな違いは間接光を計算するかどうかです。間接光とは、壁や天井などに一度反射させてから、明るさを取る照明の手法のことを言いま す。別の言い方でバウンスライティングとも呼びます。これを行うことによって、硬い光をやわらげ、被写体の表情や室内の雰囲気などを自然に描写することが できます。

ローカルイルミネーション(局所照明)

光源から直接届く光のみを考慮してレンダリングする方法です。間接光も計算するグローバルイルミネーションよりも高速に計算することが可能です。 しかし、ライティングを工夫しないと、いかにもCGっぽいレンダリング結果になります。ローカルイルミネーションはそういったレンダリングアルゴリズムです。

グローバルイルミネーション(大域照明)

光源から直接届く光の量のみを計算するローカルイルミネーションとは違います。他の物体表面で1回以上反射、透過して届いてくる光も考慮してレン ダリングします。そのため、ローカルイルミネーションに比べ、よりリアルなレンダリング結果を手に入れることができます。より多くの時間を待つことになり ます。グローバルイルミネーションはそういったレンダリングアルゴリズムです。

グローバルイルミネーションの使い方

基本的なところ

間接光を表現するため、レイと呼ばれる光線を出すレイトレース方式を使います。うまく間接光を使うために反射する回数や屈折する回数などを試行錯誤して調整していきます。

  • レイトレーシング方式
  • レイトレーシング方式はカメラ位置からレイ(光線)を放ち、シーン内にある物体と衝突させる計算方法です。レイが物体にぶつかった場合は、反射という形、屈折という形で様々な方向へ移動 します。その後、進路上に別の物体があればそこで再びレイが衝突し反射、屈折をします。これを繰り返し、空間内を映像ないし画像として書き出します。

    ちなみに、他にもレンダリング方式自体には、スキャンライン方式やラジオシティ方式が存在するそうです。ただ、mental ray が採用しているのがレイトレーシング方式のため、それ以外は割愛します。

応用的なところ

グローバルイルミネーションはあと2点ほど考えます。フォトンマップとファイナルギャザリングです。

  • フォトンマップ
  • グローバルイルミネーションを計算するためのアルゴリズムのひとつです。ライトからフォトン(光子)をシーン中にばらまき、各物体面での明るさを その点にばらまかれたフォトンの密集度から推定する方法です。この設定を適切な値にしないと、レンダリング結果がノイズだらけの汚いものとなったり、ある いは不必要にボケているものになります。この方法を用いるとレンダリング時間が延長されます。

    なお、このフォトンマップ法を使っているとどうしても暗くなってしまう不具合が発生します。この不具合を削減または解消するためには、ファイナルギャザリングといった別の手法を用います。当然ながら、この手法を用いるとさらにレンダリング時間が長くなります。

  • ファイナルギャザリング
  • グローバルイルミネーションを計算するためのアルゴリズムのひとつです。ライトからフォトンをばらまいた後、各物体表面に入射する光をサンプリングすることで入射光推定を行います。 レンダリングされる点での入射光推定は周囲にサンプルレイを飛ばすことで行い、サンプルレイと物体の交差面ではフォトンの密度推定から入射光を計算します。この手法もレンダリング時間を長くさせます。