Skip to content

आधुनिक गेम्स में वॉल्यूमेट्रिक बादल और मौसम के प्रभाव

लेखक Oleg Sidorkin, Cinevva के CTO और सह-संस्थापक

Stylized AAA scene with towering volumetric storm clouds, lightning, rain shafts, and a wet stone road reflecting the sky

कुछ हफ़्ते पहले मैंने उन रेंडरिंग तकनीकों के बारे में लिखा था जो आधुनिक AAA गेम्स असल में शिप करते हैं। एक क्षेत्र जिस पर मैंने हल्का छुआ था वह था आसमान और मौसम, क्योंकि यह अपनी अलग सूची का हकदार है। बादल, कोहरा, बारिश और बर्फ वे सिस्टम हैं जो एक terrain डेमो को एक जगह में बदल देते हैं। ये दिखने से ज़्यादा कोड आपस में साझा करते हैं। वॉल्यूमेट्रिक बादल, ज़मीनी कोहरा और god rays सब एक ही ray-march हैं। गीली सड़कें, बर्फ का जमाव और पैरों के निशान सब एक ही displacement प्लस PBR ट्रिक हैं। हवा एक दिशा वेक्टर है जिसे सीन की हर चीज़ पढ़ती है।

यहाँ 2026 में बड़े स्टूडियो इस सामग्री को कैसे बनाते हैं, इसका एक छोटा और मतवाला दौरा है, हर हिस्से के पीछे के पेपर और engine टॉक्स के साथ।

1. Physically based आसमान और वातावरण

Atmospheric scattering ही बुनियाद है। आसमान का रंग, क्षितिज की धुंध, दूर के पहाड़ों का नीला पड़ना, सूर्यास्त का नारंगी रंग, ये सब हवा से होकर रोशनी के scatter होने से आते हैं। आधुनिक engine इसे physics से कैलकुलेट करते हैं: नीले रंग के लिए Rayleigh scattering, सूरज के आसपास की धुंध के लिए Mie scattering, और zenith पर गहरे बैंगनी रंग के लिए ozone absorption।

मूल 2008 का Bruneton तरीका सब कुछ 4D लुकअप टेबल्स में bake कर देता था, जिससे डायनामिक time-of-day सीमित हो जाता था और कम सूरज के कोणों पर LUT artifacts जुड़ जाते थे। Sébastien Hillaire का 2020 का अपडेट, जो UE5 का Sky Atmosphere कंपोनेंट शिप करता है, उच्च-आयामी LUT की जगह कुछ 2D टेक्सचर और एक multiple-scattering approximation रख देता है जो हर frame पर अपडेट होता है। यह एक फ़ोन से लेकर हाई-एंड PC तक चलता है।

Physically based sky at golden hour with smooth orange-to-blue gradient over a distant mountain silhouette

गहराई से पढ़ें:

2. Perlin-Worley noise के साथ वॉल्यूमेट्रिक बादल

आधुनिक गेम्स में बादलों की बुनियादी तकनीक Andrew Schneider के 2015 के Horizon Zero Dawn टॉक से शुरू हुई। बादल mesh नहीं होते। वे layered noise से बने एक 3D density function होते हैं: एक low-frequency Perlin-Worley मिश्रण बादल का समग्र आकार देता है, और एक higher-frequency Worley noise silhouette को पतले धुँधले किनारों में घिसता है। एक weather map (एक 2D टेक्सचर जिसे world XZ से sample किया जाता है) हर क्षेत्र के लिए coverage, बादल का प्रकार और वर्षा को नियंत्रित करता है। एक height-based gradient ऊँचाई के हिसाब से cumulus, stratus और cirrus प्रोफ़ाइल के बीच ब्लेंड करता है।

