단일 레이어 물 셰이딩 모델

물리 기반 물 표면을 렌더링하는 데 사용되는 단일 레이어 물 머티리얼 셰이딩 모델의 개요입니다.

Choose your operating system:

Windows

macOS

Linux

추가 참고

단일 레이어 물(Single Layer Water) 머티리얼 셰이딩 모델은 단일 뎁스 레이어를 사용하여 비용 효율적인 반투명 메서드를 제공하는 머티리얼입니다. 물리 기반 셰이딩 모델로서 물 표면에 적절한 빛 산란, 흡수, 반사, 굴절, 그림자를 적용합니다.

단일 레이어 물 구현

단일 레이어 물 셰이딩 모델은 투명한 결과물을 만들기 위해 커스텀 렌더 패스를 사용하며, 불투명(Opaque) 또는 마스크드(Masked) 블렌드 모드를 사용합니다. 머티리얼의 반투명성은 기본 패스 및 디퍼드 라이팅 이후와 일반 반투명 렌더링, 포스트 프로세싱, 그리고 렌더링 파이프라인의 모든 과정 이전에 적용됩니다.

단일 레이어 물 셰이딩은 불투명 또는 마스크드 물 표면에 기인한 스캐터링 및 슐리크 페이즈 함수를 사용하는 관여 매체의 볼륨과 같습니다. 표면의 투명도는 볼륨 셰이딩 모델에서 묵시적입니다. 리프랙션 또한 볼륨 함수로 처리되며, 샘플을 왜곡하기 전에 표면 아래의 뎁스와 색을 읽습니다.

머티리얼 에디터의 Single Layer Water Material 노드에는 다음과 같은 네 가지 입력이 있습니다. 스캐터링 계수(Scattering Coefficients), 흡수 계수(Absorption Coefficients), 페이즈 G(PhaseG), 워터 아래 컬러 스케일(Color Scale Behind Water). 이러한 입력은 물의 모습을 정의합니다. 물의 반투명성은 메인 머티리얼 노드의 오파시티(Opacity) 입력에 따라 처리되며, 오파시티 입력은 볼륨의 양방향 스캐터링 분포 함수(BSDF)와 표면의 양방향 반사 분포 함수(BRDF) 사이의 비율을 조절합니다.

RenderDoc을 사용하여 프레임 캡처를 수행하면 GPU 캡처 시 단일 레이어 물 패스가 어디에서 발생하는지 확인할 수 있습니다. 단일 레이어 물 패스가 발생했을 때 BasePass는 이미 렌더링되고 라이팅이 적용되어 있습니다. 완전히 라이팅이 적용된 씬과 뎁스는 단일 레이어 물 패스에 대한 입력으로 사용되며, 버퍼를 읽으면 불투명 또는 마스크드 머티리얼의 리프랙션과 반투명성 어떻게 달성했는지 알 수 있습니다.

slw_renderdocoutput.png

목록의 첫 번째 항목을 알아보기에 앞서, 리프랙션 해석을 위해 씬 컬러와 뎁스 버퍼를 다운샘플링하는 선택적 단계를 거칠 수 있습니다. 이는 렌더링의 속도를 올리지만, 수면 아래에 렌더링된 오브젝트가 살짝 흐릿하거나 해상도가 낮아 보이게 만들 수 있습니다.

  1. 단일 레이어 물이 있는 모든 오브젝트는 뎁스를 포함하여 사용자 정의 머티리얼을 사용하는 G 버퍼로 렌더링됩니다.

  2. G 버퍼의 머티리얼 ID에 따라 모든 단일 레이어 물을 타일 분류하기 위해 컴퓨트 셰이더가 실행됩니다.

  3. 생성된 스크린 타일은 별도의 버퍼를 실행하여 출력하는 간접 드로 스크린 스페이스 리플렉션(SSR) 패스에 사용됩니다.

  4. 생성된 스크린 타일은 수면 위에 컴포짓 리플렉션 캡처, 하늘, 새로 계산된 스크린 스페이스 리플렉션에 대한 간접 드로 풀 스크린 패스를 실행하는 데 다시 사용됩니다.

단일 레이어 물 저사양 시스템 및 모바일 지원

모바일, 저사양 데스크톱 같은 저사양 시스템 및 플랫폼의 경우, 퍼포먼스를 위해 단일 레이어 물의 일부 기능을 스킵하는 대안 렌더 패스를 사용합니다. 가장 간편한 대안은 머티리얼을 볼륨 통합이나 스크린 스페이스 리플렉션이 없는 단순한 반투명 머티리얼로 되돌리는 것입니다.

