Lighting
씬을 구성할 때 분위기를 내는데 가장 중요한 요소는 lighting이라고 생각한다.
무턱대고 light를 계속해서 늘리면 성능상의 문제가 생길 수 있다.
빛에 대한 연산이 많이 소요되며 직접광뿐만 아니라 반사광까지 계산해야 하기 때문에 버벅거림, 프레임 드롭이 일어날 수 있다.
이를 해결하기 위해 bake 기능을 많이 이용하는데 이에 대해 분석해 보자.
Bake
bake란 lighting을 미리 계산하여 lightmap으로 구워놓는 것을 말한다.
즉, 실시간으로 동작하는 게임에서 미리 계산된 빛과 그림자를 이용하여 화면에 출력하겠다는 뜻이다.
이렇게 미리 계산해 놓으면 실시간으로 광원에 대한 반응을 계산할 필요가 없어지므로 성능상의 이점이 있다.
단, 말그대로 미리 계산하는 것이기 때문에 움직일 수 있는 물체에 적용하기에는 어색할 수 있다.
물체는 움직이는데 그림자는 안 움직이게 될 것이기 때문이다.
따라서, bake하는 빛은 static 객체에만 적용이 가능하다.
Baked Light 만들기

Lighting 패널을 통해 빛에 대한 설정을 할 수 있다.
Scene Tab에서는 씬에 사용될 light에 대해 설정할 수 있다.
크게 보면 Realtime, Mixed, Lightmapping 세팅 부분으로 나눌 수 있다.
Realtime은 실시간으로 게임내에서 빛을 계산하는 부분에 대한 설정이다.
Mixed는 bake와 Realtime을 섞어서 사용하겠다는 뜻이고 이를 어떠한 방식으로 섞을 것인지 설정할 수 있다.
Lightmapping이 현재 다루는 bake와 동일한 뜻이다.
bake에 대한 세부 설정을 하고 Generate버튼을 클릭하면 bake 된 lighting map을 만들 수 있다.


bake 된 lightingmap이 적용되어 광원을 꺼도 빛이 있는 것처럼 표현된다.
Reflaction Probe
철이나 유리같은 재질은 주변 물체를 반사하여 보여준다.
Reflection Probe를 이용하면 반사 역시 bake로 미리 계산하여 적용할 수 있다.

bake를 하게되면 화면에 보이는 구에 어떻게 반사가 될지 표시된다.
Reflection Probe의 Box내에 물체가 존재하면 미리 계산한 반사가 적용된다.
![]() |
![]() |
Reflection Probe 적용전 | Reflection Probe 적용후 |
Light Probe
bake 된 라이팅을 적용하게 되면 Mixed 옵션을 사용한다고 하더라도 그림자가 제대로 적용되지 않을 수 있다.

캡슐이 왼쪽벽에 의해 그림자가 생겨야 하는데 생기지 않는다.
이러한 현상을 해결하기 위해서는 Light Probe를 사용하면 된다.
Light Probe란 bake 할 때 빛의 정보를 저장하는 점들이라고 생각하면 된다.
각 점들이 빛의 정보를 가지고 있다가 실시간으로 움직이는 물체에 빛을 적용해 준다.

Light Probe를 씬에 추가하고 빛의 정보를 저장할 구간에 펼쳐놓으면 된다.
![]() |
![]() |
그림자에 있을 때 | 빛에 있을 때 |
그럼에도 한 가지 어색한 부분은 그림자 안에 있지만 캡슐은 static 객체가 아니고 광원은 Mixed옵션을 사용하기 때문에 캡슐에 대한 그림자는 실시간으로 그리게 된다.
그렇기 때문에 그림자 안에 있음에도 광원에 의해 새로운 그림자를 겹쳐 그리게 된다.
또한, 캡슐이 전체적으로 어두워지기는 하지만 왼쪽벽의 그림자가 캡슐에 그려지지는 않는다.
이를 해결하기 위해서는 bake옵션을 shadowmask로 설정하고 lightingmap을 생성하면 된다.


그림자가 겹치지도 않으며 왼쪽 벽에 대한 그림자가 정확히 캡슐에 적용이 된다.

shadowmask를 사용하면 shadowmask 데이터를 따로 만들어 그림자에 대한 연산을 따로 적용한다.
단, 이때는 bake가 되긴 했어도 광원을 활성화해야 한다.
shadowmask는 그림자를 미리 계산하여 캐싱해 놓는 기능이라고 생각하면 된다.
최종적으로 화면에 보일 그림자를 그리기 위해서는 실시간으로 광원에 대해서 동적 객체(캡슐)의 그림자를 계산한 뒤 미리 계산한 shadowmask와 합쳐 최종 화면을 그려내기 때문이다.
즉, 연산이 더 필요하지만 보다 자연스러운 화면을 연출할 수 있다.
유니티 공식 문서에 따르면 shadowamsk가 다른 모드에 비해 더 높은 화질의 그림자를 제공하지만, 성능 부하와 메모리 요구 사항이 가장 높다고 한다.
https://docs.unity3d.com/kr/2021.1/Manual/LightMode-Mixed-Shadowmask.html
조명 모드: Shadowmask - Unity 매뉴얼
이 페이지에서는 씬에 있는 모든 혼합 광원의 동작에 대해 설명합니다. 이때 해당 씬은 Lighting Mode 프로퍼티가 Shadowmask로 설정된 조명 설정 에셋을 사용합니다.
docs.unity3d.com
하지만, Realtime보다는 높지 않을 것이므로 높은 퀄리티를 원한다면 shadowmask 모드를 사용해야 할 것 같다.
Lighting
씬을 구성할 때 분위기를 내는데 가장 중요한 요소는 lighting이라고 생각한다.
무턱대고 light를 계속해서 늘리면 성능상의 문제가 생길 수 있다.
빛에 대한 연산이 많이 소요되며 직접광뿐만 아니라 반사광까지 계산해야 하기 때문에 버벅거림, 프레임 드롭이 일어날 수 있다.
이를 해결하기 위해 bake 기능을 많이 이용하는데 이에 대해 분석해 보자.
Bake
bake란 lighting을 미리 계산하여 lightmap으로 구워놓는 것을 말한다.
즉, 실시간으로 동작하는 게임에서 미리 계산된 빛과 그림자를 이용하여 화면에 출력하겠다는 뜻이다.
이렇게 미리 계산해 놓으면 실시간으로 광원에 대한 반응을 계산할 필요가 없어지므로 성능상의 이점이 있다.
단, 말그대로 미리 계산하는 것이기 때문에 움직일 수 있는 물체에 적용하기에는 어색할 수 있다.
물체는 움직이는데 그림자는 안 움직이게 될 것이기 때문이다.
따라서, bake하는 빛은 static 객체에만 적용이 가능하다.
Baked Light 만들기

