본문 바로가기

환경 효과 (안개, 조명) 추가

높이 안개·스카이 어트모스피어·볼류메트릭 클라우드와 후처리를 조합해 거리감과 대기 분위기를 연출합니다.

기본 조명을 설정했다면 이제 공간에 공기의 층을 더할 차례입니다. 실제 풍경에서 멀리 있는 산이 뿌옇고 푸르게 보이는 것은 그 사이의 공기가 빛을 흩뜨리기 때문입니다. 게임에서도 안개와 대기 효과를 더하면 거리감이 생기고, 시야를 제한해 긴장감을 만들 수 있으며, 같은 레벨이 훨씬 깊고 사실적으로 보입니다. 반대로 지나치면 플레이어가 길을 못 찾고 성능도 떨어집니다.

이 글에서는 지수형 높이 안개(Exponential Height Fog), 스카이 어트모스피어(Sky Atmosphere), 볼류메트릭 클라우드(Volumetric Cloud)를 차례로 배치하고 주요 설정을 살펴봅니다. 그다음 이 효과들과 후처리 볼륨이 각각 무엇을 편집하는지 그림으로 나누고, 한 효과씩 조절하며 비교하는 방법을 익힙니다.


지수형 높이 안개

지수형 높이 안개는 언리얼 엔진에서 가장 흔히 쓰는 안개 효과입니다. 이름처럼 높이에 따라 밀도가 지수적으로 바뀌어, 낮은 곳에서는 짙고 높이 올라갈수록 옅어집니다. 멀리 볼수록 시야가 흐려지는 것은 카메라와 물체 사이에 안개를 더 많이 지나기 때문이지, 안개의 밀도 자체가 거리에 따라 지수적으로 늘기 때문이 아니라는 점을 구분해 둡니다.

안개 배치하기

툴바의 추가(Add) 버튼을 누르고 Visual Effects에서 Exponential Height Fog를 골라 레벨에 놓습니다. 아웃라이너에 ExponentialHeightFog라는 액터가 생긴 것을 확인합니다.

안개의 핵심 설정

ExponentialHeightFog 액터를 선택하고 디테일 패널의 Fog 항목을 봅니다. Fog Density는 안개 전체의 밀도로, 값이 클수록 안개가 짙어집니다. Fog Height Falloff는 높이가 올라갈 때 밀도가 얼마나 빨리 줄어드는지를 정하는데, 값이 클수록 안개가 땅 가까이에 모이고, 작을수록 위쪽까지 옅게 퍼집니다. Fog Max Opacity는 안개가 아무리 짙어져도 넘지 않을 최대 불투명도이고, Start Distance는 카메라에서 안개가 시작되는 거리로 이 거리 안쪽에는 안개가 보이지 않습니다. Fog Inscattering Color는 안개 자체의 색으로, 푸른색은 새벽 안개를, 주황색은 스모그를 표현할 수 있습니다.

안개 층의 높이는 액터의 Z 위치로 옮깁니다. 높이 분포의 기준이 액터의 높이이기 때문입니다. 서로 다른 높이에 안개 층을 하나 더 두고 싶다면 Second Fog Data의 Density, Falloff, Height Offset을 씁니다.

태양빛이 안개에 흩어지는 모습도 따로 정할 수 있습니다. Directional Inscattering Color는 디렉셔널 라이트의 빛이 안개에 흩어질 때의 색으로, 해를 바라볼 때 해 주변의 안개에 그 빛의 색조가 더해집니다. Directional Inscattering Exponent는 이렇게 빛이 흩어지는 원뿔의 폭을 정하는 값이라, 밝기를 조절하는 속성으로 읽으면 안 됩니다. Directional Inscattering Start Distance는 이 효과가 시작되는 거리입니다.

볼류메트릭 안개

