Skip to content

Awan volumetrik dan efek cuaca dalam game modern

Oleh Oleg Sidorkin, CTO dan Co-Founder Cinevva

Adegan AAA bergaya dengan awan badai volumetrik yang menjulang, kilat, tirai hujan, dan jalan batu basah yang memantulkan langit

Beberapa minggu lalu saya menulis tentang teknik rendering yang benar-benar digunakan dalam game AAA modern. Salah satu bagian yang belum banyak saya bahas adalah langit dan cuaca, karena topik ini layak mendapatkan daftarnya sendiri. Awan, kabut, hujan, dan salju adalah sistem yang mengubah demo medan menjadi sebuah tempat yang terasa nyata. Sistem-sistem ini juga berbagi lebih banyak kode daripada yang terlihat. Awan volumetrik, kabut permukaan, dan sinar dewa semuanya menggunakan ray-march yang sama. Jalan basah, timbunan salju, dan jejak kaki semuanya menggunakan perpindahan permukaan serta trik PBR yang sama. Angin adalah satu vektor arah yang dibaca oleh semua elemen dalam adegan.

Berikut tur singkat dan subjektif mengenai cara studio-studio besar membangun semua ini pada 2026, beserta makalah dan presentasi engine di balik setiap bagiannya.

1. Langit dan atmosfer berbasis fisika

Hamburan atmosfer adalah fondasinya. Warna langit, kabut di cakrawala, perubahan warna pegunungan jauh menjadi biru, serta rona jingga matahari terbenam, semuanya berasal dari hamburan cahaya di udara. Engine modern menghitungnya berdasarkan fisika: hamburan Rayleigh untuk warna biru, hamburan Mie untuk kabut di sekitar matahari, dan penyerapan ozon untuk warna ungu tua di zenit.

Metode Bruneton tahun 2008 yang asli memanggang semuanya ke dalam lookup table 4D, sehingga membatasi perubahan waktu secara dinamis dan menimbulkan artefak LUT ketika sudut matahari rendah. Pembaruan Sébastien Hillaire pada 2020, yang digunakan oleh komponen Sky Atmosphere UE5, mengganti LUT berdimensi tinggi dengan beberapa tekstur 2D dan pendekatan hamburan berganda yang diperbarui setiap frame. Teknik ini dapat berjalan dari ponsel hingga PC kelas atas.

Langit berbasis fisika pada jam keemasan dengan gradasi halus dari jingga ke biru di atas siluet pegunungan jauh

Pembahasan mendalam:

2. Awan volumetrik dengan noise Perlin-Worley

Teknik awan yang menjadi fondasi dalam game modern bermula dari presentasi Andrew Schneider tentang Horizon Zero Dawn pada 2015. Awan bukanlah mesh. Awan merupakan fungsi densitas 3D yang didefinisikan oleh noise berlapis: campuran Perlin-Worley berfrekuensi rendah menghasilkan bentuk awan secara keseluruhan, sementara noise Worley berfrekuensi lebih tinggi mengikis siluetnya menjadi tepian tipis menyerupai serabut. Peta cuaca (tekstur 2D yang diambil sampelnya berdasarkan XZ dunia) mengendalikan cakupan, jenis awan, dan presipitasi di setiap wilayah. Gradasi berbasis ketinggian memadukan profil kumulus, stratus, dan sirus berdasarkan ketinggian.

Renderer menelusuri sinar dari kamera menembus volume awan sambil mengakumulasi densitas dan hamburan. Iterasi "Nubis" pada 2017 menambahkan pembuatan konten dan animasi skala regional, sementara implementasi PS4 aslinya merender seluruh langit dalam waktu sekitar 2 milidetik. Sebagian besar studio yang kini merilis awan volumetrik masih menelusuri asal-usul teknik mereka ke makalah ini.

Bentuk awan 3D yang diuraikan menjadi pola noise Perlin dan Worley bertumpuk, memperlihatkan cara detail mengikis siluetnya

Pembahasan mendalam:

3. Awan voxel dan Nubis³

