본문 바로가기
유니티 엔진

유니티 신 버전 라이트맵 사용하기 3 ( Using Unity 2017 Lightmap - 3)

by 대마왕J 2017. 12. 12.

이제 라이트맵을 저장하는 법을 알았으니, 리얼타임 GI인지 뭔지를 해결해 봅시다. 

그 전에, 라이트맵을 분류하는 법을 알아야 합니다. 


라이트맵은 여러 종류가 있어서, 자신이 원하는 것을 사용해야 하거든요 그리고 더럽게 복잡해졌습니다. 


일단 오브젝트가 Static Dynamic으로 이루어진건 알고 계시겠지요?



Static은 1강에서 봤던 Static 옵션을 체크한 물체로, 게임에서 '절대 움직이지 않는다' 라는 설정이 된 오브젝트를 의미합니다. 

Dynamic은 Static 체크를 안한 물체로, 캐릭터처럼 게임에서 '움직인다' 라는 설정이 된 오브젝트를 의미합니다. 

자 그 두 개가 중요합니다. 


그리고 우리 프로젝트가 어떤 라이트 체계를 가질 것이냐 미리 결정하는 것이 매우 중요합니다. 

아래 소개를 보고 이번 프로젝트에서 원하는 라이트 체계를 결정하세요 



라이트맵의 종류 


RealTime Lightmap 리얼타임 라이트맵



흔히 아는 라이트맵과는 다른 라이트맵입니다. 그림자와 조명 텍스쳐가 생성되지 않고, 클러스터만 생성되어 실시간으로 조명 GI가 발생하는 라이트맵입니다. 


GI는 가지고 싶은데 라이트의 밝기나 위치가 실시간으로 변하고 (하루 시간이 지나가듯), 다이나믹 오브젝트도 동시에 빛 받게 하고 싶을때 사용합니다. 


사실상 리얼타임이기 때문에 '가볍다'의 장점은 거의 없고, GI가 추가된 리얼타임이라고 보는게 좋습니다. GI의 정밀도도 좀 떨어집니다. 그치만 조명에 실시간으로 반응하는 GI는 매력적인걸로.   


Static Object : 실시간 라이트에 반응해서 GI가 발생합니다. 단 라이트맵치고는 좀 무겁고 정밀도가 상대적으로 높지 않은 편입니다. 그림자는 리얼타임입니다. 


Dynamic Object: 빛을 받습니다. 그림자도 나옵니다 뭐 더 필요해요?





Mixed Lightmap 믹스드 라이트맵


예전엔 Baked 라이트맵이라고 불렸던 것이 믹스드로 바뀌었습니다. 뭐 그래도 있을 건 다 있고, 다시 이 안에서 두 개로 나눠집니다. 여기가 좀 어려워요 이 라이트맵은 다시 Baked랑 Mixed로 나눠집니다.  

사실 이 네이밍은 별로 마음에 안들어요 



Baked Lightmap 베이크드 라이트맵


가장 전통적인 의미의 라이트맵입니다. 텍스쳐로 구워지는 그림자와 GI효과가 한 장에 저장됩니다. 

단, 다이나믹 오브젝트한테는 어떠한 영향도 끼치지 않습니다. 

예전엔 Mixed와 완전 다른 의미처럼 분류되었는데, 신형에서는 Mixed 하위 구조로 들어갔습니다.


건축 시뮬레이션처럼, 완전히 고정된 물체만 있고 최고의 품질을 보여주고 싶거나, 빛을 받는 다이나믹 오브젝트가 하나도 없어서 조명 연산을 완전히 제거해 버려 무척 가볍게 하고 싶을 때 사용합니다. 즉 Dynamic 오브젝트가 전혀 없거나, 있어도 배경과 동떨어진 - 만화같은 - 느낌을 주고 싶을때 사용하기도 합니다.


보통 책에 나와있는 전통적인 라이트맵이 이것으로, 가볍기로는 가장 가벼운 방식일 겁니다. 사실상 조명 연산이 하나도 없어지는 거니까요  


