レイトレーシングのデルタ

某板にカキコした内容。探せなくなりそうなので…

Shadeのレイトレーシングデルタはレイがヒットした形状のバウンディングボックスに対するサイズ比を指定する。

ex)影のレンダリングのとき。

          ↓面
視点───(1)─→┃
  光源←(2)──┨
          ↑シャドウレイ(2)の開始¥n点

視点からある形状にレイ(1)がヒットする。このとき、その部分が影かどうかを判定するために、全ての光源にシャドウレイ(2)を伸ばす。

形状とレイ(1)がぶつかった場所から直接レイを伸ばすと計算誤差で面の裏側からスタートする可能性がある。

視点───(1)─→┃
  光源←(2)──╂○←シャドウレイの開始¥n点
          ↑自分の影になってる

ぶつぶつの影が面の表に出てくるか、大きな平面だと部分的に影が表出することもあるだろう。

そこで、少しだけ面から離れた場所からシャドウレイ探索を開始する。

このとき、離す距離をShadeではレイトレーシングデルタで設定し、そのサイズは特に設定してない時はユーザーガイドにもあるように形状の外寸の数万分の一となっているらしい。

視点───(1)────→┃
  光源←(2)─○………┃
         └デルタ┘

ところが、でかい形状では当然デルタもでかくなる。

もし、デルタの範囲内に別の形状があっても無視されて、影が抜けると言う現象が起きるわけだ。

視点───(1)──────────→┃
  光源←(2)─○……┏━┓…………┃
         │  ┗━┛←この形状は影を落とさない
         └──デルタ────┘

デルタを小さく修正して影抜けを防ごうとすると、別の影抜けや影の表出が発生する可能性もあるので、影抜けや屈折抜けがある場合には形状を小さく刻むのがベストの手段。

ちなみに、LUXORではレイのスポットサイズに対する比になっているので、レンダリングしている部分ごとにデルタが自動調整される。スキップレンダリングを行っている時スポットサイズが調整されないので、影抜けや表出が発生することがある。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

%d人のブロガーが「いいね」をつけました。