Sıvıları ve gazları modelleyebilen bir 2d fizik motoru var mı? [kapalı]


20

Bu noktada platform ve programlama dili önemli değil, bunun için bir şey olup olmadığını bilmek istiyorum. Herhangi bir yardım takdir.


Özel bir 2d sıvı motoru uyguladım. Bu makaleyi viskoelastik sıvılar ve Flui D ° emo'nun kodu şablon olarak kullanarak bir çalışma örneği elde edebildim . Ancak, sıvılar istediğim kadar kararlı değildir ve kod çok sayıda optimizasyon sevgisini kullanabilir (çok çekirdekli işleme, önbellek dostu, vb.). İstediğim her şeyi zaten yapan bir kütüphane, böylece sadece Box2d ve oyunumla entegre etmem gerekiyor.
deft_code

Yanıtlar:


8

Q-Games'in Pixeljunk Shooter için ne kullandığına bakın. Oldukça ilgili sıvı fizik ile 2d oyunudur. Evde yetiştirilmiş veya ara katman yazılımı fizik motoru kullanıp kullanmadığından emin değilim, ancak bilgi muhtemelen bir yerde var.


8
Evde yetiştirilen bir motor kullandılar, ancak bazı özel kodlarda herhangi bir fizik motoru kullanılarak uygulanabilecek teknikler dahil ettiler. Aslında GDC'deki sıvı dinamikleri hakkında çok bilgilendirici bir konuşma yaptı (burada slaytlar: gdcvault.com/play/1012447/Go-With-the-Flow-Fluid )
hayalet

6

Buna bakmadım, ama neredeyse her fizik motorunun fikri taklit edebileceği gerçeğini biliyorum. Box2D, vb.

Temelde, yüzeyler ve birbirinden sıçrayan parçacıklar var (gazlar için daha hızlı), aynı zamanda onlara etki gibi sabit bir yerçekimi verir (sıvıların hepsi aynı olurdu, ancak yavaşça yükselmek isteyebileceğiniz bazı gazlar).

Dış parçacıkları bağlarsanız, kütleyi temsil eden çokgen bir şekil elde edersiniz

VEYA

her bir parçacığın üzerine bir piksel veya parçacık grafiği çizerseniz, bunun yerine kütle için bir bulut etkisi elde edebilirsiniz.


4
Bu cevap pratik boyutta gerçek zamanlı oyunlar için uygun değildir.
AttackingHobo

3
Sıvı dinamikleri genellikle parçacıklar olarak modellendiğinden bunu neden söylemediğinizden emin değilim. Örnekler için youtube'daki sıvı parçacıkları hakkındaki nvidia teknoloji videolarına, Algodoo (eski adıyla Phun olarak adlandırılan) programına veya Q-Games'in PixelJunk Shooter oyunları ( gdcvault.com/play/1012447/Go-With-the- Akış Sıvısı ). İkinci durumda, Q-Games, bir parçacık koleksiyonundan nasıl çokgen oluşturduklarını gösterir. Bunun, bu cevabın IMHO'nun gerçek zamanlı uygulamaları için oldukça geçerli olduğunu doğruladığını düşünürüm.
hayalet

WOWOW neden downvotes? Azgın değilim, sadece nedenini bilmek istiyorum. Gerçekçi bir tekniktir ve kullanılır.
Joel

"Etrafında, yüzeylerde ve birbirinden sıçrayan parçacıklar (gazlar için daha hızlı)", sıvıları moleküler düzeyde tarif ediyor gibi görünüyor ve saf bir yaklaşım pişmiş simülasyonla çalışabilirken, gerçek zamanlı oyunlar için iyi çalışmaz. Uzun simülasyon türü doğru olduğundan parçacıklar iyidir, "zıplayan" makro parçacıklarla çalışacak gibi görünüyor. Ayrıca yoğunluğun nasıl simüle edileceğini de yanlış bir şekilde beyan ettiniz.
AttackHobo

Parçacıklar yeterince iyi çalışıyor en.wikipedia.org/wiki/Smoothed-particle_hydrodynamics . FLT: nin en son demosunda directtovideo.wordpress.com/2011/05/03/numb-res bölümünde açıklandığı gibi kullanıldı Bu uygulama biraz ağır olabilir, ancak Pixel Junk Shooter GDC konuşmasında olduğu gibi daha basit yaklaşımlar iyi çalışmalıdır.
boşluk

6

Özellikle sıvılarla uğraşabileceğim tek kütüphane Fluidic'tir . Yine de oldukça alfa ve sadece bir sürümü var. Bullet fizik kütüphanesi , akışkanları modellemek için kullanılan bir teknik olan 'yumuşatılmış parçacık hidrodinamiğini' desteklemektedir. Kütüphane 3D'ye yönelik olsa da, 2D'de çalışmasını sağlamak için bir eksene kısıtlamalar uygulayabilirsiniz.

Benim tavsiyem, diğer cevaplarla ilgili bazı yorumlarda bahsettiğim gibi, Box2D veya Chipmunk gibi standart bir fizik motoru kullanmak ve suyu (yerçekimi ile) veya gazı (yerçekimi olmadan) modellemek ve bunları bir araya getirmek için birkaç daire kullanmaktır. bir su veya gaz gövdesi içine. Viskoziteyi simüle edebilmeniz için onları bir araya 'topaklaştırmak' için tek tek gövdelere bazı kısıtlamalar uygulayabilirsiniz. Şuna bir bakTek tek gövdelerin (videoda kareler olarak modellenmiştir) birlikte nasıl çalıştığını görmek bu videoya . Ancak, bu videoda kullanılan tekniğin bu paragrafta belirtilenle aynı olmadığını unutmayın. Çevrelerin birbirleriyle nasıl etkileşime girdiğini anlamak için videoyu kullanabilir ve bunu kullanılan fizik kütüphanesinde mevcut kısıtlamalarla taklit etmeye çalışabilirsiniz.

İlginç kısım, birden fazla daireyi su kütlesiyle birleştirmek istediğinizde gelir. Gelebileceğim en basit çözüm, her daireyi bir metaball olarak çizmektir, böylece daha büyük bir gövdenin parçası olarak görünürler. Bu cisimlerin arkasındaki matematik ve bazı örnek kodu burada bulabilirsiniz .


Bağlandığınız video, birçok çevreden çok daha fazlasını kullanıyor. SPH olarak bilinen bir teknik kullanır. Yangını liman arasında Flui ° D ° emo çarpışmaları bulup kuvvetler ancak kullanımları SPH yöntemleri değil Box2D en sert cisimler kuvvetlerini hesaplamak uygulamak Box2D kullanır.
deft_code

Bu konuda kesinlikle haklısınız. Videonun bir uygulama örneği yerine açıklayıcı olması gerekiyordu. Yanlışlığımdan bahsettiğiniz için teşekkür ederim ve yanlış anlaşılmaları önlemek için cevabı güncelledim.
hayalet

3

Bu sorunun gönderilmesinden bu yana birkaç yıl geçti, ancak arama yaparken karşılaştım, bu yüzden güncelleyeceğimi düşündüm.

Google, Box2D sistemi için LiquidFun (açık kaynak) yayınladı. Bazı sınırlamaları vardır, ancak oldukça iyi performansa sahip sıvı, kum vb parçacıklar ile başlamak için hızlı bir yoldur.

https://github.com/google/liquidfun

PixelJunk harika bir yaklaşıma sahip, ancak özel bir kütüphane. GCD 2010'daki konuşmalarında inanılmaz düzeyde ayrıntı paylaştılar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.