에픽게임즈에서 제작한 포트나이트(Fortnite)는 액션 빌딩 게임으로, 낮과 밤의 환경이 존재하며 낮에는 나무, 벽돌, 철 등 오브젝트를 부수고 수집한 자원으로 건물 및 함정을 건설하고 밤에는 습격해 오는 몬스터를 물리치는 것이 특징입니다. 이런 역동적인 환경을 만들기 위해서 언리얼 엔진 4에 추가한 다양한 라이트, 섀도, 캐릭터 애니메이션 기능 그리고 100% 리얼타임 게임 트레일러를 제작하는데 사용된 ‘시퀀서’에 대해서도 살펴봅니다.
17. 프로젝트 렌더링 세팅은 이제 bGenerateMeshDistanceFields 라 불리며,
그 박스를 체크하고 에디터를 재시작하면 디스턴스 필드 라이팅 기능을 사용할
수 있습니다.
디스턴스 필드 생성 기능은 비동기식으로 작동합니다. 대부분의 CPU 코어를
사용하되, 에디터에서도 사용할 수 있도록 몇 개는 남겨둡니다.
더이상 디스턴스 필드 지원을 위해 반드시 닫힌 메시일 필요가 없습니다.
18. 스페큘러 오클루전
이제 하늘 표현용 스페큘러 오클루전 추정법이 생겼습니다. '디스턴스 필드 앰
비언트 오클루전' 계산시 해당 지점에서의 하늘 표시여부를 나타내는 원뿔인
굽은(bent) 노멀을 생성합니다. 이 원뿔과 리플렉션 원뿔의 교차 부분이 하늘
스페큘러에 대한 그림자 부분이 됩니다. 이를 통해 근거리에 차폐된 것에 대한
누수가 방지되며, 스크린 스페이스 한계로 인해 스크린 스페이스 리플렉션이
유효하지 않거나 어느정도 거친 머티리얼에 최적으로 작동합니다.
더이상 닫힌 메시가 아니어도 디스턴스 필드가 제한됩니다.
20. 스카이 오클루전은 하늘빛을 받은 오브젝트 주변에 멋지게 연한 그림자가 표
현되는데, 이는 구름낀 라이팅 상황에서 특히나 중요한 것으로, 보통 라이팅
미리계산 없이는 하이 퀄리티 렌더링에서 내기가 힘든 것이었습니다. 바로 디
스턴스 필드 앰비언트 오클루전이, 하루의 시간이나 환경이 언제든 변할 수
있는 완전 동적인 게임에서 이러한 문제를 해결해줍니다. 이번 4.9 에서 이
기술의 퀄리티와 퍼포먼스 향상에 많은 노력을 기울였으며, 이제 전형적인 게
임 씬의 경우 총 GPU 비용 4ms 미만으로 가능하니 중사양 PC 나 플레이스
테이션 4 수준의 하드웨어에서 출시 가능하다 생각합니다!
예전 방법은 적응형 샘플링이었기에, 평평한 표면의 작업은 덜했지만, 깨끗한
환경에서 얼룩이 많이 생기기도 했습니다.
21. 이제 적응형 샘플링을 제거할 만큼 AO 계산이 충분히 빨라졌기에, 오클루전
이 훨씬 부드러워졌습니다.
22. 주의점은 이 새로운 방법은 더욱 긴 히스토리 필터를 요하는데, 그로 인해 유
령 현상이, 특히나 그림자를 드리우는 것이 움직였을 경우에 생길 수 있습니
다. 앞으로 개선의 여지가 있는 부분입니다.
23. 퍼포먼스
디스턴스 필드 AO 는 중사양 PC 와 PS4 에서 실행 가능하도록 훨씬 속도를
높였습니다. 이제 그 비용도 훨씬 안정화되어, 오브젝트 밀도에 약간 좌우될
뿐 거의 비용이 같아졌습니다.
고정 카메라에 거의 평면 표면의 경우, 이 새로운 방법은 1.6 배 빠릅니다. 폴
리지가 있고 카메라가 빠르게 움직이는 경우, 새로운 방법은 5.5 배 빠릅니다.
PS4 에서 전체 게임 씬에 대한 디스턴스 필드 AO 비용은 3.7ms 입니다.
24. 테크니컬 디테일
주요 최적화는 카메라 주변을 따르는 글로벌 디스턴스 필드의 사용입니다. 일
반적인 오브젝트별 디스턴스 필드 전부를 몇몇 카메라 주변 볼륨 텍스처, 소
위 클립맵에 합성해 넣는 식으로 만듭니다. 새롭게 보이는 영역과 씬 변화에
영향받는 것들만 업데이트해 주면 되므로, 합성 비용은 많이 들지 않습니다.
클립맵 텍셀 크기 시각화 - 각 클립맵마다 색이 다릅니다.
25. 글로벌 디스턴스 필드는 오브젝트 디스턴스 필드보다 해상도가 낮으므로, 모
든 것에 사용할 수는 없습니다. 스카이 오클루전에 대한 콘 트레이스 계산시,
오브젝트 디스턴스 필드는 셰이딩이 이루어지는 지점 근처에서 샘플링되는
반면, 훨씬 빠른 글로벌 디스턴스 필드는 더욱 멀리서 샘플링됩니다.
26. 글로벌 디스턴스 필드 vs 오브젝트 디스턴스 필드에 대한 레이 트레이싱 시
각화입니다. 글로벌 디스턴스 필드의 표면이 얼룩덜룩해지고 얇은 오브젝트
가 사라집니다.
27.
28. 메시 디스턴스 필드를 통해 라이트로 레이 트레이스를 하는 방식의 새로운 다
이내믹 섀도잉 메소드가 생겼습니다. 날카로운 접선의 부드러운 에리어 섀도가
가능합니다!
레이 트레이스 소프트 섀도를 적용한 디렉셔널 라이트입니다.
긴 그림자는 부드러워 지며, 원거리의 셀프 섀도 디테일도 여전히 살아있습니다.
29. 포인트 / 스포트 라이트에도 통합니다. 광원의 크기와 그에 따른 반그늘 크기를 조절하는 데
'Source Radius' 가 사용됩니다.
레이 트레이스 섀도는 예전의 캐스케이드 섀도 맵(CSM) 방식보다 먼 거리에 대해서도 효율적인
계산이 가능합니다. 원거리의 그림자는 레이 트레이스로 계산하면서 근거리의 그림자는 CSM 으
로 계산하여 두 접근법의 최적 조합을 뽑아낼 수 있습니다.
레이 트레이스 섀도는 캐스케이드 섀도 맵보다 GPU 상에서 보통 20-30% 빠릅니다.
이 디스턴스 필드는 디스턴스 필드 앰비언트 오클루전 기능에 사용되는 것과 같은 데이터입니다.
라이트에서 Use RayTraced DistanceField Shadows (레이 트레이스 디스턴스 필드 섀도
사용) 옵션, 프로젝트에서 Generate Mesh Distance Fields (메시 디스턴스 필드 생성) 프로
젝트 세팅을 켜서 활성화 가능합니다.
30.
31. 이 기능으로 머티리얼과 스페이스 내 특정 지점 사이에서 가장 가까운 입체면 사이의 거리를 싸
게 구할 수 있습니다. 머티리얼 에디터에서 글로벌 디스턴스 필드 프로퍼티를 접근하는 노드가
두 개 새로 생겼습니다.
32. DistanceToNearestSurface 는 월드 스페이스 유닛으로 부호가 있는 거리를 반환합니다. 참
고로 거리는 불투명 메시 표면상에서는 항상 0 근처일 것입니다.
DistanceToNearestSurface 를 사용하면 이펙트가 가려지는 것을 피할 수 있습니다.
UE4 사용자 Roel Bartstra 가 이미 이를 활용한 재밌는 사례를 찾았습니다 - 하나는 소프트
바디 모양 내기 , 또 하나는 표면을 자동으로 피하는 흐름 맵 만들기 입니다.
모든 디스턴스 필드 기능과 마찬가지로, 이것 역시 렌더링 프로젝트 세팅에서 'Generate
Mesh Distance Fields' (메시 디스턴스 필드 생성) 옵션을 켜줘야 합니다. 디스턴스 필드 머
티리얼 접근은 셰이더 모델 5 기능입니다. 셰이더 모델 4 하드웨어 대비를 위해서는
FeatureLevelSwitch 머티리얼 노드를 사용하세요.
33. 디스턴스 필드 라이팅 최적화
디스턴스 필드 앰비언트 오클루전 및 레이 트레이스드 디스턴스 필드 섀도우 가 현 세대 콘솔과
중간 사양 PC 에서 30-50% 빨라졌습니다! 씬에 보다 사실적인 앰비언트 라이팅과 다이내믹 메
시에 에리어 섀도우를 드리울 수 있도록 해주는 기능입니다.
게다가, Intel 의 Embree 레이 트레이싱 라이브러리를 사용하여 메시 디스턴스 필드 생성 시간
도 2.5 배 빨라졌습니다. 프로젝트 세팅 중 Eight Bit Mesh Distance Fields (8비트 메시 디
스턴스 필드) 및 Compress Mesh Distance Fields (메시 디스턴스 필드 압축) 옵션을 사용
하면 메모리 사용량 역시 크게 감소합니다.
34.
35. 무버블 라이트용 섀도 맵 캐시
포인트 또는 스포트 라이트가 움직이지 않으면, 그 라이트에 대한 섀도 맵을 저장한 뒤 다음 프
레임에 재사용할 수 있습니다. 이 기능은 이제 자동으로 이루어져 배경이 잘 움직이지 않는 게임
에서는 그림자를 드리우는 무버블 포인트 / 스포트 라이트 비용 부담이 크게 줄어듭니다.
위 그림은 다이내믹 섀도를 드리우는 포인트 라이트가 33 개나 되는데,
부하가 매우 적게 걸리고 있습니다.
36. 무버블 라이트용 섀도 맵 캐시
970 GTX 에서 1920x1200 해상도로 돌렸을 때 나오는 퍼포먼스는 다음과 같습니다.
- 그림자를 드리우는 포인트 라이트 33 개를 섀도 뎁스에 렌더링할 때, 캐시가 없을 때:
14.89ms.
- 섀도 맵 캐시가 있을 때: .9ms (약 16 배 향상!)
- 참고로 33 개의 포인트 라이트가 기여하는 바를 렌더링하는 데 여전히 2ms 가 드는데, 이는
다른 방식으로 최적화시킬 수는 있지만, 이 변경사항에 영향을 받지는 않습니다.
- 캐시에 사용되는 메모리는 "Stat ShadowRendering" 하에서 볼 수 있으며, 이 씬에서는
25.6Mb 였습니다.
- 캐시에 사용되는 최대 메모리는 "r.Shadow.WholeSceneShadowCacheMb"
옵션으로 제어할 수 있습니다.
37. 무버블 라이트용 섀도 맵 캐시
한계
- 기본적으로, 캐시가 벌어지는 상황은 다음과 같습니다:
- 프리미티브의 모빌리티가 스태틱 또는 스테이셔너리 로 설정되어 있고
- 사용된 머티리얼이 월드 포지션 오프셋을 사용하지 않으며
- 라이트가 포인트 또는 스포트이고, 그림자를 드리우고, 모빌리티가 무버블로
설정되었으나 현재 움직이지는 않는 경우
- 애니메이션이 있는 테셀레이션이나 픽셀 뎁스 오프셋을 사용하는 머티리얼의 경우,
섀도 뎁스가 캐시되므로 부작용이 생길 수 있습니다.
38.
39. 스카이 라이트
무버블 스카이라이트
이제 스카이라이트에 무버블 모빌리티 세팅이 지원됩니다!
- 이 라이트 유형은 동적인 씬 변화를 지원합니다.
- SSAO 와 디스턴스 필드 AO 라는 신기능으로부터 그림자를 받습니다.
40. 스카이 라이트 글로벌 일루미네이션
스테이셔너리 / 스태틱 스카이라이트에 대한 글로벌 일루미네이션을 라이트매스가 계산합니다!
- 스카이 라이트의 Indirect Lighting Intensity (간접광 강도)를 사용하여 반사광의 밝기를
조절할 수 있습니다.
- 모든 스테이셔너리 라이트와 마찬가지로 실행시간에 색이나 강도를 변경하면 직사광에만 적용
되는데, 반사광은 라이트맵에 구워지기 때문입니다.
원본 글로벌 일루미네이션 적용
41.
42. 자동 키 설정 기능을 하나의 토글 상태로 단순화시켜 사용 편의성과 명확성이
향상되었습니다.
43. 시퀀서에 새로 생긴 토글 옵션으로 프로퍼티 변경사항을 단일 샷에 적용할지
다른 샷에도 전파시킬지 하는 부분을 확실하게 할 수 있어 작업 분할이 수월
해집니다. Allow Sequencer Edits Only (시퀀서 편집만 허용) 옵션을 켜
면, 프로퍼티를 편집할 때 트랙 및/또는 키프레임이 존재하지 않는 경우 자동
으로 생성합니다. 이러한 편집 내용은 작업중인 특정 샷에만 적용되며 다른
샷에 영향을 주지 않습니다. Allow Level Edits Only (레벨 편집만 허용)
옵션이 켜지면, 오브젝트의 기본 프로퍼티를 편집하게 됩니다. 시퀀서에 이미
트랙이 있는 프로퍼티는 모든 샷에 영향을 주는 전체 변경 작업을 하고자 할
경우 디테일 패널에 비활성화됩니다.
44. 개선사항
- 액터에 붙은 오디오 섹션의 어테뉴에이션(감쇠) 세팅이 생겼습니다.
- 어태치 섹션의 붙이고 떼는 규칙을 지정할 수 있습니다.
- 레벨 시퀀서 플레이어에 시네마틱 옵션을 추가했습니다.
- 벡터, 트랜
- 스폼, 컬러 키 프로퍼티 에디터에 Key Time 을 추가했습니다.
- 다음/예전 샷으로 한 단계씩 이동(step)하는 단축키가 생겼습니다 (Shift
+ 쉼표, Shift + 마침표).
- 스크럽 이동으로 키에 스냅할 때 이제 허용치 밖으로의 스크럽 이동도 허용
됩니다.
- 이제 에디터 개인설정의 세팅을 사용하면 시퀀서로 전환할 때 실시간 뷰포
트를 활성화시킬 수 있습니다.
45. 버그 픽스
키 설정이 크게 바뀌었습니다.
픽스 - 스폰 해제/리스폰 시 스포너블 상태/프로퍼티가 저장/복원되지 않던
것을 고쳤습니다.
픽스 - 필터링을 할 때 시퀀서 아웃라이너가 노드를 추가하던 것을 고쳤습니
다.
픽스 - 레벨 시퀀스 비동기 로드가 수정되었습니다.
픽스 - 자동 키 기능이 (제대로 복원하기 위해 필요한) 키프레임 생성을 하지
않으면 프로퍼티 값을 저장하지 않던 것을 고쳤습니다.
46. 시퀀서 월드 아웃라이너 통합
시퀀서가 이제 월드 아웃라이너와 더욱 유기적으로 통합되었습니다. 월드 아
웃라이너에는 액터가 묶여있는 레벨 시퀀스가 무엇인지, 시퀀서가 스폰한 액
터가 무엇인지 표시되므로, 한 곳에서 시퀀서에 묶인 모든 액터를 접근할 수
있습니다.
47. 이제 시퀀서에서 섹션을 블렌딩하여 부드러운 전환을 쉽게 만들 수 있습니다. 시퀀서의 여러 프
로퍼티(2D/3D 트랜스폼, 벡터, 컬러, 플로트 등)에 대한 블렌딩이 가능합니다.
지원되는 섹션 모두 이제 서로 겹칠 때 부드럽게 블렌딩되어 오브젝트에 적용되는 단일 값을 산
출해 냅니다.
같은 행에 겹치는 섹션은 이제 가능하면 한 쪽에서 다른 쪽으로 서서히 자동 보간됩니다.
애니메이션 트랙 역시 이제 자동 보간됩니다.
다수의 내장 이즈(ease) 함수를(선형, 다항, 지수형 이즈 인/아웃 등) 기본으로 사용 가능합니
다. 또는, (BP 에서도 사용 가능한) IMovieSceneEasingFunction 인터페이스를 사용하여
별도의 커스텀 블렌드 함수를 구현하거나 커브 애셋을 지정할 수 있습니다.
섹션 트랜스폼 작업은 이제 트랜스폼 나머지에 영향을 주지 않고 (위치+회전 같은) 어떤 식의 채
널 조합에 대해서도 작업 가능합니다.
또한 블렌더블 프로퍼티에 새로운 블렌드 모드를 추가, 가중치 적용 절대적 / 상대적 / 더하기식
블렌딩이 가능합니다. 프로퍼티의 시작 값을 기준으로 한 프로퍼티 애니메이션이나, 절대 또는
상대 스페이스로/에서의 (컷씬 속으로 또는 컷씬 밖으로) 보간하는 등의 작업에 특히 유용합니
다.
절대 위치와 값으로 블렌딩하는 카메라 프로퍼티 및 상대 트랜스폼에 대한 데모입니다: