그냥 게임개발자

개발일지_015(언리얼엔진)볼륨 본문

엔진스터디

개발일지_015(언리얼엔진)볼륨

sudoju 2021. 11. 28. 17:32

- 볼륨이란?

- 라이트매스 볼륨 사용

- 컬 디스턴스 볼륨 사용

 

볼륨 사용에 대해 알아보기 전에 볼륨이란 무엇일까?

볼륨이란 언리얼에 배치에 다양한 일을 수행할 수 있는 특정한 액터이다.

플레이어가 갈 수 있는 곳과 갈 수 없는 곳을 결정하는 것부터 사운드 리버브 방식까지 언리얼의 기능상 상호작용할 수 있는 많은 요소가 사실 볼륨으로 제어가 된다.

볼륨은 아무렇게나 원하는 것을 레벨에 배치할 수 있다.

이번 포스트에서는 라이트 매스 볼륨과 컬 디스턴스 볼륨만 다룰 텐데 이 두가지 볼륨만 가지고도 언리얼에서 엄청나게 다양한 것을 할 수 있다.

 

라이트 매스 볼륨은 시뮬레이션의 경계를 정하여 라이트 매스가 계산할 가장 큰 영역과 작은 영역을 결정한다.

라이트매스 볼륨을 레벨에 두지 않으면 결국 라이트를 전혀 받지 않는 영역이나 레벨에서 플레이가 가능하지 않은 영역에 상당량의 연산 시간을 낭비하게 될 수도 있다.

라이트매스 볼륨을 추가하면 플레이어가 보거나 상호작용하는 영역만 라이팅이 계산이 되므로 실질적으로 계산이 필요한 양을 줄여서 실제 레벨 라이트를 계산하는데 걸리는 시간을 줄이는 데 도움이 된다.

 

라이트 매스 볼륨을 적용해보자.

라이트 매스 임포턴스 볼륨의 역할은 캐릭터와 같은 동적 오브젝트에게 정적으로 라이팅되는 환경에 대해 알려주는 것이다.

현실에서는 뭔가 움직이면 빛도 조금 움직이는 것이 보이는데, 그 이유는 빛이 완전 동적이며 우리가 빛과 상호작용하기 때문이다.

안타깝게도 게임에서는 아직 완전히 상호작용 가능한 다이내믹 라이팅을 만들어낼 힘이 없다.

라이트와 섀도 맵 안에 라이팅을 굽기는 한다.

그러면 모양도 좋고 실행도 정말 잘 되는 라이트가 나오지만, 그건 스태틱이라 움직이지도 않고 업데이트도 되지 않는다.

오브젝트도 라이트와 상호작용을 하지 못하는데 그 이유는 라이트에 대해 알지 못하기 때문이다.

그래서 이 문제를 해결하기 위해 소형 라이팅 프로브들을 레벨 곳곳에 배치했다.

그것을 확인하기 위해서는 표시 -> 시각화 -> 볼륨 라이팅 샘플을 누르면 확인할 수 있다.

이쁘다 이뻐

보시다시피 씬에서 볼 수 있는 볼륨 라이팅 샘플은 각각 다른 강도의 색상을 지녔다.

이 샘플들은 각각 이 캐릭터들에게 배치된 라이팅에 대해 알려준다.

이 정보는 다이내믹 메시가 이 정보를 받도록, 또는 이 작은 라이팅 볼륨 샘플과 여기 배치된 샘플들로부터 어떤 색상을 띠어야 하는지 알려주는 것인데 이게 다 라이트매스 임포턴스 볼륨 덕분이다.

 

 

라이트매스 캐릭터 인디렉트 디테일 볼륨도 알아보자.

인디렉트 디테일 볼륨의 역할은 특정 볼륨에 배치된 샘플 숫자를 증가시키는 것이다.

방금 전보다 라이팅 샘플이 더 훨씬 많다.

인디렉트 캐릭터 라이팅 볼륨은 엘리베이터에 샘플을 두는 작업 등을 해야 할 때 사용한다.

보통 무슨 일이 벌어지냐면 이 작은 샘플들 각각 지오메트리가 있는 곳 위로 배치가 된다.

 

이게 무슨 말이냐면 만약 지금 스샷과 보이는 캐릭터를 어두운 곳에 배치한다고 치자.

왼쪽에 있는 캐릭터는 전혀 보이지 않을 것이다.

그렇기에 인디렉트 캐릭터 라이팅 볼륨을 여기다가 추가를 해주면 그러면 라이트매스가 그 볼륨에 샘플 다수가 있는지 확인하게 된다.

그래서 엘리베이터 같은 플레이어가 긴 영역을 따라 이동하는 구간에 사용하는 것이 적합하다.

 

또한 디테일 패널에 Static Lighting Level Scale을 이 값을 증가시키거나 감소시키면 라이팅 볼륨 샘플이 배치된 밀도 또한 감소하거나 증가한다.

그렇기에 높은 디테일의 라이팅이 필요하다면 감소시키면 된다.

하지만 메모리가 많이 요구되는 작업이기 때문에 항상 조심해서 다뤄야 한다.

 

다음은 컬 디스턴스 볼륨이다.

특정 크기나 카메라 거리를 초과한 오브젝트의 렌더링을 멈추는 최적화 툴이다.

오브젝트의 모든 것을 컬링할 수단보다는 그냥 기본값처럼 사용한다.

프로젝트의 전체 오브젝트가 카메라 가까이나 멀리서 나타나도록 만들텐데 그 이유는 컬 디스턴스 볼륨이 오브젝트 하나하나를 완벽하게 구하지는 못하기 때문이다.

그럼 바로 확인해보자.

컬 디스턴스 볼륨에 3개의 배열이 있다.

여기에 입력은 원하는 만큼 둘 수 있다.

이 세팅의 역할을 오브젝트가 렌더링 될 지, 아니면 렌더링을 멈출지의 기준이 될 크기와 거리를 결정하는 것이다.

첫번째 배열 인덱스는 사이즈 0.0부터 100 언리얼 유닛까지 혹은 100센티미터의 크기까지 이 조건에 부합하는 레벨 내 오브젝트가 카메라로부터 350 유닛 이상의 거리만큼 떨어질 경우

안보인다...ㅎ

오 신기해!!!!

이런 역할이구나

와와와아아아아ㅏ

대박이다...

이런 기능 너무 멋져요.,..

다시 설명하자면 배열0 번째 즉 방금 위에서 본 스샷의 피라미드의 유닛이 350만큼 떨어지면 사라진다.

2번째 피라미드도 750 유닛 떨어지면 렌더링이 사라진다.

하지만 마지막은 사이즈는 1000인데 컬 디스턴스가 0.0이다.

즉 1000 유닛보다 큰 오브젝트는 전혀 컬링이 되지 않는다는 것이다.

컬 디스턴스를 강제로 거리 적용을 하고 싶으면

오브젝트를 선택해 최소 드로 디스턴스와 현재 최대 드로 디스턴스를 강제로 설정해주면 된다.