Minecraftのようなゲームは、シード番号から全世界をどのように生成しますか?


32

バイオーム(Minecraftや同様のゲームのように)で完全にユニークな世界を作りたい 単一の「シード」番号からこれらの世界全体を生成する方法がわかりません。誰かが技術の基本的な概要を提供できますか?


13
Notchは実際に地形生成についてのブログ投稿を書きましたが、新しいコードにはバイオームやFRACTALSなどの魔法があるので、現在は完全に廃止されています。パート2もありませんでした。

回答:


27
  1. シードからランダムXを生成するにはどうすればよいですか? シード値は、乱数ジェネレーターの初期状態です。ほとんどのプログラミング言語では、このシードを設定できます。たとえば、Cはを使用しsrand()ます。開始する特定のシードを指定しない場合、通常、タイムスタンプ値がシードとして使用されます。そのように、実行するたびに、乱数は異なります。

    // C example
    srand(1);
    for(i=0; i<3; i++)
        printf("%d\n", rand());
    srand(1);
    for(i=0; i<3; i++)
        printf("%d\n", rand());
    
    1270216262 
    1085377743 
    1481765933
    1270216262 
    1085377743 
    1481765933
    

    ご覧のとおり、特定の値(1をシードとして使用)でシードすると、結果の乱数は同じになります。

  2. 乱数に基づいてMinecraftの世界をどのように作成しますか? ノッチにはこれに関する投稿があります。 また、「Minecraftのような世界」に関する他の人のチュートリアルもチェックできます。たとえば、OpenGL 4でのMinecraftのようなレンダリングです。基本的な考え方は、Perlinノイズ(またはシンプレックスノイズ)を使用することです。ノイズ関数に関する良い質問があります:Perlinノイズを理解する


1
実際、あなたは、Minecraftが張り出した崖や洞窟などを持っているのではないかと心配していますが、PNを使用することはできません。
jcora

6
パーリンノイズは、より大きな地形生成方法の一部として使用できる単なるノイズシステムです。例えば。高度に依存するしきい値で3Dパーリンノイズを使用して、崖や洞窟などを生成できます(編集-実際、Notchが1つの時点で行っていたこととまったく同じ回答のリンクから確認できます)
Kylotan

1
+1キロタン。Notchのブログからの引用は次のとおりです。「具体的には、[2D Perlin heightmap]がオーバーハングを生成する方法はありません。そこで、システムを3D Perlinノイズに基づいた同様のシステムに切り替えました。ノイズ値を「密度」として扱いました。0より低い値は空気であり、0以上の値は地面になります。」
ジミー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.