Unity3D의 lightmap 추출기능은 상당히 강력하고 편리한 편이긴 하지만 엔진에서 UV를 두개밖에 지원하지 못하기 때문에 2nd UV를 masking이나 다른 용도 사용할 경우 한장으로 UV를 추출하는것이 곤란한 경우가 발생한다.
우선, 세부적인 Lightmap Menu에 관한 사항은 앞 포스팅을 참조하기 바란다. : Unity3D lightmapping Menu 설명
물론 두장이상의 lightmap을 사용하게 된다면 문제가 되지 않겠지만 이 경우 lightmap의 면적이 불필요하게 커지거나 낭비되는 경우가 생기기때문에 리소스 관리 측면에선 그리 권장할만한 것이 못된다.
몇가지 시험적으로 모바일 작업중 테스트를 해보면서 알게된 것은.
1. fbx로 export 되어도 Group으로 묶인 오브젝트는 각각의 UV 채널을 독립적으로 사용한다.
2. multi-sub로 하나의 오브젝트로 묶었을경우는 해당 오브젝트 UV를 하나로 사용한다.(물론 draw call은 뜯어내나 마나 똑같이 사용된다.)
3. seam에 의한 분리된 UV를 Unity가 알아서 배치하는것이 아닌 U,V 좌표 0,1값의 전체를 이동하여 배치해서 사용된다.
(펴준 2nd UV의 모습. 빼곡히 채우려해도 메쉬자체가 그리 많지 않기에 이정도가 Best. 각 면의 크기는 면적에 비례하지만 유저 근처에 강조되는 오브젝트의 경우 키워주기도 하고 꼭 1:1 대칭이 되게 펴주지 않아도 좋다. )
즉 해당 오브젝트의 2nd 채널을 빼곡하게(오브젝트가 전체 맵에서 차지하는 면적에 관계없이) 배치해야 가장 낭비없이 사용할 수 있다.
(스케일 값 조정의 예. 아래 추출되어진 라이트맵의 크기. 대략 한장으로 모아 구우려고 하고 있고 1024x1024한장 추출시 대략 1분30초 내외에 결과물을 볼 수 있다. 대신 High 옵션으로 할경우 비약적으로 추출 시간이 늘어나 라이트 수에 따라 다르지만 5~10분 이상 걸리기도 한다.)
라이트맵을 구워내는 option에서 조정해줘야 할 부분은 scale in Lightmap 항목으로 기준을 1로 잡고 0.X 단위로 낮춰주면서 면적을 조절해 주었다. 한가지 특징적인것은 scale in lightmap에서 1로 잡혀있다 할지라도 lightmap 상에서 차지하는 면적은 각각 서로 상이하였다.(내부 알고리즘이 존재하는것으로 보인다.) 눈으로 이러한 부분을 추출된 라이트맵과 비교해서 맞추고 구워주면 어느정도 꽉 찬 결과물을 얻을수 있다.
(추출된 라이트 맵.. 1024x1024 한장에 추출된 맵으로 비교적 빈 공간없이 메운편이고 여기서 0. 단위 하나정도 조정하면 맵이 늘어나게 되어버린다. 분할된 오브젝트의 수가 많을수록 좀 더 빽빽한 라이트맵 추출이 가능할 것으로 보인다.)
결론을 이야기 하자면 Generate lightmap UV를 사용할 경우 lightmap UV를 정리하는 수고로움+시간 적인 이득을 얻을수는 있겠지만 원통형이나 면이 복잡한 오브젝트의 경우 생각처럼 결과물이 잘 나오지 않는다. 1024x1024로 해도 비슷한 결과를 얻을수 있었다... 이러한 경우 손으로 펴주는것이 하나의 방법이 될 수 있겠지만 따로 fbx를 익스포트해야하고, 공간사용에 아무래도 낭비가 발생할수 있다. 이러한 것의 대안으로 생각한것이 이러한 라이트 맵 추출 방법이다.(일단 generate Lightmap UV를 사용하는것 보다 이쪽이 퀄리티가 훨씬 좋다는건 두말할 필요없는 소리)
개인적인 사족으로는 Unity 차후 버젼에서는 UV에서 차지하는 오브젝트의 2nd 면적이 아닌 seam으로 잘린 면적을 인식해 Lock altas를 체크하지 않을경우 이면을 내부에서 적절히 배치하여 결과물을 추출해 내었으면 하는 바램이다.
'Technical Report > Unity Shader' 카테고리의 다른 글
DisplaceMesh Binding을 활용한 Normal Tile 제작 (0) | 2013.03.19 |
---|---|
Draw call 과 Batching, culling (0) | 2013.02.04 |
Zbrush plug in - MatCap Baker (0) | 2013.01.20 |
Tri-Planar Texture Mapping (0) | 2012.12.08 |
Deferred Lighting (0) | 2012.11.15 |