私は 16*16*16 のボクセル チャンクを使用して大規模な世界を作成しています。これは、32*32*32 の寸法まで積み上げられており、いわば道に少しぶつかりました。
手続き的に生成された構造から作成され、コンテンツの一部にテンプレートを使用して、20 + * 20 + * 20 + チャンクにまたがる大きな構造を作成したいと考えています。今、問題があります。ビジュアル レンダリングの範囲は最大 32*32*32 チャンクですが、可能であればメモリ内に最大 40*40*40 チャンクを保持しています。
構造物は、町、ダンジョン、道路など何でもかまいません。私は道路のパーリンワームのようなものを考えていました.x、zの地形の上にそれらを置き、橋などの経路を分析します.
構造物と構造物のコレクションは、プレーヤーが視覚範囲内に入る前に事前に生成する必要があります。または、高さマップに対するパーリン ノイズのように動作する必要があります (最良の解決策)。(プレイヤーが発電機の動作を見ないようにするため)。また、毎回ワールド シードと一致している必要があります。
私はこれについて少し考えましたが、2つの可能な解決策があります。
1) 構造ジェネレーターの起点に基づいて構造を生成します。これにより、いくつかの問題が発生しますが、構造の中心から生成したとしても、構造がプレーヤーの潜在的な視覚範囲に簡単に侵入する可能性があります。
2) 上記の方法を使用して構造を生成するために、「到達不能」なチャンクを事前に生成し、ページインおよびページアウトします。これもかなり不必要に思えます。
どちらの方法でも、構造物を生成する有効な場所を得るために、地形を大量に分析する必要があります。
私は、誰かがより有機的な解決策、または私がこれまで「見る」必要のない単純な解決策を持っていることを望んでいました.
前もって感謝します。
編集:
部屋の点群/ノードを生成するダンジョン生成のアイデアがありました。手順:
1) ジェネレーターが「ノード」を見つけると、x、y、z のサイズを作成して、部屋の原点** (部屋の中心または隅) と部屋のタイプに基づいてボックスを作成します。
** 0,0,0 ワールド空間に対する x,y,z は次のように計算されます new Vector3((chunkX*16)+voxelX,(chunkY*16)+voxelY,(chunkZ*16)+voxelZ)
2) 部屋のサイズが計算されたら、オーバーラップをチェックし、オーバーラップが見つかった場合は、いくつかのことのいずれかを行います。部屋の重なりが高い場合は、屋根または床が平らになるまで下げます。屋根が平らな場合は、部屋まで階段を作り、交差する壁を取り除きます。
3) 下、北、東を見下ろすと、おそらく小さなコーンのある部屋があり、それらの間に廊下を作ろうとします。
特にダンジョンの中心がメインホール/ボスルームである場合、これはおそらくある程度機能します.
これは、町、都市、地上のダンジョンでは異なります。それでも少し途切れ途切れのようです。何か案は?