볼류메트릭 포그

익스포넨셜 하이트 포그를 사용할 때 쓸 수 있는 Volumetric Fog, 볼류메트릭 포그 기능에 대한 개요입니다.

Windows
MacOS
Linux

언리얼 엔진 4.16 버전 이후 Volumetric Fog (볼류메트릭 포그)가 지원됩니다. 이 메서드는 카메라 프러스텀 내 모든 지점에서 (안개나 물과 같은) 빛 전파 관여 매체의 밀도와 라이팅을 계산하므로, 다양한 밀도의 포그가 지원되며, 라이트가 몇 개든 그 포그에 영향을 줄 수 있습니다.

VolumetricFog.png

이 씬에서 볼류메트릭 포그는 화면 밖 디렉셔널 라이트 소스에서 아치와 주변 영역을 통해 들어오면서 그늘진 안개 효과를 만들고 있습니다.

볼류메트릭 포그 컨트롤

볼류메트릭 포그를 셋업하고 조절할 때, 씬 전반적인 제어가 가능한 글로벌 컨트롤과, 국지적인 제어를 위한 로컬 컨트롤이 있습니다. 글로벌 컨트롤은 익스포멘셜 하이트 포그 컴포넌트를 사용하여 전체 씬의 포그를 제어할 수 있도록 해줍니다. 로컬 컨트롤은 파티클 시스템 스폰이 가능한 영역에 파티클 시스템을 이용하는 방식으로 제어할 수 있습니다.

글로벌 컨트롤

볼류메트릭 포그 컨트롤은, 익스포넨셜 하이트 포그 와 각 라이트 의 프로퍼티를 조절하여 그 라이트가 기여하는 양을 제어할 수 있습니다.

익스포넨셜 하이트 포그

볼류메트릭 포그 컨트롤은 Exponential Height Fog 컴포넌트의 Volumetric Fog 섹션 아래에서 찾을 수 있습니다. 익스포넨셜 하이트 분포는 볼류메트릭 포그의 전체 밀도 값을 줍니다.

VolumetricFogProperties.png

프로퍼티

설명

Scattering Distribution

산란 분포 - 볼류메트릭 스캐터(체적 산란) 방향성을 결정합니다. 0 이면 빛이 모든 방향으로 동등하게 퍼지는 반면, 1 에 가까울 수록 주로 라이트 방향쪽으로 산란이 일어납니다 (라이트를 바라보고 있어야 산란이 보입니다).

Albedo

알베도 - 빛 전파 관여 매체의 전체적인 반사성입니다. 구름, 안개 등은 물 입자를 기반으로 한 것이라, 알베도가 1 에 가깝습니다.

Extinction Scale

소멸 스케일 - 빛 전파 관여 매체가 빛을 차단하는 양을 조절합니다.

View Distance

가시 거리 - 카메라에서 이 거리까지 볼류메트릭 포그 계산을 합니다. 포그용으로 생성되는 볼륨 텍스처에는 이 거리에 따라 제한된 수의 Z 슬라이스가 생깁니다. 거리를 늘리면 언더 샘플링되어 부작용이 생길 수 있습니다. Z 슬라이스 수는 r.VolumetricFog.GridSizeZ 로 조정할 수 있는데, 수치가 클 수록 퀄리티는 좋아지지만 비용이 높아집니다.

Override Light Colors with Fog Inscattering Colors

포그 내부산란 색으로 라이트 색 덮어쓰기 - 켜면 Fog Inscattering Color, Directional Inscattering Color, Inscattering Texture 프로퍼티를 사용하여 볼류메트릭 포그의 라이트 색을 덮어씁니다.

라이트

각 라이트가 씬에 기여하는 정도(와 포그에 그림자를 드리울지 여부) 제어는 각 라이트의 디테일 패널에서 Light 섹션 아래 다음 프로퍼티를 통해 가능합니다.

VolumetricFogLightProperties.png

프로퍼티

설명

Volumetric Scattering Intensity

볼류메트릭 스캐터링 세기 - 이 라이트가 볼류메트릭 포그에 얼마만큼 기여하는지를 제어합니다. 0 이면 기여하지 않습니다.

Cast Volumetric Shadow