같은 컴포넌트의 Volumetric Fog 항목에서 Enable Volumetric Fog를 켜면, 안개를 3D 공간에 퍼진 매질로 보고 그 안에서 빛이 흩어지는 것을 계산합니다. 볼류메트릭 안개는 지형과 상관없는 기능이라, 랜드스케이프가 없어도 동작합니다.

일반 안개보다 훨씬 사실적으로 빛의 산란과 그림자를 표현해서, 빛이 안개를 지나며 빛줄기(god rays)를 만드는 효과도 낼 수 있습니다. 켠 뒤에는 Volumetric Fog 항목의 Albedo, Extinction Scale, Emissive 같은 값으로 안개의 색과 빛을 가리는 정도, 스스로 내는 빛을 세밀하게 조절합니다. 다만 비용이 큰 효과이므로, 켜기 전후의 GPU 시간을 비교하고 필요한 곳에만 씁니다.


스카이 어트모스피어

스카이 어트모스피어는 하늘과 먼 거리의 대기 산란을 계산하는 시스템입니다. 지수형 높이 안개와 함께 쓰면 하늘과 태양, 대기가 서로 어울리는 사실적인 장면이 됩니다. 해의 높이에 따라 하늘색과 태양의 색이 자연스럽게 바뀌고, 아주 먼 지형까지 대기 효과가 적용되어 멀수록 푸르고 흐리게 보입니다.

대기 배치하기

툴바의 추가(Add) 버튼을 누르고 Visual Effects에서 Sky Atmosphere를 골라 레벨에 놓은 뒤, 아웃라이너에 SkyAtmosphere 액터가 생겼는지 확인합니다. 이 액터가 담은 Sky Atmosphere 컴포넌트가 하늘과 먼 거리의 대기를 그립니다. 다만 하늘색이 해의 높이를 따라 바뀌려면, 아래 설정 끝에서 설명하는 것처럼 디렉셔널 라이트의 Atmosphere Sun Light가 켜져 있어야 합니다. 대기를 월드 원점에 고정할지, 액터를 옮기면 함께 움직이게 할지는 컴포넌트의 Transform Mode로 정합니다.

대기의 핵심 설정

Atmosphere 항목에서는 빛이 대기에서 흩어지고 흡수되는 방식을 정합니다. 레일리 산란(Rayleigh Scattering)은 짧은 파장인 푸른빛이 대기의 아주 작은 분자에 더 많이 흩어지는 현상으로, 하늘이 파랗게 보이는 이유입니다. 산란 계수와 입자의 밀도, 빛이 지나는 경로의 길이가 하늘색에 영향을 줍니다. 해 질 녘에 하늘이 붉어지는 것도 빛이 대기를 길게 지나는 동안 푸른빛이 먼저 흩어져 사라지기 때문입니다.

미 산란(Mie Scattering)은 먼지나 물방울처럼 비교적 큰 입자에 의한 산란으로, 뿌연 대기와 해 주변의 밝은 무리를 표현합니다. 붉은 파장만 흩뜨리는 기능은 아닙니다. 흡수(Absorption)는 대기가 특정 파장의 빛을 흡수하는 정도로, 하늘의 색에 영향을 줍니다.

Height Fog Contribution은 대기의 빛이 높이 안개에 얼마나 기여할지를 정합니다. 이 값이 동작하려면 프로젝트 설정의 Support Sky Atmosphere Affecting Height Fog와 안개 색 설정 같은 연결 조건이 맞아야 하므로, 그것부터 확인합니다. Planet 항목의 Ground Radius는 행성의 크기를, Atmosphere 항목의 Atmosphere Height는 대기층의 두께를 정하며, 보통은 기본값으로 둡니다.

대기가 태양의 방향을 알려면 디렉셔널 라이트의 Atmosphere Sun Light를 켭니다. 그다음 디렉셔널 라이트의 회전을 바꿔 보면 낮과 저녁, 밤의 분위기가 하늘색과 함께 바뀌는 것을 볼 수 있습니다.

더 깊이: 하늘을 픽셀마다 계산하지 않는 방법

