Life Archive
article thumbnail

INTRO

언리얼 엔진 5의 Lighting을 학습하던 중 학습하면서,

이전 버전의 언리얼 엔진에서 사용한 Lighting과 Lumen을 비교하여 어떤 장단점이 있는 지 알아보았다.

 

그 전에 Lumen에 대하여 간단히 살펴보자면, 언리얼 엔진의 Global Illumination과 Reflection에서 추가된 기술로,

미리 Light을 Bake하여 Lightmap을 이용하는 방식이 아닌, Fully Dynamic Realtime Lighting 시스템이다. 

 

GPU 연산을 줄이기 위해,

대부분 Static Light로 사용할 수 밖에 없었던 이전과는 다르게 이제는 빛이 움직여도 실시간으로 랜더링되며

이전보다 퀄리티도 좋아지고 연산량도 줄어들게 되었다.

 

위와 관련된 내용을 직접 UE5의 Level에서 세팅해보면서 과연 Lumen이 절대적으로 좋은 것인지,

Lightmap은 더 이상 사용할 필요가 없어진건지 확인하고자 글을 작성하게 되었다.


CONTENT

우선 아래의 캡처본은 미리 배치해둔 Actor들의 Unlit 상태의 모습이다.

ViewMode - Unlit으로 빛을 받기 전의 ViewPort

이 상태에서 Direction Light와 Sky Light를 추가하고

Project Setting - Rendering - Global Illumination과 Reflection을 None에서 Lumen으로 변경하였다.

그 결과 아래와 같은 결과를 얻을 수 있었다.

Directional Light를 추가하여 Global Illumination을 Lumen으로 설정한 ViewPort

Light들을 Static이 아닌 Movable로 수정하여 Dynamic으로 수정해도 빛이 실시간으로 적용되고 반사광도 적용됨을 확인했다.

퀄리티도 상당히 높았고 우선 Realtime으로 랜더링된다는 것이 유니티를 주로 이용한 나에게는 매우 생소했다.

 

다음은 기존 언리얼 엔진의 Light 방식으로 진행해보았는데,

PostProcessVolume의 Global Illumination과 Reflection의 Method를 Lumen이 아닌 None으로 변경하고,

빛을 전부 Static으로 변경한 후 Build Level을 시작한다.

 

Build를 선택하면 Hardware Ray Tracing을 시작하며,

Lumen과 비슷한 효과를 내기 위해 World Setting - Lightmass 부분을 수정해준다.

 

간접광 반사수를 3에서 10으로, Sky Lighting 반사수를 1에서 10으로, Static Lighting Level Scale을 1에서 0.1으로,

간접광 퀄리티를 1에서 10으로 수정한다.

(Static Lighting Level Scale롸 간접광 퀄리티를 곱한 수는 1로 맞춰야한다.)

 

Reflection도 넣기 위해 SphereReflectionCapture를 Outliner에 추가하고 Build - Reflection Capture Build를 진행한다.

 

위처럼 수정하고 다시 빌드를 하면,

Ray Trace 연산량은 늘어나게되어 빌드 시간이 오래걸리고 또한, 결과에서 저해상도 그림자가 나오게 된다.

 

주변 Actor들의 Overridden Light Map Resolution을 늘리면 아래와 같은 결과를 얻게 된다.

Lumen 없이 Lightmap을 이용하여 월드를 구성한 상태의 ViewPort

물론 위와 같은 과정은 모든 Actor의 값을 일일이 수정하고 다시 Build을 하는 복잡한 과정을 반복하고 거쳐야하지만, Lumen은 Realtime으로 랜더링한다는 점에서 매우 좋은 기능인 것은 확실하다.

 

하지만 정교한 Lightmap 세팅 과정을 거치게 되면, Lumen보다 더 높은 퀄리티를 얻게 되며,

그림자에 있어서도 훨씬 더 부드러운 Soft Shadow를 얻을 수 있게 되어 자연스러운 연출이 가능해진다.

 

번외로, Material의 Blueprint에서 Pixel Depth는 노드를 연결하지 않아야만 Lumen이 정상적으로 작동된다.


RESULT

언리얼 엔진5에서는 항상 Lumen을 사용하는게 좋은 방법일까 ?

 

그렇지 않다.

 

Lumen은 Realtime으로 Dynamic하게 움직이는 빛을 계산하기 때문에 Scene 뒤에서 많은 GPU 연산을 하게 된다.

 

반면 Lightmap은, Bake한 Light Texture를 단순히 Overlaying하는 것이기 때문에 루멘보다 더 성능이 뛰어날 때가 있다는 것이다.

 

또한, 굳이 빛을 Dynamic하게 사용할 필요가 없는 상황, 즉, 고정된 빛을 사용할 때에는 Lumen보다는

더 잘 Bake한 Lightmap을 쓰는게 더 좋은 Quality를 보일 때가 있기 때문에 상황에 맞춰서 사용해야한다.


참고자료 : https://www.youtube.com/watch?v=k-zMkzmduqI&list=PLJ0Lh6SYi2Kum5BdVix62nPMWi0G6xK21&index=3