夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

レイトレーシングについて歴史を交えまとめる。 その①概要

本日はShader枠(どちらかというと)です。

 本日は論文などを読みながらレイトレーシングについての理解を深めながら書置きの記事になります。

レイトレーシングとは?

 レイトレーシングはコンピュータグラフィックスのレンダリング技術の一つで、非常にリアルな3DCGの描画を行うことができます。

 従来では不可能であった屈折、反射などをシミュレートすることができます。

 例えば次の例では画像から見て宝石の下の方で面による屈折を確認することができます。 また、透過する光もサブサーフェーススキャッチィング(内部透過光)が考慮されており、青い影が落ちています。

 非常に高精細な表現ができる反面非常に計算コストがかかる処理になります。

レイトレーシングアルゴリズム

 レイトレーシングはカメラよりピクセルごとにレイ(光線)を放ちオブジェクトにぶつかった場合さらに光源に対してレイを伸ばし途中で情報を収集、レンダリング時に使用します。

https://developer.nvidia.com/discover/ray-tracing NVIDIAより引用

 現実世界でわれわれの目に入る光をイメージするとわかりやすいですが、太陽から放出されたひかりは水面や金属体、空気など様々な物質で反射、散乱し入ってきます。 

 この逆で、目に入ってきている光を太陽にぶつかるまでに何にぶつかったのか?という情報を取得することでコンピュータの世界で効率的に光の計算を行う手法がレイトレーシングです。

 レイトレーシングアルゴリズムは5つのセクションに分かれています。アルゴリズムについては数学的な式も含め概念理解が必要なため次回以降に行います。

カメラ・レイ・キャスティング

最初に行われる処理で従来のレイ・キャスティングのアルゴリズムと非常に似ており、この工程の目標は、仮想画面内のピクセルi, j(i×j)が与えられたレイ方向を見つけることです。

レイとオブジェクトの交差

レイがオブジェクトと交差するかどうかをテストする方法のアルゴリズムです。

オブジェクト変換の処理

 オブジェクトの変換とは、カメラ座標からオブジェクトに対してレイを飛ばしますが、この時オブジェクトはワールド座標ではなくカメラに対しての座標系に各種行列を使用して座標が変換されています。

 このため、オブジェクトに対して逆行列を適応し、正確な座標を取得してレイを適応し、交差判定を行います。

 

ライティング計算

シーン内のオブジェクトの色を決定するための計算を行います。

レイトレーシングの場合はAmbientシェーディングやDiffuseシェーディングなど様々なモデルが使用されます。

再帰レイトレーシング

再規制レイトレーシングとはレイトレーシングの中で反射、屈折の要素を行うアルゴリズムです。


これらのアルゴリズムが実行されてレイトレーシングとしての処理が行われています。

レイトレーシングの歴史

 レイトレーシングの原理自体は物理学的な手法を元にしているためニュートンなどの時代より知られています。(光の原理)

 コンピュータでレイトレーシングのもととなるアイデアが出たのは1968年のレイキャスティング手法でした。(アーサー・アペル)

このアイデアでは、視点(カメラ位置)からピクセルごとに光線を飛ばし、この光線に対して一番近い物体を検出するというものでした。

 レイキャスティングの目的としては3D空間での物体の可視性を判定するために用いられていました。 具体的には視点から見てどの物体が見えるのか?どの物体が見えないのかを判定する手法です。現在のオクルージョンカリングのために考案されたと呼べます。

 よってレイキャスティング自体は光の屈折や反射などを考慮しない設計でした。(目的が違う)

 アペル氏はIBMに所属しており、レイキャスティングのアイデアはコンピュータ処理においてはじめてレイという手法を用いたと呼ばれています。

 その後1979年Turner Whittedによって視点からピクセルごとにレイを飛ばし物体にぶつかった場合、さらにそこからレイを飛ばし光源を検出するレイトレーシングが生まれました。

 当時はハードウェア的な問題で静止画のみにしか使用できませんでしたが、アルゴリズムの最適化及びハードウェアの進化によって現代ではリアルタイムレイトレーシングが可能となっています。

 なお、ハードウェア的な進化に関連してNVIDIA製のGPUではRT回路を搭載したRTXシリーズが登場するなどレイトレーシング専用の回路を搭載したデバイスが増えています。

www.nvidia.com

 本日は以上です。

 実際に調べる中で論文なども公開されているものが見つけることができたので実際にこの中で記述されている数学的アルゴリズムも含め理解していきたいです。

〇参考

https://inst.eecs.berkeley.edu/~cs294-13/fa09/lectures/scribe-lecture1.pdf

https://www.cs.drexel.edu/~deb39/Classes/Papers/p343-whitted.pdf

developer.nvidia.com