앞선 포스팅에서는 라이트매핑을 통해 정적인 오브젝트에 대한 라이팅을 베이크를 한다고 하였다.
그러나 이러한 라이트매핑이 부적절한 경우가 있다.
가장 대표적인 경우는 아래와 같다.
- 라이트매핑을 하기엔 오브젝트의 크기가 너무 작은 경우
- 동적인 오브젝트. 게임 캐릭터나 움직이는 배경 등
라이트매핑을 동적인 오브젝트에 적용하지 못하는 것은 당연한 이유이다. 베이크로 생성된 라이트맵이 텍스쳐 형태로 저장되고 런타임에 터레인이나 오브젝트에 붙여지기 때문이다. 그러나 오브젝트 크기가 작은 경우는 왜 부적절할까?
만약 작은 오브젝트까지 베이크를 하여 GI(직접광과 주변광)를 처리한다면 텍스쳐의 해상도가 높아야 함이 분명하다. 그렇지 않으면 하나마나한 결과를 얻게 되기 때문이다. 그렇다고 라이트 맵의 해상도를 높인다면 필요한 메모리가 기하급수로 증가하게 될 수도 있다. 이 때문에 작은 오브젝트는 라이트매핑을 적용시키지 않는다.
이런 경우엔 GI를 어떻게 처리해야 할까?
라이트 프로브의 사용
라이트매핑이 부적절할 경우를 대비하여 유니티에서는 라이트 프로브를 제공한다.
라이트 프로브를 사용해야 하는 경우는 위에서 언급한 라이트매핑이 부적절한 경우에 대해 모두 해당된다.
다음은 라이트 프로브를 사용하였을 때와 사용하지 않았을 때의 차이이다.
라이트 프로브 OFF | 라이트 프로브 ON |
라이트 프로브를 사용하면 피사체가 광원으로 부터 빛을 반사한다. 이는 GI를 생성할 당시의 라이트 프로브에 따라 다르므로 라이트 프로브가 정교하게 배치되어 있을수록 더욱 정확한 빛 표현이 가능하다.
하지만 세상에 공짜는 없다. 라이트 프로브는 스피리칼 하모닉 기반 함수(RGB에 대한 정보를 숫자로 표현)로 저장되어 있는데 이 역시 지나치게 많은 경우 성능상에 이슈를 불러올 수 있다. 따라서 라이트 프로브를 무작정 배치할 것이 아니라 필요한 구간에만 배치를 해야 한다.예를 들면 다음과 같다.
- 주변광을 포함한 사실적 라이팅 묘사가 필요하며 동적 오브젝트가 지나가는 구간
- 오픈필드 같은 광활한 장소에서 작은 오브젝트에 사실적 빛 표현이 필요한 장소 (라이트 프로브를 드문드문하게 배치)
라이트 프로브는 어떻게 사용할까?
제일 먼저 씬에 라이트 프로브를 적절하게 배치 하여야 한다.
Light Probe Group을 만들어서 GI를 적용시키고자 하는 장소에 적절한 간격으로 배치한다.
그리고 적용할 대상에 Light Probes를 Blend Probes로 설정한다.
마지막으로 Rendering/Lighting 에서 Generate Lighting을 눌러주어 GI를 생성한다.
GI를 생성하면 라이트 매핑이 시작되어 라이트 맵도 생성하지만 라이트 프로브 역시 연산을 시작하며 정보를 저장한다.
이렇게 하면 미리 계산된 조명 및 칼라 정보를 매쉬에 적용하기 때문에 Static이 아닌 동적 오브젝트에도 사실적 빛 표현이 가능하게 되는 것이다.
'유니티 > 그래픽스' 카테고리의 다른 글
[Unity] HDRP (4) - 포스트 프로세싱 (0) | 2022.08.11 |
---|---|
[Unity] HDRP (3) - 렌더링 보정 (0) | 2022.08.10 |
[Unity] HDRP (2) - 빛과 그림자 (0) | 2022.08.09 |
[Unity] HDRP (1) - 프로젝트 세팅 및 볼륨 (0) | 2022.08.09 |
[Unity] 라이트 세팅 (1) - 리얼타임 라이팅과 베이크드 라이팅 (0) | 2022.05.06 |