스카이 어트모스피어 문서에 따르면 하늘과 대기 원근(aerial perspective)은 시선을 따라 대기 속의 표본을 차례로 쌓는 레이 마칭(ray marching)으로 그립니다. 그런데 이것을 4K나 8K 화면의 모든 픽셀마다 하면 비용이 크므로, 엔진은 해상도가 낮은 룩업 테이블(lookup table, LUT) 몇 개에 하늘을 계산해 둡니다. 하늘 픽셀에는 시점 주위의 하늘 밝기를 위도와 경도로 펼쳐 담은 FastSkyViewLUT를 쓰고, 불투명하거나 반투명한 메시에는 카메라 절두체를 복셀로 나눈 공간(froxel)에 투과율과 산란된 빛을 담은 AerialPerspectiveLUT를 씁니다. 레이 마칭을 하는 동안 태양빛이 얼마나 남는지와 다중 산란의 기여도 각각 별도의 LUT로 구합니다.

이 구조를 알면 품질 설정의 의미가 분명해집니다. 하늘에 텍셀(texel)이 보이면 하늘 쪽 LUT의 해상도를, 안개가 덮인 물체에 텍셀이 보이면 대기 원근 LUT의 해상도를 높이는 식으로 원인을 나눌 수 있습니다. 다만 AerialPerspectiveLUT는 3D 볼륨 텍스처라서 크기를 키우면 메모리가 크게 늘어납니다. 시네마틱처럼 품질이 우선일 때는 r.SkyAtmosphere.FastSkyLUT와 r.SkyAtmosphere.AerialPerspectiveLUT.FastApplyOnOpaque를 0으로 해 저해상도 LUT 최적화를 끌 수 있는데, 렌더링은 더 느려지는 대신 디테일이 촘촘한 곳에 생기는 결함이 줄어듭니다.


볼류메트릭 클라우드

볼류메트릭 클라우드는 언리얼 엔진 4.26부터 들어간 기능으로, 3D 부피를 가진 사실적인 구름을 만듭니다. 이 구름은 조명과 상호작용해 땅에 그림자를 드리우고, 빛이 지나는 가장자리는 밝게 빛나며, 해의 위치에 따라 색이 바뀌어 살아 있는 하늘을 연출할 수 있습니다.

구름 배치하기

툴바의 추가(Add) 버튼을 누르고 Visual Effects에서 Volumetric Cloud를 골라 레벨에 놓으면, 아웃라이너에 VolumetricCloud 액터가 생깁니다. 이 액터는 혼자 동작하기보다, 앞에서 놓은 디렉셔널 라이트와 스카이 어트모스피어, 스카이 라이트가 있는 레벨에서 그 빛을 받아 구름을 그립니다. 그리고 구름의 모양은 액터가 아니라 지정한 볼륨 재질이 정하므로, 배치한 뒤 아래의 Material 항목에 구름 재질이 들어 있는지부터 확인합니다.

구름의 핵심 설정

Cloud Material 항목의 Material에는 구름의 모양과 밀도를 정하는 재질을 지정하며, 이 재질은 Material Domain이 Volume이어야 합니다. 엔진이 기본으로 제공하는 구름 재질을 쓰거나 직접 만들 수 있습니다. Layer Bottom Altitude와 Layer Height는 구름 층이 시작되는 높이와 층의 두께입니다. Tracing Max Distance는 구름을 계산하며 따라갈 최대 거리이고, View Sample Count Scale은 시야 방향으로 구름을 계산할 샘플 수의 배율인데, 실제 상한은 스케일러빌리티 설정도 함께 따릅니다.

구름이 얼마나 하늘을 덮을지, 얼마나 짙을지, 어떻게 움직일지 같은 값은 쓰는 구름 재질의 파라미터입니다. 그래서 이런 이름의 값은 재질에 따라 다르고, 모든 구름 액터에 공통으로 있는 속성이 아닙니다.

