本記事では、データパックを介してワールドの生成を自由にカスタマイズする方法について解説する。
ワールドプリセットとディメンション[]
カスタムワールドプリセットでは、ワールドに生成されるディメンションと、そのディメンションの詳細を設定できる。作成したワールドプリセットは、ワールド新規作成画面から「ワールドタイプ」として選択することによって実際に生成することができる。ファイル位置はdata/<名前空間名>/world_preset
。
ディメンションの設定には主にバニラのオーバーワールドやネザーで使用される「マルチノイズ」やスーパーフラットのワールドで使用される「スーパーフラット」等々がある。「マルチノイズ」を選択した場合には使用するノイズ設定や使用するバイオームとその配置なども設定することができる。
カスタムディメンションタイプとは、そのディメンションにおける敵対Mobのスポーンが発生しうる明るさや水の設置の可否など、ディメンションの特質を設定したものである。カスタムワールドプリセットで、各ディメンションにおいてどのディメンションタイプを使用するかが設定できる。ファイル位置はdata/<名前空間名>/dimension_type
。
カスタムディメンションというのは、ワールドプリセットの導入(1.19開発下の22w11a)以前にディメンションをカスタマイズする為に使用されていた仕様である。現在はその機能を完全にワールドプリセットを使って代替することができるのだが、バニラのデフォルトのワールドでは現在もこちらが参照されており、デフォルトのワールドにディメンションを加えるだけなら現在も使用することができる。ファイル位置はdata/<名前空間名>/dimension
。
ノイズ設定[]
ノイズ設定は地形やノイズ洞窟の形状、地形を構成するブロックなどを決定する要素であり、JSONファイルとしてデータパックのdata/<namespace>/worldgen/noise_settings
に格納する。ワールドプリセット内のディメンションの生成設定内にある settingsで指定することで、そのディメンションの生成に使用するように設定できる。
デフォルトでは、通常のオーバーワールドにminecraft:overworld
、アンプリファイドのオーバーワールドにminecraft:amplified
、ネザーにminecraft:nether
、旧「洞窟」ワールドタイプ(地表の無いオーバーワールド)にminecraft:caves
、エンドにminecraft:end
、旧「浮島」ワールドタイプにminecraft:floating_islands
が使用されている。
地形の生成にあたって、最終的な密度値が0以下の地点には空気が、0以上の地点にはデフォルトの地形ブロックが生成される。その後空気部分の一部には帯水層、地形ブロックの最上部には地表ブロックが置換して言生成される。
地表ブロックを生成するにあたっては、ノイズminecraft:surface
が地表部分の厚さを計算するのに使用される。各XZ座標についてnoise_value_at_(X,0,Z) × 2.75 + 3.0
が計算され、ここに±0.25以内の値がランダムに加算される。
JSONフォーマット[]
- : 最上位のオブジェクト。
- sea_level: このディメンションにおける海面の高度。この値はワールド生成にのみ機能し、かつMobのスポーンに使用される海面の高度は63で固定でありこの値は参照されない。
- disable_mob_generation: チャンク生成に伴うエンティティのスポーンの可否。
- ore_veins_enabled: 鉱脈の生成の可否。
- aquifers_enabled: 帯水層の生成の可否。
- legacy_random_source: 1.18以前のワールド生成に使用されていた旧い乱数生成器を使用するかどうか。
- default_block: 地形を構成するデフォルトのブロック。
- ブロック状態
- default_fluid: 海洋や湖に使用されるデフォルトブロック。
- ブロック状態
- spawn_target: プレイヤーのスポーン試行地点の基準点(スポーンがこの点の周囲に試行される)を決定するためのノイズパラメータのリスト。基準点を設定するにあたっては、原点から2560ブロック以内の範囲内からXZ座標がいくつか選択され、ノイズ値を抽出し(depthおよびoffsetは常に0)、
((x^2+z^2)^2) / 390625 + (リスト内の範囲からの最小距離の2乗)
を計算する。プレイヤーは、この計算結果の値が最も小さい地点の周囲にスポーンする。- :範囲。
- バイオーム配置用ノイズパラメータ
- :範囲。
- noise: ワールド生成に関するフィールド。
- min_y: 地形の生成が始まる最低高度。-2032以上2031以下且つ16の倍数でなければならない。
- height: 地形が生成されうる範囲の垂直方向の最大長さ。0以上4096以下の値かつ
min_y + height
が2032未満になるように指定する必要がある。 - size_horizontal: 0以上4以下の値。
- size_vertical: 0以上4以下の値。
- noise_router: 密度関数をワールド生成に使用されるノイズパラメータに発行する。各フィールドには密度関数のIDを記述するか、あるいは密度関数をそのまま記述する(定数形式でもオブジェクト形式でも良い)。
- initial_density_without_jaggedness: 帯水層と地表の生成に関係している。各XZ座標に対してワールドの最上部からsize_vertical×4の精度で検索していき、ノイズ値が25/64以下になった地点を地形の最初の生成高度とする。この高度は、実際の地形の高度(final_densityにより決定)より低くなければならない。
- final_density: 各位置にデフォルトの地形ブロックと空気のどちらが生成されるかを決定する。正の値であればデフォルトの地形ブロックが生成され、負の値であれば空気が生成される。地形ブロックは surface_rule、空気は帯水層に置換される可能性がある。
- barrier: 洞窟の開けた空間において、帯水層の分割壁を生成するかどうかに影響する。値が高いほど生成の可能性が高まる。
- fluid_level_floodedness: 洞窟内の帯水層を生成する確率に影響する。値が高いほど生成の可能性が高まり、1.0以上および-1.0以下の値はそれぞれ1.0、-1.0と見做される。
- fluid_level_spread: 水面高度に影響する。値が低いほど低高度で生成されやすくなる。
- lava: 帯水層の代わりに帯溶岩層を生成するかどうかに影響する。閾値は0.3。
- vein_toggle: 鉱脈の種類と、その種類の鉱脈が生成される垂直方向の範囲に影響する。この値が0.0以下であれば銅の鉱脈が、さもなくば鉄の鉱脈が生成される。
- vein_ridged: その位置が鉱脈となるかどうかを決定する。この値が0.0以上なら普通の地形ブロック、0.0未満なら鉱脈として生成される。
- vein_gap: 鉱脈内の各ブロックが、原石ブロック、鉱石、岩石のどれになるかを決定する。この値が-0.3より大きく、かつ乱数が0.4 - 0.6 から0.1 - 0.3にマッピングされたvein_toggleの絶対値(この範囲外の値は値域の端の値に補正)が小さければ鉱石ブロック(2%で原石ブロック)を生成し、それ以外の場合は岩石ブロックを生成する。
- temperature: バイオームの配置に使用される気温値。
- vegetation: バイオームの配置に使用される湿度値。
- continents: バイオームの配置に使用される大陸性値。
- erosion: バイオームの配置と帯水層の生成に使用される侵食性値。
- depth: バイオームの配置と帯水層の生成に使用される深度値。
- ridges:バイオームの配置に使用される奇異性値。
- surface_rule: 地表に生成するブロックの設定。
- 地表生成設定
密度関数とノイズ[]
密度関数は、位置依存の値をノイズ送信子に提供する要素である。
ノイズ[]
ノイズは密度関数か地表生成設定によって参照される。データパック内のdata/<名前空間名>/worldgen/noise_settings
にJSONファイルとして保存される。
密度関数か地表生成設定によって参照される他、以下に挙げるような高度上に記述された用途を持つノイズも存在する。
minecraft:surface
: 地表生成設定に使用される表層の厚さに影響する。minecraft:surface_secondary
: 地表生成設定における表層の厚さの追加分に使用される。minecraft:clay_bands_offset
: 地表生成設定bandlands
において荒野のテラコッタの層を生成するのに使用される。minecraft:badlands_pillar
、minecraft:badlands_pillar_roof
、minecraft:badlands_surface
: 侵食された荒野において土柱を生成するのにつかわれる。minecraft:iceberg_pillar
、minecraft:iceberg_pillar_roof
、minecraft:iceberg_surface
: 凍った海および凍った深海において氷山(地形の特性)を生成するのに使用される。
ノイズのJSONフォーマット[]
- : 最上位のオブジェクト。
- firstOctave: 最初のオクターブ。ノイズ設定の legacy_random_sourceがtrueの場合は、この値は1以下でなければならない。falseの場合は値域の制限はない。
- amplitudes: サブノイズの振幅。
index
(0から)のサブノイズの周波数は2^(- firstOctave + index)
で、振幅(-amplitude
から+amplitude
までの範囲)は凡そ1.04 * doubleValueAtIndex * 2^(sizeOfThisList - index - 1) / (2^sizeOfThisList - 1)
(三次元改良パーリンノイズの範囲を±1.04と推定の下)である。各サブノイズに対して、二つの三次元改良パーリンノイズが生成され平均値が取得される。ノイズの最終値は± 10 * sumOfSubNoises / ( 3 * ( 1 + 1 / m ) )
である。ここで、m
は前後のゼロ要素を削除した後のリスト内の要素数である。もし legacy_random_sourceがtrueの場合は、長さは1-firstOctave
でなければならない。falseの場合はリストの長さに制限はない。- : サブノイズ用の倍精度浮動小数点数。
バイオーム[]
カスタムバイオームでは、バイオームに生成される生成物、Mob、降雪開始高度を決定する気温、およびその他の環境効果(空や水、葉の色、流れる音楽等々)を設定できる。新しく作成したバイオームはスーパーフラットやシングルバイオーム等で生成することもできるが、他のバイオームと合わせて生成されるようにするにはワールドプリセットで設定する必要がある。ファイル位置はdata/<名前空間名>/worldgen/biome
。
洞窟[]
洞窟のカスタマイズでは、従来の洞窟や渓谷のサイズや形式を設定できる。但し、ノイズ洞窟の仕様はノイズ設定で決定される。ファイル位置はdata/<名前空間名>/worldgen/configured_carver
。
生成物[]
生成物のカスタマイズでは、地形生成後に生成される最大3×3チャンク程度のサイズの小規模な装飾物である生成物をカスタマイズ・追加できる。ファイル位置は、生成物そのものの設定であるdata/<名前空間名>/worldgen/configured_feature
と、それに配置設定を加えたdata/<名前空間名>/worldgen/placed_feature
の二か所。追加した生成物はカスタムバイオームで生成できるほか、構造物のカスタマイズ(構造物タイプjigsaw
)で構造物内に生成させることもできる。
構造物[]
構造物のカスタマイズでは、主にジグソーブロックを利用した形式によってプレイヤーの作成した構造物をワールドに生成させることができるほか、既存の構造物をカスタマイズすることもできる。
歴史[]
Java Edition | |||||
---|---|---|---|---|---|
1.16.2 | 20w28a | カスタムワールド生成が可能になった。 | |||
カスタムワールド生成の雛形がGitHubで公開された。 | |||||
20w29a | ノイズ設定がカスタムワールド生成で設定できるようになった。 | ||||
1.18.2 | 22w06a | カスタム構造物の一部のフィールドにタグが使用できるようになった。 | |||
1.18.2 Pre-release 1 | noise_settings にnoise_router が追加された。
| ||||
カスタム構造物の設定がnoise_settings から分離された。 | |||||
1.19.3 | 22w42a | ワールド生成のデータがclient.jar内のdata/minecraft/worldgenから見られるようになった。 | |||
代わりに、GitHub上の雛形の更新が終了した。 |
注釈[]
要素 |
| ||
---|---|---|---|
データパック |
| ||
チュートリアル |