5

私が集めたものから、彼はスパース ボクセル オクトリーとレイキャスティングを使用しました。彼が opengl や direct3d を使用したようには見えません。ゲームの Voxelstein を見ると、単なる 2D 正方形の集まりではなく、ミニチュア キューブが実際に描画されているように見えます。それは私を不意を突かれたので、openglまたはdirect3dなしで彼がどのようにそれを行っているのかわかりません。

ソースコードを読んでみましたが、何が起こっているのか理解するのは困難でした。私は似たようなものを実装したいと思いますし、アルゴリズムにそうさせたいと思っています。

彼がレンダリング、カリング、オクルージョン、ライティングをどのように行ったかに興味があります。どんな助けでも大歓迎です。

4

2 に答える 2

7

このアルゴリズムは、レイ トレーシングよりもレイ キャスティングに近いものです。ここで Ken Silverman 自身から説明を得ることができます。

https://web.archive.org/web/20120321063223/http://www.jonof.id.au/forum/index.php?topic=30.0

要するに、グリッド上で、ボクセルの各 x、y スタックに対してサーフェス ボクセルの rle リストを格納します (z が「上」を意味する場合)。自由度が 4 であると仮定すると、画面上の垂直線ごとにレイキャストし、各立方体が描画されるときに切り取られる可視スパンのリストを維持します。自由度が 6 の場合は、同様のことを行いますが、スクリーン空間で傾いているスキャンラインを使用します。

于 2010-10-27T12:25:38.173 に答える
5

アルゴリズム自体は見ていませんが、スクリーンショットに基づいて次のことがわかります。

2D 正方形の集まりではなく、ミニチュア キューブが実際に描画されているようです。

そう、それがレイトレーシングの仕組みです。2 次元の正方形を描画するのではなく、光線をトレースします。多数の小型立方体に対して光線を追跡すると、多数の小型立方体が表示されます。シーンは多数のミニチュア キューブ (ボクセル) で表されるため、近くで見るとそれらが見えます。実際にデータを何らかの方法で平滑化して (平滑化されたエネルギー関数に対してトレース)、より滑らかに見えるようにするとよいでしょう。

彼がどのようにレンダリングを行ったかに興味があります

レイトレーシングによる

カリング

特にボクセル シーンでは、レイ トレーシング時にカリングする必要はありません。光線に沿って移動すると、光線が交差するボクセルのみがチェックされます。

閉塞

ボクセル間のオクルージョンは、レイ トレーシングによって自然に処理されます。最も近い最初のボクセル ヒットが返されます。スプライトを描画する場合は、レイ トレーサーによって生成された Z バッファーを使用できます。

と照明

近くのセルを調べて、占有されているセルと占有されていないセルを調べることで、ローカル法線を近似することができます。次に、照明計算を実行します。あるいは、各ボクセルは、その色やその他のマテリアル プロパティとともに法線を保存できます。

于 2010-09-25T15:42:16.167 に答える