2 पॉइंट द्वारा GN⁺ 2023-12-20 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • रियल-टाइम में आग और धुएँ जैसे द्रवों का सिमुलेशन करने से जुड़ी गणित, एल्गोरिद्म, विधियों पर नोट्स और source code (GitHub)

1. द्रव सिमुलेशन

  • आग का सिमुलेशन करने से पहले द्रव का सिमुलेशन करना ज़रूरी है
  • यदि मान लें कि द्रव incompressible और inviscid है, तो समस्या काफी सरल हो जाती है

1.1 बुनियादी fluid dynamics

  • अंतरिक्ष के DDD क्षेत्र में द्रव भरा है, और समय ttt पर द्रव का वेग u(x,t) है
  • 2D velocity field u को N×N grid के रूप में व्यक्त किया जा सकता है
  • अगर द्रव में dye की एक बूंद डाली जाए तो क्या होगा?
  • dye की density को दर्शाने वाला scalar field ψ(x,t) परिभाषित किया जाता है, और द्रव के वेग द्वारा इसके स्थानांतरण को advection कहा जाता है
  • advection की गणना के लिए Naive Method यह है कि हर grid point को आगे बढ़ाया जाए और सबसे नज़दीकी grid point को update किया जाए, लेकिन इसे parallelize करना कठिन है और यह unstable है

Advection के लिए partial differential equation

  • advection को स्थिर रूप से derive करने के लिए एक explicit PDE expression की आवश्यकता होती है
  • स्थिर spatial region WWW के भीतर dye का कुल mass ∫WψdV है, और समय के साथ mass में परिवर्तन ddt∫Wψ(x,t)dV है
  • mass conservation law के अनुसार ddt∫WψdV=−∫Sψu⋅ndA होता है
  • divergence theorem लागू करने पर ∫W[∂ψ∂t+∇⋅(ψu)]dV=0 मिलता है, और infinitesimal region W=dV के लिए ∂ψ∂t+∇⋅(ψu)=0 हो जाता है
  • यह हमें वह explicit PDE देता है जिसे हमें हल करना है

Advection के लिए स्थिर विधि

  • eqn. (1) को ध्यान से देखें तो right-hand side, −u दिशा में directional derivative है
  • इस विधि को Semi-Lagrangian advection कहा जाता है, जिसे 1999 में Jos Stam ने विकसित किया था
  • क्योंकि हर grid point को केवल एक बार update किया जाता है, इसलिए इसे parallelize करना बहुत आसान है और यह unconditionally stable है

1.2 Navier-Stokes equation

  • हमने यह मॉडल ढूँढ लिया कि द्रव के scalar properties समय के साथ कैसे evolve होते हैं, लेकिन स्वयं fluid flow का क्या?
  • Navier-Stokes equation यह परिभाषित करती है कि द्रव के भीतर किसी बिंदु पर velocity field u समय के साथ कैसे बदलता है
  • हमने माना है कि द्रव inviscid है, इसलिए μ=0 है, और अभी external forces को भी नज़रअंदाज़ किया जा सकता है
  • इसलिए हमारे पास केवल दो terms बचते हैं: self-advection और pressure
  • हर timestep पर इन terms की numerical calculation करके और उन्हें जोड़कर द्रव का सिमुलेशन किया जा सकता है

Pressure solve

  • यह निश्चित नहीं है कि नया velocity field incompressibility constraint का पालन करता है, इसलिए pressure term p को इसे ठीक करना होता है
  • इसके लिए Poisson equation को हल करना पड़ता है
  • Poisson equation को हल करने के लिए हम Jacobi method जैसे iterative algorithm का उपयोग कर सकते हैं
  • Jacobi method को GPU पर parallel रूप से चलाया जा सकता है, इसलिए इसका implementation बहुत सरल है

सारांश: Navier-Stokes simulation

  • Navier-Stokes का गणित थोड़ा जटिल हो सकता है, लेकिन equations को हल करके द्रव का सिमुलेशन करना कुछ मुख्य update प्रक्रियाओं में समेटा जा सकता है

1.3 Vorticity Confinement

  • velocity field को store करने के लिए grid का उपयोग बहुत सुविधाजनक है, लेकिन grid points के बीच मानों का interpolation करते समय अनचाहा numerical smoothing होता है
  • इसके कारण flow के turbulent vortices समाप्त हो जाते हैं, और परिणामस्वरूप द्रव प्रवाह बहुत अधिक smooth और "उबाऊ" लगने लगता है
  • Vorticity confinement इस खोई हुई vorticity को amplify करने की प्रक्रिया है
  • Vorticity confinement को helicopter blades के अत्यंत जटिल flow field को solve करने के लिए विकसित किया गया था
  • vorticity की गणना हर बिंदु पर u का curl लेकर की जाती है, और vorticity को बढ़ाने के लिए हर बिंदु पर circular flow जोड़ा जाता है

Curl-Noise Turbulence

  • Curl noise, vorticity confinement जैसी ही एक विधि है, लेकिन velocity field की vorticity को मापकर उसे amplify करने के बजाय, यह noise function का उपयोग करके शुरुआत से ही scalar vorticity field बनाती है
  • जो द्रव बहुत तेज़ी से चलते हैं और अत्यधिक turbulent होते हैं, उन्हें vorticity confinement और curl noise से सबसे अधिक लाभ मिलता है

2. आग का सिमुलेशन

  • आग और धुएँ का सिमुलेशन करने के लिए fuel और temperature को दर्शाने वाले channels जोड़ने होते हैं, और fuel के combustion को model करके heat उत्पन्न करनी होती है
  • साथ ही, यह भी संभालना होता है कि अधिक गर्म द्रव के हिस्से thermal buoyancy model के अनुसार ऊपर उठें, और flames को सही ढंग से render किया जाए

