「レイキャスト」の版間の差分

imported>Administrator
imported>Administrator
編集の要約なし
 
(同じ利用者による、間の4版が非表示)
13行目: 13行目:
その両者の欠点を埋めるべく、現在位置から遠ざかるにつれ間隔を少しづつ広げていくという手法もある。
その両者の欠点を埋めるべく、現在位置から遠ざかるにつれ間隔を少しづつ広げていくという手法もある。


処理を軽くすべく、右下から銃の生えているFPSなどの[[ゲーム]]では、銃弾の衝突判定はレイキャスト、キャラの衝突判定は[[AABB]]と使い分けているケースも見受けられる。
[[ファイル:Ray-casting.png|none]]
 
処理を軽くすべく、右下から銃の生えているFPSなどの[[ゲーム]]では、銃弾の衝突判定はレイキャスト、キャラの衝突判定は[[AABB]]と使い分けているケースも見受けられる。また某[[オープンソース]]な[[物理演算エンジン]]の[[ソースコード]]では、まず[[AABB]]で大雑把な判定を行い、次にレイキャストを行うという2段階処理になっているものもあった。


== 2Dを3Dっぽく描画 ==
== 2Dを3Dっぽく描画 ==
レイキャストは重たいというイメージがあるが、1フレーム内で大量の頂点から大量に計算するから重たいのであって、1回の処理自体はそんなに重たいものではない。
レイキャストは重たいというイメージがあるが、1フレーム内で大量の頂点から大量に計算するから重たいのであって、1回の処理自体はそんなに重たいものではない。


そこでレイキャストを使い2Dマップ(2次元配列)から壁の抽出(添字算出)と、レイと壁の衝突角度を算出し、それを3D風に描画すると一世を風靡した[[ゲーム]]「[[Wolfenstein 3D]]」や「[[DOOM]]」になる。現在のようなポリゴンを使った本格的な3Dゲームが大流行するより前の時代にに登場した「2Dを3D風に表現」する手法である。
そこでレイキャストを使い2Dマップ(2次元配列)から壁の抽出(添字算出)と、レイと壁の衝突角度を算出し、それを3D風に描画すると一世を風靡した[[ゲーム]]「[[Wolfenstein 3D]]」や「[[DOOM]]」になる。現在のような[[ポリゴン]]を使った本格的な3Dゲームが大流行するより前の時代にに登場した「2Dを3D風に表現」する手法である。
[[ファイル:レイキャスト2.png|none]]
[[ファイル:レイキャスト2.png|none]]


24行目: 26行目:
上記では2次元配列から3D風を生成する事例であるが、これに1軸を加え3次元配列から3D空間を描画すれば[[ボリュームレンダリング]]となる。
上記では2次元配列から3D風を生成する事例であるが、これに1軸を加え3次元配列から3D空間を描画すれば[[ボリュームレンダリング]]となる。
一世を風靡した「[[マインクラフト]]」である。
一世を風靡した「[[マインクラフト]]」である。
視点となる「点」と、その先にあるスクリーンとなる「面」を決め、その視点からスクリーン上の1点を結ぶ線(これをレイという)のさらに先の延長線上にある[[ボクセル]]の値を次々と抽出する。レイキャスティングで得られた値を用いて、[[最大値]]や[[最小値]]、[[平均値]]、[[中央値]]などといった値に加工し、最終的な映像として[[レンダリング]]することを[[ボリュームレンダリング]]という。
一見すごそうに思えるが、やっていることは前述の2Dの3D風描画にZ軸の概念を加えただけである。
単純に重い。


[[category: 3DCG]]
[[category: 3DCG]]
[[category: 衝突判定]]
[[category: 衝突判定]]
[[category: アルゴリズム]]