2025/05/19 09:01 Raycasting

ロボ子、今日はRaycastingについて話すのじゃ!

Raycastingですか?Wolfenstein 3Dに使われていた技術ですね。

そうそう!昔のPCの性能が低かった時代に、3Dっぽく見せるための画期的な技術だったのじゃ。

記事によると、Raycastingは画面の垂直線ごとに計算を行うため、高速に処理できるとありますね。

その通り!でも、初期のRaycastingエンジンは制限も多かったのじゃ。例えば、Wolfenstein 3Dでは、壁の高さが全部同じだったり、階段やジャンプが表現できなかったり。

なるほど。でも、DoomやDuke Nukem 3Dでは、傾斜した壁や高さの違いも表現できるようになったんですね。

そうじゃ!より高度なRaycastingエンジンが使われたからこそじゃな。テクスチャ付きの床や天井、透明な壁も表現できるようになったのじゃ。

RaycastingとRaytracingの違いは何ですか?

Raycastingは高速な準3D技術で、Raytracingは反射や影をサポートするリアルなレンダリング技術じゃ。簡単に言うと、Raycastingは軽いけど見た目がちょっと粗く、Raytracingは重いけど見た目がめっちゃ綺麗、って感じかの。

なるほど。処理速度が重要だった時代には、Raycastingが最適だったんですね。

その通り!Raycastingの基本的な考え方は、2Dマップ上でレイを飛ばして、壁に当たるまでの距離を計算して、それを元に壁の高さを決めるのじゃ。

DDAアルゴリズムというのも出てきますね。これは何ですか?

DDAは、レイがマップのどの正方形に当たるかを高速に特定するためのアルゴリズムじゃ。これがないと、計算がめっちゃ遅くなるのじゃ。

カメラとFOV(視野角)についても説明がありますね。

FOVは、どれだけ広い範囲が見えるかを表す角度じゃ。方向ベクトルとカメラ平面ベクトルの長さの比率で決まるのじゃ。

方向ベクトルとカメラ平面ベクトルの長さが同じ場合、FOVは90°になるんですね。

そうじゃ!視野角が広いほど、一度に見える範囲が広くなるのじゃ。

プレイヤーが回転すると、カメラも回転する必要があるんですね。

その通り!方向ベクトルと平面ベクトルの両方を回転させる必要があるのじゃ。そうすることで、レイも自動的に回転するのじゃ。

テクスチャRaycasterについても説明がありますね。テクスチャがないRaycasterと何が違うんですか?

テクスチャRaycasterでは、壁にテクスチャを貼り付けることができるのじゃ。これにより、見た目がよりリアルになるのじゃ。

テクスチャの座標はどのように計算するんですか?

まず、壁がヒットした正確な値を計算するのじゃ。次に、その値を使ってテクスチャのx座標を計算するのじゃ。y座標は、垂直ストライプの各ピクセルに対して計算するのじゃ。

パフォーマンスに関する考慮事項についても触れられていますね。

Raycastingは垂直ストライプで動作するけど、メモリ内の画面バッファは水平スキャンラインでレイアウトされるから、キャッシュのメモリ局所性にとっては悪いらしいのじゃ。あと、ソフトウェアブリッティングも遅い原因の一つじゃな。

なるほど。ハードウェアレンダリングと比較すると、大きな解像度では遅くなるんですね。

そういうことじゃ!でも、Raycastingは今でも面白い技術じゃし、学んでおくと役に立つこともあると思うぞ。

そうですね。私もRaycastingについてもっと勉強してみます。

よし!最後に、Raycastingで作られたゲームで遊んでみるのはどうかの?

いいですね!Wolfenstein 3Dをプレイしてみましょう。

そういえば、ロボ子。Raycastingって、昔の技術なのに、今でもたまに「壁ドン」に使われるらしいぞ。

えっ?壁ドンですか?それは一体どういう…

(ニヤリ)壁との距離を測って、ドキドキさせるテクニックらしいのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。