ボクセルテレインを生成するには
(a)一般的な方法は、Perlinノイズを使用してハイトマップを生成することです。ハイトマップは基本的に、ピクセルの暗さまたは明るさによって異なる高さを表すモノクロ画像です。
このハイトマップの個々のピクセルを見て、ハイトマップ画像のそのピクセルの明るさに応じて、異なる(x、y)位置で異なる高さ(z軸)までのボクセルの「スタック」を作成します。パーリンノイズイメージは滑らかであるため(暗闇に対して鋭い光のエッジがない)、結果として滑らかにローリングする地形になります。
(b)異なる多面体からランドスケープを作成することにより、インクリメンタルに構築できます。必要なボクセル形状に近似する多面体ベクトル形状を作成します。多面体の3D点法(ほとんどの場合、凸包の点)を使用して、ワールドグリッドのどの点が多面体ボリューム内にあるかを確認します。たとえば、空間にピラミッドを定義します。ワールド空間のローカル領域のすべてのポイントをそのピラミッドボリュームに対してチェックした後、どのポイントがそのピラミッドボリュームに該当するかがわかり、それらのセルを「存在」として設定できます。これで、空間にボクセルピラミッドができました。このようにして、地形を形成するまで、あらゆる種類の形状を一緒に追加し続けることができます。
(c)(実際にはbと同じ)モデリングツールを記述します。Voxatronは、これがどのように見えるかを示します。これは、代替世界(エディター)でボクセルフォームを作成し、それを実際のランタイムゲームワールドにインポートするだけです。Voxlapにはボクセル用の最初のオープンソースエディターがあったと思います。個々のボクセルを配置することも、ボクセルをさまざまな形/ボリュームで使用してボクセルをワールドに描画することもできます。
独自のボクセルベースのゲームを構築するために必要なもの
ボクセル道路は、少なくとも現時点では簡単ではないため、このセクションを含めます。最近、レンダリングと物理学のアプリケーションに向けて、多くの研究が大企業によってボクセルエンジンに再び投入されています。
生のボクセルから世界を動的に構築することは、世界構築への手続き型アプローチであり、これは本質的に単純ではないため、単純さが問題になる場合があります。申し訳ありませんが、ここにはいくつかの専門用語があります。ボクセルエンジンの作成は非常に深刻な作業であり、ゲームエンジン開発の複数の領域、特に空間の概念に関する知識が必要です。これは、3Dベクトル計算、行列、および基本的な計算をある程度合理的に理解することを意味します。
そうは言っても、ボクセルエンジンは正確には普及していないため、「ボクセルテレインの生成」には動作するコンテキストが必要です。ボクセルエンジンの動作方法の基本的な説明に進みましょう。
ボクセルは、世界の基本的な構成要素です。それらの位置は、(ベクトルベースの3Dゲームで使用されるような)連続的な浮動小数点スペースではなく、整数インデックス付きの3Dグリッド(配列)によって定義されます。これらはあなたの世界の「原子」になります。Minecraftのようなゲームのように高さが3フィートになることもありますが、大量にクラスター化されない限り、仮想キャラクターの目が実際に見るよりも小さいこともあります-分子のようです。次の2種類があります。
- キュービックメッシュベースのボクセル(例)-これらは新しい種類であり、簡単にするために使用され、最新のグラフィックス技術と組み合わせて簡単に使用できます。MineCratやDungeon Keeperなどのゲームで使用されます。
- ポイントボクセル(例、例)-元のボクセル。それぞれが空間内の個々の衝突可能な点ですが、球形の境界ボリュームに囲まれている場合があります。それらはよりシンプルなので、あなたの世界にもっとたくさん置くことができます。したがって、一般的にはより小さくすることができます。これらを使用した2つのゲームは、Comancheと1990年代のLords of Midnightのリメイクです。
いずれにしても、あなたの世界でボクセルを操作するアプローチは、次のようにほとんど同じです。
ワールド内でオブジェクトを構築および移動するには、上記の数学ツールが必要です。たとえば、壁を作成するには:ベクトルを使用して、3D空間に適切な寸法のボックスを作成します。行列演算を使用して、ボックスを3Dワールド(連続ベクトル空間)で希望する回転と位置に変換します。ボクセルエンジンの場合、追加のステップは、3D多面体ポイントアルゴリズムを使用して、どのボクセルがその回転スペース内にあるかを判断することです。
本質的に、これは世界のほとんどのオブジェクトを構築する方法です。さらに、Mayaや3DS Maxなどの方法でキャラクターを「モデリング」するための独自のツールを作成することもできます。ただし、ポイント、エッジ、面ではなくボクセルからキャラクターをモデリングしているため、方法は大幅に異なります。その後、ワールド内でこれらのオブジェクトを回転させることにした場合、同様にマトリックス変換を使用する必要があります。
破壊可能な地形は、選択した何らかの方法に従って一度に1つのボクセルを削除するか、事前定義されたボリュームに従って大量のボクセルに対してCSG(Constructive Solid Geometry)操作を使用して削除するのと同じくらい簡単です。たとえば、岩にレーザービームを照射する場合、円筒形のボリュームを使用して、ビームが岩を透過しているボクセルを差し引くことができます。CSGは、ボクセルの世界を形成する3D空間グリッドを使用する比較的単純なプロセスであり、ベースグリッド(この場合は岩)のセクション内のすべてのセルを別のグリッド(この場合はレーザービーム)と照合します
物質の「流れ」を得るために(Vigilが砂に関するコメントで示唆したように)、流体力学とセルオートマトンを調べる必要があります。これらは、本質的にボクセル世界でもあるドワーフ要塞の作者、タルンアダムスによって使用されました(この場合、ボクセルはダンジョンキーパーに匹敵するほど大きくなりますが、原理は同じです)。これらは最先端のトピックであり、定義されたボクセルエンジンの必要性ではないため、これをあなた自身の研究の「スタブ」として残しておきます。
最後に、CSGと流体力学は最適化をもたらします。現在開発中のボクセルエンジンは、ほぼ独占的に証明されたように、さまざまな解像度にボクセル空間を分割する方法であるスパースボクセルオクトリ(SVOs)を利用して、このビデオでは、今後のAtomontageエンジンを披露します。octree / SVOを使用することは、1つの大規模で均一なグリッドの処理に伴う処理オーバーヘッドのため、最適化の選択よりも必要です。octreeは、本質的には、ツリー(有向非循環グラフ)であり、それが表すスペースに物理ボリュームが含まれているかどうかに応じて、すべてのノードに8個またはゼロ個の子ノードがあります。octreeが空間を細分してボクセルを形成する方法を示す図はこちらです。
私が知っている最高のオープンソースボクセル実装は、Kox SilvermanのVoxlap Engineで、これはVoxelstein3Dに使用されました。C ++で記述されており、地形変形のためのCSG操作を実装しています。