구름이 드리우는 그림자는 대기의 태양으로 지정한 디렉셔널 라이트에서 조절합니다. Cast Cloud Shadows와 Cloud Shadow Strength 같은 설정으로 그림자를 켜고 세기를 정하며, 디렉셔널 라이트를 회전하면 구름 그림자의 방향과 구름 자체의 색이 함께 바뀝니다.

볼류메트릭 클라우드는 사실적인 만큼 비용이 큰 효과입니다. 추적 거리와 샘플 수, 스케일러빌리티 설정으로 비용을 조절하고, 저사양 플랫폼에서는 쓰는 범위를 제한하는 것을 검토합니다.


무엇을 어디서 편집하는가

안개와 대기, 구름에 후처리 볼륨까지 더하면 같은 장면에 여러 시스템이 함께 관여합니다. 이때 가장 흔한 실수는 원하는 결과를 엉뚱한 곳에서 고치는 것입니다.

FOG · ATMOSPHERE · CLOUD · POST PROCESS

매질의 설정과 최종 화면 보정의 위치를 구분합니다

같은 장면을 함께 구성하지만 각 시스템이 편집하는 값은 다릅니다. 노출·색보정을 바꾸는 것과 안개나 구름의 매질을 바꾸는 것을 분리합니다.

매질과 최종 화면 보정의 관계높이 안개·Sky Atmosphere·Volumetric Cloud는 각각 매질과 하늘·구름 표현으로 같은 장면에 기여한다. 장면 표현 뒤 Post Process Volume의 노출·색보정이 최종 화면에 영향을 준다. 이는 편집 대상과 결과의 개념도이며 실제 렌더링 패스 순서를 재현하지 않는다. 최종 화면 보정에서 안개 밀도를 편집하는 역방향 간선은 없다.Height Fog밀도 · 높이 감소액터 Z 기준Sky Atmosphere산란 · 흡수태양 방향 연결Volumetric Cloud구름 재질층 위치 · 두께장면 표현안개 · 하늘 · 구름Post Process Volume노출 · 색보정최종 화면시야와 GPU 시간 확인
매질과 최종 화면 보정의 관계높이 안개·Sky Atmosphere·Volumetric Cloud는 각각 매질과 하늘·구름 표현으로 같은 장면에 기여한다. 장면 표현 뒤 Post Process Volume의 노출·색보정이 최종 화면에 영향을 준다. 이는 편집 대상과 결과의 개념도이며 실제 렌더링 패스 순서를 재현하지 않는다. 최종 화면 보정에서 안개 밀도를 편집하는 역방향 간선은 없다.Height Fog밀도 · 높이 감소액터 Z 기준Sky Atmosphere산란 · 흡수태양 방향 연결Volumetric Cloud구름 재질층 위치 · 두께장면 표현안개 · 하늘 · 구름최종 보정Post Process Volume노출 · 색보정최종 화면시야와 GPU 시간 확인각 매질 설정은위 시스템에서 편집실제 렌더링 패스의순서를 재현한 것은 아님

Height Fog의 Fog Density·Height Falloff·액터 Z는 밀도와 높이 분포를 바꿉니다. Volumetric Fog를 켜면3D 매질의 조명 산란도 계산합니다. Sky Atmosphere는 Rayleigh/Mie 산란·흡수와 Directional Light의 Atmosphere Sun Light 연결을 사용합니다. Volumetric Cloud의 구름 재질과 Layer Bottom Altitude/Height는 모양·밀도와 층 위치·두께를 다룹니다. 구름 분포 파라미터는 재질에 따라 다릅니다.

화살표는 장면 표현과 최종 화면에 대한 기여입니다. 노출·색보정을 바꾸는 곳은 Post Process Volume이며, 안개 밀도·대기 산란·구름 매질의 편집 위치는 각각의 시스템입니다.

비교 조건 고정

같은 카메라·시간대·노출에서 한 효과씩 바꿉니다. 설정을 조합한 뒤 이동 경로의 가시성과 GPU 시간을 다시 확인합니다.

