워터 시스템은 레벨 뷰포트에 디버깅 목적으로 관련 정보를 표시하고, 시각화를 제공하고, 프로젝트의 확장성 옵션을 설정하는 데 유용한 자체 명령을 포함합니다.
워터 레벨 통계
에디터에서 작업할 때 백틱 (`) 키로 콘솔(console) 을 열고 통계 명령 중 하나를 입력하여 현재 로드된 레벨의 워터 시스템에 대한 정보를 표시할 수 있습니다.
Stat Water
stat water 명령을 사용하여 현재 씬에 사용된 워터 관련 함수에 대한 CPU 통계 표시를 토글할 수 있습니다.
| 통계 이름 | 설명 |
|---|---|
| IsUnderwater Test | 함수의 비용입니다. 프레임당 몇 번 호출되며 비용은 얼마인지(최대/평균) 테스트합니다. 이 테스트 함수는 수중 포스트 프로세싱의 활성화 여부 탐지에 사용됩니다. |
| WaterBody_ComputeWaterInfo | 엔진 전체에서 워터 관련 정보를 계산하는 데 사용되는 함수의 비용입니다. 프레임 시간 체크에 유용합니다. 게임플레이 시스템, 피직스 또는 기타 시스템에서 많은 쿼리가 수행될 경우 프레임에 상당한 시간이 추가될 수 있기 때문입니다. |
| WaterBody_ComputeWaterDepth | WaterBody_ComputeWaterInfo 함수의 일부로 실행되어 물 깊이에 대한 데이터를 계산합니다. |
| WaterBody_ComputeWaveHeight | WaterBody_ComputeWaterInfo 함수의 일부로 실행되어 물 높이에 대한 데이터를 계산합니다. |
| WaterBody_ComputeLandscapeDepth | WaterBody_ComputeWaterInfo 함수의 일부로 실행되어 랜드스케이프 깊이에 대한 데이터를 계산합니다. |
WaterBody_ComputeWaterDepth, WaterBody_ComputeWaterHeight, WaterBody_ComputeLandscapeDepth 의 통계는 조치 가능한 정보를 제공하지 않습니다. 이것들은 각각 WaterBody_ComputeWaterInfo 통계의 일부이며 함수에서 대단히 비용이 높은 부분입니다. 그 대신 언리얼 인사이트를 사용하여 씬을 프로파일링하면 상황을 더 잘 파악할 수 있습니다.
Stat WaterMesh
stat watermesh 명령은 워터 메시 및 표면 렌더링에 대한 정보를 표시합니다. 이 디스플레이의 통계를 바탕으로 레벨에서 사용된 워터의 여러 부분에서 세팅과 할당을 조정하는 조치를 할 수 있습니다.
| 통계 이름 | 설명 |
|---|---|
| Vertices Drawn | 현재 뷰의 모든 워터 바디에 대해 그려진 버텍스 수를 표시합니다. |
| Tiles Drawn | 현재 워터 메시의 타일 크기, 타일 규모, 카메라와의 거리를 바탕으로 표시되는 타일의 총 수를 표시합니다. r.Water.WaterMesh.ShowTileBounds 1 과 함께 사용하면 메시가 어떻게 타일로 분할되고 이 통계와 연관되는지 파악할 수 있습니다. |
| Draw Calls | 이 프레임에서 물을 그리기 위한 드로 콜의 총 수입니다. 값을 낮추면 CPU 비용이 감소합니다. |
| Number of Drawn Materials | 이 프레임에 그려진 서로 다른 워터 머티리얼의 수입니다. 예를 들어 다양한 워터 바디를 여러 워터 머티리얼과 함께 사용 중인 경우 프레임별로 더 많은 머티리얼이 그려집니다. 반면에 모든 워터 바디가 동일한 머티리얼을 공유하면 더 적은 머티리얼이 그려지므로 프레임당 드로 콜이 줄어듭니다. |
디버깅 콘솔 명령
다음 콘솔 명령은 레벨에서 워터 시스템을 디버깅하는 데 유용합니다.
| 변수 이름 | 설명 | 디폴트값 |
|---|---|---|
r.Water.WaterMesh.ShowTileGenerationGeometry |
워터 그리드 교차 및 워터 메시 타일 생성에 사용되는 지오메트리를 표시합니다. | 0 |
r.Water.WaterMesh.ForceRebuildMeshPerFrame |
프레임마다 전체 워터 타일 메시를 강제로 리빌드합니다. | 0 |
r.Water.WaterMesh.Enabled |
워터 메시의 렌더링 여부를 설정합니다. 렌더링과 워터 메시 타일 생성에 영향을 미칩니다. | 0 |
r.Water.WaterMesh.ShowWireframeAtBaseHeight |
와이어프레임에서 렌더링 시 디스플레이스먼트 없이 워터 타일 메시를 표시합니다. | 0 |
r.Water.WaterMesh.EnableRendering |
씬 프록시 내의 모든 워터 렌더링을 꺼야 하는지 여부를 설정합니다. | 1 |
r.Water.WaterMesh.ShowLODLevels |
레벨의 0 높이에서 카메라 위치를 중심으로 하는 동심원으로 레벨 오브 디테일을 표시합니다. | 0 |
r.Water.WaterMesh.ShowTileBounds |
디폴트로 타일은 워터 바디 타입 또는 트랜지션 타입에 의해 다음과 같이 색 지정됩니다.
|
0 |
r.Water.WaterMesh.TileBoundsColor |
r.Water.ShowTileBounds 를 사용하여 시각화될 때 워터 메시 타일 바운드의 색을 설정합니다. 0으로 설정하면 색이 레벨 오브 디테일(LOD) 트랜지션을 나타냅니다. 1로 설정하면 색이 워터 바디 타입을 나타냅니다. |
1 |
r.Water.WaterMesh.ShowWireframe |
워터에 와이어프레임 렌더링을 강제합니다. | 0 |
r.Water.VisualizeActiveUnderwaterPostProcess |
1로 설정하면 현재 수중 포스트 프로세싱을 위해 선택되어 있는 워터 바디를 표시합니다. 2로 설정하면 카메라 위치에서 수행되는 워터 데이터 쿼리에 대한 추가 정보를 제공합니다. 이는 워터 데이터 쿼리 디버깅에 유용합니다. | 0 |
r.Water.OverrideWavesTime |
값이 0 이상인 경우 웨이브에 사용되는 시간을 강제합니다. | -1 |
r.Water.FreezeWaves |
웨이브의 동결 시간입니다. | 0 |
r.Water.OceanFallbackDepth |
쿼리 위치에서 터레인이 발견되지 않을 때 바다로 보고할 뎁스입니다. 0 이하로 설정하면 뎁스 값이 사용되지 않습니다. | 3000 |
r.Water.DebugBuoyancy |
워터 상호작용에 대한 디버그 드로잉을 활성화합니다. | 0 |
r.Water.WaterInfo.ForceUpdateWaterInfoNextFrames |
다음 N개 프레임에서 워터 정보 텍스처의 재생성을 강제합니다. 음수 값이면 모든 프레임에서 업데이트를 강제합니다. | 0 |
타일 바운드와 색
콘솔 명령 r.Water.WaterMesh.ShowTileBounds 1 을 사용하여 현재 레벨에서 사용되는 여러 타입의 물 메시 타일마다 색 지정된 박스를 표시합니다.
타일 바운드를 표시할 방법을 다음 중에서 선택합니다.
- 0 은 비활성화입니다.
- 1 은 워터 바디 타입별로 표시합니다.
- 2 는 레벨 오브 디테일별로 표시합니다.
- 3 은 밀도 인덱스별로 표시합니다.
워터 바디 및 트랜지션 타입별로 색 지정된 워터 타일 바운드를 보여주는 예시 씬입니다.
디폴트로 타일은 여러 워터 바디에서 워터 바디 타입 또는 트랜지션 타입에 의해 다음과 같이 색 지정됩니다.
- 빨간색: 강
- 녹색: 호수
- 파란색: 바다
- 노란색: 강에서 호수로 트랜지션
- 보라색: 강에서 바다로 트랜지션
활성 수중 포스트 프로세싱 시각화
콘솔 명령 r.Water.VisualizeActiveUnderwaterPostProcess 를 사용하여 레벨 뷰포트에서 현재 카메라에 의해 오버랩된 수중 포스트 프로세싱에 대한 정보를 표시할 수 있습니다.
1 로 설정하면 현재 사용되는 수중 포스트 프로세싱에 대한 기본 디버그 정보가 제공됩니다.
2 로 설정하면 카메라 위치에서 수행된 워터 데이터 쿼리에 대한 추가 정보가 표시됩니다.
엔진 퀄리티 콘솔 명령
다음 콘솔 명령은 레벨 및 프로젝트의 워터 시스템에 대한 엔진 퀄리티 옵션을 설정하는 데 유용합니다.
| 변수 이름 | 설명 | 디폴트값 |
|---|---|---|
r.Water.WaterMesh.LODCountBias |
각 워터 메시 컴포넌트의 LOD 수에 값을 추가합니다. 음수 값은 퀄리티를 낮추고(워터 메시의 밀도 감소) 높은 값은 퀄리티를 높입니다(워터 메시의 밀도 증가). | 0 |
r.Water.WaterMesh.TessFactorBias |
값을 각 워터 메시 컴포넌트의 테셀레이션 인수에 추가합니다. 음수 값은 전체 밀도(해상도) 또는 버텍스 그리드를 낮춥니다. 높은 값은 워터 메시 컴포넌트의 밀도(해상도)를 높입니다. | 0 |
r.Water.WaterMesh.LODMorphEnabled |
여러 레벨 오브 디테일 간의 트랜지션에 스무드 LOD 모핑을 사용할지 여부를 설정합니다. 비활성화하면 LOD 레벨 간에 튀는 현상이 발생할 수 있지만, 버텍스 셰이더 계산을 건너뛰므로 씬의 워터 비용이 감소합니다. | 1 |
r.Water.WaterMesh.LODScaleBias |
각 워터 메시 컴포넌트의 LOD 스케일에 값을 추가합니다. 값이 음수면 전체 밀도(해상도) 또는 버텍스 그리드가 감소하여 LOD가 더 작아집니다. 값이 높으면 밀도(해상도)가 증가하여 LOD가 더 커집니다. 허용되는 최솟값은 -0.5이며, 이 경우 내부 LOD가 가능한 한 작게 최적화됩니다. | 0 |
r.Water.WaterMesh.PreAllocStagingInstanceMemory |
스테이징 인스턴스 데이터 메모리를 과거 최대치에 따라 사전 할당합니다. 배열이 커져야 할 때 오버헤드를 줄이지만, 메모리를 더 많이 사용할 수 있습니다. | 0 |
r.Water.UseSplineKeyOptimization |
워터 바디에 대한 스플라인 입력 키를 캐싱할지 여부입니다. | 1 |
r.Water.EnableUnderwaterPostProcess |
수중 포스트 프로세싱의 활성화 여부를 제어합니다. 카메라가 수면 아래로 내려가지 않는 경우 비활성화해야 합니다. | 1 |
r.Water.EnableShallowWaterSimulation |
얕은 물에서의 플루이드 시뮬레이션 활성화 여부를 제어합니다. | 1 |
r.Water.ShallowWaterMaxDynamicForces |
워터 플루이드 시뮬레이션에 한 번에 등록되는 다이내믹 포스의 최대 수입니다. | 6 |
r.Water.ShallowWaterMaxImpulseForces |
워터 플루이드 시뮬레이션에 한 번에 등록되는 충격량 포스의 최대 수입니다. | 3 |
r.Water.ShallowWaterRenderTargetSize |
사각형 얕은 물 플루이드 시뮬레이션 렌더 타깃의 크기입니다. 유효한 치수는 크기 x 크기입니다. | 1024 |
r.RayTracing.Geometry.Water |
레이 트레이싱 이펙트에 물을 포함합니다. | 0 |
r.Water.WaterSplineResampleMaxDistance |
물 스플라인 셰이프를 폴리곤으로 변환할 때 샘플 세그먼트와 스플라인 간의 최대 거리입니다. 거리가 짧을수록 버텍스 수가 증가하고, 피직스 셰이프가 더 정확해지고, 워터 메시 타일이 더 밀접하게 일치하지만, 연산 비용도 증가합니다. | 50 |
워터 바디 스플라인 리샘플링 최대 거리
호수 워터 바디 컬리전 컴포넌트(와 워터 메시 타일 생성)의 기반은 스플라인 평가입니다. 호수와 바다의 워터 바디 스플라인은 둘 다 폴리곤으로 변환되는 프로세스를 거치고 어떤 워터 메시 타일을 커버하는지 확인하기 위해 프로세스됩니다. 폴리곤화는 샘플링된 스플라인 세그먼트가 원본 스플라인에서 너무 먼 경우 스플라인이 리샘플링되는 반복작업 프로세스입니다. 이는 커버처가 높은 섹션의 높은 포인트 수로 이어지며, 보다 직선인 섹션에서는 포인트 수가 줄어듭니다.
콘솔 변수 r.Water.WaterSplineResampleMaxDistance 를 사용하여 거리를 조정합니다. 디폴트는 50cm입니다. 값이 높으면 버텍스 수가 줄어들면서 호수 스플라인의 셰이프에 일치시킬 콜리전 컴포넌트가 적어집니다. 낮은 값을 사용하면 훨씬 많은 버텍스가 생성됩니다.
생성된 타일 지오메트리를 보려면 r.Water.WaterMesh.ShowTileGenerationGeometry 1 을 설정합니다.
| 최대 거리 50cm(디폴트)는 좋은 중간 지점입니다. | 최대 거리가 400cm면 버텍스가 적습니다. | 최대 거리가 10cm면 버텍스가 훨씬 많습니다. |
이미지를 확대하려면 클릭하세요.
포트나이트를 개발하며 물이 있는 대규모 월드를 사용해 본 경험을 바탕으로 말씀드리자면, 값 50은 대부분의 보통 크기 호수에서 올바른 근사치를 제공하는 좋은 중간값입니다. 거리를 너무 줄이면 피직스 셰이프가 충분히 일치하지 않아 워터 타일이 누락되는 문제가 발생할 수 있습니다.
이 콘솔 변수를 조정할 때는 워터 스플라인에서 뭔가를 수정하여(예: 스플라인 포인트를 살짝 이동) 결과를 확인해야 합니다.