243's 게임&애니메이션 Archive

unreal engine

언리얼 라이팅 기초부터 시작하기! -1-

243 2021. 8. 19. 11:37

라이트를 저번에 한 번 다뤘는데 사실 제대로 된 포스팅이 아니라 그냥 내가 배운 거를 안까먹게 적어둔 메모장(...)에 가까워서 좀 더 라이팅에 관한 글을 기초부터 작성하는 것이 좋을 것 같다는 생각이 들었습니다.

 

개인적으로 요새 라이팅 렌더에 관심이 많기도 하고요.

 

언리얼5의 루멘은 제가 아직 공부를 안해봤지만 얼른 써보고 싶네요.

 

하지만 그 전에 언리얼4의 라이트조차 잘 안다고 하지 못하는 사람이기에..

이번 시리즈로 한 번 기초부터 심화까지 싹 잡고 갑시다 !






-------------------------------------






 

오늘의 예제가 될 Modular House 라는 에셋입니다. 마켓플레이스에서 언젠가 받은 것 같음




 

언리얼 기본 라이트 중 하나인 디렉셔널 라이트를 레벨에 가져다 놓았습니다.

태양의 기능을 하는 라이트죠. 위치값을 가지지 않고 방향성만 가집니다.



 

라이트의 Mobility는 아주아주 중요합니다. 

스태틱, 스테이셔너리, 무버블이 있는데 

 

스태틱은 라이트와 그림자를 맵에 직접 구워 텍스처 자체를 변형시키는 것이고

무버블은 다이내믹 라이트라고도 하죠, 실시간으로 라이트와 그림자가 구현되는 방식입니다.

 

스태틱 라이트

 

  • 미리 굽는 방식이기 때문에 비용이 매우 저렴하다
  • 반사광, GI, 확산광 표현 가능
  • 뭔갈 바꾸면 빌드를 다시 해야함
  • 섀도우 퀄리티가 좋지만 흐리게 보이기도 함
  • 월드 세팅에서 섬세하게 퀄리티 조절 가능



무버블 라이트

 

  • 실시간으로 결과물을 볼 수 있음
  • 스태틱에 비해 매우 무겁다
  • 반사광, GI, 확산광 x
  • 섀도우가 스태틱에 윤곽이 뚜렷하고 선명하다



 

디렉셔널 라이트를 스태틱으로 설정하고 빌드한 모습입니다.

제대로 보기 위해 스카이라이트나 다른 건 넣지 않아 그림자가 매우 까맣지만

벽쪽을 보면 자연스럽게 반사광과 GI가 묻어있는 것을 볼 수 있습니다.

 

사실 디렉셔널 라이트에는 스테이셔너리를 사용하는 것이 보편적이라고 합니다.

 

스테이셔너리는 스태틱과 무버블의 장점을 합친 유형이라고 볼 수 있습니다.

 

반사광을 제공하고, 그림자가 선명하기 때문에 이 두가지가 모두 필요한 상황에서 사용됩니다.




 

 

스테이셔너리로 바꾸고 빌드한 모습입니다. 

GI가 있고 그림자가 스태틱 라이트보다 명확해보입니다.

 

그림자를 보면 이 그림자는 스태틱인데요, 다이내믹 섀도우로 바꿀 수 있습니다.




 

스테이셔너리 라이트로 설정했을 경우

디렉셔널 라이트의 캐스캐이드 섀도우 맵 탭에서 Dynamic Shadow Distance Stationary Light만 활성화되어있고 수치가 0인데, 이는 다이나믹 그림자가 하나도 없다는 뜻입니다.

 

일단 캐스캐이드 섀도우는 단계적으로 다이내믹 섀도우를 생성해서 보여주는 시스템입니다.

 

스태틱 섀도우는 움직이지 않기 때문에 실외환경에 적합하지 않습니다.

따라서 카메라로부터 얼마정도 떨어진 위치까지는 다이내믹 섀도우를 생성하도록 설정할 수 있습니다.



 

Dynamic Shadow Distance Stationary Light 수치를 주면 비활성화되어있던 탭들이 활성화됩니다.

 

2500으로 설정했는데, 카메라로부터 2500까지는 다이나믹 섀도우로 처리하겠다는 뜻입니다.

수치를 몇으로 하느냐에 따라 그림자 퀄리티가 달라집니다.

 

따라서 아까의 뭉뚱한 스태틱 섀도우에서 좀 더 윤곽이 잡힌 그림자로 바뀌었습니다.




 

카메라로부터 멀어질 수록 단계적으로 퀄리티가 낮은 그림자를 송출하기 때문에 최적화에 도움이 되는 시스템입니다.

 

Num Dynamic Shadow Cascades 항목은 그림자 퀄리티를 몇단계로 쪼갤 것이냐를 정하는 항목입니다.



무버블 라이트의 경우, 

이렇게 가장 위의 항목이 활성화됩니다.

무버블 라이트의 경우 카메라로부터의 거리가 정해준 수치보다 떨어지면 그림자가 생성되지 않습니다.

 

 

무버블일 때 

 

 

떨어지니 그림자가 사라진다.

무버블 라이트의 경우 스테이셔너리와 다르게 일정 수치 이상이 되면 그림자가 사라져버리기 때문에 스테이셔너리처럼 일정 거리부터 베이크 된 섀도우를 사용하고 싶을 경우에는 Distance Field Shadows 를 사용할 수 있습니다.

 

 

 

 

사용하기 전에 프로젝트 세팅에서 Generate Mesh Distance Fields를 활성화해주어야합니다. (재시작도 해야함ㅡㅡ)

 

 

Show - Visualize - Mesh DistanceField 를 체크하면 디스턴스 필드를 볼 수 있는데요,

 

 

이렇게 생겼습니다. 모든 모델에 대해 텍스처를 생성하고 그 텍스처를 바탕으로 유사한 모델을 생성한 것입니다.

디스턴스 필드 섀도우는 이 모델을 바탕으로 생성된 그림자를 의미합니다.

일반적인 스태틱 섀도우와는 다르게 최적화에 더욱 적합합니다. 하지만 그만큼 퀄리티가 낮기 때문에 적절한 거리에서 보이게끔 설정해야함.

 

 

 

 

디스턴스 필드 섀도우를 껐을 때. 다이내믹 그림자 생성을 2000까지로 설정했기 때문에 2001부터는 그림자가 사라진다.

 

 

디스턴스 필드 섀도우를 켰을 때. 

 

 

 

디스턴스 항목은 디스턴스 필드 섀도우가 카메라로부터 얼마까지 존재하는지를 결정한다.

 

 

 

5000으로 설정했기 때문에 5001부터는 사라짐










디스턴스 필드 맵을 활용한 또다른 기능이 있는데,

Distance Field Ambient Occlusion에 대해 알아봅시다.




 

아까 프로젝트 세팅에서 메시 디스턴스 필드를 생성하는 항목을 체크했기 때문에 

간단하게 스카이 라이트를 씬에 놓고 무버블로 설정하면 됩니다.



 

스테이셔너리일 때.. 비교해보면 차이가 확 납니다.

 

이 기능은 디스턴스 필드 메쉬를 사용해 가짜 반사광인 라이트 앰비언트 오클루전을 만드는 것 (이라고 합니다.^^)

 

무버블 라이트는 반사광을 생성하지 않으니 저렴하게 흉내내는 기능이기 때문에 쓸 때 안 쓸 때(?)를 잘 구분해서 사용하면 좋을 것 같습니다.





---------------------





오늘은 일단 여기까지 !!

 

라고 해도 몇일동안 짬짬이 쓴 거지만