단일 레이어 물 머티리얼 출력 사용

머티리얼을 생성할 때는 디테일(Details) 패널에서 다음과 같이 설정합니다.

slw_materialsettings.png

  • 블렌드 모드: 불투명(Opaque) 또는 마스크드(Masked)

  • 셰이딩 모델: 단일 레이어 물(SingleLayerWater)

머티리얼 그래프에 단일 레이어 물 머티리얼(Single Layer Water Material) 출력 노드를 추가합니다. 이 출력 표현식은 빛 산란 및 흡수, 페이즈 G의 애니소트로픽 또는 아이소트로픽 방향성, 굴절 반사나 그림자 같은 수면 아래 표면에 대한 색 기여 등 물의 모습을 정의합니다.

slw_materialoutputexpression.png

스캐터링 계수

스캐터링 계수(Scattering Coefficients) 입력은 매체 내 파티클에 빛이 산란되는 속도를 나타내며 이 경우에 매체는 물입니다. 매체 내에서 발생하는 라이트 스캐터링의 양은 매체 내 오브젝트의 빛과 색의 모습을 결정합니다. 유리나 물병처럼 매체의 스캐터링 양이 적으면 매체가 맑아 보입니다. 빛이 매체에서 많이 산란되지 않으므로, 더 쉽게 통과합니다. 스캐터링 양이 많으면 빛이 더 산란되므로 매체를 통과하기 어려워집니다. 이에 따라 매체가 오렌지 주스나 우유처럼 더 탁하거나 불투명해 보입니다.

스캐터링 양은 빛이 매체를 통과하는 방식에 영향을 주며, 이는 오브젝트가 볼륨 내부에 있을 때의 모습에 직접적으로 영향을 줍니다. 예를 들어 매체 내에 빨간색, 초록색, 파란색의 세 큐브가 있고 머티리얼이 파란색 빛만 산란하도록 설정되어 있는 경우, 산란된 파란색 빛이 모든 큐브의 컬러에 영향을 주는 방식(왼쪽)과 산란이 없는 머티리얼(오른쪽)을 비교해 봅니다.

slw_material_bluelightscattering.png

slw_material_nolightscattering.png

매체 내 파란색 빛 산란

빛 산란 없음

이 콘셉트를 기본 물 머티리얼에 적용한 뒤, 일정량의 스캐터링이 적용되었을 때와 스캐터링이 전혀 없을 때를 비교해 봅니다. 스캐터링이 없을 때는 빛이 튕기거나 확산되지 않으므로, 빛이 산란되었을 때보다 깊은 곳에 있을 때도 큐브가 보입니다.

많은 양의 스캐터링을 사용하면 물이 탁하고 걸쭉해 보입니다. 빛이 매체에서 더 많이 산란될수록 깊은 곳에 있는 오브젝트를 보기가 더 어려워집니다. 아래 예시는 라이트 스캐터링 양이 적은 경우에서부터 매우 많은 경우 그리고 수면 아래 큐브가 전혀 안 보이는 수준까지 어떤 차이가 있는지를 나타냅니다.

슬라이더를 드래그하여 스캐터링 값이 올라감에 따라 스캐터링 결과가 달라지는 모습을 확인합니다. 0.5, 1, 2, 4, 8, 16, 32

흡수 계수

***흡수 계수(Absorption Coefficients) 입력은 빛이 물 또는 관여 매체의 볼륨을 얼마나 쉽게 관통하는지를 정의합니다. 컬러 채널(RGB) 또는 빛의 파장은 서로 다르게 물을 관통하며, 색마다 다른 결과를 낳습니다. 매체에 흡수된 빛은 통과 중에 색을 잃고 사라집니다. 매체를 통과하는 오브젝트의 흡수 계수가 높을수록, 색이 더 잘 사라집니다.

흡수 계수는 빛의 어떤 색이 매체에서 더 빨리 흡수되는 경향이 있는지 정의합니다. 계수가 낮으면 빛이 매체를 더 쉽게 전도하여 투명하게 보입니다. 계수가 높으면 빛이 매체를 통과할 때 더 빠르게 희석되어 덜 투명하게 보입니다.

