디스턴스 필드 소프트 섀도

메시 디스턴스 필드를 사용하여 부드러운 동적 영역 그림자를 만드는 법 개요입니다.

Windows
MacOS
Linux

무버블 광원에서의 그림자를 제공하는 방법은, 각 리지드 메시에 대해 오브젝트 디스턴스 필드를 사용하여 동적 광원에서 나오는 영역 그림자를 효율적으로 계산합니다. 언리얼 엔진 4 (UE4) 에서 이를 일컬어 Distance Field Shadows (디스턴스 필드 섀도, DFS) 라 합니다. 그림자 계산을 위해 그림자를 받을 점에서 각 라이트 방향 씬의 Signed Distance Fields (부호화 디스턴스 필드, SDF)를 통해 레이 트레이싱을 합니다. 차폐된 오브젝트까지 가장 가까운 거리를 사용하여 레이 트레이싱과 거의 같은 비용으로 콘 트레이싱을 추정합니다. 이렇게 하면 구면 광원 모양에서 높은 퀄리티의 영역 그림자를 얻을 수 있습니다.

씬 구성

이 기능은 프로젝트 세팅Rendering (렌더링) 섹션의 Generate Mesh Distance Fields (메시 디스턴스 필드 생성) 옵션을 켜야 합니다. 자세한 정보는 메시 디스턴스 필드 문서를 참고하세요.

디스턴스 필드 섀도를 켜려면, 라이트 를 끌어 씬에 놓고 모빌리티를 무버블 로 설정한 뒤 라이트 디테일 패널에서 Distance Field Shadows (디스턴스 필드 섀도) 옵션을 켜면 됩니다.

DirectionalLightDFSettings1.png

단계별 안내서는 디스턴스 필드 소프트 섀도 사용법 문서를 참고하세요.

영역 그림자 세팅

각 라이트 유형은 디스턴스 필드 섀도를 사용하여 부드러운 영역 그림자를 만들 수 있습니다. 이 그림자는 바닥 가까이 접한 그림자는 선명하게 유지하다 멀어질 수록 연하게 만드는 식으로 현실의 그림자를 흉내냅니다.

Traditional Shadow Map

Distance Field Shadow

라이트 소스 세팅 관련 자세한 정보와 예제는, 메시 디스턴스 필드 세팅 레퍼런스 문서를 참고하세요.

포인트 및 스포트 라이트 소스 반경

포인트 및 스포트 라이트의 경우, Source Radius (소스 반경)을 사용하여 라이트의 그림자 반그늘 크기를 결정합니다. 영역 그림자는 접점에서 선명했다가 긴 거리에 걸쳐 늘어지며 부드러워 지도록 계산합니다. 포인트 및 스포트 라이트에서는, 노랑 구체로 표현됩니다.

LightSourceVis.jpg

에디터에서 라이트의 소스 모양을 노랑 선으로 그립니다.

라이티의 소스 반경 구체는 씬과 교차되지 않아야 하며, 그렇지 않으면 라이팅 부작용이 생깁니다.

Source Radius: | 0

Source Radius: | 50

포인트 라이트에서 나온 디스턴스 필드 섀도에 소스 반경을 사용하여 출입구, 벤치, 피아노가 주변 지오메트리에 드리우는 그림자를 부드럽게 하고 있습니다.

씬을 이동하는 포인트 라이트가 각각의 메시에서 영역 그림자를 드리우는 데모입니다.

포인트 및 스포트 라이트 세팅 관련 자세한 정보는 메시 디스턴스 필드 세팅 레퍼런스 문서를 참고하세요.

디렉셔널 라이트 소스 앵글

디렉셔널 라이트의 경우, Light Source Angle (라이트 소스 앵글)을 사용하여 라이트의 그림자 반그늘 크기를 결정합니다. 디스턴스 필드 섀도에는 자체적으로 교차되는 문제가 매우 적어 전통적인 섀도 매핑 방식에서 생기는 원거리의 누수나 과편향 문제를 피할 수 있습니다.

