ほとんどのパーリンノイズアルゴリズムでは、任意の場所のノイズ値をのように取得できますnoise(x,y,z)
。これにより、チャンクごとにノイズを生成することはかなり簡単になります。チャンクの位置ではなく、グローバルな位置を渡すだけです。
for(int i = 0; i < CHUNKMAX_X; i++)
for(int j = 0; j < CHUNKMAX_Y; j++)
for(int k = 0; k < CHUNKMAX_Z; k++)
if(isSolid(perlinNoise.get(chunkPosition.x + i,
chunkPosition.y + j,
chunkPosition.z + k))
thisChunk[i,j,k] = new Voxel(solid);
else
thisChunk[i,j,k] = new Voxel(air);
ご覧のとおり、チャンクの境界を反復処理してチャンクの地形を生成し、そのグローバルな位置が安定しているかどうかを確認しています。これは、地形の生成に一般的に使用しているのと同じ方法です。
perlinNoise.get
グローバルな位置を取り、その密度を返します。どこisSolid
ボクセルが固体の資格を得るのに「十分な密度」であるかどうかを確認する簡単なテストはにありますか。
perlinNoise.get
単純なノイズアルゴリズムよりも複雑になる可能性があります。あなたの世界のボクセルの深さに基づいてチェックすることができます。たとえば、ボクセルが「絶対ベースグラウンドレベル」であると決定した値よりも低い場合、パーリンワームアルゴリズムを使用して密度を返すことができます。絶対ベースを超える場合は、通常の密度関数を使用してより多様な地形。ただし、この2つをブレンドすることをお勧めします。
さまざまなPerlinノイズ関数を組み合わせるのは、実際に操作して何が機能するかを確認する必要があるだけです。ゲームをリロードする必要なく、いくつかの値を変更して地形をホットスワップできるように環境をセットアップするのが最善です。幸せな実験。