볼류메트릭 섀도우 드리우기 - 볼류메트릭 포그에 기여하는 라이트에 대해 볼류메트릭 섀도우를 드리울지 말지 결정합니다. 그림자 드리우기가 켜지면, 포인트 / 스포트 라이트는 볼륨 텍스처 섀도잉에 기여하기에 비용이 약 세 배 비싸지는 반면, 그림자를 드리우지 않는 라이트는 포그에만 기여할 뿐, 그림자를 드리우지는 않습니다.

Volumetric Scattering Intensity: 1 (Default)

Volumetric Scattering Intensity: 0

이 예제에서는, Volumetric Scattering Intensity 를 0 으로 설정하여 스포트 라이트가 볼류메트릭 포그에 기여하지 못하도록 하고 있습니다.

로컬 컨트롤

Volume 영역을 사용하는 머티리얼은 공간의 한 점에서 알베도, 이미시브(발광), 익스팅션(소멸)을 나타냅니다. 알베도 범위는 [0-1] 인 반면, 이미시브와 익스팅션은 0 보다 큰 값으로 월드 스페이스 밀도를 나타냅니다.

VolumetricFogParticleMaterial.png

파티클 시스템의 가당 간단한 볼륨 머티리얼 예제입니다.

볼륨 머티리얼은 현재 파티클에서만 작동하며 파티클 반경 내의 위치만 유효한데, 보통 SphereMask 로 처리됩니다.

이 머티리얼을 가진 파티클 시스템을 하나 배치하면 볼류메트릭 포그에 밀도 구체가 추가됩니다. 빌보드 없이도 완벽한 삼차원(3D) 효과를 냅니다.

VF_ParticleInGame.png

이 접근법에서 한 단계 더 나아가, 텍스처에서 노이즈를 받는 스페리컬 포그 파티클을 여러 개 사용하는 씩으로 씬의 특정 영역에 포그를 제한시킬 수 있습니다.

FogParticles.png

이 씬에서, 포그 파티클이 낮게 깔린 지역을 채워 국지적인 포그 이펙트를 만들고 있으며, 볼류메트릭 포그를 사용하여 그림자를 드리우고 있습니다.

템포럴 리프로젝션

볼류메트릭 포그에 사용되는 볼륨 텍스처(복셀)는 비교적 저해상도이며 카메라 프러스텀에 정렬됩니다. 볼류메트릭 포그는 프레임마다 서브 복셀 지터링이 각기 다른 무거운 템포럴 리프로젝션 필터를 사용하여 계단현상을 부드럽게 만듭니다. 부가 효과로 손전등이나 총구 섬광처럼 빠르게 변하는 라이트에 자취가 남게 됩니다. Volumetric Scattering Intensity 를 0 으로 설정하면 이러한 라이트 기여 부분을 끌 수 있습니다.

볼류메트릭 포그에서 프리컴퓨티드 라이팅

볼류메트릭 라이트맵은 각 포그 복셀마다 공간 내 그 위치에 프리컴퓨티드 라이팅을 보간하여 볼류메트릭 포그에도 스태틱 라이팅 적용을 지원합니다.

Spot Light with | No Indirect Light Bounce

Spot Light with | Indirect Light Bounce

스테이셔너리 라이트는 그 간접광을 라이트맵에 저장하므로, 이제 포그에 영향을 줍니다.

Sky Light with Emissive Color

Sky Light Volumetric Lightmap

스카이 라이트 섀도잉도 제대로 되어, 실내 영역의 포그가 과해지지 않습니다.

Indirect Lighting Cache: | Static and Emissive for Static Lighting | (Old Method)

Volumetric Lightmap: | Static and Emissive for Static Lighting | (New Method)

스태틱 라이트에 대한 스태틱 및 이미시브가 별도 비용 없이 포그에 영향을 줍니다. 모두 볼류메트릭 라이트맵에 병합되기 때문입니다.

퍼포먼스

볼류메트릭 포그의 GPU 비용은 엔진 퀄리티 의 섀도우 레벨에서 설정되는 볼륨 텍스처 해상도에 크게 좌우됩니다. 볼류메트릭 포그 비용은 PlayStation 4 에서 높음으로 설정한 경우 1 밀리초, Nvidia 970 GTX 에서 에픽 으로 설정한 경우 3 밀리초인데, 연산 대상 복셀이 8 배나 많은 것입니다.

  • Volume 영역을 사용하는 파티클은 그 3D 오버드로 및 인스트럭션 수에 따라 GPU 비용이 크게 추가될 수 있습니다. 이 비용을 조사하려면 profilegpu 명령을 사용하세요.

  • 포인트 및 스포트 라이트 중 Cast Volumetric Shadow (볼류메트릭 섀도우 드리우기) 옵션이 켜진 것은, 드리우지 않는 것보다 비용이 약 세 배 더 듭니다.

