무버블 라이트

무버블, 이동가능한 라이트에 대한 일반적인 정보입니다.

Windows
MacOS
Linux

lighting_overview_banner_001.png

Movable Lights (무버블 라이트)는 완벽히 동적인 빛과 그림자를 드리우며, 위치나 방향, 색, 밝기, 감쇠, 반경 등 그 모든 프로퍼티를 변경할 수 있습니다. 여기서 나오는 라이트는 라이트 맵에 구워넣지 않으며, 현재 간접광을 받을 수 없습니다.

섀도잉

그림자를 드리우도록 설정된 무버블 라이트는 전체 씬 다이내믹 섀도를 사용하기에 퍼포먼스 비용이 엄청납니다. 퍼포먼스에 가장 큰 영향을 끼치는 부분은 라이트에 영향받는 메시의 갯수와, 해당 메시의 트라이앵글 수 입니다. 즉 커다란 반경에 그림자를 드리우는 무버블 라이트는 반경이 작은 무버블 라이트보다 비용이 몇 배가 될 수 있다는 뜻입니다.

사용법

어느 라이트든지 Transform (트랜스폼) 카테고리 아래 보면 Mobility (모빌리티) 이라는 풀다운 프로퍼티가 있습니다. 이 옵션을 Movable (무버블)로 바꿉니다. 이 프로퍼티는 블루프린트에 추가된 라이트 컴포넌트에도 나타납니다.

ML_movableProp.png

섀도 맵 캐시

포인트 / 스포트 라이트가 움직이지 않을 때, 그 라이트에 대한 섀도 맵을 저장한 뒤 다음 프레임에 재사용할 수 있습니다. 그러면 배경이 잘 움직이지 않는 게임에서 무버블 포인트 / 스포트 라이트의 그림자 비용을 크게 줄일 수 있습니다. 여기서는 언리얼 엔진 4 (UE4) 프로젝트에서 그 기능을 사용하는 방법을 알아보겠습니다.

섀도 맵 캐시 & 퍼포먼스

Shadow Map Caching (섀도 맵 캐시) 기능은 어느 UE4 프로젝트에서든 자동 활성화 가능합니다. 섀도 맵 캐시를 사용했을 때의 퍼포먼스를 확인해 보려면, 다음과 같은 방법으로 섀도 맵 캐시 기능을 껐다켰다 하면 됩니다:

다음 섀도 맵 캐시 데모에서는 Sun Temple 프로젝트가 사용되었습니다. 에픽 게임스 런처의 학습 탭에서 이 맵을 받으실 수 있습니다.

  1. 프로젝트의 레벨에서 다이내믹 섀도를 드리우도록 하고픈 라이트를 전부 선택합니다.

    SMC_Select_All_Lights.png

  2. 라이트의 모빌리티무버블 로 설정하고 그림자 드리우기 옵션이 켜졌는지 확인합니다.

    SMC_Set_Mob_Shadow_Cast.png

  3. 물결표 (`) 키를 눌러 콘솔 창을 열고 Stat Shadowrendering 이라 입력하면 현재 다이내믹 섀도 비용을 볼 수 있습니다.

    SMC_Console_ShadowRendering.png

  4. 다시 물결표 (\) 키를 눌러 <strong>콘솔</strong> 창을 열고 r.Shadow.CacheWholeSceneShadows 0` 이라 입력하여 다이내믹 섀도 캐시 기능을 끕니다.

    SMC_Disable_Shadow_Cache.png

    CallCountInclusiveAug 부분의 숫자를 유심히 봐주세요.

  5. 이제 물결표 키를 한 번 더 눌러 콘솔 창을 열고 r.Shadow.CacheWholeSceneShadows 1 이라 입력하여 섀도 캐시 기능을 다시 켭니다. CallCountInclusiveAug 숫자를 비교해 보면 이 기능이 다이내믹 섀도 퍼포먼스에 끼치는 영향을 확인할 수 있습니다.

    Shadow Caching On

    Shadow Caching Off

퍼포먼스

섀도 맵 캐시 기능은 퍼포먼스에 엄청난 영향을 끼칩니다. NVIDIA 970 GTX GPU 에서 1920x1200 해상도로 이 최적화를 테스트해 본 결과는 다음과 같습니다.

  • 이 기능을 켜기 전, 그림자를 드리우는 포인트 라이트가 셋 있는 환경에서 캐시가 없는 경우 섀도 뎁스를 렌더링하는 데 걸린 시간은 14.89ms 입니다.

  • Cached Shadow Maps (섀도 맵 캐시) 기능을 켠 상태에서, 똑같은 렌더링 작업에 걸린 시간은 .9ms, 약 16 배 빠른 것입니다!

    참고로 포인트 라이트 33 개의 기여 부분을 렌더링하는 데는 여전히 2ms 가 걸리는데, 이 부분은 다른 식으로 최적화시킬 수는 있지만 이러한 변화에는 영향받지 않습니다.

  • 섀도 맵 캐시에 사용되는 최대 메모리 양은 r.Shadow.WholeSceneShadowCacheMb 로 조절할 수 있습니다.

한계

섀도 맵 캐시 기능이 UE4 프로젝트의 다이내믹 섀도 비용을 낮춰주기는 하지만, 지원되지 않는 기능과 함께 썼을 때 렌더링 부작용을 일으키게 되는 한계점이 몇 가지 있습니다. 여기서는 섀도 맵 캐시의 한계는 무엇이고 그와 관련해서 무엇을 할 수 있는지 알아보겠습니다.

  • 기본적으로 오브젝트가 다음 요건을 충족했을 때만 캐시가 가능합니다:

    • 프리미티브의 모빌리티스태틱 또는 스테이셔너리 여야 합니다.

    • 레벨에 사용되는 머티리얼이 World Position Offset 을 사용하지 않아야 합니다.

    • 라이트는 포인트 또는 스포트 라이트여야 하고, 그 모빌리티무버블 로 설정되어 있으며, 그림자 드리우기 옵션이 켜져 있어야 합니다.

    • 라이트가 한 곳에 있어야 합니다.

    • 애니메이팅 Tessellation 또는 Pixel Depth Offset 을 사용하는 머티리얼은 그림자의 뎁스를 캐시에 저장할 때 부작용이 생길 수 있습니다.

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback