언어:

언리얼 엔진 4.20 릴리즈 노트

언리얼 엔진 4.20 릴리즈 노트

image alt text

새 소식

언리얼 엔진 4.20 은 개발자의 성공에 필요한 다양한 툴을 제공한다는 약속을 지킵니다. 미래 지향적인 모바일 게임을 만들고, 나이아가라의 영향을 탐구하며, 놀랍도록 사실적인 디지털 휴먼에 생명력을 불어넣으면서, 모든 플랫폼의 워크플로우 최적화를 활용해보세요.

이제 극도의 사실주의로 살아 숨쉬는 디지털 캐릭터와 현실같은 월드를 제작 할 수 있습니다. 언리얼 엔진의 새로운 파티클 에디터, 나이아가라는 프로젝트 전반에 엄청난 디테일을 살려 비주얼 이펙트의 수준이 달라집니다. "Meet Mike" 및 "Siren" 데모 제작에 사용된 새로운 디지털 휴먼 기술로 사실주의에 대한 기준이 높아집니다. 새로운 시네마틱 뎁스 오브 필드를 사용하면 실시간으로 시네마 퀄리티의 카메라 이펙트를 얻을 수 있습니다.

언리얼 엔진에는 원하는 스타일과 워크플로우에 맞게 제작 프로세스를 커스터마이징하는 툴이 제공되어 나만의 작업 방식을 유지 할 수 있습니다. 새로운 에디터 스크립팅 및 자동화 라이브러리를 통해, 툴과 워크플로우에 대한 완벽 커스터마이징이 가능합니다. 액터와 콘텐츠 브라우저 컨텍스트 메뉴에 대한 스크립트 익스텐션으로 액터나 애셋에 적용되는 액션을 새로 추가할 수 있어 디자이너와 아티스트의 삶이 편해집니다.

철저한 테스트를 거친 모바일 및 콘솔 지원이 제공된다는 것은, 한 번 제작으로 모든 디바이스에서 플레이 할 수 있어 사용자가 원하면 언제 어디서든 즐길 수 있는 경험을 제공한다는 뜻입니다. 에픽은 언리얼 엔진의 모바일 게임 개발 부분 최적화를 위해 포트나이트 모바일 버전을 출시하는 데 총력을 기울였습니다. 하드웨어가 해야 하는 작업량을 줄이기 위해 하드웨어/소프트웨어 오클루전 쿼리를 둘 다 구현하는 등 엄청난 양의 퍼포먼스 향상 작업이 있었습니다. 이제 프락시 LOD 기능을 제작 단계에서 사용할 수 있으며, 렌더링해야 하는 지오메트리 복잡도를 한층 더 줄일 수 있게 되었습니다.

에픽에서 직접 개발한 업데이트 외에도 이번 릴리스에는 GitHub 의 놀라운 언리얼 엔진 개발자 커뮤니티에서 제출한 165 개의 개선사항 이 포함되어있습니다! 언리얼 엔진 4.20 에 기여해주신 모든 분들께 감사드립니다:

Adam Moss (adamnv), Akihiro Kayama (kayama-shift), Alan Edwardes (alanedwardes), Alan Liu (PicaroonX), Andrew (XenonicDev), Andrew Haselgrove (Dimpl), Anton Rassadin (Antonrr), arkiruthis, Begounet, Brandon Wilson (Brandon-Wilson), c4tnt, Changmin (cmheo), Christian Loock (Brainshack), Clinton Freeman (freemancw), Daniel Assuncao (dani9bma), David Payne (dwrpayne), Deep Silver Dambuster Studios (DSDambuster), Derek van Vliet (derekvanvliet), Eduard Gelbling (NachtMahr87), frankie-dipietro-epic, Gautier Boëda (Goutye), George Erfesoglou (nonlin), Giovanny Gutiérrez (bakjos), Gregor Gullwi (ggsharkmob), Hannah Gamiel (hgamiel), Hyuk Kim (Hybrid0), Ibraheem Alhashim (ialhashim), Ilya (ill), Jacob Nelson (JacobNelsonGames), Jaden Evanger (cyberblaststudios), Jared Taylor (Vaei), Jesse Yeh (jesseyeh), Jia Li (shrimpy56), Jørgen P. Tjernø (jorgenpt), June Rhodes (hach-que), Junichi Kimura (junkimu), Kalle Hämäläinen (kallehamalainen), kinolaev, Kory Postma (korypostma), krill-o-tron, Kryofenix, Lallapallooza, Layla (aylaylay), Lee Berger (IntegralLee), Leon Rosengarten (lion03), Lirrec, malavon, Marat Radchenko (slonopotamus), Marat Yakupov (moadib), Mathias L. Baumann (Marenz), Matt Hoffman (LordNed), Matthew Davey (reapazor), Maxime Turmel (maxtunel), Michael Allar (Allar), Michael Kösel (TheCodez), Michael Puskas (Mmpuskas), Mikayla Hutchinson (mhutch), mimattr, Mitsuhiro Koga (shiena), Muhammad A.Moniem (mamoniem), nakapon, Nicolas Lebedenco (nlebedenco), Paul Eremeeff (PaulEremeeff), Phillip Baxter (PhilBax), projectgheist, Rama (EverNewJoy), redfeatherplusplus, Rei-halycon, Robert Khalikov (nbjk667), Roman Chehowski (RChehowski), S-Marais, Sam Bonifacio (Acren), Satheesh (ryanjon2040), Scott Freeman (gsfreema), SculptrVR, Sebastian Aaltonen, Sébastien Rombauts (SRombauts), Seokmin Hong (SeokminHong), Sertaç Ogan (SertacOgan), stephenwhittle, Temaran, Thomas Miller (tmiv), Trond Abusdal (trond), TWIDan, Tyler (tstaples), Usagi Ito (usagi), yama2akira, Yang Xiangyun (pdlogingithub), yehaike, Zachary Burke (error454)

주요 기능

신규: 모바일 플랫폼 출시를 위한 최적화 및 개선사항

언리얼 엔진 4.20 에는 포트나이트 iOS 및 Android 출시를 위해 개발했던 100 종 이상의 모바일 최적화가 포함되어, 게임 출시가 쉬워지고 크로스 플랫폼 게임플레이는 더욱 매끄럽게 최적화되는 전환점이 될 것입니다. 주요 개선사항으로는 Android 디버깅 향상, 모바일 랜드스케이프 개선, 모바일에서의 오클루전 쿼리가 있습니다.

image alt text

모바일에서 하드웨어/소프트웨어 오클루전 쿼리

이제 ES 3.1 또는 Vulkan 을 지원하는 iOS 및 Android 고사양 모바일 디바이스에 GPU를 사용하는 하드웨어 오클루전 쿼리가 지원됩니다. 지원하는 디바이스면 기본적으로 활성화됩니다.

소프트웨어 오클루전 쿼리는 CPU 를 사용하여 씬에서 프리미티브 컴포넌트를 컬링해 내는 실험단계 기능입니다. 보수적 접근법을 사용하므로, 어떤 모바일 디바이스에서도 사용할 수 있습니다.

image alt text image alt text

왼쪽 - r.Mobile.AllowSoftwareOcclusion 1, r.SO.VisualizeBuffer1; 오른쪽 - 차폐된 부분 확인을 위해 렌더링을 멈춘 모습

소프트웨어 오클루전 쿼리를 사용하는 방법은 다음과 같습니다:

  1. r.Mobile.AllowSoftwareOcclusion 1 로 활성화시킵니다.

  2. r.AllowOcclusionQueries 0 으로 비활성화시킵니다.

  3. 스태틱 메시 에디터에서 LOD for Occluder Mesh (오클루더 메시에 대한 LOD)를 true 설정하여 프리미티브를 오클루더로 만듭니다.

고사양 모바일 모드에서 r.SO.VisualizeBuffer 1 로 활성화시키면 모바일 프리뷰어 에 결과가 시각화되어 나옵니다.

플랫폼 머티리얼 통계

머티리얼 에디터 내 플랫폼 통계 창을 사용하면 머티리얼 프로파일링과 최적화를 빠르게 할 수 있습니다! 이제 다수의 셰이더 플랫폼과 퀄리티 레벨에 대한 통계를 확인할 수 있습니다. 모바일 플랫폼의 경우, 오프라인 셰이더 컴파일러를 사용하여 보다 정확한 인스트럭션 및 텍스처 사용 정보를 얻습니다.

image alt text

향상된 Android 디버깅

UE4 프로젝트를 다시 패키징하지 않고도 Android에서 반복처리작업과 디버깅이 가능합니다! Android 컴파일 시, 이제 Gradle 프로젝트 파일을 생성하며, 이 파일을 Android Studio 에서 열 수 있습니다. C ++ 및 Java 코드에 중단점을 배치하고 Android Studio를 사용하여 디버그 세션을 시작할 수 있습니다. C ++ 소스 코드를 변경하고 다시 컴파일할 수도 있습니다. 새로운 디버그 세션을 시작하면 Android Studio 에서 변경 사항을 확인하고 빠르게 새 공유 라이브러리를 디바이스에 업로드합니다.

모바일 랜드스케이프 개선

이제 모바일에서도 흥미로운 지형을 만들 수 있습니다. 모바일 디바이스에 랜드스케이프 레이어가 무제한 지원되기 때문입니다! 물론 최적화가 가장 잘 되는 것은 셋인 경우지만, 텍스처 샘플러만 충분하다면 랜드스케이프 레이어는 몇 개든 만들 수 있습니다.

이제 랜드스케이프 머티리얼의 Feature Level Switch 머티리얼 노드를 사용하면 하나의 랜드스케이프 머티리얼을 모든 플랫폼에 쓸 수 있습니다.

image alt text

1 - 모바일 랜드스케이프; 2 - PC 랜드스케이프

기타 모바일 개선사항

포트나이트 모바일 버전 출시를 위해 했던 작업 중 모든 개발자들과 공유하기 위해 언리얼 엔진 4.20 에 포함시킨 부분은 다음과 같습니다:

  • 플랫폼 별 최소 스태틱 메시 LOD

  • 플랫폼 별 최소 스켈레탈 메시 LOD

  • 하드웨어 오클루전 개선

  • HLOD 툴 및 워크플로우 최적화

  • 오디오 퀄리티 노드

  • 오디오 베리에이션 컬링

  • 플랫폼 별 오디오 다운샘플링

  • 플랫폼 별 오디오 압축 퀄리티

  • PC 와 더욱 잘 맞도록 셰이딩 모델 트윅

  • 리플렉션 캡처 밝기 수정

  • 랜드스케이프 레이어 4 개 지원

  • 랜드스케이프 테셀레이션 개선

  • 미사용 LOD 에 대한 메모리 비용 제거:

    • 스태틱 메시

    • 스켈레탈 메시

    • 머티리얼 퀄리티 레벨

    • 그래스 및 폴리지

    • 하이 디테일 컴포넌트 및 메시

    • 캐스케이드의 하이 디테일 이미터

  • 디바이스 메모리에 따른 세팅

  • 머티리얼 메모리 감소

  • 대량 애셋 변경 작업을 위한 에디터 스크립트 작성

  • 파티클 컴포넌트 풀링

  • 머티리얼 파라미터 컬렉션 업데이트 비용

신규: Nintendo Switch 출시를 위한 최적화 및 개선사항

Nintendo Switch 개발 방식을 크게 향상시키고자 포트나이트 Nintendo Switch 버전을 만들 때 사용한 엄청난 퍼포먼스 및 메모리 개선사항을 모든 언리얼 엔진 개발자들에게 공개합니다!

image alt text

포함된 내용은 다음과 같습니다:

  • 동적 해상도 및 템포럴 업샘플링 지원

  • 컨트롤러 입력에 대한 저지연 프레임 동기화

  • 상당한 CPU 렌더링 최적화

  • 스레딩 향상

  • 텍스처 압축 개선

  • 메모리 프로파일링 지원

  • 도킹 모드에서 1080p 백버퍼 지원

  • 그 외 다수의 수정사항

신규: 프락시 LOD 개선

새로운 프락시 LOD 툴실험단계 를 벗어나 실제 제작 단계에서 사용할 수 있게 되었습니다! 폴리곤 수, 드로 콜, 머티리얼 복잡도로 인한 렌더링 비용을 줄여 퍼포먼스를 향상시켜주는 툴로, 모바일 및 콘솔 플랫폼에서 개발할 때 퍼포먼스가 크게 향상 됩니다. 이 툴은 서드파티 프로그램인 Simplygon 에 대한 대안이 되며, 언리얼 엔진의 레벨 오브 디테일(LOD) 시스템과 같이 사용할 수 있습니다.

프락시 LOD 툴은 복잡한 소스 지오메트리 모델 집합의 시각적인 부분을 추정하여 단일 로우 폴리 파라미터화 메시와 관련 텍스처로 이루어진 프락시를 생성하는 방식으로 단순한 표현을 만듭니다. 그리고서 해당 지오메트리가 화면상에 차지하는 픽셀이 얼마 되지 않아 모델 퀄리티가 낮아도 괜찮은 경우 실행시간에 그 프락시로 대체합니다.

참고: 프락시 LOD 툴은 현재 Windows의 언리얼 에디터에서만 사용할 수 있습니다.

image alt text

위 그림은 포트나이트 배틀로얄 에서 빌딩과 주차장 부분에 프락시 LOD 툴 을 사용한 것으로, Gap-Filling (틈 채우기) 및 Hard-Edge Splitting (하드 에지 분할)을 사용했습니다.

프락시 LOD 툴의 제작 단계에서 사용할 수 있는 버전은 4.19 의 실험단계 버전에 비해 기능이 많이 향상되었습니다. 특히 프락시 지오메트리 위의 노멀에 대한 사용자 제어나, 틈 채우기를 통해 문이나 창문을 자동으로 닫아 훨씬 단순한 프락시를 생성해주는 기능이 개선되었습니다.

노멀 제어 개선: 하드 에지 분할 노멀

포트나이트에서는 메모리 사용량이 극도로 제한되었기에 LOD 효율을 높여야 했습니다. 대부분 프락시의 경우, 베이스 컬러 텍스처는 아주 조금 생성하고 노멀 맵은 사용하지 않았는데, 이러한 접근법에는 프락시 메시 자체에 낼 수 있는 최고 퀄리티의 노멀이 필요합니다.

image alt text

1 - 하드 에지 앵글 = 80; 2 - 하드 에지 앵글 = 0

위 gif 는 버텍스 노멀에 대한 하드 에지 분할 효과를 보여줍니다. 그림 2 는 플러그인 4.19 실험단계 버전에서 계산한 부드러운 버텍스 노멀을 나타내는데, 집 아래 어두운 구역에 부족한 부분을 확인할 수 있습니다. 비교 대상인 그림 1 은 사용자가 지정한 하드 에지 컷오프 앵글로 하드 에지 버텍스 노멀을 분할한 것입니다.

하드 에지 컷오프 앵글에 추가로, 이제 버텍스 노멀 계산에 사용되는 메서드도 다음과 같이 사용자가 지정할 수 있습니다: Angle Weighted (앵글 가중치), Area Weighted (영역 가중치), Equal Weighted (동일 가중치).

Gap Filling (틈 채우기)

틈이 없는 지오메트리의 경우, 프락시 시스템은 접근할 수 없는 구조물(, 예로 닫힌 집 안의 내벽이나 가구 등)을 자동으로 버립니다. 이상적인 경우라면, 소스 지오메트리를 구성 또는 변경할 때 이러한 점을 염두에 두는 것이 좋겠지만, 게임 제작 상의 제약으로 인해 항상 가능한 일은 아닙니다. 거의 틈이 없는 지오메트리에서 효율적인 프락시 LOD 를 쉽게 생성할 수 있도록 하기 위해서, 프락시 LOD 툴은 팽창과 침식으로 틈을 메우는 레벨 세트 기반 기법을 옵션을 통해 사용할 수 있습니다. 원래 의도는 주로 먼 건물의 문과 창에 사용하는 것입니다.

image alt text

1 - 원본 메시; 2 - 틈 채우기 없음; 3 - 틈 채우기

위 gif 는 틈 채우기를 사용한 효과를 보여줍니다. 모든 그림은 텍스처 스페이스를 조금만 사용해야 한다는 제한이 있습니다. 2 번 그림은 틈 채우기를 사용하지 않은 프락시 LOD 결과로, LOD 에 건물 인테리어가 포함되어 있습니다 (보이지 않는 트라이앵글과 텍셀에도 비용이 듭니다). 3 번 그림은 같은 건물에 틈 채우기를 사용하여 문과 창문을 자동으로 닫아, 결과적으로 트라이앵글 수가 줄어 제한된 리소스 사용 효율이 좋아집니다.

신규: 시네마틱 뎁스 오브 필드

새로운 시네마틱 뎁스 오브 필드(DoF) 를 사용하면 실시간 환경에서 영화 퀄리티의 씬 을 렌더링하는 꿈같은 일이 가능해집니다! 이 새로운 방식은 원형 DoF 방식의 하이 퀄리티 대체 버전으로 디자인되었으며, 보케와 같은 다른 대부분의 DoF 방식보다 빠릅니다. 시네마틱 DoF 를 사용하면 뎁스 오브 필드 이펙트가 더 깔끔해져, 프로시저럴 보케 시뮬레이션을 사용한 시네마틱 느낌을 냅니다. 이 새로운 DoF 구현은 알파 채널, 동적 해상도 안정성도 지원하며, 콘솔 프로젝트에 맞게 퀄리티를 낮추는 세팅도 지원합니다.

image alt text

image alt text image alt text

왼쪽 - 시네마틱 뎁스 오브 필드 활성화; 오른쪽 - 비활성화

시네마틱 뎁스 오브 필드는 기본적으로 활성화되어 있으며 CameraPost Process 세팅의 원형 DoF 대신 사용됩니다.

  • 시네마틱 DoF 가 지원하는 플랫폼은 다음과 같습니다:

    • D3D11 SM5, D3D12 SM5, Vulkan SM5, PlayStation 4, Xbox One, Mac

  • 프로시저럴 보케 시뮬레이션이 지원하는 기능은 다음과 같습니다:

    • 조리개 날 수에 대한 환경설정.

    • 렌즈의 가장 큰 조리개(최소 F스탑)와 함께 날의 굴곡에 대한 직접 환경설정.

    • 포스트 프로세스 볼륨, 카메라 액터, 시네 카메라 액터의 Camera 세팅에서 환경설정 가능.

  • r.DOF.* 콘솔 변수를 사용하여 여러가지 설정가능한 퀄리티 세팅으로 하드웨어의 한정된 자원에 맞게끔 프로젝트의 퀄리티를 조절할 수 있습니다.

자세한 정보는 뎁스 오브 필드NEW! 문서를 참고하세요.

신규: 나이아가라 비주얼 이펙트 에디터 (얼리 액세스)

나이아가라 비주얼 이펙트 (VFX) 에디터얼리 액세스 플러그인으로 사용할 수 있게 되었습니다! 완전 새로운 비주얼 이펙트 툴의 얼리 액세스 버전을 시험해 보실 수 있습니다. 결국 언리얼 캐스케이드를 대체하게 될 것입니다. 나이아가라의 비전 관련 자세한 내용은 이 GDC 강연 (영문)을 확인해주세요.

참고: 얼리 액세스라는 것은 충분히 오랫동안 개발되었기에 고객과 공유하고 가급적 많은 피드백을 수렴한 뒤 UE4 표준 기능으로 공개하려 한다는 뜻입니다. 그렇다고 실제 제작 단계에서 사용해도 된다는 뜻은 아닙니다. 아직 퍼포먼스 최적화나 수정해야 할 버그가 많기 때문입니다. 그래도 개발자분들께서 나이아가라를 배우기 위한 투자를 시작하고, 같이 최고의 VFX 에디터를 만들어나갈 수 있었으면 하는 바람입니다.

나이아가라 개요는 GDC 2018 프리젠테이션 중 Programmable VFX with Unreal Engine's Niagara , 나이아가라NEW! 관련 문서를 참고해 주시기 바랍니다.

이펙트 디자인 및 생성 방법 개선

image alt text

왼쪽 - Dynamic Input 모듈을 활용한 파티클 시스템, 오른쪽 - Dynamic Input 모듈

스켈레탈 메시는 표면에서 이미시브를 지정할 수 있으며, 머티리얼 이름 또는 네임드 본 인플루언스 구역으로 구동시킬 수 있습니다.

  • 모듈의 기본 값 지정 방식이 개선되어, 함수 호출에서부터 기본 동적 입력 사용까지 여러가지 다양한 방식을 사용할 수 있습니다.

  • 메시 파티클에 이제 각속도가 지원됩니다.

  • 리본 렌더러에 빔이 새로운 모듈과 함께 지원됩니다.

  • 이제 모듈 사이 종속성을 정의할 수 있어, 사용자가 잘못된 구성으로 스택을 쌓는 경우 경고를 띄울 수 있습니다. 또한 사용자에게 자동 수정 옵션이 제공됩니다.

  • 시스템 이미터와 베이스 이미터 병합이 여러모로 개선되어 전반적인 안정성이 향상되었습니다.

  • 이제 드래그 앤 드롭으로 스택 내 모듈 위치를 위아래로 옮길 수 있습니다. 상속된 모듈 이동은 병합이 복잡해지므로 불가능합니다.

  • 이제 스택 안에서 모듈을 활성화/비활성화시킬 수 있습니다. 상속에도 작동합니다.

  • 시퀀서블루프린트 에 나이아가라 유저 네임스페이스 변수를 설정하는 기능이 지원됩니다.

  • 파라미터를 구동시킬 때, 커스텀 HLSL 표현식 이나, 동적 입력(그래프 스니펫) 이나, 다른 변수 로의 링크나, 으로 구동시킬 수 있습니다.

  • 옵션으로, 이제 파티클은 Persistent ID 를 가질 수 있으며, 해당 이미터에 대한 고유성이 보장됩니다.

  • 유형이 각기 다른 다수의 렌더러를 이미터에 적용할 수 있습니다. 각 인스턴스는 주어진 파라미터에 대한 값을 가져 오는 위치를 조정할 수 있습니다. 예를 들어 이미터에는 두 개의 스프라이트 렌더러가 있을 수 있습니다. 하나는 파티클 위치에서 그 위치를 끌어오고 다른 하나는 파티클의 오프셋 위치에서 그 위치를 끌어옵니다.

  • 또한 나이아가라 엑스트라 플러그인에는 다양한 파티클 별 파라미터를 대화창 같은 디스플레이로 표시해주는 디버그 머티리얼이 들어있습니다.

  • Houdini 가 나이아가라에 간단한 CSV 임포터를 제공했는데, GDC 2018 데모 콘텐츠에 쓰이기도 했습니다.

  • 나이아가라용 여러가지 다양한 기능이 Automated Testing (자동화 테스팅) 시스템 아래 추가되었습니다.

유저 인터페이스 업데이트

나이아가라 인터페이스는 복잡한 이펙트를 직관적으로 만들 수 있도록 설계되었습니다. 주로 스크립트 로직 조각을 조립하는 스택 방식을 사용합니다. 스택 안에서, 타임라인 으로 일정 시간에 걸친 이펙트의 다양한 부분을 제어하고, 파라미터 패널 로 이펙트에 사용할 수 있는 변수에 쉽게 접근하며, 어트리뷰트 스프레드시트 로 이펙트를 실행하면서 관련 정보를 빠르게 찾아 대응할 수 있습니다.

image alt text

새 모듈

나이아가라의 모든 모듈을 업데이트 또는 다시 작성하여 게임용 이펙트 제작 시 흔히 사용되는 작동방식을 지원하고 일관된 코딩 표준 규칙을 준수하도록 했습니다. 새로운 UI 에 또 한가지, 개발자가 C++ 에서 다른 변수의 상태에 따라 변수 표시를 인라인 활성화/비활성화시키는 UProperties 관련 옵션을 본딴 기능을 나이아가라 스택에 추가했습니다.

GPU 시뮬레이션

이제 나이아가라는 GPU 시뮬레이션을 지원하며, 대상 플랫폼은 다음과 같습니다: DX11, PS4, Xbox One, OpenGL (ES3.1), Metal. Vulkan 및 Switch의 GPU 시뮬레이션은 향후 릴리즈에서 지원할 계획입니다. GPU 시뮬레이션 관련 현재 제한 사항과 알려진 이슈는 다음과 같습니다:

  • 나이아가라를 완벽 지원하기 위해서는 GPU 에서 데이터를 리드백(read-back)하는 기능이 필요합니다. 현재 DX11, PS4 렌더링 인터페이스만 이 기능을 지원하며, OpenGL, Metal 에 대해서는 작업 중입니다.

  • 콜리전, 커브, Curl Noise Field (컬 노이즈 필드)가 GPU 에서 지원됩니다. 메시, 스킨드 메시, 스플라인 컴포넌트, 특수 데이터 인터페이스 등은 아직 지원되지 않습니다. UNiagaraDataInterface 와의 상호작용을 위한 GPU 셰이더용 API 역시 다시 설계했습니다.

  • 스프라이트, 인스턴스드 스태틱 메시 를 파티클에서 렌더링하는 기능이 GPU 시뮬레이션에 지원됩니다. 현재 파티클에서 라이트 생성 및 리본은 GPU 에서 작동하지 않습니다.

  • 이벤트는 GPU 에서만 작동하며, 언리얼 엔진 4.20 이후 큰 변화가 있을 것입니다.

CPU 시뮬레이션 & 컴파일

나이아가라 CPU 시뮬레이션은 이제 PC, PS4, Xbox One, OpenGL (ES3.1), Metal 에서 작동합니다. 현재 Vulkan, Switch 는 지원하지 않습니다.

  • CPU 가상 머신(VM)은 이제 백그라운드 스레드에서 콘텐츠를 DDC 에 컴파일하여, 전반적인 컴파일 속도와 팀 효율이 크게 향상됩니다. 최종적이고 비싼 VM 최적화 단계로 ShaderCompileWorker 를 최적화 하는 추가 작업이 필요한데, 스레드 안전성이 없는 라이브러리에 종속되어 있기 때문입니다. 컴파일 종속성은 여러 모듈 사이에 제대로 트래킹되므로, 스택 특정 부분을 다시 컴파일해야 하는 시기를 명확히 알 수 있습니다.

  • CPU 에서의 피직스 시뮬레이션이 마찰력과 복원력(탄력성)에 대한 피직스 머티리얼 값을 제대로 모델링합니다.

  • 이미터는 이제 워커 스레드에서 병렬 시뮬레이션 가능합니다.

신규: 디지털 휴먼 개선

포토리얼리스틱 캐릭터 예제로 시작된 디지털 휴먼 개발을 위한 에픽의 캐릭터 탐구 과정에서, 현실적인 실사 캐릭터에 생명력을 불어넣기 위한 여러가지 렌더링 개선사항이 이루어졌습니다.

image alt text

이 캐릭터 개발 도중 피부, 눈, 라이팅, 서브서피스 스캐터링에 있었던 렌더링 변경사항은 다음과 같습니다:

  • Double Beckman Dual Lobe 메서드 적용 스페큘러 모델을 새로 추가했습니다.

  • 서브서피스 프로파일에 Backscatter (후방 산란)을 사용한 빛 투과 방식이 지원됩니다.

  • Boundary Bleed Color (바운더리 누출 색) 적용 서브서피스 스캐터링으로 컨택트 섀도우가 개선되었습니다.

  • 포스트 프로세스 머티리얼을 통한 단거리 다이내믹 글로벌 일루미네이션이 지원됩니다.

  • 홍채에 별도의 노멀 맵을 사용하여 눈의 디테일을 높였습니다.

자세한 정보는, 디지털 휴먼NEW! 문서를 참고하세요.

신규: 렉탱귤러 에리어 라이트

렉탱귤러 에리어 라이트(직사각 영역 조명)로 머리 위 형광등, 텔레비전, 불 켜진 사인과 같이 커다란 광원이 있는 환경에 보다 현실적인 라이팅을 낼 수 있습니다! 렉탱귤러 에리어 라이트는 모드 패널에서 다른 라이트 유형과 같이 볼 수 있습니다.

image alt text

  • 현재 디퍼드 렌더러만 지원합니다.

  • Source Width / Height (소스 너비 / 높이)로 발광 영역을 제어할 수 있다는 점을 제외하고는 포인트 라이트와 거의 비슷합니다.

  • 스태틱 및 스테이셔너리 모빌리티에 대한 섀도잉은 무버블 에리어 라이트 소스의 다이내믹 섀도잉처럼 작동하며, 현재는 에리어 없는 포인트 라이트에 가깝습니다.

