Nowa wersja Unity, to nowe bajery, rozwiązania i gadżety do wykorzystania przy produkcji gier. Co tym razem dostajemy?

Unity w wersji 5.6 zadebiutowało dosłownie parę dni temu. Będzie to ostatnia wersja Unity w takim systemem oznaczeń. Kolejne wersję oprogramowania będą oznaczane numerami: rok.versja. Czyli przykładowo: 2017.2. Zmiana ma na celu zwiększenie płynności dostarczania nowych aktualizacji. Pierwsze Unity 2017 ma się pojawić w kwietniu tego roku.

Wróćmy jednak do Unity 5.6, co takiego dostajemy z nową wersją?

Bajery graficzne

Na początek zaczniemy od tego czym Unity bardzo się chwali, czyli Progressive Lightmapper. Narzędzie, które powstało z powodu zapotrzebowania na lepsze efekty świetlne. We wcześniejszych wersjach konieczne było wypalanie mapy oświetlenia. Później dostawaliśmy średnio precyzyjny podgląd. Obecnie Unity w czasie rzeczywistym zestawia nam w widoku sceny wypaloną mapę oraz oświetlenie dynamiczne. Na początku na mniejszej precyzji, żeby zaraz dograć szczegóły. Dla oświetleniowców świetna sprawa, można sobie skrócić czas pracy.

Oświetlenie w trybie: Baked Indirect

Druga sprawa to pojawienie się Light Mode, które pozwalają zmieniać sposób tworzenia cieni. Decydują one o sposobie traktowania oświetlenia i cieniowania w czasie rzeczywistym oraz tego wypalonego. Dzięki temu, mamy większy wpływ na jakość cieni oraz wydajność samej gry.

Postprocesy

Jeszcze niedawno bardzo cieszyłem się z prezentacji narzędzi postprocesowych. Czyli jakieś blury, colorgrading etc. nakładane na finalny obraz z gry. Można otrzymać fajne efekty po najmniejszym koszcie. W momencie prezentacji bajerów było kilka, obecnie mocno poszerzyło się grono efektów. Mamy antyaliasing, mgłę, ziarno, motion blur, zasięg widzenia i wiele innych.

Wsparcie nowych technologii

Nie tak bardzo dawno temu internet obiegła wieść o Vulkanie. Czyli nowym API do GPU, które ma zastąpić poczciwego DirectX. Wyniki są świetne. Vulkan jest dużo wydajniejszy (W Unity 30-60% lepsza wydajność), a przy okazji zużywa mniej zasobów (88-90% mniejsze zużycie prądu). Szybkie wsparcie dla takiej technologii było tutaj kluczowe no i się pojawiło. Obecnie Unity wspiera Vulkana na Androidzie, Windowsie i Linuxie.

Dodatkowo Unity udostępnia wsparcie dla technologii wirtualnej rzeczywistości: OpenVR. Tutaj nie ma za bardzo co tłumaczyć. Natomiast ciekawostką może być wsparcie dla Metalu. Dokładniej dla Metal 1.1, czyli języka shaderów.

Unity wspiera teraz Nintendo Switch

Kojarzycie może TextMesh? Jest to dodatek do Unity, który krążył sobie po Unity Asset Store i był tam jednym z popularniejszych narzędzi. Co to takiego? W skrócie można powiedzieć, że Word do pól tekstowych (GUI Text i UI Text). Można mieszać czcionkami, akapitami, ustalać wysokość linii, marginesy i inne cuda. Czemu o tym mówimy? Bo razem z nowym Unity, narzędzie zostało udostępnione za darmo na Asset Sotre. Wraz z Unity 2017 stanie się integralną częścią silnika.

Kolejna gratka dla fanów nowych technologii to wsparcie dla Google Daydream oraz Cardboard VR. Czyli ponownie wsparcie dla technologii wirtualnej rzeczywistości. Ale to nie wszystko! Wsparcia doczekał się również… Nintendo Switch! To wciąż nie wszystko bo wsparcie otrzymał również Facebook Gameroom. Co prawda w wersji testowej, ale Unity wspiera również WebAssembly, czyli technologię cross-platformowego wykorzystania WebGL.

Optymalizacja

Nic nie robi takiego efektu jak masa obiektów na scenie. Procedural Instancing, bo onim tu mowa był dostępny już we wcześniejszych wersjach Unity. Narzędzie dawało możliwość tworzenia wielu instancji jednakowych obiektów (opisanych wyglądem tej samej siatki – mesha), ale różniących się parametrami (pozycja, rotacja). Nie będę wnikał w szczegóły procesu generowania takich cudów, ale to właśnie ten proces został zmieniony, dzięki czemu dalej jest to możliwe, ale przy dużo mniejszym zużyciu procesora.

Procedural Instancing

