kakaki soft

// DZIENNIK TWÓRCY · 6 min czytania · Krzysztof Pliszka

Uczę się Blendera

W Mojej stadninie konie i inne zwierzęta mają teraz modele 3D z Blendera. Nie rzeźbię ich jednak myszką, tylko opisuję liczbami w skryptach. Opowiadam, czego się uczę i jak gra rośnie wersja po wersji.

Dlaczego w ogóle Blender

W poprzednim wpisie pisałem, że ludziki w moich grach nie powstają w programie 3D, tylko z kodu. To nadal prawda dla większości postaci. Ludzik z kul, zaokrąglonych pudełek i kapsuł (walców z półkulami na końcach) wygląda sympatycznie, a przy tym łatwo go zmieniać. Przy koniu ta metoda zaczęła jednak zawodzić.

Koń zbudowany z kapsuł wyglądał sztywno, jak zabawka z klocków. A koń to mięśnie na łopatkach i zadzie, szyja, która płynnie przechodzi w tułów, duże oczy, nozdrza, uszy z wnętrzem, grzywa w puklach i długi ogon. Tego się z prostych brył nie da dobrze zrobić. Dlatego zacząłem się uczyć Blendera, czyli darmowego programu do grafiki 3D.

Od razu zaznaczam, żeby nie było nieporozumień: uczę się go, ale nie rzeźbię w nim ręcznie. Gry robię sam i po godzinach, a w stadninie jest osiem ras koni, źrebięta, krowy i sarny. Ręczne rzeźbienie każdego z nich w wielu wariantach byłoby ponad moje siły. Blender ma jednak coś, co mi pasuje: można go sterować skryptami w Pythonie. Piszę więc opis zwierzęcia, a program robi resztę.

Jak to działa, w prostych słowach

Wyobraź sobie plastelinę. Z kilku kulek i wałków lepisz konia, a potem wygładzasz miejsca, w których kawałki się stykają, aż powstanie jedna ciągła bryła. W skrypcie robię to samo, tylko liczbami. Opisuję, jak gruba jest szyja, jak długa głowa, jak mocne mięśnie, a Blender zlewa te kształty w jedną gładką bryłę, bez szwów i bez przenikających się części.

Potem przychodzi uproszczenie. Powierzchnia modelu to siatka, czyli mnóstwo malutkich trójkątów. Im więcej trójkątów, tym ładniej, ale tym ciężej dla telefonu. Blender zmniejsza ich liczbę tak, żeby kształt prawie się nie zmienił.

Każdy model robię w dwóch poziomach szczegółów:

  • dokładny, do zbliżeń, na przykład gdy kamera jedzie tuż za jeźdźcem albo szczotkujesz konia z bliska;
  • prostszy, do codziennej gry, gdy na ekranie jest kilkanaście koni naraz.

Z daleka nikt nie zauważy, że koń ma mniej trójkątów, a gra dzięki temu działa płynnie. Na koniec model zapisuje się jako mały plik, który przeglądarka wczytuje przy starcie gry. Plik jest skompresowany. Model jednej krowy to około 80 kilobajtów, a sarny około 62, czyli mniej niż niejedno zdjęcie.

Rząd koński też robi się sam. Czaprak, popręg i owijki na nogach to „skorupy” zrobione na powierzchni konia, więc pasują do każdej rasy bez ręcznego dopasowania. Wszystkie moje zasady spisałem w tych skryptach, więc mogę je uruchomić od nowa, gdy coś poprawię.

Czego się nauczyłem, czyli moje błędy

Nauka to w dużej części lista wpadek. Oto kilka z nich.

Guzki i „tarcze”. Tam, gdzie dwa kształty się łączą, na przykład szyja z tułowiem, lubią się robić nieładne zgrubienia. Raz zad konia „ciągnął” za ogonem przy kłusie i galopie i tworzył się guzek pod ogonem. Innym razem koniec jednego kształtu wystawał z szyi jak igła. Takie igły i guzki psuły całe wrażenie.

Szukanie liczeniem, nie na oko. Na oko łatwo coś przeoczyć, zwłaszcza gdy długo patrzy się na ten sam model. Dlatego sprawdzam kształty liczbami: dla każdego punktu siatki liczę, jak bardzo odstaje od swoich sąsiadów. Tam, gdzie odstaje za mocno, siedzi guzek. Potem wracam do obrazka i oglądam konkretne miejsce z bliska.

