Semakin luas dunia sebuah game, semakin besar tantangan untuk mempertahankan performanya.
Pemain mungkin melihat gunung, gedung, pepohonan, kendaraan, dan karakter sekaligus, tetapi tidak semua elemen membutuhkan detail maksimal.
Memaksa GPU memproses model berkualitas tinggi pada objek yang hanya memenuhi beberapa pixel layar jelas kurang efisien. Karena itu, Menggunakan Level of Detail bukan hanya urusan mengurangi polygon.
Teknik ini merupakan bagian dari strategi rendering yang membantu developer membagi resource berdasarkan apa yang benar-benar dapat dilihat pemain dalam setiap frame.
Jadikan LOD Bagian dari Pipeline Produksi
LOD sebaiknya tidak baru dipikirkan ketika game mulai mengalami frame drop.
Idealnya, strategi tersebut sudah masuk ke asset pipeline sejak tahap produksi.
Ketika artist membuat bangunan, kendaraan, vegetation, atau environmental prop, tim dapat menentukan sejak awal apakah aset tersebut memerlukan LOD0, LOD1, LOD2, hingga billboard.
Unity bahkan mendukung convention penamaan seperti _LOD0, _LOD1, dan _LOD2 pada model yang dibuat di aplikasi 3D tertentu sehingga konfigurasi LOD dapat dikenali saat proses import.
Workflow seperti ini mengurangi pekerjaan manual ketika jumlah aset mulai mencapai ratusan atau ribuan.
Untuk proyek besar, konsistensi pipeline jauh lebih penting dibanding memperbaiki setiap mesh satu per satu menjelang rilis.
Prioritaskan Aset yang Memberikan Dampak Terbesar
Tidak semua model memerlukan jumlah LOD yang sama.
Sebuah bangunan besar yang terlihat dari berbagai jarak mungkin membutuhkan tiga atau empat tingkat detail. Sebaliknya, botol kecil yang hanya terlihat ketika pemain berada dekat mungkin lebih efisien dihilangkan ketika melewati jarak tertentu.
Gunakan prinsip cost versus benefit.
Tanyakan tiga hal: seberapa berat geometry-nya, seberapa sering objek muncul, dan seberapa luas rentang jaraknya dari kamera.
Pohon menjadi contoh ideal. Satu pohon mungkin tidak berat, tetapi hutan dengan ribuan instance dapat menghasilkan beban besar.
Godot menjelaskan bahwa mengganti geometry kompleks dengan versi sederhana sangat berguna pada objek jauh, dengan contoh banyak pohon yang terlihat sekaligus dari kejauhan.
Fokuskan waktu artist pada aset yang memberikan penghematan terbesar.
Tentukan Triangle Budget yang Masuk Akal
Tidak ada aturan universal bahwa LOD1 harus memiliki tepat 50% triangle LOD0.
Jumlah optimal sangat bergantung pada bentuk objek.
Model dengan siluet sederhana mungkin dapat dipangkas secara agresif tanpa terlihat berbeda. Sebaliknya, karakter, kendaraan, atau arsitektur dengan banyak lengkungan bisa membutuhkan lebih banyak geometry untuk menjaga bentuknya.
Contohnya, sebuah batu dengan 20.000 triangle mungkin masih terlihat hampir sama setelah dikurangi menjadi 7.000 triangle. Tetapi kepala karakter dengan pengurangan serupa dapat kehilangan bentuk wajah.
Jadi, jangan menentukan LOD hanya berdasarkan persentase angka.
Lihat hasilnya dari jarak pengguna sebenarnya.
Fokus pada Screen Coverage
Ketika sebuah model hanya mengisi 2% layar, detail kecil menjadi sulit terlihat.
Unity menyediakan screen-relative transition height dalam sistem LOD sehingga perpindahan dapat dikontrol berdasarkan proporsi tinggi objek terhadap layar.
Pendekatan tersebut membuat pengaturan lebih fleksibel dibanding sekadar menetapkan jarak absolut.
Jangan Hanya Menyederhanakan Geometry
Level of detail dapat diterapkan lebih luas daripada jumlah polygon.
Objek jauh juga bisa menggunakan material atau shader yang lebih sederhana.
Misalnya, kaca gedung dekat menggunakan reflection kompleks, normal map, roughness detail, dan beberapa layer material. Pada jarak satu kilometer, sebagian efek tersebut mungkin hampir tidak terlihat.
NVIDIA merekomendasikan mempertimbangkan shader level of detail untuk mengurangi kompleksitas shader dan jumlah surface pass pada objek jauh ketika sesuai dengan kebutuhan rendering.
Konsep serupa bisa diterapkan pada shadow, animation, particle, hingga vegetation.
Semakin jauh objek, semakin kecil jumlah detail visual yang perlu dihitung.
Namun jangan mengurangi semuanya sekaligus secara ekstrem karena transisi kualitas akan mudah terlihat.
Gunakan HLOD untuk Open World
LOD biasa bekerja pada satu objek atau aset.
Tetapi bagaimana dengan sebuah kota yang terdiri dari ribuan objek?
Pada jarak beberapa kilometer, pemain mungkin hanya melihat bentuk umum blok kota. Renderer sebenarnya tidak membutuhkan pagar, jendela, AC, meja, tiang, dan puluhan objek kecil sebagai entity terpisah.
Hierarchical Level of Detail atau HLOD menyelesaikan masalah tersebut dengan membuat representasi gabungan untuk kelompok objek.
Dokumentasi Unreal Engine menjelaskan bahwa sistem HLOD dapat menggabungkan beberapa Static Mesh Actor menjadi satu proxy mesh dan material pada jarak jauh sehingga jumlah actor dan draw call dapat ditekan.
Pada World Partition, HLOD bahkan dapat digunakan untuk menampilkan representasi sederhana dari content pada cell yang sedang tidak dimuat penuh.
Teknik seperti ini sangat berguna pada open-world, racing game, simulator penerbangan, dan lingkungan dengan draw distance panjang.
Atur Transisi agar Pemain Tidak Menyadarinya
LOD yang bagus biasanya justru tidak disadari pemain.
Jika pemain jelas melihat pohon berubah dari bulat menjadi kotak ketika berjalan beberapa meter, pengaturan transisinya perlu diperbaiki.
Periksa silhouette change pada setiap tingkat LOD.
Hindari menghapus bagian geometry besar tepat pada satu transition point. Distribusikan pengurangan detail secara bertahap.
Cross-fading atau dithering juga dapat membantu menyamarkan perubahan. Unreal Engine pada rendering path desktop mendukung Dither LOD Transition, sementara Unity mempunyai sistem fade pada LOD Group.
Namun transisi halus bukan alasan menggunakan lebih banyak LOD daripada yang dibutuhkan.
Setiap tambahan representasi juga menambah kebutuhan memory dan pengelolaan aset.
Jangan Lupakan Collision dan Physics
Visual mesh yang jauh sudah berubah menjadi sederhana, tetapi terkadang collision mesh masih tetap kompleks.
Ini membuat optimasi tidak maksimal, terutama jika banyak objek masih berinteraksi dengan physics system.
Collision sebaiknya mengikuti kebutuhan gameplay.
Objek jauh yang tidak dapat disentuh pemain mungkin tidak memerlukan collision aktif. Untuk bangunan atau batu besar, simple collision sering cukup dibanding menggunakan geometry visual sebagai collider.
Hal yang sama berlaku untuk animation.
NPC yang sangat jauh mungkin tidak membutuhkan update skeleton, facial animation, atau cloth simulation dengan frekuensi penuh. Developer dapat membuat sistem animation LOD yang menurunkan update rate ketika karakter semakin kecil di layar.
Dengan begitu, LOD membantu bukan hanya GPU tetapi keseluruhan beban game.
Kombinasikan LOD dengan Culling dan Instancing
LOD tidak menggantikan teknik optimasi lainnya.
Scene hutan yang berisi 10.000 pohon tetap membutuhkan strategi visibility yang baik. Pohon jauh dapat menggunakan LOD rendah, pohon berulang dapat menggunakan instancing, sedangkan pohon yang tidak terlihat dapat dihilangkan melalui culling.
Unreal Engine menyarankan penggunaan visibility dan occlusion culling untuk mengurangi jumlah mesh yang dirender, sementara HLOD dapat membantu menggabungkan mesh dan menekan draw call.
Kombinasi ini biasanya jauh lebih efektif daripada hanya mengecilkan jumlah polygon.
Bayangkan optimasi seperti beberapa lapisan filter. Pertama, tentukan objek yang harus terlihat. Kedua, pilih tingkat detail yang tepat. Ketiga, proses objek berulang seefisien mungkin.
Profile LOD pada Hardware Minimum
LOD harus diuji berdasarkan data, bukan sekadar apakah model terlihat lebih sederhana.
Bandingkan scene dengan dan tanpa LOD.
Catat GPU frame time, jumlah primitive, draw call, memory usage, serta perubahan FPS.
Godot menyediakan cara membandingkan mesh LOD dengan melihat jumlah primitive dan frame time. Dokumentasinya juga menekankan bahwa efek LOD terhadap FPS bergantung pada bottleneck proyek.
Lakukan pengujan pada perangkat minimum.
Game mungkin mencapai 120 FPS di PC development, tetapi hanya 28 FPS pada laptop minimum specification. Justru perangkat seperti itulah yang memperlihatkan apakah strategi LOD benar-benar bekerja.
Uji juga berbagai sudut kamera. Area tinggi yang memungkinkan pemain melihat seluruh kota biasanya jauh lebih berat dibanding koridor sempit.
Buat Performance Budget yang Konsisten
Untuk proyek besar, jangan hanya mengatakan “buat LOD serendah mungkin”.
Tetapkan guideline.
Tim dapat menentukan target triangle, jumlah tingkat detail, jarak visibility, material complexity, dan aturan khusus berdasarkan kategori aset.
Hero asset tentu boleh memiliki budget berbeda dengan environmental prop.
Pendekatan ini membuat seluruh tim memiliki standar yang sama dan mengurangi kemungkinan scene tiba-tiba menjadi berat karena ratusan aset baru ditambahkan tanpa aturan.
Review performance secara berkala juga penting. Konsitensi optimasi sepanjang produksi jauh lebih murah dibanding melakukan perbaikan besar beberapa minggu sebelum rilis.
Menggunakan Level of Detail secara efektif bukan sekadar membuat versi low-poly dari setiap model.
Developer perlu memilih aset yang tepat, mengatur transisi berdasarkan screen size, memanfaatkan HLOD, menyederhanakan shader, dan menggabungkannya dengan culling serta instancing.
Buat performance budget sejak produksi dimulai, lalu profile hasilnya pada hardware minimum agar kualitas visual tetap menarik tanpa mengorbankan FPS.