그냥 게임개발자

개발일지_014(언리얼엔진)라이팅, 섀도잉, 포스트 프로세스 본문

엔진스터디

개발일지_014(언리얼엔진)라이팅, 섀도잉, 포스트 프로세스

sudoju 2021. 11. 26. 02:00

라이팅 모빌리티 타입에는 3가지가 있다.

Static, Stationary, Movable이다.

각 모빌리티 유형에는 라이팅의 성능 면에서 서로 다른 기능이 있다.

 

Static

스태틱이 가장 저렴하고, 씬에서 아무것도 하지 못하는 라이팅을 의미한다.

라이팅이 게임 시작 전에 구워져서 형태나 모양을 전혀 바꿀 수가 없다.

정말 퀄리티 있게 보이면서 정말 빠르게 시작된다.

 

Stationary

스테이셔너리 라이트는 씬과 상호작용을 할 수 있어 이 라이트로 인해 생기는 섀도는 움직이는 오브젝트가 해당 섀도와 어우러지게 해 준다.

하지만 스테이셔너리 라이트는 비용이 살짝 비싸다.

그 이유는 런타임에서 스테이셔너리 라이트의 라이팅 색상과 강도를 실제로 바꿀 수 있기 때문이다.

하지만 라이팅을 움직이지는 못한다.

Movable

무버블은 비용이 가장 비싸다 그 이유는 완전히 동적이기 때문이다.

라이팅에서 나오는 것들은 다 동적이기 때문에 비용이 비싸다.

라이팅 퀄리티를 설정할 수도 있는데 자신의 설정에 맞게 조절해주면 좋다.

 

■ 섀도잉

섀도잉을 하는 방법은 다양하다.

그 이유는 섀도잉을 완벽하게 해내는 방법이 사실 하나만이 아니기 때문이다.

가상 환경에서 오브젝트에 섀도잉을 할 때는 다른 방식보다 더 효과가 좋은 다른 방식보다 더 효과가 좋은 특정한 지수가 있을 텐데 예를 들어 아주 작은 표면 디테일에 섀도잉을 할 때와 씬에서 매우 큰 오브젝트를 섀도잉 할 때의 차이가 있다.

언리얼에서는 두 가지의 주요 섀도잉 유형이 있는데 스태틱 섀도와 다이내믹 섀도가 있다.

 

스태틱 섀도는 스태틱 라이트 유형에서 나오는 것으로 비용이 저렴하지만 씬 상호작용은 전혀 할 수 없다.

스태틱 섀도는 게임 속에서도 보셨을 텐데 예를 들어 그림자가 가진 캐릭터가 움직일 때 나무 같은 오브젝트 그림자가 바닥에 깔린 걸 보고 있으면 캐릭터의 그림자가 나무 그림자 위에 붕 뜬 것처럼 보일 때가 있다.

그 이유는 다이내믹 섀도가 스태틱 섀도와 상호작용을 하지 못하기 때문이다.

 

언리얼에서 또 다른 섀도 유형은 다이내믹 섀도이다.

다이내믹 섀도는 스테이셔너리와 무버블 라이트에서 나온다.

아주 특출 나게 비용이 높지만 완전히 씬 상호작용이 가능하다.

 

언리얼은 몇 가지 특이한 섀도 유형도 제공하는데 그중에는 캐스케이디드 섀도, 디스턴스 필드 섀도 그리고 컨택트 섀도가 있다.

 

이런 다양한 섀도의 예제를 시도해보자.

 

먼저 예제를 열어보자.

큐브의 그림자를 보면 아주 멋진 그림자이다.

이게 스태틱 라이트의 그림자이다.

하지만 이것을 무버블로 바꾸고 움직이면

음... 무슨 느낌인지 알 거다.

그림자가 그대로 있다.

이것은 라이팅 빌드를 할 때 스태틱 메시는 미리 구워서 나오기 때문에 씬과 상호작용을 하지 못하는 것을 보여준다.

다음 예를 보자.

이번엔 무버블의 섀도를 알아보자 큐브의 그림자가 이것도 멋지긴 한데 아까보다는 덜 멋지다.

그래도 끝부분은 부드럽고 멋진 그림자이다.

그러면 이것을 무보블로 바꾸고 움직인다면

오... 움직였다 그림자가... 씬에서 완전히 상호작용을 한다..

또한 이것은 구워진 라이팅을 전혀 사용하지 않고 완전히 다이내믹 라이트를 사용하기에 비용이 높다.

 

 

다음은 스테이셔너리의 라이팅을 보자.

 

엥?

예제가 잘못됐나 보다...

원래는 움직이는 동안에도 섀도가 생기고 원래 구웠던 섀도도 나온다고 한다.

근데 내 건 아닌가? 업데이트가 되었나 보다.

캐릭터를 움직이면 캐릭터 그림자가 무버블이라 움직이는데 스태틱 메시의 그림자랑 겹쳐지면 그냥 하나의 그림자로 보인다.

이것은 언리얼 엔진에서 위아래로 겹치는 것처럼 보이지 않고 서로 합쳐진다.

이것이 스테이셔너리 라이트 사용의 이점 중 하나인데 무슨 일이냐면 실제로는 다이내믹 섀도를 굽되 스태틱 섀도잉 시스템의 효과도 가져오는 거다.

그래서 스테이셔너리 라이트가 스태틱과 다이내믹 사이에 위치한 것인데 그 이유는 양쪽의 장점을 가져오기 때문이다.

 

이번엔 특이한 섀도 유형을 다뤄보자

