本日はグラフィック枠です。
先日まででレイトレーシングについて歴史を交え文献を読みときました。今回はまとめを行います。
https://inst.eecs.berkeley.edu/~cs294-13/fa09/lectures/scribe-lecture1.pdf
〇レイトレーシングとは?
レイトレーシングはコンピュータグラフィックスのレンダリング技術の一つで、非常にリアルな3DCGの描画を行うことができます。
従来では不可能であった屈折、反射などをシミュレートすることができます。
例えば次の例では画像から見て宝石の下の方で面による屈折を確認することができます。 また、透過する光もサブサーフェーススキャッチィング(内部透過光)が考慮されており、青い影が落ちています。

非常に高精細な表現ができる反面非常に計算コストがかかる処理になります。
レイトレーシングはカメラよりピクセルごとにレイ(光線)を放ちオブジェクトにぶつかった場合さらに光源に対してレイを伸ばし途中で情報を収集、レンダリング時に使用します。

現実世界でわれわれの目に入る光をイメージするとわかりやすいですが、太陽から放出されたひかりは水面や金属体、空気など様々な物質で反射、散乱し入ってきます。
この逆で、目に入ってきている光を太陽にぶつかるまでに何にぶつかったのか?という情報を取得することでコンピュータの世界で効率的に光の計算を行う手法がレイトレーシングです。
今回はこのレイトレーシングの計算アルゴリズムについて触れている以下の文献を読み解きながらレイトレーシングのアプローチについて学びました。
〇レイトレーシングのアルゴリズム
レイトレーシングのアルゴリズムをまとめると次のようになります。
①カメラ位置の定義
レイトレーシングではカメラのピクセルごとにレイを生成し、オブジェクトとの衝突判定を検知します。 このためにまずワールド座標に対してのカメラ位置の定義とスクリーンスペースの定義を行う必要があります。
②レイの生成
カメラの座標が定義されたらピクセルごとにレイを生成します。このレイはオブジェクトに対して向かっていきます。
③オブジェクトとの衝突検知
レイがオブジェクトとの交差を行う場合を検知します。 これにはパラメトリック方程式を使用します。 オブジェクトの領域で判定を行うため領域を数式化する必要がありますが、この形状定義によって判定式が変わります。 これはコライダーの考え方に似ています。
④ライティングの計算
オブジェクトとの交差判定を行った次には最終的なレイトレーシングの目的であるライティングの計算を行います。ライティングの計算とは影の計算に一致します。
オブジェクトとレイが交差した場合、交差点から光源へのレイを作成し、さらになにかと交差するかを判定。交差がある場合、光源から最初に交差した場所までに何かが存在し、最初に交差した場所は光源から見た場合影になっていることがわかります。
影の計算は次のようになります。
この時に再帰的レイトレーシングが行われます。再帰的レイトレーシングとは屈折レイ、反射レイの計算を行うための計算が行われます。
これはレイトレーシングの定義でどのくらい計算するかを設定でき、これがレイトレーシングの計算負荷に相当します。
ざっくりまとめると以上のプロセスがレイトレーシングの計算アルゴリズムになります。
レイトレーシングについては基本的な考え方とは別に最適化の考え方のほうが重要なため、こちらもいずれ調査してみたいです。
本日は以上です。