रेंडरर कैमरे से बादल वॉल्यूम के बीच से एक ray मार्च करता है, density और scattering इकट्ठा करता हुआ। 2017 के "Nubis" संस्करण ने regional-scale authoring और animation जोड़ा, और मूल PS4 इम्प्लीमेंटेशन पूरे आसमान के लिए लगभग 2 ms में चलता था। आज जो ज़्यादातर स्टूडियो वॉल्यूमेट्रिक बादल शिप करते हैं वे अब भी अपनी विरासत इसी पेपर तक खींचते हैं।

A 3D cloud shape decomposed into stacked Perlin and Worley noise patterns showing how detail erodes the silhouette

गहराई से पढ़ें:

3. Voxel बादल और Nubis³

Nubis के 2023 के विकास ने 2.5D shape representation को पूरी तरह छोड़कर असली 3D voxels को अपनाया। हर voxel बादल की density सीधे स्टोर करता है, जिससे आर्टिस्ट बादल के आकार को उसी तरह तराश और animate कर सकते हैं जैसे वे terrain गढ़ते हैं। एक घने representation पर जाने की लागत compressed signed distance fields के साथ ray-march acceleration और sparse voxel डेटा के चतुर up-rezzing से वसूल हो जाती है।

नतीजा वह तरह का cloudscape है जिसके बीच से आप उड़ सकते हैं आर-पार बिना अंदरूनी ट्रिक्स को बिखरते देखे। यह ज़्यादातर स्टूडियो के लिए ज़रूरत से ज़्यादा है, पर यही दिशा है जिधर हाई-एंड बढ़ रहा है।

A cumulus cloud shown decomposed into a 3D voxel grid, with smoothed wispy edges blending the chunky interior

गहराई से पढ़ें:

4. Layered बादल रेंडरिंग और 2D बैकड्रॉप

हर स्टूडियो full-volume बादल वहन नहीं कर सकता, और हर कैमरा कोण को उनकी ज़रूरत नहीं होती। बहुत से गेम्स तकनीकें मिलाते हैं: high-altitude cirrus को एक scrolling 2D layer के रूप में रेंडर करना, mid-altitude cumulus को वॉल्यूमेट्रिक rays के रूप में, और low-altitude stratus को एक पतले participating-media स्लैब के रूप में। क्षितिज को अक्सर एक pre-baked sky cubemap मिलता है जिसमें वॉल्यूमेट्रिक pass एक fade distance के पार ब्लेंड कर देता है।

यही layering बादल बजट को ईमानदार रखती है। पूरी क्वालिटी पर एक अकेला बादल प्रकार 4-6 ms खा सकता है; अलग-अलग बादल ऊँचाइयों के लिए अलग-अलग क्वालिटी layer करना उसी लुक को आधी लागत पर रोक सकता है।

Sunset sky split into three cloud layers: high cirrus wisps, mid cumulus puffs, and low stratus haze near the horizon

गहराई से पढ़ें:

5. Froxel grids के साथ वॉल्यूमेट्रिक कोहरा

कोहरा एक 3D फ़ील्ड है, 2D स्क्रीन इफ़ेक्ट नहीं। मानक आधुनिक तरीका froxel grid है: कैमरे के view frustum से aligned एक 3D टेक्सचर, जिसका हर सेल ("froxel" = frustum + voxel) density और lit color स्टोर करता है। एक compute shader हर light source से scattering को grid में inject करता है, view ray के साथ extinction इकट्ठा करता है, और नतीजे को एक fullscreen pass के रूप में लागू करता है।

यही आपको खिड़कियों से आती light shafts, point lights के आसपास रंगीन कोहरा, और विस्फोटों के चारों ओर दिखने वाले volumes देता है। यही "atmospheric perspective" के पीछे की मशीनरी भी है जो दूर की चीज़ों को हवा में धुँधला कर देती है। यह तकनीक Bart Wronski ने Assassin's Creed 4 के लिए पेश की और Sébastien Hillaire ने Frostbite में मानकीकृत की।

Camera frustum visualized as a 3D froxel grid with smaller cells near the camera and bigger cells far away, fog particles inside

गहराई से पढ़ें:

