マイクラの湧き潰しが効かない理由|明るさは2種類の光で判定されている
拠点の周りに松明を敷き詰めた。トラップの周辺も明るくした。それなのに、朝になるとゾンビが立っている。
こういうとき、たいてい「松明の数が足りなかった」と考えて、さらに敷き詰めます。それで直ることもありますが、直らないこともあります。直らない場合、原因は数ではなく前提のほうにあります。
「明るさ7以下で敵mobが湧く」——多くの人がこう覚えています。この覚え方には、大事な部分が抜けています。マインクラフトの明るさは、1つの数字ではありません。
この記事では、Minecraft Wikiの「Light」ページの記述をもとに、湧き潰しが効かないときに何を見るべきかを整理します。
30秒で要点
- 光には sky light(空由来の光)と block light(ブロック由来の光)の2種類がある
- 敵mobが湧くには「internal sky lightが最大7以下」かつ「block lightが0」の両方が必要
- block lightは光源からのtaxicab distance(3軸の距離の合計)1メートルごとに1ずつ減衰する
- sky lightの値は夜になっても下がらない。夜の暗さは internal sky light という別の値で扱われる
- デバッグ画面のClient Lightは2つの光を合成した値であり、湧き判定に使われる値そのものではない
| 用語 | 意味 |
|---|---|
| sky light | 空に由来する光。空に垂直に露出しているブロックでは15 |
| block light | 松明などの光源に由来する光 |
| internal sky light | 時間帯などを反映した内部的なsky lightの値。湧き判定にはこちらが使われる |
| taxicab distance | 3つの軸(東西・南北・上下)方向の距離をそれぞれ足し合わせた距離。マンハッタン距離とも呼ばれる |
| mob | ゲーム内で動く生き物の総称。敵対的なものを敵mobと呼ぶ |
明るさは3つの側面と2種類の光でできている
Minecraft Wikiの定義から確認します。同ページによれば、明るさには light level・internal light level・rendered brightness という3つの側面があり、光には sky light と block light の2種類があるとされています。
普段プレイしていて意識するのは、たいてい「暗いか明るいか」という見え方——rendered brightness に近いもの——です。ところがゲームの内部で湧き判定に使われているのは、見え方ではなく数値のほうであり、しかもその数値が2系統に分かれています。
見えている明るさと、判定に使われている明るさが別物である。 ここが、湧き潰しでつまずく最初の分岐点です。
湧く条件は「かつ」であって「または」ではない
Minecraft Wikiの記述はこうです。敵mobが湧くには「internal sky lightが最大7以下」かつ「block lightが0」の両方が必要である、と。同ページには、internal sky lightは値が小さいほど湧き試行の成功回数が増えるという説明もあります。
ここで押さえたいのが、条件が2つあり、両方を満たしたときに湧くという構造です。裏を返せば、どちらか一方を崩せば湧きは止まります。
松明を置くという行為は、このうち block light を0より大きくする操作です。block lightが1でもあれば、その地点では条件が成立しません。「明るさ7以上にしないといけない」と思って松明を密に敷いていたなら、必要以上に敷いていた可能性があります。
一方で、逆の失敗もあります。block lightが0の地点が1マスでも残っていれば、そこは条件を満たしているということです。全体としては明るく見えていても、光が回り込まない一角があれば、そこだけが湧き場所になります。「だいたい明るくした」では足りない理由がここにあります。
光は「見た目の距離」では届かない
では block light はどこまで届くのか。同ページには、block lightは光源からの taxicab distance 1メートル(1ブロック)ごとに1ずつ減衰する、と書かれています。
taxicab distance とは、3つの軸方向の距離をそれぞれ足し合わせた距離のことです。たとえば光源から東に3ブロック、北に2ブロック、上に1ブロック離れた地点は、3+2+1で6として扱われます。見た目の直線距離では約3.7ブロックですが、光の計算上は6ブロック分です。
この差が、湧き潰しの取りこぼしを生みます。私たちは光源からの距離を、目で見た直線距離で感じ取ります。ところが減衰は軸ごとの合計で進むため、斜め方向は体感よりずっと早く暗くなります。 松明を等間隔に置いたつもりでも、斜めの奥まった位置に0の地点が残るのは、この計算のためです。
夜になっても sky light は下がらない
もうひとつ、直感に反する仕様があります。同ページによれば、sky lightの値は夜になっても減りません。 空に垂直に露出しているブロックのsky lightは15のままです。
では夜の暗さはどう扱われているのか。同ページは、夜間のmobの湧きは internal light values によって決まる、と説明しています。つまり、私たちが「夜だから暗い」と考えているものは、sky light そのものではなく internal sky light という別の値の話です。
オーバーワールドの internal light level は、internal sky light と block light のうち大きいほうの値(max)として扱われます。ネザーとエンドではsky lightが常に0であるため、実質的に block light だけで決まることになります。
この区別が効いてくるのは、屋根の扱いを考えるときです。sky lightの値そのものを見て「ここは15だから明るい、湧かない」と判断すると、夜の挙動を読み違えます。判定に使われているのは internal のほうです。
デバッグ画面の数字は、判定値そのものではない
ここまで来ると、デバッグ画面の見方も変わります。
デバッグ画面に表示される Client Light は、sky light と block light を合成した値(max)です。つまり2つの値のうち大きいほうしか見えていません。 湧き条件は2つの値それぞれに対して定められているため、合成された1つの数字からは、条件を満たしているかどうかを直接には読み取れません。
具体的には、こういう見落としが起きます。屋外の地点で Client Light が明るい値を示していても、その値がsky light由来であれば、block lightは0のままかもしれません。そして夜になれば internal sky light は下がります。昼間に明るい数字を確認して安心した場所が、夜には両方の条件を満たしている、という状況が成立します。
湧き潰しの確認を昼にやると取りこぼすのは、このためです。
雷雨のときだけ湧く場所がある理由
同ページには、雷雨時には internal sky light level が実質5であるかのように扱われ、敵mobが湧きやすくなるという記述があります。
これは、普段は湧かない場所で急に湧く現象の説明になります。internal sky light の条件は「最大7以下」ですから、通常の昼間であれば満たさない屋外の地点でも、雷雨時には5として扱われて条件に入ります。あとは block light が0であれば、両方の条件がそろいます。
「普段は大丈夫なのに、たまに湧く」という場所は、block lightが0のまま放置されている可能性が高いということです。天候という自分では制御できない変数によって条件が満たされるなら、制御できるほうの変数——block light——で塞いでおく、という判断になります。
確かなことと、まだ確かではないこと
確かなこと:明るさに3つの側面があり、光にsky lightとblock lightの2種類があること。敵mobの湧きに「internal sky lightが最大7以下」かつ「block lightが0」の両方が必要なこと。block lightがtaxicab distance 1ごとに1減衰すること。sky lightが夜間に減らず、湧き判定にはinternal sky lightが使われること。オーバーワールドのinternal light levelがmax(internal sky light, block light)であること。雷雨時にinternal sky lightが実質5として扱われること。
まだ確かではないこと:「以前は明るさ7以下で湧いた」といった過去のバージョンとの比較は、今回参照した範囲では確認していないため書いていません。またJava EditionとBedrock Editionで湧き条件に差がある可能性については同ページに言及がありますが、その差分の具体的な内容までは確認していません。エディションによって挙動が異なる可能性がある点は、実際に確認しながら進める必要があります。
判断軸の提示
「全体を明るくする」ではなく、「block lightが0の地点を無くす」と考えること。
明るさを1つの連続した量として捉えていると、作業は「もっと明るく」という方向にしか向かいません。しかし条件は2つの値それぞれに対して定義されており、そのうち block light は0か、0でないかという境界を持っています。
この置き換えをすると、作業の性質が変わります。
- 目標が量ではなく被覆になる — 「どれだけ明るいか」ではなく「0の地点が残っていないか」
- 確認すべき場所が絞れる — 斜め方向・奥まった位置・段差の下など、taxicab distanceが伸びる場所を優先する
- 確認する時間帯が決まる — 昼の合成値では判断できないため、夜または内部値で確認する
- 天候の変動に強くなる — internal sky light側は制御できないが、block light側は自分で決められる
自分でも試せる、最小の検証
湧いて困っている場所で、mobが実際に立っていた地点を1つ覚えておいてください。 そのうえで、その地点から最も近い光源までの距離を、直線ではなく軸ごとに数えて足した値で確認します。東西方向に何マス、南北方向に何マス、上下に何マス。
その合計が、光源の明るさの値以上になっていれば、その地点の block light は0です。松明の数を増やす前に、まずこの1点で「なぜそこだけ湧いたのか」が説明できるかを試すと、敷き直しの方針が変わります。
この記事で扱ったような「前提を1つ取り違えると努力の方向がずれる」構造は、ゲームの外でも起こります。自社の状況を整理したい場合は、無料診断ツールから始めることができます。
状況を整理する(15分)