워터 메싱 시스템 및 수면 렌더링

표면 메시와 머티리얼을 워터 렌더링에 사용하는 방법을 간략하게 살펴봅니다.

Choose your operating system:

Windows

macOS

Linux

워터(Water) 시스템은 편집가능 수면과 수면 머티리얼이라는 두 가지 핵심 엘리먼트로 구성됩니다. 이 두 엘리먼트는 프로젝트의 물이 오브젝트와 접촉했을 때 상호작용하고 작동하는 방식을 결정합니다. 물 머티리얼이 표면에 접촉한 오브젝트에 빛을 반사하고 굴절시키는 등의 단순한 인터랙션 또는 캐릭터가 물을 지나가면 수면에 잔물결이 일어나거나 오브젝트가 수면에 떠 있을 때 부력이 일어나는 등의 좀 더 복잡한 게임플레이 작용을 지원합니다.

수면 메시

워터 시스템에는 월드 내에서 물을 포함해야 하는 영역을 정의하는 자체 스플라인 기반 시스템이 있습니다. 이 시스템은 워터 존(Water Zone) 을 사용하여 레벨에 배치된 모든 워터 바디 액터(Water Body Actor) (강, 호수, 바다)에 적용할 프로퍼티를 설정합니다. 물 메시는 주로 렌더링되는 수면의 퀄리티와 디테일을 정의합니다.

전체 크기로 보려면 이미지를 클릭하세요.

씬에 워터 존을 배치하여 레벨에 워터 바디(Water Body) 유형의 표면을 생성해야 합니다. 워터 존 자체만으로는 표면을 렌더링하지 않습니다. 워터 바디는 스플라인을 사용하여 레벨 안에 강, 호수, 바다를 나타내는 영역을 정의합니다. 이 스플라인은 워터 존이 물 메시 타일을 그리고 렌더링할 위치를 정의합니다. 이 방식이 더 효율적인 이유는 현재 카메라 뷰 안에 보이는 표면 메시만 렌더링하기 때문입니다.

씬에 워터 존이 있는 경우, 워터 바디를 씬에 드래그 앤 드롭하여 수면을 나타내는 타일을 추가하거나 제거할 수 있습니다. 모든 워터 바디는 같은 메시로 수면을 렌더링하므로 워터 바디 간에 서로 원활하게 블렌딩할 수 있습니다. 블렌딩 예시는 아래 참조 영상을 확인하세요. 블랜딩을 통한 수면 유형의 전환은 강의 급류가 잔잔한 호수 또는 요동치는 바다로 흘러 들어가는 표현을 가능하게 만듭니다.

콘솔 명령 r.Water.WaterMesh.ShowWireframe 1 로 물 메시 와이어프레임 뷰를 활성화하면 서로 다른 워터 바디 간의 트랜지션이 어떻게 상호작용하여 매끄러운 표면을 생성하는지 확인할 수 있습니다.

r.Water.WaterMesh.ShowWireframe 0 으로 비활성화할 수 있습니다.

워터 존

워터 존 은 레벨에 배치된 개별 워터 바디의 타일을 구성하는 표면 메시의 퀄리티를 제어합니다. 개별 워터 바디에는 레벨에서의 크기에 대한 자체적인 제한도 있습니다. 또한, 바다 워터 바디(Ocean Water Body) 전용 옵션도 추가로 제공합니다.

전체 크기로 보려면 이미지를 클릭하세요.

위의 세팅은 고도로 테셀레이션된 대규모의 표면을 사용할 때 퍼포먼스에 상당한 영향을 줄 수 있습니다.

물 메시 레벨 오브 디테일 스케일 조절 및 테셀레이션

레벨 오브 디테일(Level of Detail, LOD) 또는 물 메시 타일의 처리 방법은 각 프레임마다 쿼드트리를 순회하고 최적화된 타일 세트를 생성하여 화면에 표시하는 것입니다. 그러면 이러한 타일은 각 레벨 오브 디테일에 병합되어 현재 카메라 뷰에 가장 가까운 위치에 더 많은 밀도를 적용합니다. 카메라 뷰에서 멀어질수록 중요도가 낮아져 더 적은 밀도를 적용합니다.

