Smukły czy klasyczny? Decydują 24 piksele – i dokładnie wiesz, które
Skórka jest smukła, jeśli mniej niż 6 z 24 pikseli w obszarze (46,20)–(47,31) jest nieprzezroczystych. Do tego pełna mapa UV, dlaczego starsze skórki 64×32 są lustrzane i dlaczego skórki Skały macierzystej 128×128 nigdy nie załadują się w Javie.
W pliku PNG skórki nie ma żadnej informacji „smukły”. Nie ma flagi, metadanych ani konwencji nazewnictwa — model jest wnioskowany na podstawie samego obrazu, poprzez sprawdzenie konkretnego prostokąta 2 × 12 i zliczenie, ile jego pikseli jest faktycznie obecnych.
Test
sample x 46–47, y 20–31 — 2 wide, 12 tall = 24 pixels
count pixels with alpha > 0
slim if fewer than 6 are opaque
Klasyczne ramiona mają 4 piksele szerokości; smukłe ramiona mają 3. Smukła skórka pozostawia zatem czwartą kolumnę ramienia pustą, a ta kolumna jest miejscem, nad którym znajduje się próbka. Dwadzieścia cztery piksele decydują o tym, jaki model nosi Twoja postać.
Próg wynosi 6 z 24, a nie 1 — ćwierć kolumny musi być wypełniona, zanim zostanie uznana za klasyczną. Ta tolerancja ma znaczenie: smukła skórka z kilkoma przypadkowymi pikselami w martwej kolumnie nadal jest odczytywana jako smukła, co jest pożądane, ponieważ te przypadkowe piksele są prawie zawsze błędem edycji, a nie zamierzeniem.
Oznacza to również, że tryb awarii jest cichy. Jeśli narysujesz klasyczną skórkę, ale tylko lekko użyjesz czwartej kolumny — cienki kontur, kilka pikseli cieniowania — możesz znaleźć się poniżej 6 i zostać automatycznie wykryty jako smukły, tracąc piksel szerokości ramienia bez żadnego wyjaśnienia. Jeśli skórka wyjdzie w niewłaściwym modelu, ta kolumna jest miejscem, w którym należy szukać przyczyny.
Mapa UV w całości
Każda część skórki to stały prostokąt, a każda ma warstwę nakładki gdzie indziej na arkuszu:
| część | podstawa | nakładka | przesunięcie | rozmiar |
|---|---|---|---|---|
| głowa | (8, 8) | kapelusz (40, 8) | 32 w prawo | 8 × 8 |
| ciało | (20, 20) | kurtka (20, 36) | 16 w dół | 8 × 12 |
| prawe ramię | (44, 20) | rękaw (44, 36) | 16 w dół | 4 × 12 |
| prawa noga | (4, 20) | spodnie (4, 36) | 16 w dół | 4 × 12 |
| lewe ramię | (36, 52) | rękaw (52, 52) | 16 w prawo | 4 × 12 |
| lewa noga | (20, 52) | spodnie (4, 52) | 16 w lewo | 4 × 12 |
Pięć z sześciu nakładek znajduje się dokładnie 16 pikseli od ich podstawy — ale nie w tym samym kierunku. Trzy oryginalne części idą 16 w dół. Lewe ramię i lewa noga, dodane później i wciśnięte w dolną połowę, gdzie nie było miejsca poniżej nich, idą zamiast tego 16 na boki — i w przeciwnych kierunkach względem siebie.
Kapelusz jest jedynym, który w ogóle nie jest oddalony o 16: znajduje się 32 w prawo, w tym samym rzędzie co głowa.
Zatem zasada „nakładka jest pod podstawą” obowiązuje dokładnie dla połowy arkusza. Kopiowanie prostokąta podstawy i przesunięcie go w dół, aby znaleźć jego nakładkę, działa dla ciała, prawego ramienia i prawej nogi, a dla pozostałych trzech cicho ląduje na niewłaściwej części.
Na smukłej skórce każdy prostokąt ramienia o szerokości 4 jest odczytywany jako 3 szerokości. Prostokąty się nie przesuwają; zmienia się tylko odczytywana z nich szerokość.
Starsze skórki 64 × 32 nie mają w ogóle lewej strony
Skórka sprzed wersji 1.8 ma wymiary 64 × 32 — dolna połowa arkusza po prostu nie istnieje, a to właśnie tam znajdują się lewe ramię i lewa noga. Nie ma z czego ich narysować.
Rozwiązaniem jest lustrzane odbicie: prawa noga (0, 16) jest kopiowana do (16, 48), a prawe ramię (40, 16) do (32, 48), oba odwrócone poziomo. Dlatego stare skórki są idealnie symetryczne, a nowoczesne nie muszą być — asymetria to jedyna rzecz, której format 64 × 32 nie może wyrazić, a każda stara skórka, którą konwertujesz, otrzymuje narzuconą symetrię, czy tego chce, czy nie.
Skórki Skały macierzystej 128 × 128 to inny format, nie większy
Java akceptuje 64 × 64 lub starsze 64 × 32. Skała macierzysta akceptuje 128 × 128 i nic innego. Przeglądarka żadnej z edycji nie może wyświetlić pliku drugiej — to nie jest różnica rozdzielczości, która się skaluje, to inny układ UV w innym rozmiarze.
To jest twarda ściana, a nie niedogodność. Skórka Java nie „skaluje się” do Skały macierzystej, a skórka Skały macierzystej załadowana do przeglądarki Java nie renderuje się w połowie rozmiaru — jest odrzucana. Edytor na tej stronie traktuje te dwie jako oddzielne kompilacje dokładnie z tego powodu.