Summoners War: Chronicles US(WW) i KR autorstwa Com2uS korzysta z Vulkana wyłącznie do renderowania na Androidzie, co zapewnia wzrost wydajności nawet o 30%.
Vulkan to nowoczesny, wieloplatformowy interfejs API do obsługi grafiki 3D, który został zaprojektowany tak, aby zminimalizować abstrakcję między sprzętem do obsługi grafiki na urządzeniu a grą. Vulkan ma mniejsze obciążenie procesora niż OpenGL ES i oferuje szerszy zakres funkcji.

Funkcje renderowania
Firma Com2uS opracowała zaawansowane funkcje renderowania w grze Summoners War: Chronicles, w tym:
- Niestandardowy system opóźnionego renderowania z wycięciem światła przed renderowaniem i do 16 aktywnych świateł w widoku frustum jednocześnie
- metoda instancjonowania pośredniego (nazywana
Clay
) do rysowania wielu siatek, materiałów i tekstur naraz; - intensywne korzystanie z shaderów obliczeniowych do zadań wstępnych renderowania;
- Możliwość dynamicznego dostosowywania renderowania cieni i efektów postprodukcyjnych na podstawie ruchu kamery, opcji graficznych i wydajności w czasie działania
Uwzględnienie sprzętu mobilnego
Summoners War: Chronicles używa tego samego renderera na urządzeniach z Androidem, komputerach osobistych i specjalnych konsolach do gier. Aby uzyskać optymalną wydajność na sprzęcie mobilnym, Com2uS dostosował ustawienia renderowania, w tym głębię i gęstość rysowania. Aby uwzględnić niektóre urządzenia z Androidem 11 (poziom interfejsu API 30) lub niższym, Com2uS utworzyła alternatywne wersje niektórych shaderów i użyła mniejszej liczby instancji. Summoners War: Chronicles korzysta też z funkcji adaptacyjnej wydajności na Androidzie, aby dynamicznie dostosowywać opcje graficzne do warunków termicznych urządzenia.
Uzasadnienie dotyczące tylko interfejsu Vulkan
Firma Com2uS używała Vulkana wyłącznie w grze Summoners War: Chronicles z kilku powodów:
- Minimalne wymagania dotyczące urządzeń z wyłączeniem starszych, mniej wydajnych urządzeń bez obsługi Vulkana
- Dostosowywanie silnika Unity Wbudowany potok renderowania (BiRP) wymagane funkcje dostępne tylko w backendzie Vulkan gry
- Funkcje renderowania korzystające z wyjścia shadera obliczeniowego i obiektów bufora pamięci shadera (SSBOs) można implementować w Vulkan, ale nie w OpenGL ES.
Zadania przetwarzania
Summoners War: Chronicles wykonuje wiele obliczeń za pomocą shadera obliczeniowego, aby wygenerować dane do renderowania. Shadery obliczeniowe służą do:
- Wycinanie obiektów
- Kontrola po kolizji
- Zadania dotyczące animacji
- Generowanie danych do renderowania pośredniego
Wyniki obliczeń są zapisywane w obiektach RWBuffer silnika Unity. Aby osiągnąć optymalną wydajność, Summoners War: Chronicles wykonuje wszystkie zadania obliczeniowe za pomocą pojedynczego rozkładu, co wymaga jednoczesnego użycia wielu buforów RW. Takie podejście było możliwe tylko przy użyciu Vulkana, ponieważ backend BiRP OpenGL ES w Unity obsługuje tylko jednoczesne używanie jednego RWBuffera.
Zestawy danych generowane na potrzeby renderowania są często większe niż limity rozmiaru urządzenia dla obiektów UBO. Summoners War: Chronicles używa zamiast tego obiektów bufora pamięci Shader (SSBO), które mają większe limity pojemności. Jednak wiązanie usług SSBO z operacjami etapu wierzchołka wymaga obsługi usługi SSBO tylko do odczytu. OpenGL ES obsługuje tylko SSBO z możliwością odczytu i zapisu, a Vulkan może oznaczać SSBO jako tylko do odczytu.
Rendering z użyciem instancjonowania pośredniego w Clay
W przypadku gry Summoners War: Chronicles firma Com2uS opracowała metodę grupowania wielu materiałów, siatek i tekstur w jednym wywołaniu funkcji rysowania. Firma Com2uS nazywa ten system Clay. Clay poprawia wydajność gry o 30% dzięki znacznemu zmniejszeniu liczby wywołań funkcji draw.
Clay rozpoczyna działanie w fazie odrzucania i kolizji, tworząc listę widocznych obiektów do renderowania. Następnie Clay generuje informacje o renderingu dla każdego zidentyfikowanego obiektu w ramach SSBO. Ten proces jest wykonywany za pomocą shaderów obliczeniowych, które umożliwiają użycie pośredniego renderowania instancji za pomocą funkcji DrawMeshInstancedIndirect w renderze Unity. W przypadku renderowania pośredniego informacje o instancjach i parametry liczby instancji są generowane bezpośrednio na karcie graficznej. Podczas rysowania obiektów zamiast wiązania tradycyjnej siatki obiektu Clay wiąże siatkę stożka, jak pokazano na ilustracji:

Następnie Clay przekształca siatkę stożka w shaderze wierzchołkowym, używając powiązanego SSBO danych transformacji wierzchołkowej wygenerowanych przez shadery obliczeniowe. Powiązanie SSBO z etapami wierzchołków wymaga użycia Vulkana. Clay może używać wielu przekształconych wierzchołków do renderowania pojedynczego obiektu. Liczba rożków zależy od złożoności obiektu.

Dane materiału dla obiektów są grupowane w innym buforze generowanym przez shadery obliczeniowe. Bufor jest powiązany z shaderem fragmentów. Tekstury rysowanych obiektów są konfigurowane w tablicy tekstur. Indeksy tablic tekstur obiektu są zawarte w danych materiału obiektu. W idealnych warunkach Clay może renderować z maksymalnie 7 wywołaniami rysowania:
- Obiekty statyczne
- Animowane obiekty
- Cienie (4 iteracje)
- Refleksje
Unity plus Vulkan
Summoners War: Chronicles pokazuje, że potężna kombinacja silnika gier Unity i interfejsu Vulkan Graphics API umożliwia deweloperom tworzenie zaawansowanej grafiki w jakości konsolowej na urządzeniach z Androidem.