Static Object  : 라이트맵이 적용됩니다. GI도 텍스쳐로 구워지고 그림자고 텍스쳐로 구워집니다. 사실상 전통적인 의미의 라이트맵이란 이 녀석입니다.  


Dynamic Object  : 철저히 무시됩니다. 아예 빛과 연산을 하지 않습니다. 위 캐릭터가 조명의 영향을 전혀 안 받는 것을 보십시오. 만약 엠비언트 라이트라도 없었으면 새까맣게 나왔을 겁니다.  



Mixed Lightmap 믹스드 라이트맵


베이크드 라이트맵의 특징이자 단점인, '다이나믹 오브젝트에게는 먹지 않는다' 라는 점을 개선하고자 만든 복합 라이트맵입니다. 이게 진짜 믹스드 라이트맵입니다. 


일단 베이크드 라이트의 특성에 더해서 , 빛을 받는 다이나믹 오브젝트도 동시에 사용하고 싶을 때 사용합니다.

라이트 하나 설치하고 나서 배경에는 베이크드 라이트가 되고, 같은 라이트가 캐릭터에도 실시간으로 적용되고 싶을 때 사용되며 라이트맵 적용한 배경과 실시간으로 움직이는 캐릭터가 같이 자연스럽게 어울려야 할 때 사용됩니다. 


그런데 웃긴게, 이 믹스드 라이트맵이 신형에서는 세부 옵션에 따라 다시 3가지로 나뉘어졌다는 것입니다. 정확히는 4개예요 ㅋㅋㅋㅋ 아 사람 힘들게 진짜...[각주:1]


- Baked Indirect 베이크드 인다이렉트




그림자와 빛은 전부 리얼타임을 쓰고, 'GI와 엠비언트 라이트만' 구워버리는 방법입니다. 그림자는 전부 리얼타임으로 쓰고 싶을때 쓰는 방법이예요. 사실상 GI와 엠비언트가 구워졌을뿐 리얼타임 라이트와 동일하다고 생각하시면 됩니다.  

고품질의 GI를 가지고 싶은데, 그림자와 조명은 상호작용이 복잡해야만 해서 꼭 '전부' 리얼타임 그림자들만 쓰고 싶을때 사용합니다. 사실상 가벼움은 별로 좋지 못하고, GI와 엠비언트가 고정된 리얼타임 라이트맵 같은 느낌입니다. 


Static Object : 라이트맵이 적용됩니다. 근데 GI와 엠비언트만 라이트맵으로 구워집니다. 조명과 그림자는? 전부 다이나믹 라이트와 다이나믹 그림자를 씁니다! 라이트와 그림자만은 리얼타임이예요! 

Dynamic Object : 빛을 받습니다. 실시간 그림자도 나옵니다 뭐 더 필요해요?  




- Shadowmask 셰도우마스크


그림자도 굽고 GI도 굽는 방식입니다만, 이건 특이하게 그림자는 셰도우 마스크로 굽고, GI는 따로 구워서 두 장으로 굽는 방식입니다. 결과적으로는 이후에 말할 Subtractive와 같은 방식입니다만, 그림자랑 GI를 따로 나눠서 굽는다는게 중요합니다. 이게 은근히 중요한 경우가 있거든요 
거기다가 이건 다시 ShadowMask와 Distance ShadowMask로 나뉘어 집니다. 이 옵션까지 지금 설명하는건 너무하므로 나중에 따로 설명하죠 . 

고품질의 GI를 가지고 싶고, 그림자도 구워서 가볍게 만들고 싶은데, 그 와중에 리얼타임으로 반응하는 다이나믹 오브젝트의 그림자와도 완벽히 어울리고 싶을때 사용하는 방법입니다. 우훗 욕심쟁이. 사실상 가장 고급기법이지요. 그리고 이후 설명(언젠가..) 하겠지만 이것도 또 두 가지로 나뉩니다. 

