2 puan yazan GN⁺ 2023-12-20 | 1 yorum | WhatsApp'ta paylaş
  • Ateş ve duman gibi akışkanları gerçek zamanlı simüle etmeye ilişkin matematik, algoritmalar, yöntemler ve kaynak kodu notları (GitHub)

1. Akışkan simülasyonu

  • Ateşi simüle etmeden önce akışkanı simüle etmek gerekir
  • Akışkanın sıkıştırılamaz ve viskoz olmadığını varsayarsak problem büyük ölçüde basitleşir

1.1 Temel akışkanlar dinamiği

  • Uzayın DDD bölgesi akışkanla doludur ve ttt zamanında akışkanın hızı u(x,t)'dir
  • 2D hız alanı u, N×N bir grid ile ifade edilebilir
  • Akışkana bir damla boya bırakılırsa ne olur?
  • Boyanın yoğunluğunu temsil eden skaler alan ψ(x,t) tanımlanır ve bunun akışkanın hızıyla taşınmasına advection denir
  • advection'ı hesaplamak için Naive Method, her grid noktasını hareket ettirip en yakın grid noktasını güncellemektir; ancak bunu paralelleştirmek zordur ve yöntem kararsızdır

Advection için kısmi diferansiyel denklem

  • advection'ı kararlı biçimde türetmek için açık bir PDE ifadesi gerekir
  • Sabit uzay bölgesi WWW içindeki toplam boya kütlesi ∫WψdV'dir ve zamana göre kütle değişimi ddt∫Wψ(x,t)dV'dir
  • Kütlenin korunumu yasasına göre ddt∫WψdV=−∫Sψu⋅ndA olur
  • Diverjans teoremi uygulanınca ∫W[∂ψ∂t+∇⋅(ψu)]dV=0 elde edilir ve birim alt bölge W=dV için ∂ψ∂t+∇⋅(ψu)=0 olur
  • Bu, çözmemiz gereken açık PDE'yi verir

Advection için kararlı yöntem

  • eqn. (1) yakından incelendiğinde, sağ tarafın −u yönündeki yönlü türev olduğu görülür
  • Semi-Lagrangian advection adı verilen bu yöntem 1999'da Jos Stam tarafından geliştirildi
  • Her grid noktası yalnızca bir kez güncellendiği için paralelleştirmesi çok kolaydır ve koşulsuz olarak kararlıdır

1.2 Navier-Stokes denklemi

  • Akışkanın skaler özelliklerinin zaman içinde nasıl evrildiğine dair bir model bulduk; peki akışın kendisi nasıl davranır?
  • Navier-Stokes denklemi, akışkan içindeki herhangi bir noktada hız alanı u'nun zaman içinde nasıl değiştiğini tanımlar
  • Akışkanın viskoz olmadığını varsaydığımız için μ=0'dır ve dış kuvvetler de şimdilik göz ardı edilebilir
  • Böylece elimizde yalnızca self-advection ve basınç olmak üzere iki terim kalır
  • Her zaman adımında bu terimler sayısal olarak hesaplanıp toplanarak akışkan simüle edilebilir

Basınç çözümü

  • Yeni hız alanının sıkıştırılamazlık kısıtını sağlayıp sağlamadığı bilinmediğinden, basınç terimi p bunu düzeltmelidir
  • Bunun için Poisson denklemini çözmek gerekir
  • Poisson denklemini çözmek için Jacobi yöntemi gibi yinelemeli algoritmalar kullanılabilir
  • Jacobi yöntemi GPU üzerinde paralel çalıştırılabildiği için uygulanması çok basittir

Özet: Navier-Stokes simülasyonu

  • Navier-Stokes matematiği biraz karmaşık olabilir, ancak denklemleri çözerek akışkan simüle etmek birkaç temel güncelleme adımına indirgenebilir

1.3 Vorticity confinement

  • Hız alanını bir grid üzerinde saklamak çok kullanışlıdır, ancak grid noktaları arasındaki değerler enterpole edilirken istenmeyen sayısal yumuşatma oluşur
  • Bunun sonucunda akıştaki türbülanslı girdaplar yok olur ve ortaya genellikle aşırı yumuşak, "sıkıcı" bir akış çıkar
  • Vorticity confinement, kaybolan bu girdapsallığı yeniden güçlendirme sürecidir
  • Vorticity confinement, helikopter pervane kanatlarının son derece karmaşık akış alanını çözmek için tasarlanmıştır
  • Vorticity, u'nun curl'ü alınarak her noktada hesaplanır ve bunu güçlendirmek için her noktaya dairesel akış eklenir

Curl-noise turbulence

  • Curl noise, vorticity confinement'a benzer bir yöntemdir; ancak hız alanındaki vorticity'yi ölçüp güçlendirmek yerine, bir noise fonksiyonu kullanarak skaler vorticity alanını en baştan üretir
  • Hızlı hareket eden ve çok türbülanslı akışkanlar, vorticity confinement ve curl noise'dan en fazla fayda sağlar

2. Ateş simülasyonu

  • Ateş ve dumanı simüle etmek için yakıtı ve sıcaklığı temsil eden kanallar eklemek, ayrıca ısı üretmek için yakıtın yanmasını modellemek gerekir
  • Ayrıca çok sıcak akışkan bölgelerinin termal kaldırma modeli uyarınca yükselmesini ele almak ve alevleri doğru şekilde render etmek gerekir

