본문 바로가기
기타 공부하기

언리얼 쉐도우를 분석해 봅시다

by 대마왕J 2019. 12. 15.

언리얼은 라이트별 쉐도우도 다릅니다. 

꽤 여러 종류의 라이트가 있고 쉐도우도 꽤나 나눠져 있어서, 각자의 특성이나 퍼포먼스도 전혀 다르게 동작합니다. 

이것들은 복합적으로 움직일 수도 있고, 따로 동작하기도 하는데다가 서로 미묘하게 엉켜 있을때도 있어서 보기가 쉽지 않기도 하죠. 


이것들을 하나하나 알아 두는 것이 퍼포먼스에도 퀄리티에도 도움이 됩니다. 


사전준비



일단 스태틱 오브젝트로 된 박스 두 개를 배치합니다. 스카이라이트나 포그 계열들은 끄고, 포스트 프로세스들도 날려봤습니다. 

그리고 Direct 라이트 하나 배치. 



라이트는 일단 시작으로 무버블라이트부터 시작합니다. 





무버블 ---------------------------------------




보통 무버블을 많이 쓰진 않습니다. 실시간으로 라이트 각도가 막 변하거나, 실시간으로 움직이는 오브젝트가 거의 전부일때 외엔 말이죠. 


어쨌거나 모두 실시간으로 움직이는 라이트입니다. 당연히 계산양이 가장 많죠 

그림자는 캐스캐이드 셰도우맵 (CSM) 입니다 




캐스케이드 셰도우맵의 해상도는 엔진세팅에서의 퀄리티와




셰도우 맵의 거리 옵션에서 제어할 수 있습니다. 한정된 맵을 사용해야 하기 때문에 거리가 작을수록 선명도는 올라가지요 

대신 너무 작게 하면 그림자가 다 짤리니 조심





위 옵션을 보면 거리가 9142 , 그림자 캐스케이드 (거리별로 크기가 다른 해상도의 그림자맵) 이 4개, 지수가 그 다음에 있고, 각 캐스캐이드별 블렌딩을 0로 해주면 아래처럼 경계면을 볼 수 있게 됩니다. 







스태틱 ---------------------------------------


가장 가벼운 라이트. 라이트맵(텍스쳐) 로 구워진 그림자를 사용합니다. 당연히 움직이는 것이고 뭐고 안됨





그냥 라이트를 스태틱으로 해서 구워봤습니다. 괴에에에엥장히 지글대는군요. 

이거 .. 라이트맵 해상도가 64가 기본이어서 그렇습니다. 


오브젝트를 선택하고, 라이트 항목에서 라이트맵 해상도를 올려주도록 합시다.



올려주니 좋군요 . 바닥에 GI까지 보입니다. 무버블에서는 없었던 GI가 가동됩니다.



뿐만아니라, 볼류메틱 라이트맵까지 가동됩니다. 

볼류메틱 라이트맵은 공간에 SH로 구워놓는 라이팅으로, 다이나믹 오브젝트가 영향을 받을 수 있는 라이트맵입니다. [각주:1]






SH 라이트의 특징답게 희미하게 음영이 먹고 있습니다. 오브젝트가 커지면 정밀하게 나오겠지요 






스테이셔너리 ---------------------------------------



스테이셔너리를 맨 마지막으로 뺀 이유는 복잡하기 때문입니다. 

일단 스테이셔너리는 중간 정도의 무게로, 


라이트가 움직이지는 않는다는 조건으로 만들어집니다. 대신 색이나 빛의 강도 정도는 실시간으로 조절 가능합니다. 




스테이셔너리 라이트에서의 스태틱 오브젝트



스테이셔너리 라이트의 그림자는 재미있는것이, 그림자가 디스턴스 필드 셰도우로 되어 있습니다. 

디스턴스 필드는 일종의 거리를 그라디언트로 구현해 놓고 일정 부분까지의 한계치를 정해 그려주는 그림자 같은 것으로, 

이 기능을 이용하면 굉장한 저해상도 텍스쳐에서도 (상대적으로) 깔끔한 그림자를 표현할 수 있게 됩니다. 

단점이 있다면 세부적인 디테일이 좀 뭉개진다는건데, 어쨌건 가성비로 따지면 상당히 괜찮습니다. 




일단 여기서 밝기와 색을 바꿀 수 있습니다. 회전 등은 안된다는걸 주의하시길. 

그리고 한 오브젝트에 4개 이상 겹치면 안됩니다. 각 RGBA 채널당 할당되기 때문입니다. 



4개 이상 겹칠때에는 나오긴 나오지만, 무버블로 처리됩니다. X 자를 확인하시길


그리고 이 라이트는 스테이셔너리 라이트 오버랩 항목에서 볼 수 있습니다. 




스테이셔너리 라이트에서의 무버블 오브젝트



그런데 여기에서 무버블 오브젝트가 끼어 있다면 말입니다...


무버블 라이트에서는 그냥 실시간 캐스케이드 그림자가 나오고,

스태틱 라이트에서는 라이트맵이 작동해서 무버블 오브젝트에게는 SH 라이트만 받는데 

스테이셔너리 라이트는 .. 



실시간 그림자가 받아지고 드리워지긴 합니다. 

근데 이 그림자는 캐스케이드도 아니고, '퍼 오브젝트 셰도우' 라고 하는 녀석입니다. 

메뉴얼에 따르면 퍼 오브젝트 셰도우는 각자의 프러스텀을 가지고 있으며, 아래와 같이 볼 수 있습니다. 



메뉴얼에 따르면 퍼 오브젝트 셰도우는, 

받는용의 셰도우와 뿌리는용의 셰도우, 두 종류의 다이나믹 셰도우를 생성해서 디스턴스 필드 셰도우에 통합된다고 합니다. 


그래서 실시간 라이트와 베이크 라이트가 통합되어 보입니다. 

per object shadow 


퍼 오브젝트 셰도우는 제어하는 메뉴가 따로 나와 있지 않습니다. 

` 키로 콘솔창을 열고 콘솔로 제어해야 하는데요, 

r.Shadow.FadeResolution - controls how big the light has to be on the screen before it *starts* to fade out.(주 : 이 수는 작아야 효과가 좋습니다. 20 정도를 넣어보세요)

r.Shadow.MinResolution - controls how big the light has to be on the screen before it *finishes* fading out, at which point it no longer has cost. (주 : 이 수는 작아야 효과가 좋습니다. 5나 10 정도를 넣어보세요)





스테이셔너리 라이트에서의 캐스케이드 셰도우 맵


스테이셔너리 라이트는 라이트맵과 실시간 라이트를 적절히 섞어서 사용할 수 있는 라이트 모델입니다. [각주:2]

즉 가까운 거리에서는 캐스캐이드 셰도우 (실시간 셰도우) 를 쓰고 , 지정된 거리 이상에서는 디스턴스 필드 셰도우맵을 사용한다는 것입니다. 



이것은 디렉셔널 라이트를 선택하고 캐스케이드 셰도우 맵 옵션의 다이나믹 셰도우 거리 옵션을 늘려주면 자동으로 동작하며, 

이 거리 내에서는 스태틱 오브젝트에 드리워진 그림자가 다이나믹 셰도우로 동작합니다. 

흔들거려야 하는 나무라던가 움직여야 하는 놈한테는 유리할 듯 하네요 


단 무버블 오브젝트는 여전히 퍼 오브젝트 셰도우로 동작합니다. 



  1. 유니티에서는 라이트 프로브라고 부릅니다. [본문으로]
  2. 유니티에서의 믹스드 라이트맵과 같다고 볼 수 있습니다. [본문으로]
반응형

댓글