タグ付けされた質問 「voxels」

VOlumetric piXEL(ボリュームピクチャエレメント)。ボリュームデータを値の通常のグリッドとして保存する方法。このタグは、ボクセルに関する質問で使用する必要があります。

5
多数のキューブを操作します。パフォーマンスを改善しますか?
編集:質問を要約すると、ボクセルベースの世界(Minecraftスタイル(共産主義のダックに感謝))があり、それはパフォーマンスが悪いことに苦しんでいます。私はその情報源には前向きではありませんが、それを取り除く方法についての可能なアドバイスが欲しいです。 私は世界が大量のキューブで構成されているプロジェクトに取り組んでいます(私はあなたに数字を与えますが、それはユーザー定義の世界です)。私のテスト1は、約(48 x 32 x 48)ブロックです。 基本的に、これらのブロックはそれ自体では何もしません。彼らはただそこに座っています プレーヤーとのやり取りに関しては、使用が開始されます。 ユーザーがマウスで操作するキューブ(マウスオーバー、クリックなど)を確認する必要があります。また、プレーヤーの移動に伴う衝突の検出も必要です。 今では、最初は膨大な量の遅延があり、すべてのブロックをループしていました。 すべてのブロックをループし、どのブロックがキャラクターの特定の範囲内にあるかを見つけて、衝突検出などのためにそれらのブロックのみをループすることで、その遅れを減らすことができました。 しかし、私はまだ憂鬱な2fpsに向かっています。 このラグを減らす方法について他にアイデアはありますか? ところで、私はXNA(C#)を使用しています。はい、それは3Dです。
12 xna  3d  frame-rate  voxels 

3
ボクセルキューブランドスケープ用のメッシュの最適化
Unity 3DでMinecraftish / LEGOワールドランドスケープ(キューブでプロシージャルに生成されたボクセルランドスケープ)を作成してみて、これらのランドスケープ用に作成されたメッシュが大量のメモリを消費することがわかりました。メッシュは現在、立方体の可視側面の頂点のみで構成されています。複雑な地形のメモリ使用量は、600〜700メガグラムかかる場合があります。 これらのメッシュは最適化できますが、これを行うための適切なアルゴリズムを見つけるのに苦労しています。 アルゴリズムは、異なる地形タイプのブロックを「マージ」したくないことを考慮に入れる必要があります。本当に簡単なスタートは、1つの軸に沿ってすべてのブロックを処理し、他の2つの軸に対して余分なスイープを行うことだと思います。 メッシュの形状を維持する必要があります。これは、空の空間または固体の空間が変更されるポイントへの頂点のマージではありません。その理由は、メッシュの周りをナビゲートする必要がある生き物などがあるかもしれないからです。そのため、非常に詳細度の低い、歪んだメッシュを作成することはできません。 これについての考え/提案/ヒントはありますか?

2
ゲームでの構造解析はどのように行われますか(例:橋梁建設、掘削または死滅、3D)?
すべてのコンポーネントがシステム全体に影響を与えるため、典型的なインタラクティブトラスシステムはかなりの計算が必要になると私は理解しています。シミュレーションの精度を犠牲にして、任意の反復回数で任意に停止できると思いますが、それがこれらのゲームで使用されているアプローチかどうかはわかりません(ブリッジビルディングゲームはトラスシステムの例です)。一方、DigやDieのようなゲームは、非常に複雑な構造システムを備えています。これは、トルク(私は信じています)と圧縮も考慮に入れており、非常に高速で、非常に広範なシステムで動作します。基本的な計算は似ていると思いますが、そうでない場合は両方のアプローチに興味があります。 これらがどのように作られるか知っていますか?それらには任意の制限がありますか、それとも完全に異なるアルゴリズムを使用していますか?また、皆さんが思いついたものはすべて3Dシステムに適用できると思いますが、そうでない場合、または明らかでない場合は、少なくとも2Dと3Dの両方に興味があるので、3Dにどのように使用できるかについて手がかりを教えてください。ゲーム。 ここでは感謝するつもりはありませんが、少なくとも前もってお礼を言うのは不公平だと思います。この段落が削除されないことを願っています。 編集:私が推測した場合、私はDigまたはDieが各ブロックのベクトルを格納し、シミュレーションの追加の精度がシステムの限界に対して意味がない点まで反復アルゴリズムを実行すると言います(たとえば、システムは大きすぎて、とにかく崩壊しない)ので、(アプリケーションに基づいているため)反復の半任意数によって制限されます。しかし、私は間違っている可能性があります。

2
自然に見えるボクセルを作る方法
ボクセルゲームを開発していますが、間違ったテクニックを使用しているようです。私は現在、ブロックを作成するためにフラットタイルを使用しています。 自然に地形が見えるボクセルゲームを見ました。つまり、非ブロック性です。ゲームは1立方メートルあたり4 * 4 * 4のブロックがあり、土、砂、石などのブロックは丸いエッジを持ち、一種の溶け合いを持っています(通常のゲームのように)。こちらがスクリーンショットです これはどのように達成されますか?

2
Perlinワームによる洞窟生成
私は現在、3Dシンプレックスノイズでボクセル地形のようなMinecraftを生成しようとしています。また、洞窟を実装したいと考えています。 このスレッドでPerlin Wormsのメソッドを見つけました。これは本当に素晴らしい結果を生成します。ただし、チャンクごとにそれを生成する方法についての手がかりはありません。これは可能ですか、それともチャンクごとに洞窟のような類似のワームを生成する代替策はありますか? 編集:これは私が解決する方法がわからない問題です。 Edit2:これは、2Dリッジマルチフラクタルノイズとシンプレックスノイズハイトマップを組み合わせた結果です。まだ少し調整が必要ですが、これはほとんど私が望んでいた結果です。Byte56に感謝します。

3
2つのボクセルが相互接続されているかどうかを確認するアルゴリズム
私は次の問題に適したアルゴリズムを探しています:ボクセルの3Dグリッド(空または塗りつぶされている可能性があります)を前提として、隣接していない2つのボクセルを選択した場合、それらが互いに接続されているかどうかを知りたい他のボクセル。 たとえば(2Dで状況を示すため)、#は塗りつぶされた正方形です。 1 2 3 a # # # b # # c # # # 私がa3とc3を選択した場合、それらが接続されているかどうかをできるだけ早く判別したいと思います。塗りつぶされたピクセルを通るa3とc3の間にパスがある場合。(実際の状況は、もちろん3Dボクセルグリッド内にあります。) フラッドフィルアルゴリズムとパスファインディングアルゴリズムを見てきましたが、どちらを選択するかわかりません。どちらも不必要な作業を行います。フラッドフィルはすべてのボクセルを埋めようとしますが、これは必要ありません。パス検索アルゴリズムは通常、最短パスの検索に関係していますが、これも必要ではありません。道があるかどうかを知るだけです。 どのアルゴリズムを使用する必要がありますか? 編集:コメントに基づいて、以下を追加する必要があると思います:ボクセルの内容は事前に不明であり、ボクセルの削除(空にする)によってボクセルのグループが壊れるかどうかを検出するアルゴリズムも必要です2つ以上の小さなグループに分けます。

2
Signed Distance Fieldのレイマーチングは、動的な世界にどのように実装されますか?
符号付き距離フィールドレイマーチングの基本を理解していると思います。一連の距離フィールド(http://iquilezles.org/www/articles/distfunctions/distfunctions.htmなど)を使用してシーンをモデル化し、次に、ピクセルを投影するたびに、光線の最初から開始します、その点で最も近いオブジェクトまでの距離を見つけ、何かにぶつかるまでその点を最も近い距離だけ増分します。簡単なレンダラーを何とかして実現しました。そこで、テクニックのほとんどの説明は終わりです。 これにより、SDFレイマーチングを実際のシナリオでどのように使用できるかについて、いくつか質問があります。 質問1:実際のゲームでは、シーンは通常複雑で、CPUにロードされ、多くの動的オブジェクトがあります。基本的なオクルージョンカリング(オクトリーなど)を理解しており、ポリゴンレンダリングを使用して、レンダリングするビューフラストラム内のアイテムの(CPU上に)リストを作成します。 それで、CPUによって制御され、画面上を動く多くのキャラクターと動的オブジェクトを含む非常に複雑なシーンがあると想像してください。レンダリングするオブジェクトをフレームごとにGPUにストリーミングするにはどうすればよいですか?すべての例には、GLSLでハードコードされたシーンがあります。誰かが動的にシェーダーにストリーミングされるレベルの例を共有できますか? 質問2:オブジェクトはどのようにして複数の色を持つことができますか?距離関数は距離を返すだけですが、実装は通常どのように色を返しますか?(たとえば、青い立方体ではなく赤い球体をヒットします。)これがCPU実装である場合、レイマーチャーを終了するヒットであるときに、距離関数内でグローバル関数を呼び出し、ヒットオブジェクトのオブジェクトも渡すことができます。テクスチャ/色。しかし、GLSLでアイテムの色またはテクスチャをどのように返しますか? ありがとうございました。

2
3Dボクセルベースの部屋が効率的に密閉されているかどうかを判断する方法
ボクセルベースの3Dルームで大きな部屋が密閉されているかどうかを効率的に判断する際に、いくつか問題がありました。私は助けを求めずに問題を解決するために全力を尽くしましたが、あきらめるのに十分なほど試みなかったので、助けを求めています。 明確にするために、部屋に穴が開いていないことを密封しています。部屋が密閉されているかどうかを確認する酸素シーラーと、酸素入力レベルに応じて密閉する酸素シーラーがあります。 今、これが私がやっている方法です: シーラータイルの上のブロックから始まり(ベントはシーラーの上面にあります)、6つの隣接する方向すべてに再帰的にループします 隣接するタイルが完全な非真空タイルである場合は、ループを続行します 隣接するタイルがいっぱいではない場合、またはバキュームタイルである場合、隣接するブロックが再帰的に満たされているかどうかを確認します。 タイルがチェックされるたびに、カウンターをデクリメントします カウントが0に達した場合、最後のブロックがバキュームタイルに隣接している場合は、領域がシールされていないことを返します カウントがゼロになり、最後のブロックがバキュームタイルではない場合、またはカウンターがゼロになる前に再帰ループが終了する(バキュームタイルが残っていない)場合、領域はシールされます。 エリアがシールされていない場合は、いくつかの変更を加えてループを再度実行します。 真空タイルの代わりに「通気性のある」タイルの隣接ブロックをチェックする 減少するカウンターを使用する代わりに、隣接する「通気性のある」タイルが見つからなくなるまで続けます。 ループが終了したら、チェックされた各ブロックをバキュームタイルに設定します。 これが私が使用しているコードです:http : //pastebin.com/NimyKncC 問題: 私は3秒ごとにこのチェックを実行しています。シーラーは数百のブロックをループする必要がある場合があり、酸素シーラーが多い大きな世界では、数秒ごとにこれらの複数の再帰ループがCPUで非常に困難になる場合があります。 最適化の経験が豊富な方が私に手を貸してくれないか、少なくとも私を正しい方向に向けられるかどうか疑問に思っていました。本当にありがとう。
10 java  voxels  recursion 

4
地図のような地球サイズのマインクラフトをレンダリングするには、どのようなハードウェアが必要ですか?
私はこの問題について考えてきました。現在のテクノロジーで、ボクセルベースのゲームで地球の1:1のレプリカを作成することは可能ですか?この巨大な地図を保存するのに最適なデータ構造は何ですか?このデータ構造をリアルタイムでレンダリングするには、どのアルゴリズムを使用する必要がありますか? これらの質問はこれらの仮定をします: 各ボクセルの解像度は1立方メートルです。 簡単にするために、各ボクセルに必要なメタデータ情報は1バイトだけです。この情報は、ボクセルの「タイプ」(地球、水、岩など)の識別情報を格納するために使用されます。 地球の体積は1 * 10ˆ21立方メートルです。 「現在のテクノロジー」には、市販されているものはすべて含まれますが、スーパーコンピューターは含まれません。 地図の生成には、地球の地形と水深のみが使用されます。人間の建物、植物、洞窟は除きます。地下ブロックは、地質学的研究に基づいて選択されます。たとえば、深度が3000 kmを超える場合は、「マグマ」ボクセルをレンダリングします。 Minecraftと同様に、マップは静的ではなく、ゲーム内で変更できます。 「無限」の描画距離は大きなプラスです。もしあなたが飛んで地球全体を見ることができないならば、地図に地球全体を持っていることの意味は何ですか? この問題について考えたときに私が最初に結論付けたのは、各ボクセルがメモリの1バイトしか占有しないと仮定すると、マップを格納するのに1ゼタバイトが必要になると仮定すると、地球データを線形に格納することは不可能であるということです。したがって、何らかの圧縮が必要です。 ボクセル八分木はマップを圧縮できると思いますが、どれほどかはわかりません。このボクセルマップのエントロピーはおそらく非常に低いため、非常に高いレベルの圧縮を実現できると思います。 免責事項 これは理論的な質問です。ボクセル地球を書くつもりはありません 編集 ESA GOCEはすでに1cm-2cmの精度で地球ジオイドをマッピングしています。この情報を使用して、地球の非常に正確な高さマップを生成できると思います。これにより、地球の地形のギャップを埋めるためにアルゴリズムを使用する必要がなくなります。

2
C ++でのボクセルエンジンのボクセルの保存
楽しいボクセルエンジンを少し書こうとしていますが、実際のボクセルを保存する最善の方法を見つけるのに苦労しています。私はある種のチャンクが必要になるので、全世界をメモリに入れる必要がないことを承知しており、合理的なパフォーマンスでそれらをレンダリングする必要があることを承知しています。 私はoctreesについて読んで、それが1つのキューブで始まることを理解しています。そのキューブには8つのキューブがあり、それらすべての8つのキューブは別の8つのキューブになる可能性があります。しかし、ボクセルエンジンに適合しないと思いますボクセルキューブ/アイテムはすべてまったく同じサイズになります。 したがって、別のオプションは、16 * 16 * 16サイズの配列を作成し、それを1つのチャンクにして、項目で埋めることです。また、アイテムがないパーツの値は0になります(0 =空気)。しかし、これは多くのメモリを浪費することになり、非常に速くはありません。 次に、別のオプションは、各チャンクのベクトルであり、キューブでそれを埋めます。そして、立方体はチャンク内でその位置を保持します。これにより、メモリは節約されますが(エアブロックはありません)、特定の場所にあるキューブの検索が大幅に遅くなります。 だから私は本当に良い解決策を見つけることができません、そして誰かがそれを手伝ってくれることを望んでいます。それであなたは何を使いますか、そしてその理由は? しかし、別の問題はレンダリングです。OpenGLを使用して各チャンクを読み取り、それをGPUに送信することは簡単ですが、非常に遅くなります。チャンクごとに1つのメッシュを生成する方が適切ですが、これは、1つのブロックを分割するたびに、チャンク全体を再構築する必要があることを意味します。だからそれは難しいでしょう。では、どうすればキューブをレンダリングできますか?チャンクごとに1つの頂点バッファーにすべてのキューブを作成し、それをレンダリングして、別のスレッドに配置しようとするか、別の方法がありますか? ありがとう!
9 c++  voxels 

5
Vector3で演算子 '> ='を使用できないのはなぜですか?
私は私がように参照する2つの位置の間を移動するための四角形を取得しようとしている_positionAとします_positionB。どちらもタイプVector3です。長方形はうまく動きます。ただし、到達_positionBしても、本来のように反対方向に移動することはありません。 コードをもう一度見てみました。オブジェクトが移動ifすると、コード内のステートメントは、rectsの位置がに等しいフレームを逃したという結論に達しました_positionB。rectsの位置がより大きいか等しい 場合は、コードを変更して方向を逆にすることにしました_positionB。私のコードは長すぎないので、以下に表示します。 using UnityEngine; using System.Collections; public class Rectangle : MonoBehaviour { private Vector3 _positionA = new Vector3(-0.97f, -4.28f); //Start position private Vector3 _positionB = new Vector3(11.87f, -4.28f); //End position private Transform _rect_tfm; private bool _atPosA = false, _atPosB = false; public Vector2 speed = new Vector2(1f, 0f); private …
9 unity  c#  vector  mathematics  vector  matrix  unity  c#  transformation  java  3d  terrain-rendering  shading  ios  opengl-es  opengl  rendering  optimization  python  scripting  minecraft-modding  modding  pc  3d-meshes  mesh  culling  point-cloud  networking  interpolation  mathematics  game-design  ai  game-mechanics  animation  unreal-4  skeletal-animation  3dsmax  unity  c#  3d  opengl  c++  textures  unity  ide  cocos2d  cocos2d-x-js  unity  c#  mono  il2cpp  c++  game-loop  timer  linux  flash  actionscript-3  java  glsl  c++  vector  entity-component  c++  directx11  windows  visual-studio  libgdx  mouse  unity  c#  architecture  storage  unity  c#  rotation  coordinates  quaternion  vrpn  movement  vector  unreal-4  unity  shaders  unity  gui  text  bug  shooter  3d  animation  rendering  voxels  c++  mmo  multithreading  linux  textures  procedural-generation  terrain-rendering  multiplayer  mmo  game-state  java  android  libgdx  opengl  procedural-generation  unity  gui  3d  animation  tools  geometry-shader  mobile  advertisements  unity  c#  animation  scripting  unity  animation  unityscript  coroutines  unity  shaders  lighting  camera 

1
地形生成のためのOctreeの構築
以前にマーチングキューブ/四面体を実装して、IsoSurfaceをレンダリングしました。これは機能しましたが(YouTube)、ビューの距離に基づいて可変の詳細レベルを実装する(または古い、遠いチャンクを削除する)ことを回避できなかったため、パフォーマンスは悲惨でした。 今回はもう一度やってみることにしました。Build()が呼び出されたときに次のように機能するOctreeNodeを作成することから始めました。 チャンクが小さすぎてビルドできない場合は、すぐに戻ります。 サーフェスがこのチャンクのボリュームを通過する場合は、ワークアウトしてください。 その場合は、LODを上げるかどうかを決定します(カメラが近いため)。 その場合、8つの子を生成し、同じプロセスを呼び出します そうでない場合は、現在のノードの寸法を使用してメッシュを構築します いくつかのPseudoCode: OctNode Build() { if(this.ChunkSize < minChunkSize) { return null; } densityRange = densitySource¹.GetDensityRange(this.bounds); if(densityRange.min < surface < densityRange.max) { if(loDProvider.DesiredLod(bounds)² > currentLoD) { for(i 1 to 8) { if(children[i] == null) { children[i] = new OctNode(...) } children[i] = children[i].Build(); } } …
9 unity  c#  voxels  octree 

2
誰かが二重輪郭を説明できますか?
私はボクセルレンダリングを理解しようとし、デュアルコンターリング(DC)を検討してきました。 これまでのところ私はこれを理解しています: グリッドポイントのセットに対して密度関数を実行します(つまり、ノイズ関数) グリッドのどのエッジにエンドポイント間の変更が含まれているかを見つける これらのエッジから交差点(つまり、ベクトル)を作成します これが私が行き詰まっているところで、次は法線を生成することですが、どうやって?このトピックを見ると、この画像は通常トリミングされます。 研究を行うと、法線は等値面から生成されることが示されます。ノイズから等値面、法線に行くと思うのは正しいですか?もしそうなら、各ステップをどのように達成しますか? 私の理解では、次のステップはDCペーパーの次のとおりです。 符号の変化を示す各エッジについて、エッジを含む4つの立方体の最小化する頂点を接続する四角形を生成します。 この見積もりは上の画像で表されていますか? 最後に、次のステップは、交点と法線を使用してQEFを実行することです。これにより、頂点データが生成されます。これは正しいです?

3
Minecraftのようなブロックワールドを処理する方法
Minecraftのようなブロックの世界で簡単なゲームを書きたいです。私の理論的な質問は、再生中にこのブロック情報を処理する最良の方法は何ですか。私の最初のアイデアは巨大な配列でしたが、これはメモリ不足を引き起こすと思います。多分私はプレーヤーの近くのブロックをロードする必要があるだけです。 ファイルから必要なブロック情報をロードし、必要なものだけをメモリに保持するにはどうすればよいですか?

3
その場でスタックチャンクをロードする方法は?
私は現在、Minecraftに触発された無限の世界に取り組んでいます。チャンクは 16x16x16のブロックで構成されています。ブロック(キューブ)は1x1x1です。 これは、私のコンピューターで12チャンク(12x16)のViewRangeを使用して非常にスムーズに実行されます。いいね。 チャンクの高さを256に変更すると、これは-明らかに-途方もない遅延になります。 だから私が基本的にやりたいことはチャンクを積み重ねることです。つまり、私の世界は[∞、16、∞]チャンクが大きくなる可能性があります。 問題は今、その場でチャンクを生成する方法ですか? 現時点では、自分の位置を中心にして(ほぼ遠くに)存在しないチャンクを生成しています。まだチャンクをスタックしていないので、これはそれほど複雑ではありません。 ここで重要な注意点として、私はまた、最小/最大の高さが異なるバイオームを持ちたいと思っています。だから、バイオームに平地ブロックと最も高い層は、8(8×16)になります-バイオームで山脈のブロックと最も高い層は、14(14x16)になります。例として。 私ができることは、例えば私の上と下に1チャンクをロードすることです。 しかし、ここでの問題は、異なるbioms間の遷移がyの1つのチャンクよりも大きくなる可能性があることです。 私の現在のチャンクの読み込みアクションで 完全を期すために、現在のチャンクは「アルゴリズム」をロードしています private IEnumerator UpdateChunks(){ for (int i = 1; i < VIEW_RANGE; i += ChunkWidth) { float vr = i; for (float x = transform.position.x - vr; x < transform.position.x + vr; x += ChunkWidth) { for (float z …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.