듀얼 라이트맵에 대한 연구 by 김윤정

1. 라이트맵이란? (Lightmap)



유니티에 라이트맵 기능은 이전부터 있어 왔습니다.

라이트맵이란, 렌더링에서 가장 무거운 요소인 조명과 그림자 연산을 실시간으로 하지 않기 위해서 미리 조명과 그림자 연산을 특정한 텍스쳐로 만들어 (굽는다고 표현합니다 : Bake) 입힘으로써, 조명 연산을 피하고자 하는 꼼수라고 할 수 있습니다.

참고로 유니티에는 가장 유명한 라이트맵 솔루션인 비스트 (Beast) 가 내장되어 있습니다.


이전에 있던 라이트맵은 싱글 라이트맵 (single lightmap) 이라 불리는 것으로, 보다 단순한 구조를 가지고 있습니다.
싱글 라이트맵은 누구나 흔히 짐작할 수 있는 기술로, 라이트맵을 구워서 오브젝트 / 배경등 static (고정된) 오브젝트에 입혀 버리는 기술입니다.

장점은 조명 계산을 하지 않아도 되므로 렌더링 부하가 줄어들고, 그래픽 카드나 각종 사양에 상대적으로 둔감하게 적용할 수 있다는 것입니다. 때문에 낮은 사양의 컴퓨터에서도 훌륭한 조명과 그림자 효과를 표현할 수 있습니다.


단점은 맵 제작시에 전체 맵을 전부 구워(Bake) 해 버리는 작업이 필요하므로 작업효율이 떨어지며, 추가의 UV가 필요한 버텍스 버퍼와 추가의 텍스쳐 이용으로 인한 메모리 소비 등이 있을 수 있겠습니다. 아참, 또하나로 노말맵이나 스페큘러 등의 효과가 전부 무시되어 버리는 단점이 있습니다. 열심히 작업한 배경의 노말맵이 모두 사라져 버리면 실망스럽겠지요.

(이래서 프로젝트에서 라이트맵을 사용하지 않았던 것입니다.)


동적 오브젝트의 리얼타임 그림자만 섞어서 제작하는 것이 이 방식이었습니다



2. 듀얼 라이트맵이란? (Dual Lightmap)


듀얼 라이트맵이란. 이전에 가지고 있던 싱글 라이트맵의 단점을 개량해서 나온 새 기능으로,
유니티 3.4인가 3.5인가 잘 모르겠지만 (아마 3.5인듯?) 그때부터 나온 기능입니다.

이 기능을 간단하게 정의하자면, "리얼타임 라이트/셰도우와 구워진 라이트맵을 혼합해서 동시에 사용" 한다는 것이 기존의 라이트 맵과 다른 기능입니다.


즉 카메라의 Shadow distance (그림자 출현 거리) 옵션 값으로, 카메라와 가까운 영역은 리얼타임 그림자와 리얼타임 라이트가 계산됩니다. 즉 노말맵이나 스페큘러가 모두 적용된, 말그대로 '라이트맵을 사용하지 않는 실시간 상태' 로 렌더링됩니다. (거기다가 기존의 라이트맵도 같이 섞여서 렌더링 됩니다)


그렇지만 카메라의 shadow dstance 를 넘어간, 카메라와 먼 영역이 되면 예전의 라이트맵 방식만 나타나게 됩니다.
즉 멀리 있는 동적 오브젝트 - 멀리있는 몬스터나 NPC- 등의 그림자는 안나오겠지만, 그 외에 고정된 오브젝트는 라이트맵이 충실하게 표현된다는 것입니다.

이렇게 리얼타임 라이트/그림자와 , 라이트맵을 혼용해서 사용하면 다음과 같은 장단점이 있을 것으로 예상됩니다.



3. 듀얼 라이트맵의 장단점



듀얼 라이트맵의 장점


퀄리티가 올라갑니다. (호오? 퀄리티가 올라가는군요?)


라이트맵은 기본적으로 Indirect light (간접광) 을 계산해서 구현하는 것이기 때문에 분위기 잡기에는 좋습니다.
그렇지만 반대급부로 섬세한 노말맵 효과나 스페큘러를 표현할 수 없는 단점이 있는데, 가까운 거리에는 리얼타임 라이트/그림자와 혼합함으로써, 그림자의 해상도도 올라가게 되고 (가까운데만 고급으로 처리할 수 있으니까) 노말맵과 스페큘러도 쓸 수 있으므로 라이트맵의 장점과 실시간 라이팅/셰도잉의 장점을 동시에 살릴 수 있습니다.


저사양에서도 품질이 덜 떨어집니다.

지금 게임을 돌릴 때 가장 무거운 것이 실시간 그림자입니다. (조명연산도 무시 못하지만)
그래서 옵션을 조금이라도 낮추었을때 프레임 향상을 위해서 가장 먼저 없애는 것이 그림자이고, 그 이유로 중급 이하부터는 퀄리티가 팍 떨어져 보이게 됩니다. 이 방식을 쓰면 이것을 방지할 수 있게 됩니다.