Light Source Angle: | 1

Light Source Angle: | 3

디렉셔널 라이트에서의 디스턴스 필드 섀도에 라이트 소스 앵글을 조정하여 부드러운 그림자를 얻었습니다.

대부분의 경우, 캐스케이드 섀도 맵(CSM)을 사용하여 디렉셔널 라이트의 다이내믹 섀도를 처리합니다. 그러기 위해서는 씬의 메시를 다수의 캐스케이드 섀도 맵(, 그림자용 레벨 오브 디테일) 속에 렌더링해야 합니다. 섀도잉 비용은 그림자 거리가 클 수록 늘어나는데, 섀도 맵 속에 렌더링되는 트라이앵글과 메시 수가 늘어나기 때문입니다.

디스턴스 필드 섀도는 원거리의 경우 보이는 픽셀에 대해서만 그림자를 그리면 훨씬 좋습니다. 캐스케이드 섀도 맵은 카메라 근처 영역의 그림자에 사용하고, RTDF 섀도는 설정된 Distance Field Shadow Distance (디스턴스 필드 섀도 거리)까지의 그림자에 사용하면 됩니다.

캐스케이드 섀도 맵만

캐스케이드 섀도 맵 & 디스턴스 필드 섀도

디스턴스 필드 섀도를 켜면, Cascaded Shadow Map Distance 에 설정된 값 이상에 대한 섀도잉은 디스턴스 필드를 사용합니다. CSM 과 RTDF 섀도잉을 둘 다 사용한 비교에서, CSM 섀도는 1,000 CM (센티미터)로 설정되어, 디테일이 많은 카메라 근처에는 선명한 그림자가 나옵니다. 1,000 CM 이후에는 RTDF 섀도잉이 사용되어, 1.2 KM (킬로미터) 까지의 오브젝트 그림자를 담당합니다. 이렇게 하면 CSM 의 경우 너무 비쌌을 원거리의 나무에도 그림자를 드리울 수 있습니다.

디렉셔널 라이트가 있는 씬에서 디스턴스 필드 섀도잉을 사용하여 하루 중 시간 변화를 나타낸 데모입니다.

디렉셔널 라이트 세팅 관련 자세한 정보는 메시 디스턴스 필드 세팅 레퍼런스 문서를 참고하세요.

씬 표현

생성하는 각 레벨은 배치한 액터의 모든 메시 디스턴스 필드로 구성됩니다. 메시 디스턴스 필드를 생성할 때, 결과를 볼륨 텍스처에 저장하는 트라이앵글 레이트레이싱을 사용하여 "오프라인" 생성합니다. 그때문에 디스턴스 필드는 실행시간에 생성할 수 없습니다. 이 메서드는 모든 방향의 부호화 디스턴스 필드 광선을 계산하여 가장 가까운 표면을 찾아 그 정보를 저장합니다.

뷰포트에서 표시 > 시각화 > Mesh Distance Fields (메시 디스턴스 필드)를 사용하여 씬을 표현하는 메시 디스턴스 필드 시각화를 볼 수 있습니다.

시각화 활성화 메뉴

메시 디스턴스 필드 시각화

이미지를 클릭하면 원본을 확인합니다.

회색보다는 흰색에 가까운 영역이 보이면, 메시 표면의 교차를 찾아내는 데 몇 단계가 더 필요하다는 뜻입니다. 표면 지표각에 가까운 광선은 교차를 알아내는 데 단순한 메시보다 여러 단계가 더 필요했습니다.

메시 디스턴스 필드 퀄리티

디스턴스 필드 섀도 충실도는 그림자 정확도에 큰 영향을 미치는데, 디스턴스 필드 앰비언트 오클루전 보다 더합니다. 메시 디스턴스 필드 해상도를 늘리면 스태틱 메시가 드리우는 그림자가 향상됩니다. 메시 디스턴스 필드 시각화를 통해 퀄리티를 조사해 보세요.

