レンダリング手法の選択


レンダリング手法の説明

さて、前の章ではレンダリングそのものの説明については簡単にしただけでした。
その中で、「現実世界は無限の光の伝搬行路があるが,コンピューターではそれら全てを計算するのは不可能なので任意のサンプル数を選んでそのサンプル数分の伝搬行路を計算することでレンダリング画像を出力する」と言いました。
少し深く考えてみましょう。 下図のようなレンダリング結果画像があります。

レンダリング画像1

レンダリング画像1

綺麗に建物内の様子が表示されていますね。 次にもう一枚、例を見てみましょう。

レンダリング画像2

レンダリング画像2

最初の画像よりノイズが多い画像になっています。何故でしょう。
実は下の画像はまさしく現実世界と同じ様に、光源から出た光の経路が最終的に視点に入ってくる様にサンプリングした結果画像になります。(これをライトトレーシングと呼びます)

それでは上の画像は何が違うのでしょうか。 上の画像は実は光源からだけではなく、同時に視点からもレイを飛ばして、その二つをレイを確率的に足し合わせ計算しています。 細かく説明すると難しくなるので光源からだけではなく視点からも光の伝搬経路を計算しているとだけ思ってください。(これを双方向パストレーシングと呼びます) 何故、視点からレイを飛ばす必要があるのでしょうか?現実世界と同じ様に光源からだけレイを飛ばす方法より何故より綺麗になるのでしょうか?

それが、この章の冒頭の「」内で説明したことにつながります。
レンダリングでは、決められたサンプル数分しかレイを飛ばすことができません。 また現実世界では、光源から出た光は光エネルギーが0になるまで何回でも反射し続けます。
一方コンピューターの計算では光の膨大な反射回数を真面目に計算してしまうとものすごく時間がかかってしまうため、どこかキリのいい回数で打ち切らなければいけません。
それを頭に入れてもう一度レンダリング画像②を見てみましょう。
なんとなく入り組んだ構造の部分にノイズが多いことがみて取れますよね。
この様な入り組んだ場所に光が差し込むには、何度も反射を繰り返さなくてはいけません。決められたサンプル数のうち何度も反射して入り組んだ部分に光が入る確率が他の光の当たりやすい部分に比べて少ないことは直感的にわかりますよね?
そのため、レンダリング画像①のように双方向パストレーシング法を用いることで、同じサンプル数ながら、同時に視点からもレイを飛ばすことで、入り組んだ地形にもよりレイが到達する。といったわけです。

この他にも視点方向だけからレイを飛ばすパストレーシング というものがあります。

パストレーシング結果画像

パストレーシング結果画像

視点から飛ばしたレイが、最終的に光源にヒットしない限り、光源からの寄与が与えられないため、その飛ばしたレイは無駄になってしまいます。
そのため、入り組んだ地形が多いようなシーンでは、1度入り組んだ地形にレイが入ってしまうと、なかなか抜け出せなくなり、反射回数の制限で打ち切り。寄与0ということが起きてしまいます。
しかし、ほとんど入り組んだ場所がなかったり、光源が非常に大きい場合にはパストレーシングでも十分に綺麗な画像を生成することができます。

もう一枚見てみましょう。

光源位置のサンプリングを行ったパストレーシング結果画像

光源位置のサンプリングを行ったパストレーシング結果画像

なにか双方向パストレーシングと同じくらい綺麗な画像ができました。
これはパストレーシングと同様に視点方向だけからレイを飛ばしているのですが、光源位置を直接サンプリングしているので、入り組んだシーンでも光源からの寄与が高くなります。

Lightmetricaが提供するレンダリング手法

Lightmetricaでは以下のレンダリング手法を提供しています。

用いたいレンダリング手法を設定するには

  renderer:
    type: pt or ptdirect or ltdirect or bdpt   
    params:
      num_threads: -1
      render_time: 5
      #num_samples: 100000000
      max_num_vertices:

の一つ目のtypeの部分を好きな手法に設定するだけです。
簡単ですね。


アセットの種類へ