Game 3D modern bisa menampilkan ribuan objek dalam satu scene, mulai dari bangunan, pepohonan, kendaraan, hingga karakter. Masalahnya, tidak semua objek tersebut perlu dirender dengan tingkat detail maksimal setiap saat.
Model yang berada ratusan meter dari kamera tentu tidak membutuhkan jumlah polygon yang sama seperti objek tepat di depan pemain. Di sinilah Menggunakan Level of Detail menjadi teknik penting.
Dengan mengganti model berdasarkan jarak atau ukuran objek di layar, developer dapat mempertahankan tampilan menarik sekaligus mengurangi beban rendering dan menjaga frame rate lebih stabil.
Apa Itu Level of Detail dalam Game?
Level of Detail atau LOD adalah teknik rendering yang menyediakan beberapa versi dari objek yang sama dengan tingkat kompleksitas berbeda.
Versi dengan detail tertinggi biasanya disebut LOD0. Model ini digunakan ketika objek berada dekat dengan kamera. Ketika jaraknya semakin jauh, engine dapat menggantinya dengan LOD1, LOD2, atau versi lain yang memiliki geometry lebih sederhana.
Unity menjelaskan bahwa LOD memungkinkan renderer mengurangi jumlah triangle yang digunakan ketika objek terlihat semakin kecil dari kamera. Unity juga dapat menentukan pergantian tingkat detail berdasarkan ukuran relatif objek pada layar.
Konsepnya sebenarnya sederhana: jangan menghitung detail yang tidak dapat dilihat pemain.
Mengapa LOD Bisa Meningkatkan Frame Rate?
Misalnya sebuah pohon pada LOD0 memiliki 40.000 triangle. Dalam sebuah hutan terdapat 300 pohon yang terlihat kamera.
Jika semuanya selalu menggunakan model detail tertinggi, GPU berpotensi memproses jutaan triangle meskipun sebagian besar pohon hanya terlihat kecil di kejauhan.
Developer dapat membuat LOD1 dengan 15.000 triangle, LOD2 dengan 4.000 triangle, lalu representasi sangat sederhana untuk pohon paling jauh.
Dengan pendekatan tersebut, jumlah geometry yang diproses dapat turun signifikan tanpa membuat pemain merasa kualitas visual berubah drastis.
Dokumentasi Godot juga menyebut mesh LOD sebagai salah satu teknik penting untuk meningkatkan performa rendering proyek 3D karena model yang jauh dapat menggunakan geometry dengan tingkat detail lebih rendah.
Tentukan LOD Berdasarkan Tampilan di Layar
Kesalahan umum adalah menentukan perpindahan LOD hanya berdasarkan jarak dalam meter.
Padahal, ukuran objek juga berpengaruh.
Gedung setinggi 100 meter yang berada cukup jauh masih bisa memenuhi bagian besar layar. Sebaliknya, kaleng kecil mungkin sudah hampir tidak terlihat meskipun jaraknya hanya beberapa puluh meter.
Karena itu, screen-space size sering menjadi parameter yang lebih berguna.
Godot menggunakan screen-space metric untuk pemilihan mesh LOD sehingga field of view kamera dan resolusi viewport ikut diperhitungkan. Unity juga menggunakan nilai screen-relative untuk menentukan transisi LOD.
Pendekatan ini membantu menjaga keseimbangan kualitas di berbagai resolusi dan konfigurasi kamera.
Buat Pengurangan Detail Secara Bertahap
LOD yang baik bukan sekadar membuat satu model bagus dan satu model sangat kasar.
Perubahan sebaiknya dilakukan secara bertahap.
Sebagai contoh, LOD0 bisa mempertahankan seluruh detail siluet. LOD1 mulai menyederhanakan bagian kecil yang sulit terlihat. LOD2 mengurangi geometry lebih agresif, sedangkan LOD3 dapat mempertahankan bentuk dasar objek saja.
Prioritaskan siluet.
Pemain jauh lebih mudah menyadari perubahan bentuk luar sebuah mobil dibanding hilangnya baut kecil di bagian mesin. Jadi, ketika mengurangi polygon, detail kecil biasanya dapat dihilangkan lebih dulu sementara bentuk utama tetap dipertahankan.
Teknik automatic mesh decimation juga semakin umum. Godot, misalnya, dapat menghasilkan mesh dengan tingkat detail lebih rendah secara otomatis saat proses import untuk sejumlah format scene 3D.
Namun, untuk hero asset atau objek penting, kontrol manual dari artist sering memberikan hasil lebih baik.
Hindari LOD Popping yang Mengganggu
Salah satu masalah paling mudah terlihat adalah LOD popping.
Ini terjadi ketika objek tiba-tiba berubah bentuk saat pemain mendekat atau menjauh. Jika perbedaan antara dua tingkat detail terlalu besar, perpindhan tersebut bisa terasa seperti objek “melompat”.
Ada beberapa cara menguranginya.
Gunakan Cross-Fade
Cross-fading membuat transisi antara dua versi mesh berlangsung secara bertahap, bukan langsung berubah dalam satu frame.
Unity menyediakan pengaturan fade pada LOD Group, termasuk lebar area transisi serta animated cross-fading.
Namun cross-fade sendiri dapat menambah sedikit biaya rendering karena dua representasi mungkin perlu diproses pada fase transisi.
Karena itu, penggunaannya perlu diuji pada hardware target.
Cara lain adalah membuat perbedaan antara LOD berurutan tidak terlalu ekstrem sehingga pergantiannya sulit diperhatikan.
Gunakan LOD Bersama Culling
LOD akan lebih efektif jika dikombinasikan dengan visibility culling.
LOD mengurangi kompleksitas objek yang masih terlihat. Culling mengambil pendekatan lebih agresif dengan tidak merender objek yang memang tidak perlu terlihat.
Misalnya, rumah jauh masih bisa menggunakan LOD rendah. Namun rumah di belakang gunung yang benar-benar tertutup sebaiknya tidak perlu dikirim untuk rendering.
Pada open-world, kombinasi frustum culling, occlusion culling, LOD, dan distance culling dapat mengurangi beban scene secara signifikan.
Dokumentasi Unreal Engine juga menempatkan visibility dan occlusion culling sebagai bagian penting dari optimasi rendering real-time untuk mengurangi jumlah mesh yang harus dirender.
Jadi, LOD bukan solusi tunggal. Ia bekerja paling efektif sebagai bagian dari sistem optimasi yang lebih luas.
Terapkan HLOD untuk Dunia yang Lebih Besar
Pada dunia terbuka, mengoptimalkan setiap objek secara individual terkadang belum cukup.
Bayangkan sebuah desa jauh terdiri dari 50 rumah, puluhan pohon, pagar, lampu, dan berbagai properti kecil. Meskipun masing-masing menggunakan LOD rendah, renderer masih harus menangani banyak objek.
Hierarchical Level of Detail atau HLOD dapat membantu mengatasi kondisi ini.
Unreal Engine menggunakan HLOD untuk menggabungkan sejumlah Static Mesh Actor menjadi proxy mesh dan material pada jarak pandang jauh. Hasilnya, jumlah actor serta draw call yang perlu diproses bisa berkurang.
Teknik ini sangat berguna untuk kota, pegunungan, kompleks bangunan, atau dunia terbuka yang memiliki banyak objek statis.
Jangan Asal Mengurangi Polygon
Pengurangan triangle memang penting, tetapi bukan berarti semakin rendah selalu semakin bagus.
Membuat banyak versi LOD juga memiliki biaya.
Setiap mesh tambahan membutuhkan ruang penyimpanan, memory, proses import, serta waktu produksi artist. Jika sebuah objek sudah sangat sederhana, membuat empat atau lima tingkat LOD mungkin tidak memberikan keuntungan berarti.
Pertimbangkan seberapa sering objek muncul dan seberapa besar pengaruhnya pada performa.
Prioritaskan aset yang jumlahnya banyak, memiliki geometry berat, dan sering terlihat pada jarak berbeda. Pohon, batu, gedung modular, kendaraan, serta environmental props biasanya menjadi kandidat bagus.
Sementara itu, objek kecil yang cepat hilang dari layar mungkin cukup menggunakan distance culling.
Profile Hasilnya pada Scene Nyata
Jangan berasumsi LOD otomatis meningkatkan FPS secara drastis.
Godot mencatat bahwa pengurangan primitive melalui mesh LOD akan lebih terasa ketika rendering memang menjadi bottleneck; jika game CPU-bound, peningkatan FPS mungkin tidak sebesar yang diharapkan.
Bandingkan frame time dengan LOD aktif dan nonaktif.
Periksa jumlah triangle, draw call, GPU time, CPU rendering time, dan memory. Lakukan pengujian pada scene berat seperti kota ramai, hutan luas, atau area dengan draw distance panjang.
Lebih penting lagi, lakukan penggunan perangkat minimum yang memang akan didukung game.
LOD yang terlihat sempurna di monitor 4K belum tentu memiliki transisi terbaik di smartphone berlayar kecil.
Menggunakan Level of Detail membantu developer menjaga kualitas visual tanpa memaksa hardware merender detail yang tidak terlihat pemain.
Atur tingkat geometry secara bertahap, prioritaskan siluet, hindari popping, dan kombinasikan LOD dengan culling serta HLOD.
Jangan hanya mengandalkan teori-uji setiap pengaturan pada scene nyata dan hardware target agar keseimbangan antara visual dan frame rate benar-benar tercapai.