~夏休み緊急特別企画~

光線追跡法の欺瞞


これはレイトレ合宿2アドベントカレンダー第10週目の記事である。

まえおき

最近はコンピュータの高性能化と物理ベースレンダリングの発達によって非常にリアルな映像をつくられるようになった。
そのときによく使われている技術が光線追跡法(Raytracing, 通称レイトレ)である。
だが, レイトレには欺瞞が隠されているようである。
物理ベースと言われているが, 本当にレイトレは物理的に正しいのだろうか?

物が見えるしくみ

光が目に入り, 光が網膜にある細胞を刺激し, その信号が神経を通って脳に伝わり処理されることによって人間は物を見ている。
目に入る光は, 光源から出た光が直接目に入る場合もあれば, ものにあたって反射して入る場合もある。
光源から出発した光は反射や屈折を何度も繰り返してから目に入る場合もある。
目は偶然目に入ってきた光だけを受け取っているが, ある程度明るい場所では無数の光が様々な方向に飛び交っているので, 周囲の状態を詳しく知覚できる。

レイトレのしくみ

シーン内にカメラ, オブジェクト, 光源があるとする。
レイトレーシング法では、カメラから各ピクセルに対応するレイを飛ばしレイがオブジェクトと交差するか計算する。
レイがオブジェクトと交差しない場合はピクセルに背景の色を設定する。
オブジェクトと交差した場合は, 交差した点でのオブジェクトの状態と光源を元にカメラに入射する色を計算(シェーディング)してピクセルに設定する。
このような計算を全ピクセルに対して繰り返す。
レイトレの発展した手法にはモンテカルロレイトレーシング法やフォトンマッピング法などがある。

ここが欺瞞だ

今説明したように人間の目は入ってきた光を受け取るだけだが, レイトレではカメラからレイを出しているのである。
現実のカメラはレンズに入射した光がフィルムやイメージセンサーに当たって映像が記録される。
しかしフィルムやセンサーが光か何かを出して何が見えているのか調べることはない。
ここが現実の世界とレイトレの大きな違いである。

なぜこのような欺瞞がまかり通っているのか?

正確に光を物理シミュレーションするには, 光源から放たれた無数の光の軌跡を計算する必要がある。
そしてカメラの中に到達する光はそのうちのごく僅かである。
なので正確な光の物理シミュレーションには莫大な量の計算が必要になる。
また, CG屋さんの中には見た目さえそれっぽければ計算の仕方なんでどうでもいいと思っている人がたくさんいる。
我々は常に最新の科学の知識を身につけ, 世の中に欺瞞が少しでも生じないように努力しつづけなければならないのだ。

どうやってこの欺瞞を打破するのか?

カメラからはレイなどは一切ださず, 光源からの光だけを正確に計算しなければならない。
だが, それには莫大な計算量が必要だ。
そこで, 欺瞞にならない程度の簡略化を行う。
直接光(光源から直接目に入る光)のみを計算する。
光の反射や屈折を計算しなくていいのか? 欺瞞なのはお前のほうだ! とあなたは思うかもしれない。
宇宙に目を向けよ。
宇宙は非常にスカスカであり, 恒星から放たれた光の殆どは何かにぶつかったりせずに宇宙空間を直進し続けるのである。
具体的に説明しよう。
参考URL
太陽の直径が139万kmに対し, 地球と太陽の間の距離は1億4959万kmもある。
地球と太陽の間の距離を1とすると, 太陽の直径は0.009, 地球の直径は0.000085になる。
また 宇宙の成分 のうち原子はたったの4.9%しかない。
つまり, 宇宙全体から見れば光のが何かにあたって反射や屈折が起こる事はめったにないのである。
なので直接光だけの計算でも宇宙空間のほとんどの場所をレンダリングすることは可能なのである。

実装せよ

これから宇宙空間の99%で通用するレンダラを開発する予定をたてようと思う。
レンダラ合宿にはなんとかレンダリング結果をお見せすることができるかもしない。

Top