Realtime Lighting 


개인적으로 리얼타임 라이팅이라는 말이 마음에 들지 않습니다. 리얼타임 라이트맵이라고 해야 옳지 않나...


A simple example of time of day using Precomputed Realtime GI.

https://docs.unity3d.com/Manual/LightingInUnity.html


그러니까 이런 겁니다. 바닥에 녹색으로 GI가 묻어나는 걸 봐주시길. 조명이 움직이는데도 GI가 먹는다든게 중요한 겁니다. 이래서 리얼타임이라고 불리지만, 오브젝트들은 움직이면 안된다라는 제한(Static) 은 있기 때문에 문자 그대로 리얼타임인 것은 아닙니다. 

하여간 가동시키려면 다음과 같습니다. 




1부에서 했던 것처럼 Static한 녀석과 Dynamic 한 녀석이 존재하는 씬에서 시작합니다. 캐릭터만 Dynamic이고 나머지 배경은 모두 Static. 

라이트맵의 Auto Generate 는 꺼 놓은 상태. 



이제 여기(Window / Lighting/Setting)서 Realtime 라이트만 체크하고 Mixed Lighting은 꺼줍니다. 켜 놓아도 조명 설정이 Realtime이면 어차피 Mixed는 작동 안하겠지만, 그래도 확실한게 보기 좋으니까요 





라이트는 Realtime으로 두면 됩니다. 아참. 그림자는 켜 주시고요 

실시간이기 때문에 그림자 옵션은 필요한대로 만져주시면 됩니다. 

기본 옵션이 Realtime이므로 특별히 따로 만져주실건 없지요 





여기까지 하면 준비 완료입니다. 

즉 리얼타임 라이트맵을 가동시키기 위한 셋팅은 이거입니다. 

- 조명은 리얼타임으로 

- GI 적용을 원하는 오브젝트는 Static으로

- Realtime lighting 체크. Mixed lighting은 체크해도 되고 안해도 되고 상관없음. 


이렇게 하고 Lighting에서  Baking(Generate Lighting) 을 하면, 리얼타임 라이트맵이 구워집니다. 



라이트맵이 구워졌습니다. 결과를 보시죠 



왼쪽부터, 약간 바닥에 녹색이 묻어납니다. 녹색 벽면에서 GI가 튕긴거죠. 

그리고 두 번때 화살표 보시면, 바닥에 묻어난 녹색이 뭔가 부자연스럽습니다. 


그리고 오른쪽에는 약하지만 아주 연하게 붉은 끼가 묻어난 것 같아(?) 보입니다. 


이럴땐 Static한 물체를 옮겨보면 잘 알 수 있습니다 .




옮겨보니 확실히 GI가 바닥에 구워진 것을 볼 수 있습니다. 아마 바닥 말고 나머지 오브젝트 들에게도 GI가 구워졌겠지요 

뭔가 바닥이 좀 해상도가 낮아 보이죠? 그래서 부자연스러운 녹색 번짐이 일어났던 것입니다. 


리얼타임 라이트맵의 원리를 조금 더 훔쳐보자면.. 


 



이 쪽을 봐 주면 이해하기 편합니다. 


우선 구워놓은 이미지를 기반으로 Systems을 보죠 



System을 보면, 뭔가 사각형들이 보입니다. (이게 투명으로 보이시는 분들은 아티스트 분들입니다) 

제가 임시로 1m  (유니티의 1유닛) 짜리 박스를 만들어서 올려봤습니다. 녹색으로 보이는 것이 그것이지요 


그걸 올려보면... 체크무늬 4개가 1미터임을 알 수 있습니다. 

따지자면 2*2 로 되어 있는거죠 

즉 퀄리티를 올리고 싶으시면 간단하게 Indirect Resolution 을 올리시면 됩니다. 쉽지요 



이건 여기와 연관이 있습니다 



라이트맵을 리얼타임으로 하면 오직 하나만 옵션이 켜지는데, 이 옵션을 보면 1유닛당 2텍셀이라고 되어 있습죠 

즉 이 단위를 의미하는 것이고, 이게 라이트맵의 정밀도를 의미합니다. 



그래서 이걸 일단 보시면 클러스터링이 이 정도 크기로 잘라져 있습니다. 이게 GI가 연산되는 기본 단위라고 보시면 대충 맞는데요 



이 단위에 따라 Lit (라이트) Clustering이 되신걸 보실 수 있습니다. 



그래서 이 정보를 바탕으로 Indirect GI 가 생성되신걸 보실 수 있습니다. 


즉 정밀도를 2에서 4로 높이면 클러스터가 1/2로 작아지고,  GI 계산이 더 정밀해지는 거죠 




그리고 이 클러스터링을 이용한 GI가 '리얼타임' 인 이유는

클러스터끼리의 GI 연관 속성들이 저장되어 있다고 생각하시면 간단한데, 덕분에 조명이 바뀌거나 텍스쳐의  Emission을 올리면 그게 GI에 실시간으로 영향을 준다는 것입니다. 


그래서 아래와 같은 것이 가능해집니다.