퍼포먼스 고려사항:

  • 그림자를 드리우는 무버블에서 대부분의 비용이 발생할 때는 포인트 또는 스포트 라이트보다 전반적으로 조금 더 비쌉니다. 그림자는 보통 비용이 같습니다.

  • 스테이셔너리 라이트 모빌리티 또는 그림자를 드리우지 않는 라이트는 비용이 두 배로 늘어날 수 있으며, 사용되는 플랫폼에 따라 달라집니다. 스태틱 라이트를 사용한다면, 비용은 들지 않습니다.

신규: 혼합 현실 캡처 (얼리 액세스)

혼합 현실(MR) 어플리케이션의 관람용 체험을 만들 때 새로운 증강 현실 캡처 기능을 사용하면, 실제 플레이어를 가상 플레이 공간에 합성 하는 작업이 쉬워집니다!

image alt text

얼리 액세스 단계인 혼합 현실 캡처 기능은 비디오 입력, 보정, 게임 내 합성의 세 단계로 이루어집니다. 다양하게 지원되는 웹캠 및 HDMI 캡처 디바이스를 통한 여러 소스에서 현실의 크로마 키 비디오를 언리얼 엔진으로 가져올 수 있습니다. Vive Tracker 또는 유사한 트래킹 디바이스가 있는 경우, 혼합 현실 캡처는 카메라 위치를 게임 내 카메라와 일치시켜 보다 역동적이고 흥미로운 씬 연출이 가능합니다. 구성 및 보정은 다른 언리얼 엔진 4 타이틀에서도 재사용할 수 있는 독립형 보정 툴을 통해 이루어집니다. 촬영 위치를 구성하고 나면 모든 어플리케이션에서 사용할 수 있습니다.

이 기능은 얼리 액세스 단계이기는 하지만, 피드백을 통해 시스템을 계속해서 발전시켜 나갈 수 있었으면 합니다. 혼합 현실 캡처 구성 관련 자세한 정보는 문서NEW! 를 참고하세요.

신규: nDisplay, 유연한 멀티 디스플레이 렌더링

새로운 nDisplay 시스템을 사용하면 대형 시각화 장비를 위한 비디오 벽을 손쉽게 제작 할 수 있습니다! 이 시스템은 언리얼 엔진 인스턴스를 호스트 컴퓨터 수만큼 자동 실행합니다. 예상하는 그대로의 콘텐츠와 프레임 단위로 시간이 정확하게 동기화되며, 별도의 프로젝터 또는 모니터 디스플레이에 구동됩니다. 액티브/패시브 스테레오스코픽 렌더링을 통한 3D 씬으로 시청자 몰입도 향상은 물론, 내장 VRPN 지원을 통해 모바일 VR 컨트롤러로 시스템을 구동시킬 수 있습니다.

image alt text

자세한 정보는 문서NEW! 를 참고하세요.

신규: 서브믹스 오디오 녹음

새로운 오디오 엔진에는, 엔진 출력이나 개별 서브믹스의 출력을 *.wav 또는 사운드웨이브 애셋으로 녹음하는 기능이 추가되었습니다.

image alt text

서브믹스 출력을 사운드웨이브 애셋으로 익스포트합니다.

image alt text

서브믹스 출력을 .wav 파일로 익스포트합니다.*

신규: 공유 스켈레탈 메시 LOD 세팅

새로운 LOD 세팅 애셋을 사용하면 한 번 설정해 둔 LOD 세팅을 여러 스켈레탈 메시 애셋에 재사용 할 수 있습니다! 스켈레탈 메시의 애셋 디테일 패널 내 LOD Settings (LOD 세팅) 아래에서 이제 사용할 LOD 세팅 애셋을 선택할 수도, 현재 세팅에 따라 새 애셋을 만들 수도 있습니다.

자세한 정보는 스켈레탈 메시 애셋 디테일 문서의 LOD 세팅 공유 부분을 참고하세요.

블류틸리티를 통해 LOD 세팅을 할당하고 블루프린트에서 LOD 를 재생성할 수도 있습니다.

신규: GeomCache 스트리밍 및 Alembic 임포터 개선 (실험단계)

지오메트리 캐시 시스템의 안정성과 퍼포먼스를 지속적으로 향상시키고 있습니다:

  • 이제 개별 버텍스 애니메이션 프레임 압축 시 허프만 인코딩 기반 인트라 프레임 코덱을 사용합니다. 압축 데이터는 디스크에서 스트리밍되어, 긴 시퀀스도 별 메모리 부담 없이 재생할 수 있습니다. 새로운 구현은 아직 초기 실험단계이며, 제작 단계에서는 사용할 준비가 되지 않았습니다.

  • Alembic 임포터의 임포트 방식이 모든 프레임을 대량 임포트하던 것에서 프레임 단위 반복처리하는 방식으로 변경되었습니다. PCA 파이프라인 및 전반적인 안정성과 속도가 향상될 것입니다.

신규: 액터 및 콘텐츠 브라우저 컨텍스트 메뉴에 확장기능을 스크립트로 추가

코드 한 줄 작성하지 않고도 쉽게 컨텍스트 메뉴 툴을 만들고, 워크플로우 개선을 해보세요! 블루프린트 유틸리티, 다른 말로 Blutility(블류틸리티)를 사용하여 브라우저에서 콘텐츠 애셋과 액터에 대한 컨텍스트 메뉴를 확장하면 됩니다.

  • 새로운 부모 클래스 중 하나를 사용하여 블류틸리티를 새로 만듭니다. AssetActionUtility (는 콘텐츠 브라우저 확장용), 또는 ActorActionUtility (는 액터 확장용)입니다.

  • GetSupportedClass 함수로 액터나 애셋 어느 유형에 액션을 적용할지 지정할 수 있습니다.

  • 이벤트(또는 함수)에 반환 값 없이 로직을 추가하고, “Call In Editor” (에디터에서 호출) 마킹하여 컨텍스트 메뉴에 표시되도록 하면, 이벤트가 발동되었을 때 팝업창이 떠 이벤트에 정의한 파라미터 값을 설정할 수 있습니다.

신규: 애니메이션 리타깃 매니저 개선

애니메이션 리타깃 매니저에 이제 매핑 데이터의 저장과 로드가 지원되어, 저장된 매핑 데이터를 여러 메시에 재사용 할 수 있습니다. 이 기능으로 다양한 애니메이션의 여러 Rig(릭) 데이터를 빠르게 저장하고 재사용할 수 있습니다.

image alt text

자세한 정보는 리타깃 매니저 문서를 참고하세요.

신규: RigidBody (리짓바디) 애님 노드 개선

이제 '로컬 스페이스' 시뮬레이션을 사용하는 스켈레탈 메시 컴포넌트가 월드에서 움직일 때 시뮬레이션 바디에 동작이 적용되는 것을 볼 수 있으며, 시뮬레이션 안정성이 높아집니다. 이제 컴포넌트의 월드 스페이스 선 속도와 가속도를 살펴보는 옵션을 몇 가지 추가하여, 로컬 스페이스 시뮬레이션에 (스케일 및 클램프와 같이) 적용할 수 있도록 했습니다.

어떤 조인트도 시뮬레이션의 베이스가 되도록 하는 옵션을 추가하고, 다이내믹스를 쉽게 리셋하는 기능도 지원합니다.

신규: 클로딩 개선

피직스 애셋은 이제 클로딩 시뮬레이션의 콜리전으로 테이퍼드(가늘어지는) 캡슐을 지원합니다.

참고: 리짓 바디 시뮬레이션의 콜리전에는 지원되지 않습니다.

이제 스켈레탈 메시 버텍스 컬러를 선택된 클로딩 파라미터 마스크에 복사할 수도 있습니다.

신규: 가비지 컬렉션 개선

가비지 컬렉션 퍼포먼스가 최적화되어, 13 배나 빨라진 작업도 있습니다! 구체적인 개선사항은 다음과 같습니다:

  • “Mark”(마킹) 단계가 최적화되었고, 이제 멀티스레드가 지원됩니다. 멀티 코어 머신에서 오브젝트를 도달불가(unreachable) 마킹하는 비용이 오브젝트 약 50 만 개에 대해 8 ms 에서 0.6 ms 로 줄었습니다.

  • “BeginDestroy” (소멸시작) 단계가 (오브젝트 언해싱 작업이) 이제 여러 프레임에 걸쳐 실행되며, 프레임 당 2 ms 이상 사용하지 않습니다. 마킹 단계나 도달가능성 분석과 달리 오브젝트 언해싱 비용은 더 이상 같은 프레임에 포함되지 않습니다.

  • 개발 빌드에서 실행되는 가비지 컬렉션 가정 확인(verification)은 이제 레퍼런스 수집과 동일한 멀티스레드 코드를 사용합니다. 그 결과 개발 빌드에서 가비지 컬렉션 시간이 향상될 것입니다. 에픽의 테스트 결과, 오브젝트 약 50만개에 대한 샘플링 시간이 320 ms 에서 80 ms 미만으로 감소 되었습니다.

신규: Visual Studio 2017

UE4 는 이제 Visual Studio 2017 컴파일러를 사용하며, 엔진은 기본적으로 Visual Studio 2017 용 프로젝트 파일을 생성합니다. Visual Studio 2015 역시 지원은 되지만, 약간의 환경설정이 필요합니다. 추가적으로, Windows 10 SDK 도 지원합니다.

참고: Visual Studio 2017 은 여러 버전의 컴파일러를 설치해 두고 선택하는 기능을 지원합니다.

자세한 정보는 하드웨어 & 소프트웨어 요구사양 문서를 참고하세요.

신규: GitHub 의 개발 스트림

개발 코드 최신 버전이 필요한 경우, 에픽에서 개발 팀 변경사항을 메인 브랜치로 병합시켜줄 때까지 기다릴 필요 없이 바로 GitHub 스트림에서 가져올 수 있습니다. 참고로 이 라이브 스트림은 메인 브랜치나 바이너리 릴리즈와 달리 QA 프로세스를 거치지 않습니다.

자세한 정보는 블로그 게시물 을 참고하세요.

신규: UMG 세이프 존 개선

UMG 와 에디터에서 플레이(PIE) 세팅에서 선택한 화면 크기는 이제 디바이스 프로파일과 연동되어, Mobile Content Scale Factor (모바일 콘텐츠 스케일 인수)도 고려합니다. 최종 해상도와 DPI 스케일이 선택한 디바이스 화면 크기에 따라 변한다는 뜻입니다.

image alt text

image alt text image alt text

UMG 세이프 존 워크플로우 관련 개선사항은 다음과 같습니다:

  • TV 와 모니터 화면 크기 테스트를 위해 1 미만의 값을 사용하면 타이틀 세이프 존 디버그에 세이프 존 프리뷰가 자동 활성화됩니다.

  • r.MobileContentScaleFactor 명령을 사용하면 UMG 프리뷰와 PIE 모드에서 폰과 태블릿 해상도를 스케일 조절합니다.

  • 이제 화면의 특정 부분을 접근할 수 없는 아이폰 X 같은 디바이스에 비균등 세이프 존이 지원됩니다.

  • 세이프 존, 스케일 박스, 커먼 보더 위젯이 비균등 세이프 존과 UMG 디자이너 크기에 제대로 반응합니다.

  • 이제 UMG 에 선택된 디바이스, 그 화면 크기, 균등 스케일 인수가 표시되어 디자이너 그래프에서 쉽게 참조할 수 있습니다.

  • r.MobileContentScaleFactor 명령을 사용하면 UMG 프리뷰와 PIE 모드에서 폰과 태블릿 해상도를 스케일 조절합니다.

자세한 정보는 UMG 세이프 존NEW! 문서를 참고하세요.

신규: 머티리얼의 커브 아틀라스

이제 머티리얼은 커브 아틀라스 애셋을 사용하여 선형 색 커브 데이터를 저장하고 접근할 수 있으며, 블루프린트를 통한 추가 기능도 지원합니다. 커브 아틀라스는 전과 같은 선형 커브 색을 사용하지만, 지정된 아틀라스 크기로 원하는 만큼의 선형 색 커브를 사용할 수 있다는 점이 다릅니다.

커브 아틀라스를 새로 생성하려면, 콘텐츠 브라우저에서 신규 추가 > 기타 부분의 커브 아틀라스 를 선택하면 됩니다.

커브 애셋 에디터를 열면, 커브의 색상, 채도, 명도, 채도보정(Vibrance), 알파 클램프를 조정할 수 있습니다. 추가로 콘텐츠 브라우저의 프리뷰 썸네일에 커브로 설정되는 그레이디언트가 표시됩니다.

자세한 정보는 머티리얼의 커브 아틀라스NEW! 문서를 참고하세요.

신규: 메시 설명 메시 포맷

UE4 는 엔진에서 어떤 유형의 메시 애셋이든 표현할 수 있는 새로운 하이 레벨 중간 포맷으로 전환하고 있습니다. 이 프로세스 진행에 따라 워크플로우가 향상되고 엄청난 신기능을 사용할 수 있게 될 것입니다.

새로운 메시 포맷으로 전환하는 목적은 다음과 같습니다:

  • 모든 (스태틱/스켈레탈은 물론 지형이나 BSP 처럼 메시형 오브젝트라 볼 수 있는) 메시에 내부적 표현을 동일하게 하여 일정 수준 상호 교환이 가능해집니다.

  • 대부분의 UE4 지오메트리 툴은 지오메트리 포맷에 따라 어떤 유형의 메시에도 작동할 것입니다.

  • 새 포맷을 사용하는 메시는 표준 API 를 통해 확인 및 변경할 수 있어, 실시간 또는 네이티브 또는 스크립트 방식의 변경이 가능해지므로, 콘텐츠의 절차적 자동 생성 방식에 많은 가능성이 생깁니다.

  • 메시를 이 포맷으로 바로 임포트해도 쿼드나 에지 하드니스같은 보다 상위 레벨의 메시 표현 정보를 보존할 수 있습니다. 현재 스태틱/스켈레탈 메시를 임포트할 때 이와 같은 정보는 손실되고 있습니다.

  • 새로운 메시 포맷은 아무리 복잡한 메시일지라도 실시간 변경이 가능하도록 내부 구조가 짜여져 있습니다. 이러한 형태는 개발 중인 메시 편집 기능의 기반이 되고, 마찬가지로 스크립트를 지원하며, 앞으로의 릴리즈에 공개될 예정입니다.

이번 릴리즈에는 스태틱 메시만 새로운 메시 포맷을 사용하도록 변환되었습니다. 사용자가 일상적인 작업에 차이를 느끼지는 못할 것이고, 애셋 자체도 변한 것은 없습니다. 현재, 새 데이터는 이전 포맷에서 자동 생성하여 DDC 에 캐시 저장하고 있습니다.

신규: 색 선택 툴에 저장된 색에 라벨 붙이기

이제 테마 바 또는 테마 메뉴에 저장된 색에 라벨을 붙여 쉽게 알아볼 수 있습니다! 라벨은 저장된 색 견본에 우클릭하고 이름을 입력하는 것으로 쉽게 설정할 수 있습니다.

자세한 정보는 색 선택 툴 문서를 참고하세요.

신규: 콘텐츠 브라우저의 최근 열림 필터

콘텐츠 브라우저에 새로 생긴 최근 열림 필터를 사용하면 최근 열었던 애셋을 빠르게 찾을 수 있습니다! 이 필터에는 최근 열었던 애셋이 20 개까지 저장됩니다.

image alt text

최근 열림 필터는 필터 목록의 기타 필터 아래에서 찾을 수 있습니다. 최근 열었던 애셋 저장 개수는 에디터 개인설정 > 콘텐츠 브라우저 에서 Number of Assets to Keep in the Recently Opened Filter (최근 열림 필터에 저장할 애셋 개수) 옵션으로 설정합니다.

자세한 정보는 콘텐츠 브라우저 필터 문서를 참고하세요.

신규: Shotgun 통합 (얼리 액세스)

언리얼 엔진 4 에 새로 통합된 Shotgun 으로 제작 파이프라인 효율을 높이세요!

image alt text

포함된 기능:

  • Shotgun 런처에 언리얼 에디터가 추가되어, 아티스트는 Shotgun 프로젝트에 맞는 언리얼 엔진 버전을 안정적으로 열 수 있습니다.

  • 언리얼 에디터 인터페이스에서 Shotgun 패널을 열 수 있어, Shotgun 프로젝트 작업 최신 내용 업데이트를 받을 수 있습니다.

  • Shotgun 로더에 후킹되어, 애셋을 언리얼 프로젝트로 쉽게 가져올 수 있으며, 콘텐츠 브라우저에 저장할 위치를 제어할 수 있습니다.

  • 레벨의 액터나 콘텐츠 브라우저의 애셋에 우클릭했을 때 나오는 컨텍스트 메뉴에 Shotgun 동작 명령도 추가됩니다.

주: GitHub 통합을 공유하기 전 마지막 작업을 하는 중입니다. 업데이트와 문서는 곧 공개될 예정입니다!

신규: 에디터 스크립팅 및 자동화 라이브러리

에디터 스크립팅 유틸리티 플러그인 이 모든 언리얼 엔진 사용자에게 공개되었습니다. 이 플러그인은 언리얼 에디터의 자동화 및 스크립트 작성, 콘텐츠 브라우저에서 애셋 관련 작업, 현재 레벨의 액터 관련 작업, 스태틱 메시 애셋의 프로퍼티 관련 작업을 단순화시켜주는 인터페이스를 제공합니다.

자세한 정보는 에디터 스크립트 및 자동화NEW! 문서를 참고하세요.

신규: FBX 를 통한 애셋 메타데이터 임포트

언리얼에 FBX 파일을 임포트할 때, 이제 그 파일 안에 저장된 FbxProperty 데이터도 같이 가져옵니다. 언리얼 에디터에서 실행되는 Python 스크립트 또는 블루프린트에서 이 메타데이터를 접근할 수 있습니다. 이렇게 하면 콘텐츠 제작 툴에 있던 애셋 관련 정보에 따라 언리얼 자체 애셋 관리 파이프라인을 커스터마이징하는 데 도움이 될 수 있습니다.

자세한 정보는 FBX 애셋 메타데이터 파이프라인NEW! 문서를 참고하세요.

신규: 스태틱 메시의 LOD 및 콜리전에 대한 접근 개선

언리얼 에디터에서 실행되는 Python 스크립트 및 블루프린트가 이제 더 많은 수의 스태틱 메시 애셋 프로퍼티를 변경할 수 있습니다. 스태틱 메시 에디터의 유저 인터페이스가 제공하는 툴의 일정 부분을 자동화시킬 수 있게 되었습니다. 예를 들면:

신규: 블루프린트 북마크

블루프린트 북마크 기능은 블루프린트 에디터의 아무 함수 그래프에 이름붙인 북마크를 만들 수 있는 기능입니다. 만든 북마크는 새 UI 창에 나열되며, 클릭하면 뷰포트가 (그리고 보고 있던 활성 탭도) 해당 위치와 줌 레벨로 돌아갑니다. 북마크를 만드는 것에 더해, 별도의 목록에서 코멘트를 선택하면 블루프린트의 코멘트 노드로 빠르게 점프할 수도 있습니다. 북마크는 머신 로컬 위치에 저장되므로, 블루프린트 자체에는 영향이 없고, 콘텐츠를 동기화시켜도 다른 사용자의 북마크까지 동기화되지는 않습니다.

신규: 블루프린트 감시 창

블루프린트 감시 창 은 감시하고자 하는 변수와 노드, 심지어 다른 블루프린트에 있는 것도 접근할 수 있도록 하여 디버깅 속도를 높일 수 있도록 설계되었습니다. 에디터에서 여는 모든 블루프린트, 현재 콜 스택의 일부인 감시 데이터를 하나의 목록으로 통합시켜 한 번에 변수와 함수 출력을 조사할 수 있습니다. 또한, 블루프린트 사이를 쉽게 점프해 다닐 수도 있습니다. "노드 이름" 열의 항목에 클릭하면 어느 블루프린트에 있든 그 이름의 노드로 이동할 수 있는 반면, "오브젝트 이름" 열의 항목을 선택하면 그 항목에 연관된 오브젝트 인스턴스가 선택됩니다. 배열, 세트, 맵, 그 외 데이터 구조체를 펼쳐, 그 안에 들어있는 데이터를 빠르고 편리하게 낱낱이 살펴볼 수 있습니다.

image alt text

신규: 내비게이션 시스템 코드를 모듈로 이동

대부분의 내비게이션 시스템 관련 코드를 엔진 코드에서 새로운 내비게이션 시스템 모듈로 이동시켰습니다. 내비게이션 시스템 함수 기능을 사용하는 게임 전용 코드에 업데이트가 필요할 수 있습니다.

Python (3.5) 스크립트 를 통해 프로젝트의 소스 코드를 파싱하여 업데이트가 필요한 줄을 확인할 수 있습니다. 옵션으로 스크립트에서 바로 변경하도록 할 수도 있지만, 이 옵션을 사용할 때는 버전 컨트롤 시스템 하에서 신중히 사용하시기 바랍니다. 스크립트 옵션은 파일 상단에서 찾을 수 있습니다.

이와 관련해서 프로젝트를 업그레이드하는 방법 세부 사항은 Programming Upgrade Notes 부분을 참고하시기 바랍니다.

신규: 모바일 스페큘러 라이팅 모델 개선

모바일 스페큘러 반응 이 기본적으로 GGX 라이팅 모델 을 사용하도록 변경되었습니다. 모바일 스페큘러 퀄리티가 향상되며 SM5 와 더욱 잘 일치되지만 셰이더 처리 시간이 약간 늘게 됩니다.

image alt text

1 - 4.20 기본 GGX 스페큘러; 2 - 4.19 스페리컬 가우시안 스페큘러

이전 스페리컬 가우시안 스페큘러 모델은 여전히 Use legacy shading mode (레거시 셰이딩 모드 사용) 옵션으로 접근할 수 있습니다. 프로젝트 옵션 > 렌더링 > 모바일 에서 찾을 수 있습니다.

신규: 모바일 스카이라이트 리플렉션

이제 모바일 렌더러는 연관된 리플렉션 캡처 가 없는 경우 스페큘러 리플렉션스카이라이트 큐브맵 을 사용합니다.

image alt text

1 - 모바일, 리플렉션 캡처 없음; 2 - PC, 리플렉션 캡처 없음

신규: 리플리케이션 드라이버 / 리플리케이션 그래프

리플리케이션 그래프 플러그인은 액터와 플레이어 수가 많은 게임에 최적화된 리플리케이션 시스템을 제공해줍니다. 이 시스템은 데이터와 연산을 중앙집중화시키는 커스텀 노드 시리즈를 만드는 식으로 작동합니다. 이 노드는 여러 프레임에 걸쳐 지속되며 접속된 클라이언트에 공유시켜 중복 CPU 작업을 제거하고 게임에 지정된 업데이트 규칙에 따라 액터를 노드에 그룹으로 묶는 것이 가능합니다. API 를 변경할 수도 있어 4.20 에서는 실험단계이지만, 포트나이트 배틀로얄에 사용되고 있어 곧 정규 기능이 될 예정입니다.

신규: Steam 인증

Steam 인증이 추가되었습니다! 이제 게임에 Steam 인증 API 와 인터페이스 역할을 하는 패킷 핸들러 컴포넌트를 추가시켜, 게임 서버를 제대로 알리기, VAC/퍼블리셔 밴 처리, 유효 클라이언트 확인 개선 등을 할 수 있습니다. 활성화하면, 서버에 참가하는 클라이언트는 이제 Steam 인증을 받아야 게임에 들어갈 수 있게 됩니다. 기본적으로 인증에 실패한 클라이언트는 서버에서 추방됩니다.

신규: 시퀀서 프레임 정확도 개선

이제 시퀀서는 모든 내부 시간 정보를 정수로 저장하여, 프레임 단위 정확도가 필수인 경우를 안정적으로 지원해줍니다. 키, 섹션 바운드와 같은 데이터는 항상 내재된 사용자 제어 가능 시퀀스 해상도로 고정됩니다. 그 해상도는 사용되는 곳의 요구에 따라 높을 수도 낮을 수도 있습니다. 해상도가 매우 높으면 키 배치와 서브 프레임의 충실도가 높아지지만, 전체 시퀀스 범위는 줄어듭니다.

image alt text

핵심 업데이트 내용:

  • 시퀀서의 시간 커서가 이제 현재 평가 대상 틱 전체 범위를 나타내는 블록으로 표현되어, 어떤 프레임에 평가되는 키가 무엇인지 매우 명확히 알 수 있습니다.

  • Force Fixed Frame Interval (고정 프레임 간격 강제) 재생을 Frame Locked (프레임 고정) 옵션으로 재편했습니다. 엔진 최대 FPS 를 시퀀스의 표시 속도로 설정하고, 시간을 (서브 프레임 보간 없이) 전체 프레임 번호에 고정시킵니다.

  • (UMG 애니메이션처럼) 프레임 정확도를 고려할 필요가 없는 상황을 위해 서브 프레임 평가도 그대로 완벽 지원합니다.

  • 실행시간 평가를 위해 이제 엔진 시계(월드 일시정지 지원), 오디오 시계, 플랫폼 시계와 같은 다양한 소스의 시간이 지원됩니다.

  • 이제 UI 를 논 드랍 프레임 (NDF) 타임코드 및 드랍 프레임 (DF) 타임코드로 볼 수 있습니다. NDF 타임코드는 모든 프레임 속도에 사용할 수 있으며, 프레임 번호를 시간, 분, 초, 나머지 프레임으로 직접 변환합니다. DF 타임코드는 NTSC 속도(23.976, 29.97, 59.94)에만 지원됩니다. 표시 형태는 키보드 단축키 Ctrl + T 또는 프레임속도 UI 메뉴에서 바꿀 수 있습니다.

자세한 정보는 새로운 시퀀서 타임 리팩터 노트NEW! 문서를 참고하세요.

신규: 시퀀서의 미디어 트랙

시퀀서에 미디어 소스 재생을 위한 트랙이 새로 생겼습니다. 무비를 위한 오디오 트랙 같은 것입니다. 단순히 미디어 소스 애셋을 끌어 트랙 뷰에 놓거나 트랙 추가 메뉴에서 미디어 트랙 을 생성하면 됩니다. 이 기능은 현재 이미지 시퀀스, 특히 EXR 과 함께 할 때 가장 좋습니다. 미디어 트랙의 이미지 시퀀스는 렌더링 출력과 프레임이 정확히 동기화됩니다.

image alt text

자세한 정보는 미디어 트랙 사용법 (영문) 문서를 참고하세요.

신규: 시퀀서 커브 에디터 및 평가 개선

시퀀서의 커브 에디터, 평가 방식이 여러가지 개선되었으며, 구체적으로 다음과 같습니다:

가중치 적용 탄젠트가 플로트 커브에 지원됩니다.

image alt text

시퀀서 커브 에디터에 가중치 적용 커브 사용

회전 값을 변경할 때 Euler Angle (오일러 각도) 연속 변화를 지원합니다. 오일러 각도가 더 이상 -180 에서 180 까지로 제한되지 않습니다. 기존에는 애니메이션이 뒤집히는 것을 방지하기 위해 필수였습니다.

이제 트랙의 프로퍼티 메뉴를 통해 3D Transform Section (3D 트랜스폼 섹션)의 Quaternion Rotation (쿼터니언 회전) 옵션을 켜면, 두 회전 값을 보간할 때 쿼터니언 보간을 사용하여 부드럽게 보간합니다. 기존 마티네에 있었던 기능과 비슷합니다.

신규: 시퀀서에서 애님 인스턴스의 변수에 애니메이션 지원

이제 Possessable(포제서블)을 통해 애님 인스턴스 의 변수 값을 변화시켜, 애님 블루프린트 변수나 함수 및 여러 콘텐츠를 직접 제어할 수 있게 되었습니다. 시퀀서에 애님 인스턴스 바인딩 추가는, 스켈레탈 애니메이션 컴포넌트의 [+트랙] 버튼에서 이름을 찾아 선택하면 됩니다. 시네마틱에 노출되는 변수는 그 트랙 선택기에 표시됩니다.

자세한 정보는 시퀀서로 애님 인스턴스 제어하기NEW! 문서를 참고하세요.

신규: 시퀀서에서 Final Cut Pro 7 XML 임포트/익스포트