각 레벨 오브 디테일은 카메라 뷰 주위에 있는 거리 기반 동심원으로 구성되며, 레벨 오브 디테일이 낮을수록 카메라에서 더 멀고, 버텍스 수가 그 전 레벨의 절반만큼이 됩니다.

스태틱 메시와 같은 기존 레벨 오브 디테일 지오메트리에서는 지오메트리가 화면 크기에 따라 한 레벨에서 다른 레벨로 빠르게 전환됩니다. 이렇게 한 레벨이 다른 레벨로 바뀔 때 메시의 모습도 두드러지게 변할 수 있습니다. 물 시스템에서는 메시 타일로 수면을 표현하므로 레벨 오브 디테일이 전환되면서 다른 레벨 오브 디테일로 형태가 바뀝니다. 가령 4개의 쿼드가 더 낮은 레벨 오브 디테일로 전환되면서 1개의 쿼드로 바뀌고, 더 높은 레벨 오브 디테일로 전환되면서 16개의 쿼드로 바뀔 수 있습니다. 아래 예시를 참조하세요.

쿼드 그리드 모핑

쿼드 그리드 모핑 예시 씬

4x4 쿼드 그리드가 2x2 그리드로 바뀌었다가 다시 돌아오는 예시입니다.

포트나이트의 물 LOD 전환 예시입니다.

물 메시 액터는 레벨 오브 디테일의 크기와 메시 타일의 테셀레이션 양을 명시적으로 정의하는 컨트롤을 제공합니다. 이러한 각 프로퍼티는 서로 독립적으로 작동하지만, 전체적인 환경설정으로 퍼포먼스와 수면의 퀄리티 간에 적절한 균형을 잡아야 합니다.

각 동심원 레벨 오브 디테일의 크기 반경은 LODScale 프로퍼티로 제어합니다. 이 프로퍼티는 타일이 하위 레벨 오브 디테일로 전환되기 시작하는 카메라와의 거리를 설정합니다.

테셀레이션 인수(Tessellation Factor) 는 타일의 버텍스 수를 증가시켜 레벨에 배치된 모든 워터 바디의 메시 타일에 부여하기를 원하는 퀄리티 정도를 설정합니다. 호수와 바다 워터 바디는 테셀레이션 양이 많을수록 좋으며, 특히 파도의 파고가 높을 때 더 큰 혜택을 봅니다.

이러한 프로퍼티를 설정할 때 다음과 같은 사항에 대해 균형을 유지하는 것이 중요합니다.

  • 플레이어가 더 섬세한 디테일을 볼 수 있는 근거리는 고퀄리티

  • 플레이어에게 그렇게 중요하지 않은 원거리는 낮은 퀄리티

  • 테셀레이션 퀄리티의 퍼포먼스 비용

물 머티리얼은 미세 디테일을 가질 수 있는데 워터 시스템이 꼭 테셀레이션을 통해 처리하지 않아도 된다는 점을 기억해두세요.

다음 방식으로 물 타일 시각화를 활성화할 수 있습니다.

  • 레벨 뷰포트(Level Viewport)에서 브러시 와이어프레임(Brush Wireframe) 뷰 모드를 사용합니다. 씬에 지오메트리가 많지 않거나 물 메시만 보이는 경우에 가장 적합합니다.

  • 다음과 같은 콘솔 명령을 사용하여 물 메시를 와이어프레임으로 렌더링합니다:

    • r.Water.WaterMesh.ShowWireframe 1 은 모든 물 메시를 와이어프레임으로 표시합니다.

    • r.Water.WaterMesh.ShowWireframeAtBaseHeight 1 은 평평한 기본 높이 위치에 있는 모든 물 메시를 표시합니다.

물 메시 타일 크기, 규모 및 원거리

물 메시 액터는 레벨의 물 메시를 구성하는 개별 타일 크기를 정의하고 각 메시에 존재하는 타일 수를 정의하고, 하늘과 바다가 맞닿는 먼바다를 처리하는 옵션을 제공합니다.

전체 크기로 보려면 이미지를 클릭하세요.