Distance Field Resolution: | 1

Distance Field Resolution: | 5

Distance Field Resolution: | 1

Distance Field Resolution: | 5

디스턴스 필드 섀도잉 포함 씬 뷰

메시 디스턴스 필드 시각화

메시 디스턴스 필드에 대한 그림자는 깊이를 인지하는 업샘플링과 함께 절반 해상도로 계산됩니다. 템포럴 안티 에일리어싱 (TAA) 는 절반 해상도로 인해 발생할 수 있는 깜빡임을 줄이는 데 큰 도움이 되지만, 가끔씩 각진 선분이 나오기는 합니다.

메시 디스턴스 필드 퀄리티 관련 자세한 정보는 메시 디스턴스 필드 문서를 참고하세요.

퍼포먼스

풀 게임 씬을 1920x1080 해상도로 Radeon 7870 에서 돌린 GPU 시간은 다음과 같습니다:

테스트

캐스케이드/큐브맵 섀도 맵 비용 (ms)

디스턴스 필드 섀도 비용 (ms)

빠른 정도 (%)

디렉셔널 라이트에 거리 10k 유닛, 캐스케이드 섀도 맵 3 개

3.1

2.3

25%

디렉셔널 라이트에 거리 30k 유닛, 캐스케이드 섀도 맵 6 개

4.9

2.8

43%

포인트 라이트 하나에 커다란 반경

1.8

1.3

30%

포인트 라이트 다섯에 작은 반경

3.2

1.8

45%

최적화

디스턴스 필드 섀도잉 최적화를 위해 할 수 있거나 고려해야 하는 몇 가지 사항입니다:

  • 디렉셔널 라이트에서, Light Source Angle 값이 클 수록 비용이 늘어나는데, 섀도잉이 적용되는 점마다 많은 수의 오브젝트를 고려해야 하기 때문입니다.

  • Distance Field Shadow Distance 값이 크면 컬링 효율이 떨어집니다.

  • (빌드 세팅 에서 켤 수 있는) Two-Sided Distance Field Generation (양면 디스턴스 필드 생성) 옵션을 켠 메시의 그림자는 완전히 불투명이 되지 않으므로 비용이 비싸질 것입니다.

언리얼 엔진 4.16 에서 켤 수 있는 최적화는 다음과 같습니다:

[REGION:lightbox]
[![](ProjectSettings.png)(w:500)](ProjectSettings.png)
[/REGION]
[REGION:caption]
클릭하면 이미지 원본을 확인합니다.
[/REGION]

*   **Compress Mesh Distance Fields** (메시 디스턴스 필드 압축)을 켜면 디스턴스 필드 볼륨 텍스처를 메모리에 압축 저장합니다. 메모리 사용량이 줄지만, 레벨 스트리밍을 사용하는 경우 이 레벨을 스트림 인 할 때 버벅임이 발생할 것입니다.

*   **Eight Bit Mesh Distance Fields** (8비트 메시 디스턴스 필드)를 켜면 디스턴스 필드 볼륨 텍스처를 기본 16비트 부동 소수점이 아닌 8비트 고정 소수점 포맷으로 저장합니다. 기존에 비해 메모리 사용량이 절반으로 줄지만 크거나 얇은 메시에 부작용이 생길 수 있습니다.
  • 글로벌 디스턴스 필드는 대부분 모빌리티가 스태틱 또는 스테이셔너리로 설정된 스태틱 프리미티브를 캐시에 담습니다. 글로벌 디스턴스 필드 전체는 거의 스태틱 캐시에서 상속받으므로, 무버블 프리미티브를 변경하면 근처의 다른 무버블 프리미티브만 글로벌 디스턴스 필드에 다시 합성해 넣으면 됩니다.

한계

디스턴스 필드 섀도잉은 메시 디스턴스 필드 기법의 일반적한 한계를 공유합니다. 이러한 한계 관련 자세한 정보는 메시 디스턴스 필드 문서를 참고하세요.

Select Skin
Light
Dark

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