6

スパースオクツリーを格納およびアクセスするための高速で効率的な方法を提案できる人はいますか?

HLSL で簡単に実装できるものが望ましいです。(レイキャスティング/ボクセル アプリを使用しています)

この例では、ツリーを事前に計算できるので、サイズと検索時間に主に関心があります。

アップデート

これを行おうとしている人にとって、より効率的な解決策は、Z 次曲線/モートン ツリーで生成された線形 octree としてノードを格納することです。そうすることで、内部ノードの格納が不要になりますが、線形ツリー配列と、個々のボクセルに関する情報を含む 2 番目の「データ テクスチャ」との相互参照が必要になる場合があります。

4

2 に答える 2

2

私は HLSL の経験があまりないので、これがあなたのニーズを満たすかどうかはわかりません。私の考えは次のとおりです。ここであなたのニーズに合っていないことがあれば教えてください - 話し合いたいので、自分で何かを学ぶことができるかもしれません.

  1. octree 内のすべてのノードは vector3 として存在できます。ここで、(x,y,z) コンポーネントはノードの中心点を表します。w コンポーネントは、フラグ フィールドとして使用できます。を。w-flags フィールドは、どのオクタント子ノードが現在のノードに続くかを示すことができます。これには、8 ビットの値が必要です。
  2. octree に格納されている各エンティティは、バウンディング ボックスとして格納できます。ここで、r、g、b はバウンディング ボックスの次元であり、w は何にでも使用できます。
  3. オブジェクト リストが続くことを示す特別なベクトルを定義します。たとえば、(w + z) が何らかの魔法の値である場合。一部の func(x, y) は、たとえば、後続のオブジェクトの数にすることができます。または、何でも動作します。を。各ノードには、この特別なベクトルが続く可能性があり、ノードにオブジェクトが格納されていることを示します。次の X ベクトルはすべて、オブジェクト識別子またはそのようなものです。b. または、メモリ内オブジェクト リストを指定するだけのノードを 1 つ持つこともできます。繰り返しますが、ここで何が必要なのか、またはオブジェクトへのアクセス方法に関する制約がわかりません。

まず、octree を構築し、オブジェクトを詰め込みます。次に、octree をウォークし、ベクトルをメモリ バッファーに出力します。

512x512 のテクスチャは、それぞれが 8 つのオブジェクトを含む、5 レベルの深さ (32,768 ノード) の完全にパックされた octree を保持できると考えています。または、それぞれ 64 個のオブジェクトを持つ完全にパックされた 4 レベルのオクツリー。

于 2011-05-24T16:37:51.297 に答える