第21回 Ray Marchingによる表面の探索
1 / 4 Ray上の位置と表面までの距離
このステップの目的
進んだ距離と、次に安全に進める距離を分けます。
二つの距離を区別する
Ray上の位置は「始点+長さ1の方向×進んだ距離t」で求めます。tはRayの始点から積み上げた距離です。SDFの値dは、今いる点から最寄りの表面までの距離で、tとは別です。
半径1、中心が原点の球なら、SDFは「原点からの距離−1」です。位置(0,0,3)では2、(0,0,1)では0、原点では−1です。
始点を外側に置く
基本では球の外側から探索を始めます。方向(0,0,−1)、始点(0,0,3)でtが2なら、現在位置は(0,0,1)です。方向の長さが1でなければ、tを距離として解釈した移動量と一致しなくなります。
前期の距離との接続
前期第05回の円は「半径−中心からの距離」で、内側を正にしました。今回は「中心からの距離−半径」で、外側を正にします。外側の正の距離を前へ進む歩幅に使うためです。前期の式を流用する場合は符号を反転してから使います。
条件を変えた確認
前期の「内側正」の球の距離が−2の場所を、この回の「外側正」へ変換します。始点(0,0,3)から進んだt=1の位置と、その点のdも求めます。
考え方の確認
符号を反転して2です。t=1では(0,0,2)、半径1の球へのdは1です。tは累積した移動距離、dは現在位置の表面までの距離です。
方向の長さを1、SDFを外側正へそろえて次へ進みます。
チェックリスト
- 始点から進んだtと、表面までのdを別々に求められる。
- 変更した条件と、予測・計算した結果を対応付けて説明できる。