Geometri

Game 3D yang berjalan dengan baik pada sejumlah besar perangkat dimulai dengan seni 3D yang dirancang untuk memanfaatkan prosesor grafis secara optimal. Panduan ini menyoroti pengoptimalan dan praktik terbaik untuk aset 3D di perangkat seluler agar dapat membuat game berperforma lebih baik dan meminimalkan pemakaian daya.

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

Definisi geometri

Geometri, atau mesh poligon, adalah kumpulan verteks, rusuk, dan permukaan yang menyusun bentuk objek 3D. Ini bisa berupa mobil, senjata, lingkungan, karakter, atau sejenis aset visual apa pun dalam game.

Gambar 1. Verteks, rusuk, dan segitiga pada kubus.

Geometri terdiri atas beberapa bagian berikut:

  • Verteks: Kata benda untuk titik sudut. Titik-titik ini menentukan struktur objek dalam ruang 3D.

  • Rusuk: Dua verteks yang terhubung dengan garis lurus.

  • Segitiga: Tiga verteks yang terhubung satu sama lain dengan tiga rusuk. Hal ini terkadang disebut sebagai poligon atau permukaan. Dalam software 3D seperti 3ds Max, Maya, atau Blender, Anda biasanya bekerja menggunakan segiempat. Segiempat adalah poligon empat sisi yang lebih mudah dimodifikasi dan digunakan. Saat dirender, poligon ini ditampilkan di layar sebagai segitiga.

Gunakan bagian berikut untuk mempelajari geometri lebih lanjut:

Penggunaan segitiga dan poligon

Bagian ini menguraikan praktik terbaik untuk menggunakan segitiga dan poligon. Ini mencakup rekomendasi berikut:

Kurangi jumlah segitiga

Jika Anda menyertakan terlalu banyak segitiga, performa game akan menurun.

Gunakan segitiga sesedikit mungkin. Sebaiknya hanya gunakan segitiga cukup untuk mendapatkan kualitas yang Anda inginkan. Pertimbangkan dampaknya terhadap performa saat Anda membuat konten untuk game seluler. Memproses verteks juga memerlukan biaya besar. Semakin sedikit verteks, semakin baik performa game secara keseluruhan. Selain itu, semakin sedikit segitiga yang digunakan, semakin banyak perangkat yang dapat menjalankan game tanpa GPU yang canggih.

Gambar berikut menunjukkan bahwa Anda dapat mempertahankan kualitas dengan lebih sedikit segitiga:

Objek di sebelah kiri memiliki 584 segitiga, sementara objek di sebelah kanan memiliki 704 segitiga.

Gambar 2. Perbandingan dua objek dengan jumlah segitiga berbeda yang terlihat sama dalam mode berarsir. Pada objek di sebelah kiri, rusuk yang tidak berkontribusi pada siluet dihapus.

Pada platform seluler, jumlah maksimum verteks untuk setiap mesh umumnya adalah 65.535. Untuk memastikan kompatibilitas maksimum, jumlahnya harus tetap di bawah angka ini.

Alasan batas ini adalah bahwa semua GPU hanya menjamin dukungan untuk indeks 16 bit, yang dapat mewakili rentang dari 0 hingga 65.535 verteks. Sebagian besar, tetapi tidak semua, GPU modern mendukung indeks 32 bit, yang mewakili rentang dari 0 hingga 4.294.967.295 verteks. Jika Anda melebihi rentang yang didukung saat menggunakan indeks 16 bit, geometri akan hilang atau tidak dirender dengan benar.

Selalu tampilkan dan uji game di perangkat apa pun tempat Anda ingin merilisnya, bukan monitor PC. Beberapa model dengan tingkat detail yang tinggi mungkin tidak dirender dengan benar atau bahkan terlihat di perangkat seluler.

Sebaiknya gunakan lebih banyak segitiga pada objek latar depan dan lebih sedikit pada objek latar belakang. Ini lebih menguntungkan untuk game dengan sudut pandang (POV) kamera statis. Contoh berikut menunjukkan penggunaan detail yang sesuai pada objek yang berbeda.

Detail di objek latar depan dibuat dengan segitiga. Detail latar belakang direkam ke permukaan datar.

Gambar 3. Contoh ini menunjukkan detail tingkat tinggi pada objek latar depan dibandingkan objek latar belakang.

Jumlah maksimum segitiga yang harus Anda gunakan untuk model bervariasi berdasarkan perangkat dan konten. Jika ada lebih banyak objek di layar, gunakan lebih sedikit segitiga untuk setiap model. Jika hanya dua atau tiga objek yang ditampilkan, lebih banyak segitiga dapat disertakan.

Contoh berikut menunjukkan dua model dari demo yang berbeda. Demo Circuit VR hanya memiliki satu karakter robot. Karena hanya ada satu objek, model robot ini memiliki jumlah segitiga lebih tinggi. Model lainnya berasal dari demo Armies. Demo ini memiliki ratusan serdadu di setiap frame, sehingga setiap serdadu memiliki lebih sedikit segitiga.

Gambar 4. Perbandingan jumlah segitiga untuk dua kasus penggunaan yang berbeda. Di sebelah kiri, Robot Circuit VR memiliki 11.000 segitiga. Di sebelah kanan, Serdadu Armies memiliki 360 segitiga.

Contoh penggunaan segitiga

Gambar berikut adalah contoh jumlah segitiga yang digunakan dalam demo teknologi Armies.

Dalam demo Armies, yakni demo teknologi seluler 64 bit yang dibuat di Unity, kamera bersifat statis dengan banyak karakter animasi. Secara total, setiap frame merender sekitar 210.000 segitiga. Jumlah segitiga ini memungkinkan demo berjalan secara stabil pada sekitar 30 FPS (frame per detik).

Gambar 5. Contoh render dari demo teknologi Armies yang menampilkan jumlah segitiga yang digunakan.

Objek terbesar dalam scene, yakni menara meriam, memiliki sekitar 3.000 segitiga karena mengisi sebagian besar layar.

Setiap karakter menggunakan sekitar 360 segitiga. Karena jumlahnya begitu banyak dan hanya terlihat dari jarak jauh, karakter tersebut tidak menggunakan banyak segitiga. Dari POV kamera, semuanya terlihat sesuai.

Gambar 6. Tampilan serdadu dengan sedikit jumlah segitiga dalam demo teknologi Armies.

Gunakan segitiga di area penting

Verteks di platform seluler sangat mahal. Untuk mencegah pemborosan anggaran pemrosesan, tempatkan verteks di area yang berkontribusi pada kualitas visual game. Detail kecil pada objek 3D mungkin tidak terlihat di layar akhir game. Detail sangat kecil mungkin mustahil terlihat karena ukuran layar yang kecil dan penempatan objek 3D.

Fokuslah pada bentuk besar, bukan detail halus, yang berkontribusi pada siluet. Gambar berikut adalah contoh fokus pada siluet:

Gambar 7. Garis merah di sekitar robot menggambarkan siluetnya.

Sebaiknya Anda menggunakan lebih sedikit segitiga pada area yang jarang terlihat dari POV kamera. Misalnya, bagian bawah mobil atau bagian belakang lemari. Jika satu bagian objek tidak akan pernah terlihat, hapus bagian objek tersebut.

Penghapusan sebagian objek dapat membatasi kegunaan kembali objek dan harus dilakukan dengan hati-hati. Misalnya, jika Anda menghapus bagian bawah mesh tabel, pengguna akan melihat bagian yang dihapus tersebut jika tabel ditempatkan terbalik.

Jangan buat model detail kecil dengan mesh segitiga kepadatan tinggi. Gunakan tekstur dan peta normal untuk detail halus. Contoh berikut menunjukkan mesh yang sama dengan dan tanpa peta normal.

Gambar 8. Perbandingan model dengan dan tanpa peta normal diterapkan.

Hapus segitiga mikro

Segitiga mikro adalah segitiga yang sangat kecil yang tidak berkontribusi pada visual akhir suatu scene.

Semua objek 3D dengan jumlah poligon yang tinggi memiliki masalah segitiga mikro saat dipindahkan dari kamera. Tidak ada definisi standar industri untuk segitiga mikro, tetapi biasanya dipahami sebagai segitiga yang lebih kecil daripada 1 hingga 10 piksel pada gambar akhir. Segitiga mikro buruk karena GPU harus melakukan semua pemrosesan terhadap semua segitiga ini meskipun tidak berkontribusi pada gambar akhir.

Segitiga mikro disebabkan oleh dua hal:

  • Detail yang terlalu kecil dan terdiri atas banyak segitiga.
  • Objek yang lebih jauh dari kamera dengan banyak segitiga.

Gambar 9. Efek jarak pada segitiga mikro.

Di Gambar 9, robot latar depan tidak memiliki segitiga mikro. Robot latar belakang memilikinya karena setiap segitiga hanya berukuran 1 hingga 10 piksel.

Gambar 10. Perbandingan segitiga mikro pada model yang sangat mendetail. Sebagian besar segitiga di area yang ditandai terlalu kecil untuk dilihat di layar ponsel.

