Material dan Shader

Ikuti praktik terbaik berikut untuk mengoptimalkan penggunaan material dan shader di game Android.

Material dan shader adalah elemen penyusun utama seni 3D modern. Game 3D yang berjalan lancar pada sejumlah besar perangkat dimulai dengan seni 3D yang telah dirancang untuk memanfaatkan prosesor grafis secara optimal. Panduan ini menjelaskan pengoptimalan dan praktik terbaik untuk material dan shader di perangkat seluler agar game Anda dapat berperforma lebih baik dan meminimalkan penggunaan daya.

Beberapa bagian artikel ini didasarkan pada karya kontribusi berhak cipta dari Arm Limited.

Shader mobile-friendly mesin game

Mesin game memiliki perbedaan dalam cara mengaitkan material dan shader. Mesin Unity dapat membuat beberapa shader, tetapi setiap material hanya dapat memiliki satu shader. Unreal Engine 4 dapat menerapkan shader yang berbeda pada material berdasarkan platform target.

Untuk definisi shader dan material, lihat Praktik terbaik material dan shader untuk artis.

Jika Anda menggunakan mesin game seperti Unity atau Unreal Engine 4, gunakan shader bawaan yang dirancang untuk hardware seluler. Shader ini berisi implementasi fitur yang telah disederhanakan untuk mencapai performa yang lebih baik di perangkat seluler. Jika memungkinkan, nonaktifkan fitur yang tidak digunakan saat mengonfigurasi material. Fitur ini dapat berupa berbagai hal seperti penambahan tint warna atau peta detail. Menonaktifkan fitur yang tidak digunakan memungkinkan mesin untuk menghapusnya dari program shader akhir sehingga performanya menjadi lebih baik.

Unity

Unity menyertakan beberapa mesin rendering. Untuk game seluler modern, opsi terbaik adalah Universal Render Pipeline (URP). URP menyertakan serangkaian shader standar yang kerumitannya otomatis diskalakan, bergantung pada platform target. Perender Unity yang lama menyertakan kumpulan shader yang didesain untuk platform seluler. Shader ini dikelompokkan dalam kategori Seluler.

Unreal Engine 4

Mesin Unreal akan memilih shader seluler berdasarkan platform target yang dipilih. Output visual dari shader seluler dapat berbeda dengan shader Shader Model 5 default. Anda dapat mengubah Level Rendering Pratinjau di editor Unreal untuk menyimulasikan output rendering shader seluler. Terlepas dari beberapa perbedaan, Unreal menggunakan proses yang sama untuk material pada semua platform sehingga shader seluler biasanya memiliki visual dan perilaku yang sama seperti shader default.

Menyetel rendering pratinjau seluler di editor Unreal
Gambar 1. Menyetel rendering pratinjau seluler di editor Unreal.

Meminimalkan sampel tekstur

Game yang menargetkan perangkat seluler harus menggunakan tekstur sesedikit mungkin di materialnya. Setiap tekstur tambahan memerlukan pengambilan sampel tekstur tambahan yang menghabiskan bandwidth memori dan meningkatkan penggunaan daya. Unreal Engine 4 merekomendasikan maksimum lima tekstur material saat berjalan di perangkat seluler. Bahkan lima sampel tekstur mungkin akan sangat mahal untuk digunakan secara luas di banyak perangkat. Strategi untuk meminimalkan jumlah sampel tekstur meliputi:

  • Gunakan pengemasan tekstur untuk menggabungkan tekstur satu saluran. Untuk informasi selengkapnya tentang teknik ini, lihat panduan Tekstur.
  • Ganti data untuk parameter seperti kekasaran atau metalik dengan konstanta numerik, bukan dibaca dari tekstur.
  • Gunakan shader tanpa pencahayaan atau model pencahayaan sederhana untuk menghilangkan tekstur yang diperlukan dalam mendukung penghitungan pencahayaan pada model pencahayaan yang lebih rumit.

Menonaktifkan pencahayaan jika memungkinkan

Pencahayaan versus tanpa pencahayaan adalah pembagian umum untuk shader dan material. Pencahayaan real time melibatkan penghitungan tambahan di shader. Bergantung pada jenis sistem pencahayaan yang diterapkan, tekstur material mungkin diperlukan dan akan menggunakan lebih banyak ruang memori dan bandwidth. Untuk game seluler, khususnya yang menargetkan hardware yang tidak terlalu canggih, meminimalkan penggunaan pencahayaan real-time merupakan hal penting dalam mencapai performa yang optimal. Sebaiknya rancang seni Anda dengan desain yang baik tanpa pencahayaan real-time, seperti seni bergaya atau kartun.

Perbandingan antara model yang dirender dengan dan tanpa pencahayaan
Gambar 2. Contoh model yang dirender dengan pencahayaan real-time (kiri) dan tanpa pencahayaan real-time (kanan).

Meminimalkan penggunaan transparansi

Gunakan material buram bila memungkinkan. Rendering objek dengan transparansi selalu lebih mahal daripada objek buram yang setara. Desain pada hardware grafis seluler mengakibatkan perenderan transparansi menjadi relatif lebih mahal jika dibandingkan dengan hardware grafis komputer atau konsol game. Menggambar banyak objek transparan dalam game, terutama saat dirender di atas satu sama lain, akan berdampak negatif pada performa.

