1 पॉइंट द्वारा GN⁺ 2024-09-29 | 1 टिप्पणियां | WhatsApp पर शेयर करें

GodotOceanWaves

Godot Engine का उपयोग करके open ocean rendering का एक प्रयोग, जिसमें directional ocean wave spectrum के inverse Fourier transform का उपयोग करके लहरें बनाई जाती हैं। यह script के जरिए real time में wave properties बदलने के लिए सरल parameters देता है, जिससे अलग-अलग समुद्री लहरों वाले environments की नकल की जा सकती है।

परिचय

Fourier transform क्यों?
  • वीडियो गेम्स में पानी को animate करने का सामान्य तरीका Gerstner waves का उपयोग करना है। लेकिन यह शांत पानी के low-frequency details को model करने के लिए तो उपयुक्त है, पर open ocean की खुरदरी सतह को सटीक रूप से दर्शाने में कम पड़ता है।
  • इसे हल करने के लिए, समुद्र-विज्ञानियों द्वारा एकत्र किए गए empirical data पर आधारित ocean wave spectrum के inverse Fourier transform का उपयोग करके लहरों का simulation किया जाता है।
  • frequency space में काम करने का फायदा यह है कि समुद्र के गुणों को आसानी से बदला जा सकता है। Gerstner waves का उपयोग करने पर यह स्पष्ट नहीं होता कि किसी विशेष sea state की नकल करने के लिए waves और उनके parameters को कैसे बदला जाए।
  • Fourier transform की गणना के लिए Fast Fourier Transform algorithm (FFT) का उपयोग किया जाता है। इसकी computational complexity पारंपरिक discrete Fourier transform algorithm से कम होती है, और यह GPU पर चलाने के लिए उपयुक्त है।

परिणाम

wave shading
lighting model
  • ocean lighting model मुख्य रूप से 'Atlas' GDC talk में वर्णित BSDF का पालन करता है। हालांकि, microfacet distribution के लिए Beckmann distribution की जगह GGX distribution का उपयोग किया गया है।
  • normal/foam map को world-space pixel density के आधार पर bicubic और bilinear filtering को मिलाकर sample किया जाता है।
ocean foam
  • Tessendorf ने यह तरीका प्रस्तावित किया कि जब wave crest अपने ऊपर ही मुड़ने लगे तो foam पैदा किया जाए।
  • foam रैखिक रूप से जमा होती है और घातीय रूप से खत्म होती है, और इसे "foam growth rate" तथा "foam decay rate" parameters से नियंत्रित किया जाता है।
ocean spray
  • ocean spray को Godot के GPUParticles3D node का उपयोग करके particles के रूप में model किया गया है।
  • particles को GPUParticles3D node के bounding box के भीतर समान रूप से वितरित किया जाता है।
  • हर ocean spray particle एक single static texture वाले billboard sprite का उपयोग करता है।
wave simulation
  • surface waves बनाने की विधि Tessendorf का अनुसरण करती है।
  • directional ocean wave spectrum function frequency और direction के अनुसार wave energy लौटाता है।
ocean wave spectrum
  • non-directional spectrum function के रूप में Texel-Marsen-Arsloe (TMA) spectrum चुना गया है।
  • directional spreading function के रूप में flat और Hasselmann spreading को मिलाकर उपयोग किया गया है।
Fast Fourier Transform
  • GPU के लिए एक custom FFT implementation लिखा गया है।
  • शुरुआती bit-reversal permutation से बचने के लिए Stockham FFT algorithm का उपयोग किया गया है।
wave cascade
  • बड़ी दूरी पर tiling artifacts बहुत स्पष्ट हो जाते हैं।
  • wave generation system एक साथ कई wave cascades को layer कर सकता है।
load balancing
  • waves की movement हर frame में displacement update किए बिना भी smooth दिखाई दे सकती है।
  • "update rate" parameter जोड़ा गया है ताकि प्रति सेकंड wave cascades कितनी बार update हों, इसे नियंत्रित किया जा सके।

संदर्भ

  • Flügge, Fynn-Jorin. Realtime GPGPU FFT Ocean Water Simulation. Hamburg University of Technology. (2017).
  • Gunnell, Garrett. I Tried Simulating The Entire Ocean. (2023).
  • Horvath, Christopher J. Empirical Directional Wave Spectra for Computer Graphics. DigiPro. (2015).
  • Tessendorf, Jerry. Simulating Ocean Water. SIGGRAPH. (2004).
  • Matusiak, Robert. Implementing Fast Fourier Transform Algorithms of Real-Valued Sequences. Texas Instruments. (2001).
  • Mihelich, Mark. Wakes, Explosions and Lighting: Interactive Water Simulation in 'Atlas'. GDC. (2019).
  • Pensionerov, Ivan. FFT-Ocean. GitHub. (2020).