Untuk objek yang lebih jauh dari kamera, gunakan tingkat detail (LOD). Hal ini akan mengurangi kompleksitas objek dan membuatnya lebih sederhana. Hasilnya adalah objek dengan segitiga dan memiliki kepadatan rendah.

Jangan buat model detail dengan banyak segitiga. Gunakan tekstur dan peta normal untuk jenis detail halus ini. Anda dapat menggabungkan detail verteks dan segitiga yang terlalu kecil dan tidak berkontribusi pada gambar akhir.

Penting bagi Anda untuk mengurangi jumlah segitiga mikro karena dapat memengaruhi bandwidth memori. Semakin banyak segitiga, semakin banyak juga data yang dikirimkan ke GPU. Pada perangkat seluler, hal ini dapat memengaruhi masa pakai baterai. Peningkatan pemakaian daya dapat menyebabkan throttling termal, yang membatasi performa maksimum GPU.

Hindari segitiga yang panjang dan tipis

Ini adalah segitiga yang, saat dirender dalam gambar akhir, lebih kecil daripada 10 piksel dalam satu dimensi dan terentang jauh di layar. Segitiga panjang dan tipis biasanya lebih mahal diproses daripada segitiga lainnya.

Pada gambar berikut, bevel di pilar memiliki segitiga panjang dan tipis saat dilihat dari jauh. Bevel ini tidak menjadi masalah jika dilihat dari dekat.

Gambar 11. Bevel di pilar adalah segitiga panjang dan tipis.

Sebaiknya Anda menghapus segitiga panjang dan tipis dari semua objek jika memungkinkan.

Untuk objek berkilau, segitiga panjang dan tipis dapat menyebabkan kerlipan cahaya saat kamera bergerak. LOD dapat membantu menghapus segitiga panjang dan tipis saat objek berada jauh dari kamera.

Jika memungkinkan, coba pastikan semua segitiga mendekati segitiga sama sisi. Ini akan memberi segitiga lebih banyak area dan lebih sedikit rusuk. Pada umumnya, segitiga panjang dan tipis memiliki performa lebih buruk dibandingkan dengan segitiga yang lebih besar. Untuk informasi selengkapnya tentang area segitiga, baca Triangulasi.

Tingkat detail

Tingkat detail (LOD) mengacu pada teknik yang mengurangi kompleksitas saat objek berada lebih jauh dari orang yang melihatnya. Bentuk LOD yang paling umum mencakup beberapa versi mesh, dengan verteks yang semakin sedikit. LOD tidak hanya mengurangi jumlah verteks yang akan diproses, tetapi juga menghindari masalah segitiga mikro. LOD juga tampak lebih baik untuk objek yang posisinya lebih jauh dalam scene.

Sebaiknya Anda menggunakan LOD kapan pun memungkinkan. Fokuslah pada siluet objek. Sebaiknya fokus pada area datar untuk menargetkan pengurangan verteks. Gambar berikut menunjukkan penggunaan LOD, yang diterapkan pada model robot.

Di sebelah kiri, ada robot yang paling mendetail dengan jumlah segitiga terbesar. Di sebelah kanan, ada robot yang posisinya lebih jauh, memiliki lebih sedikit detail, dan menggunakan lebih sedikit segitiga.

Gambar 12. Perbandingan jumlah verteks yang digunakan saat LOD berubah.

Pada Gambar 12, sulit untuk melihat perbedaan antara objek serupa yang memiliki 200 segitiga atau 2.000 segitiga dari jarak jauh. Objek dengan lebih banyak segitiga akan menambah biaya resource yang tinggi, tetapi tidak meningkatkan tampilannya saat dilihat dari jarak jauh.

Gambar 13. Perbandingan model yang jauh dengan jumlah segitiga yang berbeda.

LOD sebagai konsep juga dapat berlaku untuk kompleksitas shader dan resolusi tekstur. Pada LOD lebih rendah, bahan yang berbeda dapat digunakan dengan shader yang lebih sederhana dan tekstur yang lebih sedikit. Anda juga harus memastikan tekstur memiliki mipmap, sehingga tingkat tekstur resolusi yang lebih rendah diterapkan pada objek yang jauh. Tindakan ini akan meningkatkan performa, dengan penyesuaian peningkatan ukuran data Anda.

Kami tidak menyarankan LOD untuk game apa pun dengan kamera dan objek yang statis. Manfaat terbesar LOD adalah untuk objek yang bergerak menuju dan menjauh dari kamera. Objek statis tidak bergerak, sehingga tidak ada manfaatnya untuk LOD.

Gambar 14. Scene kamera statis dari demo teknologi Armies yang tidak menggunakan LOD.

