Light Mobility 란?

라이트 모빌리티 (Light Mobility)는 언리얼 엔진에서 라이트가 실행시간에 무엇을 할 수 있는지, 그에 따라서 어떤 렌더링 방법을 사용할지 결정하는 방법이다.

라이트 모빌리티에는 3가지의 작동 방식이 있으며 아래는 이름과 함께 핵심을 정리해 보았다.

스태틱 (Static)라이트맵에 완전히 구워지므로 퍼포먼스 비용이 없지만, 게임 내에서 변경할 수 없다.
스테이셔너리 (Stationary)스태틱 지오메트리에서의 바운스 라이트와 그림자만 라이트매스로 굽고, 다른 모든 라이팅은 동적 라이팅이다.
게임에서 색과 밝기를 조절할 수 있지만, 이동 및 회전 및 라이트 영향력 크기를 바꿀 수 없다.
*여기서 라이트 영향력 크기란 빛이 닿는 공간을 이야기한다.*
무버블 (Moveable)완전히 동적인 라이팅이며, 게임내에서 무엇이든 변경 가능하지만, 퍼포먼스 비용이 크고, 보통 라이트의 영향력 크기에 비례한다.

이대로도 좋지만 조금 더 자세한 설명을 해보겠다.

스태틱 라이트 (Static Lighing)

스태틱 라이트는 어떤 방법으로도 움직이거나 변경할 수 없도록 디자인된 라이트이다.

스태틱 라이트는 라이트맵만 사용하기에 그림자들은 게임플레이 이전에 구워진다. 그래서 라이트맵 안에서만 계산되며, 한 번 처리된 이후로는 퍼포먼스에 영향을 전혀 끼치지 않는다.

움직이거나 움직일 가능성이 있는 Movable한 오브젝트와는 스태틱 라이트가 통합되지 않으나, 움직일 가능성이 없는 정적인 오브젝트에 대한 라이팅의 경우에만 그림자를 만들 수 있다.

스태틱 라이트는 유동적인 환경에 대해서는 라이트가 적용되지 않는다는 단점이 있지만, 정적인 오브젝트들에 대해서는 라이트맵을 구워 런터임에 추가적인 계산 없이 라이트를 사용할 수 있는 장점 때문에 스태틱 라이트는 장단점이 극명하다.

최소한의 자원으로 최대의비주얼을 보여줘야하는 모바일 게임에서 애용되는 라이트이며, 거의 모든 게임들이 최적의 퍼포먼스를 위해 스태틱 라이트를 바탕으로 사용한다.

광원 반경 (Light Source Radius)

위에 언급했듯 스태틱 라이트의 Source Radius (광원 반경)에는 3D 렌더링 프로그램에서의 Area 라이트 작동 방식과 거의 비슷하게, 그림자가 연해지는 부가 효과가 있다.

아래 그림에서 왼쪽의 라이트에는 광원반경이 적게 설정되어있어 선명한 그림자가 보이고, 오른쪽의 라이트는 광원반경이 크게 설정되어 있어서 부드러운 그림자가 보인다.

라이트맵 해상도값을 조절하다 에러가났는데 신기하게도 모든면에 그림자가 묻은건지는 모르겠지만, 매시가 까매지는 현상이있다… 뭐지..?

라이트맵 해상도 (Lightmap Resolution)

라이트맵 해상도는 구워진 라이팅에서 스태틱 라이트로 인해 생기는 부분의 디테일을 조정할 수 있다.

스태틱 메시 컴포넌트에서, 라이트맵 해상도는 스태틱 메시에 설정되거나, 스태틱 메시에서 라이트맵 해상도 덮어쓰기 (Override Lightmap Res)를 체크한 뒤 값을 설정하면 된다.

값이 클수록 해상도가 높아져 더 이쁜 라이트 표현이 가능하지만, 그에 따라 빌드에 걸리는 시간과 차지하는 메모리가 늘어난다는 장단점이 있다.

라이트맵 해상도 조절값은 사실 밀도 설정값이라, 값이 낮으면 더욱 높은 해상도가 나온다.

스테이셔너리 라이트 (Stationary Lighting)

스테이셔너리 라이트는 한 위치에 머물되, 밝기나 색을 바꿀 수 있는 라이트이다.

게임플레이 도중엔 어떻게도 변하지 않는 스태틱 라이트와 구별되는 차이점인데, 그래도 밝기를 실행시간에 바꿔봤자 직사광(Direct Light) 에만 영향을 끼친다. 반사광이나 간접광은 라이트매스에서 미리 계산되었기 때문에 변하질 않는다.

스테이셔너리 라이트에서 나오는 모든 간접광과 그림자는 라이트맵에 저장되고, 직사광에서 만들어진 그림자는 섀도우 맵 (Shadow Map) 안에 저장된다. 여기서는 디스턴스 필드 섀도우 (Distance Field Shadow)를 활용하는데, 라이팅된 오브젝트의 라이트맵 해상도가 낮아도 그림자를 바삭하게 잘 구워낼 수 있다.

직사광 (Direct Lighting)

스테이셔너리 라이트의 직사광은 디퍼드 셰이딩 (Deferred Shading)을 사용해 동적으로 렌더링한다.

이를 통해 실행시간에 밝기와 색을 바꿀 수 있고, 라이트 함수나 IES 프로파일도 함께 바꿀 수 있다.

직사광은 라이트의 Visible 프로퍼티 조정을 통해서 게임에서 숨기거나 보이는 것을 토글할 수 있다.

무버블 라이트 (Movable Light) / 다이나믹 라이트 (Dynamic Light)

무버블 라이트는 완벽히 동적인 빛과 그림자를 드리우며, 위치나 방향, 색, 밝기, 감쇠, 반경 등등의 모든 프로퍼티를 런타임에 변경할 수 있다.

여기서 나오는 라이트는 라이트 맵에 구워지지 않으며, 간접광을 받을 수 없다.

섀도잉 (Shadowing)

그림자를 드리우도록 설정된 무버블 라이트는 전체 씬의 동적 그림자를 사용하기에 퍼포먼스 비용이 엄청나다.

퍼포먼스에 가장 큰 영향을 끼치는 부분은 라이트에 영향받는 메시의 갯수와, 해당 메시의 트라이앵글 수 이다. 즉 커다란 반경에 그림자를 드리우는 무버블 라이트는 반경이 작은 무버블 라이트보다 비용이 수십배가 될 수도 있다는 뜻이다.

결론

라이트는 적재적소에 환경이나 상황을 보아 적절한 라이트를 사용해야한다.

라이팅은 게임의 퍼포먼스를 좌지우지할 수 있는 것들이라 아래의 정리된 표를 보고 생각하며 써야겠다.

라이트퀄리티변화가능성퍼포먼스 비용
스태틱중간최저최저
스테이셔너리최고중간중간
무버블높음최고최고