copyright notice

  • Evening Road 01 (Pure Sky) by Jarod Guest का उपयोग CC0 1.0 license के तहत किया गया है।
  • OTFFT DIT Stockham Algorithm by Takuya Okahisa का उपयोग और संशोधन MIT license के तहत किया गया है।

GN⁺ की संक्षिप्त जानकारी

  • GodotOceanWaves, Godot Engine का उपयोग करने वाला open ocean rendering प्रयोग है, जो directional ocean wave spectrum के inverse Fourier transform से लहरें बनाता है।
  • Fast Fourier Transform (FFT) का उपयोग करके इसे GPU पर कुशलता से चलाया जा सकता है, और यह विभिन्न समुद्री wave environments की नकल कर सकता है।
  • इसमें wave shading, ocean foam, ocean spray, wave simulation जैसे कई तत्व शामिल हैं, जो एक यथार्थवादी समुद्री सतह का simulation करते हैं।
  • यह प्रोजेक्ट वीडियो गेम्स और simulations में यथार्थवादी ocean rendering लागू करने में उपयोगी हो सकता है।

1 टिप्पणियां

 
GN⁺ 2024-09-29
Hacker News राय
  • इस व्यक्ति के अन्य दो Godot repositories भी बहुत दिलचस्प हैं

    • repository के description में details जोड़ने का तरीका पसंद आया
    • खास तौर पर यह repository दिलचस्प है: GodotGaussianSplatting
    • संभव है कि यह एक छात्र हो; यह अक्सर दूसरे research का हवाला देता है और हाल ही में प्रकाशित सामग्री की अच्छी समझ रखता है
  • 20 साल पहले समुद्र की सतह render करने में कई महीने लगा देने पर भी इस स्तर तक नहीं पहुँचा जा सकता था

    • यह तकनीक कितनी शानदार है, यह देखकर हैरानी होती है
  • demo clip थोड़ा बढ़ा-चढ़ाकर दिखाया गया सा लगता है

    • मेरे पास 50,000Nm से अधिक sailing experience है
    • इतनी तेज़ और ऊँची लहरों के लिए इससे भी ज़्यादा तेज़ हवा चाहिए
    • यह parameter tuning से ठीक किया जा सकता है
  • लगता है कि Godot में rendering real-time में हो रही है

    • सोच रहा हूँ कि क्या इसके लिए एक powerful GPU चाहिए
  • ऐसी चीज़ों ने ही मुझे computers में दिलचस्पी दिलाई थी, लेकिन रास्ते में libraries, endpoints और company work से थक गया

    • कभी न कभी फिर से इसे आज़माना चाहूँगा
  • अगर wave/ocean simulation में रुचि है, तो Acerola ने इस विषय पर शानदार videos पोस्ट किए हैं

  • यह समस्या कितनी कठिन है, यह दिलचस्प है

    • दशकों से कोशिश की जा रही है, फिर भी यह अब तक अधूरी है
    • frame रोकने पर लहरें बर्फ से ढके पहाड़ों जैसी दिखती हैं
    • पानी में ऐसी तेज़ धार जैसी विशेषताएँ आने के लिए हवा बहुत प्रबल होनी चाहिए
    • simulation ने लहरों की मुलायम प्रकृति को अच्छी तरह दिखाया है
  • मैं कई साल समुद्र तट के पास रहा हूँ

    • समुद्र तट पर रहने से आप समुद्र को लंबे समय तक देखते रहते हैं
    • यह rendering सचमुच असली समुद्र जैसी लगती है
  • बहुत बड़ी लहरों के मामले में इस approach की कुछ सीमाएँ हैं

    • पानी की लहरें sine waves नहीं होतीं, लेकिन छोटी लहरों में यह तरीका अच्छी तरह काम करता है
    • बड़ी लहरें non-linear तरीके से interact करती हैं, इसलिए उनके लिए अलग approach चाहिए
  • Shadertoy पर भी एक शानदार example है

  • Fourier ने wave frequency transform बनाते समय ज्वारीय लहरों को मापा था

    • यह लगभग एक पूर्ण चक्र जैसा है
    • बहुत प्रभावशाली है
  • बहुत प्रभावशाली है, लेकिन लहरों की smoothness को लेकर थोड़ी समस्या है

    • high-frequency लहरें low-frequency लहरों के ऊपर जिस तरह चलती हैं, वह वीडियो से अलग है