Evolusi Nubis pada 2023 sepenuhnya meninggalkan representasi bentuk 2,5D dan beralih ke voxel 3D sejati. Setiap voxel menyimpan densitas awan secara langsung, sehingga seniman dapat memahat dan menganimasikan bentuk awan seperti ketika mereka memahat medan. Biaya untuk beralih ke representasi yang lebih padat dikompensasi oleh akselerasi ray-march menggunakan signed distance field terkompresi dan teknik cerdas untuk meningkatkan resolusi data voxel yang jarang.

Hasilnya adalah bentang awan yang dapat diterbangi dari dalam tanpa membuat trik di baliknya terlihat rusak. Teknik ini berlebihan bagi kebanyakan studio, tetapi inilah arah perkembangan di kelas atas.

Awan kumulus yang diperlihatkan sebagai susunan grid voxel 3D, dengan tepian halus menyerupai serabut yang menyatu dengan bagian dalamnya yang tebal

Pembahasan mendalam:

4. Rendering awan berlapis dan latar 2D

Tidak semua studio mampu menjalankan awan bervolume penuh, dan tidak semua sudut kamera membutuhkannya. Banyak game menggabungkan beberapa teknik: sirus di ketinggian tinggi dirender sebagai lapisan 2D yang bergulir, kumulus di ketinggian menengah sebagai sinar volumetrik, dan stratus di ketinggian rendah sebagai lapisan tipis media partisipatif. Cakrawala sering kali menggunakan cubemap langit yang telah dipanggang sebelumnya, lalu dipadukan oleh pass volumetrik setelah melewati jarak pemudaran.

Pelapisan inilah yang menjaga anggaran awan tetap masuk akal. Satu jenis awan pada kualitas penuh dapat menghabiskan 4–6 milidetik; melapiskan kualitas berbeda untuk ketinggian awan yang berbeda dapat mempertahankan tampilan yang sama dengan setengah biayanya.

Langit matahari terbenam yang dibagi menjadi tiga lapisan awan: serabut sirus tinggi, gumpalan kumulus menengah, dan kabut stratus rendah di dekat cakrawala

Pembahasan mendalam:

5. Kabut volumetrik dengan grid froxel

Kabut adalah bidang 3D, bukan efek layar 2D. Pendekatan modern yang menjadi standar adalah grid froxel: tekstur 3D yang disejajarkan dengan frustum pandang kamera, dengan setiap sel ("froxel" = frustum + voxel) menyimpan densitas dan warna yang telah menerima pencahayaan. Compute shader memasukkan hamburan dari setiap sumber cahaya ke dalam grid, mengakumulasi ekstingsi sepanjang sinar pandang, lalu menerapkan hasilnya sebagai pass layar penuh.

Inilah yang menghasilkan berkas cahaya melalui jendela, kabut berwarna di sekitar lampu titik, dan volume yang terlihat di sekitar ledakan. Ini juga merupakan mekanisme dasar untuk "perspektif atmosferik" yang memudarkan objek jauh ke udara. Teknik ini diperkenalkan oleh Bart Wronski untuk Assassin's Creed 4 dan distandardisasi oleh Sébastien Hillaire di Frostbite.

Frustum kamera yang divisualisasikan sebagai grid froxel 3D dengan sel lebih kecil di dekat kamera dan sel lebih besar di kejauhan, serta partikel kabut di dalamnya

Pembahasan mendalam:

6. Sinar dewa dan berkas krepuskular

Sinar matahari yang terlihat di udara berkabut bukanlah efek terpisah. Efek ini muncul dari sistem kabut yang sama, selama densitas kabut dan shadow map tersedia bagi compute shader yang sama. Ketika shader memasukkan cahaya ke dalam sebuah froxel, shader mengambil sampel shadow map pada posisi dunia froxel tersebut. Sel yang berada dalam bayangan tetap gelap, sementara sel yang terkena cahaya memperoleh warna matahari. Lakukan ray-march kamera melalui hasilnya dan sel-sel terang akan membentuk berkas yang berkesinambungan.

Varian screen-space yang lebih murah juga tersedia (radial blur dari posisi matahari ke dalam depth buffer) dan tetap menjadi pilihan tepat untuk perangkat seluler atau perangkat keras kelas bawah. Varian ini tidak dapat menangani posisi matahari di luar layar, tetapi biayanya nyaris nol.

Hutan saat fajar dengan sinar matahari membelah sela-sela batang pohon dan kabut permukaan, membentuk berkas sinar dewa yang jelas

