워터 시스템은 GPU 구동 워터 웨이브 데이터를 사용하여 워터 바디 액터(Water Body Actor)의 표면에 일어나는 파도를 시뮬레이션합니다. 워터 웨이브 에셋(Water Waves Asset) 은 시뮬레이션 모델에 의해 제어되는 개별 웨이브 파라미터를 제공합니다.
워터 웨이브 에셋 생성하기
워터 바디는 워터 웨이브 에셋 할당 슬롯에 사용할 웨이브 시뮬레이션 모델을 제공합니다. 기본적으로 TODOLINK 거스너(Gerstner) 웨이브 시뮬레이션 모델을 사용하는 모델이 이미 제공되고 있습니다.
워터 바디를 사용할 때마다 워터 웨이브 에셋을 새로 생성할 필요는 없지만, 시뮬레이션 모델의 각각 다른 웨이브 입력 유형이 서로 다르게 행동하기를 원하거나 완전히 다른 웨이브 시뮬레이션 모델을 사용하고 싶을 때도 있습니다.
그럴 때는 콘텐츠 브라우저(Content Browser)에서 추가/임포트(Add/Import) 를 클릭하거나 우클릭 컨텍스트 메뉴 를 사용하면 자체적인 워터 웨이브 에셋을 생성할 수 있습니다. 메뉴에서 물(Water) > 워터 웨이브(Water Waves) 를 선택합니다.
선택한 워터 바디(Water Body) 에서 워터 웨이브 에셋 할당 슬롯을 사용하여 이 에셋을 적용합니다.
전체 크기로 보려면 이미지를 클릭하세요.
전체 크기로 보려면 이미지를 클릭하세요.
전체 크기로 보려면 이미지를 클릭하세요.
워터 웨이브 에셋 편집하기
기존 워터 웨이브 에셋을 열거나 새로 생성할 때 여러 개의 시뮬레이션 모델 중에서 선택할 수 있는 경우 원하는 웨이브 시뮬레이션 유형을 선택할 수 있습니다. 모든 편집가능 프로퍼티가 패널에 채워지며 해당 프로퍼티로 시뮬레이션을 환경설정할 수 있습니다.
전체 크기로 보려면 이미지를 클릭하세요.
거스너 워터 웨이브 시뮬레이션 모델을 사용하는 워터 웨이브 에셋 에디터
웨이브 소스(Waves Source) 는 워터 바디에 파도를 생성하는 데 사용할 웨이브 시뮬레이션 모델을 지정합니다. 모델을 선택하면 선택한 웨이브 소스 파일을 통해 노출되는 파라미터가 제공되며 이를 이용해 웨이브 시뮬레이션을 제어할 수 있습니다. 예를 들어, 거스너 워터 웨이브(Gerstner Water Waves) 소스는 거스너 웨이브 제너레이터(Gerstner Wave Generator) 아래에 파라미터를 제공합니다.
이러한 파라미터를 환경설정하여 레벨에 배치된 워터 바디 중에 이 워터 웨이브 에셋이 할당된 워터 바디의 웨이브 시뮬레이션 모양을 정의할 수 있습니다.
언리얼 엔진에서는 거스너 웨이브 시뮬레이션 모델만 제공합니다. 하지만 블루프린트나 C++ 코드를 지정된 입력에 따라 파도를 출력하는 함수로 사용하면 다른 모델이나 자체적인 모델을 구현할 수 있습니다. 더 자세한 내용은 이 페이지의 자체적인 시뮬레이션 모델 추가하기 및 웨이브 제너레이터 섹션을 확인하세요.
거스너 워터 웨이브 프로퍼티
거스너 워터 웨이브 시뮬레이션 모델은 다음과 같은 웨이브 시뮬레이션용 파라미터를 제공합니다.
전체 크기로 보려면 이미지를 클릭하세요.
프로퍼티 | 설명 |
---|---|
기본(Default) | |
파도 수(Num Waves) | 합산된 파도 수입니다. |
시드(Seed) | 웨이브 모델에 공급할 랜덤 값을 생성하는 결정론적 시작점입니다. |
무작위성(Randomness) | 거스너 워터 웨이브 모델에서 사용되는 최소 파장, 최대 파장, 진폭 값 사이의 보간에 무작위성을 더합니다. |
파장(Wavelengths) | |
최소 파장(Min Wavelength) | 지정된 감쇠가 있는 파도 사이 파장 범위의 하한을 지정합니다. |
최대 파장(Max Wavelength) | 지정된 감쇠가 있는 파도 사이 파장 범위의 상한을 지정합니다. |
파장 감쇠(Wavelength Falloff) | 최소 파장과 최대 파장을 사용하여 연속되는 파도에서 물결마루 사이의 거리를 결정합니다. |
진폭(Amplitude) | |
최소 진폭(Min Amplitude) | 생성된 모든 파도 진폭의 하한을 지정 감쇠로 지정합니다. |
최대 진폭(Max Amplitude) | 생성된 모든 파도 진폭의 상한을 지정 감쇠로 지정합니다. |
진폭 감쇠(Amplitude Falloff) | 최소 진폭과 최대 진폭을 사용하여 생성된 파도의 높이를 결정합니다. |
방향(Directions) | |
주요 바람 각도(Dominant Wind Angle) | 바람이 불어오는 기본 방향을 설정합니다. |
주요 확산 각도(Dominant Angular Spread) | 바람이 불도록 지정된 각도 내에서 임의의 풍향을 설정합니다. 여기서 설정한 방향으로 파도가 이동하는 것처럼 보이게 됩니다. |
경사도(Steepness) | |
작은 파도 경사도(Small Wave Steepness) | 작은 파도의 경사도를 지정 감쇠로 지정합니다. 경사도는 물결마루의 뾰족한 정도를 결정합니다. 이 경사도는 측면 운동을 통해 이뤄지며 파도가 좌우로 움직이는 정도를 제어합니다. |
큰 물결 경사도(Large Wave Steepness) | 큰 물결의 경사도를 지정 감쇠로 지정합니다. 경사도는 물결마루의 뾰족한 정도를 결정합니다. 이 경사도는 측면 운동을 통해 이뤄지며 파도가 좌우로 움직이는 정도를 제어합니다. |
경사도 감쇠(Steepness Falloff) | 작은 물결 경사도 값과 큰 물결 경사도 값을 사용하여 물결마루가 도달하는 높이 범위를 결정합니다. |
워터 시스템에서 메시의 표면 디테일을 렌더링하는 시스템은 매크로 동작 패턴과 물결의 모양을 정의하는 데 가장 적합합니다. 미세 디테일은 메시의 테셀레이션이 퀄리티와 퍼포먼스의 균형으로 제한되는 노멀 맵을 가진 물 머티리얼을 사용하여 처리하는 것이 가장 좋습니다.
이어지는 데모에서는 워터 웨이브 에셋만 사용하여 달성할 수 있는 거시적 수준의 디테일을 시연하기 위해 머티리얼 기반 디테일을 비활성화했습니다.
파도 수 및 무작위성 설정하기
기본 파라미터 카테고리는 호수와 바다 워터 바디의 전반적인 모습을 정의합니다.
파도 수 파라미터는 파도의 수를 지정합니다. 생겨난 파도들의 전반적인 모습을 만듭니다. 기본적으로 사용되는 파도는 16개입니다. 파도 수가 적을수록 퍼포먼스는 향상되지만 파도 충돌의 랜덤 변형이 덜해집니다.
시드 파라미터는 랜덤 값에 대한 결정론적 시작점을 생성하며, 이 시작점은 웨이브 시뮬레이션 알고리즘에 전달되어 파도와 함께 각종 변형을 이뤄냅니다. 무작위 파라미터는 최소 파장과 최대 파장 그리고 진폭 값에 랜덤 값을 공급하여 웨이브 시뮬레이션의 반복 패턴을 줄입니다.
웨이브 시뮬레이션의 파장
파장 파라미터는 감쇠 값이 사용되었을 때 파도 간 거리에 대한 최솟값 및 최댓값 범위를 지정합니다. 시드와 무작위성 값은 파장 최솟값 및 최댓값 범위와 함께 작동하면서 수면의 모습을 추가로 정의합니다.
웨이브 시뮬레이션의 진폭
진폭 파라미터는 파도 간 높이 변위량의 최솟값 및 최댓값 범위를 지정합니다. 이 파라미터는 물결마루의 봉우리와 계곡을 제어합니다. 시드와 무작위성 값은 진폭 최솟값 및 최댓값 범위와 함께 작동하면서 수면의 모습을 추가로 정의합니다.
풍향 및 확산 각도
방향 파라미터는 바람이 이동하는 방향을 지정합니다. 주요 바람 각도 를 사용하면 바람이 일반적인 풍향으로 파도를 밀어냅니다. 주요 확산 각도 는 주요 바람 각도의 설정 방향으로 이동하는 동안 파도가 이동할 이차적인 각도를 지정합니다.
웨이브 시뮬레이션의 경사도
경사도 파라미터는 물결마루가 뾰족하거나 둥근 정도를 정의합니다. 경사도는 측면 운동을 통해 이뤄지며 파도가 좌우로 움직이는 정도를 제어합니다.
경사도 값이 작을수록 더 부드럽고 둥근 물결마루가 됩니다. 경사도 값이 클수록 더 뾰족한 물결마루가 됩니다. 경사도 값은 물결마루에 무작위성을 부여해 모든 물결마루가 완전히 부드럽거나 날카롭지 않은 랜덤 웨이브 인터랙션을 제공합니다.
자체 시뮬레이션 모델 및 웨이브 제너레이터 추가하기
언리얼 엔진에서는 워터 시스템용 거스너 웨이브 시뮬레이션 모델을 제공합니다. 워터 시스템은 환경설정이 가능한 파라미터가 있는 워터 웨이브 에셋을 통해 C++ 또는 블루프린트를 통해 수행될 수 있는 추가 워터 웨이브 시뮬레이션 모델을 지원할 수 있습니다.
이 섹션의 정보는 표면 물결을 평가하는 자체적인 웨이브 제너레이터 백엔드를 생성하는 실례로 거스너 웨이브 구현을 사용합니다.
C++의 경우 UGerstnerWaterWaveGeneratorBase
에서 파생되고 GenerateGerstnerWaves_Implementation(TArray<FGerstnerWave>&OutWaves) const
를 사용하는 새 유형을 생성하는 작업부터 시작합니다.
블루프린트의 경우 GerstnerWaterWaveGeneratorBase 클래스에서 부모 클래스를 상속받습니다.
전체 크기로 보려면 이미지를 클릭하세요.
전체 크기로 보려면 이미지를 클릭하세요.
전체 크기로 보려면 이미지를 클릭하세요.
블루프린트에서는 오버라이드 후 Make GerstnerWave 및 Make GerstnerWaveOctave 노드를 사용하여 정보를 저장하는 배열로 출력하는 자체적인 거스너 웨이브 생성 기능을 추가하세요.
전체 크기로 보려면 이미지를 클릭하세요.
전체 크기로 보려면 이미지를 클릭하세요.
워터 웨이브 에셋에서 거스너 웨이브 제너레이터 선택 드롭다운에는 거스너 웨이브 소스에서 상속된 모든 클래스가 나열됩니다.
전체 크기로 보려면 이미지를 클릭하세요.