Ulepszeniu uległy również systemy cząsteczkowe. Już wcześniej dało się modyfikować pewne zmienne z poziomu skryptu lub shadera, aby urozmaicić efekt. Teraz Unity dostarcza te narzędzia z poziomu okna Inspektor, co jeszcze bardziej uproszcza proces tworzenia fajnych efektów cząsteczkowych. Druga sprawa, to umożliwienie pracy nad kilkoma efektami cząsteczkowymi na raz. Czyli jak chcemy zmienić parametry w kilku identycznych obiektach, nie trzeba ich kopiować, a można zaznaczyć wszystkie na raz.

Zmienił się również sposób emisji cząstek. Wcześniej odbywało się to losowo, teraz można wybrać kształt wg. którego ma się to odbywać. Dzięki mamy większy wpływ na sposób emisji, a tym samym na zastosowanie takich efektów. Dodatkowo całość została zoptymalizowana i zużywa mniej zasobów.

Nowe możliwości w tworzeniu efektów cząsteczkowych

Chcieliście kiedyś uruchomić film w Unity? Player został napisany od nowa ze wsparciem sprzętowym. Teraz filmy można uruchamiać nawet w rozdzielczości 4K. Mało? Wsparcie dla filmów w 360 stopniach również się pojawiło. Żeby nie było niedomówień, odtwarzanie filmów było możliwe, tylko teraz można to zrobić lepiej i ładniej.

Ogromne zmiany przeszedł NavMesh. Po pierwsze zoptymalizowano jego działanie, ale to największa pierdoła. Fajny bajer, to dodanie komponentu NavMeshSurface, dzięki któremu obszar nawigacyjny jest niezależny od osi świata, a można go budować na obiekcie. Co to daje? Wykorzystanie w grach 2D. Dodatkowo możemy tworzyć kilka NavMeshy w obrębie jednej sceny. Silnik daje nam też do dyspozycji różnych agentów, tym samym nie musimy wszystkich postaci dostosowywać do wysokości 2 jednostek i szerokości 1. Można mieć kilka wariantów. Na koniec, fajna rzecz optymalizacyjna, czyli możemy sobie wypalić taki kawałek siatki nawigacyjnej jaki nam potrzebny. Nie trzeba wypalać całej sceny. Oszczędność czasu i zasobów.

Wsparcie 2D

Jako że Unity jest jednym z lepiej wspierających 2D silników, nie mogło zabraknąć bajerów dla tego typu gier. Nowa rzecz, to sortowanie grup. Można w łatwy sposób pozmieniać kolejności różnych obrazków, dzięki czemu mijające się postaci będą przechodzić za sobą, a nie przez siebie. Drugi bajer to outline editor, który pozwala nadać grafice zewnętrzny kształt z poziomu edytora spirtów. Przedostatnia ciekawa rzecz to 9-Slice sprite, czyli kopia znanej z UI techniki, która ma pozwolić wykorzystać jeden obiekt w różnych wariantach rozmiaru czy miejsca, nie wykorzystując dodatkowych zasobów na przechowywanie tekstur.

Warstwy poprawiają wygląd gier 2D

Również ogromne zmiany przeszedł silnik fizyki w grach 2D. Dostajemy nowe typy Colliderów, możemy pobrać więcej danych o kolizjach, w tym o nakładaniu się obiektów, czy o colliderach podpiętych do danego ciała stałego.

Inne bajery

Na koniec parę rzeczy dość krótkich, nie mniej ważnych, ale nie pasujących nigdzie indziej. Po pierwsze poprawiono optymalizację UNet. Powinno być szybciej i stabilniej. Po drugie, dodano narzędzie do debugowania fizyki. Prosta wizualizacja pokazująca gdzie zachodzi kolizja, a gdzie powinna. Wsparcie dla debuggera iOS. Wszystkie natywne crashe trafią również do Unity Performance Reporting. Dodano kilka usprawnień do będącego w becie Unity Collaborate: publikowanie wybranych plików, ignorowanie plików, przywracanie poprzedniego stanu. Dla przypomnienia: Unity Collaborate to narzędzie do współtworzenia projektu, czyli desygnowana Unity wersja systemu kontroli wersji takiego jak Git czy SVN. Na koniec: poprawiono wygląd edytora oraz dodano nowe fizyczne zależności, takie jak określenie jakie przesunięcie musi nastąpić, żeby dwa obiekty przestały ze sobą kolidować.

Podsumowanie

Lista zmian jak zawsze jest ogromna. Jedna bardzo przydatne inne kosmetyczne, część bardzo fajna dla pewnej grupy twórców. Ja osobiście chętnie przetestuje nowe możliwości 2D w trakcie tworzenia kursu. Również chętnie pobawię się nowymi efektami oświetlenia oraz efektami postprodukcyjnymi. Co dla was jest najciekawsze?