1. 라이트맵이란? (Lightmap)
유니티에 라이트맵 기능은 이전부터 있어 왔습니다.
라이트맵이란, 렌더링에서 가장 무거운 요소인 조명과 그림자 연산을 실시간으로 하지 않기 위해서 미리 조명과 그림자 연산을 특정한 텍스쳐로 만들어 (굽는다고 표현합니다 : Bake) 입힘으로써, 조명 연산을 피하고자 하는 꼼수라고 할 수 있습니다.
참고로 유니티에는 가장 유명한 라이트맵 솔루션인 비스트 (Beast) 가 내장되어 있습니다.
이전에 있던 라이트맵은 싱글 라이트맵 (single lightmap) 이라 불리는 것으로, 보다 단순한 구조를 가지고 있습니다.
싱글 라이트맵은 누구나 흔히 짐작할 수 있는 기술로, 라이트맵을 구워서 오브젝트 / 배경등 static (고정된) 오브젝트에 입혀 버리는 기술입니다.
장점은 조명 계산을 하지 않아도 되므로 렌더링 부하가 줄어들고, 그래픽 카드나 각종 사양에 상대적으로 둔감하게 적용할 수 있다는 것입니다. 때문에 낮은 사양의 컴퓨터에서도 훌륭한 조명과 그림자 효과를 표현할 수 있습니다.
단점은 맵 제작시에 전체 맵을 전부 구워(Bake) 해 버리는 작업이 필요하므로 작업효율이 떨어지며, 추가의 UV가 필요한 버텍스 버퍼와 추가의 텍스쳐 이용으로 인한 메모리 소비 등이 있을 수 있겠습니다. 아참, 또하나로 노말맵이나 스페큘러 등의 효과가 전부 무시되어 버리는 단점이 있습니다. 열심히 작업한 배경의 노말맵이 모두 사라져 버리면 실망스럽겠지요.
(이래서 A 프로젝트에서 라이트맵을 사용하지 않았던 것입니다.)
동적 오브젝트의 리얼타임 그림자와 섞어서 제작하는 것이 이 방식이었습니다
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 들이 지속적으로 테스트 해주실 겁니다 :)
'유니티 엔진' 카테고리의 다른 글
Unity3D 5.0 첫인상 (7) | 2014.08.25 |
---|---|
14일만에 0에서 60프레임 만들기 (0) | 2013.10.29 |
TA 지망 배경 디자이너의 블로그 (0) | 2012.05.08 |
Unity : Optimizing Graphics Performance (0) | 2012.01.31 |
Unity 3.5 신기능 : Light Probes (0) | 2012.01.31 |
댓글