현재 지원되는 기능

볼류메트릭 포그에 현재 지원되는 기능 목록입니다:

  • 단일 디렉셔널 라이트, 캐스케이드 섀도우 맵 또는 스태틱 섀도우에 라이트 함수 포함.

  • 다수의 포인트 및 스포트 라이트에 (Cast Volumetric Shadowing 옵션이 켜진 경우) 다이내믹 또는 스태틱 섀도우 포함.

  • 스테이셔너리 스카이 라이트의 그림자.

  • 볼류메트릭 라이트맵을 통한 프리컴퓨티드 라이팅 (스태틱 라이트의 직접 라이팅, 스테이셔너리 라이트의 간접 라이팅).

  • 단일 스카이 라이트, 디스턴스 필드 앰비언트 오클루전(이 켜진 경우) 섀도우 포함.

  • 파티클 라이트 (Volumetric Scattering Intensity 값이 0 보다 큰 경우).

볼류메트릭 포그는 씬에서 그 위치에 따라 반투명에도 제대로 영향을 줍니다. 기본적으로 반투명은 버텍스 위치의 포그를 계산하므로, 테셀레이션이 낮은 물 표면에서는 부작용이 생길 수 있습니다. 이러한 머티리얼은 픽셀 단위로 포그 계산을 하도록 설정하여 문제를 해결할 수 있는데, 머티리얼 디테일에서 Compute Fog Per-Pixel 옵션을 켜면 됩니다.

알려진 문제점

볼류메트릭 포그에 아직 지원되지 않는 기능은 다음과 같습니다:

  • 포인트 및 스포트 라이트 상의 IES 프로파일 및 라이트 함수.

  • 레이 트레이스드 디스턴스 필드 섀도우에서의 그림자.

  • 볼류메트릭 포그( 자체)에서의 그림자.

  • 포인트 및 스포트 라이트 상의 소스 반경.

  • 익스포넨셜 하이트 포그의 일부 세팅: Fog Cutoff Distance, Start Distance, Fog Max Opacity.

잦은 질문

볼류메트릭 포그를 사용할 때 자주 발생할 수 있는 이슈 또는 질문은 다음과 같습니다.

  • 전체 포그를 무겁게 하지 않고 강한 라이트 섀프트를 낼 수 있는 방법이 있나요?

    • 포그 전체 밀도를 높이면 포그가 짙어지며, 전부 무겁게 깔릴 만큼 포그가 짙어야지만 라이트 섀프트(빛의 그림자)가 보이게 됩니다. 포그를 무겁게 하지 않고도 강한 라이트 섀프트를 만드는 방법은 두 가지 있습니다:

      1. 글로벌 포그 밀도는 낮게 유지하면서, 디렉셔널 라이트의 Volumetric Scattering Intensity (볼류메트릭 스캐터링 세기)를 높입니다. 또 익스포넨셜 하이트 포그 액터의 Scattering Distritbution (산란 분포)를 거의 0.9 정도로 조절합니다.

      2. 전체 포그 밀도는 낮게 유지하면서, 특정 영역만 볼륨 파티클로 높입니다.

  • 익스포넨셜 하이트 포그와 볼류메트릭 포그를 동시에 사용할 수 있나요?

    • 현재 볼류메트릭 포그는 볼류메트릭 포그 View Distance (가시 거리) 내 Fog Inscattering Color (포그 내부산란 색)을 대체합니다. 볼류메트릭 포그는 물리 기반이고 익스포넨셜 하이트 포그는 그렇지 않기 때문에 원거리의 그 두 시스템 색을 정확히 일치시키는 것은 불가능합니다. 익스포넨셜 하이트 포그의 일부 세팅은 볼류메트릭 포그에 영향이 없을 것이라는 뜻이기도 합니다.

  • 볼류메트릭 포그의 중심을 카메라와 분리시킬 수 있나요? 내려다 보는 게임에서는 좋을텐데...

    • 현재는 안됩니다만, 독립형 볼륨이 있으면 좋겠지요. 그렇다 해도 반투명과 효율적으로 통합시키기는 힘듭니다.

교육 자료

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

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

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

네이버 카페
공식 포럼