2D 비 생성 및 유체 역학


11

나는 내 게임에서 기상 조건을 실험하고 있는데 Starbound가 비를 처리하는 방식에 깊은 인상을 받았습니다. 기본적으로 빗물이 땅에 닿으면 수평으로 흩어져 있거나 땅에 흡수되거나 빗방울이 땅의 구멍 안쪽에 떨어질 때 물 더미를 만듭니다.

이 비디오는 이것을 명확하게 보여줍니다 : http://imgur.com/gallery/CKCGKbG

비를 내리고 땅에 닿는 곳을 확인하는 방법을 알고 있지만, 그 곳에 갇히게됩니다. 내 질문은 : 어떻게 만들 수 있었습니까? 성능 저하없이 어떻게 물의 흐름을 완벽하게 모델링 할 수 있을까요?

미리 감사드립니다!


1
핵심은 유체 역학 시스템입니다. 빗방울이 땅에 닿을 때, 그 위치에서 소량의 물을 생성 한 다음 평상시처럼 유체 역학 시스템에 의해 처리된다고 생각합니다. 평평한 표면에서는 증발에 의해 상쇄되지만 경사로 인해 한 지역에 물이 집중되면 유입이 증발보다 강하고 웅덩이가 형성되기 시작합니다.
Philipp

답변:


9

Starbound의 물 시스템은 실제로 2D 타일 기반 셀룰러 오토마타입니다. 전면 타일 레이어가없는 화면의 각 타일은 물을 담을 수 있습니다. 물의 양은 세포 오토마타를 통해 계산됩니다.

이 기술에 대한 자세한 내용은 여기를 참조하십시오.

http://www.gamasutra.com/view/feature/134736/an_intro_to_cellular_automation.php

http://www.jgallant.com/2d-liquid-simulator-with-cellular-automaton-in-unity/

빗방울은 입자입니다. 그들은 실제로 하늘에서 떨어지는 물이 있다는 것을 가짜에게 주로 제공합니다. 게임은 현재 비가 내린다는 것을 알고 있기 때문에 물이 축적됩니다. 개별 방울은 실제 물웅덩이 형성과 관련이 없습니다.

그들이 쌓이는 방법은지면의 최상층에 구멍이있는 곳을 결정하는 것입니다. 물을 축적 할 수있는 면적이있는 경우 해당 면적의 세포는 그에 따라 수위를 증가시킵니다.

Starbound는 또한 수압을 다루며 렌더링 기술은 매우 훌륭합니다. 그들은 내가 본 셀룰러 오토마타를 사용하여 최고의 물 시뮬레이션 물리학을 구현합니다.

위에서 언급 한 셀룰러 오토마타 기술을 활용 한 액체 물리 엔진의 기본 모습입니다. 물이 수치로 표시되므로 렌더링 부분이 조금 더 복잡해집니다.

http://www.jgallant.com/images/pressuretest.gif

이 예에서, 바닥 아래에 단단한 타일이 없으면 물이 1 단위 미만인 물 세포를 타일 안에 숨기는 것이 매우 간단한 개선입니다. 그러나 물 흐름을 숨기고 있습니다. 물을 숨기는 대신 물이 흐르는 방법을 결정한 다음 적절한 물 스프라이트를 그 자리에 그려야합니다.


2
빗방울 입자가 물 떨어지는 효과를 가짜로 만든다는 사실을 추가하기 위해 표면의 작은 물방울이 실제 비 입자와 관련이 없지만 별도의 효과와 관련이 있습니다. 조합하면 물방울이 튀는 것처럼 보입니다 .
Felsir

와우, 그것이 바로 내가 찾던 것입니다. 입자를 기반으로 지나치게 복잡한 유체 시스템에 의존해야한다고 생각했지만 그리드 시스템도 잘 작동하는 것 같습니다. 그러나 수압을 추가하려면 압력 값을 저장하고 고압에서 저압으로 흐르는 두 번째 배열이 필요하다고 생각하십니까? 그렇다면 여전히 컴퓨터에 너무 어렵지 않아야합니다.
Pandaqi

아니요, 압력으로해야 할 일은 타일에 1 단위 이상의 액체를 담을 수있는 규칙을 추가하는 것입니다. 해당 타일에 액체의 전체 단위가 2 개 이상 있고 일반적인 규칙 세트에 따라 흐를 수없는 경우 위쪽으로 흐르게하십시오. 해당 타일의 가압 된 값을 기준으로 더 많은 물이 흐르도록 조정하십시오.
jgallant

3

이것에 접근하는 방법에는 여러 가지가 있습니다. 항상 '의존'

그래서 한 가지 방법은이 방법이 될 것 같아요. 임의의 '땅에 딥'이 주어지면 그것을 치는 '물 상자'를 오버레이하십시오. 지면과 워터 박스는지면이 먼저, 워터 박스 다음에 표시되도록 레이어로 그려집니다.

물방울이 땅에 떨어지면 워터 박스에 물을 넣으십시오. 워터 박스가 매직 넘버에 도달하면 물 라인을 추가하십시오. 딥에 10 방울을 떨어 뜨리면 워터 박스에 한 줄이 추가됩니다.

워터 박스가 32X32 픽셀이라고 가정하십시오. 0,31-31,31의 물 색 한 줄을 추가하십시오. 또 다른 10 방울은 0,30-31,30에서 선을 그립니다. 방울이 쌓이면 바닥에서 물이 가득 찰 때까지 워터 박스를 만듭니다.

이해가 되길 바랍니다.

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