2.1 बुनियादी combustion model

  • रासायनिक रूप से, आग fuel material की oxidation reaction के कारण उत्पन्न होती है, और heat तथा light छोड़ती है
  • fuel की density को दर्शाने वाला scalar field ρ और temperature को दर्शाने वाला scalar field T परिभाषित किया जाता है
  • fuel के जलने से system में temperature जुड़ता है, और temperature गर्म स्थानों से ठंडे स्थानों की ओर diffuse होता है
  • heat convection इन दोनों प्रक्रियाओं के संयोजन से परिभाषित होती है, और इसे model करने के लिए हमारे पास पहले से गणितीय मॉडल मौजूद है - advection!

GN⁺ की राय:

  1. यह लेख रियल-टाइम में आग और धुएँ जैसे द्रवों के सिमुलेशन की जटिल प्रक्रिया को समझाता है, जो computer graphics और game development में बेहद महत्वपूर्ण विषय है.
  2. हाल के GPU विकासों की बदौलत जटिल fluid simulation को रियल-टाइम में प्रोसेस करना संभव हुआ है, जिससे visually attractive games और फिल्म special effects बनाना आसान हुआ है.
  3. यह लेख Navier-Stokes equation और Vorticity Confinement जैसे उन्नत गणितीय concepts को कवर करता है, इसलिए इस क्षेत्र में रुचि रखने वाले शुरुआती software engineers के लिए यह उपयोगी जानकारी देता है.

1 टिप्पणियां

 
GN⁺ 2023-12-20
Hacker News राय
  • CFD(कम्प्यूटेशनल फ्लुइड डायनेमिक्स) में PhD करने वाले एक व्यक्ति के रूप में, मैं मानता हूँ कि मैंने vortex confinement methods या curl-noise turbulence के बारे में पहले कभी नहीं सुना था। सच में हर दिन कुछ नया सीखने को मिलता है.
    • इंडस्ट्री के CFD में high Reynolds numbers से निपटना पड़ता है, इसलिए numerical methods के artificial dissipation को संतुलित करने के लिए noise लगाना वांछनीय नहीं होता। वास्तव में, high Reynolds number simulations को stabilize करने के लिए बहुत से लोग artificial dissipation चाहते हैं। कंप्यूटर ग्राफिक्स में ज़रूरतें physics की सटीकता से ज़्यादा इस बात पर केंद्रित होती हैं कि चीज़ सही दिखे.
  • गेम्स के लिए fire and smoke simulation और GPU पर fluid simulation का ज़िक्र है। अगर गेम में ये effects चलने हैं, तो क्या GPU पहले से ही व्यस्त नहीं होता? CFD problem solve करना और साथ ही rendering करना काफ़ी भारी काम लगता है.
    • क्या ऐसे simulations को iGPU पर चलाया जा सकता है ताकि dGPU rendering से जुड़ा ज़्यादा काम कर सके, या iGPU इतना कमज़ोर होता है कि CPU पर स्विच करना बेहतर होगा?
  • "10 Minute Physics" नाम के एक और व्यक्ति इन विषयों को समझाने में बहुत अच्छे हैं.
  • गणित से software engineer बने एक व्यक्ति ने CFD simulations में रुचि दिखाई है, और vector calculus या partial differential equations को लंबे समय से न छूने की वजह से गणित काफ़ी जंग खा चुकी होने के बावजूद, वे इस क्षेत्र के बारे में सीखना चाहते हैं.
  • हाल ही में एक video देखा जिसमें एक simple fluid simulation implement की गई थी, और वह बहुत दिलचस्प लगी.
  • EmberGen एक शानदार software है जो consumer GPU पर real time में fire और smoke simulation करता है, और node-based workflow को support करता है जिससे नए effects आसानी से बनाए जा सकते हैं.
    • workflow इतना बेहतर हो गया है कि जिन कामों में पहले कई घंटे लगते थे वे अब कुछ ही मिनटों में पूरे हो सकते हैं.
    • इस बात पर हल्की निराशा जताई गई कि EmberGen को Hacker News पर ज़्यादा ध्यान नहीं मिला। (EmberGen/JangaFX से असंबंधित एक संतुष्ट ग्राहक की राय)
  • एक राय यह भी है कि हालाँकि यह लेख का मुख्य बिंदु नहीं है, लेकिन simulation चुनते समय artistic control छोड़ना पड़ता है और अक्सर भारी मात्रा में controls के साथ दर्दनाक समझौता करना पड़ता है—यह शुरुआती बात कुछ भ्रामक है.
    • Balrog जैसे मुख्य scene में वे simulation का फैसला नहीं करेंगे, बल्कि हर frame पर पूरा नियंत्रण पसंद करेंगे.
    • Tolkien fantasy का उदाहरण लें तो, ऐसा landscape scene जिसमें कोई नदी कई मोड़ लेती हो, कुछ चट्टानें हों, और कभी-कभी मछलियाँ उछलती हों, simulation के लिए अधिक उपयुक्त है.
  • 64GB RAM होने के बावजूद, उस पेज ने browser tab को पूरी तरह crash कर दिया.
  • एक video link है जो यह अच्छी तरह समझाती है कि computer graphics explosions अक्सर इतने खराब क्यों दिखते हैं.
  • distill.pub template और page building system के output से बहुत प्रभावित होने की बात कही गई, और अफ़सोस जताया गया कि 2021 में इसे बंद कर दिया गया और अब इसका रखरखाव नहीं होता.