6. God rays और crepuscular shafts

धुँधली हवा में सूरज की रोशनी की दिखने वाली किरणें कोई अलग इफ़ेक्ट नहीं हैं। वे उसी कोहरा सिस्टम से निकलती हैं, बशर्ते कोहरे की density और shadow map दोनों उसी compute shader को उपलब्ध हों। जब shader एक froxel में रोशनी inject करता है, तो वह उस froxel की world position पर shadow map को sample करता है। छाया में पड़े सेल अँधेरे रहते हैं, रोशनी में पड़े सेल सूरज का रंग पकड़ लेते हैं। कैमरा ray को नतीजे के बीच से मार्च करें और चमकीले सेल लगातार shafts बना देते हैं।

सस्ते screen-space वैरिएंट मौजूद हैं (सूरज की position से depth buffer में radial blur) और मोबाइल या low-end हार्डवेयर पर अब भी सही चुनाव हैं। वे ऑफ़-स्क्रीन सूरज की positions छोड़ देते हैं पर लगभग कुछ खर्च नहीं करते।

Dawn forest with sun rays slicing through tree trunks and ground fog, forming clear god ray shafts

गहराई से पढ़ें:

7. बिजली और stochastic मौसम घटनाएँ

बिजली एक one-frame इफ़ेक्ट है जिसके दो हिस्से होते हैं: bolt mesh, और पूरे सीन का tonemap और लाइटिंग प्रतिक्रिया। bolt खुद आमतौर पर एक procedural billboard mesh होता है जो एक recursive line-segment subdivision एल्गोरिथ्म से बनाया जाता है, अराजकता के लिए jittered और ज़मीन की ओर tapered। कुछ engine इसे एक screen-space additive flash के रूप में रेंडर करते हैं, अन्य एक पूरी तरह lit emissive geometry के रूप में जो एक one-frame point-light injection के ज़रिए दुनिया पर रोशनी डालती है।

दिलचस्प हिस्सा है बाकी सब कुछ: बादलों के पेंदे नीचे से रोशन होते हैं, ज़मीन दो frames के लिए चमकती है, auto-exposure metering को उबरने में कुछ frames लगते हैं, और दूरी के आधार पर एक देर से आने वाली गरज की आवाज़ बजती है। अच्छी तरह किया जाए तो यह एक 16 ms की चमक को पाँच-सेकंड के क्रम में बदल देता है जो मौसम को दुनिया में होती किसी चीज़ की तरह बेचता है, सिर्फ़ उसके ऊपर नहीं।

Lightning fork striking from a thundercloud at dusk, lighting the cloud bottoms and a small village silhouette

गहराई से पढ़ें:

8. बारिश के particles, बारिश के meshes, और screen-space बूँदें

आधुनिक गेम्स में गिरती बारिश शायद ही कभी सिर्फ़ particles होती है। सस्ता और विश्वसनीय समाधान scrolling टेक्सचर का एक छोटा सेट है जो vertical या screen-aligned quads पर खिंचा होता है, और बाकी हर चीज़ की तरह उन्हीं सूरज और आसमान probes से रोशन होता है। कैमरे के पास, अलग-अलग streak particles विस्तार जोड़ते हैं। कैमरे के lens पर ही, droplet टेक्सचर, फिसलते trails, और impact ripples "आप तूफ़ान के अंदर हैं" का अहसास बेचते हैं।

हवा बारिश की दिशा को प्रभावित करती है। वही wind वेक्टर बादल weather map को धकेलता है, घास को मोड़ता है, और बारिश के quads को झुकाता है। एक पूरे सीन का वेक्टर, दर्जनों उपभोक्ता।

Heavy night rainstorm with sheets of rain illuminated by distant headlights and ripples on a wet road

गहराई से पढ़ें:

9. गीली सतहें, पोखर, और ripples

