チャンク

提供: Minecraft Wiki
ナビゲーションに移動 検索に移動
1つのチャンクを切り出した様子。

チャンク(英:Chunk)とは、ワールドを16×16の柱状領域に区切ったものである。

生成[編集 | ソースを編集]

プレイヤーが初めてワールドを作成するとワールドのスポーン地点の周囲29×29‌[JE限定]/45×45‌[BE限定]チャンクが生成され、その様子はワールド読み込み画面に表示される。その後は、プレイヤーの移動に伴って新しいチャンクが生成されていく。

チャンクはシード値を用いて生成されているため、マップの生成機構とバージョンが同じなら、同じシード値のワールドは全く同様に生成される。

範囲[編集 | ソースを編集]

チャンクの境目は、X・Z座標が16の倍数になる格子上に存在する。その高さは、オーバーワールドでは384ブロック、ネザーエンドでは256ブロックである。

チャンクを、さらにY座標が16の倍数の面で立方体状に区切ったものをセクション(英:Section)やサブチャンク(英:Subchunk)と呼ぶ。

チャンクの境界はF3 + Gで表示でき、この際セクションの境界は青色の線で表示される。チャンク・セクションの位置は、通常の座標を16で割って切り捨てることで得られる。

またデバッグ画面では、チャンクの位置はChunk行に、セクション内座標はその後ろの角括弧内(Section-relative行‌[JE 1.21.9で実装予定])に表示される。

チャンク・座標の相互計算[編集 | ソースを編集]

読み込み[編集 | ソースを編集]

Minecraftのワールドは6000万ブロック四方と広大であるため、ゲーム上では一部のチャンクのみを読み込み、その範囲内の要素のみを処理する。逆に読み込まれていないチャンクでは、ゲームのあらゆる要素に関する処理が行われなくなる。

なお要素によっては追加の条件があり、読み込まれているからといってあらゆる要素が動作するわけではない。例えばMobのスポーン、落雷溶岩からの引火、の更新[注釈 1]は、中心がプレイヤーから水平距離で半径128ブロック以内のチャンクでのみ発生する。

Java Edition[編集 | ソースを編集]

Java Editionでは、チケットを発行してその周囲に「読み込みレベル」「演算レベル」を与えることで読み込むチャンクを決定している。

読み込みレベル[編集 | ソースを編集]

読み込みレベルは、そのチャンクの読み込みの可否、および利用可能にしておくティック処理の範囲を決定しており、描画距離に応じて変化する。

読み込みレベルは0–45の間の値を取り、レベル45以上のチャンクは即座に読み込み破棄される。レベルが小さいほど読込の程度が大きい。

読み込み状態 レベル 可能な処理
エンティティ処理可能 ≤31 すべての要素のティック処理、およびアクセス(参照と編集)が利用可能。
ブロック処理可能 32 エンティティの処理と周期的なスポーンが不能になる。
ブロック関連の処理(ブロックエンティティ予約済み処理、チャンクティック、ブロック更新の追跡)は利用可能。全ての要素のアクセスも利用可能。
読み込み完了 33 すべての要素のアクセスが利用可能。ティック処理は不能。
アクセス不能 ≥34 すべての要素が処理もアクセスも不能である。この領域では、ワールド生成が行われる。

アクセス不能領域のチャンクでは、読み込みレベルはワールド生成をどの段階まで進めるかを決定するのに使用される。既にその段階以上に生成が進んでいる場合は、そこで生成が停止する。

レベル 生成段階
34 明るさの初期化
35 地形の生成
36 バイオームの割り当て
37-44 構造物の範囲の生成

処理レベル[編集 | ソースを編集]

処理レベルは、読み込まれたチャンクに対して実際にどこまでのティック処理を行うかを制御している。

これは演算距離に応じて変化し、0–33の値を取る。レベルが小さいほど高度な処理が行える。

読込Lv 処理Lv 状態 ティック処理
≤31 ≤31 エンティティ処理 エンティティブロックエンティティの処理、チャンクティック予約済み処理が実行される。
≤32 ブロック処理 ブロックエンティティの処理、チャンクティック予約済み処理が実行される。
≤32 チャンク処理
(ランダムティック不可)
ブロックエンティティの処理、ランダムティック以外のチャンクティック、予約済み処理が実行される。
33 読み込み完了 読込レベルの都合により、ティック処理が利用できないため停止する。要素へのアクセスは可能である。
それ以上 33 アクセス不能 ティック処理を行われない。

