Bagaimana engine modern mengatasi overdraw dedaunan
Oleh Oleg Sidorkin, CTO dan Salah Satu Pendiri Cinevva

Hutan adalah salah satu hal terburuk yang bisa Anda minta untuk dirender oleh GPU. Setiap daun adalah quad bertekstur dengan bentuk yang dipotong menggunakan alpha mask. Puluhan quad tersebut bertumpuk di sepanjang setiap sinar pandang. Rasterizer tidak memiliki cara untuk mengetahui sebelumnya fragmen mana yang akan lolos uji alpha, sehingga optimasi early-Z standar yang menyelamatkan adegan opaque sebagian besar dinonaktifkan. Akibatnya, satu piksel layar dapat menjalankan shader daun penuh sebanyak 10 atau 15 kali sebelum frame selesai. Itulah overdraw dedaunan, dan ini merupakan bagian termahal dari sebuah frame dunia terbuka dalam game apa pun yang dirilis selama satu dekade terakhir.
Kabar baiknya, masalah ini sudah terpecahkan. Bukan dalam arti bahwa seseorang memperbaikinya dengan satu trik, melainkan karena ada rangkaian tujuh atau delapan teknik yang, jika digabungkan, menurunkan overdraw efektif dari 8-15x dalam hutan lebat menjadi 1-2x. Setiap engine modern menyertakan variasi dari rangkaian ini. Berikut isi rangkaian tersebut, alasan setiap bagiannya diperlukan, dan referensi utama untuk masing-masing teknik.
1. Mengapa overdraw dedaunan begitu membebani
Dalam adegan opaque pada umumnya, GPU melakukan penolakan depth awal: bahkan sebelum pixel shader berjalan, perangkat keras memeriksa depth buffer yang ada dan melewati fragmen yang sudah berada di belakang sesuatu. Proses ini pada dasarnya gratis dan membuat biaya geometri padat tetap masuk akal.
Dedaunan yang diuji dengan alpha merusak mekanisme ini. Fragment shader harus benar-benar berjalan untuk mengevaluasi tekstur alpha dan memanggil discard (atau clip) pada piksel yang dikeluarkan oleh mask. Perangkat keras tidak dapat mengetahui apakah sebuah fragmen akan dibuang sampai shader selesai berjalan, sehingga pada sebagian besar GPU, penggunaan discard di bagian mana pun dalam shader menonaktifkan early-Z sepenuhnya untuk draw call tersebut. Pada GPU berbasis tile (perangkat seluler, seri M, dan beberapa konsol), hal ini dapat menonaktifkan Hi-Z dan kompresi depth untuk seluruh frame. Pixel shader berjalan sekali untuk setiap segitiga yang menutupi sebuah piksel, dan sebagian besar evaluasi tersebut berakhir dengan discard.
Tumpuk 10 quad daun di depan satu piksel layar, maka shader daun akan berjalan 10 kali. Kalikan dengan 4 juta piksel dan biayanya menjadi luar biasa besar. Ulasan Marco Salvi, Menggunakan Early-Z atau Tidak, adalah pengantar paling mudah dipahami tentang alasan hal ini terjadi pada tingkat perangkat keras, dan merupakan tempat yang tepat untuk memulai jika Anda belum pernah memikirkannya sebelumnya.

