- पहले से render किए गए textures के बिना, सिर्फ GLSL fragment shader से पृथ्वी जैसे ग्रह का पूरा इतिहास कुछ ही मिनटों में procedurally generate किया जाता है, और अंतिम simulation 60fps पर update होता है
- शुरुआती terrain latitude और longitude को 3D coordinates में बदलने के बाद, 5 levels of detail वाले craters और fractional Brownian motion noise को layer करके आदिम ग्रह की सतह बनाता है
- plate tectonics में plates को pixel-level discrete time steps में move किया जाता है, और collision points पर elevation increase को thermal erosion के जरिए आसपास फैलाकर mountain ranges और continents बनने का approximation किया जाता है
- hydraulic erosion में हर pixel अपने 8 neighbors में सबसे steep downward direction में पानी भेजता है, और stream power law से elevation को काटकर कम resolution पर भी 1-pixel-wide नदियां बनाई जा सकती हैं
- climate, life और human stages तक mean sea level pressure, wind, precipitation, Lotka–Volterra diffusion model और fossil fuel combustion को जोड़कर long-term planetary surface changes को एक ही GPU simulation में समेटता है
GPU shader से बना procedural planet simulation
- Procedural Earth simulation सिर्फ GLSL fragment shader से implement किया गया है
- यह पृथ्वी जैसे ग्रह का पूरा इतिहास कुछ ही मिनटों में simulate करता है, और screen 60fps पर update होती है
- final shader की video recording भी उपलब्ध है
आदिम ग्रह terrain generation
- शुरुआती पृथ्वी को गर्म और asteroid impacts से craters से भरे protoplanet के रूप में माना जाता है
- पहले से render किए गए textures नहीं हैं, इसलिए पहला step किसी specific latitude और longitude पर terrain height calculate करना है
- latitude और longitude को पहले 3D Cartesian coordinates में convert किया जाता है
- asteroids के sizes अलग-अलग होते हैं, इसलिए craters भी कई sizes में overlap किए जाते हैं
- shader 5 levels of detail repeat करता है
- बड़े craters से लेकर छोटे craters तक layer-by-layer रखे जाते हैं
- terrain को rough दिखाने के लिए fractional Brownian motion noise mix किया जाता है
- scaling इस तरह की जाती है कि सबसे बड़े craters terrain पर सबसे ज्यादा असर डालें
- craters 3D grid में generate किए जाते हैं, और उनमें से sphere surface को काटकर terrain के रूप में इस्तेमाल किया जाता है
- regular patterns से बचने के लिए crater centers hash function से grid points से pseudorandom offsets लेते हैं
- आसपास के grid points से जुड़े craters के प्रभाव को distance-based exponential weights से average किया जाता है
- crater rim एक simple sine curve से generate किया जाता है
- निचले इलाकों को पानी से भरने पर procedurally बना terrain शुरुआती पृथ्वी के उस रूप जैसा दिखता है जिसकी scientists कल्पना करते हैं
- समय के साथ rocks ठंडे होते हैं और water vapor condense होकर oceans बनता है; सतह पर liquid water का flow valleys बनाता है और sediments छोड़ता है
plate tectonics और continents का बनना
- mountain ranges, trenches और परिचित continental terrain बनाने के लिए plate tectonics model की जरूरत होती है
- plates random seed positions से शुरू होती हैं और उन्हें initial velocity दी जाती है
- plate growth को simple aggregation model से handle किया जाता है
- adjacent points को randomly select किया जाता है
- अगर कोई point अभी किसी दूसरी plate को assign नहीं हुआ है, तो उसे उस plate में add कर दिया जाता है
- हर plate के अंदर के pixels plate movement velocity store करते हैं
- यह तरीका diffusion के बिना diffusion-limited aggregation जैसा है
- continuous plate movement implement करना मुश्किल है, क्योंकि इसमें boundaries के pixel के fraction जितना move हो चुके state को handle करना पड़ता है
- इसके बजाय plates discrete time steps में horizontally या vertically बिल्कुल 1 pixel move करती हैं
- movement time हर plate के लिए randomized होता है
- configured speed और direction की average velocity maintain रहती है
- neighboring plates के simultaneously move करने की संभावना कम हो जाती है
- plate collision तब होती है जब एक plate का boundary pixel उस position पर move करता है जहां दूसरी plate का pixel था
- collision को subduction के रूप में treat किया जाता है, और collision location की elevation थोड़ी बढ़ाने के तरीके से model किया जाता है
- collision effect सिर्फ boundary pixels पर पैदा होता है, लेकिन thermal erosion model इसे धीरे-धीरे surrounding pixels तक फैलाता है
- thermal erosion किसी pixel की elevation को neighbors की average direction में push करता है
- इस combination से mountain ranges वाले continents के बनने को कुछ हद तक simulate किया जा सकता है
hydraulic erosion और river basins
- natural terrain का rough look river basin formation से काफी आता है, और river basins परिचित branching patterns में landscape को erode करते हैं
- पूरे ग्रह को cover करने वाला terrain map low resolution का होता है, इसलिए model को 1-pixel-wide rivers भी simulate कर पाना चाहिए
- Barnes (2018) का simple model इस जरूरत को पूरा करता है
- हर pixel अपने 8 neighbors को जांचकर elevation decrease की सबसे बड़ी direction ढूंढता है
- diagonal neighbors ज्यादा दूर होते हैं, इसलिए correction किया जाता है
- सबसे steep downward direction वही direction बनती है जिसमें उस pixel से पानी बाहर बहेगा
- पानी शुरुआत में rainfall के रूप में cells में distribute होता है, और हर time step में neighboring pixels के बीच move करता है
- erosion को stream power law के अनुसार handle किया जाता है
- current cell के
elevation,water, और पानी जिस direction में move कर रहा है उसslopeका इस्तेमाल होता है - elevation decrease को इस तरह limit किया जाता है कि वह उस जगह से नीचे न हो जाए जहां पानी बह रहा है
- current cell के
- water flow और erosion के साथ काम करने से terrain में river basins naturally form होते हैं
- connected waterways को river mouth location के हिसाब से color करने पर real river basin maps की याद दिलाने वाला visualization बनाया जा सकता है
- simulated river basin का original shader भी उपलब्ध है
global climate model
- पूरे ग्रह का climate system complex है, लेकिन इस simulation में इसे relatively simple तरीके से approximate किया गया है
- climate simulation का core driver procedurally generated mean sea level pressure (MSLP) map है
- Climate Cookbook के अनुसार MSLP map generation के main factors यह हैं कि land, oceans के बीच कहां है और latitude का असर क्या है
- वास्तविक Earth के MSLP data को land और ocean में split करके latitude के against plot करने पर थोड़े अलग shapes वाली दो sine curves मिलती हैं
- annual average pressure model land और ocean को अलग करके latitude-based formulas से calculate करता है
- land:
1012.5 - 6. * cos(lat*PI/45.) - ocean:
1014.5 - 20. * cos(lat*PI/30.)
- land:
- land और ocean को अलग-अलग calculate करने पर boundary पर sharp discontinuities बनती हैं
- reality में pressure की local diffusion के कारण ocean और land transition zones पर MSLP smoothly बदलता है
- इस diffusion process को MSLP map पर Gaussian blur apply करके approximate किया जाता है
- standard deviation 10–15 degrees range में है
- seasonal changes January और July के MSLP difference को additional model करके implement किए जाते हैं
- यह difference भी Earth data में sine pattern follow करता है
- parameters fit करके और Gaussian blur apply करके इसे annual average MSLP के साथ combine किया जाता है
- MSLP के आधार पर wind और temperature generate किए जाते हैं
- reality में temperature pressure बनाता है, लेकिन यहां correlation का उपयोग किया जाता है
seasonएक साल के दौरान -1 और 1 के बीच oscillate करता है
- wind high pressure से low pressure की ओर move करने की tendency रखती है, लेकिन global scale पर Coriolis force भी consider करना पड़ता है
- Coriolis force wind को pressure zones के आसपास circulate कराता है
- velocity vector Coriolis term और pressure gradient को combine करके calculate किया जाता है
- यह relatively coarse simulation realistic wind circulation patterns generate करता है
- Indian region में monsoon season के दौरान wind reversal की phenomenon भी reproduce होती है
- precipitation को ocean water vapor को wind vector field के along land तक advection करके simulate किया जाता है
- advection fluid simulation जैसी method से implement किया जाता है
life distribution और predator-prey dynamics
- climate planet पर life distribution को प्रभावित करता है
- rainfall patterns और temperature changes plant growth rate तय करते हैं
- seasons बदलने पर herbivores उन regions में move करते हैं जहां खुद को sustain करने के लिए पर्याप्त vegetation हो
- predators vegetation के पीछे move करने वाले herbivores का पीछा करते हैं
- इस तरह की dynamics को Lotka–Volterra diffusion model से capture किया जाता है
- variable
cकेxyzelements क्रमशः vegetation, herbivore और predator populations को represent करते हैं - large-scale animal population dynamics interesting patterns बनाती है
- reality में ऐसे patterns petri dish में microbial populations में सबसे आसानी से देखे जा सकते हैं, लेकिन वही laws दुनिया भर के large animal populations पर भी apply होते हैं
humans और carbon emissions
- early Earth stage के बाद simulation speed दिन-रात के cycle तक slow हो जाती है, plate tectonics detect करना मुश्किल हो जाता है, और terrain fixed हो जाता है
- रात में, humans planet surface को colonize करते हैं तो अभूतपूर्व light patterns दिखाई देते हैं
- humans का rapid expansion fossil fuel combustion के साथ होता है
- कई सौ वर्षों में humans उपलब्ध सभी fossil fuel resources को जलाकर atmosphere में 5 trillion tons of carbon emit करते हैं
- यह emission greenhouse effect को मजबूत करता है और global average temperature को लगभग 10°C बढ़ा देता है
- extreme temperature की वजह से equator के आसपास के बड़े land regions रहने लायक नहीं रह जाते
- नतीजतन humans planet के काफी बड़े हिस्से से गायब हो जाते हैं
1 टिप्पणियां
Hacker News राय
शानदार तो है, लेकिन आखिर में रात की रोशनी वाली सभ्यता अनिवार्य रूप से सारे fossil fuels जलाकर ग्रह को रेगिस्तान बना देती है—यह हिस्सा हमारी सभ्यता के संभावित रास्तों में से सिर्फ एक पर टिकी धारणा जैसा लगता है
यह मानने का कोई आधार नहीं कि warming और desertification से मरना nuclear war, clean fusion development, pandemic, या पास के procedurally generated Earth-like ग्रह पर invasion से ज्यादा संभावित है
जो वास्तव में हुआ उसे simulate करते समय यह बढ़िया है, लेकिन राय शामिल होने से पहले तक ही अच्छा है
इसके अलावा, लगता है कि यह गर्मी को सूखेपन के बराबर मानता है और अतिरिक्त CO2 का पौधों पर असर भी ध्यान में नहीं रखता। भले ही equatorial belt इंसानों के रहने लायक बहुत गर्म हो जाए, उसके रेगिस्तान नहीं बल्कि जंगल से ढक जाने की भी पूरी संभावना है
यह approach ऊपर बताए गए second-order effects को आम तौर पर नजरअंदाज कर देती है
आखिर की desertification को मैं मानता हूं कि कहानी को visually आसान तरीके से बताने के लिए थोड़ी artistic liberty है। वास्तविकता कहीं ज्यादा जटिल होगी
यह बस एक खास संभावित scenario की कहानी है, और उन्होंने दूसरी जगह भी ऐसा ही लिखा था: “आखिरी हिस्सा एक संभावित, लेकिन शायद कम संभावना वाले भविष्य को दिखाने के इरादे से है। मैं इसे dramatic बनाना चाहता था, इसलिए literal sense में सारे fossil fuels जल जाने वाला extreme outcome दिखाया, लेकिन बाकी effects को ऐसी assumptions पर scientific papers पढ़कर जितना हो सके realistic रखने की कोशिश की।”
https://www.vice.com/en/article/xgx7nq/watch-four-billion-ye...
1996/1997 में मैंने एक CD-ROM game पर काम किया था जो लाखों वर्षों में plate tectonics, temperature, altitude और rainfall को simulate करता था
28 सालों में computing hardware और software कितना आगे बढ़ गया है, यह देखकर हैरानी होती है: https://www.kmoser.com/evolution/
किसी planet और उस पर मौजूद जानवरों को simulate करने का idea उस समय भी बिल्कुल चौंकाने वाला था और आज भी है। साथ में आया poster संभालकर रखना चाहिए था; कई sapiens evolution branches वाकई दिलचस्प थीं
मैंने सोचा था कि time slider वाले 3D globe पर plates की अनुमानित movement को manipulate करके यह visualize कर पाना अच्छा होगा कि मौजूदा terrain कैसे बना। क्या आपको ऐसी किसी चीज के बारे में पता है?
[1] https://www.goodreads.com/book/show/19898.Assembling_Califor...
[2] excerpt: https://www.newyorker.com/magazine/1992/09/07/assembling-cal...
इस topic से बहुत संबंधित एक शानदार hard SF किताब Permutation City है। इस पोस्ट का title देखकर ऐसा लगा जैसे मैं किसी सपने में हूं
थोड़ा विषयांतर है, लेकिन छोटी और शानदार short story "I don't know, Timmy, being God is a big responsibility" एक तरह से world simulation पर है और वाकई अच्छी है:
https://qntm.org/responsibility
कई वर्षों से मैं बहुत मिलते-जुलते plot वाली कहानी लिखना चाहता था, लेकिन universes के बीच computational overhead वाला बड़ा plot hole था, और quantum computer से इसे हल करने का विचार नहीं आया
जिस कहानी की कल्पना कर रहा था, उसमें एक और फर्क यह था कि characters वही कहानी लिखते हैं, वह “मेरी” कहानी बन जाती है, और हर universe में value 1 से बढ़ने वाला variable बनाया जाता है, ताकि अंत में reader जान सके कि वह कितनी गहराई पर है
इसे HN पर पढ़ने वाला व्यक्ति 8474771628371839वें level की गहराई पर है
Textbooks छोड़कर fiction में कई versions से सामना शायद पहली बार हुआ है। अगर logic या physics की खामियों में न उलझें, तो मुझे ऐसी thought experiment-style writing सच में बहुत पसंद है
यह idea अच्छा लगा कि सभी universes practically identical हैं, इसलिए multiverse ज्यादातर meaningless हो जाता है
Drama, physics और ending अलग तरीके से handle किए गए थे, लेकिन उसने भी वैसी ही सुखद सोच-विचार वाली अवस्था छोड़ी। मैं title या director का नाम लगभग लिख ही देता, लेकिन एहसास हुआ कि इस context में सिर्फ इतना भी बड़ा spoiler हो सकता है, इसलिए रुक गया
शायद मैंने इस comment में नाम encrypted कर दिया हो। सच कहूं तो कोशिश की थी, और अभी देर रात है, इसलिए आजकल के search engines शायद इसे खोज भी लें
यूनिवर्सिटी में मेरी सबसे पसंदीदा क्लासों में से एक energy policy analysis थी, और मैंने MIT में विकसित EPPA model के साथ experiments किए थे
जैसे, energy storage cost अगर 10वें हिस्से तक घट जाए तो चीज़ें कैसे आगे बढ़ेंगी—इस तरह किसी खास parameter को बदलकर देखा था। यह बहुत मज़ेदार था, लेकिन अफ़सोस कि नौकरी में मुझे ऐसा कुछ करने का मौका नहीं मिला
[0]: https://globalchange.mit.edu/research/research-tools/eppa
सच कहूँ तो simulation ने कुछ details ज़रूर छोड़ दी हैं :)
पता नहीं क्यों, पेज में embedded सभी Shadertoy examples मेरे setup में करीब 0.6 FPS पर चलते हैं
linked “final shader” को Shadertoy website पर खोलने पर 60fps ठीक से मिलता है
कभी-कभी सोचता हूँ कि simulated universe में रहना कैसा महसूस होता होगा
अगर हम “universe” के “बाहर” को “देख” पाते, तो शायद समझ पाते कि हमारी reality बाहर की “reality” की तुलना में बहुत सरल और सीमित है। यह structure अनंत तक चल सकता है, या बाहर की reality हमसे कहीं ज़्यादा logical हो सकती है, जिससे finite होना स्वीकार करना पड़े
लेकिन चूँकि हमारे पास शुरुआत और time का flow है, इसलिए शायद जन्म, माँ, और शायद कोई purpose भी हो सकता है। बेशक यह बहुत human-centric सोच है और सब कुछ random soup भी हो सकता है
कल्पना कीजिए कि हमारे बनाए simulation में self-aware entities हैं और वे भी यही सोचने लगती हैं। सब लोग हँसेंगे कि “हम तो बस random हैं, कोई God नहीं, कोई design नहीं; इतनी बेकार, विशाल खाली जगह के ढेर पर इतनी energy कौन खर्च करेगा,” और उसे कुछ हद तक सहमत होना पड़ेगा, लेकिन साथ ही वह कुछ हद तक गलत भी होगा
हमें खोज लेने से भी कोई तसल्ली नहीं मिलेगी, क्योंकि हम भी उन्हें अपने designers के बारे में कुछ नहीं बता सकते। इसी कारण अगर हम उन्हें खोज लें तो भी तसल्ली नहीं होगी। इसलिए God concept बेवकूफ़ी है। अगर God का भी God हो, तो फिर क्या करना है? उसके अस्तित्व को स्वीकार करने से कोई problem solve नहीं होती
शायद यह कुछ हद तक nihilism है, लेकिन इसी वजह से मैं overwhelmed नहीं होता
किसी ने नहीं कहा कि simulation को semiconductor पर ही run होना चाहिए
समझ नहीं आता कि सिर्फ fragment shaders ही क्यों इस्तेमाल कर रहे हैं। अगर heightmap के लिए vertex shader भी हो, तो surface तक zoom in किया जा सकता था
“written entirely in GLSL fragment shaders” लिखा है, तो यह कौन-सी भाषा है?
music काफी cliché है। शायद AI ने बनाया हो
मूल रूप से John Murphy ने इसे 2007 की film Sunshine के लिए compose किया था
https://en.wikipedia.org/wiki/Sunshine:_Music_from_the_Motio...