チャンク内の事象が、レベルの異なる別のチャンクに影響を及ぼす場合、以下のような振る舞いになる。

  • 「エンティティ処理」チャンク外に出たエンティティは、直ちにその活動を停止する。そのチャンクの読込・処理レベルが31以下になると、速度などを維持して再び活動を再開する。
  • 「読み込み完了」のチャンク内のブロックは処理の予約はできるが、予約した処理は「チャンク処理」「エンティティ処理」になるまで行われない。
  • ティック処理により、処理を受けたチャンクとは別のチャンクの要素に変更が加えらえれることがある。この変更は、変更先の読込レベルが33以下であれば可能である。
    • TNTは「エンティティ処理」の範囲内でしか爆発できないが、その爆発による破壊は読込レベル33以下の領域に及ぶ。
    • 「チャンク処理」チャンクの外端の水流は予約済み処理を受けられるため、「読み込み完了」チャンク内の隣接するブロックに水流を1ブロック拡大できる。設置された水流ブロックは予約済み処理を受けられないため、それ以上水流は広がらない。
    • 「チャンク処理(ランダムティック可)」チャンクの草ブロックスイカの茎などのブロックはランダムティックチャンクティックの一環)を受けられるため、処理レベル32以下のチャンク内の隣接するブロックに草ブロックを伝播させたり、実を生らすことができる。伝播した草ブロックはランダムティックを受けられないため、伝播は1ブロックはみ出した状態で停止する。
    • ゲームルールallowFireTicksAwayFromPlayerの制約に引っかからなければ、「エンティティ処理」チャンクのブロックはランダムティックをうけて処理レベル32以下のチャンクに炎を延焼させられる。延焼により設置された炎はランダムティックを受けられないため、延焼も鎮火もしない。

チケット[編集 | ソースを編集]

読み込みレベル・処理レベルは、チャンクに対するチケットの発行によって与えられる。

チケットには以下の種類があり、次のプロパティを持つ。

  • 持続時間
  • セーブ時に保存され、ワールドの開閉の前後で失われないか
  • 与える読込レベル・処理レベル
  • あるディメンション内で発行されているとき、そのディメンションのタイムアウトを防止するか‌[JE 1.21.9で実装予定]
  • 発行先のチャンクが読み込まれていなくても期限切れになるか‌[JE 1.21.9で実装予定]
名称 持続時間 保存 読込レベル 処理レベル TO防止 読込外消滅
プレイヤーのスポーン
player_spawn
20ティック いいえ 30 なし いいえ いいえ
スポーン地点検索
spawn_search
20ティック いいえ 33 なし いいえ いいえ
エンダードラゴン
dragon
永続 いいえ 24 24 いいえ いいえ
プレイヤー(読込)
player_loading
永続 いいえ (31) なし いいえ いいえ
プレイヤー(処理)
player_simulation
永続 いいえ なし 32 - 演算距離 はい いいえ
強制読み込み
forced
永続 はい 31 31 はい いいえ
ポータル
portal
300ティック はい 31 30 はい いいえ
エンダーパール
ender_pearl
40ティック いいえ 31 31 はい いいえ
スポーンチャンク
start
[JE 1.21.9で廃止予定]
永続 いいえ 32 - 半径 32 - 半径 - -
不明
unknown
1ティック いいえ 不定 なし いいえ はい

チケットによって与えられた読み込みレベル・処理レベルは隣接するチャンクに伝播していく。1チャンク伝播するごとに読み込みレベルは1ずつ増加するため、伝播を考慮したレベルは各チケットの「チケットのレベル + チケットを受け取ったチャンクからのチェビシェフ距離」のうち最小のものとなる。

したがって、レベルnのチケットが与えられたチャンクの周囲は( n - 31 ) × 2 + 1チャンク四方にわたってレベル31以下で読み込まれる。

なお、読み込みレベルは45、処理レベルは33ブロック以上は大きくならない。

チケットの種類[編集 | ソースを編集]

プレイヤーのスポーンチケット

プレイヤーがワールドに参加する際、参加先のチャンクには読込レベル30のチケットが発行される‌[JE 1.21.9で実装予定]

これにより周囲3×3チャンクがレベル31以下で読み込まれ、スポーン処理中の読込が保証される。

スポーン地点検索チケット