Static Object : GI와 엠비언트를 라이트맵으로 굽습니다. 그리고 그림자(ShadowMask)만 따로 다시 굽습니다. 왜 굳이 따로 그림자를 독립시켰을까요? 아래 그림처럼 다이나믹 그림자 [각주:2] 와 완벽히 어울리게 하기 위해서입니다. [각주:3]

Dynamic Object : 빛을 받습니다. 실시간 그림자도 나옵니다 뭐 더 필요해요?  


이렇게 Static 그림자와 Dynamic 그림자가 완벽히 어울립니다. 

이거 하나 하려고 라이트맵을 분리한거거덩요 




- Subtractive 서브트렉티브




그림자도 굽고 GI도 굽는, Shadowmask랑 같은 방식입니다만, 한 장에 모두 구워진다는게 다릅니다 

예전 유니티 5.x 의 Mixed Lightmap을 기억하시는 분이라면, 이게 그거입니다. 


'어쩐지 좀 어두운 것 같은데요?' 라고 생각하시면 정상입니다. 

위의 것들을 좌악 비교해 보세요, Baked 라이트맵과 이것만 Static이 좀 어둡습니다. 

그것은 일단, 이 두 개는 '조명연산이 텍스쳐로 구워진다' 는 차이입니다. 나머지 둘은 조명연산은 적어도 리얼타임이거든요. 당연히 이 어두운 두 세트가 제일 가볍습니다. 텍스쳐와 리얼타임 라이트의 차이라 스페큘러 연산에서의 차이도 있고 뭐 등등 그래서 좀 어둡습니다. 


역시 다이나믹 오브젝트는 리얼타임으로 조명도 받고 그림자도 받습니다만, 살짝 이질감이 있는건 어쩔 수 없습니다. 


Baked Lightmap의 가벼움이 너무 좋고 매우 중요하지만, Dynamic Object가 조명과 그림자를 받는 것도 포기할 수는 없을 때 사용하면 좋습니다. 뭐 대신 Mixed중에서 퀄리티는 제일 떨어지지요. 



Static : GI와 엠비언트, 그림자와 조명까지 전부 라이트맵 한 장에 구워집니다. 

Dynamic : 빛을 받습니다. 그림자도 나옵니다. 단 여기 그림자는 리얼타임 그림자 (Shadowmap)이라서 구워진 그림자와는 좀 차이가 있습니다. 구워진 그림자는 단지 텍스쳐일 뿐이지 그림자맵이 분리되어 있지 않기 때문입니다. 아래 그림처럼 말입니다. 이것인 ShadowMask와의 결과차이입니다. 








결론


정리하자면 , 라이트맵의 가벼운 순서는 대충 이 정도가 될 듯 하네요 


Baked > Subtractive > ShadowMask > Baked Indirect > Realtime  


라이트맵의 퀄리티는 주관적으로 정하기 애매하기 때문에, 지금 원하시는 프로젝트에 맞게 결정하시는게 좋을듯 합니다. 근데 저것만 가지고 선택하긴 아직 일러요 ㅋㅋㅋㅋ Mixed Lightmap을 사용하면 필수적으로 LightProbe와 ReflectionProbe 까지 같이 고려해야 결정할 수 있기 때문입니다 ㅋㅋㅋㅋㅋ 으앙 ㅋㅋㅋㅋㅋㅋㅋㅋ 으앙 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 이거 언제끝내 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 간단한게 아니잖아 제길 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ


결국 저 라이트맵 옵션별로 하나하나 설명하는 수 밖에 없어보이네요. 



  1. 그나마 프로그레시브 라이트매퍼가 생겨서 이것도 얼마나 갈지... [본문으로]
  2. 다이나믹 그림자도 사실 셰도우마스크를 씁니다 [본문으로]
  3. 이런 류의 단점도 같이 보입니다. 현재 Static으로 구워진 박스의 그림자는 단지 '텍스쳐' 이기 때문에 실시간이 아닙니다. 때문에 박스가 캐릭터에게 그림자를 드리우지 못하고 있습니다.Baked Indirect라면 완벽했을텐데.. [본문으로]
반응형

댓글