Menggambar piksel yang sama beberapa kali merupakan masalah yang dikenal sebagai overdraw. Beberapa lapisan overdraw transparansi harus dihindari. Banyak game memiliki alat diagnostik untuk memvisualisasi overdraw guna membantu mendeteksi dan menghilangkannya. Gunakan alat ini untuk meningkatkan performa game dan mengidentifikasi area masalah yang menyebabkan penurunan kecepatan frame Anda.

Contoh alat visualisasi overdraw di editor Unity
Gambar 3. Contoh alat visualisasi overdraw di editor Unity.
Contoh alat visualisasi overdraw di editor Unreal
Gambar 4. Contoh alat visualisasi overdraw di editor Unreal.

Menggunakan metode alfa yang sesuai

Metode penerapan transparansi yang paling umum adalah pencampuran alfa dan pengujian alfa.

Pengujian alfa akan menjadikan material objek terlihat 100% buram atau 100% transparan. Anda dapat mengonfigurasi nilai minimum alfa untuk batas ini. Di Unity, jenis transparansi ini disebut Cutout. Di Unreal Engine 4, jenis ini disebut mode campuran Masked.

Dengan pencampuran alfa, material objek dapat memiliki rentang transparansi, dan dapat membuat objek terlihat transparan sebagian. Unity menyebut jenis transparansi ini sebagai Transparent. Di Unreal Engine 4, jenis ini disebut mode campuran Translucent.

Perbandingan antara pencampuran alfa dan pengujian alfa
Gambar 5. Gambar contoh (kiri) yang dirender menggunakan pencampuran alfa (tengah) dan pengujian alfa (kanan).

Umumnya, perpaduan alfa menghasilkan tampilan visual yang lebih unggul dibandingkan dengan pengujian alfa. Namun, untuk jenis mesh tertentu, seperti dedaunan, pencampuran alfa dapat terlihat aneh jika mesh dilihat saat bergerak. Hal ini disebabkan oleh persepsi terhadap daun dan cabang yang dirender dalam urutan yang salah. Pengujian alfa meminimalkan efek ini, tetapi menimbulkan peningkatan pembuatan alias dan tepi yang tajam pada daun dan cabang.

Pencampuran alfa dan pengujian alfa mungkin memerlukan waktu yang berbeda-beda untuk merender mesh yang sama. Untuk mesh dengan salah satu mode menghasilkan output visual yang dapat diterima, Anda harus menjalankan benchmark untuk mengetahui apakah satu metode berperforma lebih baik daripada metode lainnya.

Kompleksitas shader profil

Fitur rendering seperti sampel tekstur, pencahayaan, dan transparansi akan menambah kompleksitas shader dan menurunkan performa rendering. Anda dapat menggunakan alat bawaan mesin game serta alat grafis eksternal untuk mengevaluasi kompleksitas shader.

Unreal Engine 4 dilengkapi mode tampilan Shader Complexity yang memberikan perkiraan biaya untuk objek dalam adegan Anda.

Mode tampilan Shader Complexity di editor Unreal
Gambar 6. Mode tampilan Shader Complexity di editor Unreal.

Anda juga dapat menggunakan fitur Material Stats Unreal untuk membuat profil biaya material saat membuatnya.

Tampilan Material Stats di editor Unreal
Gambar 7. Tampilan Material Stats di editor Unreal.

Menghitung dalam shader vertex

Penghitungan shader rendering biasanya dibagi antara shader vertex dan shader fragmen (juga dikenal sebagai piksel). Jumlah fragmen yang dirender biasanya akan lebih besar dari jumlah vertex. Jika komputasi mahal dapat dilakukan di shader vertex, komputasi akan lebih jarang dijalankan daripada jika dilakukan di shader fragmen.

Namun, jika digunakan oleh shader fragmen, data ini harus diteruskan dari shader vertex. Jika jumlah data yang ditransfer terlalu besar, melakukan penghitungan di shader fragmen mungkin akan menghasilkan performa yang lebih tinggi. Anda dapat menggunakan alat pembuatan profil untuk mengevaluasi pemanfaatan tiler guna menentukan lokasi shader yang optimal bagi serangkaian penghitungan. Unreal Engine 4 memiliki fitur Customize UVs yang dapat membantu pembuatan profil ini.

Menghindari operasi matematika yang mahal

Operasi matematika digunakan dalam program shader untuk mengontrol perilaku dan tampilan output shader. Operasi umum termasuk aritmetika dasar, fungsi power, fungsi floor, logaritma, dll. Operasi matematika tidak sepadan dengan biaya komputasinya. Shader yang diisi dengan operasi mahal akan berperforma lebih lambat, terutama di perangkat lama. Contoh operasi yang relatif murah meliputi:

  • Penjumlahan
  • Pengurangan
  • Perkalian

Operasi yang lebih mahal meliputi:

  • Pembagian
  • Transendental (sin, cos, power, log, tan)

Membuat profil performa berkala

Bottleneck performa Anda mungkin tidak selalu jelas. Hindari mengasumsikan area masalah Anda dan gunakan alat pembuatan profil untuk mengevaluasi performa rendering. Pastikan Anda melakukan pengoptimalan sebelum dan sesudah pengujian untuk mengukur dampaknya secara akurat.