本日はグラフィック枠です。
現在レイトレーシングにいてアルゴリズム面を中心に学んでいます、
1979年に登場したレイトレーシングは現実の物理学的な光の動きの逆のプロセスをコンピュータ内で計算することでコンピュータグラフィックスの処理として反射、屈折、散乱といったレンダリング処理をリアルに計算できるようになりました。
レイトレーシング自体はピクセルごとにレイを放ち、オブジェクトとの交差点を判定し、さらにその座標からレイを飛ばし、最終的に光源までそれを行い、各衝突の過程において、光や物体の挙動についての結果を用いてレンダリングを行っています。
現時点まででカメラ座標の定義、レイとオブジェクトの交差についてみていきました。
レイとオブジェクトの交差ではオブジェクトの形状によって異なるアルゴリズムが用いられています。
基本的な考え方としてはレイのベクトルが形状に対して領域ないに存在するか?を判定しています。
今回もひきつづき以下の文献をもとに理解を進めていきます。今回はセクション2.5.2を見ていきます。
https://inst.eecs.berkeley.edu/~cs294-13/fa09/lectures/scribe-lecture1.pdf
〇再帰的レイトレーシングのアクセラレート構造体
レイトレーシングにおいて数千ものオブジェクトが存在するシーンなど計算量が膨大になります。
このため少しでも処理を効率化してアクセラレート(加速)する必要があります。
このためアクセラレート構造はオブジェクトとレイの交差を見つけるためにチェック数ロブジェクトの数を制御するために使用されます。
数千ものオブジェクトがあるシーンからのレイが1つのオブジェクトと交差する場合、例から遠く離れたオブジェクトを何とかしてスマートに処理の対象外にする必要があります。
バウンディングボリューム
バウンディングボリュームとはその名の通り、バウンディングの領域を意味します。
レイの交差判定などに使用されます。
バウンディングボリュームの階層構造を構築し、バウンディングボリュームがヒットした場合はその子を再帰的にチェックを行います。

左側の図は7つのコードを持つツリー構造を示しています。これはバウンディングボリューム階層になります。
ツリーの各ノードはバウンディングボリュームを意味しています。
1はシーン全体を包むバウンディングボリュームを見敷いており、子ノードとして2,3,または直接ノードCを持っています。
これは世界空間を意味しています。
Blenderなどでイメージするとワールドそしてその子ノードがコレクション、リーフノードが実際のオブジェクトというような構造を意味しています。
また右の図は2D空間の分割を意味します。
3Dオブジェクトは最終的に2Dとしてレンダリングされます。
これはその際の2D空間におけるバウンディングボリュームの配置を意味しています。
緑色の点線の大きなボックス(1)がシーン全体のバウンディングボックスです。
青い点線の2と3のボックスは内部ノードのバウンディングボックス、
黄色の形状(A,B,C,D,E,F)はリーフノードを意味します。
UnityやBlenderなどのアプリを触ったことがある人にとってはとても理解しやすい図となっています。
本日は以上です。