Com2uS menggunakan Vulkan untuk mendapatkan grafis yang lebih baik

Screenshot logo judul game dari Com2uS Chronicles.

Summoners War: Chronicles US(WW) dan KR oleh Com2uS secara eksklusif menggunakan Vulkan untuk rendering di Android, dengan peningkatan performa hingga 30%.

Vulkan adalah API grafis 3D lintas platform modern yang dirancang untuk meminimalkan abstraksi antara hardware grafis perangkat dan game Anda. Vulkan memiliki overhead CPU yang lebih rendah dibandingkan dengan OpenGL ES, dan Vulkan menawarkan fitur yang lebih luas.

Gambar 1. Screenshot dalam game.
Gambar 2. Video dalam game.

Fitur rendering

Com2uS mengembangkan fitur rendering lanjutan untuk Summoners War: Chronicles, termasuk:

  • Sistem rendering kustom yang ditangguhkan dengan pemusnahan cahaya pra-render dan hingga enam belas lampu aktif dalam frustum tampilan secara bersamaan
  • Metode instance rendering tidak langsung (disebut Clay) untuk menggambar banyak mesh, material, dan tekstur sekaligus
  • Penggunaan shader komputasi secara luas untuk tugas pra-rendering
  • Kemampuan untuk menyesuaikan rendering bayangan aktif dan efek pascapemrosesan secara dinamis berdasarkan gerakan kamera, opsi grafis, dan performa runtime

Akomodasi hardware seluler

Summoners War: Chronicles menggunakan perender yang sama untuk perangkat Android, komputer pribadi, dan konsol game khusus. Untuk mencapai performa yang optimal pada hardware seluler, Com2uS menyesuaikan setelan rendering, termasuk kedalaman dan kepadatan gambar. Untuk mengakomodasi perangkat tertentu yang berjalan di Android 11 (level API 30) dan yang lebih rendah, Com2uS membuat versi alternatif dari beberapa shader dan menggunakan jumlah instance yang lebih rendah. Summoners War: Chronicles juga menggunakan fitur performa adaptif di Android untuk menyesuaikan opsi grafis secara dinamis sebagai respons terhadap kondisi termal perangkat.

Alasan khusus Vulkan

Com2uS menggunakan Vulkan secara eksklusif untuk Summoners War: Chronicles karena beberapa alasan:

  • Persyaratan perangkat minimum mengecualikan perangkat lama dan kurang canggih yang tidak memiliki dukungan Vulkan
  • Penyesuaian fitur yang diperlukan Mesin Unity Pipeline Render Bawaan (BiRP) hanya tersedia di backend Vulkan game
  • Implementasi fitur rendering menggunakan output shader komputasi dan objek buffer penyimpanan shader (SSO) dapat dilakukan di Vulkan, tetapi tidak di OpenGL ES

Workload komputasi

Summoners War: Chronicles melakukan tugas shader komputasi yang signifikan untuk menghasilkan data untuk rendering. Shader komputasi digunakan untuk:

  • Penghapusan objek
  • Pemeriksaan tabrakan
  • Tugas animasi
  • Pembuatan data rendering tidak langsung

Data komputasi yang dihasilkan akan ditulis ke objek RWBuffer engine Unity. Untuk mencapai performa yang optimal, Summoners War: Chronicles menjalankan semua tugas komputasinya dengan satu pengiriman, yang memerlukan penggunaan beberapa RWBuffer secara bersamaan. Pendekatan ini hanya dapat dilakukan menggunakan Vulkan, karena backend OpenGL ES Unity BiRP hanya mendukung penggunaan satu RWBuffer dalam satu waktu.

Set data yang dihasilkan untuk rendering sering kali lebih besar dari batas ukuran perangkat untuk objek buffer uniform (UBO). Summoners War: Chronicles menggunakan objek buffer penyimpanan Shader (SSOs), yang memiliki batas kapasitas lebih besar. Namun, mengikat MSAO ke operasi tahap verteks memerlukan dukungan SSO hanya baca. OpenGL ES hanya mendukung MSAO baca-tulis, sementara Vulkan dapat menandai MSAO sebagai hanya baca.

Rendering instance tidak langsung dengan Clay

Untuk Summoners War: Chronicles, Com2uS mengembangkan metode untuk mengelompokkan beberapa material, mesh, dan tekstur menjadi satu panggilan gambar. Com2uS menyebut sistem ini sebagai Clay. Clay meningkatkan performa game sebesar 30% sebagai hasil dari mengurangi panggilan gambar secara signifikan.

Tanah liat dimulai selama fase pemusnahan dan tabrakan dengan membuat daftar objek terlihat yang dapat dirender dan kompatibel. Clay kemudian menghasilkan informasi rendering untuk setiap objek yang diidentifikasi ke dalam SSO. Proses ini dilakukan dengan shader komputasi, yang memungkinkan penggunaan rendering ber-instance tidak langsung menggunakan fungsi DrawMeshInstancedIndirect perender Unity. Dengan rendering tidak langsung, informasi instance dan parameter jumlah instance dihasilkan langsung di GPU. Saat menggambar objek, Clay akan mengikat mesh kerucut seperti yang ditunjukkan dalam gambar, bukan mengikat mesh objek tradisional

Gambar 3. Mesh kerucut.

Clay kemudian mengubah mesh kerucut dalam shader verteks menggunakan SSO terikat dari data transformasi verteks yang dihasilkan oleh shader komputasi. Mengikat PerfettoO ke tahap verteks memerlukan penggunaan Vulkan. Clay dapat menggunakan beberapa kerucut yang telah ditransformasi untuk merender satu objek. Kompleksitas objek menentukan jumlah kerucut.

Gambar 4. Cara mesh kerucut diubah menjadi hierarki.

Data material untuk objek ditumpuk dalam buffer lain yang dihasilkan oleh shader komputasi. Buffer terikat dengan shader fragmen. Tekstur untuk objek yang sedang digambar dikonfigurasi dalam array tekstur. Indeks array untuk tekstur objek disertakan dalam data material objek. Dalam keadaan ideal, Clay dapat merender dengan maksimal tujuh panggilan gambar:

  • Objek statis
  • Objek animasi
  • Bayangan (empat iterasi)
  • Refleksi

Unity plus Vulkan

Summoners War: Chronicles menunjukkan bahwa kombinasi game engine Unity dan API grafis Vulkan yang canggih memungkinkan developer menghadirkan grafis berkualitas konsol canggih ke perangkat Android.