Pembahasan mendalam:

7. Kilat dan peristiwa cuaca stokastik

Kilat adalah efek satu frame dengan dua bagian: mesh sambaran kilat serta respons tonemap dan pencahayaan seluruh adegan. Kilat itu sendiri biasanya berupa mesh billboard prosedural yang dibuat menggunakan algoritma pembagian rekursif segmen garis, diberi jitter agar tampak acak, dan meruncing ke arah tanah. Beberapa engine merendernya sebagai kilatan aditif dalam screen-space, sementara yang lain menggunakan geometri emisif dengan pencahayaan penuh yang menerangi dunia melalui injeksi lampu titik selama satu frame.

Bagian yang menarik justru adalah semua hal lainnya: bagian bawah awan diterangi dari bawah, tanah menjadi lebih terang selama dua frame, pengukuran eksposur otomatis membutuhkan beberapa frame untuk pulih, dan suara guntur yang tertunda diputar berdasarkan jarak. Jika dikerjakan dengan baik, semua ini mengubah kilatan 16 milidetik menjadi rangkaian lima detik yang membuat cuaca terasa sebagai sesuatu yang terjadi di dalam dunia, bukan sekadar di atasnya.

Kilat bercabang yang menyambar dari awan badai saat senja, menerangi bagian bawah awan dan siluet desa kecil

Pembahasan mendalam:

8. Partikel hujan, mesh hujan, dan tetesan dalam screen-space

Hujan yang turun dalam game modern jarang hanya berupa partikel. Solusi yang murah dan meyakinkan adalah sejumlah kecil tekstur bergulir yang direntangkan di atas quad vertikal atau quad yang sejajar dengan layar, lalu diterangi oleh probe matahari dan langit yang sama seperti semua elemen lainnya. Lebih dekat ke kamera, partikel guratan individual menambahkan detail. Pada lensa kamera itu sendiri, tekstur tetesan, jejak air yang mengalir, dan riak benturan menghadirkan kesan bahwa "Anda berada di dalam badai".

Angin memengaruhi arah hujan. Vektor angin yang sama mendorong peta cuaca awan, membengkokkan rumput, dan memiringkan quad hujan. Satu vektor untuk seluruh adegan, puluhan penggunanya. Badai hujan lebat pada malam hari dengan curahan hujan yang diterangi lampu depan dari kejauhan dan riak di jalan basah

Bahasan mendalam:

9. Permukaan basah, genangan, dan riak

Hujan yang tidak mengubah tanah akan langsung terlihat palsu. Permukaan basah merespons dengan menggelapkan albedo (air menyerap cahaya yang datang), meratakan normal (lapisan air menghaluskan mikropermukaan), dan menurunkan kekasaran (air hampir menjadi cermin sempurna pada sudut pandang landai). Perubahan shader-nya kecil, tetapi perubahan visualnya sangat besar.

Genangan digerakkan oleh mask: mask berbasis ketinggian atau yang dilukis pada vertex menentukan titik-titik rendah yang terisi air seiring meningkatnya parameter "wetness". Riak menggunakan tekstur normal map flipbook yang dipicu oleh benturan tetes hujan. Implementasi yang benar-benar bagus membangun kondisi kebasahan secara bertahap, sehingga badai hujan yang panjang perlahan membasahi dunia, sedangkan hujan singkat hanya menggelapkan bagian-bagian tinggi.

Jalan berbatu basah pada malam hari dengan genangan dangkal yang memantulkan papan neon dan lingkaran riak akibat benturan tetes hujan

Bahasan mendalam:

10. Akumulasi dan deformasi salju

Salju adalah masalah yang simetris dengan hujan: dunia harus mengingatnya, bukan sekadar menerimanya. Pendekatan standar menggunakan tekstur "akumulasi salju" dari atas yang terbentuk seiring waktu di mana pun langit terlihat (dihitung terhadap depth map atau shadow map dari atas). Shader terrain mengambil sampel mask ini dan memadukan material salju di area teduh serta displacement salju yang dalam di area terbuka.