Rasio LOD

Gunakan rasio yang konsisten saat Anda mengurangi jumlah segitiga untuk LOD. Sebaiknya kurangi segitiga sebesar 50% untuk setiap tingkat.

Jangan gunakan LOD pada objek sederhana. Objek yang sudah memiliki sedikit segitiga tidak akan menerima manfaat dari LOD. Contoh berikut dari demo teknologi Armies menunjukkan tampilan game dengan gambar statis dan objek yang memiliki sedikit segitiga.

Gambar 15. Perbandingan di antara model saat LOD menurun.

Verifikasi perubahan tingkat LOD pada jarak yang sesuai dari kamera. Lakukan analisis berdasarkan cara tingkat LOD tersebut digunakan dalam game.

Gambar 16. Perbandingan tampilan model LOD 3 dari dekat dan pada jarak yang diinginkan.

Tidak ada angka pasti terkait banyaknya LOD yang wajar untuk dimiliki objek. Hal ini bergantung pada ukuran objek dan seberapa penting objek tersebut. Misalnya, karakter dalam game aksi atau mobil dalam game balap mungkin memiliki lebih banyak tingkat LOD dibandingkan objek latar belakang kecil seperti pohon.

Perlu diingat bahwa terlalu banyak LOD akan menghabiskan resource CPU. Daya pemrosesan yang lebih besar diperlukan agar CPU dapat menentukan LOD yang akan ditampilkan. LOD juga menghabiskan memori, yang meningkatkan ukuran file dan penggunaan VRAM. Membuat dan memverifikasi model LOD juga memerlukan waktu tambahan.

Ada dua cara untuk membuat mesh LOD: secara manual dan otomatis.

  • Anda dapat membuat mesh LOD secara manual dengan software 3D apa pun.
    • Untuk melakukannya, hapus loop rusuk atau kurangi jumlah verteks pada objek 3D.
    • Hal ini memberi kreator kontrol terbesar atas produk akhir, tetapi mungkin memerlukan waktu lebih lama.
  • Mesh LOD dapat otomatis dibuat.
    • Anda dapat menggunakan pengubah dalam paket 3D seperti ProOptimizer dalam 3ds Max atau Generate LOD Meshes dalam Maya.
    • Anda dapat menggunakan software yang menghasilkan LOD seperti Simplygon atau InstaLOD.
    • Mesin game tertentu memiliki fitur pembuatan LOD otomatis yang memungkinkan Anda membuat dan menerapkan mesh LOD.

Praktik terbaik

Ada teknik tambahan untuk mengurangi resource yang diperlukan game Anda. Teknik ini juga mempertahankan fidelitas grafis.

Grup penghalusan atau normal verteks kustom

Gunakan grup penghalusan atau normal verteks kustom untuk menentukan kekerasan rusuk dan mengubah tampilan model. Grup penghalusan membantu menciptakan bayangan yang lebih baik pada seni low poly. Grup penghalusan juga memengaruhi pembagian UV island dan kualitas peta normal saat Anda merekamnya.

Contoh grup penghalusan. Di sebelah kiri, robot telah menerapkan grup penghalusan.

Gambar 17. Perbandingan model dengan dan tanpa grup penghalusan.

Jika Anda menerapkan grup penghalusan pada model 3D, grup penghalusan tersebut harus diekspor dari software 3D dan diimpor ke dalam mesin.

Topologi mesh

Saat Anda membuat aset 3D baru, pastikan aset tersebut memiliki topologi yang rapi. Topologi yang rapi sangat penting untuk karakter dan objek lain yang bergerak dan berubah. Topologi tidak harus sempurna. Perlu diingat bahwa pengguna akhir tidak akan melihat wireframe dan bahwa tekstur dan bahan akan berdampak lebih besar pada tampilan model.

Gambar 18. Topologi, wireframe, dan versi akhir batu dari demo teknologi Armies.

Bentuk yang berlebihan

Anda dapat menggunakan bentuk tertentu secara berlebihan untuk membuat model Anda lebih mudah ditafsirkan. Hal ini sangat bergantung pada jenis dan gaya game Anda. Karena layar perangkat seluler kecil, sulit untuk menangkap bentuk tertentu yang sangat kecil. Penggunaan bentuk ini secara berlebihan dapat membantu pengguna melihat bentuk bahkan dari jarak jauh.

Misalnya, Anda dapat membuat karakter dengan tangan yang lebih besar sehingga lebih mudah dilihat.

Gambar 19. Contoh model yang menampilkan proporsi berlebihan untuk visibilitas yang lebih baik.