이제 시퀀서 무비 씬 데이터를 Final Cut Pro 7 XML 포맷으로 임포트/익스포트할 수 있습니다. 그 덕에 FCP 7 XML 을 지원하는 Adobe Premiere Pro 와 같은 편집 소프트웨어와 데이터를 쉽게 주고받을 수 있습니다. 편집 소프트웨어에서 했던 샷 트림/오프셋 작업이 임포트 도중 시퀀서에 자동으로 매핑됩니다.

참고: 현재 오디오는 지원하지 않습니다.

신규: 시퀀스 레코더 개선

시퀀스 레코더 는 이제 퍼시스턴트 레벨에 저장되는 프로파일 시스템을 지원합니다. 레코딩 프로파일은 녹화하고자 하는 액터와 그 세팅 뿐만 아니라, 녹화 데이터를 저장할 출력 경로도 저장할 수 있습니다. 또한 시퀀스 레코더는 이제 선택된 액터 각각에 대한 다중 테이크 녹화도 지원합니다.

자세한 정보는 시퀀스 레코더 문서를 참고하세요.

신규: 시퀀서 트랙 사용 편의성 개선

시퀀서 안에서 트랙 을 더욱 편하게 사용하기 위한 여러가지 업데이트가 있었습니다. 이제 트랙, 액터, 폴더 순서를 변경할 수 있고, 이벤트 트랙 이름이 이벤트 키프레임 옆에 표시되며, 섹션을 소스 길이에 맞춰 크기를 조절하거나, 트랜스폼 채널 별로 마스크를 적용할 수도, 블렌드된 포즈에서 포즈 애셋을 생성할 수도 있습니다.

자세한 정보는 새로운 시퀀서에서 트랙 작업 방법NEW! 문서를 참고하세요.

신규: 인스턴스드 스테레오 렌더링에 반투명 지원

로보 리콜을 위해 만들었던 인스턴스드 스테레오 렌더링(ISR) 패스를 개선시켜, 엔진의 다른 여러 기능과도 작동하도록 만들었습니다. 언리얼 엔진 4.20 에는 인스턴스드 스테레오 렌더링을 사용해서 반투명 렌더링 패스(pass)를 수행하는 기능이 지원되어, 반투명이 많이 사용되는 씬의 CPU 비용을 크게 줄일 수 있습니다. 콘텐츠를 변경할 필요는 없습니다. 프로젝트 세팅에서 인스턴스드 스테레오를 활성화시킨 프로젝트는 자동으로 인스턴스드 스테레오 렌더링 효과를 볼 것입니다.

신규: Magic Leap One™ 얼리 액세스 지원

GDC 에서 Magic Leap One™: Creator Edition에 대한 얼리 액세스 지원을 발표한 바 있습니다. 이 툴은 Magic Leap의 개인 공간 컴퓨팅 플랫폼용 체험을 빠르게 개발할 수 있는 소프트웨어 툴키트이며, 양사간 대규모 파트너십의 일환으로 제공되었습니다. 이제 언리얼 엔진 4.20 버전부터 완벽 지원되는 버전으로 Magic Leap One™ 개발이 가능합니다.

image alt text

Magic Leap One 지원은 카메라 컨트롤, 월드 메시, 모션 컨트롤러, 포워드 및 디퍼드 렌더링같은 것에 언리얼 엔진 4 내장 프레임워크를 사용합니다. 아이 트래킹 및 제스처와 같은 기능도 더욱 안정적으로 지원합니다.

Magic Leap 소프트웨어 개발 키트 및 시뮬레이터 다운로드는 developer.magicleap.com 에서 할 수 있습니다. 하드웨어 접근 권한이 있는 개발자의 경우, 언리얼 엔진 4.20 에서 디바이스에 바로 디플로이하고 실행시킬 수 있으며, 에디터에서 플레이 기능을 통한 실시간 반복처리 워크플로우도 지원합니다.

신규: Apple ARKit 2.0 지원

이제 Apple 의 ARKit 2.0 이 지원됩니다. 여기에는 트래킹 퀄리티 향상, 수직면 감지, 면 트래킹, 2D 이미지 감지, 3D 오브젝트 감지, 지속적인 AR 체험 및 공유 AR 체험 지원 등이 포함됩니다. 그 덕에 더욱 다양한 표면에 AR 오브젝트 배치, 면 위치와 방향 트래킹, 2D 이미지 인식 및 생동감 부여, 3D 오브젝트 감지, 새로운 유형의 협력혀 AR 체험 지원이 가능해졌습니다.

신규: Google ARCore 1.2 지원

이제 Google의 ARCore 1.2 가 지원됩니다. 여기에는 수직면 감지, 증강 이미지, 클라우드 앵커 지원이 포함됩니다. 그 덕에 더욱 다양한 표면에 AR 오브젝트 배치, 이미지 인식 및 생동감 부여, 새로운 유형의 협력형 AR 체험 지원이 가능해졌습니다.

신규: 플랫폼 SDK 업그레이드

매 번 릴리즈마다 플랫폼 파트너들이 발표한 최신 SDK 를 지원하도록 엔진을 업데이트하고 있습니다.

image alt text

  • 빌드 팜의 컴파일 대상 IDE 버전

    • Visual Studio: Visual Studio 2017 v15.6.3 toolchain (14.13.26128), Windows 10 SDK (10.0.12699.0)

      • 최소 지원 버전

        • Visual Studio 2017 v15.6

        • Visual Studio 2015 Update 3

    • Xcode: Xcode 9.4

  • Android:

    • NDK 12b (릴리즈 전 CodeWorks for Android 1r6u1 인스톨러 새 버전이 이전 CodeWorks for Android 1R5 버전을 대체할 것입니다. 아직 NDK 12b 입니다.)

  • HTML5: Emscripten 1.37.19

  • LInux: v11_clang-5.0.0-centos7

  • Lumin: 0.12.0

  • Steam: 1.39

  • SteamVR: 1.39

  • Oculus Runtime: 1.25

  • Switch:

    • SDK 4.5.0 + 옵션 NEX 4.2.1 (펌웨어 4.1.0-1.0)

    • SDK 5.3.0 + 옵션 NEX 4.4.2 (펌웨어 5.0.0-4.0)

    • 지원하는 IDE: VS 2015 / 2017

  • PS4:

    • 5.508.031

    • 펌웨어 버전 5.530.011

    • 지원하는 IDE: Visual Studio 2015, Visual Studio 2017

  • Xbox One (XB1, XB1-S, XB1-X):

    • XDK: April 2018

    • 펌웨어 버전: April 2018 (version 10.0.17133.2020)

    • 지원하는 IDE: Visual Studio 2017

  • macOS: SDK 10.13

  • iOS: SDK 11

  • tvOS: SDK 11

RELEASE NOTES

AI

  • Bug Fix: Updates have been made to the Instance Prepare Context Function of Env Query which will now return vectors and rotators now ignore Invalid Location and Invalid Rotation.

  • Bug Fix: Updates have been made so the Env Query Item Type_Actor of Get Item Location function and Env Query Item Type_Actor of Get Item Rotation function now return Invalid Location and Invalid Rotation instead of 0 when the hosted Actor pointer is set to null.

  • Bug Fix: The On Listener Forgets Actor function of AI Sense_Sight now removes queries only relating to the actor being forgotten.

  • Bug Fix: The AI Sense Config Blueprint and AI Sense Blueprint no longer show up in class drop-downs when selecting AI senses.

  • Bug Fix: Donut EQS generator no longer fails if inner radius is set to 0.

  • Bug Fix: THe Env Query Manager and Behavior Tree Manager classes are now transient to avoid being accidentally serialized.

  • Improvement: The Get Raw Value Ptr function of AI Data Provider Value is now accessible from outside of the AI Module

  • Improvement: Additional functions from Blueprint Node Helpers are now exposed in the AI Module's API.

  • Improvement: More public properties from AI Controller have now been exposed to Blueprints.

Behavior Tree
  • Bug Fix: The correct tooltips for Composite Behavior Tree nodes are now displayed in the Editor.

  • Bug Fix: The Rotate To Face BB Entry Behavior Tree Task now properly faces the location of the target agent.

Debugging Tools
  • Bug Fix: Navmesh debugging now properly displays octree elements with "per instance transforms".

  • Bug Fix: 'Get Categories' in the Visual Logger Helper no longer omits relevant information when called.

  • Improvement: Code maintainability and performance upgrades have been made to Nav Mesh Rendering Component when drawing navmesh and octree collision polys.

  • Bug Fix: The Static Mesh Editor now display AI-navigation-related data whenever Has Navigation Data is set to true.

  • Bug Fix: Navigation data gathering has been fixed for navmesh tile generation by expanding tile's bounding box by the agent's radius.

  • Bug Fix: Layers are now removed after Navmesh generation if they become empty after rebuilding the Navmesh.

  • Bug Fix: Calling Set Poly Area in Recast NavMesh no longer sets an improper flag when changing the poly's Area ID.

  • Improvement: The Tick in Navigation System Base is now called even when the world is paused.

  • Improvement: The Navigation System Config can now be subclassed to allow configuration of other aspects of navigation system, like overriding or modifying the Supported Agents list.

  • New: A flag has been added to Nav Modifier Component to control whether agent's height is being used while expanding the modifier's bounds during navmesh generation.

  • New: A Console Variable has been added that controls whether to cook and use Nav Collision.

  • New: World Settings has a property, called Navigation System Config, that allows you to specify the Navigation System class to be used on a per-world basis.

Animation

  • Crash Fix: Fixed a crash when attempting to shut down a Message Bus Source after the Heartbeat Manager had already been shut down.

  • Crash Fix: Fixed a crash when re-importing a Skeletal Alembic asset and placing it in the world.

  • Crash Fix: Trying to extract a transform from a raw track with no track data no longer crashes.

  • Crash Fix: Re-registering a Skeletal Mesh Component with a post process instance that references deleted virtual bones will no longer crash.

  • Crash Fix: Fixed crash on deleting Virtual Bones that are referenced by Bone Controller nodes.

  • Bug Fix: Fixed Live Link Client Panel not refreshing for sources that were not added through UI.

  • Bug Fix: Fixed an issue where the Skeletal Mesh was not ticking correctly and updating its bounds (it would use the cached bounds with an extent of 0 and not render).

  • Bug Fix: Fixed not-a-number (NaN) values occurring during Blend Space sampling.

  • Bug Fix: Fixed issue with double ticking a reused Animation Instance on set Skeletal Mesh because of parallel evaluation.

  • New: Added Anim Instance Get LOD Level override point to allow custom Anim Instances the ability to provide a different (potentially significance-based) LOD to the graph update/eval phase.

  • New: Added Blueprint functions to create a Message Bus Source for use in projects where the Editor UI is not available or is impractical.

  • New: Added a remapping of curve values in a range to the modify curve anim node.

  • New: Added a weighted moving average method to the modify curve anim node.

  • Improvement: Reduced per-frame allocations in the animation system.

Animation Assets
  • Crash Fix: Fixed a crash when retargeting a Skeleton when some of its animations are still open.

  • Crash Fix: Fixed a crash on Pose Asset when Skeleton has changed hierarchy.

  • Bug Fix: Fixed additive blending in PoseAsset.

  • Bug Fix: Fixed a deterministic cooking issue where notify names could change during load.

  • Bug Fix: Montage or Anim Blueprint assets can no longer modify the Skeleton during cook (causing non-deterministic cooking).

  • Bug Fix: Using the name "None" in a curve will no longer cause it to disappear.

  • Bug Fix: Fixed incorrect preview mesh being applied after retargeting an animation.

  • Bug Fix: Bone rotations are now forced to be normalized during bone extraction from raw animation data.

  • Bug Fix: Animations that have transform curves are considered up to date upon loading.

  • New: Added animation names to ensure when missing anim data.

  • New: Added notification when updating source for the Pose Asset.

  • New: Added Blueprint interface to get list of curve names, consisting of Get Active Curve Names, and Get All Curve Names. Pose Assets can use this interface to get pose names instead of curve names.

  • New: Materials can now be set on a Geometry Cache asset.

  • New: Added Socket Override Lookup to the Skinned Mesh Component, which will allow mapping one socket to another and when calling Get Socket By Name or Get Socket Bone Name.

  • New: Added LISTANIMS console command to generate CSV report on all loaded anims.

Animation Blueprints
  • Crash Fix: Fixed a crash when opening Animation Blueprints with sub graph inputs.

  • Crash Fix: Fixed a crash when running a standalone editor build using Animation Blueprint sub-instances that copy properties.

  • Bug Fix: Fixed Skeletal Mesh Components using post process Anim Instances but not anim script instances running on the Game Thread (work is now correctly pushed off-thread).

  • Bug Fix: Fixed duplicate node GUIDs in the Animation Blueprints that were causing state machine transition errors.

  • Bug Fix: Wrapped wind update using dynamics console variable so unnecessary work is not done if dynamics aren't running.

  • Bug Fix: Fixed issues with Skeletal Mesh Component teleports not being passed through to in-graph dynamics nodes. They are now passed through from transform updates.

  • Bug Fix: Fixed teleports causing anim dynamics to duplicate the limits that are generated, causing over-corrections for constraints.

  • Bug Fix: Animation state machine correctly handles copy-pasted transition getter nodes.

  • Bug Fix: Fixed stretching on spawn for Skeletal Mesh Components using Rigid Body Node.

  • Bug Fix: Fixed bad initial rigid body node states when spawned with non-reference pose.

  • Bug Fix: Fixed NaN in Rigid Body node when teleporting on a zero timestep.

  • New: Anim dynamics can now be globally turned off at a specific LOD threshold.

  • New: Added ECVF_Scalability to anim dynamics CVars.

  • New: RigidBody node supports any joint as a base of simulation.

  • New: RigidBody node supports reset dynamics. Anim Instance supports reset dynamics, and if you call it, it will reset simulation.

  • New: Added console variables to control rigid body node update and evaluation.

  • New: Added deterministic cooking warning to node GUID fix-up in Animation Blueprints to suggest a resave.

  • New: Added new "Apply limits" anim node.

  • New: RigidBody AnimNode has new options to automatically apply local space accelerations based on world component translation. Options are only active when using a non-worldspace simulation:

    • Component Linear Acc Scale - Amount of world space acceleration should be applied in local space (should be between 0 and 1)

    • Component Linear Vel Scale - Applies 'drag' to a body in the local space, based on the components world-space velocity.

    • Component Applied Linear Acc Clamp - Overall clamp on acceleration applied by Component Linear Acc Scale and Component Linear Vel Scale options.

  • New: Bone references are now validated during compilation for all anim graph nodes that use them.

  • Improvement: Optimized cases when Update Curve was called many times if you were using Sub Anim Instance and/or Post Process Graph.

  • Improvement: Animation Curves have faster lookups, and are not evaluated unless they're actively used.

Animation Tools
  • Crash Fix: Fixed a crash when undoing an operation performed in a Skeletal Mesh editor after it is closed.

  • Bug Fix: Fixed an issue with Skeletal Mesh bake pose not correctly applying when containing non-uniform scaling.

  • Bug Fix: Fixed accidental operation of pinned commands when closing them in animation editor viewports.

  • Bug Fix: Notify Trigger Chance is now hidden for anim notify states, since it has no effect.

  • Bug Fix: Automatic rules for animation state transitions are now shown in tooltips.

  • Bug Fix: Fixed anim notify drag/drop not allowing movement beyond halfway on high DPI displays.

  • Bug Fix: Prevented Blueprint notifies from destroying the animation preview actor.

  • Bug Fix: Fixed cropping of animations that have transform curves.

  • New: Added an "auto blend out" option to Anim Montage.

  • New: Animation Retargeting Manager now supports loading/saving the mapping data.

  • New: The Control Rig Experimental feature has been refactored, you now can create your own rig using Control Rig Blueprint.

  • New: In the Skeletal Mesh Editor, added section settings to ignore a section when creating a reduced LOD.

  • New: Added new animation viewport notifications.

  • New: Added option to preview Fixed Bounds in Skeletal Mesh tools.

  • New: Blendspace samples can now be be optionally moved off-grid by holding Alt and dragging samples to disable grid snapping.

  • New: Enabled "Follow Bone" to be popped out of the menu into the viewport by shift-selecting.

Import/Export
  • Bug Fix: Re-importing a mesh will no longer clear the Post Process Graph.

  • Bug Fix: Fixed an issue with not Regenerating LODs when re-importing Skeletal Meshes and when it has been simplified, causing mismatched LOD data.

**Skeletal Mesh**
  • Crash Fix: Fixed a crash in lazy-initialization of morph targets when LODs are stripped from Skeletal Meshes.

  • Crash Fix: Fixed crash when Skeletal Mesh tangent buffer is empty after the build and we serialize the tangent array.

  • Crash Fix: Importing a Skeletal Mesh with no vertices no longer crashes.

  • Crash Fix: Fixed an editor crash when setting Min LOD above the total number of LODs for Skeletal Meshes.

  • Bug Fix: Fixed various issues with Bake Pose related to missing animations, sharing Skeletons, and removing joints.

  • Bug Fix: Statically-rendered Skeletal Meshes now correctly report their rendered LOD.

  • New: Added a new console variable "r.SkeletalMesh.StripMinLodDataDuringCooking" which, when non-zero, will strip out unused rendering data as the asset is cooked.

  • New: Added per-platform minimum LOD for Skeletal Meshes.

  • New: Added per-platform overrides for Skeletal Mesh screen size.

  • New: Master pose component will now ensure slaves are using ref pose for the missing joints.

  • New: Added "Use High Precision Tangent Basis" option on Skeletal Meshes.

  • New: Recompute Tangent and Skin cache will now be higher precision (16 bits per channel).

  • Deprecated: The wireframe color in Skinned Mesh Component has been deprecated.

Audio

  • Crash Fix: Fixed a crash when Audio Capture Component is re-initialized.

  • Crash Fix: Fixed a crash when flushing audio device.

  • Crash Fix: Calling "Set Sound Wave" on Synth Sample Player or Synth Granulator no longer crashes.

  • Crash Fix: Fixed audio component threading issue, which could manifest in crashes during async loads.

  • Crash Fix: Audio Capture components don't crash if they are started a second time during a play session.

  • Bug Fix: Fixed an issue where Synth Sample Player would not play a Sound Wave set in Property Inspector.

  • Bug Fix: Fixed an issue where recording audio for a Sequence would keep the Editor from properly shutting down.

  • Bug Fix: Fixed issues with seeking Sound Waves on iOS.

  • Bug Fix: Fixed an issue where the Delay Submix Effect was over-allocating for delay lines.

  • Bug Fix: Fixed issue with Distance Scale with Focus Feature and Attenuation Settings.

  • Bug Fix: Fixed issue where audio was cut off abruptly when a UE4 application was moved to the background on iOS.

  • Bug Fix: Fixed regression that caused no audio to be returned when applications directly queried IVoiceCapture.

  • Bug Fix: Fixed Quality issues with mic component.

  • Bug Fix: Fixed issue where Set Mic Threshold Blueprint function would not change the threshold value on shipping builds.

  • Bug Fix: Audio now stops sounds when destroying its data.

  • New: Added settings fields, enabling iOS and Android to use specific quality indices by default on SoundCue nodes.

  • New: Added settings fields, enabling iOS and Android packaged projects to use a maximum amount of branches on a random node to reduce memory usage.

  • New: Audio assets can now be resampled when being cooked for iOS and Android.

  • New: Added BypassVolumeScaleForPriority bool to SoundBase properties, enabling specified sounds to ignore Volume Weighting during Priority Sort.

  • New: The Steam Audio Plugin now supports AMD TrueAudio Next on supporting platforms.

  • New: Added ability in C++ to register an ISubmixBufferListener with FAudioDevice to receive post-mixed audio buffers from any Submix.

  • New: Added simple source delay effect.

  • New: Added class type, enabling inherited versions of UAudioComponents to be created.

  • New: Activated reverbs will now take priority when World Settings are used (for example, no Volume Proxy is in use).

  • New: Added ability to bypass volume-weighted prioritization for sound sources and only use priority.

Automation

  • Crash Fix: Fixed crash during Editor Asset automation tests.

  • New: Added a Build Reflections option to the Resave Packages commandlet.

Blueprints

  • Crash Fix: Fixed crash when cooking with Blueprint Nativization enabled after encountering a nested, instanced, Editor-only default subobject inherited from a native C++ base class.

  • Crash Fix: Fixed crash when removing a pin that has been split from a "Make Struct" node.

  • Crash Fix: Fixed crash in Actor Component Instance Data floats, which occurred after deleting a Blueprint function.

  • Crash Fix: Fixed crash when redoing a change to a Blueprint's sub-object.

  • Crash Fix: Fixed random crashes seen when running searches in multiple global Find-In-Blueprint tabs.

  • Crash Fix: Fixed crash where the Component Instance Data Cache would try to duplicate streaming Levels when Component Delegates were bound to Actors in that Level.

  • Crash Fix: Fixed crash when deleting multiple Bookmarks selected in the Bookmarks tree view.

  • Crash Fix: Fixed occasional crash when dropping a Blueprint onto a node.

  • Crash Fix: Fixed rare crash when hovering over invalid Blueprint nodes.

  • Crash Fix: Fix crash when reloading or force deleting Blueprints open in a Blueprint diff window.

  • Crash Fix: Fixed crash when Find in Blueprints discovered a string table reference.

  • Crash Fix: Fixed crash when selecting an invalid interface class.

  • Bug Fix: Fixed memory corruption that occurs when reparenting a Blueprint to a class that already has a property of the same name as a component in the Blueprint.

  • Bug Fix: Fixed scoping issue for generated instanced sub-object reference local variables in nativized Blueprint C++ code.

  • Bug Fix: Fixed build failure that could occur with Blueprint Nativization enabled and EDL disabled.

  • Bug Fix: Set & Map fields containing converted assets are now properly emitted with proper syntax to generated C++ Blueprint class headers when Blueprint Nativization is enabled.

  • Bug Fix: Fixed bug where gameplay tag container literal created in Blueprints would not be correctly initialized, and the parent tags would not be populated.

  • Bug Fix: Blueprint Nativization bug fixes, including:

    • Ensured that Safe Context Scoped Emitters Validation Chains generate code calls to the global "Is Valid" utility function on objects.

    • Blueprint Compiler Backend class Emit Create Array Statement function now generates a proper cast on "Make Array" node inputs for enum class types.

    • Modified the Blueprint Compiler Backends' Emit Call Statement Inner function to more correctly identify an interface function call site.

    • Modified Emit Helpers' Generate Automatic Cast function to properly handle automatic casts of enum arrays.

    • Added new Component Data Utils static functions to consolidate custom init code generation for converted special-case component types (for example, BodyInstance). This ties native DSOs to the same pre or post steps as converted non-native component templates around the "Outer Generate" loop.

    • Modified Expose On Spawn Validator's "Is Supported" function to include CPT Soft Object Reference property types.

    • Modified Blueprint Generated Class' Check And Apply Component Template Overrides function to no longer break out of the loop before finding additional ICH override record matches.

  • Bug Fix: Ensured that sub-object class types are constructed prior to accessing its CDO in a nativized Blueprint class' generated C++ constructor at runtime in a cooked build.

  • Bug Fix: Fixed bug where the class of the "Get Class Defaults" node was being set to None.

  • Bug Fix: Fixed incorrect access to nested instanced subobjects in nativized Blueprint C++ constructor code.

  • Bug Fix: Fixed an ensure when exiting PIE after tracing into a BP Function Library source graph while single-stepping.

  • Bug Fix: Reduced the number of stat events generated by Blueprint execution. This reduces overhead, and makes things easier to read when using event-based 'flame graph' captures.

  • Bug Fix: Disabled ticking for Level Script Actors (if not used).

  • Bug Fix: Functions that require a World context can now correctly be used in CheatManager-derived Blueprints.

  • Bug Fix: Avoid inclusion of monolithic engine header files in nativized Blueprint C++ code.

  • Bug Fix: Resetting an array property to its default value now properly propagates to derived Blueprint's default values.

  • Bug Fix: Fixed Compositing Plugin source files to conform to updated relative include path specifications, ensuring compatibility with Blueprint Nativization.

  • Bug Fix: Integer math functions are now consistently tagged in menus.

  • Bug Fix: Fixed case where sub components with bAutoRegister false would get registered anyways.

  • Bug Fix: Fixed EDL cycle at load time in nativized cooked builds when a circular dependency exists between converted and unconverted Blueprint assets.

  • Bug Fix: Fixed array functions Add, Add Unique, Insert, and Remove, which were not correctly using the appropriate boolean value when a bit-packed boolean member function was supplied as input.

  • Bug Fix: Fixed initialization of special UMG struct types in nativized Blueprint Actor code.

  • Bug Fix: Improved handling of circular dependencies during Blueprint Nativization between converted and unconverted assets.

  • Bug Fix: You can now successfully set the category for Timeline component variables in the My Blueprint tab.

  • Bug Fix: Negate, Increment, Decrement Int, and Float macros output the desired result, even if a non-mutable pin is passed in.

  • Bug Fix: Undo of changing select node index type now works correctly. Connections to option pins are now maintained across change of index pin type.

  • Bug Fix: Blueprint pins on some nodes were incorrectly being displayed as out of scope because they were not directly under the active object being debugged.

  • Bug Fix: Message (interface) call nodes no longer display the Skeleton class name in the node subtitle.

  • Bug Fix: Fixed comments on Map and Set Add Blueprint library functions.

  • Bug Fix: Prevent "Defer Dependency Loads" from being dropped when we preload an object in another linker.

  • Bug Fix: Blueprint Native Event methods declared an interface class now implement the required Implementation method as Pure Virtual function rather than declare it as pure virtual in the UHT-generated boilerplate code, enabling Blueprint classes that implement a native C++ interface declaring one or more Blueprint Native Event methods to be nativized.

  • Bug Fix: Significantly optimized performance when refreshing the components tree in the Actor details panel.

  • Bug Fix: Fixed deterministic cooking issue by avoiding use of Make Unique Object Name when instantiating component templates.

  • Bug Fix: The compilation manager avoids purging old classes until they are being recompiled, fixing an issue that could cause Construct Object to fail to assign values on construction.

  • Bug Fix: Fixed existing placements of nativized Blueprint Actors with a non-zero (legacy) root component scene transform at the CDO level.

  • Bug Fix: Setting a Class Blueprint variable will correctly enable unloaded Blueprint children to be selected in the picker.

  • Bug Fix: When Blueprint debugging during PIE, step over and out commands no longer cause the mouse pointer to jump back to the game viewport after each step.

  • Bug Fix: Breakpoints on nodes that are connected to "For Each" Loops are no longer skipped.

  • Bug Fix: Soft Object / Class reference variables now correctly validate the type of an asset that is dragged or pasted into them, which prevents making invalid references from the Editor.

  • Bug Fix: Soft Object / Class references stored in Blueprint function local variables are now correctly tracked when Blueprints are saved, which means that they will be properly fixed up when assets are redirected, and may pull more content into your cook if you have unused local variables.

  • Bug Fix: Editable Blueprint events now add 'const' to array type and reference parameter properties when compiled.

  • Bug Fix: Sub-Anim instance nodes can now orphan pins as expected.

  • Bug Fix: Blueprints will no longer warn on load about member get nodes for members that have been removed if they are just on the canvas and not be used during compilation.

  • Bug Fix: Fixed a bug where Blueprint async task node names could not be redirected after a function rename.

  • Bug Fix: Blueprints are now reparented before replacing references when using the 'delete and replace references' tool, making the delete and replace references workflow more reliable when performed on Blueprint assets.

  • Bug Fix: Prevent struct properties with an Identical type trait (for example, Gameplay Tag Container) from showing up as different in a Blueprint diff, even if they were unmodified.

  • Bug Fix: Fixed a typo in name validation error messages where the name was already in use.

  • Bug Fix: Keyboard navigation when selecting an object or asset from a Blueprint node now works correctly.

  • Bug Fix: Fixed issue where reroute nodes inside macros could break AutoCreateRefTerm function parameters.

  • Bug Fix: Fixed an invalid child Actor template cast in nativized Blueprint code when the child actor class type is a converted Blueprint class asset.

  • New: Exposed vertex and triangle counts for Skeletal Meshes to Blutilities.

  • New: Exposed collision complexity to Blutility scripting.

  • New: Exposed more static mesh functionality to Editor scripting.

  • New: Add new parameter UX on a Blueprint delegate is now at parity with Blueprint functions.

  • New: Added the ability for Blueprint async task nodes to have additional output parameters, which can be added to the exposed factory method.

  • New: Added several Blueprint methods for reading color values from render targets.

  • New: Added a Blueprint method (Import File As Texture2D) for loading an image file from disk and creating a texture from it.

  • New: Exposed Blueprint nodes for "Get Number Verts" and "Get LOD Screen Sizes" functions for Static Mesh exposed in the Static Mesh Utility Library.

  • New: Added UV1, UV2, UV3 inputs to Procedural Mesh Component.

  • New: Pins for Blueprint async task nodes now display Tooltips consistent with other functions.

  • New: By default, the "For Each Enum" node will now skip over values marked as 'Hidden' in new placements, additionally, a new input pin has also been added into the "Advanced" section on the node, enabling users to control this behavior if needed.

  • New: Select node now displays "Add Pin" button.

  • New: Display "Object Reference" instead of "Object Object Reference", and display "Soft Object Reference" instead of "Object Soft Object Reference".

  • New: Select node now resets pins to wildcard if none of the pins are in use.

  • New: Execution flow, Blueprint call stack, and Blueprint watchpoint viewer refactored into a single Blueprint Debugger tab.

    • The call stack viewer now indicates whether the call stack is stale, and the watch point viewer layout now matches the call stack viewer.

  • New: Modified the watch window to provide more clarity for when watches have valid information versus stale watch values. Watches in the window are only valid when Blueprint execution is paused, and when execution is paused, the window will update to show the values for all Blueprint instances in the current call stack.

  • New: Exposed "Get Local Role" function to Blueprints, returning the value of the "Role Member Property."

  • New: Enable modification of camera shake oscillators at runtime in Blueprints.

  • New: Exposed the Game Mode class' "Player Can Restart" function to Blueprints.

  • New: Exposed PlayerController class' "Can Restart Player" function to Blueprints.

  • New: Exposed Playerm Camera Manager class' "Client Simulating View Target" boolean to Blueprints.

  • New: "Last Hit By" reference on Pawns now marked as Blueprint Read Only.