2. Depth prepass untuk geometri masked
Peningkatan terbesar dari satu teknik, dan teknik yang disertakan oleh setiap engine modern, adalah membagi proses rendering dedaunan menjadi dua pass. Pass pertama hanya menulis depth, menggunakan shader minimal yang menjalankan uji alpha, membuang piksel yang dikeluarkan oleh mask, dan tidak menulis apa pun selain depth. Pass kedua merender material penuh dengan depth testing yang diatur ke "sama dengan" dan penulisan depth dinonaktifkan. Setiap piksel yang terlihat kini menjalankan shading BRDF penuh tepat satu kali, sebanyak apa pun quad daun yang bertumpuk di belakangnya.
Ini terdengar seperti pekerjaan ganda karena segitiga yang sama diproses dua kali, tetapi shader prepass sangat murah (satu sampel tekstur, satu discard, dan satu penulisan depth), sehingga penghematan pada pass utama jauh melampaui biaya tambahannya. Dalam hutan lebat, pass utama berubah dari menjalankan shader daun penuh 10-15 kali per piksel menjadi tepat satu kali.
Unreal, Frostbite, Decima, serta cabang modern Rage dan Dunia semuanya melakukan ini. Teknik ini juga merupakan alasan utama material masked masih lebih murah daripada material translucent di semua engine tersebut.
Ulasan mendalam:
- Pettineo, Menggunakan Early-Z atau Tidak (ulasan utama tentang interaksi
discarddengan Hi-Z dan early-Z). - Wihlidal, Mengoptimalkan Pipeline Grafis dengan Compute (GDC 2016, arsitektur depth prepass dan culling berbasis prepass milik Frostbite).
- Sanders, Antara Teknologi dan Seni: Vegetasi Horizon Zero Dawn (GDC 2018, mencakup rendering dedaunan dua pass milik Decima).
- Persson, Beberapa Catatan tentang Z (masih menjadi salah satu penjelasan paling jelas tentang pengujian depth-equal dan keekonomian prepass).
3. LOD agresif dan impostor oktahedral
Peningkatan terbesar kedua adalah tidak merender daun sama sekali ketika tidak diperlukan. Aset dedaunan disertakan dengan beberapa tingkat LOD. Tingkat terdekat menggunakan mesh lengkap dengan kartu-kartu daun individual. Pada jarak menengah, daun digabungkan menjadi kartu komposit yang lebih padat (serumpun 30 daun menjadi 1 kartu bertekstur dengan siluet yang sama). Setelah melewati ambang jarak tertentu, seluruh pohon berubah menjadi sebuah impostor: geometri kecil yang diberi tekstur berupa tampilan pohon yang telah dirender sebelumnya dari berbagai sudut.
Format impostor modern adalah impostor oktahedral: geometri bersisi 8 yang diberi tekstur berupa atlas tampilan yang diambil dari titik-titik pada sebuah bola menggunakan pemetaan oktahedral. Saat runtime, shader memilih dua atau tiga tampilan prarender terdekat berdasarkan arah kamera, lalu memadukannya. Hasilnya adalah representasi pengganti dengan sedikit segitiga yang tampak 3D dari sudut mana pun serta dapat memiliki shading yang tepat, normal map, dan bahkan animasi angin. Implementasi Ryan Brucks, yang awalnya merupakan plugin komunitas dan kini menjadi bagian dari Unreal, adalah rujukan utamanya. Hutan dengan miliaran pohon di Microsoft Flight Simulator pada dasarnya menggunakan impostor oktahedral di semua tempat kecuali di dekat kamera.
Keuntungan struktural yang lebih besar adalah impostor bersifat opaque atau hampir opaque pada jarak jauh. Kartu komposit berisi 30 daun adalah satu quad masked, bukan 30 quad. Impostor satu pohon utuh hanya terdiri dari beberapa sisi, bukan ribuan. Overdraw jarak jauh pun turun hingga nyaris nol.
Ulasan mendalam:
- Brucks, Impostor Oktahedral (referensi utama, lengkap dengan perhitungan matematis dan implementasi UE).
- Halen, Impostor Oktahedral di Unreal Engine (alur kerja terintegrasi di UE).
- Häggström, Rendering Vegetasi Real-Time (tesis yang jelas mengenai rantai LOD, impostor, dan perhitungan matematis di baliknya).
- Crytek, Integrasi SpeedTree di CryEngine 3 (GPU Gems 3, masih menjadi pengantar terbaik tentang rantai LOD pohon).
4. Cluster culling berbasis GPU
Bahkan dengan depth prepass, prepass itu sendiri tetap membutuhkan biaya: prepass masih harus menyentuh setiap segitiga dari setiap pohon yang terlihat (atau mungkin terlihat). Engine modern menekan biaya tersebut dengan cluster culling berbasis GPU, yang membuang seluruh kelompok segitiga sebelum rasterizer melihatnya.
Pipeline-nya bekerja seperti ini: setiap mesh dibagi sebelumnya menjadi cluster berisi 64 atau 128 segitiga dengan bounding box yang rapat dan kerucut normal. Saat render berlangsung, compute shader menelusuri daftar instance, menguji setiap instance terhadap frustum, lalu menguji setiap cluster dari setiap instance yang terlihat terhadap frustum, kemudian melakukan uji occlusion Hi-Z pada setiap cluster yang lolos menggunakan depth pyramid dari frame sebelumnya. Seluruh cabang pohon yang tersembunyi di balik bukit atau berada di belakang pohon lain disingkirkan sebelum vertex shader berjalan. Hasilnya adalah daftar ringkas argumen "render cluster ini" yang diteruskan langsung ke satu panggilan DrawIndirect.
Inilah yang memungkinkan hutan berisi 10.000 pohon dirender dalam hitungan milidetik, bukan detik. Presentasi Assassin's Creed Unity dari Ubisoft memperkenalkan pipeline ini dalam bentuk yang digunakan di produksi (20-40% segitiga disingkirkan, 30-80% segitiga bayangan disingkirkan, dan jumlah instance di layar 10x lebih banyak dibandingkan generasi sebelumnya), lalu presentasi Frostbite dari Wihlidal mengembangkannya lebih jauh. Nanite di UE5 adalah hasil akhir yang terlihat dari perkembangan ini: cluster culling hingga ke tingkat piksel.
Ulasan mendalam:
- Haar dan Aaltonen, Pipeline Rendering Berbasis GPU (SIGGRAPH 2015, presentasi fundamental Assassin's Creed Unity).
- Wihlidal, Mengoptimalkan Pipeline Grafis dengan Compute (GDC 2016, prepass berbasis GPU milik Frostbite).
- Karis, Stubbe, Wihlidal, Ulasan Mendalam tentang Geometri Tervirtualisasi Nanite (SIGGRAPH 2021, cluster culling pada granularitas meshlet).
- Liktor, Arsitektur Pipeline Rendering Geometri di Activision (versi cluster culling milik Call of Duty, 2021).
5. Pengurutan instance dan cluster dari depan ke belakang
Setelah prepass bekerja sebagaimana mestinya, urutan mulai menjadi penting. Prepass menulis depth, tetapi hanya untuk fragmen yang lolos uji alpha. Jika Anda merender bagian belakang hutan terlebih dahulu dan bagian depan terakhir, setiap fragmen depan akan menimpa fragmen belakang, sementara shader prepass tetap berjalan untuk bagian belakang. Jika Anda merender dari depan ke belakang, setiap draw berikutnya mengisi lebih banyak depth buffer dengan nilai yang lebih kecil, dan Hi-Z menolak semakin banyak fragmen belakang sebelum shader berjalan.
Inilah alasan hampir setiap engine modern mengurutkan instance dedaunan berdasarkan jaraknya dari kamera sebelum menjalankan prepass. Pengurutan ini murah (beberapa ratus ribu instance di GPU menggunakan radix sort), dan mengubah prepass itu sendiri menjadi operasi yang memangkas bebannya secara mandiri. Culling tingkat cluster melakukan pengurutan pada granularitas meshlet karena alasan yang sama. Depth prepass dan pengurutan dari depan ke belakang adalah pasangan teknik yang masing-masing bagus, tetapi menjadi luar biasa saat digabungkan.
Ulasan mendalam:
- Persson, Depth secara Mendalam (catatan arsitektural tentang pengurutan depth buffer, keekonomian prepass, dan perilaku Hi-Z).
- Giesen, Perjalanan Menelusuri Pipeline Grafis (penjelasan teknis mendalam tentang pengaruh urutan draw terhadap tingkat penolakan Hi-Z).
- Wihlidal, Mengoptimalkan Pipeline Grafis dengan Compute (GDC 2016, mencakup pengurutan instance di GPU milik Frostbite).
6. Transisi LOD dengan dithering dan alpha ter-hash
Jebakan besar lainnya adalah fading. Cara naif untuk bertransisi antara dua LOD (atau memudarkan masuk atau keluar sebuah instance saat kamera mendekat) adalah alpha blending. Namun, geometri hasil blending tidak dapat menulis ke depth buffer, sehingga setiap pohon yang sedang memudar masuk ke jalur translucent yang lambat dan merusak prepass. Solusinya adalah mempertahankan geometri di jalur masked dan melakukan fading di dalam uji alpha.
Dua teknik utama:
- Transisi LOD dengan dithering mengambil sampel pola Bayer 4x4 atau 8x8 (atau tekstur blue-noise dalam screen space), lalu menggunakannya sebagai pengubah cutoff per piksel. Pohon pada blend 50% memiliki pola kotak-kotak piksel yang bertahan; piksel yang hilang diisi oleh pola kotak-kotak komplementer dari LOD berikutnya. TAA menyatukan pola tersebut menjadi perpaduan halus dalam dua atau tiga frame. Murah, stabil, dan berpadu dengan semua sistem lain di dalam engine.
- Uji alpha ter-hash (Wyman & McGuire, I3D 2017) mengganti ambang alpha tetap 0,5 dengan ambang ter-hash per piksel dalam rentang [0,1). Geometri alpha yang jauh dan biasanya menghilang sepenuhnya (karena alpha hasil mipmap turun di bawah 0,5) tetap mempertahankan sebaran piksel yang stabil. Sekali lagi, TAA membereskan hasil akhirnya.
Kedua teknik tersebut mempertahankan dedaunan di jalur opaque/masked tempat depth prepass bekerja, sehingga Anda tidak perlu membayar seluruh biaya rendering translucent hanya untuk memudarkan sesuatu. Alpha to coverage adalah kerabat gagasan yang sama dari era MSAA: ubah alpha menjadi coverage mask subpiksel dan dapatkan transparansi parsial tanpa meninggalkan jalur masked. Kekurangannya, A2C hanya benar-benar unggul dengan MSAA, yang tidak lagi digunakan oleh sebagian besar deferred renderer modern.
Ulasan mendalam:
- Wyman dan McGuire, Uji Alpha Ter-hash (I3D 2017, makalah utama tentang hashed alpha).
- Castaño, Menghitung Alpha Mipmap (blog The Witness, cara yang tepat untuk membuat mip tekstur hasil uji alpha agar pohon di kejauhan tidak menghilang).
- Yuksel, Distribusi Alpha untuk Uji Alpha (penyempurnaan yang lebih baru untuk alpha mipmap).
- NVIDIA, Uji Alpha dengan Anti-Aliasing (tinjauan tentang A2C, hashed alpha, dan alternatif berbasis dithering).
7. Mengurangi biaya shading pada piksel masked
Bahkan dengan prepass sempurna dan culling sempurna, Anda masih harus menjalankan shading satu kali untuk setiap piksel dedaunan yang terlihat. Engine juga mengurangi biaya tersebut:
- BRDF yang lebih murah. Dedaunan bersifat matte dan tidak benar-benar memerlukan jalur spekular Cook-Torrance penuh. Difus wrapped-Lambertian ditambah aproksimasi spekular satu baris sudah lebih dari cukup.
- Normal map berfrekuensi lebih rendah. Daun pada dasarnya sudah penuh detail acak. Normal map 256x256 terlihat sama dengan yang berukuran 1024x1024 pada jarak pandang umum dan menghemat bandwidth.
- Tanpa parallax, anisotropi, atau clearcoat. Seluruh menu fitur PBR tersebut dimatikan untuk daun.
- Transmisi tipis dua sisi alih-alih subsurface scattering penuh. Daun meneruskan cahaya dari belakang, tetapi Anda dapat memalsukannya dengan satu dot product untuk cahaya belakang.
- Shading setengah resolusi di beberapa engine. Dedaunan di-shading pada laju 1/4 atau 1/2 piksel lalu di-upscale. Noise stokastik dari TAA menyamarkan resampling tersebut.
- Lewati tekstur detail dan decal pada material masked secara default.
Masing-masing memberikan peningkatan kecil. Jika digabungkan, shader dedaunan masked dapat berjalan 2-3x lebih cepat daripada material opaque yang setara.
Pembahasan mendalam:
- Lagarde dan de Rousiers, Memindahkan Frostbite ke Physically Based Rendering 3.0, bagian tentang dedaunan dan translusensi (SIGGRAPH 2014, penyesuaian PBR rujukan untuk material tipis dua sisi).
- Jimenez, Rendering Karakter Generasi Berikutnya (matematika wrapped-Lambertian dan translusensi belakang, awalnya untuk kulit tetapi kemudian banyak diterapkan pada daun).
- Sanders, Antara Teknologi dan Seni: Vegetasi Horizon Zero Dawn (GDC 2018, dengan penyederhanaan shader dedaunan Decima).
8. Visibility buffer dan Nanite untuk material masked
Jawaban paling bersih untuk overdraw adalah memisahkan shading dari rasterisasi sepenuhnya. Visibility buffer merasterisasi geometri ke buffer ringkas (hanya ID segitiga dan ID instance per piksel), lalu menjalankan material penuh sebagai pass deferred yang membaca visibility buffer dan melakukan shading pada setiap piksel tepat satu kali. Secara desain, tidak ada overdraw pada tahap shading. Makalah Burns dan Hunt tahun 2013 memperkenalkan pendekatan ini; UE5 Nanite adalah implementasi berkualitas produksi, termasuk untuk dedaunan masked sejak UE 5.5.
Keunikan Nanite adalah pendekatan ini dilakukan dengan geometri tervirtualisasi pada tingkat cluster, sehingga rasterizer berjalan melalui jalur perangkat lunak untuk segitiga subpiksel dan menjaga overdraw tetap terbatas. Material masked di Nanite memerlukan fitur "programmable raster": alpha test berjalan selama pass visibility-buffer, tetapi shading material tetap hanya dilakukan sekali per piksel yang terlihat dalam deferred resolve. Hasilnya, dedaunan Nanite yang sangat rapat—yang dahulu terkenal lambat saat memakai material masked—kini dapat bersaing dengan material opaque atau bahkan lebih murah, karena overdraw pada waktu shading bernilai nol. Ada kompromi: sering kali lebih baik mengalirkan geometri pohon opaque berpoligon tinggi melalui Nanite daripada mempertahankan pohon berbasis kartu masked berpoligon rendah, karena jalur masked menambahkan biaya programmable-raster.
Pembahasan mendalam:
- Burns dan Hunt, Visibility Buffer: Pendekatan Ramah Cache untuk Deferred Shading (JCGT 2013, makalah aslinya).
- Karis, Stubbe, Wihlidal, Pembahasan Mendalam tentang Geometri Tervirtualisasi Nanite (SIGGRAPH 2021, arsitektur produksinya).
- Epic, Material Berbasis GPU Nanite (GDC 2024, dengan pipeline material masked dan programmable-raster).
- Catatan dari "Material Berbasis GPU Nanite" (panduan pihak ketiga yang jelas untuk presentasi yang sama).
9. Representasi bayangan terpisah untuk dedaunan
Shadow map untuk dedaunan yang diuji dengan alpha merupakan masalah bayangan termahal kedua dalam frame dunia terbuka, setelah cascade berukuran besar. Setiap cascade memerlukan depth prepass sendiri, setiap prepass menjalankan alpha test, dan biayanya cepat menumpuk pada 4 cascade serta puluhan frustum cahaya. Karena itu, kebanyakan engine tidak merender bayangan dedaunan dengan cara yang sama seperti merender warna dedaunan.
Pengganti yang umum:
- Bayangan mesh distance field (UE Lumen, engine khusus). Setiap mesh memiliki signed distance field yang telah dihitung sebelumnya. Cone trace singkat melalui SDF menghasilkan bayangan lembut tanpa pernah menyentuh mesh yang diuji dengan alpha. Ini sangat cocok untuk pohon karena SDF menangkap siluet tajuk sebagai satu gumpalan padat dan mengabaikan detail per daun.
- Cascade beresolusi lebih rendah untuk dedaunan. Bayangan dedaunan dimasukkan ke slice setengah resolusi lalu di-upsample dengan pemfilteran yang mempertahankan tepi. Mata tidak menyadari penurunan resolusi karena bayangannya memang sudah lembut.
- Shadow map alpha-to-coverage dengan MSAA. Pada engine yang masih memiliki MSAA dalam jalur bayangannya, A2C menghasilkan bayangan dedaunan bertepi halus tanpa biaya alpha test penuh.
- Bayangan kapsul untuk batang dan cabang besar, distance field untuk tajuk, dan alpha test penuh hanya pada cascade terdekat. Representasi yang berbeda digunakan untuk jarak yang berbeda, lalu dibaurkan dalam pass pencahayaan.
- Jarak penonaktifan WPO. World Position Offset yang digerakkan angin dimatikan setelah melewati ambang tertentu agar data bayangan yang di-cache tetap valid antar-frame. Virtual Shadow Maps milik UE sangat mengandalkan teknik ini.
Pembahasan mendalam:
- Epic, Bayangan Lembut Distance Field di Unreal Engine (rujukan utama UE untuk bayangan DF mesh).
- Wright, Lumen: Global Illumination Real-Time di Unreal Engine 5 (SIGGRAPH 2022, dengan integrasi mesh-SDF Lumen untuk dedaunan).
- Epic, Virtual Shadow Maps (arsitektur bayangan modern UE5, termasuk aturan caching dan penonaktifan WPO khusus dedaunan).
- Persson, Cascaded Shadow Maps Praktis (rujukan CSM yang masih menjadi standar, dengan catatan tentang objek pembentuk bayangan yang diuji dengan alpha).
10. Angin, animasi, dan caching bayangan
Masalah terkait yang tidak kentara: sebagian besar dedaunan bergerak. Animasi vertex yang digerakkan angin (World Position Offset di UE, dengan padanannya di Frostbite dan Decima) berarti geometri dedaunan tidak stabil dari satu frame ke frame berikutnya, sehingga merusak caching dan reproyeksi bayangan. Engine modern mengatasinya dengan dua cara:
- Batasi WPO berdasarkan jarak. Setelah melewati ambang tertentu, amplitudo animasi angin secara bertahap turun hingga nol. Mata juga tidak dapat melihat goyangannya dari jarak sejauh itu, sementara cache bayangan tetap valid.
- Masukkan pengaruh angin ke dalam batas cluster. Bounding box cluster diperbesar sebesar offset WPO maksimum agar culling tetap konservatif tanpa perlu mengunggah ulang data setiap frame.
- Offset fase per instance. Pohon-pohon identik menggunakan seed acak per instance untuk menggeser fase angin, sehingga hutan tidak bergoyang serempak tanpa harus membayar biaya animasi unik untuk setiap pohon.
Detail semacam ini tidak muncul dalam daftar teknik, tetapi dalam praktiknya menjadi pembeda antara hutan yang memerlukan 3 ms dan 9 ms.
Pembahasan mendalam:
- Sanders, Antara Teknologi dan Seni: Vegetasi Horizon Zero Dawn (GDC 2018, dengan pipeline animasi angin dan caching bayangan Decima).
- McAuley, Merender Dunia Far Cry 4 (GDC 2015, mencakup sampling grid angin untuk vegetasi).
- Epic, Dedaunan dan Virtual Shadow Maps (panduan komunitas UE5 tentang jarak penonaktifan WPO dan caching VSM).
11. Perhitungan gabungan
Tidak satu pun trik ini merupakan solusi tunggal untuk semuanya. Hal yang menarik adalah apa yang terjadi saat semuanya ditumpuk:
- Pass dedaunan masked yang naif pada adegan hutan lebat menghasilkan overdraw efektif sebesar 8-15x. Setiap piksel yang terlihat menjalankan shader daun sebanyak 8 hingga 15 kali.
- Tambahkan depth prepass dan overdraw pass utama turun menjadi ~1x, tetapi prepass itu sendiri masih menyentuh semuanya.
- Tambahkan pengurutan dari depan ke belakang dan prepass mulai memangkas pekerjaannya sendiri.
- Tambahkan GPU culling tingkat cluster dan prepass hanya menyentuh apa yang mungkin terlihat.
- Tambahkan rantai LOD dan imposter, lalu jumlah quad yang terlihat turun satu tingkat besaran setelah jarak 30 m.
- Tambahkan jalur visibility-buffer / Nanite dan tahap shading benar-benar berjalan sekali per piksel, bahkan pada tumpang tindih yang rapat.
- Tambahkan bayangan distance field dan biaya bayangan berhenti meningkat mengikuti alpha test.
Hasil utamanya, yang berulang kali muncul dalam presentasi yang ditautkan di atas: overdraw efektif merosot dari 8-15x menjadi 1-2x, dan total biaya frame dedaunan turun 4-6x dalam adegan hutan lebat. Itulah alasan utama game dunia terbuka modern dapat merender hutan pada 60+ fps di perangkat keras konsumen.

12. Artinya bagi browser
Sebagian besar rangkaian ini dapat dipetakan dengan baik ke WebGPU. Kami telah merilis GPU-driven culling, indirect dispatch, oklusi Hi-Z, dan prepass terurut dari depan ke belakang dalam engine browser dunia terbuka. Depth prepass untuk geometri masked cukup mudah diterapkan: WebGPU mendukung pengujian depth-equal dan discard dalam fragment shader, dengan catatan yang sama terkait early-Z. Imposter oktahedral dapat di-port secara mekanis; matematikanya hanya berupa pembukaan bungkus bola ke oktahedron dan pengindeksan atlas.
Bagian yang lebih sulit adalah teknik-teknik modernnya. Visibility buffer di WebGPU berarti menulis ID segitiga 32-bit ke render target dan me-resolve material dalam compute pass layar penuh; komponen dasarnya sudah tersedia, tetapi orkestrasi penerapannya cukup rumit. Bayangan mesh distance field memerlukan tekstur 3D per aset dan cone trace singkat, yang keduanya masih dalam jangkauan WebGPU. Hashed alpha dan LOD dengan dithering masing-masing hanya membutuhkan satu fungsi shader.
Jalur ke depan untuk dedaunan di browser sama seperti untuk komponen lain dalam rangkaian ini: rilis lebih dahulu bagian yang murah dan tangguh (prepass, instance terurut, LOD, imposter, hashed alpha), lalu tambahkan mekanisme berat (visibility buffer, bayangan mesh-SDF) di atasnya. Batas minimum perangkat keras browser akhirnya cukup tinggi sehingga tidak ada alasan arsitektural bagi hutan WebGPU untuk tidak tampil dan berjalan seperti versi konsol. Yang tersisa hanyalah alasan rekayasa, dan alasan rekayasa adalah jenis tantangan yang kami sukai.
Bacaan lebih lanjut tentang keseluruhan rangkaian
Jika Anda menginginkan satu sumber yang merangkum semua ini, arsip SIGGRAPH "Advances in Real-Time Rendering in Games" (advances.realtimerendering.com) memiliki presentasi rujukan tentang dedaunan dan rendering berbasis GPU sejak 2014. Artikel profiling GPU karya Adrian Courrèges mencakup uraian frame demi frame untuk GTA V dan Horizon Zero Dawn, yang memperlihatkan setiap pass yang dibahas di sini sesuai urutan produksinya. Khusus untuk matematika alpha test, halaman riset Chris Wyman menyediakan makalah hashed-alpha dan transparansi stokastik beserta shader referensinya. Bab-bab tentang transparansi, sampling, dan penanganan depth dalam Real-Time Rendering, edisi ke-4 juga masih menjadi titik awal rujukan.