問題タブ [voxels]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
raycasting - 地形レンダリングアルゴリズムをフリップコードから「フル3D」レンダラーに変換することは可能ですか?
ボクセル技術に基づく地形レンダリングアルゴリズムのこの例(http://www.flipcode.com/voxtut/)を見つけ、それを「フル3D」レンダラーに変換しました。つまり、ハイトマップでは、ペア(x、y)に対して1つのz(up)座標しかなく、「実際の3d」では多くの座標があります。
これを行うには、通常のx、yマップに新しい「z」レイヤーを追加します。たとえば、次のデータセットがあります。
つまり、座標x、y、z(0 <= z<=10または50<=z <= 100)の可視ボクセルがあることを意味します。したがって、このデータセットは、フリップコードで説明されているのと同じように描画します。
これは私のプログラム(かなり遅い)であり、これは最終的なレンダリングです。
このアプローチにはいくつか問題があります。
このアルゴリズムでは、オブジェクトは画面に平行な長いストライプで描画されます(これは、画面の水平座標に1を追加し、カメラと光線上の点の間の距離に一定のddを追加して画面を移動するためです)。描画可能なオブジェクトの間にスペースがある場合、これらの醜いジグザグもあります。これらのストライプの代わりに、他の何か(たとえば、立方体)を使用してオブジェクトを簡単に描画できますか?それとも、より良い品質を作る別の方法がありますか?
光線は画面上に列を描画しないため(代わりに垂直線分を描画します)、画面上のどのピクセルがすでに描画されているか、どのピクセルが描画されていないかを判別することは困難です。それと何か関係がありますか?
このトピックに関する論文や説明されているアルゴリズムはありますか?
voxel - インスタンス化されたオブジェクトを使用したシーンのボクセル化
いくつかの球、立方体、および長方形の壁を備えた、床としての平面を持つ単純なシーンを directx11 で作成しました。読み込まれるオブジェクトは、平面、立方体、球の 3 つだけです。ただし、立方体と球体は、スケーリング、位置、および回転が異なる複数回インスタンス化されています。これらのオブジェクトのうち 2 つは動的です。
スケールと回転が異なるオブジェクト インスタンスを考慮して、このシーン全体 (100x100x20 単位) を 0.2 単位のボクセルにボクセル化したいと思います。
ボクセル化に関するいくつかの記事を読み、「Direct3D 11 を使用した実用的なバイナリ サーフェスおよびソリッド ボクセル化」の GPU Pro 3 のソース コードを入手しました。しかし、これらの記事はすべて、単一のオブジェクトのボクセル化を示しています - それらの三角形を取り、それらをグリッドに分割します.
これらのメソッドを拡張して、複数のオブジェクト インスタンスを持つシーン全体を考慮するにはどうすればよいでしょうか?
考えられる唯一のことは、シーン全体をトップダウンで octree 分割する必要があるということです。しかし、動的なシーンの場合、これはコストが高すぎるでしょうか?
私のシーンでは、読み込まれたモデルごとにバッファを使用しています。したがって、Compute Shader でボクセル化する場合、3 つのバッファすべてを 1 つのバッファにコピーする必要がありますか? モデル インスタンスはどのように説明すればよいですか?
ありがとうございました。
opengl - ボクセルにアクセスする複数のスレッドの一意のバッファー インデックスを取得する
「リアルタイム グローバル イルミネーションのための Octree ベースのスパース ボクセル化」の一部を実装しようとしています。
基本的にボクセル化だけで、すでに完了しています。
そして、「ボクセル フラグメント リスト」構造は、基本的に、ボクセルの位置と属性の事前に割り当てられたいくつかのバッファーです。
アトミックカウンターとアトミックコンプスワップまたはアトミック追加のいずれかを使用して位置バッファーを作成するのは非常に簡単で、1つのスレッドによってのみ書き込まれるようにします
しかし、複数のスレッドが同じボクセル位置に書き込みを行っている場合、すべてのスレッドが適切なインデックスを取得できるようにするにはどうすればよいでしょうか? 上記のように、正しいインデックスは 1 つのスレッドに対してのみ有効です。
以下のようなもの
私はこれに対してさまざまなアプローチを試みました。紙の唯一のヒントは
(ボクセル フラグメント) リストを管理するには、次に使用可能なエントリのインデックス (リスト内のボクセル フラグメントの数のカウンターでもある) を、別のバッファー オブジェクト内の単一の 32 ビット値として格納します。
これは、アトミック カウンターのバッファー オブジェクトを記述しているように思えます。物事をシンプルに保つために (今のところ)、移動平均 (論文で説明されているように) を計算するのではなく、単純に色を合計し、レンダリング時にアクセス数で割っています。
3d - 3D 凸包内のボクセル
値のボクセルの立方行列があります1
(残りは です0
)。凸包の内側のボクセルがすべて value である、同じサイズの行列が必要です1
。同様の例を見て、それを適応させました。これを次のようにすると、うまくいきますか?
% im3D は 0 と 1 の 3 次行列です
2 番目の質問: 凸包内のボクセルはすべて接続されているはずですよね? 次に、次の関数が 2 つの接続されたオブジェクトを提供するのはなぜですか...ユークリッドまたはマンハッタンのような/八角形のいずれかですか?
javascript - ボクセルで球を生成する
私はvoxeljsで遊んでいますが、3Dプログラミングは初めてですが、このコードは「球体世界」を生成するとドキュメントに記載されています。
これは実際にどのように球を生成していますか?私の単純な理解から、それは基本的に3Dの世界の各「チャンク」を「ループ」していると思いますか?これについてのさらなる説明や良いチュートリアルへのポイントは大きな助けになるでしょう!
c++ - ボクセル データ構造のライブラリはどれですか?
私は科学的な文脈で大きなボクセル グリッドを使用して C++ で作業しており、どのライブラリを使用するかを決定しようとしています。ボクセル グリッドの一部のみが値を保持しますが、レイトレーシングによって決定されるボクセル (構造体など) ごとに複数になる場合があります。私は何もレンダリングしようとはしていませんが、ターゲット領域全体を通過する可能性のあるレイの数を決定する必要があるため、非常に多くのレイボックス計算を計算する必要があり、できれば非常に高速にする必要があります...
これまでのところ、私は見つけました
- OpenVDB http://www.openvdb.org/
- Field3d http://sites.google.com/site/field3d/
後者は、よりシンプルで使いやすいように見えるため、もう少し魅力的です。
私の質問は、レンダリング/視覚化を目的としていないタスクで使用する場合、どちらがより適しているでしょうか? 多くのレイボックス交差を計算する場合 (視点に依存するカリングは不可能)、どちらが高速/優れていますか? 提案、誰か?
いずれにせよ、私は既存の C++ ライブラリを使用し、kdTree/Octree などを自分で作成したくありません。車輪を新たに発明する時間はありません。
c# - 3 次元グリッドを表す 1D 配列から値の行をコピーします
したがって、ゲームの世界を表す数値の 3D グリッドを表す 1D 配列があり、次のように個々のエントリ (X、Y、Z) にアクセスします。
ループせずに行全体 (たとえば、(1,1) のすべての Z 値) をコピーする方法はありますか (すべてのエントリを既にループしています。空の行をチェックしてパフォーマンスを節約したい (すべての0s) 処理をスキップします)? 可能であれば、ギザギザの配列を使用したくありません。
javascript - ボクセル世界での「カリング」
私の世界はボクセルでいっぱいです。私の世界は 320*320*96 ボクセルだとしましょう。私の考えは、新しい「チャンク」を GPU に転送する際にパフォーマンスが失われないように、その世界全体をビデオカードの RAM にロードすることです。voxelworld を表示するために生成される顔の量は、最新のグラフィック カードのメモリに簡単に収まるはずです。
しかし、私が今直面している問題は、その世界の一部を表示しない方法です。この世界のビューを (たとえば) 128*128*96 に制限し、世界またはカメラを移動して別の部分を表示したいと考えています。
私の問題を実証するために、「表示可能な」領域が白い地面で構成される(単純な)シーンを見てください。ビューを白い部分だけに制限するための適切な WebGL/three.js 関数を探しています。
opengl - ある種のエッジ照明?
立方体を照らして遊んでいます。何が欲しいのかまだよくわからないので、これを捨てています。これは私が持っているものです...
...しかし、鋭いエッジは好きではありません。明らかに、照明を削除すると、エッジが見えなくなります....
...立方体の面を識別できる必要があるため、これは良くありません。
私が探しているのは、顔の間をスムーズに移行し、あまりにも荒々しく見えず、オブジェクトを立方体として識別できる照明を探しているのだと思います。現時点では、エッジのテッセレーションは実際にはオプションではありません。似たようなことをした人はいますか?
更新: 残念ながら、@Jherico へのコメントの返信が長すぎたため、代わりにここに更新を追加しました。
これを始めたばかりなので、現時点ではシェーダーを実際に持っていません。私はフォトショップで遊んで、エッジのぼかしがどのように見えるかを確認したり、薄いハイライトを追加して何とかそれを軽減したりしていました. 私が本当に探しているのは、過酷なエッジの外観から離れることだと思います.
私は、映画業界からのトリックがあるかどうか、または高品質のレンダリングがエッジを柔らかくするためにどのようなテクニックを使用しているかを調査していました. または、リム照明のようなものを使用して、鋭角から焦点を外すことを検討してください。テッセレーションは非常に役立つと思いますが、理想的には、低スペックのハードウェアで使用できる安価な手法が必要です。