プレイヤーのスポーン地点・ワールドのスポーン地点を検索する際、読込レベル33のチケットが発行される‌[JE 1.21.9で実装予定]

これによりそのチャンク限定でデータにアクセス可能になる。

エンダードラゴンチケット

エンダードラゴンとの戦闘開始時(まだエンダードラゴンを倒していない状態でエンドに入るか、エンダードラゴンを復活させたとき)、チャンク0,0出口ポータルの位置するチャンク)に対して読込・処理レベル24のチケットが与えられる。

これにより周囲15×15チャンクの範囲で読込・処理レベルが31以下になり、エンダードラゴンが範囲外に飛ぶことによる不意な戦闘中止などが防止される。

プレイヤーチケット

プレイヤーは、読込レベルと処理レベルを別々のチケットで与える。

処理レベルについては自身のチャンクにレベル「31 - 演算距離」のチケットを発行し、周囲「演算距離 × 2 + 1」チャンク四方をレベル31で処理可能にする。

読込レベルについては、自身のチャンクを中心に「描画距離 × 2 + 1」チャンク四方すべてに読み込みレベル31のチケットを発行する。マルチプレイでは、描画距離でなくserver.propertiesview-distanceが使用される。

強制読み込みチケット

/forceloadで強制読み込みさせたチャンクには、レベル31の読込・処理レベルが与えられる。

この方法で読み込んだチャンクは、ゲームを再起動しても常に強制的に読み込まれ続ける。

ポータルチケット

エンティティがネザーポータルを通過すると、移動先のディメンションのポータルのあるチャンクにレベル30の読込・処理レベルが与えられる。これにより、読込・処理レベル31以下が3×3チャンクに与えられる。このチケットは300ティック持続する。

エンダーパールチケット

プレイヤーが投げたエンダーパールが存在するチャンクには読込・処理レベル31が与えられ、その飛行を維持する。このチケットは40ティック持続するが、エンダーパールは39ティックごとにこのチケットを発行して自身の飛跡上を読み込ませ続ける。

これによりエンド本島の概ね全域が読み込まれた状態になり、戦闘中に一々地形を読み込み直したり、エンダードラゴンが読み込み範囲外に出て停止したりという事態が回避される。

エンダードラゴンが倒されるか、戦闘に参加しているプレイヤーがいなくなると、チケットは失効し読み込みは停止する。

開始チケット

初期スポーン地点の存在するチャンクには、読込・処理レベル「32 - spawnChunkRadius(デフォルト: 3)」のチケットが与えられる‌[JE 1.21.9で廃止予定]。これにより、読込・処理レベル31以下がspawnChunkRadius × 2 + 1(デフォルト: 7)チャンク四方に与えられる。

この範囲は一般にスポーンチャンクと呼ばれ、プレイヤーがどんな座標にいても、どのディメンションにいても常に読み込まれており、あらゆる処理が通常通り行われる。

不明チケット

システムがブロックのデータを直ちに使用する必要があるが、そのチャンクの生成が未完了の場合は1ティックの間チケットを発行する。このチケットは読み込みレベルのみを与えレベルは可変だがすべて32以上であり、どの段階までチャンクの生成を進めるかを示す。これはエンティティのAIやスポーンなど、さまざまな処理上で発行される。

制限事項[編集 | ソースを編集]

  • ディメンションのタイムアウト
    あるディメンションにおいて、タイムアウトを防止するチケットがない状態が300ティック(15秒)以上続くと、そのディメンションはタイムアウトし、エンティティやブロックのティック処理など様々な処理を停止する。エンティティの出入りがあるとカウントはリセットされる。
  • 以下の要素は処理が行われるのに特定の条件があるため、チャンク自体が読み込まれていても処理が行われない場合がある。
    • エンティティの処理
      • 敵対Mobは、プレイヤーから128ブロックの範囲外ではそのチャンクの読み込みレベルが「エンティティ処理」でも行われず、即座にデスポーンする。
      • 友好Mobは、プレイヤーを中心とする240×240の範囲外では自然スポーンすることはない。
      • 詳しくはスポーンを参照。

Bedrock Edition[編集 | ソースを編集]

詳細は「ティック領域」を参照

プレイヤーの模擬処理距離内のチャンクや、/tickingareaで読み込まれたチャンクを含め、チャンクの読込では全てのゲーム面が起動している。読込破棄されたチャンクはゲームに処理されず、ゲーム面が一切処理されない。