아래 예시는 매체 안으로 멀리 이동하는 빨간색, 초록색, 파란색의 세 큐브를 나타냅니다. 이러한 1차 색상의 일반적인 흡수 계수(빨간색: 0.0033, 초록색: 0.0016, 파란색: 0.0011)를 사용할 때 각각의 색이 매체 속으로 깊이 이동하면서 어떻게 사라지는지 그 결과를 보여줍니다. 빨간색, 초록색, 파란색 순으로 사라집니다.

위와 동일한 값과 구성을 기본 물 머티리얼에 사용하면, 삼원색 큐브는 물속으로 깊이 이동하면서 색을 잃게 됩니다. 색은 동일한 순서로 사라집니다.

기본 물 머티리얼을 사용하면 흡수 계수 값이 반전됩니다. 큰 값은 작은 값보다 색이 더 빠르게 사라집니다. 볼륨을 통과하는 디스턴스 라이트는 상대 미터로 표현됩니다. 1을 머티리얼의 흡수 거리로 나눈 값이라는 뜻입니다.

사용된 디스턴스 구성은 이러한 모습입니다.

slw_absorptionmaterial.png

페이즈 G 함수

페이즈 G(PhaseG) 파라미터는 물속 빛 산란의 전반적인 앞뒤 방향을 제어합니다. 구체적으로 설명하자면, 이 파라미터는 태양의 방향에 상대적인 산란된 빛의 애니소트로픽 방향성을 제어합니다.

페이즈 G는 양수 또는 음수 값을 받습니다. 값이 양수면 빛이 태양을 향해 앞으로 산란되는 양을 늘리고, 음수면 태양과 멀어져 뒤로 산란되는 양을 늘립니다. 현재 뷰와 하늘의 태양 위치에 따라 물이 밝거나 어두워 보이는 효과를 줄 수 있습니다.

slw_phaseg_neg075.png

slw_phaseg_05.png

페이즈 G: -0.75

페이즈 G: 0.5

페이즈 G 값이 0이면 빛 방향성이 아이소트로픽입니다. 빛이 모든 방향으로 동일하게 산란된다는 뜻입니다.

페이즈 함수로 특히 물결이 일 때 물의 윤곽을 더 뚜렷하게 만들 수 있습니다. 굴절이 일어난 뒤 뷰 레이의 방향이 바뀌면서 물을 통해 산란되는 빛의 양에 베리에이션이 추가되기 때문입니다.

워터 아래 컬러 스케일

워터 아래 컬러 스케일(Color Scale Behind Water) 입력은 수면 아래에 있는 표면의 휘도를 크게 높입니다. 이 타입의 이펙트는 머티리얼 내에서 사용되어 굴절 반사 또는 그림자의 밝기에 영향을 줍니다.

아래 비교는 수면 아래 표면에서 굴절 반사가 얼마나 잘 보이는지 나타냅니다.

이는 물 머티리얼 위에서 보이는 머티리얼의 비주얼 이펙트일 뿐입니다. 수면 아래로 이동해도 물 뒤에 있는 표면의 밝기를 변경하지 않으며 이러한 표면에 실제로 굴절을 반사하거나 그림자를 투사하지 않습니다.

물 오파시티

단일 레이어 물을 사용하기 위한 머티리얼 구성을 할 때, 메인 머티리얼 노드의 오파시티(Opacity) 입력은 물의 가시 파라미터를 제어합니다. 오파시티 양은 물에 들어와 산란될 빛의 양을 제어합니다. 물속의 얼마나 깊은 곳까지 볼 수 있는지도 제어합니다. 오파시티 값이 클수록 불투명해지고, 빛이 표면을 관통하기 어려워집니다. 값이 낮으면 모든 빛이 표면을 통과하여 물속 깊은 곳까지 볼 수 있습니다.

값이 낮든, 없든 오파시티는 단일 레이어 물 머티리얼 출력 표현식의 다른 프로퍼티가 방해받지 않고 작동하게 합니다. 아래 표와 같이 물 머티리얼의 오파시티가 없을 때, 약간 있을 때, 최대 값일 때 빛이 물을 완전히 통과하거나, 약간 통과하거나, 통과하지 못하게 됩니다. 완전히 불투명한 머티리얼(오파시티: 1)은 빛이 물속에서 산란되지 못하므로 어둡게 보입니다.

slw_opacity_0.png

slw_opacity_05.png

slw_opacity_1.png

물 오파시티: 0

물 오파시티: 0.5

물 오파시티: 1

언리얼 엔진의 이전 버전을 위해 작성된 페이지입니다. 현재 언리얼 엔진 5 버전을 위해 업데이트되지 않았습니다.