Jejak kaki dan bekas ban dirender ke deformation map bergeser yang berpusat pada pemain. Saat kamera bergerak, jejak kaki lama bergulir keluar dan teksturnya berulang dari sisi lainnya. Shader terrain atau salju mengambil sampel deformation map ini dan mendorong vertex ke bawah pada area yang telah ditulisi. Salju di Battlefield 5 melakukan ini dengan tessellation perangkat keras; pendekatan yang lebih ringan menggunakan mesh terrain berkepadatan tinggi hanya dengan vertex displacement.

Lanskap bersalju bergaya dengan jejak kaki baru, timbunan salju di sekitar bebatuan, serpihan salju yang berjatuhan, dan pegunungan jauh yang berkabut

Bahasan mendalam:

11. Angin sebagai sistem global

Angin bukan efek partikel. Dalam engine produksi, angin adalah satu vektor global (terkadang field 3D beresolusi rendah) yang dibaca oleh setiap sistem dinamis dalam vertex shader-nya. Bilah rumput melengkung, cabang pohon bergoyang, kain berkibar, daun beterbangan, hujan menjadi miring, asap terbawa, dan weather map awan bergulir. Satu uniform diperbarui per frame, dengan puluhan konsumen.

Versi yang lebih kaya adalah "wind grid" yang menyimpan arah dan kekuatan berdasarkan sampel posisi dunia, sehingga memungkinkan badai dengan embusan terlokalisasi, lembah yang terlindungi, dan olakan di belakang bangunan. Vegetasi juga biasanya mendapatkan offset per vertex yang disematkan saat proses authoring agar pohon-pohon identik tidak bergoyang serempak. Hasilnya adalah dunia yang bernapas dengan irama yang sama.

Angin kencang meniup rumput dan pepohonan ke samping, dengan dedaunan berpusar di latar depan di bawah awan badai

Bahasan mendalam:

12. Badai pasir, badai salju, dan cuaca pekat

Cuaca ekstrem merupakan kategori rendering tersendiri. Badai pasir adalah kabut tebal dan buram yang sejajar dengan permukaan tanah, dengan bias arah yang kuat dan kabut jarak jauh yang agresif. Badai salju menambahkan semburan partikel di dekat kamera dan mengurangi jarak pandang. Abu vulkanik dan asap menggunakan arsitektur yang sama dengan warna berbeda.

Yang membuat semua ini meyakinkan bukanlah partikelnya, melainkan keterpaduannya: matahari meredup, langit berubah warna, color grading pascaproses bergeser, audio ambien berganti, suara langkah kaki berubah, dan suara pemain menjadi teredam jika mereka memilikinya. Renderer hanyalah pembawa pesan; imersi tercipta ketika setiap sistem dalam game merespons secara bersamaan.

Dinding debu dan pasir jingga bergulung melintasi dataran gurun, dengan langit kelam di atasnya dan langit biru cerah di belakangnya

Bahasan mendalam:

13. Waktu dan langit dinamis

Waktu real-time adalah pengganda yang membuat setiap sistem lain dalam daftar ini layak dirilis. Arah dan warna matahari diperbarui dalam siklus 24 menit atau 24 jam. LUT atmosfer diperbarui mengikuti sudut matahari. Pencahayaan awan dihitung ulang per frame. Shadow cascade diarahkan ulang. Reflection probe disegarkan. Warna ambien bergeser. Eksposur pascaproses beradaptasi.

Melakukan semua ini tanpa artefak yang terlihat sebagian besar bergantung pada caching tekstur dan stabilitas temporal. Teknik cepat melakukan prakomputasi langit pada sudut matahari tertentu lalu menginterpolasinya; teknik yang lebih lambat menghitung ulang setiap frame. Model atmosfer Hillaire 2020 cukup cepat untuk dihitung ulang, itulah sebabnya UE5 menyertakannya. Weather map awan bergulir bersama angin, sehingga cakupan awan berubah secara alami tanpa perlu membuat keyframe secara manual.

Tiga bidang vertikal pada satu lanskap: fajar merah muda, siang biru, dan senja merah, semuanya memiliki siluet bukit yang sama

Bahasan mendalam:

14. State machine cuaca

Di balik semua ini terdapat state machine kecil. Sebagian besar game memiliki antara 4 hingga 12 kondisi cuaca (cerah, berawan sebagian, mendung, hujan ringan, hujan lebat, badai petir, berkabut, bersalju, badai salju, badai pasir), yang masing-masing ditentukan oleh sekumpulan parameter: cakupan dan jenis awan, kecepatan dan arah angin, jenis dan intensitas presipitasi, rona warna ambien, profil audio, serta grade pascaproses.