種類[編集 | ソースを編集]

プレイヤー
丸みを帯びた形[情報提供依頼]
プレイヤーの模擬処理距離内のチャンクは読み込まれる。
コマンド
/tickingareaコマンドで作成。

制限[情報提供依頼][編集 | ソースを編集]

  • エンティティ
    • Mobの出現は、読み込まれたプレイヤーの半径6チャンク以内のチャンクごとに評価される

例外[編集 | ソースを編集]

処理領域内の事象は外部チャンク内のブロックにも影響を与える事がある。外側のチャンクが起動していない場合、ほとんどの場合効果は中断される。具体的には、

  • 処理領域の端でブロックを変更すると、処理領域外のブロックに更新が伝播され、それらのブロックが適切な応答をする。
  • 水流や溶岩流は外側のチャンクの最初に隣接するブロックに伝播することがあるが、外側のチャンクが起動するまでは流れはそこで中断された状態になる。
  • 処理領域の外側の最初に隣接する可燃性ブロックに炎が延焼することがある。水や溶岩のように、そこで中断された状態になる;目に見えるもののアニメーションは実行されず、外側のチャンクが起動するまではそれ以上延焼しない。
  • 草や菌糸は、外側のチャンクの最初に隣接するブロックに伝播することがあるが、影響を受けたブロックはそのチャンクが起動するまでは実際にはその姿を変えず、起動されると即座に変える。草や菌糸はそのような最初のブロックを超えて広がることは出来ず、また、そのようなブロックから外側のチャンクが起動するまでは、処理領域に伝播することもできない。
  • 処理領域の端に生えているカボチャやスイカの茎は、外側のチャンクの隣接するブロックに実をならすことがある。
  • 外側のチャンクに移動しようとしたエンティティ(Mob、トロッコ、矢など)は、処理領域から離れるとすぐに中断される。Mobは見えているが動かない。外側のブロックが起動するとエンティティの移動は再開される。
  • TNTが爆発すると起動していないチャンク内のブロックが損傷を受けたり破壊されたりすることがあり、他の事象とは異なりその効果は隣接するブロックに限定されない。ただし、外側のチャンク内の副次的な効果はそのチャンクが起動するまで中断される。例えば、砂や砂利を支えていたブロックを爆発で破壊した場合、砂や砂利がすぐに落ちてくるわけではない。破壊されたブロックに取り付けられていた額縁やレッドストーントーチなどのアイテムも同様で、チャンクが起動するまで落ちない。
  • 起動していないチャンクに発射されたTNTは、最初に入った外側のブロック内で空中に浮遊している。外側のチャンクが起動するまでは見えず、起動された時点で飛行と時限が再開される。

チャンクの境界の探し方[編集 | ソースを編集]

座標上では、X座標ないしZ座標が16で割り切れる場所がチャンクの境である。例えば、(96, -32)はチャンク(5, -2),(5, -3),(6, -3),(6, -2)の交わる点である。XおよびZ座標が16の倍数を通過するたびに、プレイヤーはチャンクの境界を越えていることになる。また、ブロックのX座標とZ座標がともに16で割れるとき、プレイヤーはチャンクの北西隅にいる。

また、以下の式を用いることで現在いるチャンクの座標を知ることができる。

チャンクのX座標 = ⌊ X座標 / 16 ⌋ 、 チャンクのZ座標 = ⌊ Z座標 / 16 ⌋

また、チャンク内での座標はそれぞれの座標に対して16の剰余をとることで求められる。

Java Editionでは、F3 + Gでチャンクの境界を表示することができる。この際、サブチャンクは青色の線で示されている。

また、単にF3を押せばデバッグ画面が開き、プレイヤーの座標と、プレイヤーのいるチャンクの座標、チャンク内の座標、チャンク座標が格納されているRegionファイルの名前などを知ることができる。

Bedrock Editionでは、高画質にするとワールドが再描画され、プレイヤーがいるチャンクのみが一瞬だけ読み込まれ、チャンクの境界が簡潔に表示される。プレイヤーが描画距離を急激に変更すると、チャンクの境界が青い線で表示される。

スライムチャンク[編集 | ソースを編集]

詳細は「スライム § スポーン」を参照

スライムチャンク明るさに関係なくY=40以下でスライムが出現できる特定のチャンクである。それ以外はすべて他のチャンクと同じである。

Java Edition[編集 | ソースを編集]

