Przygotowywanie assetów w My Memory of Us: Importer PSD

By:
Posted: 26/10/2018

Cześć!

Upłynęła chwila od kiedy publikowaliśmy coś na blogu – premiera gry była dla nas najbardziej gorącym okresem w historii studia (wielkie dzięki dla naszych przyjaciół z Crunching Koalas za pomoc w temacie!). Ale dzisiaj mamy okazję pokazać Wam jedno z naszych najważniejszych narzędzi.

Na samym początku, podczas fazy prototypowania, nie zajmowaliśmy się przesadnie assetami graficznymi. Jak mogliście zobaczyć w poprzednim poście, poziomy są wykonane za pomocą bardzo prostych placeholderów. Niestety, bez grafiki poziomy są, oględnie mówiąc, dość nudne. Na jakimś etapie trzeba wypełnić puste przestrzenie sprite’ami.

Projektując grafikę, przyświecały nam dwa cele – z jednej strony chcieliśmy, żeby łatwo można było używać assetów wielokrotnie, a z drugiej – żeby każdy poziom miał swój własny, unikalny charakter. To popchnęło nas do wyprodukowania dużych paczek assetów, przewidzianych do rozmieszczenia w silniku. Joanna, projektantka grafiki, przygotowywała atlas sprite’ów, projektanci poziomów cięli je w Unity za pomocą Sprite Edytora i rozstawiali ręcznie, kawałek po kawałku. W tym celu używaliśmy pełnowymiarowych „podkładek”, które staraliśmy się odtworzyć w Unity, kawałek po kawałku, wyszukując sprite’y po typie albo lokacji, do której powinny pasować.

To był horror. Naprawdę, wypełnienie obszaru (a każdy poziom ma ich kilka) zajmowało godziny ręcznej roboty. Po wypełnieniu kilku scen w ten sposób, wiedzieliśmy, że koniecznie musimy znaleźć lepsze rozwiązanie.

I w zasadzie było ono dość oczywiste – potrzebowaliśmy importować pliki PSD (format Photoshopa) do Unity, zachowując odpowiednie informacje. To, czego szukaliśmy to pozycja sprite’a, jego rozmiar i rotacja. Dodatkowo musieliśmy atuomatycznie generować sprite’y w taki sposób, żeby utrzymać system nazewnictwa i uniknąć powtórek w przypadku obrazów pojawiających się na różnych poziomach. Ostatnim wymogiem było, by rozwiązanie było maksymalnie uproszczone w obsłudze.

Koniec końców wygląda to następująco:



I nie sądzimy, by dało się prościej!

Pliki PSD są gigantyczne, więc trzymamy je poza folderem projektu – Importer pozwala nam się do nich dostać pomimo ograniczeń, które posiada Unity. Po tym jak wybierzemy plik, widzimy kolejne okno:



Tutaj możemy znaleźć konkretne obiekty, jeśli zachodzi taka potrzeba. Te obiekty to w istocie warstwy w Photoshopie, wycięte w taki sposób, żeby ignorować obszary ze 100% przezroczystości. Kiedy tworzymy je pierwszy raz, nazywamy je „xxxx_MAIN” w Photoshopie – są widoczne na kolejnym obrazku. Mainy to nasze „oryginalne” sprite’y. Kiedy importer znajduje kolejny sprite z taką samą nazwą, porównuje go do maina i w ten sposób możemy określić skalę nowego obiektu. Niestety, okazało się, że nie mamy możliwości zachowania informacji o rotacji – Photoshop zawsze widzi warstwy jako idealne prostokątne w osi x/y. Obrócone sprite’y importowane są z dużym zniekształceniem, więc po prostu szukamy ich wzrokiem i naprawiamy ręcznie – tak czy inaczej wiemy, jaki sprite został użyty w konkretnym przypadku.



 

Po naciśnięciu „Create Scene” dostajemy obiekt ze wszystkimi spritemi posortowanymi według ich kolejności na warstwach. Jedyne co musimy zrobić to poprawić rotację, wrzucić na warstwy paralaksy (co można robić hurtowo w Hierarchii w Unity) i sprawdzić przyciemnienie – niektóre assety sporadycznie są jaśniejsze niż potrzeba na scenie. Mimo to, ten proces zabiera jedynie godzinę – dwie, a nie 3 dni. I sprawia, że zbudowanie poziomu jest DUŻO bardziej przyjemne!

Radosław Smyk