첫 번째로 다뤄볼 케스케이디드 섀도인데 이 섀도는 대단한 이유가 스태틱 섀도와 다이내믹 섀도의 최고 장점들을 합칠 수 있기 때문이며 또 표시하는 방식으로 작동을 한다.

 

자세히 보면 알겠지만 카메라와 가까운 메시만 움직이고 있다.

가까이 있을 때는 완전한 다이내믹 섀도와 블렌드를 하기 때문에 정말 정말 가까이 가면 완전한 다이내믹 섀도가 된다.

멀리 떨어지면 떨어질수록 스태틱 섀도로 전환이 된다.

 

이 거리는 설정할 수도 있다.

하지만 이 섀도는 디렉셔널 라이트에서만 쓸 수 있다.

 

다음에는 디스턴스 필드 섀도이다.

 

디스턴스 필드 섀도는 메시 디스턴스 필드를 사용해 실제로 라이팅과 섀도의 상호작용을 생성해서 정말 멋진 섀도 감쇠를 만들어 내기 때문이다.

 

다이내믹 라이트로는 이런 섀도의 감쇠를 만들어 내기가 거의 불가능하다.

 

하지만 이 기능은 굉장히 비용이 높다.

포인트 라이트에서 사용할 수 있지만 그러려면 디스턴스 필드를 활성화해야 한다.

편집 > 프로젝트 세팅에서 모든 세팅을 선택한 뒤 검색 디테일에서 Distance를 검색한다.

메시 디스턴스 필드를 생성하면 프로젝트를 재시작해야 한다.

 

마지막으로 다룰 섀도 유형은 컨텍트 섀도이다.

컨텍트 섀도는 실제로 스크린 스페이스에 구성되는 섀도이기 때문이다.

이 섀도가 컨텍트 섀도이다.

굉장히 작은 디테일을 결정하고 그림자를 나타낼 때 사용한다.

보통 이런 메시의 면에서 볼 수 있는 디렉셔널 라이트의 섀도잉은 실패하기 마련인데 그 이유는 섀도의 버퍼가 이런 한정된 디테일 유형을 나타내기에 충분히 크지 않기 때문이다.

이런 자세한 디테일을 구성하려면 컨택트 섀도 시스템을 사용해야 한다.

포인트 라이트의 디테일 패널로 가서 Contact를 검색하면

Contact Shadow Length가 있다.

Contact Shadow Length 0의 섀도이다.

Contact Shadow Length 0,1의 섀도이다.

확실히 액터의 비추는 라이트가 섬세해진 것 같다.

이건 패럴랙스 오클루전 매핑을 사용하고 있는데 특정 컨택트 섀도 메서드의 작동 방식을 볼 수 있는 방법이다.

컨텍트 섀도는 게임, 영상이나 컷씬 등 멋진 섀도 디테일이 필요한 곳에 주로 사용하고 싶을 때만 사용하는 기능이며 그 이유는 이게 정말 비용이 높은 기능이기 때문이다.

실제 게임이나 프로젝트에서 이런 유형의 기능을 켜기로 결정했다면 최대한 좋은 성능의 시스템에서 실행해야 한다.

하지만 이 수치가 1에 가까워지면 이 이펙트는 망가지기 시작한다.

 

그러니 처음에는 괜찮은 결과물을 얻을 수 있지만 특정 시점부터는 망가지기 시작하니 결국 이전처럼 괜찮지 않은 그런 시점이 온다.

 

■ 포스트 프로세스

볼륨으로 처리되는 포스트 프로세싱이 렌더링을 제어한다.

성능 다수를 순식간에 잡아먹을 수 있는 구간 중 하나다.

 

예제를 보자.

와... 맵 불러왔는데.... 너무 이쁘다...

아무튼 그냥 보여주고 싶어서 사진을 가져왔다.

일단 포스트 프로세스 볼륨을 찾아보자.

포스트 프로세스 볼륨을 드래그 앤 드롭을 하자.

포스트 프로세스 볼륨 세팅에서 언바운드 프로퍼티에 체크한다.

이 프로퍼티는 이 포스트 프로세스가 레벨 어디에 배치되든 모든 포스트 프로세스 세팅에 이 포스트 프로세스를 사용해라 라고 명령하는 거다.

언바운드가 활성화되지 않으면 해야 할 일은 포스트 프로세스의 스케일을 크게 해야 하거나 특정 부분에만 배치해야 한다.

그러면 플레이어가 지금 보시는 아래에 이미지와 같이 볼륨에만 입장했을 때 포스트 프로세스가 변하게 된다.

하지만 언바운드는 이런 일을 방지한다.

여러 가지 포스트 프로세스 세팅이 있으니 여러 가지 시험해보고 적용해보자.

하지만 모바일 톤 매퍼는 모바일 프로젝트 제작에만 유용해서 이걸 데스크톱 프로젝트에 쓸 수는 있지만 실행 가능으로 만드려고 할 때 작동되지 않거나 최고의 세팅을 제공하지 않는 문제가 생길 수 있다.

그러니 모바일 프로젝트를 사용할 때만 사용해라.

근데 내 언리얼 엔진에는 없다.

암튼 그렇단다.

안티 엘리어싱 설정은 프로젝트 세팅에 있다.

하지만 포스트 프로세스 세팅을 조정할 때 명심해라.

포스트 프로세스를 많이 사용하면 사용할수록 렌더링에 드는 비용은 점점 더 높아질 거다.

이 세팅을 켰다면 FPS를 꼭 확인하고 또 본인이 구현하고자 하는 기능이 전체 렌더링 비용에서 차지하는 시간과 비용을 들일 가치가 있는지 확인해라.

다음은 볼륨과 리플렉션에 대해 배워보자 이게 마지막 챕터이니 좀만 더 참자.