スライムチャンクはキノコ島を除くワールド中に生成される。全チャンクの10個に1つはスライムチャンクである。これらのスライムチャンクはそのチャンクの座標とワールドのシード値を組み合わせて擬似的にランダムに決定される:

Random rnd = new Random(
    seed +
    (int) (xPosition * xPosition * 0x4c1906) +
    (int) (xPosition * 0x5ac0db) + 
    (int) (zPosition * zPosition) * 0x4307a7L +
    (int) (zPosition * 0x5f24f) ^ 0x3ad8025f
);
return rnd.nextInt(10) == 0;

つまり、0から9までの乱数を生成してチャンク座標を使ってシード値を生成し、その乱数が0であればチャンクにスライムが出現する。ワールド座標をチャンク座標に変換するには、16で割って切り捨てる。xPosition、およびzPositionは32ビットの整数(int)であることに注意。

Bedrock Edition[編集 | ソースを編集]

Bedrock Editionでのスライムチャンクの処理方法はJava Editionと異なる。処理方法はワールドシードに関係ないため、スライムが自然出現するチャンクは全てのワールドで同じである。[1]

歴史[編集 | ソースを編集]

Java Edition pre-Classic
rd-131655開発中のチャンクが紹介された。
Java Edition Infdev
20100227-1マップの高さがカスタムできなくなり、チャンクの高さは128に変更された。
Java Edition
1.2.112w07aRegionファイルフォーマットからAnvil file formatへの移行に合わせて、チャンクの高さが256ブロックに増加。
1.4.212w39aデバッグ画面にチャンクの座標と、プレイヤーのチャンク内での座標が表示されるようになった。
1.1016w20aF3 + Gでチャンク協会の表示非表示を切り替えられるようになった。
1.14?チャンクの読み込み方法が変更された。
1.1720w49aマップの高さが再びカスタムできるようになった。
21w06aチャンクのY方向が、上は319まで、下は-64まで拡張され、高さが合計384ブロックになった。
21w15aチャンクの高さに関する変更が一旦戻された。
1.18Experimental Snapshot 1チャンクの高さが再び384ブロックになった。
21w37a描画距離により与えられるチャンクの描画範囲の形状が四角柱状から円柱状に変更された。
21w38a演算距離をカスタマイズできるようになった。
1.2124w19a光チケットが削除された。
1.21.224w37aエンダーパールチケットが追加された。
1.21.424w44aテレポート後チケットが削除された。このチケットは、エンティティのテレポート先のチャンクが生成された状態になるようにしていた。
1.21.524w05aチケットに保存属性が追加された。
プレイヤーのチケットが読込・処理の2種類に分割された。
開発中のJava Edition
1.21.925w31aチケットにタイムアウト防止・読み込み外時間切れ可属性が追加された。
プレイヤーや強制読み込みチャンクに加え、ネザーポータル・エンダーパールもタイムアウトを防止するようになった。
プレイヤーのスポーン・スポーン地点検索チケットが追加された。
スポーンチャンクチケットが削除された。ワールドのスポーン地点のあるチャンクに対し、永続のチケットで「32- ゲームルールspawnChunkRadius」の読込・処理レベルを与えることができた。

トリビア[編集 | ソースを編集]

  • 生成されていないチャンクにプレイヤーが入ると、そのチャンクが読み込まれるかプレイヤーが有効なチャンクに移動するまでほかのブロックが映らなくなる。これはY座標がチャンクの上限・下限を越えている場合には発生しない。
  • Bedrock Editionでは、チャンクの16×16×16の区画のうちの1つにブロックがない場合、底にブロックを設置するとチャンクの読込と同じアニメーションが表示される。このバグにより、プレイヤーが設置したブロックがプレイヤーが向いている方向の空の色と同じ色に1秒ほど変化し、通常のブロックのテクスチャに消えゆき始めるという不具合が発生する。日の出や日の入りの時間にそこにブロックを置いた場合、頭を上下に揺らし続けると実際には1秒間常に色が変化する。また、ブロックの後ろのブロックは見えなくなる。

関連項目[編集 | ソースを編集]

注釈[編集 | ソースを編集]

  1. ゲームルールallowFireTicksAwayFromPlayerfalseのみ

脚注[編集 | ソースを編集]

  1. Bedrock Editionのスライムチャンク処理方法は@protolambdaと@jocopa3が逆構成したもので、GitHubで見られる:[1][2]