사양이 낮아집니다.

최고 사양같은 경우에는 그림자 영역을 길게 잡을 수 밖에 없는데, 이 방법을 쓰면 최고 옵션에서도 그림자 거리를 낮게 잡을 수 있어서 사양이 내려가는 효과가 있습니다. 반대로 저사양은 살짝 올라갈 수도 있습니다만 (...)


간단한 수정이 쉬워져 보입니다.
테스트를 해 봐야 확실하겠지만, 이론적으로는 일단 조명 한두개 정도는 리얼타임으로 추가해도 라이트맵을 다시 굽지 않고도 사용가능해 보입니다. 리얼타임 라이트와 합성하는 거니까요.

<사진: 듀얼 라이트맵의 효과를 보여주고 있습니다. >
- 멀리 있는 부분은 라이트맵이고 가까이 있는 부분은 리얼타임 라이팅이지만, 경계선이 잘 블렌딩 되어서 어디가 시작인지 알아볼 수 없습니다.
- 멀리 있는 더미 병사에게는 그림자 (동적 그림자) 가 영향을 끼치지 못하고 있는 것을 알 수 있습니다.
- 화면의 맨 오른쪽 위 부분은 가까이 있는 부분이지만, 라이트맵에서 받은 부드러운 간접광 효과도 같이 나오고 있는걸 알 수 있습니다.


- 가까이 있는 맨홀 뚜껑에는 노말과 스페큘러가 나타나고 있습니다.
- 가까이 있는 드럼통은 폭발해야 할 동적 오브젝트입니다, 자연스럽게 동적 그림자를 드리우고 있습니다.
- 라이트맵은 보통 그림자의 해상도가 좋지 못합니다. 넓은 면을 한 장의 그림자로 해결해야 하기 때문이죠.
하지만 이 방식을 쓰면 가까운 부분의 그림자 해상도가 좋아집니다.



듀얼 라이트맵의 단점


제작이 귀찮습니다.

라이트맵을 굽는(Baking) 작업의 시간이 꽤 걸립니다. 품질이 높은 대신 이런 단점이 있죠. 빠른 수정에 대처하기 힘듭니다. 부분만 굽는 기능이 개발되어 있습니다만, 어쨌거나 그냥 만들던 이전의 리얼타임 방식과의 차이는 큽니다.

메모리를 더 차지합니다.
라이트맵의 사이즈에 따라서 메모리를 더 차지할 수 밖에 없습니다. 저사양에서는 조금 부담이 될 수도 있겠습니다.


디퍼드 렌더링 모드에서만 사용가능합니다.
포워드 렌더러도 사용이 가능하긴 합니다. 대신 셰이더에서 수동으로 dualforward 라는 키워드를 이용하여 작동하게 할 수 있습니다.



4. 그럼 현실적인 사용 방법은?

프로젝트에서 사용할 것인가?



4.0 에서는 라이트맵에서도 스페큘러와 노말맵이 사용 가능하게 된다는 정보가 있습니다. 잘만 되면 라이트맵 만으로도 전부 표현할 수 있다는 말이 되겠지요.

이렇게 라이트맵의 발전이 예상되는 관계로 체크하지 않고 갈 수 없겠지요. 단점에 비해 장점이 많다면 당연히 채용합니다.

그런 의미에서 다른건 괜찮지만, 제작 시간이 오래 걸린다는 것이 가장 큰 문제라고 할 수 있습니다.
메모리 차지야 사실 큰 문제는 아니고, 렌더링 모드는 디퍼드 모드를 사용하면 되는 것이니까요. 아이폰 게임도 아니고.
그렇지만 작업이 오래 걸린다면 효율에 큰 영향을 줄 것입니다.
그러므로 제안하고자 하는 절충안은 이 정도 입니다.


- 일단은 실시간 조명/그림자만 적용해서 게임을 제작한다.
- TA 가 음지에서 지속적으로 라이트맵 적용을 테스트 한다
- 게임 제작 후반이 되어서 작업이 안정되고 변수가 적어질 때 작업에 들어가도 늦지 않을 듯.


이상 듀얼 라이트맵(Dual lightmap) 에 대한 이론적 기초 연구를 마칩니다.
쓸 지 안쓸지 좋을지 안좋을지는 TA 들이 지속적으로 테스트 해주실 겁니다 :)


덧글

  • 디카스테스 2012/08/02 17:31 #

    음지에서 디자이너들을 위해 몸바쳐 테스트 하는 ta들
    흡사 다크나이트같군요 ㅋㅋ
  • 김윤정 2012/08/03 02:24 #

    후후후후후 이러다가 결정적인 타이밍에 나타나는 거죠
※ 로그인 사용자만 덧글을 남길 수 있습니다.


MyADD

<script> (adsbygoogle = window.adsbygoogle || []).push({}); </script>