볼류메트릭 포그(Volumetric Fog) 는 익스포넨셜 하이트 포그(Exponential Height Fog) 컴포넌트의 옵션입니다. 볼류메트릭 포그는 카메라 프러스텀의 모든 지점에서 관여 매체의 밀도와 광도를 계산하여 안개에 영향을 미치는 다양한 밀도와 빛을 구현할 수 있습니다.
볼류메트릭 포그 컨트롤
볼류메트릭 포그를 설정하고 조정할 때 씬에서 전반적인 제어가 가능한 글로벌 컨트롤과, 국지적인 제어가 가능한 로컬 컨트롤이 있습니다. 글로벌 컨트롤은 익스포넨셜 하이트 포그 컴포넌트를 사용하여 전체 씬의 포그를 제어할 수 있도록 해줍니다. 로컬 컨트롤은 파티클 시스템 스폰이 가능한 영역에 파티클 시스템을 이용하는 방식으로 제어할 수 있습니다.
글로벌 컨트롤
볼류메트릭 포그 컨트롤은, 익스포넨셜 하이트 포그 와 각 라이트 의 프로퍼티를 조정하여 라이트 기여도를 제어할 수 있습니다.
익스포넨셜 하이트 포그
볼류메트릭 포그 컨트롤은 익스포넨셜 하이트 포그 컴포넌트의 볼류메트릭 포그 섹션에서 찾을 수 있습니다. 익스포넨셜 하이트 분포를 통해 볼류메트릭 포그의 전체 밀도를 확인할 수 있습니다.
프로퍼티 | 설명 |
---|---|
스캐터링 분포(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) 섹션의 다음 프로퍼티를 통해 가능합니다.
프로퍼티 | 설명 |
---|---|
Volumetric Scattering Intensity(볼류메트릭 스캐터링 강도) | 이 빛이 볼류메트릭 포그에 얼마나 영향을 미치는지 조절합니다. 0으로 설정하면 영향을 미치지 않습니다. |
볼류메트릭 섀도 드리우기(Cast Volumetric Shadow) | 볼류메트릭 포그에 영향을 미치는 빛에 볼류메트릭 섀도를 드리울지 토글합니다. 섀도 드리우기 옵션을 활성화한 경우 포인트/스포트 라이트는 볼륨 텍스처 섀도잉에 영향을 미치므로 비용이 약 세 배 비싸지는 한편, 섀도 드리우기 옵션을 비활성화한 경우 라이트는 안개에만 영향을 미칠 뿐 섀도를 드리우지 않습니다. |
이 예제에서는 볼류메트릭 스캐터링 강도(Volumetric Scattering Intensity) 를 0으로 설정하여 스포트 라이트가 볼류메트릭 포그에 영향을 미치지 못하도록 하고 있습니다.
로컬 컨트롤
볼륨(Volume) 영역을 사용하는 머티리얼은 공간의 한 점에서 알베도, 이미시브(발광), 익스팅션(소멸)을 나타냅니다. 알베도 범위는 [0-1]인 한편, 이미시브와 익스팅션은 0보다 큰 값으로 월드 스페이스 밀도를 나타냅니다.
현재 볼륨 머티리얼은 파티클에서만 작동하며 파티클 반경 내의 위치만 유효한데, 보통 SphereMask로 처리됩니다.
이 머티리얼을 가진 파티클 시스템을 하나 배치하면 볼류메트릭 포그에 밀도 스피어가 추가됩니다. 빌보드 없이도 완벽한 삼차원(3D) 효과를 냅니다.
이 접근법에서 한 단계 더 나아가, 텍스처에서 노이즈를 받는 스페리컬 포그 파티클을 여러 개 사용하는 방법으로 씬의 특정 영역에 안개를 제한할 수 있습니다.
이 씬에서는 포그 파티클이 낮게 깔린 지역을 채워 국지적인 안개 효과를 연출하고 있으며, 볼류메트릭 포그를 사용하여 섀도를 드리우고 있습니다.
템포럴 리프로젝션
볼류메트릭 포그에 사용되는 볼륨 텍스처(복셀)는 비교적 저해상도이며 카메라 프러스텀에 정렬됩니다. 볼류메트릭 포그는 프레임마다 서브복셀 떨림 현상이 다른 무거운 템포럴 리프로젝션 필터를 사용하여 에일리어싱을 완화합니다. 부가 효과로 손전등이나 총구 섬광처럼 빠르게 변하는 라이트에 자취가 남게 됩니다. 볼류메트릭 스캐터링 강도(Volumetric Scattering Intensity) 를 0으로 설정하면 이러한 라이트가 영향을 미치지 않습니다.
볼류메트릭 포그에서 프리컴퓨티드 라이팅
볼류메트릭 라이트맵은 각 포그 복셀마다 공간 내 그 위치에 프리컴퓨티드 라이팅을 보간하여 볼류메트릭 포그에도 스태틱 라이팅 적용을 지원합니다.
스테이셔너리 라이트는 그 간접광을 라이트맵에 저장하므로, 이제 포그에 영향을 줍니다.
스카이 라이트 섀도잉도 제대로 되어, 실내 영역의 포그가 과해지지 않습니다.
스태틱 라이트에 대한 스태틱 및 이미시브가 별도 비용 없이 포그에 영향을 줍니다. 모두 볼류메트릭 라이트맵에 병합되기 때문입니다.
퍼포먼스
볼류메트릭 포그의 GPU 비용은 엔진 퀄리티(Engine Scalability)의 섀도 레벨에서 설정되는 볼륨 텍스처 해상도에 의해 좌우되는 경우가 많습니다. 볼류메트릭 포그 비용은 PlayStation 4 에서 높음으로 설정한 경우 1밀리초, NVIDIA 970 GTX에서 에픽(Epic) 으로 설정한 경우 3밀리초인데, 연산 대상 복셀이 8배나 많은 것입니다.
- 볼륨(Volume) 영역을 사용하는 파티클은 그 3D 오버드로 및 인스트럭션 수에 따라 GPU 비용이 크게 추가될 수 있습니다. 이 비용을 조사하려면
profilegpu
명령을 사용하세요. - 포인트 및 스포트 라이트 중 볼류메트릭 섀도 드리우기(Cast Volumetric Shadow) 옵션이 활성화된 것은, 섀도를 드리우지 않는 것보다 비용이 약 세 배 더 듭니다.
현재 지원되는 기능
볼류메트릭 포그에 현재 지원되는 기능은 다음과 같습니다.
- 단일 디렉셔널 라이트 - 캐스케이드 섀도 맵에서의 섀도잉 또는 스태틱 섀도잉, 라이트 함수 포함
- 다수의 포인트 및 스포트 라이트 - 다이내믹 또는 스태틱 섀도잉 포함(볼류메트릭 섀도 드리우기(Cast Volumetric Shadow) 옵션이 활성화된 경우)
- 스테이셔너리 스카이 라이트의 섀도잉
- 볼류메트릭 라이트맵을 통한 프리컴퓨티드 라이팅(스태틱 라이트의 직접 라이팅, 스테이셔너리 라이트의 간접 라이팅)
- 단일 스카이 라이트 - 디스턴스 필드 앰비언트 오클루전(Distance Field Ambient Occlusion)에서의 섀도잉 포함(이 옵션이 활성화된 경우)
- 파티클 라이트(볼류메트릭 스캐터링 강도(Volumetric Scattering Intensity) 가 0보다 큰 경우)
볼류메트릭 포그는 씬에서 그 위치에 따라 반투명에도 제대로 영향을 줍니다. 기본적으로 반투명은 버텍스 위치의 안개를 계산하므로 테셀레이션이 낮은 물 표면에서는 부작용이 생길 수 있습니다. 이러한 머티리얼은 픽셀별로 안개를 계산하도록 설정하여 문제를 해결할 수 있는데, 머티리얼 디테일에서 픽셀별 포그 계산(Compute Fog Per-Pixel) 옵션을 활성화하면 됩니다.
알려진 문제점
볼류메트릭 포그에 아직 지원되지 않는 기능은 다음과 같습니다.
- 포인트 및 스포트 라이트상의 IES 프로파일 및 라이트 함수
- 레이 트레이스드 디스턴스 필드 섀도에서의 섀도잉
- 볼류메트릭 포그 자체에서의 섀도잉
- 포인트 및 스포트 라이트상의 소스 반경
- 익스포넨셜 하이트 포그의 일부 세팅 - 포그 컷오프 거리(Fog Cutoff Distance), 시작 거리(Start Distance), 포그 최대 오파시티(Fog Max Opacity) 등
잦은 질문
볼류메트릭 포그를 사용할 때 자주 발생할 수 있는 이슈 또는 질문은 다음과 같습니다.
- 글로벌 포그를 무겁게 하지 않고 강한 라이트 섀프트를 낼 수 있는 방법이 있나요?
- 안개 전체 밀도를 높이면 안개가 짙어지며, 전부 무겁게 깔릴 만큼 안개가 짙어야지만 라이트 섀프트(빛의 섀도)가 보이게 됩니다. 안개를 무겁게 하지 않고도 강한 라이트 섀프트를 만드는 두 가지 방법은 다음과 같습니다.
- 글로벌 포그 밀도는 낮게 유지하면서 디렉셔널 라이트의 볼류메트릭 스캐터링 강도(Volumetric Scattering Intensity) 를 높입니다. 또한 익스포넨셜 하이트 포그 액터의 스캐터링 분포(Scattering Distritbution) 를 0.9 정도로 조정합니다.
- 글로벌 포그 밀도는 낮게 유지하면서 특정 영역의 밀도만 볼륨 파티클로 높입니다.
- 안개 전체 밀도를 높이면 안개가 짙어지며, 전부 무겁게 깔릴 만큼 안개가 짙어야지만 라이트 섀프트(빛의 섀도)가 보이게 됩니다. 안개를 무겁게 하지 않고도 강한 라이트 섀프트를 만드는 두 가지 방법은 다음과 같습니다.
- 익스포넨셜 하이트 포그와 볼류메트릭 포그를 동시에 사용할 수 있나요?
- 현재 볼류메트릭 포그는 볼류메트릭 포그 뷰 디스턴스(View Distance) 내 포그 인스캐터링 컬러(Fog Inscattering Color) 를 대체합니다. 볼류메트릭 포그는 물리 기반이고 익스포넨셜 포그는 비물리 기반이므로 원거리에서 이 두 시스템을 혼합하여 정확히 일치시키는 것은 불가능합니다. 익스포넨셜 하이트 포그의 일부 세팅은 볼류메트릭 포그에 영향이 없을 것이라는 뜻이기도 합니다.
- 볼류메트릭 포그의 중심을 카메라와 분리할 수 있나요? 위에서 내려보는 방식의 게임에 적합할 것 같아서요.
- 현재는 불가능하지만 독립형 볼륨이 있으면 좋겠지요. 그렇다 해도 반투명과 효율적으로 통합하기는 힘듭니다.