Poradniki / Budowanie i zasoby
Piksel mapy to jeden bajt, a dwa z jego bitów to jasność
61 kolorów bazowych × 4 odcienie = 244 kolory z tablicy o rozmiarze 16 384 bajtów. Tylko jeden z czterech odcieni to pełna wartość koloru; pozostałe trzy są przyciemnione do 86%, 71% i 53%.
Każda wypełniona mapa w Minecraft ma ten sam rozmiar na dysku: tablica colors bajtów o dokładnie 16 384 wpisach, czyli 128 × 128. Dotyczy to zarówno mapy w wielkości 0, obejmującej 128 bloków, jak i mapy w wielkości 4, obejmującej 2 048 bloków — liczba pikseli nigdy się nie zmienia. Wszystko inne w sztuce mapowej wynika z tego jednego faktu.
Bajt dzieli się na dwie części
Każdy z tych 16 384 bajtów nie jest kolorem. To kolor bazowy i odcień spakowane razem:
baseColorId = colorId >> 2 // 0–63
shadeIndex = colorId & 3 // 0–3
Zatem dwa najniższe bity to jasność, a reszta mówi, na jaki blok patrzysz. Przy 61 zdefiniowanych kolorach bazowych (id 0 to przezroczysty/nieodkryty slot) najwyższy bajt, jaki przechowuje prawdziwa mapa, to 61 × 4 + 3 = 247.
61 × 4 = 244 odrębne kolory, czyli cała paleta dostępna dla sztuki mapowej. Nie 61 i nie 256.
Tylko jeden odcień to pełna wartość koloru
Cztery mnożniki nie są równomiernie rozłożone, a jeden z nich wynosi 1,0:
| indeks odcienia | mnożnik | jako procent |
|---|---|---|
| 0 | 180 / 255 | 70,6% |
| 1 | 220 / 255 | 86,3% |
| 2 | 255 / 255 | 100% |
| 3 | 135 / 255 | 52,9% |
Odcień 2 to własne RGB koloru mapy, nieskalowane — stała wartość dla danego id koloru, nie pobierana z tekstury bloku. Pozostałe trzy to jego ciemniejsze wersje, a najciemniejszy — odcień 3 — ma zaledwie nieco ponad połowę jasności.
Właśnie dlatego schodkowa sztuka mapowa wygląda tak inaczej niż płaska. Płaska budowla daje tylko normalny odcień (86%), więc płaska mapa ma do dyspozycji 61 kolorów. Zmienianie wysokości odblokowuje jaśniejsze i ciemniejsze odcienie każdego bloku i przenosi cię do 183. Paleta nie staje się szeroka — nie zyskujesz nowych barw — staje się trzykrotnie głębsza pod względem jasności, a to właśnie jest potrzebne do ditheringu. Czwarty odcień (53%) nigdy nie powstaje z bloków: istnieje w formacie bajtowym i korzysta z niego wyłącznie edytowany plik mapy.
Zauważ też, że kolejność odcieni nie jest monotoniczna: indeks 3 jest najciemniejszy, a nie najjaśniejszy. Sortowanie po indeksie w oczekiwaniu gradientu daje 71%, 86%, 100%, 53%.
Wielkości mnoży powierzchnię, nigdy rozdzielczość
Pole scale przyjmuje wartości 0–4, a teren, który obejmuje, ma 128 × 2^scale bloków na bok:
| wielkości | obejmowane bloki | jeden piksel mapy to |
|---|---|---|
| 0 | 128 × 128 | 1 blok |
| 1 | 256 × 256 | 2 × 2 bloki |
| 2 | 512 × 512 | 4 × 4 bloki |
| 3 | 1 024 × 1 024 | 8 × 8 bloków |
| 4 | 2 048 × 2 048 | 16 × 16 bloków — dokładnie jeden chunk |
Mapa w wielkości 4 obejmuje 256 razy większy obszar niż mapa w wielkości 0, używając tych samych 16 384 bajtów. To jest cały powód, dla którego sztukę mapową trzeba budować w wielkości 0: przy każdym innym przybliżeniu jeden piksel to średnia kilku bloków, a obraz, który starannie ułożyłeś, zostaje przeliczony i zatarty.
Wiersz dla wielkości 4 warto zapamiętać z innego powodu — jeden piksel to dokładnie jeden chunk, co czyni w pełni przybliżoną mapę użyteczną siatką chunków.
Co to oznacza dla uszkodzonego pliku
Jeśli plik mapy (data/minecraft/maps/<id>.dat w folderze świata) ma tablicę colors, która nie ma 16 384 bajtów, to nie jest mapa z brakującymi pikselami: gra nadal wczytuje mapę, ale wyrzuca piksele i pokazuje ją jako pustą. Nie istnieje forma o częściowej długości. Tablica zawsze ma pełny rozmiar, a nieodkryte obszary są przechowywane jako id koloru 0, a nie pomijane.