본문으로 바로가기

Unity3D lightmapping Menu 설명

category Technical Report/Unity Shader 2012. 11. 8. 17:49
반응형

한번 정리하려고 했던 내용인데 시간내서 정리.


유니티를 쓰면서 가장 맘에 들었던 부분은 강력한 라이트 맵 추출 기능이다. 유니티의 강점인 직관적인 UI와 어우려져 무척 간편하게 좋은 퀄리티를 낼 수 있게 사용할수 있다.(물론 라이팅의 종류가 적고 좀 더 디테일한 연출에 아쉬운 부분은 분명 존재하지만 약간의 꼼수? 내지는 후보정을 포함하면 꽤 좋은 퀄리티를 뽑아낼수 있다.... 고 생각한다. 3.5버젼이후 HDR까지도 지원하니 퍼포먼스 코스트에 여유가 있다면 생각보다 상당히 좋은 퀄리티를 뽑아낼수 있다.)



해당 Lightmapping 메뉴는 window>>lightmapping에서 열어볼 수 있으며 이 창이 오픈된 상태에서 뷰포트에 서브창이 뜨게 된다.







mode : 총 세가지의 메뉴를 지원한다.


1. Single lightmaps : 가장 기본적인 lightmap baking 방식. 추출된 Texture를 해당 texture에 입힘으로써 조명 연산에 대한 부하를 줄여주는 가장 기본적인 방법. 가장 가볍고 빠르게 굽힌다.(512x512 한장으로 할 경우 대략 low로 baking시 린필드에서 대략 14초). 단점은 역시나 심플하기 때문에 음영과 컬러를 표현하는게 전부라는거..


2. Dual lightmaps : 싱글라이트 맵핑의 단점을 보완한것으로 가까운거리는 Indirect light를 계산. 카메라 거리를 벗어나면 single lightmap에 의한 라이트 맵을 표현하는것.(LOD를 생각하면 이해가 쉬울듯). 아무래도 Single lightmap 작업에 비해 퀄리티는 올라가나 그만큼 라이트 셋팅 및 라이트 맵 추출은 기본적으로 해줘야 하는 단점이 존재. 그리고 디퍼드 렌더링 모드에서만 사용가능하다는데 포워드 렌더에서는 따로 옵션을 조정해줘야 쓸 수 있다고 함.(퍼포먼스 문제 때문에 좀 힘들지도...)


3. Directional lightmaps : 하프라이프에서 선보여 유명해진 lightmapping 방식으로 라이트 맵 생성시 한장의 라이트 맵과 한장의 노멀 라이트 맵이 생성된다. 즉, 빛이 받는 부분에 대한 노멀에 대한 그림자까지도 표현하기에 보다 사실적이고 풍부한 라이트맵을 뽑을수 있다.


Quality : lightmap의 추출 퀄리티를 결정한다. High, low 두가지 메뉴가 있으며 Final Gather Ray만 1000, 200으로 변한다. 기본적인 라이트 셋팅과 분위기는 low상태로 잡고 High로 최종본을 작업하는 방식으로 쓰고 있다.


Bounces : 대상에서 반사되어 산란되는 반사광의 강도. 좁은 공간의 빛이 많을경우 이 옵션이 세지면 빛이 섞여버리지만 그 또한 분위기 연출이 가능하니 분위기에 따라서 옵션을 조절하면 된다. world control 메뉴이기 때문에 계속 만져보는게 정답.(너무 높여주면 역시 색이 뒤섞여서 제대로 표현되지 않고 뒤섞인 색이 된다)


Skylight, Skylight intensity : 필드 전체에 대한 광원이다. 방향성은 가지지 않고 다이렉트로 필드 전체에 때리기 때문에 처음 기초 분위기에서 설정해주면 된다. 색상과 강도를 조절


Final Gather Ray : 공기중의 빛의 산란과 그림자 품질에 대한 옵션이라 생각하면 된다. Global illumination과 유사한 옵션으로 이 메뉴에 대한 설명은 무지하게 길어지므로 간단하게 생략. 실 작업에서 이 옵션을 200에서 작업해 마지막으로 1000으로 하는 이유는 Shadow와 Contact Shadow(Ambient Occlusion)의 품질이 틀려지기 때문이다. 이 옵션값이 커질수록 렌더 시간이 커지고 시스템에 부하가 많이 걸리기 때문에 초기 분위기를 잡을때는 값을 낮춰서 잡으면 된다. 또한, Lightmap texture해상도가 커질수록, lightmap UV의 공간이 클수록 품질은 당근 높아진다.(당근 Bounces 옵션에 영향을 받는다.)


Final Gather Ray 자체가 카메라를 중심으로 빛의 산란을 연산하기 때문에 주변부로 갈수록 품질이 떨어지는데 GI와 병행한다는 느낌으로 조절하면 될듯.(어차피 최종본에서는 최대치로 올려서 연산해야 이음새나 Ambient Occlusion이 깔끔하게 표현된다)


Contrast Threshold : 빛의 대비에 대한 옵션. 명암비에 대한 옵션으로 이해하면 될거 같은데 정확히는...


Interpolation : 보간 관련 옵션. 빛의 반사에 따른 간접광의 횟수인것 같음. 높여주면 색의 혼합이 심해지기 때문에 부드러워지나 톤 자체가 제대로 표현이 안될수 있다. 상황에 따라 조절