2.1 Temel yanma modeli

  • Kimyasal olarak ateş, yakıt maddesinin oksidasyon tepkimesi sonucu oluşur ve ısı ile ışık yayar
  • Yakıt yoğunluğunu temsil eden skaler alan ρ ve sıcaklığı temsil eden skaler alan T tanımlanır
  • Yakıt yanarak sisteme sıcaklık ekler ve sıcaklık sıcaktan soğuğa doğru yayılır
  • Isıl taşınım, bu iki sürecin birleşimi olarak tanımlanır ve bunu modellemek için gereken matematiksel modele zaten sahibiz: advection!

GN⁺ görüşü:

  1. Bu yazı, ateş ve duman gibi akışkanların gerçek zamanlı simülasyonundaki karmaşık süreci açıklıyor; bu da bilgisayar grafikleri ve oyun geliştirme için çok önemli bir konu.
  2. Son dönemde GPU'lardaki gelişmeler, karmaşık akışkan simülasyonlarının gerçek zamanlı işlenmesini mümkün kıldı; bu da görsel olarak etkileyici oyunlar ve film özel efektleri üretimine katkı sağladı.
  3. Yazı, Navier-Stokes denklemi ve vorticity confinement gibi ileri matematik kavramlarını ele aldığı için, bu alana ilgi duyan başlangıç seviyesindeki yazılım mühendisleri için faydalı bilgiler sunuyor.

1 yorum

 
GN⁺ 2023-12-20
Hacker News yorumu
  • Hesaplamalı akışkanlar dinamiği (CFD) alanında doktora yapmış biri olarak, vorticity confinement yöntemi ya da curl-noise türbülansı diye bir şeyle daha önce hiç karşılaşmadığımı itiraf ediyorum. Her gün yeni bir şey öğrenildiğini gerçekten hissediyor insan.
    • Endüstriyel CFD'de yüksek Reynolds sayılarıyla uğraşıldığı için, sayısal yöntemlerin yapay sönümünü telafi etmek amacıyla gürültü uygulamak arzu edilen bir şey değildir. Hatta birçok kişi, yüksek Reynolds sayılı simülasyonları kararlı hale getirmek için yapay sönüm ister. Bilgisayar grafikleri tarafındaki gereksinimler, fiziksel doğruluktan çok doğru görünmesine odaklanır.
  • Oyunlar için ateş ve duman simülasyonundan ve GPU üzerinde akışkan simülasyonundan bahsediliyor. Böyle efektlerin oyunda çalıştırılması gerekiyorsa, GPU zaten meşgul değil midir diye merak ediyorum. Bir yandan CFD problemini çözüp bir yandan da render almak oldukça fazla iş gibi görünüyor.
    • Bu tür simülasyonlar iGPU üzerinde çalıştırılabilir de dGPU daha fazla render işi mi üstlenebilir, yoksa iGPU fazla zayıf olduğundan CPU'ya geçmek mi daha iyidir, merak ediyorum.
  • "10 Minute Physics" adlı başka birinin bu konuları açıklama biçimi gerçekten çok iyi.
  • Matematik bölümünden yazılım mühendisliğine geçmiş biri olarak CFD simülasyonlarına ilgi duyuyorum; vektör hesabı ya da kısmi diferansiyel denklemlerle uzun süredir uğraşmadığım için matematik epey paslanmış olsa da bu alanı öğrenmek istiyorum.
  • Yakın zamanda basit bir akışkan simülasyonunun nasıl uygulandığını gösteren bir video izledim ve çok ilginçti.
  • EmberGen, tüketici sınıfı GPU'larda gerçek zamanlı ateş ve duman simülasyonu yapan müthiş bir yazılım; node tabanlı iş akışını desteklediği için yeni efektler oluşturmak kolay oluyor.
    • İş akışı, saatler süren işleri birkaç dakikada tamamlanabilir hale gelecek şekilde iyileştirilmiş.
    • EmberGen'in Hacker News'te büyük ilgi görmemiş olmasına biraz üzüldüm. (EmberGen/JangaFX ile ilgisi olmayan memnun bir müşterinin görüşü)
  • Yazının ana konusu bu değil ama, simülasyonu seçerken sanatsal kontrolü bırakmanız ve çoğu zaman bunaltıcı miktarda kontrol ile sancılı bir pazarlık yapmanız gerektiğini söyleyen giriş kısmı bana biraz yanlış geliyor.
    • Balrog gibi kilit sahnelerde simülasyon seçmez, her kare üzerinde tam kontrolü tercih ederdim.
    • Tolkienvari bir fantezi örneği olarak, nehrin birçok kıvrım yaptığı, birkaç kayanın bulunduğu ve arada bir balığın sıçradığı bir manzara sahnesi simülasyona daha uygundur.
  • 64 GB RAM'im olmasına rağmen bu sayfa sekmeyi tamamen çökertiyor.
  • Bilgisayar grafiklerindeki patlamaların neden kötü göründüğüne dair iyi bir açıklama sunan bir video bağlantısı var.
  • distill.pub şablonundan ve sayfa oluşturma sisteminin çıktılarından çok etkilendim; 2021'de durdurulmuş ve artık bakım görmüyor olması üzücü.