Singkatnya: hutan lebat yang meyakinkan adalah pertarungan bos performa: ribuan pohon high-poly, transparansi berlapis, dan instance membentang ke cakrawala. Kamu memenangkannya dengan rantai LOD yang disiplin dan berakhir di impostor (billboard menghadap kamera yang memalsukan pohon 3D dari sudut mana pun), instancing dan culling agresif, dan beberapa trik shading agar pohon jauh yang murah tidak mengkhianati diri sendiri. Artikel ini menyusuri seluruh rantai dari mesh penuh ke billboard, trik impostor octahedral, dan bagaimana menjaga hutan yang sangat dioptimasi tidak terlihat mati.
Setiap pohon di sini berjarak berbeda dari kamera, jadi setiap pohon seharusnya berbiaya berbeda. Seni hutan murah adalah menghabiskan poligon hanya pada yang dekat dan memalsukan sisanya secara meyakinkan.
Ide inti: bayar per jarak
Sebuah pohon 5 meter jauhnya dan satu 500 meter jauhnya seharusnya tidak berbiaya sama. Rantai LOD menghabiskan detail penuh dari dekat dan representasi yang semakin murah dengan jarak, berakhir di billboard datar, jadi biaya total tetap datar saat hutan tumbuh.
Seluruh permainan ini adalah menolak membayar harga penuh untuk pohon yang kamera hampir tidak resolusi. Dari dekat, pohon adalah mesh penuh dengan kartu daun individual; dari jauh, ia segenggam piksel yang gambar datar reproduksi sempurna. Rantai LOD (level-of-detail) memformalkan itu: beberapa versi pohon yang sama dengan biaya menurun, ditukar berdasarkan ukuran layar, sehingga hutan sepuluh ribu pohon berbiaya kira-kira apa yang terlihat dalam detail alih-alih jumlah setiap pohon pada kualitas penuh. Tanpanya, kepadatan menskalakan waktu framemu secara linier ke tanah; dengannya, kamu bisa mendorong jumlah pohon jauh lebih tinggi untuk anggaran yang sama.
Rantai LOD, langkah demi langkah
LOD0 mesh penuh dengan kartu daun (dekat); LOD1–2 geometri dikurangi dan daun disederhanakan (menengah); LOD3 beberapa kartu atau kartu tunggal; LOD final impostor/billboard (jauh). Setiap langkah kira-kira memotong biaya setengah sementara pertukaran tetap tak terlihat.
Rantai LOD dedaunan tipikal berjalan begini: LOD0, mesh detail penuh dengan semua kartu daunnya, untuk pohon tepat di samping pemain; LOD1–LOD2, geometri batang dikurangi dan lebih sedikit kartu daun lebih besar, untuk plan tengah; LOD3, kluster kartu yang disederhanakan drastis; dan impostor final (pada dasarnya gambar datar) untuk semua yang jauh. Kerajinannya ada di jarak transisi dan blend, agar pertukaran tidak muncul tiba-tiba. Transisi LOD dither atau cross-fade menyembunyikan switch; pop keras di jarak yang salah adalah tanda yang mematahkan ilusi. Setel jarak terhadap kamera aktualmu, bukan default.
Impostor: memalsukan 3D dari sudut mana pun
Sebuah impostor (impostor octahedral) melakukan pra-render pohon dari puluhan sudut ke sebuah atlas, lalu menampilkan tampilan tertangkap terdekat sebagai billboard. Berbeda dari billboard datar, ia terlihat benar saat kamera bergerak di sekitarnya, murah, tapi 3D-ish.
Ujung jauh rantai adalah tempat penghematan terbesar hidup, dan impostor adalah trik cerdas yang membuatnya diterima. Billboard biasa (satu gambar datar yang berputar menghadap kamera) terlihat baik dari depan tapi merata dan meluncur tak alami saat kamu bergerak. Sebuah impostor octahedral menyelesaikan ini dengan melakukan pra-render pohon dari banyak sudut pandang yang diatur di sekitar bola, mengemasnya ke dalam atlas tekstur, dan menampilkan sudut tertangkap mana pun yang paling dekat dengan arah kamera saat ini (blending antara yang beberapa terdekat). Hasilnya terbaca sebagai pohon 3D nyata dari sudut mana pun dengan sebagian kecil dari biaya, itulah mengapa impostor adalah tulang punggung hutan jauh yang meyakinkan. Mereka di-bake sekali dan berbiaya hampir nol untuk digambar.
Lapisan tanah menggandakan hitungan instance dengan cepat. Semak butuh disiplin sama seperti pohon: instance-kan, LOD-kan, dan cull dengan keras: pakis di 80 meter tidak seharusnya menggambar sama sekali.
Instancing dan culling
Gambar pohon berulang sebagai instance agar ribuan berbiaya sedikit draw call, dan cull agresif: frustum-cull yang di luar layar dan distance-cull hal kecil. Instancing memperbaiki biaya CPU; culling menghentikanmu membayar untuk yang tak terlihat.
Bahkan dengan LOD sempurna, mengirimkan sepuluh ribu pohon sebagai objek individu mengubur CPU. Instancing meruntuhkan semua salinan pohon menjadi segenggam draw call, yang tidak bisa dinegosiasikan untuk hutan nyata, dan itu persis apa yang bake scatter ke instance native engine berikan padamu. Di atas itu, cull tanpa ampun: frustum culling membuang apa pun di luar tampilan, dan distance culling menghapus clutter tanah dan dedaunan kecil yang terlalu mungil untuk diperhatikan di luar jangkauan tertentu. Rumput dan semak khususnya harus punya jarak cull keras dan dekat, karena mereka menggandakan hitungan instance lebih cepat dari pohon. Alur kerja yang melukis kepadatan lalu bake ke mesh ter-instance (seperti Numivo) menyerahkan ke engine tepatnya bentuk yang di-batch dan bisa di-cull yang dibutuhkan hutan lebat.
Menjaga hutan murah tetap hidup
Optimasi berat dapat membuat hutan terlihat statis dan mati: lawan itu dengan angin halus di LOD dekat, variasi warna dan skala antar instance, dan shading yang mencegah impostor jauh terbaca sebagai kardus datar.
Risiko dari semua efisiensi ini adalah hutan yang berjalan hebat dan terasa tak bernyawa. Tiga sentuhan murah membawanya kembali: angin, yaitu animasi vertex pada LOD dekat sehingga dedaunan dekat bergerak, meskipun impostor jauh tetap diam (tak ada yang memperhatikan pohon statis di 300 meter). Variasi, yaitu randomisasi skala, rotasi, dan tint per instance sehingga mata tidak menangkap pengulangan; pohon identik adalah tanda copy-paste. Dan perhatian shading pada impostor, yaitu bake pencahayaannya agar tidak merata menjadi kardus jelas saat sudut matahari berubah. Habiskan waktu frame yang kamu hemat pada detail-detail dekat ini, di mana pemain sebenarnya melihat, dan hutan yang dioptimasi terasa sama hidupnya dengan yang tidak dioptimasi, sambil berjalan beberapa kali lebih cepat.
Angka lapangan yang layak dicuri
- Prinsip biaya: bayar per jarak, pohon jauh tidak boleh berbiaya seperti yang dekat
- Rantai LOD: mesh penuh → dikurangi → kluster kartu → impostor, masing-masing ~memotong biaya setengah
- Impostor = sudut pra-render dalam atlas → billboard 3D-ish dari tampilan mana pun
- Instance-kan pengulangan (sedikit draw call) + cull-keras dedaunan kecil jauh
- Jaga hidup: angin LOD dekat + variasi per instance + shading impostor di-bake
Mini-FAQ
Billboard vs impostor, apa bedanya? Billboard adalah satu gambar datar yang menghadap kamera dan merata saat kamu bergerak di sekitarnya. Impostor menyimpan banyak sudut dan menampilkan yang benar, jadi ia bertahan dalam 3D. Untuk apa pun yang pemain orbit atau lewati, gunakan impostor; billboard biasa hanya baik untuk latar belakang yang benar-benar jauh dan statis.
Berapa level LOD yang dibutuhkan sebuah pohon? Umumnya tiga sampai empat plus impostor. Lebih banyak tidak otomatis lebih baik: setiap level adalah biaya authoring dan memori. Cukup untuk membuat setiap pertukaran langkah kecil tak terlihat adalah target, bukan maksimum.
Apakah Nanite membuat ini usang? Ia mengubah sisi geometri (Nanite menangani detail mesh padat tanpa LOD tradisional) tapi transparansi (kartu daun), disiplin instancing, dan culling masih penting, dan impostor tetap berguna untuk jarak jauh. Prinsip bertahan; tooling bergeser.
Apa yang paling sering membunuh performa hutan? Overdraw dari kartu daun transparan yang tumpang tindih, dan dedaunan tanah yang tidak di-cull. Kencangkan kartu daun, cull semak di dekat, dan instance semuanya: trio itu mengklaim kembali sebagian besar anggaran sebelum kamu bahkan menyentuh mesh pohon.
Hutan lebat adalah salah satu hal paling menghukum untuk di-render dan salah satu paling memuaskan untuk dikerjakan dengan benar. Bangun rantai LOD, biarkan impostor membawa jarak, instance dan cull tanpa ampun, dan habiskan penghematanmu pada angin dan variasi di dekat, dan kamu akan punya hutan yang membentang ke cakrawala dan mempertahankan framerate-nya.