Ambient Occlusion : 물체와 물체가 맞닿는 Contatct Shadow의 표현과 관련해서 만지면 됨. Max distance는 그림자의 거리 Contrast는 명암의 대비에 대한 옵션이다. 너무 과하게 줄경우에는 물체끼리 맞닿는 면적이 완전 시커멓게 변하므로 다른 옵션들과 병행해서 조절하면 적절한 분위기를 낼 수 있다.


LOD surface : LOD에 대한 옵션(이거도 안만짐..;;)


Lock Atlas : lightmap UV를 고정함. Generate UV 옵션을 체크할경우 바로 앞에 baking되면서 생성된 lightmap UV를 그대로 사용하게 되며 Generate UV 옵션이 꺼져있을경우 mesh내부의 lightmap UV를 사용한다. 이 때, Lock Atlas 체크시에 생성된 lightmap의 해상도를 그대로 사용하게 된다.


Resolution : texels per world unit이라는 말 그대로 픽셀당 사용하게 되는 lightmap의 사이즈를 결정하게 된다. 서브 옵션의 show resolution으로 뷰포트로 직접 모자익 텍스쳐로 확인이 가능하다.


padding : 간격에 대한 옵션.


아래 Bake Scene과 Bake Selected, Bake Probe 세개의 옵션이 있으며 Scene을 Baking할 경우에는 자동으로 Probe도 Baking이 된다.(반대로 Probe만 따로 추출할 수 있다.)


그 아래 옵션에서 Lightmap추출에 걸린 시간과 몇장의 어느정도의 해상도가 들어간 lightmap이 만들어졌는지 표시해준다.




Use Lightmaps : 라이트맵을 켜고 끈다.


Shadow Distance : 그림자의 길이를 조절한다.


Show Resolution : Mesh에 할당된 lightmap UV의 면적을 체크로 표시해준다.


Show Probes : Baking된 Probe를 켜고 끈다.


Show Cells : Probe간의 연결라인을 표시해준다. (최소 5개가 필요한 Probe의 연산 방식때문에 제대로 구현되는지 확인하기 위한 옵션)





앞에서 잠시 언급한 Generate Lightmap UV에 대한 옵션은 FBX로 import된 mesh안에 옵션으로 들어가 있다.

이 옵션을 체크할 경우 Unity가 알아서 UV를 생성해주기에 상당히 편하다만... 단점으로는 최적화는 썩 잘되지 않는다. 최적화를 위해서는 Object 옵션의 Scale in Lightmap에서의 size와 적절한 Resolution값으로 조절하면 꽤 괜찮은 결과를 만들어 낼 수 있다.



아무리 그래도 이렇게 빽빽하게 2nd channel에 한땀한땀 직접 펴주는 쪽이 퀄리티도 잘나오고 1024x1024쓸꺼 512x512한장으로 끝낼수 있다. (10만개 정도는 3일 꼬박 날밤까면 펼수 있었는데 지금은 손이 빨라져서 하루나 이틀정도면 될지도...ㅋ)


지금 작업방식은 이 2nd channel 정리때문에 Maya를 쓰는데 Maya의 Layout 기능과 Automatic UV로 큰 정리는 마친이후, 맥스로 넘겨 한땀한땀 이어주면 한두시간이면 끝난다......(역시 툴은 가리면 안된다니깐....)


사족으로 Generate lightmap UV로 추출시 IOS로 포팅하면 라이트맵이 어긋나는 경우가 가끔(?) 생긴다..(이런 그지같은....OS를 보았나..가리는것도 드릅게 많은...). 이땐 빼도 박도 못하고 손으로 펴주는수 밖에... ㅋ




Object 메뉴이다.


Lightmap Static : Mesh옵션의 lightmap static 옵션으로 구워질 mesh냐 아니냐에 대한 옵션.

Scale in Lightmap : Lightmap UV에서 해당 mesh가 UV에서 차지하는 면적. 일일이 오브젝트에 따라 UV크기를 조절하지 않고 generate UV에서 이 옵션으로 UV내의 면적을 조절할 수 있다. 너무 커지면 오류 메세지가 뜬다.


Altas

: Lightmap에서 UV의 좌표에 관한 것으로

index는 라이트맵의 인덱스라 생각하면 되고  Tiling은 0-1까지 인지 1-2등 몇장으로 추출 할 것인지 offeset은 UV의 시작점을 지정할 수 있다. 지금 0,1,1,0,0은 mesh 내부의 lightmap UV가 있을경우(0~1까지 한장의 lightmap을 뽑는다는 옵션)




이렇게 추출되어진 lightmap을 직접 확인 할 수 있다. 더블클릭하면 자동으로 photoshop으로 넘어간다.



추가로 조절해야할 메뉴인 Edit >> RederSettings의 세부 메뉴



간단하게 Fog 옵션으로 대기중의 공기 밀도와 Ambient light로 Ambient color와 세기를 결정할 수 있다.(또한 material을 만들어 적용도 가능)



뱀다리 : 결국 라이팅은 이러한 기술적인 부분들을 잘 만지는것도 좋지만 많이 만지는게 답인듯....




반응형

'Technical Report > Unity Shader' 카테고리의 다른 글

Deferred Lighting  (0) 2012.11.15
Crazy Bump 사용법(2)  (0) 2012.11.13
Autodesk Media & Entertainment 2012  (4) 2012.07.23
lighting 관련 몇가지 용어  (0) 2012.07.15
Cg Shader Programming  (0) 2012.07.12