물로 채워진 영역을 어떻게 정의 할 수 있습니까?


9

멋진 물 시뮬레이션으로 작은 게임 엔진을 향상시키고 싶습니다. 그 작업을 시작하려면 게임에서 물을 나타내는 적절한 방법을 찾아야합니다. 불행히도 나는 다른 표현을 잘 모르므로 물어볼 것입니다. 얼마 전에 내가 물었던 비슷한 질문 이 있습니다 . 그러나이 문제를 명확하게 공식화하지 않았기 때문에 대답은 정확하지만 내가 찾던 것이 아닙니다.

일부 게임에서 물은 높이 수준으로 정의됩니다. 예를 들어 높이가 0 미만인 모든 것은 수중입니다. 나는 (대부분 오래된) 게임에서이 표현을 보았다. 문제는 홍수가 발생하지 않는 야외 세계의 동굴과 호수와 바다마다 다른 수위가 필요하다는 것입니다.

물의 발생에 대한 더 정확하고 또 다른 표현은 입자입니다. 모든 물방울은 월드 공간의 한 지점으로 저장됩니다. 그것들을 렌더링하기 위해 메타 볼과 같은 기술을 사용하여 단일 메쉬를 만들 수있었습니다. 이 표현은 역학을 쉽게 계산할 수 있기 때문에 사실감에 좋습니다. 안타깝게도 실시간으로 메타 볼의 바다를 계산할 수있는 기계는 없습니다.

엔진에서 물을 나타내는 다른 방법이 있습니까? 동적 호수를 원하므로 정적 지오메트리로 물 면적을 정의하는 것은 선택 사항이 아닙니다. 예를 들어 플레이어가 지형을 수정하여 호수를 넓히면 물이 해당만을 채우고 해당 호수의 전체 수위가 약간 낮아집니다.


2
엔진에서 지형은 어떻게 구성되어 있습니까? 복셀 대 하이트 맵 대 폴리 수프 (메시) 터 레인에 대한 다양한 기술이 있습니다.
Exilyth

메시로 주어지며 물은 지형 메시를 다른 정적 메시와 다르게 거래해서는 안됩니다.
danijar

1
거래 또는 취급?
Tom 'Blue'Piddock

1
이러한 메타 볼 aproach에 대한 아주 좋은 데모가 있지만, 물 시뮬레이션이 물리적으로 믿을만한 지점이라는 사실에 전적으로 초점을 맞추지 않은 실제 게임에서는 사용할 수 없습니다. 메쉬에 대한 이유는 보이지 않지만 소싱에 맞게 조정하거나 물리적 시뮬레이션을 기반으로 생성하는 것도 문제가되지 않습니다. 그러나 그것은 정말로 필요한 경우에만하고 싶은 일입니다. 반 사실적인 물 시뮬레이션에 대한 참조로 "먼지에서"를 확인할 수 있습니다.
Slin

1
가변 크기 솔루션은 "메타 볼의 대양"문제에 대한 것이었다. 또한 물의 양을 변경하지 않고 성능을 최적화하는 수단이기 때문에 음량에 따라 크기 편차에 제한이 있습니다. 폭포, 지류, 해안 또는 개울과 같이 세부적인 부분이 필요한 부분에 대해서는 플레이어와 수면과의 근접성과 같은 특별한 고려 사항을 추가하십시오.
Attackfarm

답변:


3

나는 일반적으로 사용되는 것을 말할 수 없지만, 나의 첫 번째 생각은 다양한 부피의 물을 나타내는 다양한 크기의 입자를 가진 입자 시스템을 사용하는 것입니다. 물의 꼭대기는 표면과 파도의 물결을 형성하기 위해 작은 입자를 사용하고, 플레이어와 가장 가까운 물은 가장 작은 입자를 사용하여 스플래시와 작은 물결을 시뮬레이션하는 반면, 물이 많거나 깊을수록 입자는 더 커집니다 . 이것은 임의의 크기의 물, 변화하는 물의 역학, 및 합리적이고 제어 된 성능 수준을 시뮬레이션하는 동적 입자의 수를 허용 할 것이다.

이 구현에서 문제를 볼 수는 있지만, 시청자 / 플레이어가 시뮬레이션에서 편차를 알아 차리지 못하는 것은 비교적 간단하고 "충분한"솔루션 인 것 같습니다.


2

복셀 기반 지형을 사용하는 경우 복셀 당 접지 밀도를 저장하는 것 외에도 0와 사이에 고정 된 물 값을 저장할 수 있습니다 1 - groundDensity. 물을 그리는 것은 행진 큐브가 물 값을 지나가는 것처럼 간단합니다. 물을 시뮬레이션하는 것은 조금 더 어려울 수 있지만 기본 전제는 다음과 같은 시스템을 해결하려는 것입니다.

  1. 표면 아래의 물은 복셀의 나머지 부분을 채워야합니다
  2. 지표수 groundDensity + waterDensity는 주변 과 동일한 총 밀도를 가져야합니다.
  3. 이웃의 총 밀도가 총 밀도보다 작은 경우, 물은 바로 인접한 바로 아래의 복셀로 변위 될 수 있습니다.

이상적인 알고리즘은 복셀 당 하나의 실행 경로 인 컴퓨팅 셰이더에서 실행됩니다. 공상을 원한다면 추가 시뮬레이션 효과를 위해 복셀 내에 물의 속도를 저장할 수도 있습니다. 이 속도 데이터는 또한 파도를 움직이거나 급류를 그리는 데 사용될 수 있습니다.


불행히도 질문 아래의 의견에서 지적했듯이 복셀 지형이 없습니다. 어쨌든 고마워
danijar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.