타일 크기(Tile Size) 프로퍼티는 물 메시를 구성하는 개별 타일 크기를 설정합니다. 타일 크기는 기본 월드 유닛으로 측정됩니다. 타일 크기를 키우거나 줄이면 레벨의 물 메시를 구성하는 모든 타일 크기가 조정됩니다.

그래프 그리드 타일 크기

그래프 그리드 타일 크기 예시 1

그래프 그리드 타일 크기 예시 2

타일 크기 그리드 예시

물 메시 타일 크기: 2400(기본 크기)

물 메시 타일 크기: 1000

타일 규모(Extent in Tiles) 프로퍼티는 물 메시를 구성하는 개별 타일 수를 설정합니다. 물 메시의 중앙에서 XY축의 가장자리까지의 거리를 측정합니다.

그래프 그리드 타일 규모

그래프 그리드 타일 규모 예시 1

그래프 그리드 타일 규모 예시 2

타일 규모 그리드 예시

타일 규모: 64(기본 크기)

타일 규모: 32

원거리(Far Distance) 는 타일 규모 프로퍼티에서 사용하는 가장 먼 타일과 수평선 사이의 공간을 채우는 데 사용됩니다. 이는 로우 버텍스 물 메시를 추가하여 바다 워터 바디 타일이 무한히 확장되는 듯한 시각적 효과를 연출합니다.

그래프 원거리

그래프 원거리 예시

원거리 그리드 예시

원거리 물 메시 활성화됨

이 원거리 물 메시는 바다 워터 바디의 기본 높이 위치 바로 아래에 위치하므로 클리핑을 제한하며 눈에 띌 수 있는 모든 이음새를 방지합니다. 또한, 물 메시 액터의 원거리 머티리얼(Far Distance Material) 할당 슬롯에 적용되어야 할 별도의 머티리얼을 사용합니다. 이 머티리얼은 단순해도 됩니다. 그저 물 메시 타일을 매끄럽게 블렌딩할 수 있도록 색만 일치하면 됩니다.

원거리 메시 규모(Far Distance Mesh Extent) 프로퍼티를 사용하여 간소화된 메시의 확장 거리(월드 유닛)를 설정합니다.

바다 워터 바디를 사용한 아래의 예시 씬에서는 지표면 레벨에서 표시되는 워터 바디의 모습을 보여줍니다. 왼쪽 이미지에서는 워터 바디가 수평선까지 도달하지 못한 것처럼 보입니다. 물 메시 액터의 원거리 프로퍼티는 워터 바디와 원거리 메시 사이를 매끄럽게 처리하면서 틈을 채웁니다.

물 메시 액터 원거리: 비활성화됨

물 메시 액터 원거리: 활성화됨

대기 원근에서는 고도로 테셀레이션된 물 메시의 끝이 선명하게 보입니다. 색이 일치하는 원거리 메시를 사용하면, 쉽게 씬을 채우고 디테일한 물 메시와 매끄럽게 맞추면서 퍼포먼스에 미치는 영향을 줄일 수 있습니다.

물 메시 액터 원거리: 비활성화됨

물 메시 액터 원거리: 활성화됨

Water_FarMesh 라는 베이스 물 머티리얼 인스턴스의 간소화된 머티리얼 인스턴스는 콘텐츠 브라우저(Content Browser)의 Water Content/Materials/WaterSurface 폴더에 있습니다.

물 머티리얼 및 수중 포스트 프로세싱

물 시스템은 몇 가지 다른 유형의 머티리얼을 사용하여 수면 렌더링과 바다로 흘러드는 강과 같은 다른 워터 바디 유형으로 바뀌는 전환 렌더링을 처리합니다. 또한, 물 시스템은 포스트 프로세스 머티리얼을 사용하여 수면 아래의 모습을 정의합니다.

각 워터 바디에는 미리 구성된 기본 물 머티리얼을 오버라이드할 수 있는 일련의 머티리얼 할당 슬롯이 있습니다.

전체 크기로 보려면 이미지를 클릭하세요.

워터 바디 액터 머티리얼