ऐसी बारिश जो ज़मीन को नहीं बदलती, तुरंत नकली दिखती है। गीली सतहें अपना albedo गहरा करके (पानी आती रोशनी को सोख लेता है), अपने normals को चपटा करके (पानी की परत microsurface को चिकना कर देती है), और अपनी roughness घटाकर (पानी तीखे कोणों पर लगभग एक संपूर्ण आईना है) प्रतिक्रिया देती हैं। shader में बदलाव छोटा है, विज़ुअल बदलाव बहुत बड़ा।

पोखर mask-driven होते हैं: एक height-based या vertex-painted mask उन निचली जगहों को परिभाषित करता है जो "wetness" parameter बढ़ने पर पानी से भर जाती हैं। Ripples flipbook normal-map टेक्सचर होते हैं जो बारिश की बूँदों के impacts से trigger होते हैं। वाकई अच्छे इम्प्लीमेंटेशन wetness state को समय के साथ बनाते हैं, ताकि एक लंबा तूफ़ान दुनिया को धीरे-धीरे भिगो दे और एक छोटी फुहार सिर्फ़ ऊँची जगहों को गहरा करे।

Wet cobblestone street at night with shallow puddles reflecting neon signs and ripple rings from raindrop impacts

गहराई से पढ़ें:

10. बर्फ का जमाव और deformation

बर्फ बारिश की सममित समस्या है: दुनिया को इसे याद रखना होता है, सिर्फ़ पाना नहीं। मानक तरीका एक top-down "snow accumulation" टेक्सचर इस्तेमाल करता है जो समय के साथ वहाँ जमता है जहाँ आसमान दिखता है (एक top-down depth या shadow map के विरुद्ध कैलकुलेट किया गया)। terrain shader इस mask को sample करता है और छायादार क्षेत्रों में बर्फ का material और खुले इलाकों में snow-deep displacement ब्लेंड करता है।

पैरों के निशान और टायर के निशान खिलाड़ी पर केंद्रित एक sliding deformation map में रेंडर होते हैं। जैसे-जैसे कैमरा हिलता है, पुराने पैरों के निशान scroll होकर बाहर निकलते हैं और टेक्सचर चारों ओर wrap हो जाता है। terrain या snow shader इस deformation map को sample करता है और जहाँ लिखा गया है वहाँ vertices को नीचे धकेलता है। Battlefield 5 की बर्फ यह हार्डवेयर tessellation से करती है; सस्ते तरीके सिर्फ़ vertex displacement के साथ एक high-density terrain mesh इस्तेमाल करते हैं।

Stylized snowy landscape with fresh footprints, drifts piled against rocks, falling snowflakes, and hazy distant mountains

गहराई से पढ़ें:

11. एक global सिस्टम के रूप में हवा

हवा कोई particle इफ़ेक्ट नहीं है। production engines में यह एक अकेला global वेक्टर है (कभी-कभी एक low-resolution 3D फ़ील्ड) जिसे हर डायनामिक सिस्टम अपने vertex shader में पढ़ता है। घास की पत्तियाँ झुकती हैं, पेड़ की शाखाएँ डोलती हैं, कपड़ा फड़फड़ाता है, पत्तियाँ बहती हैं, बारिश झुकती है, धुआँ बहता है, बादल weather maps scroll होते हैं। हर frame पर अपडेट होने वाला एक uniform, दर्जनों उपभोक्ता।

समृद्ध संस्करण एक "wind grid" है जो world position से sample की गई दिशा और ताकत स्टोर करता है, जिससे स्थानीय झोंकों वाले तूफ़ान, सुरक्षित घाटियाँ, और इमारतों के पीछे की wakes संभव होती हैं। Foliage को आमतौर पर authoring समय पर bake किया गया एक per-vertex offset भी मिलता है ताकि एक जैसे पेड़ एक साथ ताल में न डोलें। नतीजा एक ऐसी दुनिया है जो एक ही गति से साँस लेती है।

Strong wind blowing grass and trees sideways with leaves swirling in the foreground under stormy clouds

