유체와 가스를 모델링 할 수있는 2D 물리 엔진이 있습니까? [닫은]


20

이 시점에서 플랫폼과 프로그래밍 언어는 중요하지 않습니다. 도움을 주시면 감사하겠습니다.


맞춤형 2D 유체 엔진을 구현했습니다. 점탄성 유체Flui ° D ° emo 코드를 템플릿으로 사용 하여이 문서를 사용하여 실무 예제를 얻을 수있었습니다 . 그러나 유체는 내가 원하는만큼 안정적이지 않으며 코드는 많은 최적화 사랑 (멀티 코어 처리, 캐시 친 화성 등)을 사용할 수 있습니다. 내가 원하는 것은 이미 모든 작업을 수행 한 라이브러리이므로 Box2d 및 내 게임에만 통합하면됩니다.
deft_code

답변:


8

Pixeljunk Shooter에 사용 된 Q-Games를 살펴보십시오. 그것은 유체 물리학에 관여하는 2D 게임입니다. 그들이 자체 또는 미들웨어 물리 엔진을 사용했는지 확실하지 않지만 정보는 아마도 어딘가에있을 것입니다.


8
이들은 자체 개발 한 엔진을 사용했지만 일부 사용자 지정 코드와 함께 모든 물리 엔진을 사용하여 적용 할 수있는 기술을 포함했습니다. 실제로 GDC에서의 유체 역학에 대한 매우 유익한 정보를 제공했습니다 (여기 슬라이드 : gdcvault.com/play/1012447/Go-With-the-Flow-Fluid )
유령

6

글쎄, 나는 이것을 보지 못했지만 거의 모든 물리 엔진이 아이디어를 모방 할 수 있다는 사실을 알고있다. Box2D 등

기본적으로 파티클이 튀어 나오고 표면에서 서로 튀어 나오며 (가스의 경우 더 빠름) 또한 중력과 같은 일정한 중력을줍니다 (액체는 모두 같지만 일부 가스는 천천히 상승 할 수 있습니다).

외부 입자를 연결하면 질량을 나타내는 다각형 모양이됩니다.

또는

각 입자 위에 단순히 픽셀이나 입자 그래픽을 그리면 질량에 구름 효과를 얻을 수 있습니다.


4
이 답변은 실제 크기의 실시간 게임에는 적합하지 않습니다.
AttackingHobo

3
유체 역학이 종종 입자로 모델링되기 때문에 왜 그렇게 말할지 잘 모르겠습니다. 예를 들어 YouTube의 유체 입자에 대한 엔비디아 기술 비디오, Algodoo (이전 명칭 Phun) 프로그램 또는 Q-Games가 PixelJunk Shooter 게임 ( gdcvault.com/play/1012447/Go-With-the- 유량-유체 ). 후자의 경우 Q-Games는 파티클 컬렉션에서 다각형을 구성하는 방법을 보여줍니다. 이 답변이 실시간 구현 IMHO에 매우 유효하다는 것을 확인한다고 생각합니다.
유령

왜 다운 보트인가? 나는 분노하지 않고 단지 이유를 알고 싶습니다. 현실적인 기술이며 사용됩니다.
Joel

분자 수준에서 유체를 묘사하는 것처럼 들리는 "주변 표면에서 떨어져 튀어 나오는 입자 (가스에 대해 더 빠름)", 순진한 접근 방식은 구운 시뮬레이션에서 작동 할 수 있지만 실시간 게임에는 적합하지 않습니다. 긴 유형의 시뮬레이션이 정확하기 때문에 입자가 문제가되지 않습니다. 또한 밀도를 시뮬레이션하는 방법을 잘못 표시했습니다.
AttackingHobo

입자는 충분히 잘 작동합니다 . en.wikipedia.org/wiki/Smoothed-particle_hydrodynamics . directtovideo.wordpress.com/2011/05/03/numb-res에 설명 된대로 FLT :의 최신 데모에서 사용되었습니다. 이 구현은 약간 무거울 수 있지만 Pixel Junk Shooter GDC 토크에서와 같이 간단한 근사치가 제대로 작동합니다.
무효

6

유체를 다루는 유일한 라이브러리는 Fluidic 입니다. 그것은 꽤 알파이며 하나의 릴리스 만 있습니다. 물리 라이브러리 Bullet 은 유체를 모델링하는 데 사용되는 기술인 '매끄러운 입자 유체 역학'을 지원합니다. 라이브러리는 3D에 맞춰져 있지만 한 축에 구속 조건을 적용하여 2D에서 작동하게 할 수 있습니다.

다른 답변에 대한 일부 의견에서 이미 언급했듯이 Box2D 또는 Chipmunk와 같은 표준 물리 엔진을 사용하고 물 (중력) 또는 가스 (중력 없음)를 모델링하고 이들을 결합하기 위해 여러 원을 사용하는 것이 좋습니다 하나의 물 또는 가스 몸체로. 개별 바디에 일부 구속 조건을 적용하여 함께 '뭉치 게'하여 점도를 시뮬레이션 할 수 있습니다. 한 번 봐 가지고 이 영상 (비디오에 사각형으로 모델링) 개별 기관이 함께 작동하는 방식을 볼 수 있습니다. 그러나이 비디오에 사용 된 기술은이 단락에서 언급 한 것과 동일하지 않습니다. 비디오를 사용하여 원이 서로 상호 작용하는 방식을 느끼고 사용 된 물리 라이브러리에있는 제약 조건으로이를 모방 할 수 있습니다.

흥미로운 부분은 여러 원을 수역으로 결합하려는 경우에 발생합니다. 내가 취할 수있는 가장 간단한 해결책은 각 원을 메타 볼로 그려서 더 큰 신체의 일부로 표시하는 것입니다. 이 본문 뒤에 수학과 예제 코드가 있습니다 .


연결 한 동영상이 많은 서클 이상을 사용하고 있습니다. 그는 SPH라는 기술을 사용합니다. 불꽃 포트Flui ° D ° 이모는 충돌을 찾아 힘하지만 사용의 SPH 방법이 없습니다 Box2D의의 강체 힘을 계산 적용 Box2D의를 사용합니다.
deft_code

그 점에서 당신은 절대적으로 정확합니다. 이 비디오는 구현 예가 아니라 설명을위한 것이 었습니다. 내 실수를 언급 해 주셔서 감사 드리며 더 이상의 오해를 예방하기 위해 답변을 업데이트했습니다.
유령

3

이 질문이 게시 된 지 몇 년이 지났지 만 검색하는 동안이 문제가 발생하여 업데이트하겠다고 생각했습니다.

Google은 Box2D 시스템 용 LiquidFun (오픈 소스)을 출시했습니다. 몇 가지 제한이 있지만 성능이 매우 좋은 액체, 모래 등의 입자를 빨리 시작할 수 있습니다.

https://github.com/google/liquidfun

PixelJunk는 훌륭한 접근 방식을 가지고 있지만 개인 라이브러리입니다. 그들은 GCD 2010에서 대화에서 놀라운 수준의 세부 사항을 공유했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.