강, 호수, 바다의 워터 바디는 모두 같은 베이스 머티리얼(Water_Material )을 사용합니다. 이 머티리얼에는 각 워터 바디 유형에 특정된 스위치와 파라미터 세트가 포함되어 있으므로 사용 중인 모든 유형의 물을 단일 소스 머티리얼로 구동할 수 있습니다. 강(River), 호수(Lake), 바다(Ocean)의 각 워터 바디 유형에 머티리얼 인스턴스가 생성되며 각 인스턴스는 스위치를 활성화하고 이 스위치는 해당 워터 바디 유형에 해당하는 사용 가능한 파라미터를 결정합니다. 이 워크플로를 통해 각 워터 바디 유형 머티리얼에서 일관된 모습과 디자인을 유지할 수 있습니다.

아래 이미지에서 float 값, RGBA 컬러, 머티리얼 경로를 활성화/비활성화하는 스위치의 파라미터 정의 방식을 확인할 수 있습니다. 파라미터는 자손 머티리얼 인스턴스를 통해 접근할 수 있으며, 부모 머티리얼의 파라미터를 오버라이드하여 머티리얼의 모습을 변경할 수 있습니다.

전체 크기로 보려면 이미지를 클릭하세요.

전체 크기로 보려면 이미지를 클릭하세요.

스위치 및 파라미터가 있는 베이스 머티리얼

오버라이드 스위치 및 파라미터를 사용하는 머티리얼 인스턴스

전체 크기로 보려면 이미지를 클릭하세요.

대부분의 머티리얼 파라미터는 호수, 바다, 강 머티리얼을 사용하는 워터 바디 유형들이 모두 비슷합니다. 그러나 한 가지 예외가 있는데 바로 강 머티리얼입니다. 강 머티리얼에는 속도, 흐름 제어, 밀도 등 다른 워터 바디 머티리얼에 없는 특정 파라미터가 있습니다. 하지만 강 워터 바디에는 바다나 호수 워터 바디에 있는 파도 파라미터가 없습니다.

콘텐츠 브라우저의 Water Content/Materials/WaterSurface 폴더에서 각 워터 바디 유형 머티리얼 인스턴스를 살펴볼 수 있습니다.

강 워터 바디 머티리얼 전환

강 워터 바디를 사용하면 물이 스플라인 경로를 따라 다른 곳으로 흐를 수 있으며 호수, 바다, 강 또는 그 어떤 조합이든 수원이 될 수 있습니다. 호수나 바다와 달리 강에는 물이 흐르는 일반적인 방향이 있습니다. 이 흐름은 호수에서 시작하여 바다나 다른 호수로 흐를 수 있으며 다른 강과 합류할 수도 있습니다.

강은 파도가 생성되는 호수나 바다와는 다르게 다른 프로퍼티 세트를 사용하기 때문에 트랜지션 머티리얼을 사용하여 강에서 호수로(River to Lake)강에서 바다로(River to Ocean) 의 전환을 매끄럽게 블렌딩해야 합니다. 강 워터 바디는 호수나 바다 워터 바디와 같은 타일 메시를 공유하므로 접촉하는 다른 워터 바디의 표면에 트랜지션 머티리얼이 순응할 수 있습니다.

트랜지션 머티리얼은 강 워터 바디 기본 머티리얼의 인스턴스입니다. 레벨에 있는 물이 일관된 모양을 유지하는 데 필요한 유일한 설정은 사용 중인 다른 호수, 바다, 강 워터 바디 머티리얼에 색을 수동으로 맞추는 것입니다.

아래의 간단한 예제 씬에서는 중앙에 호수 워터 바디가 있는 섬을 둘러싼 바다 워터 바디와 이 둘을 연결하는 강 워터 바디가 포함된 랜드매스를 사용했습니다. 전환 머티리얼은 호수에서 시작해 강으로 나아가 바다로 바뀌는 물의 흐름을 처리합니다. 일관성을 위해 각 워터 바디와 트랜지션 머티리얼의 색을 맞추었습니다.

워터 바디 강 트랜지션

수중 포스트 프로세싱

