Teknik untuk Mensimulasikan Fluida, Api, dan Asap secara Real-Time
(andrewkchan.dev)- Catatan dan source code (GitHub) tentang matematika, algoritme, dan metode yang terkait dengan simulasi fluida seperti api dan asap secara real-time
1. Simulasi Fluida
- Sebelum mensimulasikan api, kita perlu mensimulasikan fluida
- Masalah menjadi jauh lebih sederhana jika kita mengasumsikan fluida bersifat inkompresibel dan non-viskos
1.1 Dasar-Dasar Dinamika Fluida
- Fluida mengisi suatu wilayah DDD di ruang, dan pada waktu ttt kecepatan fluida adalah u(x,t)
- Medan kecepatan 2D u dapat direpresentasikan sebagai grid N×N
- Apa yang terjadi jika setetes pewarna dijatuhkan ke dalam fluida?
- Definisikan medan skalar ψ(x,t) yang merepresentasikan kerapatan pewarna, dan perpindahannya oleh kecepatan fluida disebut advection
- Naive Method untuk menghitung advection adalah memindahkan setiap titik grid dan memperbarui titik grid terdekat, tetapi metode ini sulit diparalelkan dan tidak stabil
Persamaan diferensial parsial untuk advection
- Untuk menurunkan advection secara stabil, kita memerlukan ekspresi PDE yang eksplisit
- Total massa pewarna di dalam wilayah ruang tetap WWW adalah ∫WψdV, dan perubahan massanya terhadap waktu adalah ddt∫Wψ(x,t)dV
- Berdasarkan hukum kekekalan massa, ddt∫WψdV=−∫Sψu⋅ndA
- Dengan menerapkan teorema divergensi, diperoleh ∫W[∂ψ∂t+∇⋅(ψu)]dV=0, dan untuk subwilayah satuan W=dV diperoleh ∂ψ∂t+∇⋅(ψu)=0
- Ini memberikan PDE eksplisit yang harus kita selesaikan
Metode stabil untuk advection
- Jika melihat eqn. (1) lebih dekat, ruas kanan adalah turunan arah ke arah −u
- Metode ini disebut Semi-Lagrangian advection dan ditemukan oleh Jos Stam pada 1999
- Karena setiap titik grid hanya diperbarui satu kali, metode ini sangat mudah diparalelkan dan stabil tanpa syarat
1.2 Persamaan Navier-Stokes
- Kita telah menemukan model untuk bagaimana sifat skalar fluida berevolusi terhadap waktu, tetapi bagaimana dengan aliran fluidanya sendiri?
- Persamaan Navier-Stokes mendefinisikan bagaimana medan kecepatan u berubah terhadap waktu pada suatu titik di dalam fluida
- Kita mengasumsikan fluida non-viskos, sehingga μ=0, dan gaya eksternal juga dapat diabaikan untuk sementara
- Karena itu, kita hanya menyisakan dua suku: self-advection dan pressure
- Dengan menghitung dan menjumlahkan suku-suku ini secara numerik pada setiap timestep, kita dapat mensimulasikan fluida
Menyelesaikan pressure
- Karena kita tidak tahu apakah medan kecepatan baru memenuhi kendala inkompresibilitas, suku pressure p harus memperbaikinya
- Untuk itu, kita perlu menyelesaikan persamaan Poisson
- Untuk menyelesaikan persamaan Poisson, kita dapat menggunakan algoritme iteratif seperti metode Jacobi
- Metode Jacobi dapat dijalankan secara paralel di GPU sehingga implementasinya sangat sederhana
Ringkasan: simulasi Navier-Stokes
- Matematika Navier-Stokes bisa sedikit rumit, tetapi menyelesaikan persamaannya untuk mensimulasikan fluida dapat diringkas menjadi beberapa prosedur pembaruan utama
1.3 Vorticity Confinement
- Menyimpan medan kecepatan menggunakan grid sangatlah praktis, tetapi saat menginterpolasi nilai di antara titik grid, terjadi smoothing numerik yang tidak diinginkan
- Akibatnya, pusaran turbulen dalam aliran menghilang sehingga aliran fluida menjadi terlalu halus dan "membosankan"
- Vorticity confinement adalah proses untuk memperkuat vortisitas yang hilang ini
- Vorticity confinement dirancang untuk menyelesaikan medan aliran yang sangat kompleks pada bilah helikopter
- Vortisitas dihitung pada setiap titik dengan mengambil curl dari u, dan untuk memperkuat vortisitas, aliran melingkar ditambahkan pada setiap titik
Curl-Noise Turbulence
- Curl noise adalah metode yang mirip dengan vorticity confinement; alih-alih mengukur dan memperkuat vortisitas medan kecepatan, metode ini menggunakan fungsi noise untuk membuat medan vortisitas skalar sejak awal
- Fluida yang bergerak cepat dan sangat turbulen paling banyak mendapatkan manfaat dari vorticity confinement dan curl noise
2. Simulasi Api
- Untuk mensimulasikan api dan asap, kita perlu menambahkan kanal yang merepresentasikan bahan bakar dan temperatur, lalu memodelkan pembakaran bahan bakar untuk menghasilkan panas
- Kita juga perlu menangani bagian fluida yang lebih panas agar naik sesuai model buoyancy termal, serta merender nyala api dengan benar
2.1 Model Pembakaran Dasar
- Secara kimia, api terjadi akibat reaksi oksidasi pada material bahan bakar, yang melepaskan panas dan cahaya
- Definisikan medan skalar ρ yang merepresentasikan kerapatan bahan bakar dan medan skalar T yang merepresentasikan temperatur
- Bahan bakar terbakar dan menambahkan temperatur ke sistem, lalu temperatur berdifusi dari daerah panas ke daerah dingin
- Konveksi panas didefinisikan sebagai gabungan dari dua proses ini, dan kita sudah memiliki model matematis untuk memodelkannya - advection!
Pendapat GN⁺:
- Artikel ini menjelaskan proses kompleks untuk mensimulasikan fluida seperti api dan asap secara real-time, yang merupakan topik sangat penting dalam computer graphics dan pengembangan game.
- Dengan kemajuan GPU belakangan ini, simulasi fluida yang kompleks kini dapat diproses secara real-time, yang berkontribusi pada pembuatan game yang menarik secara visual dan efek khusus film.
- Artikel ini membahas konsep matematika tingkat lanjut seperti persamaan Navier-Stokes dan vorticity confinement, sehingga memberikan informasi yang bermanfaat bagi software engineer pemula yang tertarik pada bidang ini.
1 komentar
Komentar Hacker News