Transisi adalah interpolasi linear di antara kumpulan parameter selama 30 hingga 120 detik. Transisi bukanlah kasus khusus, melainkan hanya dua state yang di-lerp, dengan setiap subsistem rendering membaca nilai parameter saat ini pada frame tersebut. Cuaca dapat diatur oleh skrip (cutscene membutuhkan badai), menggunakan seed (deterministik per wilayah per hari dalam game agar dua pemain di dunia yang sama melihat cuaca yang sama), atau di-authoring sepenuhnya pada grid wilayah. Pipeline yang paling rapi memperlakukan ketiganya sebagai scheduler berbeda yang menulis ke buffer parameter yang sama.

Adegan yang sama berdampingan, dengan matahari cerah di sebelah kiri dan hujan badai di sebelah kanan serta permukaan basah yang berkilau

Bahasan mendalam:

15. Momen sinematik

Seluruh tumpukan ini dibuat demi beberapa momen khas. Berdiri di punggung bukit saat garis depan badai mendekat. Menyaksikan berkas sinar matahari menembus celah di antara kanopi. Berjalan keluar dari gua menuju salju. Terbang menembus awan kumulus dan melihat cahaya di bagian dalamnya.

Inilah momen-momen yang diabadikan pemain dalam tangkapan layar. Ini juga momen ketika setiap sistem di atas harus bekerja secara bersamaan: volumetrik awan, hamburan atmosfer, kabut dengan integrasi bayangan, PBR basah, angin pada vegetasi, color grading berdasarkan waktu, dan transisi antar-kondisi cuaca, semuanya dikomposisikan menjadi satu frame. Jika satu saja keliru, keajaibannya langsung sirna.

Pemandangan dari atas lautan awan menuju satu puncak gunung yang menjulang, dengan puncak awan tersinari matahari dan lembah gelap di bawahnya

Artinya bagi browser

Sebagian besar teknik ini dapat dipetakan dengan mudah ke WebGPU. Kami telah merilis kabut atmosfer dasar, perpaduan skybox equirectangular, dan kabut jarak berbasis screen-space dalam engine dunia terbuka untuk browser. Bagian yang lebih sulit (awan volumetrik penuh, kabut grid froxel, PBR basah dengan genangan dinamis, dan deformation map salju) adalah langkah berikutnya yang jelas setelah pipeline terrain stabil. Pengambilan sampel warna kabut per fragmen dari skybox pada Spike 24 adalah salah satu bagian dari teka-teki ini. Berikutnya adalah cloud raymarcher berbasis compute shader yang mengirimkan hasilnya ke LUT atmosfer yang sama.

Kabar baiknya, standar minimum perangkat keras browser kini sudah cukup tinggi. WebGPU compute, tekstur 3D, indirect dispatch, dan timestamp query semuanya tersedia. Atmosfer Hillaire 2020 telah beberapa kali di-porting ke WebGL. Nubis karya Schneider memiliki implementasi referensi sumber terbuka dalam GLSL yang dapat diterjemahkan ke WGSL dengan perubahan mekanis. Tidak ada lagi alasan dari sisi rendering yang membuat game browser tidak dapat memiliki langit yang sama dengan game konsol. Yang tersisa hanyalah alasan rekayasa, dan alasan rekayasa adalah jenis tantangan yang kami sukai.

Bacaan lebih lanjut tentang seluruh tumpukan

Jika Anda menginginkan satu sumber yang menyatukan semua ini, arsip SIGGRAPH "Advances in Real-Time Rendering in Games" (advances.realtimerendering.com) memiliki presentasi utama tentang cuaca dan atmosfer sejak 2014. Untuk analisis produksi mengenai cara game tertentu merender langit dan cuacanya, artikel profiling GPU Adrian Courrèges mencakup uraian mendetail frame demi frame untuk GTA V, Horizon Zero Dawn, dan Doom Eternal. Khusus untuk perhitungan langit dan atmosfer, bab rendering volume di scratchapixel.com adalah pengantar yang paling mudah diikuti, sedangkan repositori implementasi sumber terbuka Hillaire merupakan referensi berkualitas produksi.