일반 높이 안개와 Volumetric Fog가 지원하는 속성은 다릅니다. 일반 Fog의 Start Distance·Max Opacity를 볼류메트릭의 공통 제한으로 해석하지 않습니다.

위 그림은 각 시스템이 편집하는 값과, 그것이 최종 화면에 이르는 관계를 보여 줍니다. 위쪽의 세 시스템이 장면 표현에 기여합니다. 높이 안개는 밀도와 높이에 따른 감소, 액터의 Z 기준을 다루고, 스카이 어트모스피어는 산란과 흡수, 태양 방향의 연결을, 볼류메트릭 클라우드는 구름 재질과 층의 위치와 두께를 다룹니다. 이렇게 만들어진 안개와 하늘, 구름의 장면 표현 위에, 후처리 볼륨의 노출과 색 보정이 더해져 최종 화면이 됩니다.

그림의 설명처럼 이 화살표는 편집 대상과 결과의 관계를 나타낸 개념도이고, 실제 렌더링 단계의 순서를 그대로 옮긴 것은 아닙니다. 중요한 것은 최종 화면 보정에서 안개의 밀도로 거슬러 올라가는 화살표가 없다는 점입니다. 즉 안개의 밀도와 색은 높이 안개 액터에서, 대기 산란은 스카이 어트모스피어에서, 구름의 모양은 볼류메트릭 클라우드와 그 재질에서 고치고, 후처리 볼륨에서는 최종 노출과 색 보정만 고칩니다. 후처리 볼륨은 안개 밀도나 대기 입자 밀도를 편집하는 곳이 아닙니다.

그림 아래의 카드는 두 가지를 덧붙입니다. 하나는 비교할 조건을 고정하는 것으로, 같은 카메라와 시간대, 노출에서 한 효과씩 바꾸고, 설정을 조합한 뒤에는 이동 경로가 잘 보이는지와 GPU 시간을 다시 확인합니다. 다른 하나는 일반 높이 안개와 볼류메트릭 안개가 지원하는 속성이 다르다는 점입니다. 일반 안개의 Start Distance나 Fog Max Opacity가 볼류메트릭 안개에도 똑같이 적용되는 제한이라고 생각하지 말고, 쓰는 버전의 볼류메트릭 안개 속성을 따로 확인합니다. 예를 들어 볼류메트릭 안개에는 Volumetric Fog 항목 안에 자기만의 Start Distance가 따로 있습니다.


한 효과씩 조절하며 맞추기

환경 효과는 레벨의 가시성과 분위기, 성능에 함께 영향을 주므로, 시간대와 날씨 조건마다 값을 나눠 확인해야 합니다. 순서는 다음과 같습니다. 먼저 주 광원의 방향과 밝기를 고정합니다. 그다음 높이 안개의 밀도와 Falloff, 시작 거리를 조절하면서 문이나 적, 이동 경로가 잘 보이는지 확인합니다. 이어서 대기와 구름을 조정하되, 구름 그림자와 추적 샘플이 GPU 비용을 얼마나 늘리는지 비교합니다. 마지막으로 노출과 색 보정으로 화면을 마무리하고, 시간대별로 시야와 프레임 시간을 다시 확인합니다.

예를 들어 안개 때문에 출입문이 보이지 않는다고 해 봅시다. 같은 카메라 위치에서 먼저 높이 안개의 Fog Density를 조금 줄이고, 문의 윤곽이 얼마나 보이는지와 GPU 시간을 기록합니다. 그 값을 되돌린 뒤 이번에는 노출만 바꿔 비교합니다. 그러면 공기 자체가 옅어진 변화와, 화면 전체를 밝게 보정한 변화가 어떻게 다른지 볼 수 있습니다. 노출을 올려 문이 밝아졌다고 해서 안개의 밀도가 줄어든 것은 아니므로, 결과를 설명할 때도 둘을 섞지 않습니다.


