手続き型の世界をどのように保存しますか?


17

私は最近、手続き型の世界を作成する方法について読んだことがあります...しかし、どうやって保存するのですか?

TerrariaやMinecraftのようなゲームでは、ユーザーはランドスケープを自由に変更できますが、その世界を最初のシードから再作成することはできません。手続き型だが修正可能な世界を保存するためにどのようなテクニックが使用されていますか?

回答:


21

ワールドの生成に使用したシード、および変更をアトミックな「コマンド」またはそれらの結果として保存します。

次に、保存したゲームをロードするときに、次のことを行います。

  1. 現在訪問している世界の一部を手続き的に生成します。
  2. 保存されたコマンドを適用するか、生成された要素を保存された要素で上書きします。

更新:そしてもちろん、リソースが利用可能な場合(Minecraftで見られるように)、生成されたワールドを通常のワールドと同じように保存するオプションがあります。この場合、タイルごとに、既にアクセスされた世界の一部のみを保存する必要があります(そうでない場合、手続き型生成はほとんど無意味になります)。これはより多くのHDDやデータベースリソースを消費しますが、ゲームのロード時に必要なCPUパワーは少なくなります。


2
変更に加えて、彼はおそらく手続き世界を構築するために使用されたシードも保存する必要があります;-)
bummzack

@bummzackはい、もちろん、私はそれを言うのを忘れていました。それは明らかだからです:-)私は答えを編集します。
マートン

10
私は種から世界を再生することが最良のアイデアであるとは完全に確信していません。ワールドの生成には通常、複雑なアルゴリズムが関係するため、時間がかかります。一般的にスペースを節約するのではなく、ランダム性の恩恵を受けるためにランダムワールドを生成します。したがって、バイナリ形式で全世界を保存する方が効率的だと思います。
ジョナサンコネル

2
手続き的に生成された世界を保存し、それを生成してから保存するように言っているのですか?これは完全な答えではありません。
マイケルハウス

2
@ Random832 Minecraft 、シードから世界を再生成して変更を再生するのではなく、バイナリ形式で世界を保存します。世界全体を保存する問題を回避するために、Minecraftはこれまでに生成されたチャンクのみを保存します。さらに世界を探索すると、セーブゲームが大きくなります。
ジョセフマンスフィールド

8

手続き的に生成された世界の保存は、タイルマップデータの保存と同じです。

世界がさまざまな種類のタイルで構築されていると仮定すると、世界をバイナリ形式で保存することができます。

  1. さまざまなタイルタイプの総数を決定します(それに応じて、各タイルを表現するために必要なビット数が増えます)。
  2. 訪問済み(変更済み)ワールドの幅と高さを定義します。
  3. 左上のタイル(空を含む)から右下のタイルまで、タイルごとにワールドタイルを表します。
  4. スペースを節約する場合は、DEFLATEまたは同様のアルゴリズムを使用して、この2d-array(1-dとして表されます)http://en.wikipedia.org/wiki/DEFLATEを圧縮します
  5. APIに適切なファイルI / Oを使用して、データをディスクに保存します。

同じ方法を使用して、ボクセルベースのマップも保存できます。

頂点ベースのマップモデルの保存はより複雑です。

そのテーマについて詳しく説明していただけますか?


必要に応じて、各タイルを色分けしてPNGファイルに保存できる場合があります。これにより、専用のビューアを使用せずに結果をすばやく概要できます。
wolfdawn 14

4

Minecraftについては、世界でボクセルが使用されているため、保存が非常に簡単です。詳細については、こちらをご覧ください。

http://www.minecraftwiki.net/wiki/Region_file_format

http://www.minecraftwiki.net/wiki/Level_Format

すでに述べたように、世界を生成するために使用されるシードを保存し、保存形式を世界の構成要素(キューブ、アトムなど)に適合させます。


3

メモリに世界を保存するために使用しているデータ構造は、ディスクへの書き込みおよび読み取りのテンプレートとして使用できます。ディスクのデータが利用できない場合、ゲームの手順部分はこれらのデータ構造を最初に満たします。次に、メモリから領域をアンロードする準備ができたら、生成または変更されたとおりにディスクに書き込みます。

新しい領域をメモリにロードする準備ができたら、まず、以前に生成されてディスクに保存されたかどうかを確認します。ある場合は、プロシージャ生成アルゴリズムからではなく、ディスクからロードします。

通常、これは地形の塊で行われます。各チャンクを独自のファイルに保存するか、ルックアップテーブルを使用して単一のファイルにデータを含むより複雑なディスク構造を作成できます。データをディスクに保存する良い方法については、他にも質問があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.