프로젝트에 따라서 물의 중요한 측면 중 하나는 수면 위에서 아래로 전환하는 것입니다. 워터 시스템은 이러한 전환 과정을 포스트 프로세싱을 사용하여 처리합니다.

각 워터 바디에는 수중 포스트 프로세스 머티리얼(Underwater Post Process Material) 이 할당되며, 이 머티리얼은 Post Process Material을 사용하여 수면을 통과하는 전환 과정을 담당합니다. 수중 포스트 프로세싱은 카메라가 주어진 워터 바디 바운드 내에 있고 수면 아래로 잠수하면 자동으로 발생합니다. 포스트 프로세스 머티리얼은 부분적으로 수중 뷰를 생성하기 위해 수중이 아닌 씬의 일부를 마스킹하여 물 안팎으로의 전환도 처리합니다.

전체 크기로 보려면 이미지를 클릭하세요.

각 워터 바디의 디테일(Details) 패널에는 액터에 특정한 세팅이 있으며, 디테일 패널에서 포스트 프로세싱 세팅(Post Processing Settings) 을 이용하면 머티리얼 프로세스를 열고 수동으로 구성할 필요 없이 수중 모습을 추가로 조정할 수 있습니다.

전체 크기로 보려면 이미지를 클릭하세요.

최적화를 위해 수중 포스트 프로세싱은 카메라가 수면 아래나 수면보다 약간 위에 있을 때만 활성화됩니다. 이는 파도가 출렁일 때 카메라가 완전히 또는 일부 잠길 수 있는 호수와 바다의 특성을 고려한 것입니다. 수중 포스트 프로세스가 작동하려면 콜리전 생성(Generate Collision) 이 활성화되어 있어야 합니다.

또한, 워터 바디 타일 메시가 강 워터 바디의 전환 머티리얼을 사용하여 매끄럽게 블렌딩할 수 있습니다. 그렇지만 맑은 강에서 탁한 호수로 이동할 때처럼 두 워터 바디 간의 수중 포스트 프로세싱 모습이 크게 다른 경우 카메라가 두 포스트 프로세싱 볼륨 간을 이동할 때 급격한 전환이 일어납니다.

단일 레이어 워터 머티리얼 셰이딩 모델

단일 레이어 워터(Single Layer Water) 셰이딩 모델은 단일 뎁스 레이어를 사용하여 비용 효율적인 반투명 메서드로 렌더링하므로 모든 기본 물 머티리얼에 사용됩니다. 이는 물리 기반 셰이딩 모델로서 수면에 적절한 라이트 스캐터링, 흡수, 리플렉션, 리프랙션, 섀도잉을 지원합니다.

전체 크기로 보려면 이미지를 클릭하세요.

워터 바디에 할당된 모든 기본 물 머티리얼은 단일 레이어 워터 셰이딩 모델을 사용합니다. 어떤 셰이딩 모델이든 워터 바디에 사용할 수 있습니다.

셰이딩 모델에 대한 자세한 내용은 단일 레이어 워터 셰이딩 모델(Single Layer Water Shading Model)을 확인하세요.

자체 물 머티리얼 생성하기

워터 시스템에서 원활히 작동하는 자신만의 물 머티리얼을 생성할 수 있으니, 각 워터 바디에 할당된 기본 물 머티리얼만 사용할 필요는 없습니다.

고유 물 머티리얼을 세팅할 때는 다음에 유의하세요.

  • 워터 바디에서 지원하는 물 머티리얼은 어떤 유형의 셰이딩 모델이든 사용할 수 있습니다.

  • 머티리얼을 사용하려면 물과 사용됨(Used with Water)사용 플래그(Usage Flag) 가 활성화되어 있어야 합니다. 머티리얼이 다른 유형의 액터에 할당될 때마다, 이 플래그가 자동으로 활성화되고 머티리얼이 리컴파일됩니다. 그렇지 않고 머티리얼이 올바르게 렌더링되지 않으면 이 플래그가 활성화되어 있는지 확인하세요.

  • SingleLayerWater 셰이딩 모델은 기존 반투명 머티리얼보다 적은 비용으로 반투명 및 라이팅 결과를 제공합니다.