Lighting 패널을 통해 빛에 대한 설정을 할 수 있다.
Scene Tab에서는 씬에 사용될 light에 대해 설정할 수 있다.
크게 보면 Realtime, Mixed, Lightmapping 세팅 부분으로 나눌 수 있다.
Realtime은 실시간으로 게임내에서 빛을 계산하는 부분에 대한 설정이다.
Mixed는 bake와 Realtime을 섞어서 사용하겠다는 뜻이고 이를 어떠한 방식으로 섞을 것인지 설정할 수 있다.
Lightmapping이 현재 다루는 bake와 동일한 뜻이다.
bake에 대한 세부 설정을 하고 Generate버튼을 클릭하면 bake 된 lighting map을 만들 수 있다.


bake 된 lightingmap이 적용되어 광원을 꺼도 빛이 있는 것처럼 표현된다.
Reflaction Probe
철이나 유리같은 재질은 주변 물체를 반사하여 보여준다.
Reflection Probe를 이용하면 반사 역시 bake로 미리 계산하여 적용할 수 있다.

bake를 하게되면 화면에 보이는 구에 어떻게 반사가 될지 표시된다.
Reflection Probe의 Box내에 물체가 존재하면 미리 계산한 반사가 적용된다.
![]() |
![]() |
Reflection Probe 적용전 | Reflection Probe 적용후 |
Light Probe
bake 된 라이팅을 적용하게 되면 Mixed 옵션을 사용한다고 하더라도 그림자가 제대로 적용되지 않을 수 있다.

캡슐이 왼쪽벽에 의해 그림자가 생겨야 하는데 생기지 않는다.
이러한 현상을 해결하기 위해서는 Light Probe를 사용하면 된다.
Light Probe란 bake 할 때 빛의 정보를 저장하는 점들이라고 생각하면 된다.
각 점들이 빛의 정보를 가지고 있다가 실시간으로 움직이는 물체에 빛을 적용해 준다.

Light Probe를 씬에 추가하고 빛의 정보를 저장할 구간에 펼쳐놓으면 된다.
![]() |
![]() |
그림자에 있을 때 | 빛에 있을 때 |
그럼에도 한 가지 어색한 부분은 그림자 안에 있지만 캡슐은 static 객체가 아니고 광원은 Mixed옵션을 사용하기 때문에 캡슐에 대한 그림자는 실시간으로 그리게 된다.
그렇기 때문에 그림자 안에 있음에도 광원에 의해 새로운 그림자를 겹쳐 그리게 된다.
또한, 캡슐이 전체적으로 어두워지기는 하지만 왼쪽벽의 그림자가 캡슐에 그려지지는 않는다.
이를 해결하기 위해서는 bake옵션을 shadowmask로 설정하고 lightingmap을 생성하면 된다.


그림자가 겹치지도 않으며 왼쪽 벽에 대한 그림자가 정확히 캡슐에 적용이 된다.

shadowmask를 사용하면 shadowmask 데이터를 따로 만들어 그림자에 대한 연산을 따로 적용한다.
단, 이때는 bake가 되긴 했어도 광원을 활성화해야 한다.
shadowmask는 그림자를 미리 계산하여 캐싱해 놓는 기능이라고 생각하면 된다.
최종적으로 화면에 보일 그림자를 그리기 위해서는 실시간으로 광원에 대해서 동적 객체(캡슐)의 그림자를 계산한 뒤 미리 계산한 shadowmask와 합쳐 최종 화면을 그려내기 때문이다.
즉, 연산이 더 필요하지만 보다 자연스러운 화면을 연출할 수 있다.
유니티 공식 문서에 따르면 shadowamsk가 다른 모드에 비해 더 높은 화질의 그림자를 제공하지만, 성능 부하와 메모리 요구 사항이 가장 높다고 한다.
https://docs.unity3d.com/kr/2021.1/Manual/LightMode-Mixed-Shadowmask.html
조명 모드: Shadowmask - Unity 매뉴얼
이 페이지에서는 씬에 있는 모든 혼합 광원의 동작에 대해 설명합니다. 이때 해당 씬은 Lighting Mode 프로퍼티가 Shadowmask로 설정된 조명 설정 에셋을 사용합니다.
docs.unity3d.com
하지만, Realtime보다는 높지 않을 것이므로 높은 퀄리티를 원한다면 shadowmask 모드를 사용해야 할 것 같다.