정리

  • 지수형 높이 안개는 높이에 따라 밀도가 지수적으로 줄며, Fog Density, Fog Height Falloff, Start Distance, Fog Max Opacity, 액터의 Z 위치로 분포를 정합니다.
  • Directional Inscattering Exponent는 태양 주변 산란의 폭이고, 볼류메트릭 안개는 랜드스케이프와 상관없이 3D 매질의 산란을 계산하지만 비용이 큽니다.
  • 스카이 어트모스피어는 레일리 산란으로 푸른 하늘을, 미 산란으로 뿌연 대기와 해 주변의 무리를 표현하며, 디렉셔널 라이트의 Atmosphere Sun Light로 태양 방향을 받습니다.
  • 볼류메트릭 클라우드는 재질이 모양과 밀도를, Layer Bottom Altitude와 Layer Height가 층 위치와 두께를 정하며, 구름 그림자는 디렉셔널 라이트에서 조절합니다.
  • 안개, 대기, 구름은 각자의 시스템에서 편집하고, 후처리 볼륨은 최종 노출과 색 보정만 맡습니다.
  • 같은 카메라와 시간대, 노출에서 한 효과씩 바꾸고, 가시성과 GPU 시간을 함께 확인합니다.

연습 문제

1. 어느 액터를 고를까

구름 층을 더 높은 곳으로 옮기려는 경우와, 완성된 화면 전체의 색감을 따뜻하게 바꾸려는 경우에는 각각 어느 액터를 선택해야 할까요? 구름의 모양까지 바꾸고 싶다면 무엇을 확인해야 할까요?

해설 보기

구름 층의 높이는 볼류메트릭 클라우드 액터의 Layer Bottom Altitude에서 바꿉니다. 화면 전체의 색감은 최종 보정이므로 후처리 볼륨의 Color Grading에서 바꿉니다.

구름의 모양과 덮는 정도는 액터 공통 속성이 아니라 그 액터에 지정한 구름 재질의 파라미터이므로, 쓰는 재질에 어떤 파라미터가 있는지 따로 확인합니다.

2. 노출로 문을 찾게 했다면

안개 속의 출입문이 보이지 않아서 후처리 볼륨의 노출을 올렸더니 문이 보이게 되었습니다. 팀원에게 "안개를 옅게 했다"고 설명해도 될까요?

해설 보기

안 됩니다. 노출은 최종 화면의 밝기를 보정한 것이고, 안개의 밀도는 그대로입니다. 그래서 화면 전체가 밝아졌을 뿐, 공기가 옅어진 것은 아닙니다.

실제로 안개를 옅게 하려면 높이 안개의 Fog Density나 Fog Height Falloff를 바꿔야 합니다. 두 방법은 화면에서 다르게 보이므로, 같은 카메라 위치에서 각각 바꿔 비교한 뒤 의도에 맞는 쪽을 고르고, 바꾼 것을 정확히 설명합니다.

3. 땅에만 깔리는 안개

골짜기 바닥에만 짙게 깔리고 산꼭대기는 맑게 보이는 안개를 만들고 싶습니다. 지수형 높이 안개의 어느 값을 어떻게 바꿔야 할까요?

해설 보기

Fog Height Falloff를 크게 하면 높이가 올라갈 때 밀도가 빨리 줄어, 안개가 땅 가까이에 모입니다. 그리고 액터의 Z 위치를 골짜기 바닥 높이 근처로 옮겨 안개 분포의 기준을 맞춥니다.

바닥의 안개가 너무 옅다면 Fog Density를 올립니다. 이때도 같은 카메라와 시간대에서 한 값씩 바꾸며, 이동 경로가 여전히 보이는지 확인합니다.

높이 안개의 설정은 Epic의 지수형 높이 안개 안내에서 확인할 수 있습니다.

다음 글 지형과 환경 요소 최적화에서는 랜드스케이프와 폴리지, 안개와 대기 같은 환경 요소의 비용을 측정하고 줄이는 방법을 다룹니다.