Obrazek-wzór obok renderu. Przy postaci stajennego mam obrazek-wzór, jak ma wyglądać, i obok niego renderuję to, co wyszło z Blendera. Render to obraz policzony z modelu. Porównuję oba i poprawiam różnice. Z takich porównań wzięły się uwagi do postaci, które mam zapisane:

  • bark i rękaw powinny tworzyć jedną gładką linię, bez kanciastych barków;
  • głowa ma być okrągła, z dużymi oczami i refleksem światła;
  • podeszwa jest częścią buta, a nie osobnym klockiem;
  • łokcie są lekko zgięte, bo sztywne ręce wyglądają dziwnie.

Poprawiałem też kolor skóry. Na wzorze była ciepła brzoskwinia, a w moim renderze wychodziła blada. Okazało się, że winne było tonowanie kolorów w podglądzie. Dopiero po ujednoliceniu go z tym, co robi gra, kolory zaczęły się zgadzać.

Moja stadnina wersja po wersji

Gry nie robię jednym wielkim skokiem, tylko małymi krokami. Każda wersja to konkretna nowość, a przed wydaniem sprawdzam ją testami. Testy uruchamiają grę bez okna i pilnują, żeby zmiana niczego nie zepsuła, na przykład starych zapisów.

Poprowadź konia (wersja 0.9.0). To był największy krok. Gracz może sam jechać na koniu w widoku zza pleców, klawiaturą albo dotykiem na telefonie. Ma własną postać: właściciela stadniny albo dziecko właściciela, z wyglądem do ułożenia w menu. Dziecko uczy się jazdy jak uczniowie, w trybie nauki z poleceniami instruktora. Są skoki, a na zawodach można się zgłosić samemu przyciskiem „Zgłoś siebie”. Do tego szczotkowanie i mycie konia z bliska oraz jazda po terenie wokół stadniny, z łąkami, leśnymi dróżkami i krowami. Dziecko w teren jedzie tylko z instruktorem. Gra nie udaje przy tym nauki jazdy konnej i nie daje fachowych porad, a koniom nic złego się nie dzieje.

Potem przyszły wersje z modelami z Blendera:

  • 0.9.1: nowe modele wszystkich ośmiu ras koni, z siodłem, ogłowiem i owijkami;
  • 0.9.2: nowy stajenny, w stylu chibi, z dłońmi z palcami;
  • 0.9.3: postać gracza przenosi się razem z zapisem między urządzeniami;
  • 0.9.4: źrebięta, derka i uprząż do sań;
  • 0.9.5: krowy i sarny.

Konie pochodzą teraz z Blendera, ale stary generator z kodu zostawiłem w zapasie, na wypadek gdyby model się nie wczytał. Nagrałem też nowy zwiastun, już na nowej wersji gry.

Krowy i sarny: dużo zwierząt za jednym zamachem

Na łąkach wokół stadniny pasą się krowy i skaczą sarny, więc zwierząt bywa dużo. Zrobiłem po jednym modelu na gatunek, a gra rysuje wiele jego kopii naraz, każdą w innym miejscu. Dla karty graficznej to jedna robota, a nie kilkadziesiąt.

Ruch też liczy karta graficzna. Krowy machają ogonem i na zmianę skubią trawę, a sarny uciekają w skokach. Model dostaje „wagi”, czyli informację, jak mocno dana część porusza się przy każdym ruchu: ogon przy machaniu, głowa przy skubaniu, nogi przy biegu. Dzięki temu zwierzęta nie potrzebują kosztownego szkieletu.

Krowy są łaciate w kilku wariantach: różne układy łat, czarne albo brązowe. Wszystkie siedzą w jednym modelu, a gra wybiera wariant dla konkretnej krowy i zapamiętuje go dla danego miejsca.

Tu trafiłem na ścianę. Karta graficzna w przeglądarce przyjmuje tylko ograniczoną liczbę danych na każdy punkt modelu, a warianty łat zjadły ich za dużo. Musiałem je „spakować”, czyli upchnąć kilka wartości w jednej. Dopiero wtedy wszystko się zmieściło.

Co dalej

Do zrobienia zostało jeszcze dużo. Chciałbym, żeby kolejne postacie, czyli jeźdźcy, dzieci i inne role, też pochodziły z Blendera, ale na razie z nowych modeli korzysta tylko stajenny. Wciąż dopracowuję dłonie, bo to one są najtrudniejsze. Nie obiecuję dat, bo robię to po godzinach, dla frajdy.

Najważniejsze, czego się nauczyłem: nawet nowe narzędzie da się wpuścić do gry małymi krokami. Najpierw jeden koń, potem osiem ras, potem źrebięta, w końcu krowy i sarny. Przy każdym kroku coś się psuje, coś poprawiam i idę dalej.

Gry tworzy po godzinach, dla frajdy, jedna osoba: Krzysztof Pliszka (kakaki soft). O studiu →

Inne wpisy w dzienniku