2011-06-26 6 views
2

私は現在レイキャスティングとボクセルを探していますが、これは素晴らしい組み合わせです。 Sebastian ScholzのVoxelrendererはこれをうまく実装していますが、OpenGLも使用しています。私は彼の数式がどのように働いているのだろうかと思います。レイキャスティングとボクセルでOpenGLをどのように使用できますか?レイキャスティングのアイデアは、レイがすべてのピクセル(またはライン、すなわちDoom)でキャストされ、結果を描画するのではないのですか?レイキャスティングボクセルとOpenGL

答えて

5

上記レイキャスターは、ボクセルレンダラーであり、すなわち、3Dテクスチャーに格納された不透明度のようなボリュームデータを視覚化する方法です。 Doomのレイキャスティングアルゴリズムには別の意図があります。画面上のすべてのピクセルについて、マップの最初の平面を見つけてそこの色を描画します。最新のGPUのラスタライズ機能は、このようなレイキャスターの使用を廃止しました。

リアルタイム視覚化ボリュメトリックデータは、医療用および測地線画像システムで通常見られる特別なハードウェアによって行われるタスクです。基本的には、容積RGBAデータを保持する巨大なRAM(数十GB)です。次に、スクリーン上のピクセルごとに、光線はボリュームを通って投射され、RGBAデータはその光線上に統合される。 GPUのVoxelrendererは、フラグメントシェーダーによって同じことを行います。擬似コード:

vec4f prev_color; 
for(i=0; i<STEPS; i++) { 
    p = ray_direction * i*STEP_DELTA; 
    voxel = texture3D(volumedata, p); 
    prev_color = combine(voxel, prev_color); 
} 
final_color = finalize(prev_color); 

finalizecombineは、データと何を視覚化したいの種類に依存します。たとえば、密度(X線画像のような)を積分する場合、combineは合計演算であり、正規化を終了します。クラウドを視覚化する場合は、ボクセル間のアルファブレンドを行います。

+0

結論として、レイキャスティングはGPUのフラグメントシェーダで行われます。 – RobotRock

+0

はい、これは賢明なやり方でこれを行うことができる唯一の場所です。まあ、ジオメトリ/頂点シェーダの組み合わせでも行うことができますが、それは面倒です。 – datenwolf

0

ボクセル空間でのレイキャスティングはピクセルを使用しないため、非効率的です。

すでに空白と空白が何であるか、どのボクセルが空白かを示す配列があります。

したがって、高速バージョンでは、ボクセルが完全なボクセルに達するまで、ラインの方向にあるすべてのボクセルのエンプティをチェックするラインをトレースしています。

これは、メモリから数百の読み出し動作を必要とし、読み出し動作ごとに光線ベクトルを2-3回乗算することになります。

ボクセルの10億個のメモリ位置を読み取るには約1秒かかります。したがって、数百は非常に高速で常にフレーム内にあります。

レイキャスティングでは、しばしば、数式が星型である空間の小数点以下の桁を検出するためにオプティマイゼーションを使用します。メッシュの頂点は境界ボックスに基づいており、メッシュで、ボクセルでは整数配列の行が漸進的にチェックされます。あなたは非空白を見つける。

+0

なぜこれが検索語ボクセルの最初の質問として表示されたのですか?私はそれが最近だったと思った! –

+0

これはボクセルの最新の質問ですか? 2011年?私はそれが上にあった新しいタブを押しました。 –

関連する問題