라이트의 모빌리티를 보면 스태틱, 스테이셔너리, 무버블 이렇게 세 가지가 있다.
스태틱의 경우 렌더링을 미리 해놓아야하기 때문에, 변경시 왼쪽위와 같이 라이팅 빌드가 필요하다고 한다.
엔진에서 그림자를 연산하는 과정은 상당히 많은 계산이 필요한 과정이다.
Light가 스태틱인 상태에서 각도를 변환시 그림자에는 위 사진처럼 preview라는 글씨가 나오게 된다. 이는 라이팅 빌드를 하였을 때 보여질 미리보기 그림자라는 의미이다.
라이팅을 빌드하게 되면 그림자는 그림자가 닿는 바닥이나 사물의 텍스처에 적용된다. 따라서 실제로 플레이 되었을 때에는 그림자로써가 아니라 그림자 모양으로 텍스처가 수정되었다고 보면 된다.
이렇게 빛의 정보와 그림자들에 대해 빌드한 것들을 라이트맵이라고 한다. 라이트를 적용한 것처럼 보이게하는 텍스처라는 의미이다.
이러한 방식으로 미리 빌드하는 것이다보니 성능면에서는 라이팅맵을 빌드하는 것이 실시간으로 라이팅 계산을 하지 않으므로 우수하다.
반대로 무버블 라이트는 실시간으로 라이트를 계산한다. 실시간으로 계산하는 것으로 성능 면에서도 좋지 않겠지만, 그림자의 퀄리티도 스태틱에 비해서 비교적 좋지 않다.
따라서 무버블 라이트의 경우 최적화가 많이 필요하다. 위 사진과 같이 Cascaded Show Maps라는 설정에서, 최적화와 관련된 설정들을 조절할 수 있다.
Dynamic Shadow는 위 사진처럼 카메라를 기준으로 그림자를 계산하는 거리를 조절할 수 있다.
Num Dynamic Shadow Cascades는 카메라로부터 가까운 곳부터 고사양에서 저사양으로 단계별로 그림자를 구분하여 표현하는 것이다. 즉 범위 내의 그림자를 몇 단계로 표현할 것인지를 지정한다.
단계를 1로 설정하면 저퀄리티의 그림자 하나의 단계만으로 표현하고 단계의 개수를 높일수록 고퀄리티의 그림자와 저퀄리티를 나누어 부하가 커진다.
스테이셔너리 라이트로 라이팅 빌드 과정이 필요는 하지만, 라이트의 indencity나 color등 일부 값들을 동적으로 조정가능하다.
스테이셔너리 라이트의 경우 5개 이상의 라이트가 Attenuation Radius가 겹쳐 동시에 존재하면, 위 사진처럼 X표시가 되어있는 부분의 경우 무버블로 처리된다.
위 사진에서는 4개의 라이트가 있는데, 5개로 언급한 것은 사진 전체를 비추고 있는 directional light도 포함되기 때문이다.
이렇게 directional light 하나를 추가하면 또 하나의 라이트가 무버블처리가 되는 것을 확인할 수 있다.
뷰모드 → 최적화 뷰모드 → 스테이셔너리 라이트 겹침 을 이용해서 겹쳐있는 스테이셔너리 라이트의 부분을 확인할 수 있다.
라이트는 애플리케이션의 상황에 따라서 적당한 최적화가 필요하다. 스태틱 라이트가 성능과 퀄리티가 좋지만, 게임과 같은 경우 사물과의 상호작용이나 물리적 요소가 움직이면서 라이트가 바뀌는 경우가 불가피하게 존재할 수 있다. 따라서 스태틱보다는 스테이셔너리 라이트와 같은 요소들을 적절히 이용하는 방식을 사용한다.
이렇게 큐브와 같은 오브젝트를 설치하고 Actor Hidden In Game을 통해 게임에서 렌더링하지 않게할 수 있는데, 이러한 경우 그냥 빌드를 하게 되면, 큐브의 그림자가 빌드되어 왼쪽 사진과 같이 불필요한 그림자가 생성되는 상황이 발생한다.
이러한 경우 해당 오브젝트에서(위와 같은 경우 큐브) 위 사진에 보이는 Cast Shadow의 체크를 해제하고 라이트해야한다.
만약 잘못 라이트맵을 만들었을 경우, 월드 세팅에서 라이트 매스 옵션의 '프리컴퓨티드 라이팅 강제 비활성화' 체크 후 다시 라이트맵을 빌드하여 잘못 계산한 라이트맵을 제거하고, 프리컴퓨티드 라이팅 강제 비활성화 옵션을 체크 해제하여 다시 빌드하면 된다.
'개발 · 컴퓨터공학' 카테고리의 다른 글
Learning Unreal 4 언리얼 공부일지 - 언리얼 엔진 최적화에 대해서 (0) | 2022.04.02 |
---|---|
OpenGL 공부일지 - OpenGL Super Bible 버텍스 프로세싱 및 드로잉 커맨드 - 5 (0) | 2022.04.01 |
Learning Unreal 4 언리얼 공부일지 - [블루프린트] Level 이동과 시퀀서의 Fade 기능을 알아보자 (0) | 2022.03.30 |
OpenGL 공부일지 - OpenGL Super Bible 버텍스 프로세싱 및 드로잉 커맨드 - 4 (0) | 2022.03.29 |
Learning Unreal 4 언리얼 공부일지 - 나이아가라 시스템 사용해보기 (0) | 2022.03.28 |