Pillars of Eternity ‒ Grafika i rendering
W bardzo technicznej aktualizacji główny programista Adam Brennecke przedstawia postępy w ulepszaniu możliwości graficznych Eternity. Poznacie od kuchni m. in. proces tworzenia dynamicznego oświetlenia czy nowe możliwości renderowania scen.
Na podstawie: Graphics and rendering
Ponad rok temu w czterdziestej dziewiątej aktualizacji pokazaliśmy wam pierwszy filmik z Pillars of Eternity, przedstawiający piękną scenę w Dyrwood z kompletnym dynamicznym oświetleniem, cieniowaniem obiektów przestrzennych, dynamiczną wodą, wodospadem oraz cyklem dnia i nocy. W tej aktualizacji pokażemy wam od kuchni, jak te obrazy są ze sobą łączone i renderowane w grze. Przedstawię również nowe możliwości renderowania, które dodaliśmy przez ostatni rok, odpowiadając na sugestie naszych donatorów związane z wyglądem postaci. Ostrzegam, będzie bardzo technicznie!
Targi E3
Przez najbliższe trzy tygodnie wstrzymamy się z publikacją aktualizacji, ponieważ przygotowujemy się na E3 [coroczna wystawa gier komputerowych ‒ przyp. red.] w Los Angeles. Następną aktualizacją po targach E3 będzie Linia Frontu (wojownicy i barbarzyńcy).
Na targach E3 nasz zespół podczas zamkniętej prezentacji przedstawi Pillars of Eternity. Aby uniknąć spoilerów, nie zdradzimy wam szczegółów ‒ zobaczycie je sami, kiedy otrzymacie już grę. Chcemy jednak byście byli częścią tego wydarzenia, dlatego będziemy robić zdjęcia ze stoiska Paradox Entertainment [wydawcy PoE], a z czasem, w przyszłych aktualizacjach podzielimy się zrzutami ekranu z wersji demo. Aby zwiększyć apetyt, poniżej zapowiedź sceny, którą pokażemy na E3:
Czas na rendering
1. Tła
Jak wspominaliśmy wcześniej, nasze piękne tła są renderowane w Mayi w formacie obrazu 2D. To bardzo duże obrazki, czasami zajmujące kilka gigabajtów czystych danych. Zanim obraz trafi do gry, uruchamiamy program kompresujący dane. Maya renderuje tła w czterech warstwach lub “przejściach”: całościowej [final], głębi [depth], normalnej oraz koloru [albedo]. Przejścia te są ze sobą łączone w Unity w celu uzyskania cieniowania przestrzennego obiektów trójwymiarowych i dynamicznego światła w czasie rzeczywistym. Tła, które implementujemy do gry wyglądają jak dwuwymiarowe płaszczyzny, a w edytorze Unity cały świat ma dziwaczny przekrzywiony wygląd. Iluzja przestrzeni widoczna jest dopiero, gdy kamera rzutu perspektywicznego jest umiejscowiona pod perfekcyjnym kątem.
2. Postacie
Następnie nakładamy trójwymiarowy świat na dwuwymiarowy wyrenderowany obraz. Postacie mają formę dynamicznej trójwymiarowej oteksturowanej siatki, która jest animowana i renderowana do sceny przy użyciu różnorodnych materiałów i shaderów [program w grafice 3D opisujący właściwości pikseli i wierzchołków ‒ przyp red. za: wikipedia]. Podstawowe materiały, z których korzystamy przy większości postaci zawierają normalną mapę (dodającą niewielkie detale na szczegółach powierzchni), mapę rozbłyskową (dodającą efekt połysku) i mapę albedo (dodającą podstawowy kolor). Domyślny materiał wspiera również mapę odcieni, która pozwala projektantom na dostosowywanie kolorów zbroi, włosów czy skóry.
Posiadamy również inne shadery, które potrafią zmienić wygląd i styl postaci. Na przykład ‒ mamy metalowy shader dla zbroi dodający poziom połysku, dzięki czemu może się w niej odbijać otoczenie za pomocą mapy środowiskowej. Shader tkaniny usuwa efekty błyszczenia i pozwala projektantom postaci tworzyć ubrania z wełny, bawełny czy atłasu. Mamy też specjalne materiały, takie jak shader emisyjny, na którego w ogóle nie wpływa światło ‒ wykorzystywany przy boskich ognia, duchach, zjawach i oknach widocznych na zrzutach ekranu i na filmiku.
Ponieważ postacie są trójwymiarowe, muszą być oświetlane inaczej niż obraz tła. Wykorzystujemy system z dwoma światłami kierunkowymi. Pierwsze światło kierunkowe jest kluczowe ‒ zwykle odpowiada kolorowi i natężeniu światła słonecznego w scenach rozgrywających się na zewnątrz. To światło może być modyfikowane przez cykl dnia i nocy, tak aby na przykład emitować blask księżyca w czasie nocy. Drugie światło kierunkowe jest wykorzystywane jako wypełniacz, by obszar znajdujący się za bohaterem nie przepadł w totalnej ciemności. Oba rodzaje światła są dostosowane do każdej sceny, w zależności od ustawienia pre-rendowanego oświetlenia odpowiadającego kierunkowi słońca, tonacji czy pożądanego nastroju.
Dodatkowo do świateł kierunkowych wykorzystujemy dynamiczne światła odroczone, które mogą wpłynąć na tła i postacie. Na przykład pochodnia może oświetlać zarówno środowisko dwuwymiarowe jak również stojącego obok trójwymiarowego bohatera. Dodatkowo, światła odroczone są wykorzystywane w efektach czarów ‒ eksplozja kuli ognia emituje wybuch światła, rozjaśniający ciemne pomieszczenie lochu.
Synteza elementów
Podobnie jak wielu z was, zauważyliśmy, że po publikacji naszych pierwszych zrzutów ekranu postacie 3D nie pasowały do dwuwymiarowych scen tak dobrze, jak tego chcieliśmy. Zaczęliśmy się więc głęboko zastanawiać i wpadliśmy na nowy pomysł uwzględniający dynamiczny ambient i system kontroli cieni.
By upewnić się, że bohaterowie pasują do scen, wpadliśmy na system ambientu czerpiący kolor z dwuwymiarowego tła, symulujący makietę szybkiego i brudnego globalnego oświetlenia. Postacie odbijają subtelne wariacje kolorystyczne w zależności od miejsca, w którym stoją i środowiska, w jakim przebywają. Bohater stojąc w bujnej zielonej dżungli pobiera z otoczenia delikatny zielony odcień od światła odbijającego się od środowiska. Programiści gier uwielbiają szybkie i tanie metody, a system ambientu daje nam odpowiedni efekt, małym kosztem wydajności.
Ambient przed i po:
Kolejną opcją, którą ostatnio wdrożyliśmy w celu rozwiązania problemu z zapadaniem się bohaterów w scenę, jest system cieniowania trójwymiarowych postaci przekraczających ciemne, słabo oświetlone obszary obrazu dwuwymiarowego. Nowy system pobiera niskiej rozdzielczości mapę obrazu kontrolującą wkład słonecznego światła kierunkowego na bohatera. By uniknąć podwójnych cieni, ten sam obraz kontroluje walor dynamicznej mapy cieni. W końcu, aby lepiej dopasować dwuwymiarowe i trójwymiarowe cienie, barwimy dynamiczny cień, tak by pasował do koloru cieni 2D (które często mają w sobie nieco niebieskiego odcienia).
Mieszanie cieni, przed i po:
Aby powiązać wszystko w całość, możemy opcjonalnie dodać efekty poprocesowe. W tej scenie dodaliśmy bardzo subtelne zjawisko poświaty, wpływające zarówno na otoczenie, jak i postacie.
Mam nadzieję, że nie zgubiłem was w tej technicznej paplaninie! Najważniejsze, by efekt końcowy was zadowolił. Cieszymy się z obecnego postępu, ale zawsze znajdzie się kilka pomysłów na ulepszenie wyglądu i jakości grafiki. Poprawianie stylistyki gry będzie procesem ciągnącym się do premiery i po niej. Jeżeli macie pytania, proszę ‒ zadajcie je na naszym forum! Dzięki za poświęcony czas.