Core

  • Crash Fix: Fixed a threading crash with non-scoped Low-Level Memory tracking (seen in Android GL tracking).

  • Crash Fix: No longer crashes when disabling a cooling down tick function during a pause frame.

  • Crash Fix: Fixed a Startup crash that could happen depending on file compilation order.

  • Crash Fix: Deserializing tagged property containers containing bad elements no longer crashes.

  • Crash Fix: Fixed a crash in when allocating memory with the Malloc profiler.

  • Crash Fix: CSV Profiler no longer crashes on exit.

  • Crash Fix: Fixed crashes caused by defining UObjects with certain types of constructors.

  • Crash Fix: Fixed a Slate crash related to the Async Loading Thread.

  • Crash Fix: Fixed crashes when converting filenames to long package names and when running commandlets.

  • Crash Fix: Fixed A crash while destroying global Engine objects during shutdown.

  • Bug Fix: Fixed some Pak file code to use an int64 instead of int32 to handle large pak files.

  • Bug Fix: Undo/Redo history in Editor now works as expected.

  • Bug Fix: Fixed a buffer overrun when copying a context string in Malloc Leak Detection.

  • Bug Fix: Changed the internal Object Array to not be allocated up front. This fixes strange OOM reports on Editor startup.

  • Bug Fix: Made TCircularQueue thread-safe.

  • Bug Fix: MediaPlayer module no longer loads on non-game threads, as this could lead to thread safety issues when the Async Loading Thread was enabled.

  • Bug Fix: Corrected a buffer overflow debug logging code.

  • Bug Fix: Fixed abbreviations not displaying properly in Editor dialogs.

  • Bug Fix: Plugged a potential LinkerLoad leak when a package that still has a linker associated with it is being destroyed.

  • Bug Fix: Calling Reset on a String sometimes now always results in a null-terminated String.

  • Bug Fix: Unchanged Levels are no longer included in Pak patches.

  • Bug Fix: When Blueprint Clustering is enabled, the Widget Blueprint template will also be added to the parent cluster when the template is being replaced.

  • Bug Fix: Asset encryption settings are now being properly parsed from .ini files by UBT.

  • Bug Fix: Enabled C++ 14 usage of decltype(auto) in TTuple. This preserves the Engine's ability to compile in C++ 11.

  • Bug Fix: Corrected Format Int To Human Readable function for values greater than 999999 or negative.

  • Bug Fix: Asset redirectors can now redirect from a parent class to a child class, which can happen when using Consolidate Assets.

  • Bug Fix: Editor tutorials and related content are not accidentally included in a cooked build. References loaded from editor project settings are now treated as Editor-only.

  • Bug Fix: Fixed issue where the cooker could incorrectly load an asset registry cache built with "-game", causing missing dependency information.

  • Bug Fix: "-cookonthefly" and "-iterate" can be used at the same time, to avoid recooking unchanged packages when cooking on demand.

  • Bug Fix: Fixed asset registry memory tracking in memreport (and added some new fields).

  • Bug Fix: Corrected int64 -> int32 Archive offset truncation in several places.

  • Bug Fix: Fixed a Serialization History bug that occurred when trying to serialize 0 bytes.

  • Bug Fix: Fixed some bad offsets in non-deterministic cook report.

  • Bug Fix: Stats chunked array will now use smaller blocks to prevent malloc deadlocks when running in the editor with TBB allocator.

  • Bug Fix: Corrected stack space errors in generated code in Debug builds caused by the amount of code generated by very large UCLASSes.

  • Bug Fix: Moved level actor cluster creation to after actor construction scripts have been re-run to make sure all actor references are processed by the cluster creation code.

  • Bug Fix: Fixed non-determinism of the Raw PCM Data Size property of Sound Waves during cooking by making it transient.

  • Bug Fix: Fixed InitCommandArgs to parse command lines and handle errors gracefully.

  • Bug Fix: Bit Writer default constructor now initializes ArIsPersistent and ArIsSaving variables.

  • Bug Fix: Corrected a lot of inconsistent warning output and log categories while running the PkgInfo commandlet.

  • Bug Fix: Solved threading deadlock caused by the rendering thread trying to minimize the window after being ejected from full screen on Windows platform.

  • Bug Fix: Fixed a potential buffer over-read when converting UTF-8 characters to TCHARs when provided with invalid UTF-8 data.

  • Bug Fix: Corrected Get Len function for Strings.

  • Bug Fix: Explicitly defined the DEPRECATED_FORGAME macro only for non-engine modules in UBT.

  • Bug Fix: Fixed LoadEngineClass local to "UnrealEngine.cpp" to check class redirects before falling back to default class instance.

  • Bug Fix: Added initialization of deprecated Slate Brush member Tint_DEPRECATED, which was causing deterministic cook issues.

  • Bug Fix: Linker no longer incorrectly outputs warnings when LOAD_Quiet has been passed as a flag to the load call.

  • Bug Fix: Fixed asserts being fired when calling TBaseStructure's Get function while saving packages.

  • Bug Fix: Error codes are no longer discarded from zlib inflate.

  • Bug Fix: Fixed a compile error in UHT when declaring a function which returns a UEnum pointer.

  • Bug Fix: Calling the auto-generated Get Outer function on a CDO will now ensure and return null rather than returning the containing Package cast to the named class.

  • Bug Fix: Corrected export outer name when reporting differences in the export map for deterministic cooking

  • Bug Fix: Fixed hot reload of modules which were unloaded, changed, then compiled and reloaded.

  • Bug Fix: Solved several bad uses of Script Map Helper and Script Set Helper, which could have skipped elements during iteration. Affected searching for subobjects, exporting JSON, copying properties in the editor and property value iteration.

  • Bug Fix: Made Archive's Reset function public and virtual so it can be overloaded. Bit Writer's Reset function is now an overload of that function.

  • Bug Fix: Changed new anonymous object names to be based on an incrementing suffix per-outer, rather than per-package to fix some non-determinism issues when cooking.

  • Bug Fix: Fixed log output when displaying the number of skipped differences when diffing cook for deterministic cooking

  • Bug Fix: Fixed UTF-8 encoding detection in FXmlFile.

  • Bug Fix: Clarified Get Allocated Size comments in containers to make it clear that they only count direct allocations made by the container, not allocations made by the contained elements.

  • Bug Fix: Fixed the 4096 char limit on FParse::Value.

  • Bug Fix: Clarified the misleading error message when omitting the WithValidation specifier on a UFUNCTION(Server).

  • Bug Fix: Disabled warning C4868 in Visual C++ builds, which warns about the evaluation order of elements inside braced initializer lists.

  • Bug Fix: Made sure that lazy object pointers are only fixed up for Play In Editor in actual PIE worlds.

  • Bug Fix: Several fixes to ensure deterministic material cook results, mainly centered around ensuring ShaderMaps are consistently serialized regardless of cook order.

  • Bug Fix: Fixed verify cluster assumptions logic so that it also checks if some other cluster root object referenced by the current cluster is referenced through 'mutable' objects lists before asserting.

  • Bug Fix: Hitch detection will now be suspended when synchronously loading a new map.

  • Bug Fix: Disabled 'Took X.Y ms to ProcessLoadedPackages' warning in the editor so it doesn't show up when cooking.

  • Bug Fix: UFUNCTION metadata is once again correctly prevented when it is for a function of the same name as one in the parent class.

  • Bug Fix: We now destroy any world-owned particle FX on replay timeline scrub, since they shouldn't persist.

  • Bug Fix: Restored assertion message logging just before breakpoint is hit in Visual Studio output window.

  • Bug Fix: Overrides of const functions correctly inherit the const-ness of the parent function.

  • Bug Fix: Corrected issue where Property Value Iterator would skip value properties when used on a map with struct keys and direct values.

  • Bug Fix: Fixed sublevels not being recognized as properly loaded during cooking, which caused non-determinism issues.

  • Bug Fix: Solved non-determinism in Widget Tree when cooking.

  • Bug Fix: Meshes with painted vertex colors that did not use static lighting will no longer be cooked differently each time when Non-deterministically cooking.

  • Bug Fix: Fixed barycentric computation case causing a check. Now outputs an invalid coordinate so the caller can resolve issues.

  • Bug Fix: Default values specified in UFUNCTION metadata for TSubClassOf parameters that do not specify the full path name will now attempt to determine the desired class from the short name.

  • Bug Fix: Trying to convert a Soft Object reference to a hard reference during async load will throw a useful error instead of silently failing.

  • Bug Fix: Reference Chain Search class used by 'obj refs' command now reports all reference chains properly.

  • New: RHI Command List Enqueue Lambda method which can be used to enqueue arbitrary tasks on the RHI thread from the render thread, without having to write lots of bolierplate RHI Command functor classes.

  • New: Added "-csvdemostarttime" and "-csvdemoendtime" command line arguments to automate CSV profiles when running replays.

  • New: On dedicated servers, .CSV profile capture writing completion can now be indicated with an empty *.complete file that is also written out.

  • New: The .CSV profiler now tracks used physical and virtual memory usage by default.

  • New: Hang detector has a duration multiplier to allow extending the hang timeout on loading screens etc.

  • New: Added frame index named events for the game, render and RHI threads. This makes it possible to track end-to-end frame progress in platform-specific CPU profilers.

  • New: FPS Charts now can output stats assuming a 20 hz framerate.

  • New: The CSV profiler is now always compiled in on the server.

  • New: The CSV profiler can now handle both int32 and float stats.

  • New: Async helper for executing functions on a given thread pool

  • New: Added "debug hitch" and "renderhitch" console commands to sleep game or render threads. Also added "debug spin" and "renderspin" console commands that spin in a tight loop instead of sleeping.

  • New: Support for target configuration whitelist/blacklist support for modules/plugins. This could permit things like a Plugin containing debug/development code being excluded from a shipping build for testing purposes.

  • New: TSharedPtr can now be used as a bool in conditionals.

  • New: Enabled the master data cryptography for iOS and Android platforms, meaning they'll now respect the project settings.

  • New: Made Class Cast Flags and Property Flags enumerated types are now visible in the Visual C++ debugger.

  • New: The ability to get the actual filename of the log file Output Device File writes to.

  • New: Crypto Keys changes:

    • Removed UAT command line params for encryption. Centrally configured by the editor settings now.

    • UAT staging now creates a small json file containing the keys and settings used for encryption and signing and stores it in the build metadata.

    • UnrealPak can be told to get its encryption settings from a json crypto file with "-CryptoKeys=".

    • UnrealPak can now accept a "PatchCryptoKeys=" parameter which gives it a filename to a cryptokeys json file that it can use to unpack the patch reference paks.

  • New: When parsing crypto settings, UBT will always load legacy data first, then the new system can override it. Provides the same key backwards compatibility that the editor settings class gives.

  • New: Format string type checking added to output log code.

  • New: constexpr support to Variant's GetType function.

  • New: Initializer list support added to TMap.

  • New: Support for brace-initialized default member initializers in UnrealHeaderTool.

  • New: Support for writing specific log channels to their own files. Command line usage is as follows, including quotation marks:

    • -LogCategoryFiles="Category1=Filename1, Category2=Filename2"

  • New: Added support for CoreRedirects when resolving Soft Object Paths. Works for class, object, and module redirectors.

  • New: Reduced asset registry memory in cooked builds by stripping out searchable names and empty dependency nodes by default, modifiable with [AssetRegistry] .ini settings.

  • New: AvfPlayer on MacOS and iOS now has added support for streaming media.

  • New: Added a Property Temp Val helper class for owning a temporary instance of any UProperty value, which can be exported as text for later inspection.

  • New: Archive will now log its name when complaining about corrupted bool values.

  • New: Added reporting of absolute byte offsets into packages when detecting differences in non-deterministic cooks.

  • New: A non-determinism warning appears if we have imported a legacy Static Mesh Component during a cook.

  • New: A non-determinism warning has been added when importing a legacy Reflection Capture Component during cook.

  • New: Added a new engine CVar, "s.PriorityLevelStreamingActorsUpdateExtraTime", for controlling how much extra time is spent registering actors after streaming in a level when in "priority loading mode". The default is 5 ms.

  • New: Created a level streaming CVar, "s.MaxLevelRequestsAtOnceWhileInMatch" (defaults to 0). When non-zero, this limits the number of level load requests when the player is actively playing in a match.

  • New: Command line overrides for cook diff settings: -MaxDiffstoLog=x overrides maximum number of differences to log per file -HeaderDiffs forces cook commandlet to show differences for header files (.uasset files) -IgnoreHeaderDiffs ignores header files' differences.

  • New: Added interpolation functions for quaternions.

  • New: Implemented a generic Levenshtein distance to core algorithms.

  • New: Deterministic cooking tests will now also log out Name/Import/ExportMap items that moved within the file

  • New: Diffing cooked packages will now dump package header differences in NameMap, ImportMap and ExportMap

  • New: Constructing a new Weak Object Pointer at cook time will generate a non-determinism warning.

  • New: The window title bar now displays the Unreal Engine 4 build configuration (Debug, Development or Test) in non-Shipping configurations. You can customize this in your project settings.

  • New: A non-determinism warning is generated when upgrading clothing assets during a cook.

  • New: Static Memory Reader supports reading from memory specified by a pointer and size.

  • New: Added a before-and-after dump of values from certain property types which have changed during a deterministic cook.

  • New: Natvis visualizers for Frame Number, Frame Time, and TRange.

  • New: Math now contains a Divide And Round Nearest function.

  • New: Async support for single-threaded applications.

  • New: Custom version mismatch messages now include the friendly name of the custom version in addition to the tag GUID.

  • New: Unreal Header Tool now emits an error if ExpandEnumAsExecs metadata references a parameter name that is not a parameter to the function.

  • New: Changed the uncompiled modules report when starting the editor to display module names instead of DLL filenames.

  • New: PkgInfo commandlet can now dump all the info to a separate file for easier diffing with "-dumptofile=filename" argument.

  • New: PkgInfo commandlet can now dump information for unversioned packages

  • New: PkgInfo commandlet can now dump the list of properties that have been serialized for exports. This can be used for comparing cooked assets when investigating deterministic cooking issues.

  • New: -diffonlybreakoffset has been added to provide a way to break into the debugger when serializing data at a particular absolute offset during a -diffonly cook.

  • New: Functionality to track and log the debug name stack for diffonly cooks.

  • New: Randomize the package order when doing diffonly cooks, which can be explicitly disabled via -DIFFNORANDCOOK.

  • New: Allocator (TNonRelocatableInlineAllocator) which eliminates conditional logic from GetAllocation(), at the expense of not being trivially relocatable. This provides a significant performance increase for allocators that are dereferenced frequently, but prevents instances of it being stored inside other allocators (which are expected to be trivially relocatable by default).

  • New: Get Assets By Tags (Asset Registry function) optimizes tag look-up when you can have several potential values.

  • New: Added the ability to dump all objects to log before cooking a package while doing deterministic cook tests to help with tracking problems between deterministic cook tests.

  • New: Get Device Temperature Level function. iOS returns a value between 0 and 3, matching the values of the Temperature Severity enumerated type, while Android returns a temperature in Celcius, matching what was already being retrieved from the BatteryState.

  • New: Added an error message directing the user to the problematic file when the XML parser fails.

  • New: USE_SMALL_DELEGATES, USE_SMALL_MULTICAST_DELEGATES and USE_SMALL_TFUNCTIONS macros which switch from an inline allocator to a heap allocator for these types when defined to 1 at a project level. These will trade reduced object footprints for extra heap allocations.

  • New: The "-SaveForDiff" command line argument makes it possible to save packages that are different from their disk versions when running deterministic cooking tests.

  • New: Exec command CoreUObject.AttemptToFindUninitializedScriptStructMembers that can be used to try to find uninitialized reflected pointers in in USTRUCT() declarations

  • New: Directories To Never Cook and Directories To Always Cook in the packaging settings now support Plugin and Engine directories. It will convert from the old format of relative to game content to the new /Game/ format on startup. If you have any game-specific code accessing this you will have to take this into account

  • New: Exposed an optional name to Create Dynamic Material Instance.

  • New: Added a function, Is Async Loading Suspended, to check if async loading is currently suspended.

  • New: Enabled the overloading of functions which take TFunction or TFunctionRef of different signatures when the lambda being passed to them will unambiguously bind to only one of the overloads.

  • New: Changed Visual C++ debugger visualization of TFunctions to allow a lambda to be right-clicked on and the source jumped to by selecting "Go To Source Code".

  • New: MallocStomp can now be enabled on desktop platforms using the "-stompmalloc" command line argument.

  • New: Initial implementation of tracing profiler to show CPU and GPU on the same timeline. Use "TracingProfiler frames=N" console command to trigger a capture of the next N frames. Trace is saved to disk as a JSON file into the "Saved/Profiling/Traces" directory. Trace file uses Google Tracing format and can be visualized in Chrome built-in profiler (chrome://tracing).

  • New: New parameter to "obj list" command, "-INSIDECLASS=classname", filters objects that are inside of all objects of the specified class.

  • New: Non-determinism is reported when changes to CDOs and archetypes are made by Pre Save during a cook.

  • New: TDefaultReferenceCollector and Simple Reference Processor Base classes to extract common code for classes that are used by TFastReferenceCollector

  • New: Option to save non-deterministically cooked assets to a folder specified by "-diffoutputdir", when differences are detected during a "-diffonly" cook.

  • Improvement: Made a minor optimisation to the deserialization of bad properties by using Seek() instead of skipping one byte at a time.

  • Improvement: Archetype pointer will now be cached to avoid locking the object tables when acquiring its info. It should also be faster this way regardless of any locks.

  • Improvement: Optimized lazy pointer fixup when starting Play In Editor. It should be up to 8x faster now.

  • Improvement: Optimized asset registry filter intersection.

  • Improvement: Moved PostLoad to the async loading thread where possible. This reduces the time the main thread spends on PostLoad by about 20%.

    • Added a .ini setting to disable PostLoad on ALT globally. In the [/Script/Engine.StreamingSettings] section, add "s.AsyncPostLoadEnabled=True".

    • Added command line param overrides: "-NoAsyncPostLoad" "-AsyncPostLoad"

  • Improvement: Pak Signing:

    • Unified naming of pak precacher and signed archive reader signature check functions to make it easier to search for them in crash reporter.

    • Formatted the signed archive reader output to match the pak precacher.

    • Optimization for pakprecacher signature checks. Instead of locking the cached files mutex for every decoded signature, take a local copy in blocks of 16.

  • Improvement: Crypto:

    • AES keys that are too long or short (need to be 32 bytes) will now emit a warning when being parsed, and be truncated or expanded before adding to the crypto settings.

    • Signing keys will emit an error when they are too long (greater than 64 bytes).

    • Unrealpak will still assert when invalid settings are passed via the other mechanisms (command line or -encryptionini mode).

    • Settings via the crypto .json file should now be sanitized and not cause issues.

  • Improvement: Headers for compressed blocks in a pak file now contain relative offsets, reducing the amount of data entropy between builds and improving patch efficiency.

  • Improvement: Use-after-free detection mechanism and physical memory usage of MallocStomp on Windows.

    • MallocStomp on Windows will now reserve virtual address space for every allocation and then commit physical pages only to the valid usable part. Physical pages will be unmapped on Free, but virtual address space will not be released and therefore will never be re-used.

  • Improvement: Unhashing unreachable objects will now also be done incrementally, just like the purge phase of Garbage Collection.

  • Improvement: Faster GUID creation. Previous method used a system Date / Time system call, which could be slow on some platforms. This change can decrease GameThread time on those platforms.

  • Deprecated: Direct access to Archive members Ar Is Text Format, Ar Want Binary Property Serialization, Ar Force Unicode, Ar Is Persistent, Ar Is Saving, Ar Is Transacting, Ar Licensee UE4 Ver, Ar Engine Ver, Ar Engine Net Ver and Ar Game Net Ver private. These should now only be accessed via their associated member functions.

  • Removed: Packaged UE4 applications that you distribute will no longer send anonymous usage data to Epic. Previously, this had to be disabled in project settings.

Garbage Collection
  • Crash Fix: Fixed a crash in Garbage Collector, when an object that was still being loaded was added to GC cluster.

  • Crash Fix: No longer crashes after a skeletal mesh that was already in a GC cluster created a new BodySetup object in Garbage Collector.

  • Crash Fix: Fixed a crash with async loading code referencing objects that were marked as Pending Kill in Garbage Collector.

  • Bug Fix: Fixed a possible hang when worker threads are preventing the Garbage Collector from running.

  • Bug Fix: Serializing object will now be passed to the Garbage Collector so that it can be logged in case the referenced object is thrashed.

  • Bug Fix: Global Garbage Collector Sync Object no longer wastes cycles in non-game threads while waiting for Garbage Collector to finish running.

  • Bug Fix: Objects that still haven't been through Post Load code will be added to Garbage Collector Clusters as 'mutable' objects, so that clusters can prevent them from being destroyed too early.

  • Bug Fix: Fixed Garbage Collector Clustering issues with Async Loading Thread enabled.

  • Bug Fix: Parallel Garbage Collection on the Mac is no longer turned off by default.

  • Bug Fix: Added code to detect hangs and log objects preventing the Garbage Collector from finishing when doing full purge in cooked builds,

  • Bug Fix: When async loading, GC Clusters will be created after packages have been processed to avoid situations where some of the objects that are being added to a cluster haven't been fully loaded yet

  • New: The Garbage Collector and the Async Loading Thread now coordinate timing, with the Async Loading Thread attempting to finish its current work to give GC a chance to run whenever GC sends a notification that it would like to run. The Async Loading Thread is more stable as a result.

  • New: Added "gc.ForceCollectGarbageEveryFrame" console variable that triggers a forced GC every frame.

  • New: Async package names will now be dumped to log when reporting Object references in Garbage Collection.

  • New: Added the ability to sort clusters by name/object count/mutable object count/referenced clusters count when dumping them with "gc.ListClusters" command.

  • New: Added the ability to toggle incremental BeginDestroy with "gc.IncrementalBeginDestroyEnabled".

  • Improvement: Set the minimum GC cluster size to 5 with "gc.MinGCClusterSize" console variable so that GC doesn't have to process micro clusters, which are more expensive to process than individual objects.

  • Improvement: Optimized Mark Phase of Garbage Collection by up to 10ms (depends on the number of objects and the number of threads available) by making it run in parallel and removing a huge array preallocation which we didn't need.

  • Improvement: Garbage Collector assumption verification should now be up to 4 times faster.

  • Improvement: GC Cluster creation will now be time-sliced to avoid hitches on the game thread when streaming packages.

Editor

  • Crash Fix: Fixed a crash when simplygon failed to generate LOD for Skeletal Mesh.

  • Crash Fix: Fixed a crash when saving HLOD assets if some have not been fully regenerated.

  • Crash Fix: Fixed an occasional Garbage Collector crash in HLOD proxy generation.

  • Crash Fix: Fixed a crash when the HLOD outliner is open in PIE when actors are destroyed.

  • Crash Fix: Generating HLODs for mesh components with no mesh assigned no longer crashes.

  • Crash Fix: Generating HLODs from child actor components no longer crashes.

  • Crash Fix: Fixed a crash when removing HLOD setup asset.

  • Crash Fix: Fixed a crash when viewing some complicated material instances generated by the HLOD system.

  • Crash Fix: Fixed a crash when overwriting existing level during level save as.

  • Crash Fix: Fixed a circular referencing issue causing the conversion of a BSP to a static mesh to crash.

  • Crash Fix: Fixed a crash when re-importing an animation and choosing a skeleton for the anim sequence.

  • Crash Fix: Fixed FBX import crash.

  • Crash Fix: Fixed a crash in Mac editor when copying unusual characters in the output log.

  • Crash Fix: Generating HLODs in a map with sublevels that also have HLODs no longer crashes.

  • Crash Fix: Fixed a crash occurring when Propagating Vertex Colors to Asset's source mesh.

  • Crash Fix: Using "Save As" on maps having more than 2 GB of build data no longer crashes.

  • Bug Fix: Fixed incorrect group name being returned by Get Group Name function for stat groups, causing incorrect editor tooltips.

  • Bug Fix: Fixed "Check Out Assets" window not properly receiving keyboard focus.

  • Bug Fix: Fixed bug causing "HighResShot" command to capture shots at a lower resolution in Immersive Mode.

  • Bug Fix: Scene Capture Component 2D properties, Hidden Actors and Show Only Actors, are no longer displayed in the Scene Capture Component 2D's Blueprints layout panel, but are still available on Blueprint nodes.

  • Bug Fix: Fixed an asset registry size calculation bug.

  • Bug Fix: Fixed Play in Editor recorded replays not writing their last marker when the user goes to end the simulated instance while recording.

  • Bug Fix: Fixed issue with out of range UV sampling in material baking.

  • Bug Fix: Fixed mesh merging producing incorrect UV mapping for mirrored meshes.

  • Bug Fix: Fixed texture binning UV transforms not being correct according to the gutter settings.

  • Bug Fix: Removed the two-actor limit when generating HLOD hierarchies.

  • Bug Fix: Fixed a bug in the editor where a user's Editor Startup Map setting would be ignored if the project had no default startup map set.

  • Bug Fix: Collision generation is now disabled by default for HLOD proxy meshes.

  • Bug Fix: Fixed a memory leak in FBX Scene during import.

  • Bug Fix: Fixed extra re-allocation of memory buffer holding files during asset import.

  • Bug Fix: Fixed case in Perforce source control code where the server available flag was set even when the server was not successfully connected.

  • Bug Fix: Output Log suggestions list is now clamped to the work area width of the monitor that hosts the widget.

  • Bug Fix: Fixed an issue where saving a sub-level level would cause Map Build Data to be deleted.

  • Bug Fix: Selected joints can now be removed even after bone simplification fails.

  • Bug Fix: HLOD generation commandlet now caches any shaders it generates.

  • Bug Fix: Fixed infinite loop in Simplygon mesh reduction when a LOD actor is encountered with no valid meshes.

  • Bug Fix: HLOD rebuild resave packages commandlet now does not pre-checkout levels.

  • Bug Fix: Removed spurious Simplygon errors when rebuilding HLODs.

  • Bug Fix: Popping the view out of a locked actor and manipulating the view will no longer jump to the previous "look at" location.

  • Bug Fix: Fixed static mesh simplification with input meshes that have nearly singular triangles. Applies to Static Mesh LODs.

  • Bug Fix: A new level now prompts to be saved when lighting or build data has been modified.

  • Bug Fix: Fixed property table not working with multi-line editable text.

  • Bug Fix: Per-instance added components marked as editor only will now always display in the component tree.

  • Bug Fix: Fixed macOS Magic Mouse zoom in world composition editor.

  • Bug Fix: We now display a Blueprint's parent Blueprint class in the content browser when hovering over it.

  • Bug Fix: Fixed not being able to enter simulate more than once in a row.

  • Bug Fix: Corrected UV generation for merged HLOD meshes.

  • Bug Fix: Fixed expand/collapse issues and performance issues for details customizations which were using external properties.

  • Bug Fix: Updating the max on the size of texture the material proxy now generates successfully. The old max value could cause int32 overflow.

  • Bug Fix: Merged, negative-scaled meshes now have materials mapped correctly.

  • Bug Fix: Fixed emissive scale not being set correctly during material baking.

  • Bug Fix: Fixed bug where "Merge Actors" or HLOD proxies result in too many mesh sections.

  • Bug Fix: FBX exporter now supports non-uniform scale scene transforms for skeletal meshes.

  • Bug Fix: Fixed undo spam when changing colors in the gradient editor.

  • Bug Fix: Added Client target options for iOS, TVOS and Android ETC1a flavor.

  • Bug Fix: Key Up triggers no longer hit the disk during PIE sessions.

  • Bug Fix: Editor MacOS main menu now correctly displays unicode items for keyboard shortcuts.

  • Bug Fix: Shared DDC is now correctly being used for installed engine builds.

  • Bug Fix: Niagara Editor fixes:

    • You can only Add Parameters in graphs where it makes sense to do so. Promoting variables also follows the same logic.

    • Fixed community issue where you could connect an input and output node and encounter a check that the warnings variable array was no longer the same size as the variables array.

    • Multiple fixes to the Niagara Spline Data Interface. It is currently only supported on CPU VM.

    • Niagara Systems now run their Update on the first frame with a small delta time so that they can begin spawning immediately after creation. This also simplifies Emitter and System Spawn logic by guaranteeing that if you want to animate a value, you don't have to special-case the first frame.

    • Added support for dynamic inputs that don't have any external inputs.

  • Bug Fix: Niagara Editor Houdini fixes:

    • Added a version to Niagara Data Interface Parameters CS Houdini CSV to avoid further issues when deserializing them.

    • Fixed a bug causing no points to spawn when all points in a file spawned at the same time value.

    • Removed unneeded tests/restriction when calling functions requiring time values on files without time values. When no time value is in the file, it is treated as time 0.

    • Fixed differences between GPU/CPU code.

    • Fixed special attributes column for Vectors in the CSV file not properly named after being expanded.

    • Moved the logic of Get Point IDs To Spawn At Time to Houdini CSV so the function can be called from Blueprints.

  • New: Datasmith now imports 3ds max object user-defined properties and CAD metadata as Unreal readable metadata through the Datasmith User Data.

  • New: Added a way to generate diffs from editor transactions

  • New: Added support for relative asset source paths in content plugins.

  • New: Built Data is now deleted with map files.

  • New: Added support for importing grayscale PSD images.

  • New: Implemented vertex welding threshold in the quadric simplifier.

  • New: The FBX importer converts "LODX_" prefixes into "LodGroup".

  • New: Added a "Reimport All" feature for both static and skeletal mesh. Reimport All will reimport the base LOD and also reimport all custom LODs and regenerate the generated LODs.

  • New: Added source import filename per LOD for static meshes.

  • New: Added HLOD "Save All" button.

  • New: Added UV gutters to material atlasing when merging meshes.

  • New: Enabled Blueprint Read Write for the bool Enable Auto LOD Generation.

  • New: Added the ability to strip UV channels from merged meshes.

  • New: Added new 'lowest detail LOD' setting to mesh merging & allowed base material override.

  • New: Added a property on Primitive Component to be excluded from a specific HLOD level. This behavior can be enabled inside of the HLOD level settings with the "Allow Exclusion" boolean.

  • New: Added the ability to set base material for Hierarchical LOD proxy materials. This can be done in Project Settings, HLOD Setup asset and world settings.

  • New: Added -csv parse option to the OBJ LIST command.

  • New: Added new static mesh instancing tool.

  • New: Added editor scripting utilities plugin.

  • New: Added option to auto remap morphs when generating LODs.

  • New: Made it possible to get the value address of a struct property via Get Value Data for struct detail customizations.

  • New: Added info/warning and error message storage to all the source control operation structures so additional information can be made available via the Source Control Operation Get Result Info function.

  • New: Ensured that the Source Control Provider's Execute delegate is called on initial connection even if it fails immediately. Modified Perforce, Git and Subversion source control providers to do the same.

  • New: Added a delegate to the function Source Control Windows Choose Packages To Checkin that gives info for result, result description, files added, files checked in and flag indicating whether files were checked out again. Also added result info to the function Source Control Windows Prompt For Checkin.

  • New: You can now label the colors stored in the theme bar of the Color Picker. Right-click on any color to give it a label.

  • New: HLOD now minimally rebuilds according to whether source data (actors, materials, meshes etc.) has actually changed.

  • New: Tweaked numbers to maintain previously perceived wire thickness in various graph-based editors.

  • New: Added support for clipping ProxyLOD geometry. Clipping volumes will now be supported by the HLOD generation system allowing the user to specify regions to be clipped from the proxy geometry.

  • New: When generating distant proxy geometry (for example HLOD), added hole filling and the ability to specify the base color that will be used for proxy geometry that can't be associated with source geometry (e.g. a newly closed window or door).

  • New: Added ability for HLOD levels to reuse clusters of the previous HLOD level. For example, HLOD level 1 can have the same clusters as HLOD level 0.

  • New: Added a command line argument to specify a working directory for shader compilation. For example, "-ShaderWorkingDir=D:\ShaderWorkingDir".

  • New: Added the option to close tabs to the right of the active tab.

  • New: The experimental ProxyLOD system now has support for generating split normals on hard edges, and additionally selecting the method used for normal calculation.

  • New: Added import/export of Static Mesh user-defined FBX properties as metadata.

  • New: Linear Color Curves now create with 2 keys at 0 and 1, and you can shift-click to add both a color and an alpha key.

  • New: You can now edit the H,S,V of a color curve in the curve editor. This fixes the curve in-editor not reflecting the sRGB color.

  • New: You can now create, playback and manipulate Geometry Cache Tracks when Geometry Cache Components are added to the Sequencer.

  • Improvement: Mesh merging uses available texture space better.

  • Improvement: Optimized editor startup time.

  • Improvement: Improved the experimental ProxyLOD system to make it more robust and eliminate a potential hang.

  • Improvement: Optimized skeletal mesh import speed for larger meshes.

  • Improvement: Scene outliner is now more performant. (especially during Play In Editor)

  • Improvement: HLOD workflow:

    • Levels now do not get dirtied unless actual changes are made to the LOD actors.

    • UI reworked to promote standard workflow (i.e. regeneration without dirtying the level).

    • UI states now better expose available options.

    • Made horizontal/vertical arrangements work better.

    • Buttons are now coded to their 'danger level'.

    • LOD selection now follows the dropdown convention found in other parts of the editor.

  • Improvement: Removed extra file read into memory buffer during FBX import.

Content Browser
  • Crash Fix: Fixed a crash when content hot-reloading the build data for the current world, or a world with streaming sub-levels.

  • Crash Fix: Fixed a crash after attempting to content hot-reload a package that is too new.

  • Crash Fix: Saving over the level you're about to load no longer crashes.

  • Bug Fix: Fixed "ghost asset" in Content Browser when an asset is added and renamed before the Recently Added Assets list had a chance to be processed.

  • Bug Fix: Fixed content browser favorites making config files very large.

  • Bug Fix: Updated config file to keep folder color in sync.

  • New: Added "Search Asset Class Names", "Search Asset Paths", and "Search Collection Names" toggles to the Asset View options. These options allow the user to further filter their search results and appear under a "Search" header in the "View Options" panel on the bottom right of the Content Browser / Asset Picker.

  • New: Added "LODs" searchable tag to "Skeletal Mesh" assets.

  • New: Add a new menu to show the metadata of an asset.

  • New: Asset metadata can now be transferred to the Asset Registry through configurable metadata tags in the Asset Manager Settings.

  • New: Added "recently opened assets" filter under Other Filters in the Content Browser. It shows the most recently opened assets, and defaults to storing 20 assets. You can change the number of assets saved for the filter in Editor Preferences.

  • New: The Editor now saves editor config to file first time a favorite folder is added in the Content Browser.

**Foliage**
  • New: Added the bool Enable Density Scaling flag to Landscape Grass assets, to prevent density scaling for grass types with gameplay significance.

  • New: Cooking the instance buffer is now supported.

  • Bug Fix: Fixed the array duplicate button behavior of Per Instance SM Data.

  • Bug Fix: Disallowed specifying two types of the same grass asset in a material.

  • Bug Fix: Foliage density scaling in editor is applied correctly when not in foliage editing mode.

  • Bug Fix: Fixed Editor instance count to only include placed instances. Calling Generate Procedural Content will no longer automatically remove the current content.

  • New: Added the possibility to edit the full Body Instance on a Landscape Spline Segment instead of only some parameters.

  • New: Exposed LD Max Draw Distance.

  • Improvement: Changed the UI of the Copy tool to be more clear, and added a drop down that will suggest a valid size for the specified heightmap to import.

Landscape
  • Bug Fix: When changing Component size, Foliage will be properly added again.

  • Bug Fix: World Offset is applied properly to Landscapes.

  • New: Added two new console variables to allow scaling of the landscape LOD distribution values in a device profile or scalability group, "r.LandscapeLOD0DistributionScale" and "r.LandscapeLODDistributionScale".

  • New: Added ability to set Landscape Material from an Editor Blueprint.

  • Improvement: Added some debug text info to Landscape Layer Usage Material, listing how many layers each component uses. This is much easier to read than the old "stripes" method.

  • Improvement: Changed the UI of the Copy tool to be more clear, and added a drop down that will suggest valid size for the specified heightmap to import.

  • Improvement: Added the possibility to edit the full Body Instance on Landscape Spline Segment, instead of only being able to edit some parameters.

  • Improvement: Exposed LD Max Draw Distance.

Material Editor
  • Crash Fix: Fixed a crash on pasting comments. All other accesses to Material Expression Comment check its validity first.

  • Crash Fix: Fixed a material editor crash if content hot-reloading a texture used by the material.

  • Bug Fix: Prevented materials from showing up in the editing assets list twice.

  • Bug Fix: Updating an atlas texture now correctly updates materials and material instances.

  • Removed: Default keybinding for 'apply' in the material editor removed.

Scripting
  • Crash Fix: Fixed crashes associated with Python threads when external C code called into Python without taking the GIL.

  • Bug Fix: Fixed generated Python types sometimes using reserved names.

  • Bug Fix: Python files executed from the Output Log can now support arguments.

  • Bug Fix: Fixed Python parameter packing sometimes treating bool output parameters as return values.

  • Bug Fix: Removed redundant outer parameter from find_asset, load_asset, find_package, and load_package.

  • Bug Fix: Python now honors Edit Instance Only and Edit Defaults Only when setting property values.

  • Bug Fix: Fixed default value application for some struct types that use a custom default value format when exported by UHT.

  • Bug Fix: Fixed old-style enums being missed by the Python glue generation if they're only referenced by a property of function.

  • Bug Fix: Fixed context leaking between the console and files.

  • Bug Fix: Fixed lingering exception state when converting a dict to a struct in Python.

  • Bug Fix: Fixed Execute Python Script failing when passed file arguments.

  • Bug Fix: Implemented negative indexing for Python wrapped arrays.

  • Bug Fix: Fixed Python menus failing to execute scripts with spaces in their name or path.

  • New: Source Control API:

    • Updated Source Control Helpers commands to use smart file strings that can convert from any of fully qualified path, relative path, long package name, asset path, or export text path.

    • Added script bindings and helper functions for version control (Source Control Helpers) for the Editor as Source Control class and associated Source Control State.

  • New: Added support for struct operator extension functions in Python.

  • New: Exposed asset import and export.

  • New: The CDO can now be accessed via the get_default_object class method on Python wrapped object types.

  • New: Added Python iterators for selected actors. (Actor Iterator, Selected Actor Iterator)

  • New: Added Python iterators for Unreal objects, classes, and structs, as well as the Python types wrapped by Unreal classes or structs. (Object Iterator, Class Iterator, Struct Iterator, Type Iterator)

  • New: Exposed Scoped Slow Task to Python to allow you to report progress to the editor while performing slow, blocking tasks.

  • New: Added make and break support in Python.

  • New: Logging runtime errors or warnings will now produce Python exceptions.

  • New: Added support for init_unreal.py start-up scripts. These can be placed in any known sys.path in Python, including the Content/Python folders we automatically add, and the UnrealEngine/Python directory under the user's home directory.

  • New: Added support for UPARAM(ref) on arguments exposed to Python.

  • New: Added support for extension constants in Python.

  • New: Moved Editor Scripting Utilities to be a general Editor plugin.

  • New: Exposed generic get_default_object function that takes a type and returns the CDO.

  • New: Marked Asset Registry Helpers functions dealing with Asset Data as Script Method so they're available as methods of Asset Data in Python.

  • New: Exposed some asset registry functions that may be useful in a commandlet environment.

  • New: Added support for deprecated (renamed) classes, structs, enums, functions, and properties in Python.

  • New: Added warnings for conflicting Python type and field names.

  • New: Added support for using Python callables with delegates.

  • New: Added assign method to Python exposed structs.

  • New: Added callbacks for when Python is initialized and shutdown so that external modules can hook in appropriately.

  • New: Updated wrapped enums to be more consistent with native Python enums.

Sequencer
  • Crash Fix: Fixed Sequencer copy/paste crash.

  • Crash Fix: Fixed crash when trying to record audio without any active capture devices. A warning is logged if the number of input channels is not 1 or 2.

  • Crash Fix: Added Null checks to prevent crash when saving the default state of a spawnable.

  • Crash Fix: Opening a new sequence while another is still active will no longer crash.

  • Crash Fix: Fixed a crash on compiling Blueprint with a deleted actor sequence.

  • Crash Fix: Fixed a crash when an actor factory is not found.

  • Crash Fix: Fixed a copy/paste crash for lights.

  • Crash Fix: Added template signature that is re-generated every time the base template is regenerated, which invalidates evaluation fields. Fixed a crash where the same sub-sequence is instantiated multiple times in a sequence is saved without the master sequence also being saved.

  • Crash Fix: Sequencer now resets if the focused movie scene is null. This fixes a crash if the user is focused in on a shot and undo takes the user past the point of where the shot was created.

  • Crash Fix: Fixed a crash with stale section pointer.

  • Bug Fix: Restricted spawnables from being created if they have a Class Within that Movie Scene is not a child of.

  • Bug Fix: Sequencer now skips if the binding ID's sequence can't be found.

  • Bug Fix: Sequencer overrides the animation asset in the player state if it doesn't match the animation asset that's being evaluated.

  • Bug Fix: HDR Compression Quality is clamped between 0 and 1 for Movie Scene Captures.

  • Bug Fix: Fixed overlapping ranges being inserted into the evaluation field during compilation.

  • Bug Fix: Fixes curves changed on end drag so that only curves that had keys/tangents changed receive notifications, otherwise all loaded curves were getting notified that they were changed.

  • Bug Fix: Sequencer now swaps the camera object to the camera component's owner if it's not the same.

  • Bug Fix: The UI for adding tracks that only support one instance (such as the Fade track) now gets disabled after an instance has been added to the sequence.

  • Bug Fix: Sequence Recorder now logs an error if the number of frames changes while recording. This can happen if the skeleton changes while recording.

  • Bug Fix: Sequencer now clears autoscrub offset when stopping autoscroll.

  • Bug Fix: Sequencer now determines whether a transform track is for a camera by using the spawned object or template.

  • Bug Fix: Sequencer now prevents Goto and Transform boxes from overlapping by allowing them to be visible at the same time in an autosized horizontal box.

  • Bug Fix: Fixed sibling folders being allowed to have the same folder name.

  • Bug Fix: Removed the bool Keep Stale Tracks so that stale tracks are now always purged.

  • Bug Fix: Fixed unbound possessable components when pasting spawnables.

  • Bug Fix: Convert to possessable now uses object template instead of copying properties. This fixes MIDs getting lost when converting to spawnable and back to possessable.

  • Bug Fix: Property values are no longer lost when converting back and forth from possessable to spawnable.

  • Bug Fix: Fixed stale object references remaining in Level Sequence Binding References when using convert to spawnable/possessable, or assigning an actor to an unresolved binding.

  • Bug Fix: Sequence Recorder no longer creates a spawn section if the object is a possessable.

  • Bug Fix: Removed Sequence Actor Tag when converting to possessable. This fixes the icon for actors so that they don't appear as spawnables after converting to possessable.

  • Bug Fix: Sequencer now stops recording if the preview window is destroyed.

  • Bug Fix: Locked down the first and last keys in the redundant keys removal range so that they're unaffected.

  • Bug Fix: Restored hud based on whether it was enabled. This fixes a bug where the HUD is getting restored to true after the level sequence actor disables it.

  • Bug Fix: When enabling the "MovieCapture", the Stereo-3D display now does not turn off.

  • Bug Fix: Spacer nodes are no longer selectable.

  • Bug Fix: Validated actor names passed to Set Actor Label to ensure 'None' isn't passed in, which could corrupt levels.

  • Bug Fix: Sequencer no longer preserves root component when copying object properties.

  • Bug Fix: Fixed Key Frame Manipulator assignment operators and copy/move constructors.

  • Bug Fix: Sequencer now jumps to the playback start frame instead of 0 to start playback for recording.

  • Bug Fix: Sequencer no longer automatically marks transforms to be recorded by sequence recorder.

  • Bug Fix: Sequence template source signatures are now also compared to catch the case where a sub-sequence asset has been saved but not modified.

  • Bug Fix: Sequencer now stops all sounds before generating audio waveforms.

  • Bug Fix: Appended command list to global level editor actions so that shortcuts for recorder are accessible in level editor.

  • Bug Fix: Sequencer sections that do not properly support infinite time ranges will no longer allow you to set an infinite range.

  • Bug Fix: Audio that is split into 2 channels no longer gets a duration that's twice as long as it needs.

  • Bug Fix: Level Sequences with spawnables no longer mark the package as dirty on close unless the spawnable default state has actually changed.

  • Bug Fix: Flipped Cine Camera Vista Vision width and height.

  • Bug Fix: Fixed FBX camera import so that the default tracks use the values from the FBX instead of inheriting the default properties of the camera.

  • Bug Fix: Changed path/attach track sequence binding ID to currently focused sequence ID so that bindings can be created in subsequences.

  • Bug Fix: Fixed Set Playback Position so that it jumps or plays based on playback status.

  • Bug Fix: Sequencer no longer shows Transform/Path/Attach track if the actor has the "Mobility" property hidden.

  • Bug Fix: Dragging the time slider no longer causes the time slider to ignore the Snap to Interval setting when "Snap to Keys While Scrubbing" is enabled.

  • Bug Fix: Made the track color picker focusable so that it will close when you click away or lose focus.

  • Bug Fix: Added support for "Enter" key to add assets for all sequencer track editors that have asset pickers.

  • Bug Fix: Legacy Blueprint spawnables are now purged from Level Sequence packages on load.

  • Bug Fix: Fixed issue with being able to drag/drop montage onto Animation Track in Sequencer.

  • Bug Fix: Fixed an issue with Sequence Evaluator to handle properly when jumps from end to front or front to end.

  • Bug Fix: When getting selected tracks for the external selection api, include tracks if any of their child nodes are selected. This behavior now matches the behavior for object guid external selection.

  • Bug Fix: Fixed instances where sequencer data was being modified without calling Notify Movie Scene Data Changed.

  • Bug Fix: Allowed actor components for synchronization.

  • Bug Fix: Fixed some sequences not evaluating correctly with "Evaluate Sub Sequences in Isolation" enabled.

  • Bug Fix: Fixed a case where the first recording is null but there are other valid recordings. Stop Recording wasn't getting called because the EndPIE delegate wasn't bound since ActorWorld was incorrectly set.

  • Bug Fix: Fixed edits to sub-sections not invalidating their sub sequence data for deep hierarchical sequence structures.

  • Bug Fix: Fixed various issues copy and pasting Spawnables from one sequence to another and within the same sequence. No longer prints superfluous warnings on paste and properly initializes the new object template so that it does not get garbage collected/cause issues on save.

  • Bug Fix: When rotating Euler angles with gizmos, rotation keys are now wound correctly.

  • Bug Fix: The Camera/Shot Lock button no longer changes state inappropriately when exiting a sequence.

  • Bug Fix: Step to Next/Previous key now works for all tracks when none are selected.

  • New: Added notification when the blend type is changed.

  • New: Dragging onto a particular row would move out any overlapping sections to make space for the newly created section. Newly created sections are now selected and throbbed to draw attention to themselves.

  • New: Added getter for media player in media sound components.

  • New: Disabled sub-sequences now show [Inactive] in their title bars in the Sequencer UI. This helps communicate why a sequence isn't being evaluated as you scrub through it.

  • New: Added an option to toggle 'disable screen percentage' in Movie Scene Capture. By default this is on (no change to current behavior).

  • New: Items that are now added to the Sequencer via the "+Track" menu will be selected after being added. If a folder is selected the item will be added inside of the folder.

  • New: Split camera properties to two groups, "Camera Options" and "Camera Settings". The cine camera now hides properties in the "Camera Settings" group so that properties like the bool Constrain Aspect Ratio (in the "Camera Options" group) can be visible.

  • New: Sequence Recorder can now store preset groups of Actors to record.

  • New: Added logging per frame to Movie Scene Capture.

  • New: Added section selection throbbing.

  • New: Sequencer Sub section now has a takes menu.

  • New: Added attenuation visualizer for media sound components in the media player editor.

  • New: Added sprite visualization to media sound components.

  • New: Removed unfinished overlay asset types from Content Browser menu.

  • New: Added various media assets to Content Browser filter menu.

  • New: Added FBX property mapping for "FocusDistance" to "FocusSettings.ManualFocusDistance".

  • New: Added format mapping for the name of the current camera.

  • New: Enabled "Run Construction Scripts in Sequencer" by default.

  • New: Implemented thread scheduler for higher performance in image sequence loaders.

  • New: Exposed Is Reversed from Movie Scene Sequence Player Sequence Recorder.

  • New: Renamed Automated Level Sequence Capture's StartFrame and EndFrame to Custom Start Frame / Custom End Frame to reflect that it is user-overriden. This will also resolve upgrade issues due to the variable datatype changing.

  • New: Import the camera switcher track as a camera cut track in Sequencer when importing an FBX with the "Create Cameras" option selected.

  • New: Similar to Matinee, there is now a Skip Anim Notifies Toggle for being to control whether or not notifies should be fired when the animation plays in the sequence.

  • New: Added option to toggle the behavior of locking the rail mount to the orientation of the spline. By default, the option is off. (No change in behavior.)

  • New: Added ability to Rekey the selected key at the current time.

  • New: Bound rename command to selected track so that F2 shortcut invokes renaming.

  • New: Array elements within USTRUCT properties can be animated.

  • New: Adding a single key to the Particle Toggle track now makes an infinite range section that is displayed in the UI.

  • New: Moved Record to possessable "Actor Recording" group.

  • New: A selected animation track in the sequencer will now show the animation frame number of the sequence when it is playing.

  • New: Event names are shown when the event track is selected.

  • New: Added the option to key a group of transform channels instead of just the changed channel, or all of them.

  • New: Transform sections in the sequencer now include a Quaternion Interpolation option which takes the smallest rotation path during rotation interpolations.

  • New: Dragging the left or right handles of the Time Range slider in Sequencer will now zoom your view in on the current center of the screen. This prevents the view from being translating as you tried to zoom in which caused issues at high zoom levels.

  • New: Scrubbing with the Snap to Keys setting enabled now mirrors the behavior of the "jump to next key" feature. If a track is selected, it only snaps to keys on the selected track, otherwise it snaps to all keys.

  • New: Enabled keying the "Enable Look at Tracking" toggle on Cine Camera.

  • New: Added create pose asset to skeletal animation section. This allows animators to blend animations in sequencer and create new pose assets from them.

  • New: Exposed default level sequence instance data to Blueprints.

  • New: Added level name to spawn a spawnable into. Added sublevel menu option to set the level.

  • New: Added Edit -> Autosize Section Length to duration of source.

  • New: Added event names to selected event tracks.

  • New: Sequencer will now focus the vertical scroll view on newly created items.

  • New: Initial scripting exposure and support for movie scene types, including:

    • Find/add/interate master tracks.

    • Find/add/interate bindings (both possessables and spawnables).

    • Find/add/interate tracks on bindings.

    • Add/interate sections on tracks.

    • Get/Set section ranges.

  • New: Timecode recording saved as editor-only data to the Movie Scene Section and Movie Scene.

  • New: Introduced a common base class for all movie scene channel data.

  • New: The Transform dialog (Ctrl + M) now can now transform sections, including when you have a section and keys within that section selected.

  • New: Added audio support to FCP XML import/export.

  • New: Exposed "Add Scalar Parameter Key", "Add Vector Parameter Key", and "Add Color Parameter Key."

  • Improvement: In Sequencer, inactive tracks are dimmed.

  • Removed: Removed the ability to bind sequencer to PIE/simulate while recording.

  • Removed: Removed experimental image plate media playback functionality.

Static Mesh Editor
  • Bug Fix: Fixed an issue where we would fail to pack the UVs properly if we had multiple identically sized charts.

World Browser
  • Crash Fix: No longer crashes when performing an Undo operation right after generating LOD of a sub-level.

  • Bug Fix: Fixed filtering of sub-levels in hierarchy view by world composition layers.

Level Editor and Tools
  • Crash Fix: Fixed a crash when a level is in an incorrect level collection after reverting the changes of a sublevel of the current level being edited.

  • Bug Fix: Fixed attenuation settings not being disabled when Override Attenuation is false for force feedback and non-English builds.

  • Bug Fix: Actors in the open editor level can no longer be set as the default value for maps, sets, or arrays in user defined structs.

  • Bug Fix: PIE sessions can no longer inappropriately affect editor sessions when the input setting "Use Mouse For Touch" is active.

  • New: Source control history control now includes revisions made prior to branch actions

  • Improvement: The Actor Component function, On Rep Is Active, can now be overridden in subclasses.

Learning Resources

Documentation
  • New: The "-GenerateBlueprintAPI" commandlet now writes clean JSON and provides the option to export information about a subset of the Blueprint nodes available in the Editor rather than all nodes.

Gameplay Framework

  • Bug Fix: Get Components now collects components from child actors when requested to.

  • Bug Fix: Can Crouch In Current State now returns false when character capsule is simulating physics.

  • Bug Fix: Uncrouching now uses the right height for "unencroached" test, when jumping from crouch or uncrouching while in the air.

  • Bug Fix: Moves are no longer combined, when a move triggers a new actor and/or component overlap event.

  • Bug Fix: Character Movement Component's Get Client Net Send Delta Time function now uses this time if Acceleration and Velocity are zero, and the control rotation matches the last acknowledged control rotation from the server.

  • Bug Fix: Input Chords that are set to "None" no longer get replaced with "Any Key" value when the containing Blueprint is reopened.

  • Bug Fix: Removed a dereference that was causing a crash inside Gameplay Cue Manager.

  • Bug Fix: Fixed an issue where Save Game objects could be loaded with the wrong class type when using a Blueprint Save Game type.

  • Bug Fix: Set Allow CPU Access now correctly dirties Static Mesh assets.

  • Bug Fix: Character Movement Component's Server Move function no longer sends the movement base component / bone name unless it's a dynamic base.

  • Bug Fix: CharacterMovementComponent now removes branches when using repeated access of TSharedPtr with FSavedMovePtr.

  • Bug Fix: NaN checking has been removed in Shipping configs within Character Movement, even when checks are enabled in Shipping.

  • Bug Fix: The Actor function called Is Overlapping Actor now avoids function calls on each Primitive Component unless there are actually any overlaps on that component.

  • Bug Fix: Calling Rename on an Actor now correctly removes and adds the Actor to the Actors array of the Level.

  • Bug Fix: Walking in to a wedge between geometry and a slope no longer launches the player in the air with a variable height affected by framerate.

  • Bug Fix: You can now import Data Tables from .CSV files that contain only a header row and no data rows.

  • Bug Fix: Client move combining now works while holding down the jump key or while jump is providing force.

  • Bug Fix: Simulated proxies now correctly simulate gravity when jump force is being applied.

  • Bug Fix: Jump height dependency on framerate has been fixed when applying jump force for more than a single frame burst.

  • Bug Fix: Fixed unsafe weak object pointer when dereferencing iterating pawns.

  • Bug Fix: Force feedback events are now played on the correct controller if the Offset Player Gamepad IDs feature is in use.

  • Bug Fix: Fixed Characters using default scoped movement updates. They no longer visually rotate when rotated at small rates at high framerate.

  • Bug Fix: You now receive a warning rather than an assert on a child promotion failure when destroying a non-root scene component within an Actor's scene component hierarchy.

  • Bug Fix: Child Actor Components are no longer attached to a CDO's root component.

  • Bug Fix: Component instances no longer crash due to sub components.

  • Bug Fix: EndPlay will now be executed if the Actor is destroyed as a result of actions from within its own BeginPlay call.

  • Bug Fix: Gameplay Ability System has been optimized to remove redundant uses of Weak Object Pointer operator.

  • Bug Fix: Scoped Movement Update now propagates the teleport flag from an inner scope to outer scope when they are nested.

  • Bug Fix: Revert Move correctly resets the Teleport Type now.

  • Bug Fix: Fixed log spam when a client character receives acknowledgment for a move that has been removed from the saved moves.

  • Bug Fix: Jump force for character proxies is more accurately predicted to stop on time in case state is not yet replicated from the server.

  • Bug Fix: Blueprint dynamic force feedback effects now update their values when the update node is invoked and while the latent action is active.

  • Bug Fix: Gameplay tag serialization now handles "NumBitsForContainerSize=8" correctly without uint8 overflow.

  • Bug Fix: Invalid Ground Movement Mode coming from Character Movement Component's On Movement Mode Changed function has been fixed.

  • Bug Fix: Delegates now have calls when a periodic Gameplay Effect executes a final time as it is being removed.

  • Bug Fix: The current result of Get Max Speed is now saved in client character saved moves and avoids combining moves with different max speeds.

  • Bug Fix: Ensured that Flush Server Moves only runs on autonomous proxies in case the caller erroneously calls it elsewhere.

  • Bug Fix: Time dilation and frame time values in world settings are now clamped so they won't accidentally be set to negative values.

  • Bug Fix: Target Point's Arrow component is no longer too small to see.

  • Bug Fix: Project World To Screen no longer returns true in the event that the projection failed.

  • Bug Fix: Async Load Primary Asset nodes can now be called safely from a loop.

  • Bug Fix: Placed Editor Utility Base once again ticks in the editor as intended.

  • Bug Fix: The default physics volume can now be spawned during construction script execution if it needs to be lazily created.

  • Bug Fix: In Level Streaming, Should Block On Load now properly blocks for the entire loading process, not just the file load.

  • New: Added Client Net Send Move Delta Time Stationary (default 12Hz) to supplement existing Client Net Send Move Delta Time and Client Net Send Move Delta Time Throttled.

  • New: A Post Script Construct trait has been added that allows users to perform initialization after a blueprint has created a temporary object. If the With Post Script Construct trait is true for a class, that class must implement Post Script Construct. This function is called after an instance of the class is constructed by a blueprint.

  • New: Saved Moves now support subclasses adding combination logic by overriding the Combine With function.

  • New: User Defined Enums now support redirecting.

  • New: Added "r.CookOutUnusedDetailModeComponents" CVar to cook out actors on a per-platform basis. Actors (and Components) are now optionally removed on cook if the device detail level is lower than the component's detail level. This behaviour is controlled by a CVar which can be set via the device profile.

  • New: A toggle has been added to disable the gesture recognizer to input settings. By default this is disabled.

  • New: Radial Damage multicast delegate has been added to Actor and is consistent with Point Damage.

  • New: A Console Variable has been added to enable Async Trace: "RunAsyncTraceOnWorkerThread".

  • New: Added a constructor for Gameplay Ability Spec that takes an ability class instead of forcing the caller to supply the CDO.

  • New: Added macros to Attribute Set to declare helpful accessors, a version of which is used by all Epic internal games.

  • New: Added a function to Gameplay Ability called Get Ability System Component From Actor Info .

  • New: Implemented a new Ability System Component function, Add Gameplay Event Tag Container Delegate, to enable listening for gameplay events using non-exact tag matches, and an option to Wait Gameplay Event to use this.

  • New: Added a Save Game flag to Gameplay Tags so they can be used for native save systems.

  • New: Added a Development Always Cook setting to the asset manager cook rule, this works like Always Cook in development and like Never Cook in production. Development Cook works like Unknown in development.

  • New: "WindDirectionalSourceComponent.h" can now be fully used outside of the Engine module.

  • New: Keys (FKey struct) can now register a short display name, and Get Display Name can request either the long or short version of the name.

  • New: Added a new type of Gameplay Tag called Restricted Gameplay Tag. At runtime, it behaves exactly the same as normal Gameplay Tags, but in the editor, it allows for more control of higher level tags while still leaving flexibility for more specific tags. Restricted gameplay tags are intended for larger projects that want to be able to enforce a high level hierarchy on their tags while still allowing full control and flexibility over lower levels of the tag structure.

  • New: A public method, Strip Save Game Header, has been added for serializing internal header data from save game data buffers.

  • New: A helper function has been added to make it easier to query containers for the presence of a single tag.

  • New: CSV stats have been added for Character movement.

  • Improvement: Gameplay Tags now import from config files by default. Previously the default method for importing was through tag tables.

  • Improvement: Workflow has been improved to support multiple config files that store Gameplay Tags.

  • Improvement: You can now invoke dynamic force feedback effects from native code using Player Controller's Play Dynamic Force Feedback function. The latent function has been made private and only usable from blueprints so it can no longer be misused.

  • Improvement: Attribute Set's Init From Meta Data Table function is now virtual.

  • Improvement: Optimized Update Overlaps by 20% in test cases with large numbers of overlapping actors moving. Further optimized by improving Weak Object Pointer usage to avoid deep comparisons when not necessary.

  • Improvement: Bandwidth is now reduced for replicated characters by only replicating 4 byte timestamp value to clients if it's actually needed for Linear smoothing. By setting Network Always Replicate Transform Update Timestamp to true, you can revert to the old behavior.

  • Improvement: Reduced network RPC overhead for characters that are not moving.

  • Improvement: Projectiles now feature a variable, Bounce Additional Iterations, to control physics iteration count, rather than being hardcoded to one iteration. Default value is two.

  • Improvement: Update Character State Before Movement and Update Character State After Movement now include a DeltaSeconds argument.

  • Improvement: Process Input Stack from the Player class has improved evaluation of which Actions occurred during a frame.

  • Improvement: Actors now have a Pre Register All Components virtual function to match the Post Register All Components function.

  • Improvement: Updated the process of loading/unloading and hiding/showing streaming levels. Many of the variables involved in level streaming have been made private and you must use functions to modify/interact with the them.

  • Improvement: Added delay functionality to MediaPlayer. This will allow more than one player to start at a same time. They will play at the same frame, but be offset in relation to each other.

  • Improvement: Cleaned up and reorganized the public headers of the GameplayAbilities plugin. Many comments were added and the classes were reorganized to group related things together.

  • Improvement: Made several changes to Projectile Movement Component that have improved the default performance settings with minimal behavior impact.

  • Improvement: Per-frame allocations have been reduced in the input manager.

  • Improvement: Reduced per-frame allocations when using DataTables. Accessing a DataTable with a string literal now avoids a allocating an FString variable with each call.

  • Improvement: The Actor function called Is Overlapping Actor is optimized to avoid function calls on Primitive Components that have no current overlaps.

  • Improvement: Optimized SetCollisionProfileName when calling it from a constructor.

  • Improvement: Made some improvements and added flexibility to how Character Movement Component saved moves are combined.

  • Improvement: Removed 3 branches from the Weak Object Pointer function, Get.

  • Improvement: Looping camera shakes can now be blended out.

Localization

  • Bug Fix: Fixed "Should Exclude Derived Classes" option not working in the asset gather.

  • Bug Fix: Fixed PO files failing to import translations containing only whitespace.

  • Bug Fix: Text that doesn't belong to the current package is no longer cached in the localization cache for that package.

  • Bug Fix: Fixed struct instances comparing against the wrong default values when gathering for localization.

  • Bug Fix: PO import no longer fails if a PO file is missing, which is the case for new languages.

  • Bug Fix: Localization multi-line fix.

  • Bug Fix: Fixed single-culture PO import/export failing.

  • Bug Fix: Fixed an issue where some languages would be unavailable due to how ICU reports available cultures.

  • Bug Fix: Fixed placeholder string table entries for different keys being considered identical.

  • Bug Fix: Fixed class/actor names in the placement panel not localizing correctly.

  • Bug Fix: Added missing Hiragana combining character range.

  • New: Localization Pipeline Optimization that mainly focus on asset gathering and other general improvements to other parts of the pipeline. The gather time for 250,000+ word project spanning 80,000+ assets down from over an hour, to just over 10 minutes now.

  • New: Improved the localized asset cooking so that it only cooks L10N variants if their source asset is cooked.

  • New: Added some command line options for GatherText to detect and fix stale or missing package localization caches.

  • New: Added a way to view the localization cache on a package through Asset Localization > Show Localization Cache.

  • New: Improved the ability to lockdown available game languages.

    • In addition to the previous "Disabled Cultures" array, you can now add an array of "Enabled Cultures" (using the same per-build config filters) to explicitly list the cultures that are allowed to be used in your build (if the list is empty, then everything is allowed unless otherwise disabled).

    • This also stops the game from attempting to fallback to the native language if the native language has been disabled (it will fallback to the first available language instead).

  • New: Added an optimized conversion process between Unreal strings and Unicode strings for platforms that use UTF-16 strings natively.

  • New: Added support for additional localized text sources, including arbitrary polyglot data.

  • Deprecated: "Get Cultures With Available Location" is deprecated and should be replaced with "Get Localized Culture Names" to get the names, or "Get Available Cultures" if a pointer to the full culture data is needed.

Networking

  • Crash Fix: Cleared a debug callback when "Curl HTTP Request" was destroyed to prevent crashes.

  • Bug Fix: Fixed several issues with seamless travel while using Play-In-Editor that could cause crashes.

  • Bug Fix: Fixed an issue with stateless handshake, when the server sends a challenge and receives a response during the same tick.

  • Bug Fix: Pitch is now properly stored when aiming in client recorded replays.

  • Bug Fix: Removed the overhead of "Compress Axis" in the function Rotator for each element in Serialize Compressed when loading.

  • Bug Fix: An issue with stateless handshake was fixed, where the server sends a challenge and receives a response during the same tick.

  • Bug Fix: Guaranteed a return value of 0 when the "Get Port No" function of "Socket" fails.

  • Bug Fix: Fixed MULTIHOME returning the incorrect host address on Linux and Android.

  • Bug Fix: Infinite recursion no longer occurs when trying to flush/send on socket close.

  • Bug Fix: Fixed a rare bug where a remote function call from the client could use the wrong value for an object reference in a struct.

  • New: Cleaned up the "Get Type Hash" function on the "Unique Net ID Replication" function to call into the "Unique Net ID Version" function.

  • New: Added a keyfunc class for use with Unique Net ID as a key in TMap.

  • New: Added support for message bus in single-threaded applications.

  • New: Added support for single-threaded applications in UDP socket sender/receiver.

  • New: Added some parameters to "Rep Layout" member functions const-correct.

  • New: Included a sample replication graph for ShooterGame.

  • New: The CVar "CVar Ping Exclude Frame Time" is now enabled in shipping builds.

  • New: Net Connection now tracks how many total bytes of data it has sent and received during its lifetime.

  • New: Net Driver now tracks how many bunches its connections have sent and received.

  • Improvement: Unique Net IDs serialized over the network in 18 bytes, down from 41.

Replays
  • Crash Fix: Fixed a potential crash when recording replays.

  • Bug Fix: Fixed the current replay's timestamp if the replay is close to finishing.

  • Bug Fix: Allowed Automatic Replay / Stream names to be configurable.

  • Bug Fix: Fixed up edge cases in Replays where Actors were being destroyed inappropriately.

  • Bug Fix: Net Connection now keeps track of both in and out packet loss during its entire lifetime.

  • Bug Fix: Fixed a security issue if a malformed packet was sent with a channel index greater than the maximum number of channels.

  • Bug Fix: Fixed the "Play Replay" function of Game Instance to return false if the replay fails to play.

  • Bug Fix: Fixed many issues with replicated, placed-in-map Actors and replay scrubbing. Places Actors will now always respawn correctly after scrubbing, with the correct transformas applied and correct replicated properties.

  • Bug Fix: No processing will be done in "Demo Net Driver" if the Stream isn't ready.

  • Bug Fix: Fixed up DemoNetDriver to always call Handle Demo Net Playback Failure for cases when the demo is stopped due to errors.

  • Bug Fix: Fixed initially dormant replicated actors not being recorded in client replays.

  • Bug Fix: Replays now ignore RPCs while fast forwarding.

  • Bug Fix: Dedicated server no longer runs the render thread.

  • Bug Fix: Fixed an issue where the client could receive redundant actor destruction messages during level streaming, which could cause broken actor channels.

  • Bug Fix: The dithering effect on LOD actors during replay playback now ignores time dilation.

  • Bug Fix: Placed Actors now appear correctly in replays.

  • Bug Fix: Replays handle dynamic level streaming correctly, instead of keeping all levels loaded at all times.

  • New: Added an option for replays to track additional Actor state to be applied after the actor is respawned during playback scrubbing.

  • New: Added an option to allow multiple connections to share network serialization state during server replication. This applies to both property replication and multicast remote procedure calls.

  • New: The maximum number of actor channels can now be configured by setting the "net.MaxChannelSize" console variable.

  • New: Added additional stats around network GUID remapping, with new options to limit the number processed per frame and filter the list based on closed and broken actor channels.

  • New: Net connections now maintain a mapping of class names to an array of time differences between replication instances of actors of that class. This can be used to help track if certain classes of actors are taking too long to replicate.

  • New: Added Support with Rewindable Actors for replays.

  • New: Added a way to retrieve the active replay name from the Demo Net Driver.

  • New: Added functions Save Property State and Compare Property State to Demo Net Driver.

  • New: Added the function "Is Saving Checkpoint" to Demo Net Driver to allow other code to query whether the driver is currently saving a checkpoint.

  • New: Added a console variable demo with "Time Burn In" to show the current replay timestamp on-screen with debug text.

  • New: Added "-csvdemostarttime" and "-csvdemoendtime" commandline arguments to automate CSV profiles when running replays.

  • New: Local File Streamer replaces Null Streamer as the default Replay Streamer. Works asynchronously and performs better on low-speed hard drives, such as those found in game consoles.

Online

  • Crash Fix: Fixed a CEF browser threading issue causing rare crashes.

  • Crash Fix: Fixed a rare crash in Steam Sessions.

  • Bug Fix: The HTTP Retry System function now uses the "Retry-After" or "X-Rate-Limit-Reset" header to determine when it should connect next for responses that returned 429 or 503.

  • Bug Fix: Changed the behavior of Curl HTTP requests that failed and had no HTTP activity to be a connection failure instead of a generic failure.

  • Bug Fix: Changed access pattern to the HTTP Thread function removing a critical section.

  • Bug Fix: Online Hotfix Manager restores old ini settings in the same frame as applying the new ini values.

  • Bug Fix: Changed the behavior of Curl HTTP requests that failed and had no HTTP activity to be a connection failure instead of a generic failure.

  • Bug Fix: Fixed voice failing to play locally after performing a seamless travel when using NullOSS.

  • Bug Fix: Cleaned up Steam P2P connection logging to prevent excessive log spam.

  • Bug Fix: Fixed Steam Leaderboard code to overwrite stat variables instead of increment them as per the documentation.

  • Bug Fix: Added missing domains for Google/Facebook to properly delete cookies on logout.

  • Bug Fix: Fixed iOS/Mac HTTP requests repeating the contents of their user agent header.

  • Bug Fix: Fixed a non-null termination close reason coming from "LWS Web Socket."

  • Bug Fix: Fixed Steam Dedicated Server from forcibly linking Steam Client dlls which can cause issues depending on environment setup.

  • Bug Fix: Fixed OSS Live not initializing its subsystem name.

  • Bug Fix: A crash no longer occurs when receiving unhandled XMPP stanzas in debug builds.

  • Bug Fix: Re-added max connections per host and multi home http support to Curl HTTP.

  • Bug Fix: The b.VerifyPeer ini setting is now used by Windows Curl HTTP implementation.

  • Bug Fix: Fixed a connection failure to Google API during initialization for Google Sign In.

  • Bug Fix: Fixed an issue with Google sign in where delegates fire inappropriately in Login() as well as giving a bad return value.

  • New: LibCurl now advertises that it accepts compressed HTTP content in gzip and deflate formats.

  • New: Default UserAgent sent with HTTP calls is now "$Product/$Version $OS/$OSVersion".

  • New: Added serialized json as a valid value type for Variant Data function Serialize Online Key Value Pairs function.

  • New: Added bulk UnregisterPlayers function to AGameSession.

  • New: Update libwebsockets to v2.2.

  • New: Added SSL Manager to the SSL module to manage the lifetime in monolithic builds and create SSL contexts.

  • New: Added the ability to override Facebook app id, set API version via config and added more debugging options.

  • New: Updated Facebook SDK to 2.12 which allows you to use a version config value.

  • New: Implemented more tests into the leaderboard testing harness.

    • Added the ability to fetch arbitrary rank for platforms that support it. Command is "online test leaderboards [optional arbitrary user id for lookup]"

  • New: An HTTP retry option was added to allow for multiple alternate domain attempts if a connection to the host fails.

    • Only attempt other domains if it fails to connect, not if the request fails for non-connection related reasons.

  • New: An ini setting was added to set the maximum number of connections that curl will use.

  • New: Implemented "Online Play Time Limit" in the "Play Time Limit" module to the Online Framework plugin.

  • New: The OnlineSubsystem "Get By Platform" is now more extensible with new platforms.

  • New: Online Hotfix Manager now supports a version value that is compared against the network compatible version.

  • New: Updated cacert.pem from https://curl.haxx.se/docs/caextract.html.

  • New: Added a delegate when receiving an http header Add FHttp Request Impl to implement simple virtual functions that all platforms implement in the same way.

  • New: Upgraded Google Sign In SDK for Android to the latest version.

  • New: The "Get Online Environment Name" function of Online Subsystem now allows for subsystem implementations to give specific names for their online environment.

  • Deprecated: Disabled the Slate Remote server in shipping builds and on non-Desktop platforms.

Paper2D

  • Bug Fix: Corrected commands mapped in the incorrect location.

  • Bug Fix: Fixed Tile Maps being edited in the Tile Map Editor always having a selection color tint.

  • Bug Fix: Fixed collision generation for Tile Maps with non-orthogonal projections.

  • Bug Fix: Improved positioning of newly added collision or rendering shapes (box/sphere) when a sprite is not at the origin in UV space.

  • Bug Fix: Double-clicking to change the UV region in the Sprite Editor now correctly marks the Sprite Asset as modified.

  • New: The Tile Grid color is now customizable.

**Physics**

  • Bug Fix: Fixed a cook warning with "Contains Physics Tri Mesh Data" returning true but "Get Physics Tri Mesh Data" returning false.

  • Bug Fix: Re-enabled warnings for when PhysX fails to cook a mesh.

  • Bug Fix: Origin-shifting no longer causes big impulses on Cable Components.

  • Bug Fix: Improved load times for PhysX tri meshes by turning off 8-bit index buffer optimization and avoiding conversion from 8-bit to 16-bit one index at a time.

  • New: Contact modification callbacks have been exposed in the Engine, allowing access to custom contact modifications.

  • New: Added a warning when applying a non-substepped force while inside a substep callback.

  • New: Cable Actor class is now exposed with the Engine API.

Clothing
  • Crash Fix: Fixed a crash when clothing simulation was dispatched from a pending kill Skeletal Mesh Component.

  • Crash Fix: A crash no longer occurs during clothing actor creation when a clothing simulation mesh has no simulated vertices.

  • Crash Fix: Fixed a crash caused by switching clothing meshes when clothing LOD0 is unbound on a clothing data object.

  • Crash Fix: Fixed a crash reimporting over clothing when the bind step would make a section exceed MAX_GPUSKIN_BONES.

  • Bug Fix: Proxy now updates cloth shader data independently, causing sections to no longer get stuck in the clothing rendering path due to the component not ticking.

  • Bug Fix: Changed clothing render data to always use component-relative transforms so we don't see single frame stretching of clothing on component spawning.

  • Bug Fix: Fixes to clothing 'pops' during server corrections due to unexpected linear forces.

  • Bug Fix: Motion Blur is now correctly calculated on clothing sections of Skeletal Meshes.

  • Bug Fix: Fixed clothing data binding state becoming mismatched after a reimport over multiple LODs.

  • Bug Fix: Fixed clothing LOD update receiving empty bone transform array on initialization if a master pose component was used

  • New: Added support for Tapered Capsules to physics assets. Tapered Capsules are only supported by clothing, not by rigid bodies.

  • New: Added tool to copy Skeletal Mesh Vertex Colors to selected clothing parameter mask.

Collision Detection
  • New: Added rest offset for geometry, which allows us to smooth out contact generation. This helps with sliding objects on sharp irregularities.

Physics Asset Editor
  • Crash Fix: Fixed a crash caused by using the undo command to undo primitive regeneration while simulation is in progress & stopping simulation.

  • Bug Fix: Fixed physics asset editor relying on the "Block All" profile for its Collision Enabled in case a project has redefined the properties of the "Block All" profile.

  • Bug Fix: Constraints and bodies now rotate in their own Local Space in the Physics Asset Editor when local coordinate system is applied.

Rigid Bodies
  • Bug Fix: Removed unnecessary read locks when updating kinematic targets during substepping.

  • Bug Fix: Substepping is no longer used on Query Only kinematic bodies.

  • Bug Fix: Fixed Rigid Body awake check needlessly iterating all bodies in a Skeletal Mesh component.

  • Bug Fix: Fixed bug where only points on one side of a plane were being checked in Convex Hull validation.

  • Bug Fix: Mass scale of Physics Bodies is no longer incorrectly clamped. It now allows mass scales below 0.01 and above 100.

  • New: Added new boolean flag, "Not For Dedicated Server," to Physics Assets, which disables creation of bodies on dedicated servers.

Platforms

  • Bug Fix: Added support to check if persistent storage is available before attempting to use it.

  • New: Made the Apple Vision Plugin use version checking consistent with ARKit.

  • Improvement: Optimized JPEG compression, saving about 20-25 percent time on the CPU.

  • Removed: Removed SharpZipLib and references from bundled Mono on Mac and Linux.

All Mobile
  • Bug Fix: Shaders are now synchronously loaded if not previously requested.

  • Bug Fix: Fixed issue where landscape would not render when cooked for a PC mobile emulation shader platform.

  • New: Distance Fields no longer included in cooked data on iOS and Android.

  • New: Added ability to cook contents for the PC mobile emulation shader platforms PCD3D_ES2 and PCD3D_ES31.

Android
  • Crash Fix: Added a fix for '+' conversion modifier for Android in vswprintf because it caused crashes with non on-the-hour time zones.

  • Crash Fix: Fixed a potential crash that could occur when Virtual Keyboard Widget is hidden while trying to use in it in the game thread.

  • Crash Fix: Due to a possible crash on Galaxy S8 on Android 7.0, notifications are now downgraded to simple suggestions on text change. This is due to suggestions not being hidden and disabling predictive input.

  • Crash Fix: Fixed potential crash if virtual keyboard is hidden on Android before deferred action.

  • Bug Fix: Force Completion is now called for the initial movie player on On Pause and App Restart is called on Resume.

  • Bug Fix: Made tutorial and documentation links optional and disabled any unnecessary tutorial link for Android license agreement error.

  • Bug Fix: Used UPL hash to invalidate build if any UPL files are changed.

  • Bug Fix: Prevented Android virtual keyboard input from being covered by software buttons.

  • Bug Fix: Fixed distribution build issue with OBB downloader.

  • Bug Fix: Disabled manual vertex fetch on Android.

  • Bug Fix: Used physical memory is now returned from JNI after initialization completes on Android.

  • Bug Fix: We now wait for the audio thread to pause audio so playback stops properly in background on Android.

  • Bug Fix: Fixed Resonance Audio Api warning about wrong library format.

  • Bug Fix: Updated Android license used to generate licenses file for Gradle.

  • Bug Fix: Added fix so that Android no longer tries to queue ticks in parallel because it could cause hitches.

  • Bug Fix: Stopped Gradle from leaving a daemon process running after completed.

  • Bug Fix: Fixed missing text input field for Android virtual keyboard in cases where it doesn't show properly by forcing a layout request.

  • Bug Fix: Changed how we count available cores on Android, skipping ones that are dedicated to external uses.

  • Bug Fix: Fixed navigation bar showing during splash screen with full immersive setting enabled.

  • Bug Fix: Removed unnecessary #include "AndroidTargetDevice.h", which caused circular reference and nightly build errors.

  • Bug Fix: Fixed issue where a r.MobileContentScaleFactor variable specified in a Device Profile was immediately recreating the Android window, breaking Vulkan detection.

  • Bug Fix: Fixed store version used for saving symbols directory on Android Shipping builds with bBuildWithHiddenSymbolVisibility.

  • Bug Fix: Removed early stop if missing Android SDK and if Gradle can download it.

  • Bug Fix: Fixed Material texture coordinate compile error when compiling landscape materials for ES2.

  • Bug Fix: Added missing Android AMOTION relative axis defines for older NDKs.

  • Bug Fix: Fixed issue where native WebView could not load HTML5 movies if the control's layout didn't have FILL_PARENT param.

  • Bug Fix: Fixed issue with unresponsive WebView on iPhone X that was caused by touches not registering due to a parent being smaller than a child.

  • Bug Fix: Added a proguard exception for WebViewControl.FrameUpdateInfo.

  • Bug Fix: Fixed install/uninstall batch filenames for Android Blueprint-only projects.

  • New: Added GL memory tracking to LLM, and added LLM Alloc functions to Android.

  • New: Made changes to Android toolchain support to use new includes with NDK 14b and above.

  • New: NEON instructions now enabled by default on ARMv8. Can be optionally enabled on ARMv7 with bUseNEONForArmV7=True in Android Runtime Settings.

  • New: Added client Android platform variants and proper filtering out of non-game types from package menu flavors.

  • New: Added message box with reasons for failure if ES2 fallback fails.

  • New: Added option to disable IMU for performance on Android.

  • New: Added Android Get Network Connection Type support.

  • New: Added AndroidThunkCpp_LaunchPackage() to start another application.

  • New: Implemented Clipboard function on Android.

  • New: Added logging on low memory conditions for Android.

    • Check logcat for GameActive.onTrimMemory messages.

  • New: Updated Google Play Services dependencies to 11.8.0.

  • New: Added handling of Android mouse events, a way to block them, and hardware keyboard events.

    • Android.EnableMouse=1 enables mouse events (disabled by default).

    • Android.EnableHardwareKeyboard=1 enables hardware-generated key events (disabled by default).

  • New: UE4Commandline.txt is now enabled in APK.

  • New: Provided support for disabling ASTC texture compression on devices where it does not work properly but driver extension is present (r.OpenGL.DisableASTCSupport=1).

  • New: Added a new Device Proxy type called "All devices".

    • Holds a list of physical device IDs for every texture format variant instead of a single device ID.

    • Updated automatically by the device discovery thread.

  • New: Device discovery is now used to signal when a running device is disconnected.

  • New: Added Mali G72 device profile for Android.

  • New: Added support RHI Thread for startup movie playback on Android.

  • New: Added XBox 360 wired controller support for Android.

  • Improvement: Overrode "Max Object In Game" on Android to save approximately 30M with the Object Array size by default.

  • Improvement: Removed color attachment while rendering depth on ES3 devices, saving 16mb.

  • Improvement: Added improvements for handling of Android IMU updates

    • Reduced memory allocations needed to handle sensor events.

    • Low-pass gravity filtering was made more consistent (only at rate of accelerometer updates, not all sensor events).

    • Changed to only push final sensor update state per tick instead of for any sensor update (reducing JNI calls).

  • Improvement: Improved Android debugging, including:

    • Detect java and gdb/lldb debugger are now attached.

    • Added proper implementation of DebugBreak for each architecture.

    • Improved stack walking, and now properly terminates, showing relative offset for addr2line.

HTML5
  • Bug Fix: Controller axis and button max value is now set in code instead of relying on the function "Emscripten Get Gamepad Status" as it seems emscripten might be uninitialized by the time controllers being used.

  • Bug Fix: Virtual joysticks are no longer shown by default and mouse not captured, now behaving like the Windows-64bit client version.

  • Bug Fix: Disabled "Supports Screen Percentage" as it was causing the HTML5 screen to only render a portion of the screen properly.

  • Bug Fix: Fixed issue with double printing to console.log.

  • Bug Fix: Fixed unnecessary padding margins that were present when using Fixed scale mode.

  • New: Added project setting drop down box to select canvas scaling mode when editing HTML5 game window size.

iOS
  • Crash Fix: Fixed crash on backgrounding for non-backgrounding apps.

  • Crash Fix: Fixed crash on iOS being caused by large mismatches between a drawable texture and a scene's depth-stencil target.

  • Bug Fix: Fixed bug that occurred when the last Slate element to be drawn in the scene is a Scroll Bar with progress between 0 and 1 with Metal on iOS.

  • Bug Fix: Fixed Metal Mip-to-Mip copying validation errors when copying mips smaller than 4x4 with ASTC.

  • Bug Fix: Fixed Metal ring buffer memory leak.

  • Bug Fix: Fixed issue causing distribution build errors for some Blueprint projects on iOS or tvOS.

  • Bug Fix: Fixed compilation error being caused by enabling Location Services Plugin on iOS.

  • Bug Fix: Renamed "Initial Movie" to "Startup Movie", including methods related to the Android platform.

  • Bug Fix: Changed to allow for empty paths in UPL Init which may occur for remote iOS builds.

  • Bug Fix: Client/Host input mapping will now use only interactable area of host window, without title bar and borders.

  • Bug Fix: If host's TCP socket was already connected, we get SE_ECONNRESET when trying to re-use it. When client disconnects, we now also reset the host TCP socket.

  • Bug Fix: Fixed potential memory leak in iOS display logic.

  • Bug Fix: EnumerateFiles().ToList() now prefaced with a check for if the CookOutputDir exists, preventing exception from being raised.

  • Bug Fix: Fixed TVOS/iOS error resulting in numerous errors related to 'no such file or directory' (Binary builds only).

  • New: Added availability checks for Apple Image Utils Plugin (similar to ARKit).

  • New: Added UTexture2D to CGImage conversion in Apple Image Utils Plugin.

  • New: Added ability to push a single file to an iOS app's Documents folder from PC using a command such as DeploymentServer.exe copyfile -bundle com.mycompany.MyApp -file C:\PathToFileOnPC -file /Documents/MyApp/MyFileOnDevice.

  • New: Added listener to viewport resize event on host.

Linux
  • Crash Fix: Added check for null StdOut and ReturnCode parameters on input to ExecProcess on Unix platforms, otherwise code will crash if the process failed to be created.

  • Crash Fix: Fixed crash when importing to level.

  • Crash Fix: Converted Vulkan initialization failure crash to be a graceful exit.

  • Bug Fix: Linux now correctly sets current working directory as executable location.

  • Bug Fix: Fixed splash image for big endian machines.

  • Bug Fix: Implemented use of X11 pointer barriers to bound cursor to region over warping the pointers.

  • Bug Fix: Fixed RPath issues when bundling a project.

  • Bug Fix: UBT will now disable -fPIE when producing monolithic binaries if the compiler is configured to enable it by default.

  • Bug Fix: Remove tracking of CLion/CMake build files.

  • Bug Fix: Default to -as-needed for debug builds resulting in faster startup times.

  • Bug Fix: Added more verbose message about missing VK extensions.

  • Bug Fix: Fixed gamepad thumbstick clicks not registering.

  • Bug Fix: Fixed infinite logging when failing a system operation.

  • Bug Fix: Fixed UE_ENGINE_DIRECTORY not being set on Linux.

  • Bug Fix: Fixed forked child process trying to wait on a sibling process.

  • Bug Fix: Fixed possibly selecting multiple clock sources during initialization.

  • Bug Fix: Restored better printing of FNames through GDB.

  • Bug Fix: Fixed performance regression in Editor (for OpenGL RHI).

  • Bug Fix: Fixed checking commandline arguments prior to being initialized.

  • Bug Fix: Filename and line numbers are now printed during an ensure.

  • Bug Fix: Fixed reporting crash handling frames during an ensure or crash.

  • Bug Fix: Fixed a deadlock in crash handler.

  • Bug Fix: Fixed issue with Mono persisting after RunUAT has exited.

  • New: Added script to download the latest toolchain.

  • New: Added support for terminfo2.

  • New: Added support for a bundled native toolchain on Linux.

  • New: Enabled EXR support for Linux.

  • New: Added binaries for GoogleTest and add to BuildThirdParty script.

  • New: Added LXC container script for building some third party libraries.

  • New: Added support for Unreal Version Selector.

  • New: Added a new way to symbolicate symbols for ensures and crashes at runtime.

  • New: Updated Build Cross Toolchain script to enable a Linux host targeting multiple Linux architectures (including the host's architecture).

  • New: Implemented Low Level Memory (LLM) tracker for Linux.

  • New: Added functionality to cache recently accessed files that required case insensitive look-ups.

  • New: Added pop-up message box to prompt for whether or not the user wants to submit crash report data.

  • New: Enabled RenderDoc support for Vulkan RHI.

  • Improvement: Removed unused start-up module, ALAudio.

  • Removed: Removed Linux SDL2 dependency from Core.

Mac
  • Bug Fix: Progress Bar widgets on Mac no longer render as full when fill value is 0.

  • Bug Fix: Restored Mac Graphics Switching Plugin, refactoring it to support switching the Editor between Metal GPUs:

    • Primarily this is of benefit to those with eGPUs.

    • Changing the GPU will ask you to restart.

    • Fixes a bug where 27" iMacs report an Intel GPU even though it is physically disabled.

  • Bug Fix: Updated Mac OS deployment target version to 10.12 from 10.11 as we officially ended support for El Capitan a while ago.

  • Bug Fix: Fixed deprecation warnings for macOS 10.12.

  • Bug Fix: Make Light Propagation Volumes debug visualisation work on macOS.

  • Bug Fix: Refactor Metal RHI debugging tools to move away from reimplementing Objective-C protocols, to adding separate debugging classes. This makes it easier for future OSes without having to update each time new functionality is added.

  • Bug Fix: Added update for Xcode 10 Beta, moving the metal shader compiler and requiring different arguments.

  • Bug Fix: Xcode project generator now preserves the schemes' command line arguments when regenerating the project.

  • New: Added LLM support for macOS, including tracking of memory allocated in Objective-C. This makes use of runtime method swizzling in the Objective-C runtime and the rd_route library, which enables arbitrary runtime function interposition, enabling Unreal to hook the custom allocators used in Objective-C frameworks and charge Objective-C allocations to the caller.

  • New: Added INTELLISENSE to preprocessor definitions for indexing to improve indexing without generating game header files.

  • Improvement: Changed button mapping for PS4 controller on Mac to use Touchpad instead of Share button as "Special Left" to match other platforms.

  • Improvement: Reduced incremental build times on Mac by updating dependencies for dSYM files so that only cross-referenced Modules have their dSYMs recreated on subsequent builds.

  • Improvement: Improved CPU performance of some post-processing passes on Mac by changing the way we allocate a fallback depth-stencil texture to avoid constantly reallocating it.

  • Improvement: Improved the way we generate groups in Xcode project's source code navigator. They are now sorted alphabetically and have correct paths, making it so Xcode no longer displays them in red.

Rendering

  • Crash Fix: Fixed crashes inside "Remove Speed Tree Wind" function and "Remove Speed Tree Wind Render Thread" function.

  • Crash Fix: Fix for Intel HD 4000 crashing on driver 10.12.6.

  • Crash Fix: Fixed a crash occurring when two Post Process Volumes, in a level and sub-level with elements in their Blendables array, were simultaneously selected.

  • Crash Fix: Fixed crash inside DFAO resource allocation, when DFAO viewport has zero area.

  • Crash Fix: Fixed crash caused by automatic building Reflection Captures, while being in Mobile Preview mode.

  • Bug Fix: Vulkan will now expose additional driver information for Unix platforms.

  • Bug Fix: Vulkan now prefers mailbox present mode if available.

  • Bug Fix: Fixed an issue with compressed (packed) normals on the GPU which were off by one integer representation.

  • Bug Fix: Optimized bounding sphere radius for objects with non uniform scale.

  • Bug Fix: Allow disabling VSync in windowed mode for macOS 10.13.4+ and above.

  • Bug Fix: Fixed Freeze Rendering on non Editor builds.

  • Bug Fix: Fixed remaining Quad Overdraw Viewmode contents on screen after switching to certain other View modes (e.g. light overlap or complexity).

  • Bug Fix: Fixed tesselation shader texture and uniform initialization in OpenGL3 and OpenGL4.

  • Bug Fix: Fix the black ground scattering on Metal by changing the Atmospheric Fog shader to avoid passing small negative values into the sqrt() function.

  • Bug Fix: Fixed compiling Metal shaders into native shader libraries by disambiguating structs defined by tessellation shaders.

  • Bug Fix: Now Vulkan only uses up to 95% of available GPU memory to handle some OS fragmentation.

  • Bug Fix: Shadow Setup will now only stencil mask drawn Static Meshes.

  • Bug Fix: Asynchronous SSAO now automatically switches to Synchronous SSOA when there are multiple Ambient Occlusion levels.

  • Bug Fix: Fixed a possible GPU hang. Initialize all of Function Forward Global LightData to avoid uninitialized numreflections or other bad params.

  • Bug Fix: Make Manual Vertex Fetch a property of the shader platform for Metal - only the desktop platforms (METAL SM5/SM5_NoTess/MRT) will use manual vertex fetch. The Mobile platforms use vertex descriptors.

  • Bug Fix: Fixed not releasing SRV on render thread for Function Position Vertex Buffer, Function Static Mesh Vertex Buffer, Function Color Vertex Buffer, Function Static Mesh Instance Buffer.

  • Bug Fix: Adjusted HLODs to use the "Never Distance Cull" flag by default.

  • Bug Fix: Retconned Texture 2D Dynamic to include a deprecated API path.

  • Bug Fix: Fixed Planar Reflections on Vulkan.

  • Bug Fix: Fixed assert inside Bind Light Map Vertex Buffer when re-importing meshes with auto generated UV channels.

  • Bug Fix: Fixed a memory leak fix when playing video and main thread blocks.

  • Bug Fix: Improved responsiveness audio synchronization when unpausing or seeking video on Windows platforms.

  • Bug Fix: Slightly improved CPU performance on Metal by caching all the state objects.

  • Bug Fix: Fixed an assert that intermittently fired on Metal with tessellation enabled caused by retaining unused uniform buffers.

  • Bug Fix: Implemented more *_RenderThread functions in MetalRHI to avoid stalling the RHI thread on macOS.

  • Bug Fix: Fixed a number of subtle bugs in the handling of uniform buffers within MetalRHI that could result in unbound buffers or invalid data being provided to shaders.

  • Bug Fix: Enabled use of 4-component formats for Buffer UAVs in MetalRHI.

  • Bug Fix: Metal shaders don't provide an actual instruction count, but the line count is a sufficient proxy to make the shader complexity views work in the Editor.

  • Bug Fix: Fixed compilation of the Forward Shading METAL_MRT shader platform for iOS by removing references to native Cubemap-array Textures that are only available on some Apple GPUs.

  • Bug Fix: Fixed issues with the mesh simplifier when simplifying meshes with large Texture coordinate values.

  • Bug Fix: Altered the way we invalidate Metal visibility buffers inside MetalRHI to slightly increase performance on iOS by sharing them across encoders when possible.

  • Bug Fix: Fixed MetalRHI memory reporting in non-default path.

  • Bug Fix: If a Metal shader has an error it will now generate the shader hash and function name.

  • Bug Fix: Fixed a hitch when enabling Shader Complexity view mode.

  • Bug Fix: Fixed case typo in path for Custom Mesh Component build file.

  • Bug Fix: Bounds of Skeletal Meshes will no longer get inverted when an object has negative scaling causing Occlusion Queries to break, leading to flickering.

  • Bug Fix: Fixed incorrect SV_InstanceID and SV_VertexID conversions in the Metal shader compiler backend.

  • Bug Fix: The Metal Backend for Shader Compile Worker will now correctly convert the return type of Depth Texture Samples to float4 from Metal's float to fix compile errors in newer shader code.

  • Bug Fix: Extended the Mac & iOS Frame-Pacer API to provide the target output time and the intended duration.

  • Bug Fix: Enabled Volumetric Fog on Vulkan.

  • Bug Fix: Fixed a race condition inside MetalRHI caused by misuse of the Function RW Scope Lock.

  • Bug Fix: Fixed a memory leak in Batched Lines.

  • Bug Fix: Fixed a crash on Apple TV caused by using an unsupported Metal API call.

  • Bug Fix: Fixed missing debug markers on Vulkan (TCHAR_TO_ANSI lifetime issues)

  • Bug FIx: Improved performance by unifying the Metal buffer implementation so that the different types have a common parent and can share pooling and sub-allocation behavior.

  • New: Added "framegrabber.framelatency" command to allow variable frame-latency in Frame Grabber frames.

  • New: Added r.Vulkan.SubmitAfterEveryEndRenderPass command to help track down GPU crashes.

  • New: Ansel photography plugin improvements:

    • The free-roaming photography camera has new constraints by default. These prevent it from passing through walls.

    • Photography session can be started and stopped programmatically, making it possible to bind photography to a hotkey or button combination.

    • Tweakables and utilities are now exposed through a Blueprint Function Library, rather than requiring direct manipulation of console variables.

    • The Ansel photography session UI now exposes some Engine effect tweakables as sliders. For example, if the game is using Depth-Of-Field, a slider for Focal Depth becomes available. This behavior can be turned off through the Blueprint Function Library.

    • Letterboxing is now removed during multi-part capture.

    • Tiled shots are taken at full resolution even if Screen Percentage is less than 100.

    • Screen Space Reflections are enabled during super-resolution shots since Ansel is now better at hiding any ensuing artifacts.

    • Postprocess settings are frozen at session start to avoid discontinuities during photography such as when wandering between postprocess volumes during stereo and 360 shots.

  • New: Added support in Vulkan to prefer a specific GPU using -preferNvidia|AMD|Intel.

  • New: Added scalability control to adjust Object Draw Scale with Camera Field of View under the "r.ViewDistanceScale.FieldOfView***" command.

  • New: Added support on Vulkan for vktrace using the command line "-vktrace".

  • New: Added support for RenderDoc on Vulkan, Android, Debug and Development builds.

  • New: Added support on Vulkan for r.DisableEngineAndAppRegistration.

  • New: Added the ability to segment shade code libraries for global shaders and different .pak files in packages.

  • New: Added -AllowSoftwareRendering command line to allow D3D11 to fall back to software rendering if desired.

  • New: Added a explicit error message that tells users when they are over the maximum size when allocating very large Render Targets.

  • New: Added support for VK_AMD_buffer_marker on Vulkan to dump information when a GPU crash occurs.

  • New: Added support for D3D11, D3D12 & Vulkan for UAVs off Index Buffers.

  • New: Added support for r.DefaultBackBufferPixelFormat on Vulkan.

  • New: Added support for storing Vulkan validation information with r.Vulkan.SaveValidationCache which uses the VK_EXT_validation_cache extension

  • New: Added support for NVIDIA Aftermath to be enabled by default.

  • New: Refactored Function Realtime GPU Profiler Frame to avoid splitting profile events when calculating exclusive times of scopes. This allows tracing profiler to retain the hierarchical view of the data, while keeping CSV and GPU Stat system behavior intact.

  • New: Vulkan now uses 256MB pages for Device heap allocations (or 1/8th if less).

  • New: Updated to 1.1.70.1 Vulkan headers to use for both Windows & Linux.

  • New: Added support for multiple UV channels on the Procedural Mesh Component.

  • New: Extensively refactored the MetalRHI GPU profiling code. There is now a "MetalProfiler Start/Stop/Frames=X" in-game command that will spit out JSON files similar to the platform-agnostic TracingProfiler. The MetalProfiler shows the frame in terms of command-buffers, V-Blanks (if frame-pacing is enabled) and resource allocations.

  • New: Vulkan now generates a generic pipeline cache file, and a device specific one.

  • New: Support for DX12 quad buffer stereo rendering.

FX
  • Bug Fix: Fixed Motion Blur vectors on Mesh Particles.

  • Bug Fix: Return far plane when Scene Textures are disabled in order not to break Depth Fade.

  • Bug Fix: Fixed Particle shadows, when Particle Material uses Depth Fade.

  • New: Engine level pooling system for Particle system components.

  • New: Improved interpolated spawning behavior in Cascade. Gated behind a property that defaults to true for existing content.

  • New: Implemented get previous position to Niagara sprite Particles in order to fix Sprite Particle Motion vectors.

Lighting
  • Bug Fix: Fixed 1.5 Texel offset inside Manual 2x2 PCF shadow filtering.

  • Bug Fix: Fixed white thumbnails and other issues with Sky Lighting on ES3_1 path.

  • Bug Fix: Removed lights with Lighting Channels out of tiled deferred light list, as tiled deferred lights do not support Lighting Channels.

  • Bug Fix: Fixed DFAO resolution scaling border artifacts.

  • Bug Fix: Fixed crash inside Indirect Lighting Cache, which can happen when user cancels Lightmap generation.

  • Bug Fix: Fixed hard coded Reflection Capture Cube Map size, this will fix Static Light Aliasing in captures.

  • Bug Fix: Fixed joined charts forming an L so they inflate both axes.

  • Bug Fix: Fixed Checkerboard Subsurface Scattering for resolutions non divisible by two.

  • Bug Fix: Fixed missing Reflections in Blueprint Editor.

  • New: Indirect Lighting Color Scale is now applied to Subsurface Lighting and Diffuse Lighting.

  • New: Added RTDF r.DFShadowQuality allowing to adjust for shadow performance or quality.

  • New: Added r.AOQuality allowing to adjust for DFAO quality or performance.

  • New: Added a toggle for specifying Contact Shadow Length in World Space units.

  • New: Exposed Contact Shadow parameters to Blueprints.

  • New: Added Dual Specular for Subsurface Profile Shading Model.

  • New: Added Subsurface profile for Eye Shading Model.

  • Improvement: Contact shadow Improvements:

    • Contact shadows now use representative light's direction.

    • Will keep constant Screen Space length independent of FoV settings.

    • Added Contact shadows for Translucents.

    • Added Contact shadows for eye Shader model.

Materials
  • Crash Fix: Fixed case where using "Shader Cache" and "Share Material Shader Code" was causing crashes in games.

  • Bug Fix: Reduced memory usage of Materials in cooked builds by marking properties of Material Expression and Material Expression Material Function Call as WITH_EDITORONLY_DATA.

  • Bug Fix: Fixed case where iterative cooking will not working properly when project has "Share Material Shader Code" option enabled.

  • Bug Fix: Shader compilation log output now correctly identifies which Material Instance is being processed.

  • Bug Fix: Fixed Material Expression Functions for External Texture support.

  • Bug Fix: Changed Material Instance Dynamic Function Copy Material Uniform Parameters and Material Instance function Copy Material Instance Parameters to do no work if passed in the same Material (preventing accidental clearing out parameters on a MID).

  • Bug Fix: Added support with SketchUp Alpha channels and Texture/Color on Opacity.

  • New: Translucency Lighting mode on Materials are now searchable via the asset registry to make finding FX with expensive Materials easier.

  • New: Added Vertex Interpolator node support for Post Process Materials.

  • New: Material Cross Product nodes are now treated as a uniform expression and can be folded with other math operations.

  • New: The Object Orientation Material node now returns a Decal projection vector when used on the 'Deferred Decal' Material Domain.

  • New: Material Attribute Get/Set nodes now append the next unused attribute to the list rather than a Default value.

  • New: Material Attribute nodes have been reordered in a few locations to give a more consistent experience.

  • New: Added a "Estimated Number of Texture Lookups" stat to Material Views, split by vertex and pixel counts.

  • New: Material Texture Sample nodes now re-use previous samples when only differing by swizzle, reducing HLSL size and compiler burden.

  • New: Improved code generated by the HLSL Translator by re-using intermediate function results where possible.

  • New: Optimized Material and Material Instance loading by trimming and caching more data at cook time.

Mobile Rendering
  • Bug Fix: Removed GL_EXT_shader_io_blocks extension requirement to run games packaged for Android ES3.1

  • Bug Fix: iOS now properly discards Depth and Stencil buffers at then end of scene rendering if those buffer are not required.

  • Bug Fix: Material 'Apply Fogging' will no longer be ignored on Mobile.

  • New: 'stat unit' on Mobile devices along with frame timings will now show number of Draw Calls and number of Drawn Primitives in a frame.

Optimizations
  • Bug Fix: Updates for HLOD visibility now take place before frustum and Occlusion Culling.

  • Bug Fix: Stopped forcing NVIDIA GPUs to use slower retained command-buffers as the mtlpp refactor provides stronger resource lifetime guarantees.

  • Bug Fix: Material Parameter Collection instances only setup when initializing a persistent world, which drastically reduces the instance creation count for levels with many Streaming sub-levels this.

  • Bug Fix: Optimized PCF 2x2 and PCF 3x3 Shadow Filtering.

  • New: Improved bounding sphere for Spotlights by making them tighter.

  • New: View frustum shadow caster culling for Point Lights and Spotlights.

  • New: Added option to Skinned Mesh Component to render it as a Static Mesh.

  • New: Instanced Static Mesh per-instance data size was reduced by 20%.

  • New: Implemented segmented shader code libraries on all platforms, with one shader code library generated for the global shaders, one for the project's Materials and then one for each DLC package that contains Materials. This allows downloading of additional shader libraries as DLC.

  • New: Merged Sky Diffuse and Reflection passes in order to save performance by reading the GBuffer and writing target Texture only once.

  • New: Added support for not flushing compute jobs on D3D11 via the Automatic Cache Flush After Compute Shader function and Flush Compute Shader Cache function.

  • New: Rewrites have been made to MetalRHI in terms of mtlpp, which is a C++ wrapper library built around Metal's Objective-C API that attempts to reduce overheads and eliminate resource lifetime errors. New: Implemented a new shader pipeline cache called Function Shader Pipeline Cache to replace the older Function Shader Cache API.

  • New: Added log to Vulkan when compiling new PSO.

  • Removed: Disabled Global Clip Plane for Post Process and UI Material Domains.

  • Removed: Removed redundant divide by w during World Space decoding from Scene Depth.

Tools

  • Bug Fix: Fixed editor preferred source code accessor parsing in the project file generator.

  • Bug Fix: Updated the Make Dile Generator.cs for CLion and added cleanup for the macro errors that result in FOO()= definitions.

  • Bug Fix: Capped the allowed number of "Waiting Packages" to avoid creating too many kernel objects in pathological load time cases.

  • New: Added "List Static Meshes" and List Skeletal Meshes Console commands.

  • New: Data for Crash Report Client is now stored in a PAK file of its own which can be found under Engine/Programs/CrashReportClient/Content/Paks/CrashReportClient.pak.

  • New: Added 'Build SCW' to the CMake build command lines for editors to match what XCode is doing on Mac.

  • New: Added a new break pad dump_syms tool to symbolicate elf files on Windows.

  • New: Added a CLion Generator for consistency.

  • New: Added code to detect the bad assumption of the project name always being UE4 and stripped that off in the CLion Source Code Accessor.

AutomationTool
  • Bug Fix: Fixed Editor targets not being rebuilt when packaging from an installed Engine build.

  • Bug Fix: Fixed a bug when building with chunk installs enabled to not generate the master manifest from each pak creation thread and instead just do it once after all pak files have been created.

  • Bug Fix: Fixed platform groups (for example, "Apple", "Microsoft", "Sony") to now included in the list of restricted folder names when staging files for a project.

  • Bug Fix: Allowed the use of PDBCOPY.EXE to be installed as part of the Windows 10 SDK to strip symbols, and add a better message if it can't be found.

  • Bug Fix: While cooking on the fly a .pak file will no longer be produced.

  • Bug Fix: Fixed incorrect console colors being restored after a warning or error on Mac or Linux.

  • New: Added a script to rewrite source files with public include paths relative to the 'Public' folder.

  • New: Added a -SeparateDebugInfo argument to Build Cook Run, which allows staging debug files to a separate output directory (for example, WindowsClientDebug).

  • New: Allow passing -Project=Foo.uproject arguments to the MegaXGE commandlet so it can be used from an installed engine build.

  • New: Added an automation script for the CryptoKeys plugin which allows the cycling of encryption and signing keys from UAT.

  • New: As a security measure, a warning will now be output when staging a project for any config files which are not whitelisted or blacklisted.

  • New: Added a Whitelist Directories list under the [Staging] category in DefaultEngine.ini, which allows specifying folders that can be staged despite having restricted folder names.

  • New: Added Record Performance automation script for running demos multiple times, gathering performance stats and plotting results on charts.

BuildGraph
  • Bug Fix: The Build Editor And Tools .xml script will no longer force copying files to a staging directory.

  • Bug Fix: When Build Graph is run with the -Preprocess=... argument, no steps will be executed.

  • Bug Fix: Fixed "copy local" files not being included in build products enumerated from C# projects.

  • Bug Fix: Added a warning message when trying to use the task without the -Submit argument being passed to UAT.

  • New: Added a element, which allows logging messages after the string is parsed (as opposed to the Log task, which logs them at runtime).

  • New: Added a -show diagnostics parameter, to have diagnostic messages output even when running with the -listonly option.

  • New: Added support for enumerating content copied by the "CsCompile" task and support for invoking methods on string properties.

  • New: When displaying an XML parse error it will nowInclude the path to the XML file.

  • New: Added support for user-defined macros, which can contain a list of BuildGraph commands to be expanded within a node. An example script is located in Engine/Build/Graph/Examples/Macros.xml.

  • Removed: Files with "Embed Interop Types" from the output list have been removed.

UnrealBuildTool
  • Bug Fix: Exceptions are no longer thrown on a background thread while caching C++ includes which caused incorrect logging. It now captures exceptions and re-throws on the Main thread.

  • Bug Fix: Allowed link time code generation on any configurations where b Allow LTCG is set to true.

  • Bug Fix: When building with the UBT it will now explicitly query the number of logical processors in the system to fix Environment.Processor Count by returning the number available to the .NET framework. For machines with > 64 cores, processors in a different processor groups will not be included in this number.

  • Bug Fix: The UBT will now always determine whether a project is a foreign project or not from the valid .uprojectdirs entries, rather than relying on the user passing -game on the command line.

  • Bug Fix: Fixed errors during incremental builds if a build contains an exported symbol change, but the build fails after the source files have been compiled but before the import library is built.

  • Bug Fix: Fixed an incremental build issue caused by force-included files not being treated as dependencies.

  • Bug Fix: Fixed issues caused by the tool chain assuming that the Editor target will be the name of the project with an "Editor" suffix. The launcher will allow you to instantiate a project with any name, and it will not rename the target files.

  • Bug Fix: Changed RPC toolchain to abort early, rather than continue to try to build even though SSH init failed.

  • Bug Fix: Fixed platforms not adding response files as dependencies, causing incremental builds to fail if input files/compile arguments change.

  • Bug Fix: Updated project file generator to support VS2017 solution options file; C# projects will no longer open by default when generating new project files.

  • Bug Fix: Fixed platforms overriding project generation.

  • Bug Fix: Fixed a build failure that occurs on the very first build after adding new files with reflected types.

  • Bug Fix: Fixed an issue where overlapping circular header dependencies would not be parsed correctly, preventing files not being rebuilt on header changes.

  • New: Warnings and errors will output when compiling module rules assembly in a way that allows them to be double-clicked in the Visual Studio output window.

  • New: Precompiled targets will now generate a separate manifest for each precompiled module. This fixes issues where object files from static libraries would not be linked into a target if a symbol in them was not referenced.

  • New: Targets may now opt-out of having public include paths added for every dependent module. This reduces the command line length when building a target. All engine modules are compiled with this enabled; games may opt into it by setting bLegacyPublicIncludePaths = false; from their .target.cs.

  • New: Unreal Build Tool now writes a log file to Engine/Programs/UnrealBuildTool/Log.txt, containing the regular console output and any reasons why actions are outdated and needed to be executed.

  • New: C# projects for unsupported platforms are now excluded when generating project files.

  • New: When building with Incredibuild, the agent executing the compile step is now shown by default.

  • New: Unreal Build Tool will now validate that targets don't modify properties that affect other targets. Warnings are output for any include paths added via a .build.cs file that do not exist.

  • New: Added a working directory setting to custom build steps.

  • New: Added a new Build Configuration .xml setting which allows setting the solution name based on the folder that it's in, making it easier to distinguish between multiple instances of Visual Studio.

  • New: The name of the UE4 solution can now be overridden on a branch-specific basis, making it easier to work with multiple open solutions at once.

  • New: Added a better error if an XML config file is corrupt.

  • New: The engine will now use the Windows 10 SDK by default, if available. Projects can be configured to use older versions, if necessary.

  • New: Added warnings whenever a module adds an include path or library path that doesn't exist.

  • New: Only output a warning message if Build Configuration .xml schema validation fails; we may have settings that only apply to code in another branch.

  • New: An "Engine Directory" property has been added to the Module Rules base class, making it easier to find paths to files under the Engine folder.

  • New: Verbose timing information from the compiler frontend is now included with the bPrintToolChainTimingInfo option enabled if using VS2017 15.7 preview 2 or later.

  • New: The UnrealBuildToolnow enumerates all Visual Studio 2017 install locations using the Visual Studio Setup interop SDK, and supports multiple simultaneous Visual Studio installations.

  • New: Additional compiler/linker arguments can now be set through properties on the TargetRules object again.

  • New: Added support for reading the local PVS-Studio settings file to the PVS toolchain.

  • New: Added a new executor for Windows which uses the Managed Process class, spawning child processes under a job object using P/Invoke to ensure that any child process is terminated if the build is canceled.

  • New: Added support for multiple debug extensions.

UnrealGameSync(UGS)
  • Bug Fix: Fixed an issue where pop-up menus can create top level windows in the taskbar.

  • Bug Fix: Fixed notification window not expanding to fit long captions.

  • Bug Fix: Pre compiled binaries no longer will not be shown as available for a change until scrolling the last submitted code change into the buffer. It now queries changes up to the last change for which zipped binaries are available.

  • Bug Fix: The application lifecycle now uses a custom application context to allow creating separate 'main' windows, and does not require any forms to be shown in order to be updating in the background. This fixed issues with scheduled syncs on background windows not activating, and window jumping to the front after auto-update.

  • Bug Fix: UnrealGameSync will now Detect if other programs are running before allowing a sync to start, show a dialog listing them, and give an option to ignore them if necessary.

  • Bug Fix: Do not create a modal dialog if a scheduled sync is unable to run because the editor is open, and do not run the editor after a scheduled sync.

  • New: Workspace sync filter categories are now able to re-enable categories that are disabled by the global filter.

  • New: UnrealGameSync Launcher now shows an error window allowing setting default P4 server settings if syncing UGS fails.

  • New: Files which are excluded by the sync filter will now be removed from the workspace when syncing. The user's config file stores a hash of the last sync filter. During syncing, if this hash doesn't not match the previous value, we enumerate all the files in the #have list and remove anything masked out by the filter.

  • New: Added an option to allow setting a tint color to be applied to the status panel, to allow identifying streams more easily.

  • New: Columns are now automatically resized when the main window is resized, and default column widths for projects that have a large number of CIS badges can be specified in the project's UnrealGameSync.ini file.

  • New: The stream name is now in tab labels by default.

  • New: Added support for a per-branch "message of the day"-style feature. Messages can be specified in a project's config file in Perforce (eg. /Build/UnrealGameSync.ini).

  • New: Added an extensible method for adding arbitrary badges to the right of the "description" column, by running a regular expression over the changelist description. New: Added an option to show changes by build machines, and move the "only show reviewed" option in there too (Options > Show Changes).

  • New: UnrealGameSync now detects Perforce login tickets expiring, and allows entering login credentials.

  • New: Added an option to prompt for arguments prompting before launching the editor.

  • New: Added a "Bisect" mode for regressing bugs between a certain range of changes.

  • New: Moved the prompt to close the editor before allowing the user to enter a changelist to sync to, when syncing to a specific changelist.

  • New: Added an error dialog when trying to clean the workspace before closing the editor.

  • New: You can now select which projects to sync on schedule. Any projects not already opened at the time the schedule is triggered will be opened first.

  • New: Added an option for syncing all projects in a branch.

  • New: Added support for masking in additional paths to be synced (eg. one or two extra projects) via the sync filter.

  • New: The "clean workspace" functionality will now detect and force-sync files that have been deleted or made writable.

  • New: You can now use a select stream dialog instead of displaying a drop list unless there's a stream filter specified. Makes it easier to find streams in large depots.

  • New: Added UI to allow creating new workspaces and selecting projects from existing workspaces that are not currently synced.

UnrealHeaderTool
  • Bug Fix: Fixed some cases where empty default values would be lost from UHT (eg, empty strings, null objects)

UnrealPak
  • New: UnrealPak now logs the size of all encrypted data

  • New: The key generator now only generates a prime table when required, not all the time

  • New: Added a parameter for compression block size with -compressionblocksize=XXXX. Accepts arguments with MB/KB suffixes, as well as byte counts.

  • New: Added support for custom compressors implemented via modular features.

  • New: Added an -overrideplatformcompressor argument that allows selecting compressor without using the default platform implementation.

  • New: Added an option that allows rebuilding a set of PAK files with different settings.

UI

  • Bug Fix: Using scroll into view now selects the item being brought into view.

  • Bug Fix: Fixed improper scaling for on-screen debug messages, causing them to be hidden.

  • Bug Fix: Fixed Common Popup Menu staying on top of Activatable Panel stack even if the Popup Menu has been closed.

  • Bug Fix: Set Common Text Block's inner Text Block to Self Hit Test Invisible when a scroll style is applied.

  • Bug Fix: Fixed monochromatic font rendering:

    • All non-8bpp images are now converted to 8bpp images for processing in Slate.

    • We convert the gray color of any images not using 256 grays (for example, monochromatic images that use 2 grays).

    • Added a CVar "Slate.EnableFontAntiAliasing" to control whether you want anti-aliased (256 grayscale) rendering (default), or monochromatic (2 grayscale) rendering.

  • Bug Fix: Fixed Canvas Safe Zone offset.

  • Bug Fix: Hid the controller input on the Storm Shield check mark box.

  • Bug Fix: Fixed list views not wrapping properly in some cases.

  • New: Added an event to Common List View for when an item has finished scrolling into view.

  • New: Added support for TTC/OTC fonts:

    • These can be used via a sub-face index on FFontData, which can be set via a new combo in the Font Editor.

    • You can also see the cached list of sub-faces within a font file from the Font Face asset.

  • New: Added "Allow Engine Tick" option to Loading Screen Attributes used when starting a loading screen movie.

    • If set, it will run the main engine tick while waiting for a manually disabled loading screen to finish displaying. This enables latent actions such as level streaming to complete before stopping the load movie, but is disabled by default as it may not be safe for every game.

Slate
  • Crash Fix: Fixed a crash when Object Table is null.

  • New: Added "Show Only Keyable" and "Show Only Animated" to the Filter list in the property editor.

  • New: The Slate Tree View is now able to show wires that clarify the parent-child. relationship of the items in the tree. It has been enabled in the Widget Reflector.

  • New: Line and Spline rendering changes:

    • Lines/Splines now use 1 UV channel to anti-alias. The channel can be used for texturing.

    • Anti-aliasing filter will now be adjusted based on resolution.

    • Modified Line/Spline topology to accommodate new UV requirements.

    • Disabled vertex snapping for anti-aliased lines/splines; previously vertices were snapped, but vertex positions did not affect line rendering leaving the behavior effectively unchanged.

    • Splines now adaptively subdivide to avoid certain edge-cases.

  • New: Added a way to defer Slate retainer widget render target updates until the end of Slate draw. This avoids the extra copy operations that result from switching render targets in the middle of the frame. This feature is controlled by the "Slate.DeferRetainedRenderingRenderThread" variable. Note that UI updates will render more quickly, but will show one frame later, if this feature is used. By default, this feature is enabled only on mobile devices.

UMG
  • Crash Fix: Fixed a crash on adding an "On Clicked" event to a button in Widget BP.

  • Bug Fix: In the UMG editor it will now indicate the name of the property that is not bound.

  • Bug Fix: Fixed template finish not getting called on stop. This fixes a bug where sections aren't restored when finished.

  • Bug Fix: Refresh the widget preview even if the dragged widgets are dropped in an invalid location.

  • Bug Fix: UMG evaluation will now properly finish on stop.

  • Bug Fix: Fixed incomplete state when undoing after deleting user widgets from the widget tree.

  • Bug Fix: Widgets will not be removed from parent when they are pending garbage collection/

  • Bug Fix: Replacing widgets should now also clear out references to the widget.

  • Bug Fix: Reordering will now correctly handled by a undo, and will no longer cause a "ghost" widget to also be part of the tree.

  • Bug Fix: Animating a Slate Brush's material will now invalidate the cached widget's layout and volatility when setting MIDs.

  • New: Added right-click functionality to replace the object reference of a track with a different object in UMG Sequencer.

  • New: Added support for 2D transform mask (translation, rotation, scale, shear).

  • New: Improved copy/paste behavior for UMG editor:

    • Pasting in the Designer while a canvas is selected will place the new widget under the cursor.

    • Pasting multiple times while a canvas panel is selected in the hierarchy view will cascade the widgets starting at 0,0.

    • Pasting while something that isn't a panel is selected is now allowed, and will cascade the pasted widgets off the position of the selected widget (as siblings).

    • Newly pasted widgets will now be selected automatically.

    • Pasting multiple widgets at once will try and maintain their relative positions if they're being pasted into a canvas panel.

  • New: Added a function to Scroll Box to determine what fraction of the window we're displaying.

  • Removed: Removed legacy uses of Get Editor Icon from UMG.

  • New: UserWidgets have a new setting to determine how the Widget will tick. By default, this will be set to "Auto", meaning Widgets will turn ticking on only in the following cases:

    • A latent action (such as Delay nodes) is triggered.

    • An animation was triggered.

    • A script implements the Tick event.

    • A native tick is assumed to exist (meaning the Widget lacks "DisableNativeTick" metadata).

  • New: Added a new way to audit the tickability of a Widget with three Asset-Registry-searchable properties.

XR

  • Crash Fix: Fixed a crash when setting screen percentage to less than 100 in VR preview.

  • Bug Fix: Fixed a bug with Motion Controller Components not properly overriding the display model's material. XRAsset API now handles asynchronous resource loading.

  • Bug Fix: Fixed SteamVR headset detection on platforms with more than one GPU.

  • Bug Fix: VR preview now works with dedicated server mode in the editor.

  • Bug Fix: Fixed late update floating point precision issues when far from the origin.

  • Bug Fix: Improved tracking latency on Oculus. Cached poses are now updated at the end of the frame.

  • Bug Fix: Fixed an issue where aliased textures were mistakenly deleted by OpenGL.

  • Bug Fix: Morpheus HMD "World To Meters Scale" now updates camera offset scale in "On Start Game Frame."

  • Bug Fix: Fixed a bug that caused a crash when using SteamVR motion controller models.

  • Bug Fix: Fixed a bug that caused a slow down in reallocating render targets when using reflection captures in VR.

  • Bug Fix: Fixed a bug that caused world locked stereo layers to drift on Oculus when using an explicit camera component.

  • Bug Fix: Fixed a issue where the Oculus controller models wouldn't show up in cooked builds when using the motion controller's display model property.

  • Bug Fix: Fixed a crash that occurred when building lighting in VR.

  • New: Added a label to the VR spectator screen render call so it is distinguishable in profiling tools, such as RenderDoc.

  • New: Added the ability for Motion Controller components to track/display HMD devices by using "HMD" as the source name.

  • New: Added experimental support for lens calibration on MR projects using OpenCV.

  • New: Updated SteamVR SDK to version 1.0.11, this includes improved Vulkan support.

  • New: Improved SteamVR compositor timing and overall engine performance through more accurate CPU utilization data.

  • New: Added Render Bridge base class, FXRRenderBridge, to reduce code duplication when creating an XR Plugin with a Custom Present implementation.

  • New: Added initial support for omni-directional stereo captures.

  • New: Made Oculus code-scheduling functions available for use by other XR Plugins through the "Head Mounted Display" module.

  • New: Added virtual curves for head rotation from FaceAR's face tracking LiveLink streaming.

  • New: Added support for instanced stereo translucent rendering.

  • New: Added support for enabling the ARKit 1.5 auto-focus setting.

  • New: Added checks for ARKit 1.0 availability when creating the AR session, preventing calls to invalid selectors on older iOS devices.

  • New: Added functions for checking ARKit version availability at runtime.

  • New: Refactored how ARKit supports #define, simplifying wrapping individual features by ARKit version.

  • New: Added a console command to change where Face AR is publishing LiveLink curve data. "LiveLinkFaceAR SendTo=192.168.1.1".

  • New: Wrapped vertical plane detection in an "if iOS 11.3" check, since ARKit 1.5 is only available in 11.3 and later.

  • New: Added orientation to the "AR Candidate Image" object for passing to the detection system.

  • New: Added support for handling "AR Image Anchor" notifications from ARKit.

  • New: Added a friendly name to UARCandidateImage objects.

  • New: Added base types for detecting images in an AR session.

  • New: Added the name from the candidate image when creating the Apple side representation.

  • New: Added support for configuring which images to detect during an AR session.

  • New: Improved debug layer rendering on Oculus, circumventing a superfluous blit by rendering directly to the layer.

  • New: Added models to the Oculus plugin for HMD and Sensors.

  • New: Added "Use Camera Rotation" feature to "Stereo Panorama" Plugin. Now this plugin can take the current camera's rotation. To enable this feature, use the console command "SP.UseCameraRotation 7".

  • New: Updated Camera Component can now tell the "Late Update Manager" to store that we don't want to do a late update this frame. Default XR Camera checks this flag before applying the late update to the camera.

  • New: Refactored PSVR Minor reprojection for Frame Counter comparison.

  • New: Added a new PSVR API function for getting a transform between "floor" and "eye" tracking spaces.

  • New: Added a new PSVR delegate that can detect when an app changes between "floor" and "eye" tracking space.

  • Removed: Unused Stereo Rendering function "Get Custom Present" method has been removed.

Programming

  • Crash Fix: Fixed crash in FBX Scene Importer caused by user importing a FBX LOD group with no geometry under it.

  • Bug Fix: Fixed issue where FBX Importer used the incorrect owner when creating asset import data.

  • Bug Fix: Fixed FBX Static Mesh re-import to properly match names between the existing data and the incoming FBX file.

  • Bug Fix: Fixed import socket logic for Static Meshes to prevent it from duplicating sockets when re-importing.

  • Bug Fix: Fixed issue where FBX Importer's Global Transform options were not persisting in config file.

  • Bug Fix: Fixed SColorGradingPicker, which were preventing PIE sessions from working.

  • Bug Fix: Removed external profiling support from shipping builds to fix an issue that caused DLL queries for external profiles at start-up to fail.

  • Bug Fix: Changed FPlatformTime::Seconds(), FPlatformTime::Cycles(), and FPlatformTime::Cycles64() on Android to use CLOCK_MONOTONIC instead of system time-of-day clock.

  • New: Consolidated codepaths for embedding version information in the Engine.

    • Engine/Build/Build.version is now the authoritative place to configure version information.

    • Engine/Source/Runtime/Launch/Resources/Version.h no longer includes macros for the current branch and changelist.

    • These settings are compiled into the BuildSettings module at runtime rather than being exposed as global macros.

    • Licensee builds of the Engine are now automatically detected, no longer needing to be manually configured.

  • New: Added FBX Re-Import Resolve Material windows, enabling users to manually resolve materials if the importer failed to find a match with existing materials.

  • New: Added Visual C++ 2017 redist files to AppLocalDependencies.

  • New: Updated prereq installer to include Visual C++ 2017 support DLLs.

  • New: Added base include paths relative to the "Public" directory in Engine source files to reduce the number of public include paths needed for Engine modules.

  • New: Added rd_route v1.1.1 to provide macOS function interposition, which can be used for debugging.

  • New: Enabled undefined identifiers in conditional preprocessor expressions (by default).

  • New: Exposed Consolidate function through EditorAssetLibrary.

  • New: Added new Ray/Plane intersection function, named FMath::RayPlaneIntersection(), to Unreal Math library.

  • New: Exported Mobile Patching Library API so it can be used by Plugins.

  • New: Exported World Browser API so it can be used by Plugins.

UPGRADE NOTES

Animation

Control Rig
  • Removed: Control Rig has been completely redone and the previous BaseHuman has been removed and will not work anymore. If you wish to still use the previous Control Rig, this build will break it.

Core

  • Bug Fix: Fixed archive serialization issues for archives larger than 4 GB.

  • Bug Fix: UnrealHeaderTool now reports an error if a ufunction is used to mark up a function in a subclass where a ufunction of the same name already exists in the parent class, even if they have the same signature and markup data. To handle this situation:

    • For virtual functions, remove the UFUNCTION tag.

    • For blueprint implementable events, remove it entirely from the subclass. The parent class definition is adequate.

    • For blueprint native events and rep notifies, remove the UFUNCTION tag and instead simply define the "Implementation" or "Verify" virtual overrides as needed.

    • Any non-virtual cases that were essentially allowing parameter overloading for functions in blueprints we recommend renaming the functions and redirecting to new locations using CoreRedirects. At the very least, the base class version must be renamed, since the Engine will find that instead of your CoreRedirect.

Gameplay Framework

  • Projects making use of gesture bindings will need to enable the gesture recognizer in the project's input settings.

  • Direct access to UWorld::StreamingLevels, CurrentLevelPendingVisibility, CurrentLevelPendingInvisibility, bShouldForceUnloadStreamingLevels, and bShouldForceVisibleStreamingLevels, as well as most members of ULevelStreaming is no longer available. Instead, developers should use the appropriate get/set functions.

  • Projects that were calling SetToDefaults to make sure that their overridden implementation was called may want to remove their calls to avoid duplicated work. If your project overrides SetToDefaults and gives it side effects or introduces a dependency on the order of operations, this change may force you to change that.

Online

  • If you need to disable accepting compressed content, this is typically done on the webserver. The webserver should not be compressing images, since they are already compressed. If you need to prevent your game from ever accepting compressed HTTP content, this can be done with the .ini setting AcceptCompressedContent.

  • There has been a data format change to the UserAgent string. If you have backend code identifying HTTP calls from the game based on the UserAgent string, it will need to be updated.

  • Added pure virtual GetType() to FUniqueNetId, implemented in all subsystems that use their own subclass of FUniqueNetId or FUniqueNetIdString.

    • Created concrete types for all subsystems that were previously relying on a generic FUniqueNetIdString for their UniquePlayerIds, replaced all usages in their respective OnlineSubsystems with new type.

    • FUniqueNetIdString now contains a "Type" member variable that can be set at construct time to denote which OnlineSubsystem is required to properly interpret/instantiate that type.

Platforms

XBox One
  • You may now specify an optional DebugStackSizeOverride value in your XBox One target settings in the editor.

Rendering

  • Meshes might have to be re-imported to get precision of tangents and normals back to where they were. Unfortunately the old serialized data only stored the already compressed values and realigning them (to allow zero as value) might cause jitters and imprecision, re-importing should fix those issues.

  • Bug Fix: Fixed crash when using FreezeRendering in non editor builds.

  • Bug Fix: Fixed quad overdraw viewmode contents remaining on screen after switching to certain other viewmodes (such as light overlap or complexity).

  • Bug Fix: Enabling Forward Shading rather than the Mobile renderer on iOS now requires an Apple A9 or later iOS device.

FX
  • Bug Fix: Fixed motion blur vectors on sprite particles.

  • Bug Fix: Fixed particle shadow, when using material with depth fade.

Lighting
  • Bug Fix: Fixed white thumbnails bug when mobile preview is enabled.

Tools

UnrealBuildTool
  • Errors and warnings from UnrealBuildTool are now output in a format that allows them to be double-clicked in the Visual Studio output window.

PROGRAMMING UPGRADE NOTES

AI

  • New: Most Navigation System-related code has been moved out of the Engine code and into a new Navigation System Module. Game-specific code using navigation system functionality might need to be updated.

    • Include statements need to be updated (the removal of the AI/Navigation part of the header files path should be sufficient).

    • NavigationSystem class has been renamed to UNavigationSystemV1.

    • Navigation-related entries in DefaultEngine.ini and DefaultGame.ini need to be updated manually.

    • NavigationSystem code being removed from the Engine module means you will have to add NavigationSystem module to your project's dependencies.

    • World->GetNavigationSystem was renamed to FNavigationSystem:::GetCurrent

    • GetMainNavData was replaced by GetDefaultNavDataInstance

    • This Python (3.5) script parses game's sources and points at lines that need updating.

      • Optionally, the script can perform the changes but make sure to use this option with caution and assisted by a version control system.

      • Script options can be found at the top of the file.

Animation

  • Bug Fix: Removed unused CopySkinnedModelData function.

Animation Blueprints
  • Exposed types on SkeletalControlBase to allow creation of derived classes.

  • Added support for creating sub-classes of FAnimNode_StateMachine outside Engine module.

  • Allowed UAnimNotify_PlayMontageNotify to be inherited by other modules.

  • Bug Fix: Fixed sub-classes of FAnimNode_SkeletalControlBase not having deprecated CacheBones called.

Skeletal Mesh
  • Bug Fix: Removed unused RigidInfluenceIndex from CPU skinning code.

  • SkeletalMesh.LODInfo is also now private. You can use a function to add/remove LOD Setting, which ensures the correct setting is set when adding a new LOD.

Blueprints

  • If you have a default implementation of a BlueprintNativeEvent's required _Implementation() method inside of an interface class, the default implementation must now be removed from the interface class.

  • Removed FUnloadedClassDragDropOp as it was only used by the class viewer and had several issues. Any uses should be switched to use FAssetDragDrop instead.

Core

  • Logging calls like UE_LOG() or GLog->Logf() will no longer compile if the formatting string is not a string literal. These should be updated.

  • Direct access to FArchive members ArIsTextFormat, ArWantBinaryPropertySerialization, ArForceUnicode, ArIsPersistent, ArIsSaving, ArIsTransacting, ArLicenseeUE4Ver, ArEngineVer, ArEngineNetVer and ArGameNetVer should be replaced by their IsTextFormat(), WantBinaryPropertySerialization() etc. member functions.

  • Added a value of Unkown to FCoreDelegates::ETemperatureSeverity enum (and mirrored ETemperatureSeverityType). This adjusts the integral values of each enum to ensure Unknown == 0.

  • Bug Fix: StringToBytes() used to return a value one less than it should have. This has now been fixed, so if this error was being compensated for at the call site, the call should be updated.

  • Renamed confusing argument in LineBoxIntersection function

Editor

  • Crash Fix: Fix for crash when using macOS clipboard string copy commands.

  • Bug Fix: macOS Play In Editor performance fix when key / mouse up event occurs.

Scripting
  • Deprecated ExportToFileEx(), use newly created UAssetExportTask with RunAssetExportTask() instead of FExportToFileParams.

Sequencer
  • All movie scene channel types must now implement FMovieSceneChannel.

Gameplay Framework

  • Renamed the EReplicationMode enum used in AbilitySystemComponent to EGameplayEffectReplicationMode as the old name was misleading and too general for global scope. Also fixed several typos on function and variable names used in the ability system.

  • Deprecated FSavedMove_Character::MovementMode in favor of StartPackedMovementMode and EndPackedMovementMode, so they are more explicit (about being packed modes) and capture the state separately at the start and end of the move.

Localization

  • FInternationalization::GetCulturesWithAvailableLocalization was deprecated as it would only provide cultures that used LocRes files (ignoring additional localization text sources). This should be replaced with a call to FTextLocalizationManager::GetLocalizedCultureNames, and an optional call to FInternationalization::GetAvailableCultures if you need culture pointers (rather than just their names).

Networking

Replays
  • FRepLayout::DiffProperties now takes an enum flag type instead of a bool as its last parameter.

Online

  • See CurlHttpManager.cpp for more information on the AcceptCompressedContent INI setting. Also see CurlHttp.cpp where the curl option CURLOPT_ACCEPT_ENCODING is set to support curl's default encodings.

  • The UserAgent is set in FGenericPlatformHttp::GetDefaultUserAgent.

  • FUniqueNetIdString::FUniqueNetIdString(String) style constructors will likely be hidden soon to enforce usage of Type across the game.

  • Calls to IXmppChat::SendChat and IXmppMessages::SendMessage will need to be updated.

  • Bug Fix: Please note that Steam leaderboards no longer automatically increment variables (its original behavior was a bug). As such the new behavior follows that of other platforms.

  • Bug Fix: The dedicated server fix introduces a new launch argument ("-force_steamclient_link") that can be used to force the steamclient link for dedicated server projects that require it.

Physics

Rigid Bodies
  • Added ENGINE_API to UPhysicsHandleComponent so it can be sub-classed.

  • Removed unnecessary InitialLinearVelocity vector from BodyInstance (reduces PrimitiveComponent size by 12 bytes).

  • Bug Fix: Threading is no longer used for PhysX if ShouldUseThreadingForPerformance is false.

Rendering

  • Bug Fix: Changed texture streaming to not use background task when FApp::ShouldUseThreadingForPerformance is false.

UI

Slate
  • While ITableRow was never intended as a public-facing interface, some advanced programmers may have chosen to implement it. Two additional methods were added to the interface, so any code implementing ITableRow will have to add an implementation for these methods. Sample implementations can be found in STableRow.h.

XR

  • If you maintain an XR plugin that implements IStereoRendering::GetCustomPresent, it should be removed.

  • If you maintain a XR plugin implementation, please review the new FXRRenderBridge base class if your module needs to provide a custom present implementation.

DEPRECATIONS

Animation

  • Removed: BaseHuman has been removed and will not work anymore.

Blueprints

  • Deprecated BlutilityActor & DatasmithBlutilityActor in favor of PlacedEditorUtilityBase. Existing data will migrate to PlacedEditorUtilityBase. PlacedEditorUtilityBase should be used for Blutility base class.

Core

  • Deprecated Lex namespace and converted all existing methods to Lex- prefixed functions instead. This avoids issues with using the Lex namespace generically in the presence of 2-phase template instantiating compilers like clang.

  • Passing anything other than a literal string to ensureMsgf() as its format string has now been deprecated. Please ensure formatting strings are always string literals.

  • De-virtualized from FArchive::IsSaveGame() and FArchive::IsFilterEditorOnly(). Please ensure that your custom archives do not try to override these functions.

  • Passing anything other than a literal string to FString::Printf() as its format string has now been deprecated. Please ensure formatting strings are always string literals.

Gameplay Framework

  • FInputActionBinding::ActionName is now private. Direct setting after construction is no longer permitted, access to read the name can be done via GetActionName accessor.

Physics

Rigid Bodies
  • Removed unused PhysX serialization support.

Programming

  • Removed welded vertices option from the FBX exporter dialog. The vertices are always welded.

  • Deprecated FindOverlappingCorners() storing data as TMultiMap, replaced with struct FOverlappingCorners. New container is optimized for better performance and memory usage.

  • Removed experimental "SubD Surface" feature. This feature was never completed, and will be superseded by Editable Mesh in a future release.

  • Merge plugin AssetScriptingUtilititesEditor with plugin EditorScriptingUtilities. Existing data will be migrated.

Tools

  • Removed old, invalid Niagara Collision Bounce module. Please have your Niagara Emitters and Systems use the Collision Linear Impulse module.

BuildGraph
  • UnrealFrontend is no longer included in the BuildEditorAndTools.xml script. This functionality is available through the editor, and is rarely required in standalone.

UnrealBuildTool
  • The explicit construction of RuntimeDependency objects from .build.cs files is now deprecated. The path string can be added to the list of runtime dependencies instead.