गहराई से पढ़ें:

12. रेतीले तूफ़ान, बर्फ़ीले तूफ़ान, और घना मौसम

भीषण मौसम अपनी अलग रेंडरिंग श्रेणी है। एक रेतीला तूफ़ान एक मोटा, अपारदर्शी, ground-aligned कोहरा है जिसमें एक मज़बूत दिशात्मक झुकाव और आक्रामक distance fog होता है। एक बर्फ़ीला तूफ़ान कैमरे के पास एक particle धमाका और घटी हुई दृश्यता जोड़ता है। ज्वालामुखीय राख और धुआँ अलग रंगों के साथ वही architecture हैं।

जो चीज़ इन्हें बेचती है वह particles नहीं है, वह है coupling: सूरज मद्धम पड़ता है, आसमान का रंग बदलता है, post-process color grading खिसकती है, ambient ऑडियो बदलता है, पैरों की आवाज़ बदलती है, खिलाड़ी की आवाज़ दबी हुई हो जाती है अगर उसकी कोई हो। रेंडरर संदेशवाहक है; immersion गेम के हर सिस्टम के एक ही समय पर प्रतिक्रिया देने से आता है।

A wall of orange dust and sand rolling across a desert plain with bruised sky above and clear blue behind

गहराई से पढ़ें:

13. Time of day और डायनामिक आसमान

रियल-टाइम time of day वह गुणक है जो इस सूची के हर दूसरे सिस्टम को शिप करने लायक बना देता है। सूरज की दिशा और रंग एक 24-मिनट या 24-घंटे के चक्र पर अपडेट होते हैं। atmosphere LUT सूरज के कोण के साथ अपडेट होता है। बादलों की लाइटिंग हर frame पर फिर से कैलकुलेट होती है। shadow cascades फिर से इंगित होती हैं। reflection probes रीफ़्रेश होते हैं। ambient रंग खिसकता है। post-process exposure adapt होता है।

इसे बिना दिखने वाले artifacts के करना ज़्यादातर texture caching और temporal stability की कहानी है। तेज़ तकनीकें आसमान को निश्चित सूरज कोणों पर precompute करती हैं और interpolate करती हैं; धीमी तकनीकें हर frame फिर से कैलकुलेट करती हैं। Hillaire 2020 का atmosphere मॉडल फिर से कैलकुलेट करने लायक तेज़ है, यही वजह है कि UE5 इसे शिप करता है। बादल weather map हवा के साथ scroll होता है, इसलिए coverage बिना किसी के keyframes authoring के स्वाभाविक रूप से खिसक जाता है।

Three vertical bands across one landscape: dawn pink, noon blue, sunset red, all sharing the same hill silhouette

गहराई से पढ़ें:

14. मौसम state machine

इस सब के नीचे एक छोटी सी state machine है। ज़्यादातर गेम्स 4 से 12 मौसम states के बीच कहीं शिप करते हैं (साफ़, आंशिक रूप से बादल, घना बादल, हल्की बारिश, तेज़ बारिश, गरज वाला तूफ़ान, कोहरा, बर्फ, बर्फ़ीला तूफ़ान, रेतीला तूफ़ान), हर एक parameters के एक सेट से परिभाषित: बादल coverage और प्रकार, हवा की गति और दिशा, वर्षा का प्रकार और तीव्रता, ambient रंग, ऑडियो प्रोफ़ाइल, post-process grade।

Transitions 30 से 120 सेकंड में parameter सेट के बीच linear interpolations होती हैं। transition कोई विशेष मामला नहीं है, यह बस दो states के बीच lerp होना है, जिसमें हर रेंडरिंग सबसिस्टम उस frame के मौजूदा parameter मानों को पढ़ता है। मौसम scripted हो सकता है (cutscene को एक तूफ़ान चाहिए), seeded (हर क्षेत्र के लिए हर इन-गेम दिन पर deterministic ताकि एक ही दुनिया में दो खिलाड़ी एक जैसा मौसम देखें), या एक region grid पर पूरी तरह authored। सबसे साफ़ पाइपलाइन इन तीनों को एक ही parameter buffer में लिखने वाले अलग-अलग schedulers की तरह मानती हैं।

Side-by-side of the same scene under clear sun on the left and stormy rain on the right with wet glistening surfaces

गहराई से पढ़ें:

15. सिनेमाई पल

यह पूरा stack कुछ हस्ताक्षर पलों के लिए मौजूद है। एक रिज पर खड़े होना जब एक storm front लुढ़कता हुआ आता है। canopy में एक खुली जगह से एक sun shaft को जलते देखना। एक गुफा से बाहर बर्फ में निकलना। एक cumulus बादल के बीच से उड़ना और अंदर की रोशनी देखना।

ये वे पल हैं जिनके खिलाड़ी screenshots लेते हैं। ये वे पल भी हैं जहाँ ऊपर का हर सिस्टम एक ही समय पर काम कर रहा होना चाहिए: cloud volumetrics, atmospheric scattering, shadow integration के साथ कोहरा, wet PBR, foliage पर हवा, time-of-day color grading, और मौसम states के बीच एक transition, सब एक frame में composing होते हुए। इनमें से कोई एक भी गलत करें और जादू टूट जाता है।

Looking down across a sea of clouds onto a single mountain peak rising through, with sunlit cloud tops and shadowed valleys below

इसका browser के लिए क्या मतलब है

इनमें से ज़्यादातर तकनीकें WebGPU पर साफ़-साफ़ map हो जाती हैं। हमने open-world browser engine में बुनियादी atmospheric कोहरा, equirectangular skybox ब्लेंडिंग, और screen-space distance haze शिप किया है। मुश्किल हिस्से (पूर्ण वॉल्यूमेट्रिक बादल, froxel grid कोहरा, डायनामिक पोखरों के साथ wet PBR, snow deformation maps) अब अगला स्पष्ट कदम हैं जब terrain पाइपलाइन स्थिर है। Spike 24 का skybox से per-fragment fog color sampling इस पहेली का एक टुकड़ा है। एक compute-shader cloud raymarcher जो उसी atmosphere LUT में feed करता है, अगला टुकड़ा है।

अच्छी खबर यह है कि browser हार्डवेयर का फ़र्श अब काफ़ी ऊँचा है। WebGPU compute, 3D टेक्सचर, indirect dispatch, और timestamp queries सब मौजूद हैं। Hillaire 2020 atmosphere को WebGL पर कई बार पोर्ट किया गया है। Schneider के Nubis के GLSL में ओपन-सोर्स reference implementations हैं जो यांत्रिक संपादनों के साथ WGSL में बदल जाते हैं। अब कोई रेंडरिंग वजह नहीं बची है कि एक browser गेम के पास वही आसमान न हो जो एक console के पास है। बस इंजीनियरिंग वजहें हैं, और इंजीनियरिंग वजहें वह तरह की हैं जो हमें पसंद हैं।

पूरे stack में आगे पढ़ने के लिए

अगर आप एक ऐसा स्रोत चाहते हैं जो इस सब को एक साथ खींचे, तो SIGGRAPH "Advances in Real-Time Rendering in Games" आर्काइव (advances.realtimerendering.com) में 2014 तक के प्रामाणिक मौसम और वातावरण टॉक्स हैं। विशिष्ट गेम्स अपना आसमान और मौसम कैसे रेंडर करते हैं, इसके production tear-downs के लिए Adrian Courrèges के GPU profiling लेखों में GTA V, Horizon Zero Dawn, और Doom Eternal के विस्तृत frame-by-frame ब्रेकडाउन शामिल हैं। खासकर आसमान और वातावरण के गणित के लिए, scratchapixel.com का volume rendering अध्याय सबसे सहज परिचय है, और Hillaire की ओपन-सोर्स implementation repository production-quality reference है।