私はあなたが今何を求めているかをよく理解していると思います。
ノイズはランダムではありません-ランダムに見えますが、数式に完全に基づいており、繰り返し可能です。すべての情報は式にエンコードされます。これは、無限の領域を潜在的にカバーする数式を作成し、必要な領域の座標で数式を使用できることを意味します。隣接する領域が必要な場合、新しい座標で数式を再利用するだけで、数式は連続した値を生成するため、エリアはシームレスに結合されます。
高さの生成にperlinノイズの代わりに正弦波を使用し、X軸では世界を無限に想像しますが、Y軸とZ軸では1ユニットのみの単純な例を示します。
式は次のとおりです。 height(x,y) = sin(x/20)
ゲームが開始され、近くのエリアの高さが生成されます。(0,0)から(9,0):
[0.0, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.34, 0.39, 0.43]
丘があり、右に向かって上昇しています。最後まで歩いて、(10,0から19,0)の値を生成する必要があるとします。
[0.48, 0.52, 0.56, 0.61, 0.64, 0.68, 0.72, 0.75, 0.78, 0.81]
丘が着実に上昇し続け、(10,0)の値が(9,0)の値から順調に続くことに注意してください。これは、正弦関数が連続的であるためです。つまり、基本的に、2つの隣接する数値を入力すると、2つの隣接する結果が出力されます(隣接の特定の定義に対して)。したがって、ワールド座標を使用して、ワールドを定義する関数のパラメーターとして使用すると、一度にどれだけ生成しても、または生成しても、一緒に収まる連続したランドスケープが得られます。新しいパーツを生成すると、高さがすでに事前に決定されているため、既存のパーツから自動的に流れ出します。
世界が変更されない場合、数式から特定のポイントの高さを正確に計算できるため、何も保存する必要さえありません。Minecraftのようなものでは、明らかに世界は完全に変形可能であるため、作成時に各チャンクを保存するだけです。隣接するチャンク間に高度のコヒーレンスがある場合(つまり、1つのブロックが草である場合、その隣のブロックも草である可能性が高い)、データを非常に効率的に圧縮できます-ランレングスエンコーディングが機能しますしかし、そうであれば、ほとんどすべての標準的な圧縮アルゴリズムがそうなります。
高さを最も明白な値として説明しましたが、同じシステムを使用して必要な特性を生成できます。連続的なプロパティを使用して、入力がワールド座標である数学関数を使用します。これにより、ランドマーク、鉱床、スポーンポイントなどの存在を自由に決定できます。(明らかに、ある式の値は別の式に影響する可能性があります-空中に石炭鉱床を配置するポイントがないため、世界の高さマップを生成し、地下から十分に離れているブロックの石炭の可能性のみを計算します)