언리얼 엔진 4.27 출시 노트

언리얼 엔진 4.27의 신규 및 업데이트된 기능 개요입니다.

Windows
MacOS
Linux

새 소식

언리얼 엔진 4.27에 모든 크리에이터를 위한 기능과 업데이트가 추가되었습니다. 여기에는 버추얼 프로덕션에서 제작에 바로 사용할 수 있는 정식 버전 기능 세트와 AEC 및 제조 업계의 사용자 위한 신규 추가 기능을 제공하여, 언리얼 엔진의 기술적 우위를 이어나갈 것입니다. 또한, 업무 수행에 필요한 툴과 워크플로를 제공합니다.

GPU 라이트매스의 고속 베이킹으로 라이팅 및 레이아웃 변경을 같은 날에 처리할 수 있으며, 멀티 GPU 지원 덕분에 인카메라 VFX를 위한 광각 카메라 촬영과 듀얼 카메라 동시 촬영이 가능합니다. 제작에 바로 사용할 수 있는 픽셀 스트리밍을 통해 사용자는 창의력을 더 발휘하고, 언리얼 엔진을 다양한 방식으로 사용할 수 있습니다. 이와 더불어, RAD 게임 툴이 에픽게임즈에 합류해 이제 모든 언리얼 엔진 개발자가 우들 컴프레션 세트(Oodle Compression Suite)와 빙크 비디오(Bink Video)를 사용할 수 있습니다.

언리얼 엔진 4.27은 내년에 출시되는 UE5와 호환될 예정입니다!

언리얼 엔진 4.27은 UE5 얼리 액세스와 호환되지 않습니다.

이번 버전에는 놀라운 언리얼 엔진 개발자 커뮤니티, GitHub에서 제출한 개선 사항이 포함되어 있습니다! 언리얼 엔진 4.27에 기여해 주신 모든 분께 감사드립니다.

AlbinBernhardssonARM, Alexandr Kondratenko, author evolution, ayumax, bailehang, colinpy, Collabora, Dave Merriman, dendnk, dev (bovesan.com), drichardson, Evan Hart, frals, HSeo, fieldsJacksonG (Microsoft), igor-kondratiev, JDCruise, Josef-CL, kidsmurf2000, kihl, kristjanvalur, KristofMorva, liang47009, Marc Olano, MarcusH(Yager), MattHesseling, Microsoft, moppius, neste, NexusEast, PanagiotisChristopoulosCharitos-ARM, Punlord, Remi.Palandri, rlabrecque, Robmaister, Sergey Budaretski, shovaen, Skylonxe, stefan-zimecki, thejinchao, tinyogre, triboud, Ultrahead, Wang Hao, wrflemin, X-Stuff, Xiang.Wei (Oculus), yuriy.odonnell, ZeroEightSix

버추얼 프로덕션

시각적 nDisplay 환경설정 및 향상된 워크플로

이번 출시는 인카메라 VFX와 같은 수많은 워크플로의 주축인 nDisplay 클러스터를 세팅하고 구동하는 사용자 경험을 향상하는 데 집중했습니다. 그 일환으로 에디터 내 3D nDisplay 환경설정 에디터부터 추가하여 nDisplay 시스템을 세팅할 수 있습니다. 신규 nDisplay 루트 액터 가 nDisplay와 관련된 모든 기능과 세팅을 하나의 UAsset으로 통합해 보다 원활한 프로덕션 작업과 반복적인 셋업이 가능합니다.

4.27에서 nDisplay를 시작하는 방법은 다음과 같습니다.

  1. 언리얼 에디터에서 새 nDisplay 루트 액터를 생성합니다

  2. nDisplay 3D 환경설정 에디터(nDisplay 3D Config Editor)에서 nDisplay 루트 액터를 환경설정합니다

  3. 루트 액터를 레벨 뷰포트로 드래그해 프로젝트 콘텐츠를 클러스터의 원근 뷰로 미리 봅니다

  4. 스위치보드(Switchboard)를 통해 물리적인 nDisplay 세팅에서 프로젝트를 실행합니다

nDisplay 네트워크를 생성하려면 엔진 밖에서 환경설정 텍스트 파일을 수정해야 하던 이전 메서드를 대체하는 신규 워크플로입니다. 기존에 생성된 .cfg 및 JSON 환경설정 파일을 임포트하여 새로운 UAsset 형식으로 변환할 수 있습니다.

향상된 nDisplay의 mGPU 지원(베타)

4.27의 mGPU 지원은 사용자에게 다수의 카메라를 동시에 사용거나, 광곽 렌즈 지원을 위한 더 큰 프러스텀 사용을 가능하게 하고, 또 하드웨어를 보다 효율적이고 균형있게 배포할 수 있도록 합니다. 이제 GPU는 내부 프러스텀 전용으로 사용할 수 있어 보다 복잡한 콘텐츠를 디스플레이하는 것이 가능합니다. 다수의 카메라를 사용할 때, mGPU 기술은 다수의 카메라 세팅과 운용을 위한 워크플로의 지원을 받습니다.

nDisplay 오버스캔(실험단계)

오버스캔을 통해 여러 nDisplay 렌더 노드 간의 일관성을 유지해 블룸, 앰비언트 오클루전, 모션 블러 등 시각적으로 강렬한 포스트 프로세싱 효과를 줄 수 있습니다. 오버스캔은 퍼포먼스 비용이 들지만 사용자는 시각적 정확도 VS 성능 비율을 결정할 수 있습니다.

이 기능은 간단한 화면 및 투영 정책에서 작동하지만, 메시와 같은 고급 정책은 현재 지원되지 않습니다.

nDisplay의 Linux 지원(실험단계)

nDisplay 및 nDisplay 툴 생태계에 Linux 예비 지원을 추가했습니다. Linux 지원 여부는 그래픽 카드 드라이버에 따라 결정되며 레이 트레이싱이나 Vulkan 같은 일부 렌더링 기능은 현재 지원되지 않습니다.

image alt text

nDisplay 동기화

4.25 및 4.26 출시에서 작업한 내용을 바탕으로 Sync Policy #2의 퍼포먼스와 사용성을 향상했습니다. 향상된 사항은 다음과 같습니다:

  • NVIDIA 드라이버 461.72 이상에서 논블로킹 프레젠트(non-blocking present)를 지원합니다

  • 내부 동기화 렌더 스레드 배리어 관리가 개선되어 크래시 및 타이밍 문제가 수정되었습니다

  • 디버깅을 돕기 위해 CVar를 노출했습니다

nDisplay에서 OpenColorIO 지원

UE 렌더링, LED 프로세서, LED 패널 그리고 최종적으로 프로덕션 카메라의 조합은 복잡한 시나리오를 반복 가능하고 정확한 컬러 워크플로로 동작하게 합니다. 따라서 저희는 정확한 색상 보정을 통해 언리얼 엔진을 이용한 콘텐츠 제작과 실제 카메라의 LED 볼륨 화면이 연결될 수 있도록 nDisplay에 OpenColorIO 지원을 추가했습니다. 이를 통해 콘텐츠 아티스트와 촬영감독이 최종 캡처 이미지의 동일한 레퍼런스를 참고하여 협업할 수 있습니다.

image alt text

리모트 컨트롤 워크플로와 향상된 API의 보다 쉬운 세팅 및 활용 (베타)

image alt text

터치로 제어 가능한 디바이스로 구동되는, 엄선된 컨트롤 세트를 통해 더 많은 작업자들이 라이브 프로덕션 환경에서 언리얼 엔진과 상호작용할 수 있습니다. 전보다 쉬어진 세팅 과정을 통해 더 많은 프로퍼티와 함수를 제어하고 적절하게 리플리케이트할 수 있도록 여러 사항이 향상되었습니다.

이제 리모트 컨트롤 프리셋이 다음을 지원합니다.

  • 프로퍼티별 메타데이터

  • 프로퍼티 재지정을 통해 여러 레벨에서 동일한 프리셋 사용 가능

  • 커스텀 이벤트 노출 기능

  • 액터 함수

  • WebSocket에서 섬네일 미리 보기

  • nDisplay에서 리모트 컨트롤 리플리케이션

리모트 컨트롤 웹 애플리케이션용 UI 빌더 및 향상된 UX

새로운 드래그 앤 드롭 인터페이스를 이용하면 코드 없이도 복잡한 웹 위젯을 빠르게 빌드할 수 있습니다. 위젯 인터페이스도 개편하면서 다음과 같은 버추얼 프로덕션 시나리오에 집중한 위젯 타입을 추가했습니다.

  • 스테이지 위치

  • 벽 색상 보정

  • 라이트 카드

  • 레벨 스냅샷

  • 시퀀서

  • 그린 스크린

image alt text

DMX, OSC, MIDI용 원격 제어 플러그인

언리얼 엔진의 리모트 컨트롤 시스템에서 DMX , OSC , MIDI 등 기존 라이브 쇼 프로토콜을 이용할 수 있습니다.

리모트 컨트롤 C++ API

리모트 컨트롤 시스템에 C++ API가 추가되어 엔진에 원격으로 액세스하고 제어할 수 있는 방법이 다양해졌습니다. 이전에는 리모트 컨트롤의 HTTP 및 WebSocket API를 사용하는 웹 애플리케이션을 통해서만 엔진의 프로퍼티에 액세스할 수 있었습니다. 이제 C++ API로 엔진을 제어하거나 외부 데스크톱 애플리케이션에서 노출된 리모트 컨트롤 프로퍼티를 사용할 수 있습니다.

레벨 베리에이션 관리를 위한 레벨 스냅샷 도입 (베타)

라이브 프로덕션 그리고 더 나아가 인카메라 VFX는 매 시나리오에 따라서 공통으로 사용되는 레벨에 작은 변경사항들이 종종 요구됩니다. 이러한 작업은 데이터 랭글링의 문제를 발생시켜 무대 작업의 속도를 늦출 수 있습니다. 레벨 스냅샷을 통해 프로젝트 또는 소스 관리를 영구적으로 변경하지 않도록 레벨의 현재 상태를 스냅샷으로 기록할 수 있습니다. 이후에 해당 스냅샷에서 어떤 요소를 복원할지 선택하여 레벨을 업데이트할 수 있습니다. 이 툴은 특히 인카메라 VFX 촬영에 참여하는 무대 작업자들에게 유용합니다. '테이크 6로 돌아가서 저기 다섯 그루를 제외한 나무를 전부 옮기세요'처럼 복잡한 영화 제작자의 복원 요청도 쉽게 처리할 수 있기 때문입니다. 또한, 크리에이티브의 승인을 위해 다양한 시나리오를 선보여야 하는 아티스트들에게도 유용한 툴입니다.

image alt text

확장된 버추얼 카메라 시스템

버추얼 스카우팅이나 유기적인 카메라 무빙 기록 등에 사용된 언리얼 엔진 4.26에 도입한 신규 버추얼 카메라 시스템이 이제 정식 버전으로 제공됩니다.

버추얼 카메라 시스템은 다음을 포함합니다.

  • 에디터에서 멀티 유저 지원

  • 재설계된 사용자 경험

  • 버추얼 카메라 개발용 확장 가능 코어 아키텍처

  • 버추얼 카메라의 출력을 컴포셔, 미디어 프레임워크, 에디터 뷰포트 및 언리얼 리모트 앱을 실행하는 모든 디바이스로 보낼 수 있는 기능

  • 커스텀 UMG 컨트롤을 출력에 오버레이하고, 에디터나 디바이스에서 상호작용할 수 있는 기능

  • 터치스크린과 더불어 컨트롤러 및 기타 하드웨어 입력을 위한 지원 기능 내장

  • 필터링, 트래킹, 자동 포커스 등 커스텀 이펙트로 카메라 데이터를 조작할 수 있는 모디파이어 시스템

  • 라이브 링크로 연결된 모든 커스텀 트래킹 시스템으로 전환할 수 있는 기능

  • 카메라 오퍼레이터를 지원하는 데스크톱 오퍼레이터 패널

신규 버추얼 카메라 iOS 앱

버추얼 카메라 기능 전용 신규 iOS 앱 라이브 링크 VCAM(Live Link VCAM) 이 곧 출시될 예정입니다. 이 앱을 통해 언리얼 리모트 앱보다 더욱 맞춤화된 사용자 경험을 제공합니다.image alt text

향상된 USD를 통해 향상된 언리얼 파이프라인 지원

USD(Universal Scene Description) 포맷은 미디어 및 엔터테인먼트 업계에서 지속적으로 큰 인기를 끌고 있습니다. 이번 버전에는 보다 심도있는 파이프라인 통합이 가능하도록 추가 익스포트 옵션에 중점을 둔 여러 가지 사항이 향상되었습니다. 또한 언리얼 엔진 4.27은 런타임에서 멀티 유저 편집 및 추가 옵션도 지원합니다.

image alt text

USD 익스포트 개선 사항

USD 씬 익스포터가 확장되어 다음 신규 옵션을 포함합니다.

  • USD 스테이지 에디터에서 USD 어트리뷰트 편집: 이제 USD 스테이지 에디터의 디테일 패널에서 대부분의 USD 어트리뷰트를 직접 편집할 수 있습니다.

  • 레벨 및 서브레벨을 USD로 익스포트: 언리얼에 로드된 레벨을 선택하여 주요 USD 파일로 익스포트할 수 있습니다. 레벨의 스태틱 메시, 스켈레탈 메시, 라이트, 폴리지, 랜드스케이프 같은 서브레벨이나 에셋은 주요 파일이 참조하는 별도의 USD 파일로 익스포트됩니다.

  • 애니메이션 시퀀스를 USD로 익스포트: 애니메이션 시퀀스를 여러 USD 파일 형식으로 익스포트할 수 있습니다. 신규 익스포트 액션은 애니메이션 프리뷰 메시와 애니메이션을 모두 익스포트하고 바인딩합니다. 모든 본 트랙과 블렌드 셰이프 트랙이 포함됩니다.

  • 텍스처 베이킹 및 머티리얼 익스포트: 텍스처가 있는 머티리얼은 베이킹으로 압축하여 레벨과 함께 익스포트할 수 있습니다. 이러한 머티리얼은 USD 지원을 제공하는 다른 애플리케이션에서 읽을 수 있습니다.

USD 임포터 개선 사항

이제 USD 스테이지를 임포트할 때 애니메이션 트랙이 다른 에셋과 함께 콘텐츠 브라우저로 임포트됩니다. 이러한 워크플로는 디스크에 모든 에셋을 uAsset으로 변환하는 FBX와 동일한 방식을 사용하며 완전한 언리얼 워크플로 세트를 가능하게 합니다.

다이렉트 USD 워크플로 및 씬 캐시

USD 스테이지 액터(USD Stage Actor)를 통해 언리얼 내에서 USD 씬을 로드할 수 있습니다. 이 정보는 USD 정보로 보관되며 편집 레이어로 수정하고 USD로 다시 저장할 수 있습니다. USD 에셋은 메모리에 uAsset으로 변환되고 캐시가 저장되어 후속 작업 세션에서 더욱 빨라진 속도로 로드할 수 있습니다. USD 데이터가 언리얼을 거친 후 USD를 지원하는 다른 DCC에서 작업을 이어가는 경우에 이 워크플로를 주로 사용하게 됩니다.

Nvidia MDL 지원

Nvidia MDL(Material Definitions Language) 스키마 및 MDL 표면 머티리얼 지원이 추가되었습니다. 자세한 정보는 Nvidia MDL 스키마 문서를 참조하세요.

런타임에서 추가 USD 지원

런타임에 여러 USD 기능을 사용할 수 있게 되어 USD 파일의 콘텐츠를 로드하고 표시하는 애플리케이션을 제작할 수 있게 되었습니다.

USD에 멀티 유저 지원

이제 USD 스테이지 작업 대부분에서 멀티 유저 편집이 지원됩니다.

향상된 그룸 워크플로를 통해 업데이트된 Alembic 캐시 지원

언리얼 엔진은 미디어 및 엔터테인먼트 업계에서 애니메이션 데이터 캐싱의 표준으로 널리 사용되는 Alembic 지원을 계속 확장하고 있습니다. 이번 버전에서는 Alembic 캐시 지원의 강력함을 비롯한 향상된 헤어 및 퍼 워크플로가 제공됩니다.

향상된 Alembic 그룸 지원

Alembic에서 임포트한 GeometryCache 데이터에 그룸을 바인딩할 수 있도록 헤어 및 퍼에 대한 지원을 확장했습니다. 이제 그룸을 스켈레탈 메시에 바인딩하는 번거로운 워크플로를 더 이상 사용하지 않아도 됩니다. 언리얼 그룸 시스템 또는 다른 DCC에서 시뮬레이션 가능한 풀 헤어 캐시를 구현하는 두 가지 그룸을 모두 지원합니다.

이제 애니메이션이 적용된 그룸을 Alembic에서 GroomCache 에셋으로 직접 임포트할 수 있습니다. GroomCache 에셋은 그룸 컴포넌트의 일부로 이용할 수 있습니다.

자세한 정보는 그룸용 Alembic 문서를 참조하세요.

향상된 Alembic 캐시 지원

Alembic 캐시는 향상된 헤어 및 퍼 워크플로를 비롯해 서브 프레임 샘플, 일정하지 않은 토폴로지 캐시 그리고 기본 프레임으로 시작하는 캐시에 더 나아진 지원을 제공합니다. 이를 통해 Alembic 시뮬레이션 캐시를 작업할 때 더욱 훌륭한 결과물을 낼 수 있습니다.

Archicad용 데이터스미스 익스포터 플러그인

언리얼 엔진 4.27에서 신규 Archicad용 데이터스미스 익스포터가 추가되었습니다. Archicad는 Graphisoft에서 제작한 유명 건축 CAD 소프트웨어입니다. 이 플러그인은 Archicad 사용자가 애플리케이션을 언리얼 엔진 및 트윈모션과 동기화할 수 있도록 데이터스미스 다이렉트 링크 워크플로를 지원하며, .udatasmith 파일 형식으로 데이터를 익스포트할 수 있는 기능도 포함되어 있습니다.

image alt text

그리고 Archicad 데이터와 데이터스미스 간의 충실도를 높게 유지하기 위해 다음을 지원합니다.

  • 메타데이터를 통해 구조화된 방식으로 익스포트된 지오메트리 및 계층구조 데이터

  • PBR 머티리얼

  • 라이트

  • 카메라 프로퍼티

  • 레이어

  • 핫 링크 및 외부 참조

  • 액터 태그

Sketchup용 데이터스미스 익스포터

Sketchup용 데이터스미스 익스포터를 처음부터 다시 만들었습니다. 새로운 버전에는 여러 개선 사항이 포함되어 있으며, Sketchup 애플리케이션을 언리얼 엔진 기반 애플리케이션 및 트윈모션과 동기화할 수 있도록 데이터스미스 다이렉트 링크 워크플로를 지원합니다.

이러한 개선 사항을 지원하기 위해 새로운 데이터스미스 툴바가 개발되었습니다.

image alt text

신규 툴바를 통해 다이렉트 링크 기능에 액세스할 수 있고 데이터를 .udatasmith 파일로 익스포트하는 옵션도 이용할 수 있습니다.

이제 PBR 머티리얼도 지원하도록 익스포터가 업데이트되어 기존 플러그인과의 연결성이 높아졌습니다.

기타 개선 사항:

  • Sketchup 2021 지원

  • 신규 PBR 머티리얼 그래프

  • Ruby 스크립트를 통한 대량 익스포팅

Rhino용 데이터스미스 익스포터

Rhino용 데이터스미스 익스포터 플러그인에 여러 개선이 있었습니다. 이번 출시를 통해 트윈모션 같은 언리얼 엔진 기반 애플리케이션과 Rhino 사이의 다이렉트 링크 기능을 추가했습니다.

image alt text

4.27에는 워크세션 지원을 추가했습니다. Rhino 워크세션이 언리얼 엔진으로 임포트되면 다수의 오버레이된 모델이 파악하기 쉬운 계층구조로 구조화됩니다.

image alt text image alt text

기타 개선 사항:

  • Rhino 7 지원

  • 다양한 신규 Rhino 지오메트리 모디파이어 지원

  • 네임드 뷰(Named view)가 카메라로 익스포트됨

향상된 데이터스미스 익스포터 플러그인 안정성 및 애플리케이션 지원

4.27에서 여러 개선 사항이 적용되었으며, 기존 데이터스미스 플러그인의 편의성이 높아졌습니다. 플러그인 안정성 개선 이외에도 Revit, 3ds Max, Navisworks의 신규 버전 지원이 추가되었습니다.

Revit
  • 천장 피벗 포인트 개선

  • Revit 2022 지원

3ds Max
  • 3ds Max 2022 지원

  • Navisworks 2022 지원

SOLIDWORKS용 데이터스미스(실험단계)

신규 SOLIDWORKS용 데이터스미스 플러그인을 통해 언리얼 엔진 및 트윈모션에서 널리 인기 있는 CAD 소프트웨어로 파일을 익스포트할 수 있습니다. 머티리얼 및 제품 지오메트리를 .udatasmith 파일 형식으로 익스포트하거나, 데이터스미스 다이렉트 링크로 SOLIDWORKS와 언리얼 엔진 기반 애플리케이션 사이에 라이브 연결을 생성하세요.

향상된 비주얼 데이터프렙 워크플로

비주얼 데이터프렙을 사용하면 다양한 연산자와 선택 필터를 통해 3D 데이터를 임포트 및 준비하는 프로세스를 자동화할 수 있습니다. 이번 출시에는 다음과 같은 다양한 편의성 개선이 이루어졌습니다.

image alt text

image alt text

  • 신규 필터 옵션: 이번 출시에는 여러 신규 필터링 옵션이 추가되었습니다. 선택한 액터들로 신규 필터를 생성하거나 액터 세트에서 보이는 액터를 모두 이용해 선택한 부분을 필터링할 수 있습니다. 액터 세트와 겹치는 액터를 선택하는 필터를 생성할 수도 있습니다.

  • 신규 연산자: Plane Cut, Set Collision Complexity, Set Max Texture Size 등 다양한 신규 연산자가 추가되었습니다.

  • 액터 컴포넌트 지원: 모든 연산자 및 필터에서 컴포넌트 지원이 추가되었습니다.

  • 특정 파일 형식 임포트 옵션: 데이터프렙 입력에 특정 파일 형식 입력 옵션을 설정할 수 있습니다.

  • 씬 통계 패널 및 간소화된 통계 오버레이: 씬 통계 패널 및 통계 오버레이를 재설계하여 가독성을 높였습니다.

  • UI 개선 사항: 액션 그룹을 축소할 수 있고 액션 노드의 크기를 수평으로 조정할 수 있습니다.

데이터스미스 런타임 임포트 지원

런타임에 여러 데이터스미스 기능을 사용할 수 있게 되어 데이터스미스 파일을 임포트하는 애플리케이션을 제작해 다양한 블루프린트 연산을 통해 조작할 수 있습니다.

image alt text

image alt text

image alt text

'데이터스미스 런타임 임포트 옵션' 변수를 데이터스미스 런타임 액터에서 액세스할 수 있으며, 데이터스미스 런타임 액터에서는 다음과 같은 임포트 프로세스를 위한 파라미터가 노출됩니다.

  • 파일의 계층구조를 노출하는 파라미터, 계층구조 빌드. 계층구조가 자세할수록 로드 시간과 렌더링 시간이 증가합니다.

  • 없음: 런타임 액터(4.26 비헤이비어)에 저장된 계층구조로, 사용자는 개별 노드에 액세스할 수 없습니다.

  • 간소화: 간소화된 계층구조로, 일부 중간 노드가 제거되었습니다. 애플리케이션에서 씬에 있는 많은 액터로 인한 드로 콜을 제한하면서 프로퍼티를 수정할 수 있도록 오브젝트를 노출합니다.

  • 필터링 미적용: CAD 모델 또는 데이터스미스 파일의 원시 계층구조

  • 빌드 콜리전: 콜리전 없음(No Collision), 쿼리 전용(Query Only), 피직스 전용(Physics Only), 콜리전 켜짐(Collision Enabled, 쿼리 + 피직스). 쿼리는 보통 폰 내비게이션, 벽/바닥 콜리전, 오브젝트 줍기에 사용됩니다.

  • 콜리전 유형: 프로젝트 디폴트(Project Default), 단순 및 컨벡스(Simple and Convex), 컨벡스를 단순으로 사용(Use Simple As Convex), 단순을 컨벡스로 사용(Use Convex As Simple). 부분마다 콜리전 생성을 미세 조정할 수 없으므로 씬 이동 중 정확한 콜리전을 원한다면 '복잡한 콜리전을 단순으로 사용'을 사용해야 할 수 있습니다.

  • 메타데이터 임포트: 메타데이터를 판독하고 액터에 추가합니다. 로드 시간이 늘어납니다.

카메라 보정을 통한 정확한 렌즈 표현 (베타)

보정된 카메라 데이터를 이용하면 시네마틱 카메라에 렌즈 디스토션을 적용해 라이브 합성 워크플로의 모습을 향상할 수 있습니다. 새로운 카메라 보정 및 노달 오프셋 툴을 이용해 렌즈를 보정하거나 ST 맵 형식으로 외부 보정 데이터를 가져올 수도 있습니다.

이번 출시에서 새로운 에셋 유형이 추가되었으며, 언리얼 엔진 툴에서의 렌즈 디스토션이 지원됩니다.

  • 다초점 및 여러 줌 위치에서 보정된 렌즈 데이터를 신규 렌즈 파일(LensFile) 에셋에 저장합니다.

  • 시네마틱 카메라에 새 렌즈 디스토션 포스트 프로세스 머티리얼 을 적용합니다.

  • 시네 카메라에 직접 렌즈 디스토션 컴포넌트(LensDistortion Component) 를 추가합니다.

  • 컴포저의 CG 레이어 에 디스토션을 적용합니다.

  • 라이브 포커스 및 줌 값에 따라 라이브 링크 카메라 서브젝트의 렌즈 파일을 평가합니다.

  • 신규 라이브 링크 렌즈 역할 로 특정 카메라 트래킹 시스템으로부터 직접 사전 보정 디스토션 데이터를 스트리밍합니다.

라이브 링크 FreeD 플러그인(베타)

라이브 링크에서 카메라 트래킹 및 Pan, Tilt, Zoom(PTZ) 카메라에 흔히 사용되는 프로토콜인 FreeD 데이터 프로토콜을 지원합니다. Panasonic AW-UE150, Sony BRC-X1000 등 많은 PTZ 카메라가 이 프로토콜을 통해 지원되며, 프로젝트에 트래킹 데이터를 추가하는 가성비 뛰어난 방식이 될 것입니다.

라이브 링크 VRPN 플러그인(베타)

VRPN은 가상 현실 및 버추얼 프로덕션에서 흔히 쓰이는 프로토콜입니다. 예전에는 VRPN과 호환되는 게 nDisplay뿐이었습니다. 새로운 라이브 링크 VRPN 플러그인은 더 일반적인 솔루션으로, 언리얼 엔진 내에서 여러 개의 트래킹된 디바이스를 배포하고 리플리케이트할 수 있습니다. 라이브 링크 VRPN 플러그인과의 중복을 피하기 위해 nDisplay의 VRPN 입력을 제거했습니다.

image alt text

라이브 링크 페이스

라이브 링크 페이스 iOS 앱의 페이셜 캡처 기능 및 데이터 기록 방식을 향상하기 위한 개선이 이루어졌습니다.

라이브 링크 페이스 캘리브레이션

라이브 링크 페이스의 페이셜 캡처 기능을 배우 개개인에 맞게 조정하고 라이브 링크 페이스의 새로운 캘리브레이션 기능을 통해 언리얼 엔진에 스트리밍되는 애니메이션 데이터의 퀄리티를 향상해 보세요. 이를 통해 기본 표정을 설정할 수 있게 되었으며, 이는 앱에서 ARKit의 데이터에 오프셋을 적용하고 실제 연기에 더 가까운 더욱 맞춤화된 결과를 제공하는 데 사용합니다.

image alt text

iPad용 라이브 링크 페이스

라이브 링크 페이스는 iPad에서도 TrueDepth 전면 카메라를 활용하며 정상적으로 작동했지만, 화면 및 비율이 iPad 화면 크기에 제대로 맞지 않았습니다. iPhone과 마찬가지로 iPad를 공식적으로 지원하기 위해 해당 앱을 업데이트했으며, 태블릿 폼 팩터를 선호하는 사용자들의 접근성이 향상되었습니다.

시퀀서 및 무비 렌더 큐로 영상 동기화 시 프레임 정확도 향상

미디어 프레임워크로 영상을 재생하면 미디어 플레이어의 실시간 동작과는 별개로 시퀀서의 타임라인에 프레임 단위로 정확하게 동기화됩니다. 미디어 플레이어와의 동기화 구성 및 커뮤니케이션은 시퀀서에서 내부적으로 처리합니다.

현재 이러한 신규 동기화를 지원하는 것은 ImageMediaPlayer뿐입니다. 이 기능을 지원하지 않는 미디어 플레이어를 사용하는 경우, 시퀀서 타임라인이 나타내는 곳 가까이에서 재생이 시작되거나 멈춥니다. 그러나 프레임별 정렬은 정확하지 않을 수 있습니다.

미디어 프레임워크에서의 이미지 시퀀스를 위한 EXR 밉맵 지원

미디어 프레임워크의 이미지 시퀀스 재생이 밉맵 EXR 이미지를 지원합니다. 밉맵은 이미지 시퀀스 내에서 로드하는 데이터의 양을 줄이기 위해 사용됩니다. 언리얼 엔진에서 밉 레벨은 따로 세팅에서 설정하지 않은 이상, 이미지를 표시하는 각 오브젝트의 픽셀 투 텍셀 밀도 추정치에 따라 선택됩니다.

자세한 정보는

[이미지 시퀀스 밉](WorkingWithMedia/IntegratingMedia/Overview/image-sequence-mips)
을 참조하세요.

향상된 DMX 퍼포먼스 및 통합

과부하 상황에서 DMX 플러그인의 전반적 퍼포먼스와 안정성을 높이고 프로토콜, 블루프린트 및 sACN 향상을 비롯한 개선 작업을 이어나가고 있습니다. 원격 제어 및 nDisplay 등의 기타 엔진 기능도 통합했으며 포트 컨트롤러를 새로운 네트워크 세팅 DMX 포트로 대체했습니다.

픽셀 매핑(베타)

픽셀 매핑 UI 패널 및 핵심 기능을 개편했습니다. 이제 씬 버퍼 또는 기타 라이브 텍스처를 가져와 저해상도 패널이나 매트릭스 픽스처를 효과적으로 구동하여 고성능에서 필요한 DMX 데이터를 생성할 수 있습니다.

멀티 유저에서 유저당 테이크 레코더 제어

이제 멀티 유저 세션의 노드 중 테이크 레코더 캡처에 사용할 노드를 선택할 수 있습니다. 즉, 노드를 녹화 노드로 설정할 수 있습니다. 녹화 노드에는 멀티 유저 주요 오퍼레이터에 표시되지 않는 추가 시뮬레이션 데이터 또는 애니메이션 데이터가 포함됩니다.

신규 디자인 컨피규레이터 템플릿 및 제품 컨피규레이터 템플릿 업데이트

언리얼 엔진 4.25에서는 사용자가 인터랙티브 제품 컨피규레이터를 빠르게 만들도록 돕고자 자동차 카테고리에 제품 컨피규레이터 템플릿을 출시했습니다. 해당 템플릿에는 베리언트 매니저 사용 모범 사례와 UMG 기반 인터페이스를 동적으로 생성하는 법이 포함되어 있습니다.

언리얼 엔진 4.27에서는 디자인 컨피규레이터 템플릿도 추가되었습니다.

image alt text

이 신규 템플릿은 건축, 엔지니어링, 건설 카테고리에서 이용할 수 있으며, 제품 컨피규레이터 템플릿에서 제품에 제공하는 것과 동일한 인터랙티브 기능 및 건축 모범 사례가 포함되어 있습니다.

두 템플릿 모두 다음과 같은 UI 개선이 이루어졌습니다.

  • 버튼 크기: 다양한 버튼의 크기를 조정합니다.

  • 버튼 외곽선 크기: 버튼 주위의 색 외곽선 너비를 조정합니다.

  • 버튼 외곽선 노멀 색: 버튼 외곽선의 기본 색을 설정합니다.

  • 버튼 외곽선 호버 색: 마우스 커서가 버튼 위에 있을 때의 버튼 외곽선 색을 설정합니다.

  • 버튼 외곽선 눌린 상태 색: 버튼을 눌렀을 때의 버튼 외곽선 색을 설정합니다.

  • 팝업 선 색: UI 텍스트 아래쪽 선의 색을 설정합니다.

  • 팝업 텍스트 색: UI 텍스트의 색을 설정합니다.

LiDAR 포인트 클라우드 플러그인 개선 사항

언리얼 엔진 4.27에서 LiDAR 포인트 클라우드 플러그인이 개선되어 포인트 클라우드 데이터의 임포트 및 조작이 향상되었습니다.

이번 출시에서는 다음 사항이 향상되었습니다.

  • 향상된 포인트 크기 알고리즘: 스케일 조절 가능 알고리즘이 향상되었으며, 고정 포인트 모드가 추가되었습니다. 이 신규 모드는 특히 노이즈가 있는 에셋으로 작업할 때 유용합니다.

  • 향상된 퍼포먼스 및 안정성 : 최종 사용자를 위한 포인트 클라우드 데이터 처리 및 스트리밍의 퍼포먼스가 크게 향상되었습니다.

  • 향상된 저장/로드 퍼포먼스: 시리얼라이저 및 스트리밍 메커니즘이 크게 향상되었습니다.

  • 단순 틈 채우기: 눈에 보이는 오버랩을 최소화하는 새로운 기술을 이용하여 포인트가 확대되어 렌더링됩니다.

  • 프러스텀 컬링 비활성화: 시네마틱 촬영 시 데이터 스트림 딜레이에 도움이 되는 프러스텀 컬링을 비활성화할 수 있습니다.

  • 신규 선택 도구: 폴리곤, 올가미, 페인트 선택 도구가 새로 추가되었습니다.

픽셀 스트리밍

언리얼 엔진 4.27에서 픽셀 스트리밍 플러그인이 정식 버전으로 출시되었음을 발표하게 되어 기쁩니다! 픽셀 스트리밍은 새로운 디플로이 옵션을 제공하므로 언리얼의 최고급 리얼타임 렌더링을 유례없이 광범위한 디바이스 및 사용자에게 스트리밍할 수 있습니다. 픽셀 스트리밍 애플리케이션을 구성하는 워크플로는 기본적으로 같지만, 이번 출시에는 여러 중요한 개선 사항과 신규 환경설정 옵션이 추가되었습니다.

픽셀 스트리밍의 Linux 지원

효율성과 확장성에서 이점이 많고 전반적으로 디플로이가 편리한 Linux 서버 인스턴스를 통해 픽셀 스트리밍 애플리케이션을 디플로이할 수 있습니다.

AMD 인코더 지원

픽셀 스트리밍에서 AMD Advanced Media Framework 하드웨어 인코더를 지원해 AMD GPU를 사용하는 인스턴스가 Windows와 Linux에서 픽셀 스트리밍을 이용할 수 있게 되었습니다.

WebRTC 업그레이드로 향상된 안정성 및 퀄리티

픽셀 스트리밍 플러그인에서 사용하는 WebRTC를 M84 버전으로 업그레이드했습니다. 이로써 스트림의 지연시간 및 퀄리티가 개선되었고 시간이 지남에 따라 성능이 저하되는 문제를 방지할 수 있습니다. Firefox, Safari 등 대부분 웹 브라우저와의 호환성도 개선되었습니다.

브라우저 오디오 입력 지원

WebRTC가 개선되어 사용자 브라우저의 오디오 입력을 지원하므로 픽셀 스트리밍 애플리케이션 내에서 마이크 입력을 캡처할 수 있습니다. 캡처한 오디오는 엔진 내에서 공간화하거나 처리할 수도 있습니다.

렌더링

확장된 GPU 라이트매스 기능 지원 (베타)

GPU 라이트매스 시스템은 언리얼 엔진 4의 여러 기능을 추가적으로 지원하며 점진적 라이팅 베이킹을 계속 개선하고 있습니다.

다음 사항이 4.27 버전에서 향상되었습니다.

  • 어테뉴에이션, 비역제곱 감쇠, 렉트 라이트 반 도어(rect light barn door) 등 다양한 라이트 파라미터를 지원합니다.

  • 레벨 오브 디테일(LOD) 메시 베이킹을 지원합니다.

  • 유색 반투명 섀도를 지원합니다.

  • 멀티 GPU(mGPU) 지원을 개선했습니다.

    • NVLink 및 SLI를 지원하는 NVIDIA 그래픽 카드가 필요합니다.

  • 복사도 캐시가 디폴트로 활성화되며 현실 씬에서 크게 빨라졌으며, 언리얼 엔진 4.26에서 발생하던 문제도 해결했습니다.

  • 간혹 GPU 타임아웃이나 TDR이 발생하던 문제를 방지하여 최대 속도 기본값을 새로 설정했습니다. 새로운 기본값은 속도를 16이 아닌 8로 등분합니다. 해당 속도는 시스템(System) 섹션 내 GPU 라이트매스 세팅(GPU LIghtmass settings) 패널에서 필요에 따라 조정할 수 있습니다.

  • 여러 문제를 해결하고 안정성을 개선했습니다.

![image alt text](image_31.png)(convert:false)

자세한 정보는 GPU 라이트매스 문서를 참조하세요.

패스 트레이서 (베타)

패스 트레이서는 언리얼 엔진의 점진적 렌더링 모드로, 어떠한 추가 세팅 없이도 씬을 렌더링할 수 있습니다. 물리적으로 정확하고 결점 없는 글로벌 일루미네이션, 물리적으로 정확한 굴절 효과, 반사와 굴절이 완벽히 작동하는 머티리얼, 그리고 슈퍼 샘플 안티 에일리어싱을 통해 리얼타임 레이 트레이싱 기능의 부족한 부분을 채워줍니다.

image alt text

패스 트레이서 이용 시 Windows 10 및 DXR을 지원하는 그래픽 카드가 필요합니다.

4.27에서는 패스 트레이서에 여러 가지 개선이 이루어져 AEC, 자동차, 제품 디자인에 중점을 둔 일반 렌더링 시나리오에 적합한 선택지가 되었습니다.

4.27의 개선 사항은 다음과 같습니다.

  • 헤어, 눈, 단일 레이어 물을 제외한 모든 머티리얼 셰이딩 모델을 지원합니다.

  • 굴절과 모든 머티리얼 블렌드 모드를 지원합니다.

  • 근사적 코스틱스를 포함해 유리 표면을 통한 빛의 투과를 지원합니다.

  • 랜덤 워크(random-walk) 서브 서피스 스캐터링을 지원합니다.

  • 영역 크기, 반그림자, 감쇠, 렉트 라이트 반 도어(Barn door), 렉트 라이트 텍스처, IES 프로파일 등 라이트 파라미터 대부분을 지원합니다.

  • 무한대에 가까운 수의 라이트를 지원합니다.

  • 비슷한 렌더링 시간 내에 노이즈가 덜 발생하도록 샘플링 기법을 개선했습니다.

    • 이는 아직 개발 중인 부분으로, 다음 출시를 통해 계속 개선할 예정입니다.

  • 직교 카메라를 지원합니다.

  • 무비 렌더 큐 지원이 개선되었습니다.

자세한 정보는 패스 트레이서 문서를 참조하세요.

향상된 헤어 및 퍼 렌더링 비주얼 및 퍼포먼스

언리얼 엔진의 헤어 및 퍼 렌더링 기능과 시뮬레이션 기능입니다. 언리얼 엔진 4.26부터 메타휴먼 크리에이터를 통해 비주얼과 퍼포먼스 측면에서 많은 개선이 이루어졌습니다.

image alt text

4.27에서는 캐시 관련 기능 두 가지가 새로 추가됩니다.

  • 헤어 그룸을 Alembic 캐시에 어태치하는 기능

  • 이미 시뮬레이션이 완료되어 프레임당 헤어 데이터 캐시가 저장된 그룸을 임포트하는 기능

    • 캐시 저장 그룸을 스켈레탈 메시나 Alembic 캐릭터에 바인딩할 수 있습니다.

    • 에디터에서 플레이, 시퀀서, 무비 렌더 큐에서 재생이 지원되지만 아직 패키지 프로젝트에서는 지원되지 않습니다.

Alembic 그룸을 임포트하는 동안 임포터에서 그룸에 애니메이션이 포함되어있는지 확인합니다. 포함된 경우, 자동으로 두 개의 그룸 캐시가 생성됩니다. 하나는 애니메이션이 적용된 스트랜드를 위한 캐시고, 다른 하나는 애니메이션이 적용된 가이드를 위한 캐시입니다. 해당 캐시는 시뮬레이션을 통해 렌더링된 스트랜드에 애니메이션을 적용합니다.

그룸 캐시는 그룸 캐시 할당 슬롯을 사용하여 그룸 컴포넌트에 할당할 수 있습니다.

자세한 정보는 헤어 & 퍼 렌더링 및 시뮬레이션 문서를 참조하세요.

레이 트레이싱의 확장된 활용 범위 및 향상된 워크플로

레이 트레이싱 기능은 활용 범위가 확장되고, 기존 지원 기능의 워크플로를 향상하고 있습니다. 이번 출시에는 다음과 같은 사항이 향상되고 추가되었습니다.

  • 인스턴스드 스태틱 메시(ISM, Instanced Static Meshes) 및 계층형 인스턴스드 스태틱 메시(HISM, Hierarchical Instanced Static Meshes)가 리플렉션이나 섀도 같은 레이 트레이싱 기능에서 월드 포지션 오프셋을 지원합니다.

  • 반사되어 보이는 나이아가라 파티클이 베이스 컬러 같은 파티클 기반의 머티리얼 어트리뷰트를 지원합니다. 이전에는 파티클이 반사되어 보일 때 머티리얼의 모든 파티클별 기능이 상실되었습니다.

  • 이제 굴절 효과를 스페큘러 입력이 아닌 메인 머티리얼 노드의 굴절 입력에서 제어할 수 있습니다. 이는 투명한 머티리얼에서의 굴절 효과를 제어할 때 처럼 기존 래스터 방식과 일치합니다.

  • 언리얼 엔진 4.26에서 비활성화되었던 투명 오브젝트 섀도 드리우기를 다시 활성화했습니다. 투명 오브젝트의 리얼타임 레이 트레이스드 섀도는 불투명으로만 작동하며, 부분적으로 반투명한 레이 트레이스드 섀도는 여전히 구워진 스태틱 라이트로 한정됩니다. 투명 오브젝트의 섀도 드리우기를 비활성화할 수 있습니다.

    • 머티리얼 별로는 머티리얼 에디터의 디테일(Details) 패널을 사용해 레이 트레이스드 섀도 드리우기(Cast Ray Traced Shadows) 를 비활성화합니다.

    • 오브젝트 별로는 레벨 디테일(Level Details) 패널을 통해 섀도 드리우기(Cast Shadows) 를 오브젝트 단위로 비활성화합니다.

자세한 정보는 리얼타임 레이 트레이싱을 참조하세요.

RAD 게임 툴

RAD 게임 툴이 에픽게임즈에 합류하며 여러 기술이 언리얼 엔진에 포함되었습니다.

우들 컴프레션 세트

image alt text

우들 데이터(Oodle Data) 압축은 게임 데이터를 가장 빠르고 높은 비율로 압축합니다. 이 제품군은 프로젝트의 수요에 가장 잘 부합할 수 있도록 네 가지 압축 알고리즘을 제공합니다. 우들 데이터 압축 해제는 언리얼 엔진이 지원되는 모든 플랫폼에서 실행되는 코덱 및 알고리즘을 통틀어 가장 빠른 속도를 자랑합니다.

이제 언리얼 엔진에서 기본으로 활성화되어 있는 우들 데이터 압축은 뛰어난 압축 성능과 빠른 프로젝트 패키지 로딩 속도를 제공합니다.

우들 텍스처(Oodle Texture) 압축은 블록 압축 BC1-BC7 텍스처에 있어서 가장 빠ㅈ른 고품질 인코더입니다. 우들 텍스처의 RDO(Rate Distortion Optimization) 인코더는 RDO가 아닌 인코더에 비해 2~3배 작으면서도 높은 비주얼 퀄리티의 인코딩을 진행할 수 있습니다!

우들 텍스처 압축은 언리얼 엔진에서 기본으로 활성화되어 있으며, RDO 인코딩은 프로젝트 세팅에서 활성화할 수 있습니다(RDO 인코딩은 기본으로 꺼져 있습니다).

우들 네트워크(Oodle Network) 압축은 네트워크 트래픽의 리얼타임 압축을 위한 독특한 솔루션으로, 게임 서버에 필요한 대역폭을 크게 줄입니다. 이 솔루션은 모든 TCP 및 UDP 네트워크 패킷에서 작동하며 멀티플레이어 게임에 필요한 최소 대역폭을 크게 줄입니다.

포트나이트에서는 이미 우들 네트워크 압축이 적용 되어서 사용이 가능하며, 게임의 네트워크 스트림에 맞게 조정할 수 있습니다.

빙크 비디오: 가장 빠른 게임용 비디오 코덱

image alt text

빙크 비디오(Bink Video) 는 비디오 게임에서 가장 인기 있는 비디오 코덱으로, 이제 언리얼 엔진에 내장됐습니다. 퍼포먼스 위주로 설계된 비디오 코덱인 빙크 비디오는 다른 코덱보다 최대 10배 빠르게 디코딩할 수 있고, 메모리를 8~16배 적게 사용합니다. 일부 플랫폼에서는 Bink 디코딩을 GPU 연산 셰이더로 오프로드해 더 빠른 퍼포먼스를 누릴 수 있습니다. 빙크 비디오는 완전히 독립적이므로 아무것도 설치할 필요가 없으며, 사용하기 편리한 언리얼 엔진 플러그인 인터페이스를 제공합니다.

XR

OpenXR 플러그인 정식 버전

OpenXR 프레임워크는 VR 및 AR 개발에서 많은 기업의 표준입니다. OpenXR 플러그인을 통해 언리얼 엔진 내의 동일한 API를 이용하여 여러 XR 디바이스를 대상으로 개발이 가능합니다. OpenXR 플러그인은 마켓플레이스의 확장 플러그인도 지원하므로 엔진이 출시되기까지 기다릴 필요 없이 OpenXR에 기능을 추가할 수 있습니다.

image alt text

출처: OpenXR 및 OpenXR 로고는 Khronos Group Inc.의 상표입니다.

이번 출시를 통해 언리얼 엔진의 OpenXR 플러그인에 다음과 같은 기능이 지원됩니다.

  • 스테레오 레이어

  • 스플래시 화면

  • 플레이스페이스 바운드 쿼리

  • 모션 컨트롤러 시각화

플랫폼별 플러그인은 4.27 버전에서도 사용할 수 있습니다. 엔진에서는 기본적으로 디바이스 호환성에 따라 플러그인의 우선순위가 정해지며, 순서는 다음과 같습니다.

  • OculusVR

  • SteamVR

  • OpenXR

OpenXR 전용으로 개발하고 싶다면 OculusVR과 SteamVR을 비활성화하세요.

VRTemplate 재설계

OpenXR 프레임워크로 새로운 VRTemplate을 만들었습니다. 이 템플릿은 모든 VR 프로젝트의 시작점으로 설계되었습니다. 다음 항목의 캡슐화된 로직을 포함합니다.

  • 텔레포트 로코모션

  • 스냅 로테이션

  • 그랩 컴포넌트

  • VR 관람자 카메라

  • 메뉴

현재 VRTemplate에서 지원하는 VR 플랫폼은 다음과 같습니다.

  • Oculus Quest 1, 2

  • Oculus Link를 사용하는 Oculus Quest

  • Oculus Rift S

  • Valve Index

  • HTC Vive

  • Windows Mixed Reality

자세한 내용은 VR 템플릿을 참조하세요.

휴대형 AR 템플릿 재설계

이 프로젝트 템플릿은 기존의 휴대형 AR 템플릿을 대체하며, ARCore 및 ARKit 플랫폼에서 AR 앱을 개발하기 위한 시작점으로 설계되었습니다.

다음과 같은 기능을 포함합니다.

  • iOS 및 Android에서 독창적이고 편리한 구성

  • 기본 UI 및 터치 인터페이스

  • 스냅샷 이미지 촬영 기능

  • 모델을 이동, 회전, 스케일 조절하는 기능

image alt text

향상된 콜라보 뷰어 템플릿

콜라보 뷰어는 VR이나 데스크톱에서 여러 사용자와 함께 CAD 및 BIM 3D 모델을 실험하고 협업 디자인 검토를 진행할 수 있도록 하는 템플릿 프로젝트입니다.

4.27 버전에서 향상된 사항은 다음과 같습니다.

  • 멀티 스케일 지원

  • 섹션 툴

  • 데이터스미스 런타임과 작동

  • 텍스트 노트 입력

image alt text

고정 포비티드 렌더링(실험단계)

고정 포비티드 렌더링을 이용하면 VR 헤드셋에서 이미지 기반 가변 레이트 셰이딩으로 타깃의 셰이딩 레이트를 조정할 수 있습니다. 고정 포비티드 렌더링은 이미지 퀄리티에 눈에 띄는 손상은 거의 발생시키지 않으면서 퍼포먼스를 크게 높입니다. 고정 포비티드 렌더링에는 비활성화, 낮음, 중간, 높음의 네 단계가 있습니다.

현재 이 기능은 VRS Tier 2를 지원하는 DX12 및 GPU를 갖춘 Windows 플랫폼에서만 지원됩니다.

컨테이너 디플로이먼트(베타)

언리얼 엔진 4.27부터 컨테이너 디플로이먼트가 공식적으로 지원됩니다. 컨테이너는 애플리케이션 및 애플리케이션 종속성을 로컬 머신이나 클라우드에 디플로이할 수 있는 하나의 휴대용 유닛으로 패키징하는 옵션을 제공합니다. 가상 머신과 비슷하게 작동하지만, 컨테이너의 연산 부담이 줄어서 더 많은 동시 디플로이먼트가 가능합니다.

언리얼 엔진에서는 TensorWorks언리얼 컨테이너 커뮤니티 이니셔티브가 개발한 오픈 소스 인프라에 따라 두 가지 컨테이너 이미지를 지원합니다. 언리얼 에디터와 빌드 툴이 포함된 개발 이미지, 그리고 언리얼 엔진 프로젝트 패키지를 실행할 수 있는 런타임 이미지입니다. 덕분에 개발 툴이나 최종 사용자 애플리케이션을 클라우드에 폭넓게 디플로이할 수 있게 되었습니다.

컨테이너와 컨테이너 이미지를 활용하는 다양한 방식을 알아보려면 컨테이너 문서를 참조하세요.

게임플레이 프레임워크 및 스크립팅

향상된 입력(베타)

향상된 입력 은 간소화되었으나 다양하게 환경설정 가능한 입력 처리 시스템으로, 런타임 입력 리매핑과 복잡하고 커스터마이징 가능한 트리거 규칙을 지원합니다. 4.27에서는 향상된 입력 플러그인이 확장되어 블루프린트 비주얼 스크립팅을 모두 지원하므로, 이제 개발자는 C++ 코드를 작성하지 않아도 모든 기능을 사용할 수 있습니다.image alt text

데이터 레지스트리(베타)

실험단계 데이터 레지스트리(Data Registries) 플러그인은 개발자가 구조체 기반 데이터 테이블에 사용할 효과적인 글로벌 스토리지 공간을 만드는 데 도움이 됩니다. 데이터 레지스트리를 통해 데이터에 동기 또는 비동기 액세스를 진행할 수 있고, 필요에 따라 데이터를 로드하거나, 캐싱 규칙을 구성하거나, 시스템을 확장해 원하는 간접 규칙을 작성할 수도 있습니다. 데이터 레지스트리를 게임 기능(Game Features)모듈형 게임플레이(Modular Gameplay) 플러그인과 함께 사용하면 전체 데이터 레지스트리나 데이터 소스를 가져와 기존 데이터 레지스트리를 채울 수 있습니다.

image alt text

현재 데이터 레지스트리 플러그인은 표준 데이터 테이블과 커브 테이블을 모두 지원합니다.

라이브러리형 언리얼 엔진

라이브러리형 언리얼 엔진(Unreal Engine as a Library) 으로 UE4 런타임을 라이브러리로 빌드해 최소한의 내장 API를 통해 인터랙션할 수 있습니다. 내장 API에는 다음 기능이 포함됩니다.

  • UE4를 실행하고, 엔진이 출력을 전송하는 클라이언트 창과 명령줄을 선택적으로 허용합니다.

  • 엔진 업데이트('틱')를 통해서실행 중에 제어가 가능합니다.

  • 엔진의 프로세스 간 커뮤니케이션에서 Windows 메시지를 받습니다.

  • 작업이 끝나면 엔진을 닫습니다.

필요에 따라 API를 확장할 수 있으며, 외부 사용을 위해 기존 기능 또는 신규 기능을 노출할 수 있습니다.

지오레퍼런싱

지오레퍼런싱(Georeferencing) 플러그인은 행성의 표면 영역 같은 물리적 위치와 UE4의 레벨 같은 가상 위치를 연결합니다. UE4는 실제 위치나 가상 위치를 엔진 내 레벨에 매핑할 수 있도록 지리적 및 지구 중심적, 투영 좌표 참조 시스템을 지원합니다. 위도/경도 및 UTM 좌표와 같은 시스템 또한 지원합니다. 다음의 네 가지 좌표 시스템 사이에서 좌표를 변환할 수 있습니다.

  • 언리얼 엔진 좌표 시스템

  • 원하는 투영 좌표 참조 시스템(CRS)

  • 원하는 지리적 CRS

  • 표준 지구 중심 고정(ECEF) CRS

image alt text

현실 또는 실제와 비슷한 위치에 한정된 시스템이 아니므로 공간적 관계를 일관적으로 유지하면서 둥글거나 평평한 세계 내에서 위치를 나타낼 수 있습니다.

온라인

온라인 서브시스템 EOS 플러그인

UE4의 온라인 서브시스템 인터페이스에서 이제 에픽 온라인 서비스(EOS)를 지원합니다. 데스크톱, 콘솔, 모바일 플랫폼에서 구현이 가능하며, 해당 기능을 사용하려는 게임에 크로스 플랫폼 온라인 기능도 지원합니다. 다음은 이용 가능한 기능 중 일부입니다.

  • 에픽 계정 서비스(EAS)를 이용하거나 이용하지 않는 인증 및 서드파티 공급자를 통한 인증

  • 에픽 친구 목록 기반으로 오버레이 UI와 플레이어 정보, 현재 상태 업데이트가 지원되는 소셜 인터랙션

  • 매치메이킹 및 직접 초대를 모두 이용하는 세션 관리 및 참가

  • 멀티플레이어 로비

  • 플레이어의 게임 진행 상황을 보여주는 통계, 리더보드, 업적

  • 타이틀 생성 파일 및 유저별 클라우드 저장

  • 게임 내 상거래를 위한 스토어 제품 목록 및 구매 체크아웃

  • 전용 서버 및 플레이어 개최 매치, 피어 투 피어 연결 자체 지원

보이스 채팅 EOS 플러그인

UE4에서 보이스 채팅 인터페이스를 활용한 신규 EOS 보이스 서비스를 지원합니다. 데스크톱, 콘솔, 모바일 플랫폼에서 구현 가능하며, 크로스 플랫폼 보이스 커뮤니케이션을 활성화합니다.

신규 온라인 서브시스템 EOS 플러그인을 통해 로비에서 보이스 채팅을 활성화할 수 있습니다. 참가자는 해당하는 보이스 채널에 자동으로 참여합니다. 이 시스템은 온라인 서브시스템 EOS를 통해 액세스할 수 있는 IVoiceChatUser 인터페이스를 자동으로 생성해 이후의 인터랙션 및 로비 보이스 채널 업데이트에 활용합니다.

Vivox VoiceChat 플러그인에서 이전한 사용자는 EOS VoiceChat 플러그인이 IVoiceChat 및 IVoiceChatUser 인터페이스와 동일하게 구현된 것을 볼 수 있으며, 같은 방식으로 구동할 수 있습니다.

오디오

전용 서버를 위한 쿼츠

이제 오디오 디바이스가 없어도 쿼츠(Quartz)를 실행할 수 있습니다. 덕분에 쿼츠를 전용 서버에서 실행할 수 있습니다. 믹서 디바이스가 없다면 쿼츠 시계는 오디오 엔진이 아닌 UObject 틱으로 업데이트됩니다.

Quartz 편의성 업데이트

쿼츠에 현재 시계의 시작, 중지, 일시정지 등 신규 시계 처리 블루프린트 함수가 추가되어 오디오 디자이너의 편의성이 개선되었습니다. 쿼츠는 샘플 수준으로 정확한 바운더리에서 또 다른 시계를 시작할 수도 있어서 오디오 디자이너가 런타임에서 두 시계 사이를 전환할 수 있습니다. 다른 시계로 자연스럽게 전환함으로써 박자표를 변경하는 데 사용할 수도 있습니다.

쿼츠 명령이 최대한 빨리 실행될 수 있도록 '없음'이 양자화 열거형에 옵션으로 추가되었습니다. 신규 블루프린트 함수 '양자화된 트랜스포트 리셋 (Reset Transport Quantized)'와 함께 사용해 시계가 외부 디바이스와 동기화 상태를 유지하도록 공장 초기화할 수 있습니다.

모바일

모바일용 FXAA 및 TAA

이제 모바일 렌더러에서 FXAA(Fast Approximate Anti-Aliasing)TAA(Temporal Anti-Aliasing) 을 이용할 수 있습니다. 해당 기능은 모바일 HDR을 활성화한 다음, 데스크톱 디바이스에서 안티 에일리어싱 포스트 프로세스를 진행하는 것과 같은 과정으로 이용할 수 있습니다.

향상된 모바일 디퍼드 렌더러 퍼포먼스

모바일 디퍼드 렌더러(Mobile Deferred Renderer) 의 퍼포먼스와 안정성이 크게 개선됐으며, 다양한 Android 디바이스에서 실행됩니다. 라이트 함수, IES 라이트 프로파일, 단순 라이트도 지원합니다.

Android용 Visual Studio 디버깅

이제 Android 프로젝트에서도 Visual Studio 디버깅 워크플로를 사용할 수 있습니다. Google의 Visual Studio용 AGDE 플러그인을 설치하면, Android 프로젝트 생성 시 언리얼 엔진에서 해당 플러그인을 내부적으로 활성화합니다. 이를 통해 Visual Studio에서 직접 프로젝트를 디플로이 및 디버그할 수 있습니다.

Android 메모리 프로파일러 지원

언리얼 엔진 4.27에서는 Google의 개발 라이브러리를 통해 Android 메모리 프로파일러에 언리얼의 메모리 얼로케이터를 노출합니다. 덕분에 따로 해결책을 찾을 필요 없이 개발, 테스트, 디버그 환경설정에 Android 메모리 프로파일러를 사용할 수 있게 되었습니다. Android Studio에서 메모리 프로파일러를 사용하는 법을 자세히 알아보려면 네이티브 메모리 프로파일러에 대한 Android 문서를 참조하세요.

향상된 Android 편의성

Android Studio용 프로젝트 생성 시 디버거 유형이 자동으로 듀얼(C++ 및 Java)로 설정되고, 언리얼 데이터 유형을 위한 네이티브 비주얼라이저를 구성합니다. 이를 통해 Android Studio의 네이티브 스트링 시각화에 있던 문제가 해결되었고, Android Studio 프로젝트에서 추가적인 세팅을 수행하지 않아도 언리얼 데이터 유형을 이용할 수 있습니다.

시퀀서

무비 렌더 큐

image alt text

새로운 익스포트 포맷이 명령줄 인코더 형식으로 하이 퀄리티 미디어 익스포트 에 추가되었습니다. 명령줄 인코더는 FFmpeg 같은 서드파티 소프트웨어에서 출력 포맷을 직접 만들 때도 사용할 수 있습니다.

image alt text

오브젝트 ID 렌더 패스가 향상되어 ID를 그룹화할 수 있도록 다양한 방식을 지원합니다. 액터 이름, 머티리얼, 폴더에 따라 오브젝트를 그룹화할 수 있습니다.

image alt text

시퀀서 인터페이스 변경 사항

이벤트 트랙 내비게이션의 편의성을 개선하기 위해 시퀀서 툴바에 이벤트 트랙의 디렉터 블루프린트 를 여는 바로가기를 추가했습니다.

image alt text

Take Recorder Reference 툴에 이어 이제 시퀀서의 재생 컨트롤에도 녹화 시작 버튼을 추가했습니다. 시퀀서의 녹화 버튼을 누르면 선택한 액터를 현재 시퀀스에 녹화할 수 있으며, 테이크 레코더 창을 열 필요가 없습니다.

image alt text

하이 퀄리티 미디어 익스포트 플러그인을 활성화하면 시퀀서의 렌더 버튼을 클릭했을 때 어떤 렌더러를 열지 선택할 수 있습니다. 무비 렌더 큐 또는 레거시 렌더러 를 지정할 수 있습니다.

image alt text

템플릿 시퀀스 프로퍼티 멀티플라이어

Using Template Sequences 에서 프로퍼티 곱하기를 지원합니다. 프로퍼티 멀티플라이어를 사용하면 템플릿 시퀀스 인스턴스가 원본 에셋을 참조하면서도 강도는 다양하게 할 수 있습니다.

게임플레이 큐 트랙

시퀀서에 새로운 트랙이 추가되어 Gameplay Ability System 로 만든 액터에서 노티파이 스테이트를 트리거할 수 있습니다. 노티파이와 마찬가지로 게임플레이 큐 트랙도 범위 기반 이벤트나 트리거 기반 이벤트를 활용할 수 있습니다.

image alt text

인스티게이터, 위치, 어태치먼트의 제어를 포함해 트리거 방식을 커스터마이징할 수 있는 다양한 옵션이 있습니다.

image alt text

게임플레이 큐 트랙을 사용하려면 게임플레이 어빌리티 플러그인(Gameplay Abilities Plugin) 을 활성화해야 합니다.

image alt text

나이아가라 비주얼 이펙트

모듈 버전 관리

모듈, 함수, 동적 입력의 버전을 관리할 수 있습니다. 기능을 설정한 다음, 버전 번호에 저장할 수 있으므로 유연하게 모듈을 만들 수 있습니다. 새로운 모듈 버전을 만들면 사용자들이 해당 새 버전을 이용할 수 있게 됩니다.

모듈을 나이아가라 시스템에 처음 추가하면, 나이아가라 시스템은 노출된 것으로 지정된 버전을 사용합니다. 해당 모듈에 새로운 버전이 추가된 후에는 새로운 버전으로 업그레이드할지, 이전 버전으로 복구할지를 선택할 수 있습니다.

image alt text

이 기능에는 Python 통합이 포함되어 업그레이드 시 기존 입력을 새로운 모듈 버전으로 자동 전송할 수 있습니다.

자세한 내용은 나이아가라 모듈 버전 관리 페이지를 참조하세요. [신기능 페이지 링크 입력]

비헤이비어 예시

나이아가라 4.27부터 새로운 나이아가라 시스템을 만들 때 비헤이비어 예시(Behavior Examples)라는 새로운 탭이 표시됩니다. 이러한 예시는 나이아가라의 한 측면을 보여주는 매우 간단한 나이아가라 이미터로 설계되었습니다. 초보자가 기술을 이해하는 데 도움이 될 것입니다.

image alt text

나이아가라 디버거

레벨 에디터에 나이아가라 디버거(Niagara Debugger) 라는 새로운 패널이 추가되었습니다. 이 패널을 통해 레벨 내에서 나이아가라 시뮬레이션을 이해하고, 디버그하고, 런타임에서 어떤 일이 일어나는지 확인할 수 있습니다.

image alt text

뷰포트에서 디버그 HUD를 토글해 레벨 내 나이아가라 시뮬레이션에 대한 정보를 표시할 수 있습니다.

시뮬레이션을 일시정지하거나 느린 속도로 재생해 무슨 일이 일어나는지 확인할 수도 있습니다. 나이아가라 디버거에서 슬로우 모션을 활성화하면 선택된 나이아가라 파티클 시뮬레이션만 느려지고, 레벨에 있는 나머지는 일반 속도로 재생됩니다. 각 파티클의 데이터 값을 켤 수도 있습니다.

디버그 드로잉

Sphere, Box 등 일부 모듈에 디버그 드로잉 옵션이 새로 추가되었습니다. 활성화하면 모듈의 시각적 표현을 보여줍니다. 그리고 시스템을 디버그하고 필요에 따라 모듈의 파라미터를 조정할 수 있습니다.

모듈에서 디버그 드로잉이 사용 가능한 경우, 파란색 박스가 모듈의 체크박스 왼쪽에 표시됩니다. 디버그 드로잉을 활성화하려면 박스를 클릭하세요.

image alt text

두 개 이상의 모듈에서 디버그 드로잉 을 활성화한 경우, 각각의 모양에 대한 드로잉이 보일 것입니다.

디버그 드로잉은 개별 파티클의 경로 트래킹에도 사용할 수 있습니다. 아래 예시는 유체 시뮬레이션의 모습을 보여줍니다.

커스텀 모듈에도 디버그 드로잉을 추가할 수 있습니다.

자세한 정보는 디버그 드로잉[기능 페이지 링크 추가]을 참조하세요.

메시 렌더러에 메시 배열 지원

이제 메시 렌더러 에 두 개 이상의 메시를 추가할 수 있습니다. 두 개 이상의 메시를 추가하면 메시 배열이 생성됩니다. 이런 메시의 파티클을 무작위로 스폰할 수도 있고, 플립북 형태로 순차적으로 사용할 수도 있습니다.

두 개 이상의 메시를 추가하려면 메시 렌더러(Mesh Renderer)를 선택합니다. 렌더러에 메시를 추가하려면 더하기 표시를 클릭합니다. 각 메시가 0으로 시작하는 integer 값이 할당된 것을 확인할 수 있습니다.

image alt text

배열된 메시를 통해 무작위로 파티클을 생성하려면 파티클 초기화(Initialize Particle)를 클릭합니다. 메시 렌더러 배열 비저빌리티 모드(Mesh Renderer Array Visibility Mode)랜덤(Random) 으로 설정하고 소스(Source) 에서 사용할 렌더러를 선택할 수 있습니다.

image alt text

particles.meshindex 어트리뷰트가 표시되며, 나이아가라 시스템에 드래그할 수 있습니다. 예를 들어 시간이 지남에 따라 파티클이 무작위로 변하길 원한다면 particles.meshindex를 파티클 업데이트(Particle Update) 그룹에 드래그하면 됩니다. 그리고 메시 인덱스(MeshIndex) 파라미터를 랜덤 범위 integer(Random Range Integer) 로 설정하고 렌더러 내에 있는 메시의 수만큼의 integer로 순환하게 합니다.

시간이 지남에 따라 순환하는 일련의 메시가 있는 경우, 메시 렌더러 내에 배열을 플립북으로 설정할 수 있는 섹션이 있습니다. 메시의 이름은 플립북 접미사 형식 에 따라 지정해야 하며, 디폴트는 _{frame_number}입니다.

image alt text

자세히 알아보려면 메시 배열 이라는 비헤이비어 예시 를 나이아가라 시스템에 추가해 보세요.

향상된 커브 에디터 워크플로

나이아가라커브 에디터시퀀서 내에서 사용되는 커브 에디터에 맞게 업데이트되었습니다. 이제 키 및 리타이밍을 조정할 수 있는 고급 편집 툴을 이용할 수 있습니다.

커브 패널은 시스템에 있는 모든 커브의 계층구조를 나타내도록 개편되었습니다. 계층구조를 통해 커브를 검색하고, 빠르게 액세스하려는 커브를 고정할 수 있습니다. 커브 개요에서 한 열을 더블 클릭하면 선택 패널에서 모듈이 열립니다.

image alt text

선택 패널에 나타나는 인라인 커브 에디터도 업데이트되었습니다.

image alt text

image alt text

자주 사용되는 커브 모양을 빠르게 적용하려면 커브 템플릿(Curve Templates) 을 클릭합니다. 커브 에디터 하단의 화살표 버튼으로 여러 키 사이를 빠르게 이동할 수 있습니다.

자주 사용하지만 프리셋에 없는 커브가 있다면 프로젝트 세팅 에서 직접 커브 템플릿을 만들어도 됩니다.

이번 버전에서는 커브 에디터 의 퍼포먼스가 향상되었으며, 키를 드래그할 때 느려지던 문제를 해결했습니다.

파라미터 정의

나이아가라에 신규 에셋인 파라미터 정의 가 추가되었습니다. 파라미터 정의를 생성해 수많은 시스템, 이미터, 파티클 네임스페이스 파라미터의 기본값과 설명을 정의할 수 있습니다. 이러한 기본값과 설명은 나이아가라 이미터, 시스템, 스크립트에서 참조할 수 있습니다.

또 다른 나이아가라 에셋의 파라미터 정의에 관한 레퍼런스는 파라미터 정의 에셋에서 해당 파라미터에 변경 사항이 있으면 자동으로 구독 또는 연결됩니다. 예를 들어 이 기능을 사용하면 파라미터 이름, 기본값, 설명의 변경 사항을 해당 파라미터의 모든 레퍼런스에 자동으로 적용할 수 있습니다.

리본 모양 프리셋 및 커스터마이징

이전 버전에서는 리본 렌더러 가 항상 평면 리본만 출력했습니다. 이제 평면, 다중 평면, 튜브, 버텍스 입력 중에서 선택해 커스텀 모양을 만들 수 있습니다.

해당 옵션을 활성화하려면 리본 렌더러 의 새로운 섹션인 리본 셰이프 을 참조하세요.

image alt text

선택한 모양의 유형에 따라 모양 조정에 이용할 수 있는 옵션이 달라집니다. 이러한 옵션을 사용하려면 리본 렌더러(Ribbon Renderer)페이싱 모드(Facing Mode)화면(Screen) 이 아닌 커스텀(Custom) 으로 설정해야 합니다.

image alt text

리본 초기화(Initialize Ribbon) 모듈에서 리본 너비 모드(Ribbon Width Mode)리본 페이싱 모드(Ribbon Facing Mode)직접 설정(Direct Set) 으로 설정해야 합니다.

image alt text

추가 옵션뿐 아니라 리본의 아티팩트를 줄이는 신규 파라미터도 설정할 수 있습니다. 리본 모양평면 또는 다중 평면 으로 설정된 경우, 너비 세그멘테이션 수 가 더 매끄럽게 변형될 수 있도록 메시에 버텍스를 추가할 수 있습니다. 리본 모양튜브 로 설정된 경우, 튜브에 버텍스를 추가하기 위해서는 튜브 서브디비전 을 조정하면 됩니다.

스크립트 통계 패널

나이아가라 스크립트 통계 패널을 사용하면 나이아가라 에디터 내에서 여러 플랫폼용으로 나이아가라 시스템을 컴파일할 수 있습니다. 따라서 쿠킹을 하지 않아도 특정 플랫폼의 오류에 대한 정보를 얻을 수 있습니다. 특히 PSSL이 비교적 엄격한 GPU 시스템에서 작업할 때 유용합니다.

image alt text

Select 노드

나이아가라 스크립트에 Select 노드가 새로 추가되었습니다. 지원이 중단된 IF 노드를 대체하는 노드입니다. integer, 부울, enum 등 선택기 유형을 지정할 수 있습니다. 한 번에 다양한 값을 선택할 수도 있습니다. Select 노드에 입력되는 값에 따라 다른 값을 출력합니다.

image alt text

위의 예시에서는 Select 노드가 부울 유형으로 설정되었습니다. 해당 변수는 주어진 입력이 true인지 false인지 확인합니다.

Select 노드가 Int32로 설정된 경우, + 부호를 클릭해 integer를 추가하거나 - 부호를 클릭해 integer를 삭제할 수 있습니다.

image alt text

enum 목록에서 Select 노드를 만들 수 있습니다. 다음 예시에서는 Select 노드가 스프라이트 크기 스케일 조정에서 만들어졌습니다. 그리고 스프라이트 크기 스케일 조정에서 설정할 수 있는 모든 옵션으로 채워집니다.

image alt text

해시 함수

새로운 해시 함수용 노드인 Hash IntegerHash Float 가 추가되었습니다. integer 세트를 입력하면 무작위 값을 출력합니다. 해시 함수와 시드 랜덤의 차이점은 동일한 입력값이 주어졌을 때 해시는 여러 함수 호출 사이에서도 같은 값을 출력한다는 점입니다. 반면에 시드 랜덤은 함수 호출마다 일관적인 값을 생성합니다.

image alt text

나이아가라 사용자 경험 업데이트

나이아가라 에디터에서 여러 사용자 경험이 향상되었습니다. 향상된 사항 중 일부는 다음과 같습니다.

  • 스켈레탈 메시의 필터링된 본 및 소켓 목록에서 모든 옵션 자동 채우기 를 이용할 수 있습니다.

  • 나이아가라 단축키 지원: 재생 시 J와 K를 누르면 앞뒤로 순환합니다. S를 누르면 선택한 이미터를 분리합니다. D를 누르면 선택한 이미터를 비활성화합니다.

  • 나이아가라 스크립트, 모듈, 동적 입력 메뉴가 개선 및 추가되었습니다.

  • 스크립트 액션 메뉴에 ‘라이브러리만' 체크박스를 추가했습니다.

  • 에셋을 추천 에셋으로 예비 라벨링할 수 있는 추천 기능이 추가되었습니다. 이 액션은 검색 도중 목록 상단에 섹션 형태로 나타납니다. 동적 입력 및 모듈은 검색하지 않아도 상단에 표시됩니다.

  • 여러 데이터 인터페이스 함수에 유용한 툴팁이 추가되었습니다.

플랫폼 SDK 업그레이드

출시할 때마다, 플랫폼 협력사의 최신 SDK 출시를 지원하도록 엔진을 업데이트합니다.

image alt text

  • Windows

    • 권장:

      • Visual Studio 2019 v16.5

    • 최소:

      • Visual Studio 2017 v15.6

    • Windows SDK 10.0.18362

    • NET 4.6.2 타기팅 팩

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

    • Visual Studio - Visual Studio 2017 v15.9.4 toolchain(14.16.27023) 및 Windows 10 SDK(10.0.18362.0)

      • 최소 지원 버전

        • Visual Studio 2017 v15.6

    • Xcode - Xcode 11.1

  • GDK

    • Windows SDK: 10.0.19041.0

    • GDK: April 2021 QFE2

    • 펌웨어 버전: Recovery May 2021 QFE1 10.0.19041.7772

    • 지원되는 IDE: Visual Studio 2019

  • Android

    • Android Studio 4.0

    • Android NDK r21e

      • NDK r20b 또한 지원되어 일부 저사양 디바이스의 호환성 문제를 해결합니다.

  • ARCore

    • 1.24

  • ARKit

    • 4.0

  • Linux "SDK"(cross-toolchain)

    • v18 clang-11.0.1 기반(CentOS 7)

  • Oculus

    • 27.0

  • OpenXR

    • 1.0

  • Google Stadia

    • 1.6.2

  • Lumin

    • 0.24.1

  • Steam

    • 1.47

  • SteamVR

    • 1.5.17

  • Switch

    • SDK 12.3.2 + 선택 사항으로 NEX 4.6.6

    • 최소 펌웨어 버전: 12.0.2-1.0

    • 지원되는 IDE: Visual Studio 2017, Visual Studio 2019

  • PS4

    • Orbis SDK 8.508.001

    • 시스템 소프트웨어 8.508.021

    • 지원되는 IDE: Visual Studio 2017, Visual Studio 2019

  • PS5

    • Prospero SDK 3.00.00.27

    • 시스템 소프트웨어 3.00.00.38

    • 지원되는 IDE: Visual Studio 2017, Visual Studio 2019

  • XboxOne

    • XDK: July 2018 QFE-13

    • 펌웨어 버전: Recovery February 10.0.18363.9135

    • 지원되는 IDE: Visual Studio 2017

  • macOS

    • 지원

      • macOS Catalina 10.15.7, Xcode 12

    • 권장

  • macOS 최신 Big Sur, 최신 Xcode

    • 최소

      • macOS Mojave 10.14.6, Xcode 11.3.1

    • 머신 아키텍처 노트

      • macOS 타깃용 네이티브 Apple Silicon 예비 지원 추가*****

      • 일부 SDK에는 아직 ARM64 슬라이스가 포함되어 있지 않습니다(Steam, Vivox 등).

  • iOS / tvOS**

    • 권장

      • 최신 Xcode 12

    • 최소

      • Xcode 11.3.1

    • 타깃 SDK 버전 12.00 - 14.xx+ 지원

Release Notes

AI

New:

  • AIPerceptionSystem's class method RegisterAllPawnsAsSourcesForSense has now been marked as virtual.

  • Added an optional "FName Tag" to AISense_Damage, which gets propagated to the PerceptionSystem from AIStimulus.

  • The Environment Query Editor is now an engine plugin that is enabled by default; Individual users are no longer required to enable it through the experimental settings. The editor is still considered experimental and disabling the plugin will remove access to the feature.

  • Moved AI domain automation tests to 'System.AI' over from 'System.Engine.AI'.

  • Removed AIController dependencies of the AIPerceptionComponent and now it can be used with non-AI agents.

  • Made the UE4ML plugin public. Engine/Plugins/AI/UE4ML/README.md contains the basic documentation.

  • Switched AIPerceptionSystem's stimuli aging from previously using a timer to now counting elapsed time. In normal circumstances this doesn't make any difference, however, this change does help when trying to use the perception system in replays where UAIPerceptionSystem::StartPlay ends up not being called.

  • Added a blueprint-callable function to AIPerceptionComponent.GetPerceivedHostileActorsBySense and the native alternative GetHostileActorsBySense in addition to a new flexible filter GetFilteredActors that can use any arbitrary predicate for filtering.

Optimization:

  • Bit fields located in the PawnAction class have been optimized to pack into a single 32 bit allocation.

  • Added a tiny optimization to avoid calling AIPerceptionSystem.OnNewPawn when the perception system is configured to not care about new pawns.

Crash Fix:

  • Fixed a crash which occured when a new empty generator is added to an EQS query template while an EQSTestingPawn is using it.

Bug Fix:

  • Dynamic EnvQuery graph node titles will now update correctly when properties in their details panel are changed.

  • Initializing AI related USTRUCT data types will no longer have uninitialized fields.

  • Fixed calling AIPerceptionComponent methods SetSenseEnabled and UpdatePerceptionWhitelist when there is no SenseConfig registered.

  • Fixed UAIPerceptionStimuliSourceComponent's issues with unregistering from all senses if RegisterForSense has already been called during its lifetime.

  • Fixed issues in AIPerceptionComponent where perceptual data associated with actors were no longer valid and being broadcasted through delegates.

Behavior Tree

New:

  • Tick text on Blueprint BT Services that don't have a Tick implementation are now hidden.

  • Added the capability to categorize Blackboard Variables.

Improvement:

  • Added validation on instance arrays (aux nodes, parallel tasks and memory) to update stats properly and to prevent modifications while iterating through them.

Bug Fix:

  • Added minor BTDecorator_Loop fixes:

    • Loop will now force at least 1 execution.

    • Prevented the number of remaining executions from becoming a negative value.

    • Remaining time is now properly displayed.

  • Fixed an issue where iterating through active nodes would sometimes cause a node to be deactivated.

  • Fixed an issue where the BT evaluation of a Conditional Flow Abort skips a higher priority state if the evaluation triggers another Conditional Flow Abort in the previous state.

  • Fixed an issue where a BT task was being executed even though it had lower priority than another task higher in the hierarchy.

  • Fixed a computation issue of a child execution index of a composite node when the child is a task node with services.

Debugging Tools

New:

  • GameplayTasks debug data is now available when being compiled with developer tools.

  • Added the ability to select the local player for debugging in GDT through the command "gdt.SelectLocalPlayer".

Bug Fix:

  • [VisualLogger] Timeline fixes:

    • Prevented a freeze when trying to pan after zooming in.

    • Prevented panning below 0 by initializing the clamp range to the view range.

    • Prevented changing the zoom factor while panning outside the clamp range.

    • When using the right mouse button the Timeline will no longer snap to the closest element as it interferes with panning.

    • Removed the zoom sensibility due to the possibility of becoming stuck at a given zoom factor.

  • Fixed a bug in FVisualLoggerFilters::MatchCategoryFilters that resulted in log lines being filtered out if their category couldn't be found in FVisualLoggerFilters.Categories.

  • Fixed an issue where the EQS composite generator was not displaying CPU stats correctly.

  • Fixed an issue where clearing debug data would not properly clear the stored EQS debug drawing text.

New:

  • Added an option to debug draw poly flags and area flags in Recast Debug draw.

  • Added documentation tips to optimize Navmesh generation speed.

  • Added a templated RecastAStarGraph implementation so users can modify pathfinding logic using Recast Navmesh data.

  • Added the Console variables ai.debug.nav.refreshinterval and ai.debug.nav.displaysize to control the refresh rate and the size of the displayed area in the Navigation Mesh.

  • Added logs to track the geometry added when generating navmesh tiles.

Improvement:

  • Fixed the convex element export in the NavModifierComponent to improve the precision of navmesh generation around those elements.

Crash Fix:

  • Fixed a crash that occurred when changing navmesh generation parameters.

Bug Fix:

  • Fixed an issue where the Navigation Mesh was making the current map "dirty" on load without any user action.

  • Fixed an issue where unloaded levels were being added to the NavOctree, impacting the Navigation Mesh.

  • Fixed NavMesh method ‘closestPointOnPolyInTile' from returning the incorrect height.

  • Fixed missing Navmesh tiles when cooking Maps from the Editor's 'Launch' option.

  • Fixed the computation of the vertice count between mesh and detail mesh when creating the BVTree in DetourNavMesh.

  • Prevented the Navigation Mesh from being removed when a level is saved without a Navigation System.

Animation

New:

  • Added debug draw control support to the Control Rig Component.

  • Added support to bind a groom on a GeometryCache.

  • Added support to frame interpolation for subframe sampling to USD mesh animations.

  • It is now possible to import an animated groom through Alembic as a GroomCache asset and play it back on its associated Groom asset through the Groom Component.

  • Converted SkinWeightProfile scalability settings to CVars in order to be set through Device Profiles rather than Scalability settings.

Crash Fix:

  • Fixed a potential crash with Level of Detail Material mapping which occurred during a Skeletal Mesh merge.

Bug Fix:

  • Fixed Cyclic Coordinate Descent Inverse Kinematics (CCDIK) rotation limits in Control Rig Component.

  • Fixed virtual bones being generated on animations that don't animate them.

Animation Assets

Crash Fix:

  • Removing unused bones from the Skeleton no longer causes a crash.

  • Disabled Supplemental Streaming SIMD Extensions 3 (SSSE3) instructions, which was causing crashes when loading MetaHuman Creator assets on older CPUs that don't support SSSE3.

Bug Fix:

  • Fixed a CHECK_PUREVIRTUALS error in AnimMontage.h

Animation Blueprints

Crash Fix:

  • Fixed a crash ending PIE when a sequence is playing and is driving an Animation Blueprint with a Spring Bone Controller active.

  • Prevented a crash when re-selecting a group of trail nodes.

Bug Fix:

  • Output pose now initializes when no sources are present.

  • The Animation Blueprint Transition warning when the rule is bound is fixed. Pins are automatically disconnected if they are replaced with a bound rule.

  • RandomPlayer anim node will now support blend in times that are less than the frame delta, including 0.

  • Re-ordered AnimInstance's property access class method to copy after Event Graph methods in order for properties to be correctly transformed when accessed from Blueprint functions.

  • Fixed an uninitialized struct member in Property Access.

  • Fixed curve weights out of bounds access in the Inertialization node.

  • ControlRig AnimNode's exposed pins will now have the correct default values as specified in the source Control Rig Blueprint.

  • Fixed warnings about missing variables making property accesses non-functional.

  • Prevented memory corruption caused by unconnected pins on Control Rig nodes.

  • Fixed Animation Blueprint compiler issues occurring with collapsed graphs and isolated errors in state transitions.

  • Property Access nodes will now be able to generate unique property names.

Animation Tools

Crash Fix:

  • Fixed a crash from occuring when re-opening an Asset Editor after a new preview mesh is applied.

Bug Fix:

  • During the retargeting process, curves now copy correctly on child Animation Sequences.

  • Fixed Asset import path issues during the retargeting of Animation Sequences.

  • Fixed debug drawing of raw animation bones in Persona when component has post process or sub anim instances.

  • Changed layout of Animation Graph overrides to improve readability.

Import/Export

Optimization:

  • Improved motion blur for GeometryCache.

  • Improved support for GeometryCache starting with empty frames, such as fluid simulation, explosion, and other effects.

Crash Fix:

  • Fixed crash that would occur when importing a SkeletalMesh from Alembic with the "Merge Meshes" option.

Bug Fix:

  • Removed invalid Motion Vectors when importing GeometryCache with the option "Import Abc Velocities As Motion Vectors". This results in cleaner subframes.

Skeletal Mesh

New:

  • Added ENGINE_API Macro to Export SkeletalMeshVertexClothBuffer's Initialization method.

Crash Fix:

  • Fixed a crash which occured from concurrent access to a Skeleton's smart name map.

Bug Fix:

  • Fixed a conversion issue between signed and unsigned integer structs.

  • Added additional safety checks to ensure the bone transform is not being accessed out of bounds.

Removed:

  • Removed deprecated Skeletal Mesh Component check for Lerp Curves.

Audio

New:

  • Enabled the deletion of existing Quartz Clock Actors from Blueprints.

  • Added more efficient search options for Audio Streaming Cache.

  • Added Audio Modulation support for Sound Submixes from their Output Volume, Wet Level, and Dry Level properties.

  • Added new static gameplay functions to prime sounds for audio stream caching.

  • Updated Quartz with the ability to query for the duration of time that a given number of Quantization Type events will run based on the clock's sample rate and time signature settings.

  • Made Blueprint-accessible versions of audio-utility functions that were previously only available in C++, including:

    • GetFrequencyFromMIDIPitch

    • GetMIDIPitchFromFrequency

    • GetPitchScaleFromMIDIPitch

    • GetGainFromMidiVelocity

    • ConvertLinearToDecibels

    • ConvertDecibelsToLinear

    • GetLogFrequencyClamped

    • GetLinearFrequencyClamped

    • GetFrequencyMultiplierFromSemitones

    • GetBandwidthFromQ

    • GetQFromBandwidth

  • Added radius as a channel position parameter within the sound field format API.

  • Added a new log category for stream caching to independently control log levels from the logaudio category.

  • Added a Quartz function to return the current transport in a human-readable format.

  • Added a Quartz function that returns the time since a specified Quartz clock was last reset.

  • Added booleans to enable Base Submix, Submix Sends, and Bus Sends on Sound Base objects. These booleans replace the previous "Output to Bus Only" parameter. Assets created prior to 4.27 will be updated automatically.

Improvement:

  • Reduced memory overhead when using SoundCues by pruning branches that do not match the cooking target's quality level.

  • Added major optimizations for exhaustive search code path in Audio Stream Caching.

  • Raised maximum value for max global pitch scale.

Crash Fix:

  • Fixed crashes in Quartz when calling FQuantizedPlayCommand::OnFinalCallbackCustom().

  • Fixed crashes caused by race condition when adding new clocks to low-rate Quartz.

  • Fixed crash issue when Audio Modulation is enabled in an editor running using -nosound.

  • Fixed an issue where using a Submix Effects chain in Blueprints would cause a crash if no Submix Effects Preset was found.

Bug Fix:

  • Fixed issue where Sound Classes would sometimes load before certain referenced types could be known, breaking those referenced assets

  • Added fix to prevent rare memory stomp within 2DChannel map.

  • Fixed issue where sometimes a "divide by zero" check would get triggered if Quartz was using very high BPM.

  • Fixed ensure caused by clocks not being removed during Quartz Clock Manager shutdown.

  • Fixed issue with Vorbis in which it failed to load streamed data before the initialization phase was over. This primarily impacted Multichannel streams where the initial pages couldn't fit into 6 KB.

  • Fixed issue that caused activated reverbs to not be set.

  • Fixed channel-order issue when using 5.1 and streaming sounds.

  • Fixed an issue where the multi-channel source bus was using the number of frames instead of the number of samples.

  • Fixed a wrap-around issue on imported .ogg Vorbis files.

  • Fixed issues when importing audio files with higher than 16 bits.

  • Fixed an issue where restarting in virtual mode would not properly reset the active sound cue and playback time.

  • Fixed an issue where the multi-channel TSampleBuffer was using the number of samples instead of the number of frames.

  • Added a warning when applying a submix effect to a submix that doesn't exist.

  • Fixed an issue with "soloaudio" persisting in the Content Browser.

  • Added a fix for NaN appearing within the GetLogFrequencyClamped and GetLinearFrequencyClamped functions.

  • Added DLL exports to Audio Modulation statics.

Removed:

  • USoundBase::GetDefaultSoundClass() has been removed. Any references can be replaced with USoundBase::GetSoundClass() or UAudioSettings::GetDefaultSoundClass().

AutomationTool

New:

  • Added a Perforce helper to revert / delete multiple files at once.

Bug Fix:

  • Fixed the Replace All Reports feature in the Test Automation window not functioning the first time it is used.

Control Rig

New:

  • Prevented duplicate curves from being added when importing curves into Control Rig

Crash Fix:

  • Fixed a crash that occurred in cook builds that contain Full Body IK and Control Rig nodes.

  • Fixed a crash in Control Rig Editor that occured when connecting a sub-pin of a Get Variable Node to a Set Variable Node's value pin.

Bug Fix:

  • Changing pin values in Control Rig will now trigger the necessary recompile.

  • Control and Space will now work correctly with the "Add Mapped Elements" Blueprint function for the Control Rig Component. \

  • Fixed jittery movement animation when using Control Pin Value on the ModifyTransform Node's pin.

  • Prevented watched pins from causing ControlRig Editor to keep marking a ControlRigBlueprint as dirty after being saved.

Core

New:

  • Commandline argument "-buildmachine" now propagates to subprocesses (like ShaderCompileWorker) started by the engine.

  • The package difference test commandlet now produces a hexdump when differences are found.

  • In the editor preferences the "Enable Live Coding" option no longer requires an editor restart to take effect.

  • Improved feedback to Live Coding when it would not start due to a prior hot reload.

  • Added messaging about delays to live coding to accommodate cases where the Unreal Editor has stopped in the debugger when a system using a large number of processors.

  • Improved live coding feedback in the Unreal Editor when compiling is initiated using the keys Ctrl-Alt-F11.

  • Updated messaging when live coding is enabled after using hot reloading.

  • Moved live coding warnings from the live coding window to the log.

  • Fixed misleading comment on PostLoadMapDelegate function.

  • Added a UTickableWorldSubsystem as a base class for all world sub systems that need to be ticked along with their world. This is now the preferred method for UWorldSubsystem that also inherits from FTickableGameObject as it prevents some common pitfalls. By default:

    • It implements FTickableGameObject::GetTickableGameObjectWorld to return the subsystem's world.

    • It prevents the subsystem from ticking as soon as the subsystem is deinitialized.

    • It prevents the subsystem's CDO from ever ticking.

  • Improved performance for Unreal Insights Timing View when having a large number of frames.

  • Editor asset tagged property loading is now more resilient by seeking the expected end position and logging an error, as opposed to setting the archive into an error state.

  • Added new WIN32_WINDOWS macro to avoid a compiler error in SwitchBoardListener.

  • Added support for UE as a Library, which enables external applications to run and control their own UE4 instance.

  • Operator new overloads will now always allocate at least one byte.

  • Added new alignment-aware C++17 new/delete operator overrides.

  • Extended FGenericDataDrivenShaderPlatformInfo settings to support "opt-out" settings by adding the ability to set default values.

  • Setting GIsRequestingExit on the start of Engine Tick is now disabled unless SET_REQUEST_EXIT_ON_TICK_ONLY is enabled.

  • IoStore Diff command - helper is a command to diff two sets of container files. An example use:

    -UE4Editor-Cmd.exe-run=IoStoreCommandlet-Source=<Path>-SourceCryptoKeys=<PathToCrypto.json>-Target=<Path>-TargetCryptoKeys=<PathToCrypto.json>-DumpToFile=<OptionalFilename>

  • Added FPackageName overloads for FAnsiStringView.

  • A new package option to specify the URL to where crash reports will be sent, in cases where the crash report client is packaged with the game. This option can be found in the advanced package options, by default crash reports from the Editor are sent to Epic unless otherwise specified.

  • Support for single quotes around attributes has been added in the FXmlFile.

  • IoStore command to List container files to csv. An example use:

    -List=<ContainerFileNameOrWildcard> -csv=<filename> Outputs <PackageId, PackgeName, Filename, Container, Offset, Size, ChunkHash>

  • Included the name of the slowest unit test in a warning log for when a less than two second smoke test run time is executed.

  • Added coarse parallel name batch loading.

  • Added C++17 structured binding support for TTuple.

  • The TWeakInterfacePtr<T> class now has an API that is more consistent with the weak object pointer class.

  • Enabled comparison of string views of different types Compare, Equals, and the associated operators are now supported for any pairs of string views and C-style strings that FPlatformString has a comparison function for.

  • Added additional descriptive information to FMallocBinned2 asserts when they fire.

  • The Engine can now build successfully with CHECK_PURE_VIRTUALS enabled in order to verify that all PURE_VIRTUAL functions are correctly implemented in subclasses. UClasses that use PURE_VIRTUAL must be marked abstract and UStructs that use PURE_VIRTUAL must have the WithPureVirtual trait set.

  • Added RetainedRef Template to be used as a function parameter when the reference will be held beyond the length of the call, causing a compile error when passing an rvalue.

  • Added find functions for string views.

  • In FPropertyTextUtilities, the TextToPropertyHelper method can now have PortFlags specified.

  • Extended MakeValue and MakeError to take a variable number of arguments.

  • Added FNameBuilder to simplify passing FName to functions that take FStringView.

  • Changed DDC CachedDataProbablyExists to skip slow cache backends.

  • Allow copy constructor and assignment of ValueOrError template.

  • Smoke test responsible for finding uninitialized struct members will now also try to construct all structs with 'new FMyStruct' syntax to find properties that are uninitialized despite their struct having a custom default constructor.

  • Added const access to source in the String Reader.

  • Added command line options to PerfReportTool "-Add -cleanCsvOut <filename>", for writing out a standard format .CSV file with events stripped.

  • Added wildcard support to PerfReportTool for metadata filter values.

  • Recompiled CSV tools as 64-bit.

  • Added PerfReportTool SummaryMetadata disk cache support. This skips CSV processing entirely for files already in the cache, which is significantly faster for bulk queries.

  • Added PerfReportTool Scrollable summary tables with the command line option "-scrollableTable". This makes the summary table scrollable, with frozen first rows, columns, and automatic colorization. These are useful for historical data tracking.

  • Added Csv.bin compression support. Run CsvConvert with pass -binCompress 1 or 2 to enable compression on .csv.bin files.

  • Updated clang atomics to use newer atomic functions in favor of sync and added support for 128-bit atomics for platforms that support it.

  • Added Support for multiple wildcards in arbitrary positions has been added to CsvTools. Wildcards can be used for PerfReportTool reports and CsvToSvg stat lists.

  • Added a checkpoint heartbeat hang detector to help diagnose issues such as infinite loading screens.

    • This detects cases where all the main threads are ticking but the high level logic is stuck.

    • Adds calls to ThreadHeartBeat class methodMonitorCheckpointStart and MonitorCheckpointEnd to use.

    • If it takes longer than the threshold to reach MonitorCheckpointEnd, a fatal error will be thrown.

  • Added MakeBinaryConfig commandlet. This will optionally run at stage time to generate a BinaryConfig.ini, which if present at runtime will load up ini files.

    • Can be enabled in Packaging settings, or -makebinaryconfig option to BuildCookRun.

    • Can use -textconfig at runtime to go back to non-binary config files.

  • Added const access to source in String Reader.

  • Removed several low-value/high-frequency profiling scopes to improve performance and stability while capturing.

  • FObjectIterator has now the option to lock the global UObject array when it's iterating over it to prevent thread safety issues when iterating over all objects while other threads are creating new UObjects.

  • Added cvar ‘Engine.DelayTrimMemoryDuringMapLoadMode' that will delay calling TrimMemory until the end of LoadMap.

  • a CsvProfiler stat for 2d camera speed has been added to Profiling.

Optimization:

  • Asset registry optimizations have been made to reduce Engine initialization time.

  • Optimized the time required to resolve call stack symbol names on Windows OS. The Engine now loads and caches the debug symbols on demand rather than loading all debug symbols at once on the first request.

  • Asset registry optimizations have been made to reduce Engine initialization time.

  • Optimized FName batch loading and added FArchive batch serialization

  • Saved one-hundred and twenty milliseconds to next gen load time by removing superfluous sleeping on a critical path.

  • Optimized Cooked AssetRegistry loading optimizations.

  • Improved performance of GetSubSystem calls from C++ code.

Crash Fix:

  • Fixed crashes when running commandlets with -noshadercompile argument.

  • Fixed crash when polling to see if a UTexture is ready for PostLoad while it is processing it's texture data on a background thread.

  • Fixed a crash that could occur if an imported package was garbage collected during loading.

  • Fixed hot reload crash caused by EInternalObjectFlags' PendingConstruction function.

  • Fixed possible crashes when loading Blueprints with circular dependencies.

  • Fixed a crash in UnrealHeaderTool when parsing a BlueprintImplementableEvent with an int64 return type.

  • Fixed a crash that occurred when working with map instanced properties if the map's sparse storage has gaps.

  • Fixed a crash from occuring when decryption of a pak signature fails.

  • Fixed a crash which occured when running commandlets with the -noshadercompile argument.

Bug Fix:

  • Fixed an issue where files were not getting cleaned after hot reloading.

  • Fixed debugger support in Live Coding to properly display FName values.

  • Garbage Collection will now treat cluster objects with Internal Object Flags set to Garbage Collection Keep, the same way as if they are in the root set to prevent them from being destroyed while being referenced by the async loader.

  • Fix for non-unity build of BuildPatchTool.

  • Fixed automated test compiler error in shipping builds.

  • Fixed hot reloading where a change would not be detected due to a mismatch between how Unreal Editor and Unreal Build Tool formatted the module name.

  • Fixed an error where changing projects from the Unreal Editor which had been "Quick Restarted" from the live coding console would result in the Unreal Editor failing to start properly.

  • Fixed multiple issues where live coding would fail to compile code changes.

  • Fixed issue where live coding fails to compile changes when both the editor and game are running.

  • Fix for uninitialized variables.

  • Fixed the building of the live coding console in non-unity builds.

  • Fixed a compile issue in the live coding console when building without pre-compiled headers.

  • Fixed misaligned noexport structs.

  • Fixed Missing initializers for bool members in source control.

  • Added a missing call to the EngineSubsystemCollection Deinitialize method when on engine shutdown is invoked.

  • Missing initializers for bool members in template project defs.

  • Fixed potential race conditions when calling GC'd objects' destructors.

  • GC weak references will now be cleared after gathering unreachable objects as more objects become unreachable during the process.

  • Fixed FString class method SanitizeFloat from returning "0.0" when built under the /fp:fast command.

  • Fixed a hot reload assert when reloading an Engine-derived type.

  • Fixed POSIX platforms not honoring the -log= parameter in forked processes.

  • GarbageCollection: Changed InternalObjectFlag priority to make sure that objects are not being destroyed while being referenced by the async loader.

  • Fixed a memory stomp that occured when comparing file paths.

  • Improved instanced propagation.

  • Creating an FName with FNAME_Find no longer asserts if the name length exceeds the maximum name size.

  • Fixed code generated by UnrealHeaderTool when a const UObject pointer is returned by a UFUNCTION.

  • Fixed a problem in ArrayProperty's SerializeItem method when using a user-defined structured archive formatter, caused by a mismatch between the saving and loading branches when doing unversioned property serialization.

  • Fixed a UnrealHeaderTool error when building a project inside a .tmp folder.

  • FMallocBinned3 will now try to allocate memory from a bigger pool to avoid Out of Memory crashes.

  • Fixed perfect forwarding in the PimplPtr header.

  • Fixed a possible buffer overflow when reporting a failed 'ensure'.

  • Due to Windows 7 no longer being supported by Microsoft, the bundled version of DbgHelp.dll is no longer compatible.

  • Added a missing call to AsyncLoading's class method PumpEssentialAppMessages when processing loaded packages PostLoad and CompletionCallbacks on the GT.

  • TArray's conversion constructor now enables library templates to work correctly.

  • Fixed a parse error in UnrealHeaderTool when a UENUM is deprecated.

  • Fixed a race condition in FMallocLeakDetection.

  • Fixed backward compatibility with 32-bit platforms for LLM tags tracing.

  • Prevented an object from being accessed from weak pointers after it's been destroyed and fixed a race condition between FWeakObjectPtr and Garbage Collection AsyncPurge.

  • Changed the checkSlows to checks in theFixedAllocator template to allow them to detect user error in Development builds.

  • Added static assert to detect inherited Structs which are not polymorphic unless inherited base struct also is polymorphic. If this happens, there are two options:

    • Add a vtable to the superclass (and a virtual destructor), or

    • Remove any virtual methods from the derived struct

  • Fixed IsContiguousContainer template concept checking compile error.

  • We now check that cache keys are valid before they are shortened in the Derived Data Cache.

  • Avoided a stack overflow in FOutputDeviceRedirector.

  • CsvToSVG will no longer throw an exception in multiple CSV mode if a single CSV has missing metadata.

  • Fixed edge cases with stripping by events.

  • Fixed a bug causing an exception in graph generation when the temp directory contained spaces.

  • OutputDeviceRedirector's buffered lines will now only be emptied if there are any output devices to redirect to.

  • Fixed a bug that prevented the PkgInfo commandlet from loading UAsset files.

  • Fixed a potential concurrency issue when renaming objects and enabling UObject hashing error asserts in development builds.

  • Fixed a rare case which a compressed IO read re-using a cached buffer that wasn't intended.

  • A Compiler error with Visual Studio 2019 has been fixed.

  • Async loads from the async loading thread during the final async loading flush will now also be allowed to prevent a safeguard from firing.

  • Async loading will no longer be allowed after the final async loading flush to prevent crashes on exit.

  • Fixed a typo of "Tuesday" in FDateTime.

  • FPackageReader will now copy the Editor only filtering flag from the underlying reader archive to the owning package reader.

Deprecated:

  • Deprecated UPackage::Guid.

Removed:

  • Removed safety check from FUObjectAllocator's FreeUObject constructor.

Cooker

New:

  • Reduced memory usage of EDLCookChecker in Cooker memory.

  • AssetRegistry EditorOnly dependencies. This change adds different Game and EditorOnly dependencies to the AssetRegistry.

  • Added command -NeverCookDir option to the cook commandlet.

  • Added a cooker parameter which allows DLC cooks to override the platform name used to find and load the development asset registry. Allows different platforms to use a single registry where that makes sense.

  • Added a "-BasedOnReleaseVersionPathOverride" parameter which can be used to override the value generated by GetBasedOnReleaseVersionPath.

Bug Fix:

  • Fixed pathing mismatches in DLC cooking when the cooker executable is built with a unique build environment, so it is not rooted in the Engine/Binaries/<platform>.

Network Profiler

  • Re-added a "Check All Connections" checkbox functionality in network profiler that got removed by mistake.

  • Fixed issues with network profiler graph view not loading if there are fewer than 30 frames worth of data in the profile.

  • Fixed anchoring to work with the "Check All Connections" checkbox.

Unreal Insights

New:

  • Network predication traces can now be examined using the external Unreal Insights application.

Bug Fix:

  • Fixed issues when tracing data from multiple threads.

  • Fixed a crash in NetworkPredictionInsights when jumping in time for a live session.

UnrealPak

  • Signed pak files now ensure the validity of the pak file's index.

Datasmith

New:

  • Actor visibility attribute is now serialized. An exporter can decide to export hidden actors that way.

  • You can now add a .neu.* extension (.neu.1, .neu.2, and so on) to a Creo neutral format.

  • A Datasmith scene can now declare new materials that inherit existing Material Instances and override their parameters.

  • Dataprep has been enhanced to allow operators/filters cards to look in the graph.

  • The Dataprep operators/filters palette has a new look and feel.

  • The Dataprep string array in filters has a new look and feel.

  • Cleaned up statistics displayed in the Visual Dataprep 3D viewport.

  • A Plane Cut operator was added to Dataprep.

  • The UI for Dataprep stats has been improved for easier visibility and use.

  • Dataprep now has the ability to horizontally resize action nodes.

  • Dataprep can now collapse a group of actions.

  • Dataprep has a new operator to set collision complexity.

  • The Datasmith Revit Exporter now corrects Structural Steel Connection pivots.

  • In Dataprep, you can now set format-specific import options.

  • Dataprep has a new operator to resize textures.

  • A panel was added to visualize, browse, and select components in Visual Dataprep.

  • Dataprep now has the ability to create a filter from a selection.

  • You can now disable/enable groups of actions in Dataprep.

  • In Datasmith Revit exporter, you can correctly export hierarchy based on Super Component.

  • Datasmith Revit exporter provides Floors and Ceilings pivots at scene origin instead of at their own local pivots.

  • Added support for thin translucency shading models on the Datasmith UE PBR (physically based rendering) materials.

  • Facade now includes an exposed variant API, with bCleanupUnusedElements parameter to FDatasmithFacadeScene::ExportScene().

  • Added AP242 XML Step, XPDM, SolidEdge formats in Datasmith supported file types.

  • Add support for reading FBX metadata into Datasmith when importing scenes from DeltaGen and VRED.

  • Fixed a memory corruption issue on export of scene in 3dsMax exporter.

  • Revit Datasmith exporter now exports luminance color temperature.

  • A processing time control in CADWorker has been added. This prevents a DMU from not being imported due to a referenced file looping. The processing max time is based on the size of the file to process, and its format. Only the blocked file is canceled. This can be disabled with cvar r.CADTranslator.EnableTimeControl=0.

  • In Dataprep, the filter is now updated from Selection with a simpler UI, and uses object/actors path as the unique ID.

  • Update of KernelIO dll with 2021 sp1.2 version. With this new release, the supported version by format are:

    • CATIA V5 (.CATPart, .CATProduct, .cgr) R10 → R31

    • CATIA V6 (.3Dxml) 2011 → 2013X

    • 3D Experience (.3Dxml) 2014 → 2020X

    • Inventor (.ipt, .iam) All → 2021

    • JT (.jt) 7.0 → 10.5

    • Pro/Engineer part files (.prt, .asm) ProE 13 → Creo 7

    • Pro/Engineer neutral files (.neu) ProE 13 → WF5

    • SAT : ACIS (.sat) All → R27

    • Solid Edge (.par, .asm, .psm) All → 2020

    • Solidworks (.sldprt, .sldasm) 99 → 2021

    • STEP (.stp) 203/214/242

    • XT Format (.x_t) All → 32

    • NX / Unigraphics (.prt) 11 → CR 1957

  • Navisworks 2021 is now supported by the Datasmith Navisworks exporter.

  • For PLM XML files, some error messages have been replaced by warning messages when files are prevented from parsing.

  • Added new Collaborative Viewer content: two new templates in Collab Base that use shared resources.

  • Support has been added for a multilingual installer for the Revit exporter.

  • For the Navisworks importer, Mesh Actors for merged geometry are now re-pivoted to the bottom center of the bounding box.

  • Added a Mobility property to the Datasmith Area LightActor:

    • The Datasmith Area Light Blueprint now sets its components (mesh/light) for mobility in construct in accordance with this.

    • Dataprep Set Mobility supports setting ADatasmith Area Light Actor (in addition to the usual Scene Component).

Crash Fix:

  • A crash no longer occurs when an asset referenced by a captured UObject property in the Variant Manager is swapped with an asset of an incompatible class.

  • Fixed a crash that occurred when trying to capture Variant Manager thumbnails from the viewport during standalone mode.

  • No longer crashes when a landscape is imported by Dataprep or reimported from Datasmith.

Bug Fix:

  • Fixed the Variant Manager spawning function director outer ALevel Variant Sets Actors so they always spawn on the persistent world levels instead of on the vestigial worlds of sublevels.

  • Fixed the Variant Manager function directors that were unnecessarily collected and recreated repeatedly.

  • It is now possible to set nullptr values on UObject property captures in the Variant Manager.

  • User-set Material overrides are no longer replaced when reimporting Datasmith scenes in some scenarios.

  • Fixed support for Variant Manager thumbnails using transparency.

  • For DataSmith Content StdMasters:

    • Fixed normals when using triplanar mapping.

    • Fixed POM when using rotated UVs.

    • Added double-sided support to normals.

    • Reduced cost and complexity of triplanar mapping.

    • Tweaked glass master default values.

  • Fixed an issue where Variant Manager visibility changes were not applied to the viewport on some scenarios when the viewport's Realtime property was set to Off.

  • Added the newest decals to be on par with Twinmotion, and fixed a POM issue.

  • Updated decal material usage to avoid material compile failure.

  • FDatasmithSceneCleaner::Clean() will no longer remove materials that are referenced only by a variant.

  • Fixed incorrect exported joint indices when exporting skeletal meshes to USD if the skeleton has a different number of bones than what is used by the skeletal mesh.

  • Fixed an issue in the material generation by a datasmith import. The expression names in the material functions used by a Datasmith-created material are now unique.

  • Emissive master now uses the alpha channel of the Luminance Filter Map as an opacity mask.

  • Tweaked triplanar projection, added panning in triplanar, tweaked glass default values, and added decals material permutations.

  • The following fixes have been made to the Automotive and Architecture Collab Viewer templates:

    • 3D cut plane no longer cuts the model.

    • Added creation of bookmarks at Runtime.

    • You can now load saved states in the editor.

    • Changed the title of the popup window of datasmith runtime load.

    • Removed the Transmission hierarchy in the architecture template.

    • Fixed Reset and Reset All Fail on the Collab Viewer with data imported through runtime Datasmith.

  • Fixed a broken documentation link on the import help button and added an automated test to make sure the link stays valid.

DevTools

New:

  • Added a custom solution section to allow Visual Assist to identify the solution as an Unreal solution.

Bug Fix:

  • The full path to the VsCode compiler is now specified, as well as command line arguments in the format expected by the compiler.

Automation

New:

  • The automated tests report is now more resilient in cases of critical failure or timeout.

    • The JSON report is saved after each test execution.

    • Test artifacts are now copied after each test execution.

    • The HTML report now displays not run and in process test states.

    • Removed the undocumented command line option checkpoint.

Bug Fix:

  • Corrected an issue with degenerate artifact creation. Attempting to create files with the same source and destination folder hierarchies when the Role was null would lead to file errors. These required five 30-second timeouts each to skip when ending runs using -skipserver

  • Fixed an issue with NullPointerExceptions on run when the Configuration's "Build" was null.

  • Fixed automation and gauntlet tests exit code on Unix systems (docker).

    • FPlatformMisc::RequestExit(force = true) caused editor exit with code 1 due to implementation for the UNIX platform.

    • This led to problems in the CI pipelines, the CI stage was sometimes assumed to have failed despite the fact the tests were ok and the tests' status code was 0.

    • Added a simple call of RequestExitWithStatus to correct the problem.

AutomationTool

New:

  • Added the AdditionalIoStoreOptions parameter to the UAT ProjectParams class, which lets you supply extra parameters to the iostore commandlet when staging a build.

  • Fixed an incorrect default value being applied for the skipiostore parameter in UAT.

Bug Fix:

  • Corrected the handling of the -skipdeploy UAT \ UBT command. This now reduces the time it takes to Launch the game from the Editor.

  • Fixed staging chunk assignment failing when there were case mismatches between paths in the staging manifest and the pak chunk lists.

  • Corrected a case during project param creation where we still assumed there was a single editor target per project.

Memory Profiler

Bug Fix:

  • FileCache memory is no longer attributed to the first caller.

UnrealBuildTool

New:

  • Fixed issues when running UBT in a build environment without a local data directory, by falling back on the Engine folder.

Bug Fix:

  • Corrected module dependencies not working when a module has no source files.

  • Fixed IsHostOnVpn() always returning false, so Incredibuild isn't used for building C++ over VPN.

UnrealHeaderTool

  • The ExpandEnumAsExecs metadata now properly handles spaces in a comma-delimited list of parameters.

Editor

New:

  • When toggling sub-level visibility on the Levels Editor, Multi-User editing now reflects the corresponding game flags so that -game nodes will properly display updated visibility. Users can opt-out of this behavior by disabling the Reflect Level Visibility to Game option in the Multi-User project settings.

  • The spline point property editor now allows toggling between absolute and relative position and rotation.

  • Added Copy and Paste options to the context menu on each field of the spline point property editor.

  • Specific fields and interp types for subclasses of USplineComponents can now be disabled.

  • Reworked water actor sprites to a more dynamic system.

  • Water actor sprites are now replaced with an error icon if certain checks fail.

  • Added new icons for the WaterLandscapeBrush and WaterMeshActor.

  • Package save events are now captured when running in -game mode. This is to support remote recording of takes on headless nodes.

  • Transaction events on Multi-User are now synchronized on nDisplay nodes.

  • Added an API ConcertSyncClient module that enables users to participate in transaction filtering. API users can indicate if a UProperty or UObject should be included, excluded, or have default behavior applied to it.

  • Added support to nDisplay to properly synchronize Multi-User activity stream when the nDisplay nodes first connect to the session. All nodes will coordinate their activity sync and they will finalize simultaneously. Note: If a node reconnects during an active session after initial synchronization, it is no longer possible to synchronize it. All nDisplay nodes should be restarted if synchronization is required.

  • Implemented a custom asset editor for waves assets which shows a preview of the resulting waves.

  • Multi-User take recording is now automatically available when connected to a Multi-User session. Previous versions required you to enable a special CVar.

  • Added a new Editor preference (Check References on Delete). When disabled, Unreal Engine no longer checks actor references when deleting actors from the World Outliner or warns about possible lost references. This can reduce the delay of initial deletion for levels that contain a lot of soft references.

  • Users can now control the maximum transmission rate for packets on a UDP connection. The default value is 1 Gbit/second. This value can be adjusted in the Project Settings for UDP Messaging.

  • Users can now use new controls in the Take recorder to specify who is recording and who provides the source data to nodes connected in a Multi-User session. This feature is only enabled when connected to a Multi-User session.

  • FNames can now be initialized with a string that starts with an underscores in the Editor.

  • Reference Viewer now has an option to show only the filtered node.

  • Reference Viewer now has a Compact Mode that hides thumbnails on the graph nodes and reduces the space taken by each one.

  • Added an Editor delegate that is broadcast from ObjectTools::AddExtraObjectsToDelete. It allows the insertion of secondary assets that should be deleted at the same time as the ones selected by the user.

  • Added icons for landscape BP brush actors.

  • Added an option to UTextureFactory to specify the source image color space. This saves processing time when importing MDL materials by creating the textures with the right color space at the factory level.

  • You can now load a material from a module path and a definition name instead of loading it from a file.

  • You can now add and remove MDL module search paths for the MDL importer.

  • Very large (2GB+) skeletal meshes can now be imported into the Editor.

  • Name resolution can now be performed on TCP Message Bus and File Server connections. You can use IPv4 style addresses or a named address.

  • The Reference Viewer no longer displays the graph state overlay.

  • 16-bit grayscale PNGs are now imported as 16-bit gray textures.

  • Added support for changing the aspect ratio axis constraint when the viewport is locked to an Actor.

  • If there is a still pending open transaction when trying to launch PIE, UE now cancels the transaction instead of preventing PIE from being launched.

  • Added -BulkCheckout and -GarbageCollectionFrequency=X options to the ResavePackages commandlet. -BulkCheckout causes all assets likely to be saved during the commandlet's run to be checked out of source control before loading packages. This reduces the number of source control operations needed when working with large numbers of files. -GarbageCollectionFrequency=X helps control how often garbage collection happens, which also helps when operating on a large number of Assets.

  • Changed the spline SnapToPoint / SnapToActor default hotkeys to Shift+P / Alt+Shift+P to avoid conflict with viewport navigation hotkeys.

  • Added spline point selection buttons to the spline details panel "Selected Points" category.

  • Plugins for remote control protocols (DMX, OSC, MIDI) now have their own icons.

  • Fixed a regression in Editor loading time when using GameplayCues.

  • Added support for negative values in CurveAtlas when color adjustments are disabled.

  • DDC - Added detailed stats about the DDC that are browsable in the Editor.

  • Added an Editor setting that writes to the engine global setting key/value storage instead of the environment variables. If you're already using the global DDC environment variables, these will remain in use.

  • Added per-project settings you can configure to recommend the setup of a globally shared DDC. These settings are off by default.

  • Added code support for using the gameplay tag UI in other Editor customizations via GameplayTagsEditorModule.

  • Added a new SGraphPinStructInstance class to make it easier to build custom UI for struct pins in Blueprints.

  • Added support for non-square resolutions in Curve Atlas.

  • Added default color and grayscale calibration chart materials to Engine content and BaseEngine.ini project settings.

  • Added the -FrameproEnableContextSwitches command-line interface argument to turn on context-switch tracking in Framepro captures.

  • For the MDL Importer, imported material graphs no longer contain unused constants and parameters.

Crash Fix:

  • Fixed a crash that happened when moving Light Cards on an nDisplay Stage Actor.

  • Fixed a crash that was caused by an uninitialized FBox in BaseMeshPainComponentAdapter causing infinite recursion.

  • Removed a message dialogue from skeleton processing to fix a crash with destroying SAssetPicker while it is rendering thumbnails in its Tick().

  • Fixed multiple crashes related to selecting options from Event Graph context menus.

  • Fixed how the base address was being calculated in FPropertyValueImpl::EnumerateObjectsToModify. This caused a crash with UObjects that use Sparse Class Data.

  • Fixed SVN integration crashing the Editor on Mac because libserf-1.dylib was not found.

  • Fixed a crash that happened when right-clicking certain elements in the source control history.

  • The editor no longer crashes when importing a corrupted EXR image.

  • Fixed a crash that happened when dragging new elements onto arrays of Actor instances.

  • Fixed a crash when reimporting a UDIMs base texture that was renamed.

  • Fixed a crash caused by Replace References.

  • Fixed a crash that occurred when trying to use Blueprints derived from AUsdStageActor in standalone mode.

Bug Fix:

  • Fixed a bug with the CSVToSVG tool that caused invalid HTML to be generated when system locale used commas as the decimal separator.

  • The Multi-User actor no longer displays in raytraced reflections when running in -game mode.

  • Fixed an issue where water actor sprites would not load due to Water Subsystem being nullptr in the actor constructors.

  • Client windows no longer spawn in a position where their title bars are hidden.

  • Fixed a bug where the first texture imported in an Editor session could have the wrong settings applied to it.

  • The type of first texture imported in an Editor session is now correctly identified.

  • ConfigureEnabledPlugins() now reports success when plugin count is zero. (Contributed by WenchaoXia)

  • The Ctrl + Alt + Shift + P keyboard shortcut now works while in Play In Editor mode.

  • Fixed an issue with a sub-level not being garbage collected properly when creating a new world from a template.

  • Fixed a sub-level offset issue that happened when loading a top-level world in World Composition when that sub-level had been already loaded.

  • Added a missing water sprite category in the viewport options. Billboard components now need to be added to the CDO in order to be detected by the Editor as proper sprite categories.

  • Fixed an issue that caused the icon for river water body actors to appear oversized the first time a water actor was placed in the level.

  • Fixed two separate issues that prevented the Goto Definition Editor feature from working in relocated Installed Builds.

  • Added support for displaying floats greater than e18 in the Editor, and removed cast losing double precision.

  • Fixed a bug that prevented reporting when not using the crash reporter. (Contributed by Phyronnaz)

  • SDetailsViewBase now allows deferred actions to call EnqueueDeferredAction. These additional deferred actions are then immediately processed in the same frame.

  • Fixed a bug with instanced objects not updating the reset to default state in the parent object when changed.

  • Fixed a bug where explicitly setting the IsEnabled attribute of an FDetailWidgetRow would not be respected, because SDetailSingleItemRow was only checking IsBound(), not IsSet() as well.

  • The Paint tool is now correctly grayed out when painting textures with mesh paint if the mesh has no paintable textures to cycle through.

  • Fixed an issue that caused Fixed FApiContext::AddSearchPath to register a folder's parent folder to the MDL path instead of the folder that was requested.

  • Fixed an issue that caused a missing portable call stack in the crash report generated when the Editor had more than 256 threads and the crashing thread was not in the first 256 threads visited by the OS.

  • Fixed an issue that caused the Editor to deadlock randomly while reporting a failed ensure().

  • Fixed an issue that caused sublevel components to fail to toggle when changing sublevel visibility in the Editor.

  • Fixed an issue that caused the crash reporter UI to sometimes take several minutes to process and display crash information after an Editor crash.

  • Fixed a bug that caused HighRes Screenshot SetResolution to ignore Resolution Scale.

  • Improved the messaging for file I/O errors in JSON deserializer that usually happened when users ran the Editor from a network drive that disconnected or failed to read.

  • Fixed an issue where specifying multiple TCP connection endpoints from the command line did not work.

  • Fixed a bug that prevented Camera Shake Actors from previewing correctly.

  • Range selection in the Persona tree view now behaves correctly when the initial selection is made from the viewport and the second selection is made from the tree view.

  • Updated string table CSV export to apply the .csv extension.

  • Fixed a bug that caused disabled toolbar combo buttons to incorrectly appear enabled when shown in a sub-menu.

  • Fix loading map status text displaying the word "loading" twice.

  • Fixed duplicated transactions when pasting sub-objects

  • Fixed an issue where some Asset editors would end up in a non-functional state after a window closing request was canceled, including the Blueprint Editor showing 'Unrecognized Tab' panels.

  • Preview widgets are now marked as being in Design mode before being destroyed, to prevent them from invoking NativeDestruct in the Editor.

  • Added ConditionalPostLoad call before building collision on a display mesh, fixing a potential issue where complex collision meshes didn't work properly in PIE.

  • Transient Actors spawned through BP are now also transactional.

  • Fixed an issue with FBX exporting where multiple meshes with the same material would receive the default material instead.

  • Camera piloting now takes into account the camera component's additive offset.

  • Fixed issue where SkipProperty wasn't being passed to WriteRow in the data table CSV writer.

  • Fixed a vulnerability due to an integer overflow and a heap overflow when loading a modified TGA file.

  • Fixed 'More Actions' menu items not doing anything when using the embedded gameplay tags editor within the Blueprint editor details panel.

  • Fixed an issue where transform changes were applied twice to attached Actors when selecting both the Actor and its parent.

  • SGraphEditor now correctly returns the value of GetSingleSelectedNode.

  • Fixed an issue where expansion state was not being properly retained in trees with more than 500 items

  • The new mesh paint mode is now correctly hidden if legacy mode is set in the Editor preferences.

  • Fixed an issue that caused map built data to be marked dirty too aggressively (for example, when placing an invisible / logical actor that did not affect lighting in the Level).

  • Fix a crash that happened when syncing out of date Assets in the Editor if a dependency package was not found.

  • Fixed a crash that happened when importing an OBJ file and using the create instanced materials option.

  • Updated AdvancedCopyPackages to pass the bShouldSuppressUI flag in headless mode.

  • Fixed FEditorModeTools::IsSelectionAllowed to allow selection if any Editor modes do instead of just checking the last mode in the list.

  • Fix an issue that caused a duplicate copy of a package to remain on disk with the old name when renaming the package.

  • Open Color IO UI: Fixed a UI issue where Colospace Index was not serialized into string and therefore appeared as invalid on instanced objects.

  • Fixed a bug that caused DPI adjustment to be incorrectly applied to the new window spawned when starting PIE.

  • Fixed an issue where socket snapping didn't work unless the component was the root component.

  • Base brush properties (size, strength, and falloff) are now correctly restored after leaving and re-entering Mesh Paint mode.

  • Fixed an import problem with FBXs containing LODs with meshes which could not be triangulated (for example, due to being non-manifold). Problematic meshes will be omitted and a warning will be generated. If a LOD cannot be imported at all, it will be auto-generated instead.

  • Fixed a hang during startup when a Blueprint-based Trace Source filter was active.

  • Fixed a bug with spline component Undo/Redo when the component was selected, rather than the Actor.

  • Reimporting a .FBX file no longer deletes custom metadata on the reimported assets. Only the FBX metadata are now affected by the reimport.

  • Fixed an issue where the FBX import would wrongly assume the importing of a skeletal mesh when the FBX file contained animation but no skeletal mesh.

  • Fixed a potential failure in the FBX collision mesh import.

  • When importing a FBX file, fixed an issue where some custom curves configurations were not properly imported, causing incorrect tangents.

  • Fixed a bug in the editor which would open the file selection window twice when reimporting an asset with the "reimport with new file" option.

  • In MDLimporter, clears the log error when an .mdl file can't be imported because the plugin was built without MDL SDK.

Cascade

Crash Fix:

  • UParticleModule is now marked as within ParticleSystem to prevent instancing with other outers, which caused several crashes.

Content Browser

New:

  • Asset tooltips now display data tags based on the asset's parent class.

  • Added a Writable Content filter to the Content Browser.

Bug Fix:

  • Fixed a bug that prevented any type of Haptic Feedback assets from being created in the Content Browser.

  • Fixed a bug that prevented the creation of Sub UV Animation assets from the Content Browser.

  • Fixed a bug that prevented the creation of UForceFeedbackAttenuation assets from the Content Browser.

  • Fixed a bug that prevented native classes from appearing in the Content Browser Collections.

  • Fixed a bug that caused thumbnails for child Blueprints which override parent Blueprint data to render incorrectly.

  • Updated SetPrimaryContentBrowser in FContentBrowserSingleton to verify that the browser can be set as primary.

  • Fixed an issue where files could not be dragged into new folders in the Content Browser's column view.

  • Optimized source control operations when renaming Assets to fix a large stall when renaming or moving a large number of files.

  • Advanced copy will now find all dependencies, even if they are not in memory.

Geometry

  • Prevent crashes when creating mesh sections in ProceduralMeshComponent with out-of-bounds vertex indices or non-unique vertex indices within a triangle.

Material Editor

New:

  • Added tooltips for Scalar parameters in the Material Editor.

  • Added support for texture arrays with TextureSize material expression.

  • Added local variables and portal nodes to Material Graph. (Contributed by Phyronnaz)

Optimization:

  • Sped up opening material editor for material instances with many parameters.

Crash Fix:

  • When a material function changes, all in-memory material functions are now checked to see if they use that function, and recompiled if they do.

Bug Fix:

  • Vector parameter children should now be editable as expected when the vector parameter is overridden.

  • Stopped unnecessary recompilation of shaders when changing texture compression.

Media Framework

New:

  • Overhauled AMF support, including support for Linux.

  • Media Capture: Added support for unconventional pixel formats such as R, RG, RGB10A2, and BGR.

  • Merged alpha manipulation function into one shader. Media capture options allow you to force the alpha channel to be set to 1. This is useful if the render target doesn't have an alpha channel.

  • Upgraded NVENC to version 10.0.

  • Overhauled AVEncoder to support Linux and Windows with both NVENC and AMF.

Scripting

  • Added GetLevels in EditorLevelUtils for Blueprint and Python scripting.

  • Added a function to EditorStaticMeshLibrary for setting material slot assignment for LODs.

  • Exposed UEditorLevelLibrary::ReplaceSelectedActors to Python.

Bug Fix:

  • Updated Editor utility widgets to not dirty the level when reinstancing.

  • Fixed an issue where utility widgets could fail to spawn properly on Editor startup.

Static Mesh Editor

Crash Fix:

  • Fixed a crash that happened when the Preview Scene Settings tab was spawned before the Viewport tab.

USD

New:

  • Added support for the treatAsPoint attribute on UsdSphereLights. This attribute will change how the light surface is calculated when converting USD light units to physical light units.

  • Added support for the UsdLuxShapingAPI schema. If a sphere light has the schema, a spot light component will be generated in UE and its cone angle will be set according to the cone angle attribute.

  • Added support for USD render contexts. When parsing materials, Unreal Engine will now load the shaders associated with the requested render context.

  • User code can register new render contexts to display in the USD Stage Editor.

  • Added the ability to export an Anim Sequence asset to a USD file.

  • Added progress display to the USD Stage asset creation steps.

  • Added support for the UsdLuxLight exposure attribute when calculating the light intensity for Unreal.

  • Added support for the EmissiveColor input when parsing UsdPreviewSurface materials.

  • Improved the conversion from Unreal skylight components to UsdLuxDomeLights. The cubemap will now be written out as relative to the USD layer Unreal Engine is writing to.

  • Attributes will now be written out to the default time code instead of at the UsdStageActor time.

  • Added an asset cache to speed up reloads for USD Stage actors. Textures can be persisted in the cache and won't be recreated unless the source file has changed since the last time it was processed.

  • Added support for the USD MDL Schema in the USD importer. This enables referencing MDL materials in a USD file and importing those in Unreal.

  • Updated the USD SDK to version 21.05.

  • Added a script to convert USD lights to the new USDLuxLight schema in USD 21.05. The script is located in "Engine\Plugins\Importers\USDImporter\Content\Python\usd_unreal\update_lights_to_21_05.py". Detailed instructions can be found within the script itself.

  • More warnings and feedback have been added for when the prim configuration is incorrect for the parsing of LOD meshes from USD files.

  • Persistent support was added for muting tracks and disabling sections on the Level Sequence Asset generated when opening a USD Stage.

  • Improved the undo/redo and multi-user support for USD stage manipulation via the USD Stage Editor window. Most operations and attribute changes are now tracked.

  • Added Blueprint and Python functions to fetch prim/component/asset correspondence for opened USD Stages via the USD Stage Editor window.

  • Allows editing other properties via the prim properties panel on the USD Stage Editor window.

  • You can now use tags to correctly handle USD-style pruning visibility when toggling Scene Component visible flags and prim visibilities in the USD Stage Editor.

  • There has been a complete rewrite of the level exporter to USD to add support for exporting foliage, landscapes and sublevels, and to update legacy scripts to Python 3.

  • In-memory stages are now created when using File > New on the USD Stage Editor instead of immediately presenting the Save prompt.

  • Stabilized behavior of AUsd Stage Actor when it is a Blueprint parent class.

  • Allows exporting Static/Skeletal Meshes and scenes to USD using dedicated payload files.

  • Back light and camera component property changes are now written to the opened USD Stage when edited on spawned components.

  • Removed the dedicated stage info panel on the USD Stage Editor. This now shows (along with more data) when no prim is selected; additionally, the stage now shows as the root prim entry on the stage tree view.

  • Synchronizing prim selection on the USD Stage Editor window with viewport selection is now allowed by picking Options > Selection > Synchronize with Editor on that window.

  • A dedicated asset cache has been created to store the assets generated from opened USD Stages to the AUsdStageActor.

  • Added static and skeletal mesh export options when exporting to USD to allow setting of Meters Per Unit and Up Axis.

  • Changed how the Usd Stage Actor binds stage loading and unloading to actor lifecycle functions. This provides more predictable behavior in complex scenarios like level streaming, switching levels during PIE, and Movie Render Queue operations.

  • Added support for loading USD files at runtime.

  • Changed the USD material import workflow to use master materials instead of generating new materials on each import.

  • Support has been added for renaming prims via the USD Stage Editor.

  • Added an export options dialog when exporting UAnim Sequence assets to USD.

Crash Fix:

  • No longer crashes during reimport of a material from USD when the original replaced material is currently in use on the scene.

  • Trying to import LOD meshes out of some elaborate prim hierarchies in USD files no longer causes crashes.

  • Sequencer no longer crashes if an opened USD Stage has animations and startTimeCode < endTimeCode.

  • Fixed a crash that occurred when loading a project with the USD Stage Editor window open in the layout along with a startup level without an AUsd Stage Actor.

  • Fixed a crash that occurred when handling mesh components with material overrides on LOD meshes from USD Stages.

  • A crash no longer occurs when switching levels after opening USD Stages that generated UGeometry Cache assets.

  • Fixed multiple crashes when parsing LOD meshes out of USD variant sets while opening a USD Stage.

Bug Fix:

  • Fixed an issue that caused texture file names to be lost when importing from USDz packages.

  • Fixed an issue that caused only one texture to be imported from USDz packages.

  • Fixed an issue where the cubemap was not getting assigned to the SkyLightComponent if the texture was already cached.

  • On the USD Stage Editor window, fixed the right-click interactions on prims inside variant sets.

  • An issue where USD AnimSequence exporter was not, in some cases, finding a preview mesh to export with has been resolved.

  • Fixed incorrect skeleton matching when exporting AnimSequences/SkeletalMeshes to USD in some instances, such as when the mesh's skeleton differs slightly from the skeleton asset.

  • Fixed the USD stage sometimes failing to close after interacting with prims on the stage tree view (left pane) of the USD Stage Editor window.

  • Fixed an issue where the USD stage would unnecessarily close or open when the USD Stage Actor was in a persistent level that was hidden or shown.

  • The stage now properly closes and reopens when the USD Stage Actor is in a streamed sublevel that is hidden or shown.

  • Fixed the Post Edit Change Property so it no longer forces the USD stage to load when already loaded.

  • A warning now displays if cubemap is not found on the filesystem when setting it onto a USD prim.

  • Incorrect color space conversion was corrected when importing vertex colors from USD geom meshes.

  • Fixed an issue so skeletal meshes are no longer visible on the viewport in some scenarios after exporting UAnimSequence assets as USDs.

  • The USD Stage Importer now uses the provided import options if triggered from an automated task.

  • Fix camera transform orientation compensation when writing back camera transforms to the USD stage.

  • Spawned components are no longer left in an invalid state after undoing a transaction where their owning AUsd Stage Actor is deleted.

  • Fixed a stationary light overlap problem for lights imported or spawned from USD files.

  • Fixed an issue where USD Stages and layers remained open even after being closed via the USD Stage Editor window.

  • Fixed the AUsd Stage Actor trying to use a deleted Level Sequence in some scenarios.

  • Fixed an issue where normal maps would disappear in the MeshEditor tab of the Static Mesh Editor for some meshes imported from USD files.

  • Added support for material overrides on Point Instancer prototypes when opening/importing them from USD Stages.

  • Fix an issue of spawned actors and components being visible for an AUsd Stage Actor in a hidden level or layer opened a new USD Stage.

  • It is now possible to mute/unmute USD layers via the USD Stage Editor window if the root layer is within the project's folder. This fix included a way to add USD layers as a sublayers of themselves.

  • Fixed some USD meshes that were losing their UV sets when opened with the USD Stage Editor and imported with Actions > Import.

VR-Editor

Crash Fix:

  • Disabled the placement of VR editor mode gizmo actors from the place actors panel. This prevents the VR gizmo actors from saving into a level and causing a crash when that level is deserialized.

World Browser

Bug Fix:

  • Fixed an issue where the Level Browser would lose folder information when switching streaming type.

Gameplay Framework

New:

  • Added GetSquaredHorizontalDistanceTo function to Actor class.

  • Added FindNearestActor function to Gameplay Statics class.

  • Added BindKey with key signature delegate to Input Component class.

  • Can now hide all unused pins when using Blueprint Make Struct nodes.

  • PlayerState Actor's IsOnlyASpectator function is now exposed to Blueprints.

  • Action level modifiers and triggers are evaluated in a second pass, after all mapping level modifiers and triggers. \

  • Added new Blueprint Compiler options and internal reinstancer flags to allow users to enable delta serialization.

  • Camera modifiers; including Camera Shakes, will now affect post-process settings. Matinee Camera Animations are played directly by the Player Camera Manager.

  • Moved legacy Matinee Camera Shake into the new GameplayCameras plugin. This makes it possible to add a Sequence shake pattern onto this class, because Matinee is deprecated and will be removed in a future version.

  • Moved Camera Shake implementation in a "shake pattern" class, leaving the base class as a container. This is to make it easier for artists to change a shake completely without having to make a new one, as well as for programmers to write new shake behaviors that can work with existing ones.

  • Game feature action for adding a Data table or Curve table as a Data Registry source.

  • Modified UGameplayAbility's PreActivate method to optionally take in trigger event data.

  • Newly placed comment nodes will no longer show comment bubbles when a graph is zoomed out.

  • Applied limits to Camera Shake Rotation when not using headsets.

  • When restarting a single-instance camera shake that was blending out, the current blending weight will transfer into a blend-in if appropriate.

  • Camera shakes with a custom duration can provide a "hint" of that duration.

  • Camera shake time-keeping and result handling logic have been refactored for reusability. \

  • Added new method ‘GrantAndActivateAbilityOnSelfWithParams' which allows Designers to pass in FGameplayEventData when granting and then activating an ability from Blueprint.

  • Sequence camera shake can now animate post process settings, and better handles the difference between focal length and field of view.

  • Added support for a custom camera shake initializer.

  • Added API for scrubbing camera shakes. This results in better support for putting shakes inside sequences.

  • Removed an unused virtual method ‘ApplyStackingLogicPostApplyAsSource' in the ActiveGameplayEffectsContainer class and made the destructor of the ActiveGameplayEffectsContainer class non-virtual.

  • Changed the Gameplay Cue Interface to pass Gameplay Cue Parameters Struct by reference.

  • Added more support to filter Gameplay Tags in the Editor using a project-specific filter. OnFilterGameplayTag supplies the referencing property and the tag source, so you can filter tags based on what asset is requesting the tag.

  • Improved Asset Manager to support virtual paths like AssetSearchRoots that can be replaced with dynamically set paths. Additionally, several new utility functions have been exposed as part of increased support for data registries and game plugins. \

  • Added OnActorPreSpawnInitialization delegate which is broadcasted before the Actor and its components have been initialized.

  • Exposed SourceObject to GameplayAbility's K2_CanActivateAbility method.

  • Native Gameplay Tags. Introducing a new FNativeGameplayTag, these make it possible to do one off native tags that are correctly registered and unregistered when the module is loaded and unloaded.

  • Improved Scalable Floats in the Gameplay Abilities plugin to support dynamic lookup of curve tables from the new Data Registry system. Added a ScalableFloat header for easier reuse of the generic struct outside the abilities plugin.

  • Added option to preserve the original captured SourceTags when GameplayEffectSpec's class method SetContext is called after Initialization.

  • Editor-only references are no longer followed when assigning management references in the Asset Manager.

  • Improved UI for registering Gameplay Tags from specific plugins. The new tag UI now lets you select a plugin location on disk for newly added Gameplay Tag sources.

  • Exposed AddControlPointPosition and ResetControlPoints to Blueprint in the InterpToMovementComponent.

  • The script execution recursion limit is now stored in a cvar named bp.ScriptRecurseLimit. The default value on desktop is now 120 to match consoles, instead of the previous value, 250. You can set this value higher in the [Console] section of DefaultEngine.ini file if you need to keep the limit at 250 on desktop.

Optimization:

  • Improved member packing on FHitResult to reduce size from 148 bytes to 144 bytes.

  • Made several performance improvements to loading and regenerating the gameplay tag table were implemented so that this option would be optimized.

Crash Fix:

  • Fixed a crash when calling CanSelectActor on an Actor that is not in a level.

  • Fixed a crash that occurred on loading placeholders iteration.

  • Fixed a crash that occurs when dragging and dropping a Geometry Cache asset into Blueprint Editor viewport to instantiate a Geometry Cache Component.

  • Fixed a crash which occurred when applying instance changes to a Blueprint while a child Blueprint with different properties is also present in the level.

  • Fixed an Editor crash that could occur when reparenting a Blueprint with at least one Blueprint-added component to a duplicate of the Blueprint as the new parent class.

  • Fixed crash when diff a blueprint asset which contains an enum variable while the enum class has been moved to another file/ folder.

  • Fixed a serialization crash that could occur when a previously-compiled function's outer Blueprint class object had not yet been freed by Garbage Collection.

  • Fixed an ensure that occured when running in-game when a Text3D component was added in a Blueprint.

  • Fixed a crash when reinstancing a Blueprint with an abstract outer.

  • Fixed a crash that could happen when compiling a Blueprint after loading it for a diff.

Bug Fix:

  • In the Kismet Math Library, BlueprintAuthority has been removed from MinimumAreaRectangle .

  • Prevented the CharacterMovementComponent from continually sending client location corrections when World Origin is rebased.

  • Any Completed or Canceled action event delegates will now report proper timing data.

  • The upper threshold clamp on the input system's deadzone modifier is now applied correctly.

  • AxisConfig settings from the old input system are now ignored for all devices, except for mouse axis scaling.

  • Fixed a case where a Level Blueprint would not run during Play In Editor (PIE) sessions after the Editor had been restarted.

  • Linkage to UStaticMesh when inheriting from your own module has been fixed.

  • GamePlayEffectsContainer's SetActiveGameplayEffectLevel method will no longer dirty FastArray if setting the same EffectLevel.

  • Added null checks to prevent Garbage Collection crash in ChildActorComponent's DestroyChildActor class method.

  • Fixed Actors who are attached to the World Outliner as a Child Actor from becoming detached when a level is reloaded.

  • Improved the display of structs when watching their values in Blueprint.

  • Fixed split pin defaults from being wrong when splitting nested user defined structs.

  • Fixed a root motion source issue where a networked client could crash when an Actor finishes executing an ability that uses a constant force root motion task with a strength-over-time modifier.

  • Property chains will now resolve when old and new objects are not of the same class.

  • Fixed missing struct-typed TSet and TMap default value overrides in a dynamically-instanced Blueprint-added component when "optimized Blueprint component instancing" is enabled for an Actor class in a cooked build.

  • Added an additional check in GameFrameworkComponentManager while dealing with an AddComponentRequest call so we don't hit an ensure before the Actor has begun play.

  • Fixed an edge case in gameplay effect mixed replication mode where Actors not explicitly owned by the net connection but who utilize that connection from GetNetConnection will not receive mixed replication updates.

  • Fixed a case where cyclic dependencies could cause default values to be unloaded.

  • When checking if a Blueprint variable is in use, the Editor will now consider references from other Blueprints as well, Additionally this is used when attempting to delete a variable.

  • Fixed an endless recursion occuring in GameplayAbility's class method EndAbility which was called by calling EndAbility again from K2_OnEndAbility.

  • Allow wildcard connections to the wildcard pins in the Format Text node so that it can be used inside of macros.

  • Gameplay tags Blueprint pins will no longer be silently cleared if they are loaded before tags are registered. They now work the same as gameplay tag variables, and the behavior for both can be changed with the Clear Invalid Tags option in the Project Settings.

  • Improved thread safety of Gameplay Tag operations.

Deprecated:

  • Deprecated SimpleConstructionScript's class method GetAllNodesConst FBlueprintEditorUtils::FindSCS_Node, which now returns the USCS_Node pointer and not the index to the node.

Learning Resources

Content Examples

New:

  • DMX Fixtures - DMX spot lights now correctly emit constant total energy distributed over a dynamically changing cone area (steradians). This better mimics a real spotlight with zoom and affects both the light and the light beam.

Localization

  • FText::AsCurrencyBase now takes an optional additional parameter that can be used to override the number of fractional digits.

  • ICU timezone data has been updated to v2021a.

Bug Fix:

  • We now rebuild the package localization cache for all current cultures when the culture changes. Previously, we would only rebuild the cache for the current language, which could leave the asset group cultures uncached and lead to the incorrect localized package being used.

Mobile

New:

  • Added profile-guided optimization (PGO) to optimize build options to Android Toolchain. PGO-optimized builds can be up to 10% faster in some CPU-bound scenarios.

  • The Editor Preview Rendering Level mode now activates the IOS or Android device profiles in the editor, allowing mobile-specific console variables to be set.

  • In DefaultDeviceProfiles.ini, the PreviewAllowlistCVars and PreviewDenyListCVars arrays can be used to specify the CVars that will be applied when Preview Rendering Level is enabled.

  • Android now calls the Memory Warning Handler when triggered via Java-side on Memory Trim callback and memory advisor state changes.

  • Android GLES has a new texture LRU system that is enabled by default. 2D textures are now held in system memory until required for draw calls. The textures are returned to system memory after 500 frames of non-use.This reduces the GLES memory footprint for most devices; however, it can have an impact on performance, and should be disabled if many new textures are frequently required in a single frame. Setting r.OpenGL.DeferTextureCreation to 0 will disable the GLES texture LRU.

Crash Fix:

  • Fixed a crash in FSkeletalMeshObjectGPUSkin::GetSkinVertexFactory when no valid LOD render data is available — for example, due to platform MinLod.

Bug Fix:

  • Fixed the stat Draw Count mobile preview in the editor. It now displays correct draw count statistics

  • Android Java logging callback is now initialized earlier to capture more messages at startup.

  • When handling a fatal log message, Android now calls out to FCoreDelegates::OnHandleSystemError and FCoreDelegates::OnShutdownAfterError as well as filling GErrorExceptionDescription with the actual error string.

Android

New:

  • Added an option that allows DOM storage on Android WebView.

  • The CPU per-core frequency is now exposed to CSV Profiler and Unreal Insights.

  • HWC Pipe (GPU performance counters for ARM Mali) is now only enabled when -hwcpipe is specified in UE4CommandLine.txt.

  • Java can now pass logging to Unreal with NativeCalls.UELog* on Android.

  • While the editor is running, Android devices now maintain a port forwarded over USB to allow Cook-on-the-Fly (COTF) network file server and Unreal Insights to work without requiring WiFi connectivity. Specifying the IP address 127.0.0.1 will now allow Insights or COTF traffic to work across the USB cable.

  • Improvements for Memory Advisor include an updated crash reporter state at once instead of per property, and a 10-second delay on reporting less critical states.

  • Exposed the Memory Advisor's Memory Warning state (from 0, OK, to 2, Critical) to CSV Profiler and Unreal Insights.

  • Added a per-project Gradle-warning filter with Build/Android/GradleFilter.txt (see an example in Engine/Build/Android/Java).

  • SoC temperature and\or thermal notifications are now exposed to CSV Profiler and Unreal Insight. This information might be unavailable on some devices.

  • Exposed Android Memory Trim messages to the CSV profiler.

  • Added config rule variable access to Android's Device profile-matching rules. The SRC_ConfigRuleVar source type is now available to Android's Device Profile Selector. \ The 'MatchString' must be in the format of MatchString="<configrule.txt variable name>|<desiredmatchstring>". The <desiredmatchstring> will be used for the CMP operation against the actual value contained in <configrule.txt variable name>. \

    • Example: \ +MatchProfile=(Profile="Android_DeviceA",Match=((SourceType=SRC_ConfigRuleVar,CompareType=CMP_Equal,MatchString="DeviceA_Enabled|true") \ Thus Android_DeviceA will be matched if the config rule variable 'DeviceA_Enabled' CMP_Equal's 'true'.

  • Added preliminary support for DualSense controllers on Android.

  • Added support for alternate mouse events on Android to support DualShock4/DualSense controller touchpads.

  • Unregisters listeners from SensorManager when not being used to reduce the SensorManager battery cost.

  • Updated to use AndroidX instead of older support libraries.

Crash Fix:

  • Fixed crashes with the Android Web Browser Widget that were due to event delegates being called from the wrong thread.

Bug Fix:

  • Fixed the GooglePAD handling of disable checks.

  • Changed the handling of the Android console history to work with Android 11 (buttons instead of a swipe).

  • Updated Android distribution install scripts to use /data/local/tmp instead of /sdcard/Downloads for staging OBB files.

  • Fixed a permissions issue with access to UE4Game directories.

  • Updated the default icons and splash screens.

  • Fixed an issue with releasing previous media samples.

  • Corrected the per-file cost calculation of an OBB that is used to determine how to split up PAK files between OBBs.

  • Fixed an issue where the editor's Preview Rendering Level menu only showed the first Android preview platform even when OpenGL ES and Vulkan were both enabled.

  • Fixed high refresh rate support on Android 11 devices.

  • Fixed backup log saving on Android—now registers the log file in the UFS/NonUFS manifest after it is created so that it can be correctly backed up later.

  • The timestamp is now removed from the UFS/NonUFS manifest when a file is deleted on Android.

  • Fixed a GLES assert that could fire during PSO cache processing if the incoming PSO had already been rendered/instantiated before PSO cache loading began.

  • Fixed an issue when UE failed to detect Samsung's family of Exynos SoCs, and would not set Big\Little core affinity masks for threads.

  • Included a config rules version in logging.

  • Now uses proper line endings for Android install scripts based on the target platform.

  • Fixed Android gyro rotation.

  • Fixed ProGuard to keep defaults for AndroidX annotations.

  • Added cleanup of previous APK/AAB before the packaging step to fix an issue with package size growth.

iOS

New:

  • Added an option under Project Settings > IOS, to allow you to override the path on the remote build Mac where iOS builds are performed. This is useful for saving space on the primary hard drive on a remote Mac.

Crash Fix:

  • No longer crashes when destroying text entry fields on iOS.

  • Fixed a crash that occurred when trying to open a new dialog while an existing dialog is transitioning in or out.

Bug Fix:

  • Fixed a texture leak related to movie player on iOS devices.

  • Fixed some capitalization issues with iOS in plugins. When using Whitelist Platforms inside a uplugin file, the correct syntax for iOS is "IOS" not "iOS". Using the incorrect case can cause dependency problems.

  • iOS now uses a default compressed format for textures set to BC7 compression instead of falling back to uncompressed formats.

  • Fixed a path-quoting issue linking Frameworks that caused link errors for IOS when using the Launcher binary build.

  • Fixed a bug in iPhonePackager Mach-O handling by updating signatures to use SHA-256. This resolves a problem where iOS apps built on a PC or re-signed by iPhonePackager would fail to load on iOS 14.5 or later.

  • Fixed build errors when compiling iOS C++ on Mac using Unreal Engine installed from the Mac Epic Games Launcher.

Networking

New:

  • Updated PacketHandler components so that they can be added from non-engine C++ using a delegate.

  • Added a maximum number of retry-attempt settings for message bus UDP messaging auto repair mode.

  • Updated IpNetDriver‘s maximum time budget check in the packet reception iterator to correctly check only after a specified number of packets

  • Added optional logging of synchronous loads triggered by the replication system.

  • Modified the "LogNet: NotifyStreamingLevelUnload" to verbose by default to prevent log spam.

Crash Fix:

  • Fixed crashes when trying to clone adapter addresses when none are available.

  • Fixed issue causing potential crashes in SetNetDormancy.

  • Fixed crash issue caused when UDP message errors are received after the UDPMessaging module is unloaded.

  • Added null check to GetLevel() in UNetConnection::UpdateLevelVisibility.

  • Fixed potential crashes in server NetDriver code.

Bug Fix:

  • Fixed issue in which DTLS packet handler failed to connect under high-packet-loss conditions.

  • Fixed a potential underflow error in the DTLS packet handler.

  • Fixed issue in which invalid authentication tags prevent the AESGCM packet handler from connecting.

  • Suppressed expected warnings triggered by NetPacketNotifyTests.

  • Fixed issue in which fast array struct delta serialization does not properly resend on NAK.

  • Added a check to detect RPC calls from non-game threads.

  • Fixed issue where UniqueNetIdRepl replicated when the net ID string is numeric and contains the + or - character, or has an odd number of digits.

  • Fixed a rare hash collision within shared property serialization.

  • Optimized the building of LevelsToTick list in LevelCollection to reduce build time.

  • Prevented InitConnect from failing during IpNetDriver's garbage collection.

Beacons

Crash Fix:

  • If an OnlineBeacon attempts to destroy the NetDriver while the NetDriver is ticking, the destruction operation will be deferred to PostTick to prevent a crash.

Network Emulation

New:

  • Added Net.DisconnectSimulatedConnections cheat to disconnect simulated connections.

Bug Fix:

  • Prevented SimulatedConnections from destroying PlayerController when disconnected.

Replays

New:

  • Added a path export table to network GUID cache serialization in checkpoints to reduce its size.

  • Added option to not reload the default map after a replay stops.

  • Added a flag to replay headers indicating recording connection type.

Crash Fix:

  • Fixed crash issue during delta checkpoint loading.

  • Fixed a replay crash when scrubbing in the editor.

Bug Fix:

  • Updated ReplaySubsystem::PlayReplay to use WorldOverride in StopExistingReplays.

  • Fixed regression where information about net startup Actors destroyed prior to recording start were lost.

  • Added broken channel cleanup during playback.

  • Added handling for serialization errors when reading net field export groups from a replay checkpoint.

  • Prevented replay delta checkpoints from recording unnecessary property data.

  • Prevented replays from incorrectly forwarding RPCs during playback to other drivers.

  • Fixed network path remapping when using duplicate level IDs.

  • Fixed delayed replication when using replay connection recording.

  • Fixed an issue when recording DORM_Never Actors into checkpoints.

  • Prevented delta checkpoint recording from overflowing the changelist history.

  • Fixed an issue with reused destroyed channel index in amortized checkpoint recording.

  • Fixed cleanup for broken Actor channels that never spawned.

  • Fixed uninitialized members of FMulticastRecordOptions.

  • Prevented inactive property changelist from being modified by replay checkpoints.

  • Fixed a replay ensure by using the base function when finding the layout for a received RPC.

  • Fixed issue when the server could stop replicating based on the position of the replay connection.

  • Removed unused checksums from replay GUID serialization.

Replication Graph

New:

  • Exposed the LogReplicationGraph category.

  • Optimized DormancyNodes in ReplicationGraph using a configurable setting to improve RepGraph performance when adding or removing dormant Actors after multiple clients disconnected.

  • Added number of total connections replicated during a frame to the FFrameReplicationStats.

  • Updated ReplicationGraph to send statistics on replicated Actors on every frame that must be collected using PostServerReplicateStats.

  • Optimized ReplicationGraph by allowing ConnectionDormancy nodes to be considered obsolete if they have not been gathered for a specified time.

  • Added the ability to log statistics on all RepLists held by RepGraphNodes using Net.RepGraph.Lists.Stats.

  • ActorList nodes will now empty their RepList on TearDown.

  • Added TearDown support to StreamingLevelListCollection.

Bug Fix:

  • Updated the DynamicSpatialFrequency node's ActorChannelCloseFrameNum to prevent dependent Actors from being prematurely destroyed.

  • Fixed an issue where multicast RPC channel opens ignored Actor's bOnlyRelevantToOwner flag.

  • Fixed issues when a join a progress client reused the pointer of a disconnected client.

  • Fixed RemoveClientConnection not removing the proper GraphConnection if it was in the PendingConnection list

  • Fixed the GraphConnection's ConnectionId potentially clashing after removing a NetConnection

Deprecated:

  • Renamed GraphConnection's ConnectionId to ConnectionOrderNum. This is to prevent users from thinking the ID persists across the lifetime of the object. It is only unique during a single tick of the RepGraph and will change during a session as clients join and disconnect.

  • FActorRepListRefView::ResetToNull is deprecated and has been renamed to TearDown.

  • Deprecated the FActorRepListRawView struct in favor of the new FActorRepListConstView, which uses a cleaner interface to the allowed operations when parsing a gathered list.

  • Updated DependantActor lists to use a TArray instead of a FActorRepListRefView which reduces the number of allocated lists in the list pool.

  • Updated FActorRepListRefView to use TArrays to store its replication list instead of FActorRepLists which increases its overall performance by up to 10 times.

  • Deprecated IsValid and PrepareForWrite.

  • Deprecated Remove() in favor of RemoveFast and RemoveSlow.

  • Deprecated the PreAllocateRepLists function.

Socket Subsystem

New:

  • Added a warning to BSDSockets for when the destination protocol does not match protocol.

  • Added a warning to FUdpSocketReceiver when MaxReadBufferSize limit is reached.

Niagara

  • Added new Asset type "Niagara Parameter Definitions." The Niagara Parameter Definitions Asset allows defining a set of parameters, and those definitions are shared with all Niagara Scripts, Emitters and Systems in the project. The intended use for Niagara Parameter Definitions is to predefine a name, type and description for parameters used in Scripts, Emitters and Systems, and automatically synchronize changes to the parameter definition's name, default value, and description with all parameters it is linked to.

    • Menus to add parameters in Niagara Scripts, Emitters, and Systems are now populated by all Parameter Definitions in the project.

    • Parameters that share the same Namespace, Name and Type with a Parameter Definition are now linked to the Parameter Definition. The description, default value and name of the Parameter Definition are synchronized to all Parameters it is linked with.

    • Parameters have a new default value mode "Definition". Parameters that are linked to a Parameter Definition can choose "Definition" as the default value mode. This automatically copies the Default Value Mode and Default Value of the linked Parameter Definition to the parameter.

    • Parameters created before a Parameter Definition but which share the same Namespace, Name and Type with the Parameter Definition will become linked to the Parameter Definition. The Parameter's description will be overwritten with the description of the linked Parameter Definition. If the Parameter default value is different from the default value of the linked Parameter Definition, the Parameter retains its default value; otherwise, the Parameter has its default value mode set to Definition, and its default value will be overwritten with that of the linked Parameter Definition.

  • Users can now handle a buildup of render ticks inside the batcher in a user-selectable way. Use "fx.Niagara.Batcher.TickFlush.Mode" to select the mode (Do Nothing, Process, Kill). Use "fx.Niagara.Batcher.TickFlush.MaxQueuedFrames" to decide how many frames before you need to flush.

  • Added a new Select node that can use an Index type for its selector pin (bool, integer, enum). This is used to select one or more values at runtime, based on the input of the selector pin.

  • Previously established output types in the Select and Static Switch nodes can now be altered by using the "Pin Type Selector" next to its respective output pins.

  • A wildcard pin type in the Select node now allows changes to the existing pin types using drag-and-drop.

  • Added to Mesh Arrays:

    • Added the ability to choose multiple Static Mesh resources for the Mesh Renderer (selectable via Particles.MeshIndex).

    • Added "Mesh Flipbook" feature to fill the array with a sequence of Static Mesh assets.

    • Added a Mesh Renderer Info data interface, to enable systems to query info about their mesh renderers (such as the number of meshes selected and the bounds of each).

  • New menus and features have been added to the Niagara Editor. This includes options for better filtering, as well as a "Suggested" section in the modules, dynamic input, and Script action menus that will list often used actions at the top. Scripts and Modules can be marked as "Suggested" in the metadata.

  • Exposed Collision Material Surface ID on Niagara's CPU Collision Module.

  • Added a random seed offset to Niagara System instances, to allow for variance between duplicated deterministic systems (this must be set on either the component or from Blueprint before activating the system when spawning).

  • Curves can now be exposed to material bindings.

  • The Select and Static Switch nodes driven by an enum will now automatically refresh when the enum is changed. This excludes Static Switch nodes created before this release.

  • Render target Data Interfaces can now be an iteration source. You can not read from the render target, as they do not handle flipping buffers correctly, so they are considered write-only.

  • You can use a Define to control partial write code generation; this enables you to keep the same functions for reading in, making it compatible with CustomHLSL. It also means Niagara doesn't rely on the compiler to strip out the bindings for input values, which has been unreliable on some platforms.

  • Added "Source Mode" to the Skeletal and Static Mesh Data Interfaces, so users can more explicitly identify where the source mesh should come from.

  • Added support for tooltips on Data Interface function inputs and outputs.

  • Niagara now supports configurable playback speeds in its editor settings.

    • New shortcut: S key isolates all currently selected Emitters.

    • New shortcut: D key disables all currently selected Emitters.

  • Added options to control how many bits we use to store probability/alias buffers for uniform sampling. The default is set to 24 bits, triangle 8 bits probability, allowing for 16.7 million triangles.

  • For Niagara 2D gas fluids, added offset to the Advect Scalar Module, to allow for the parent velocity to be used without it integrating into the sim's local velocity grid.

  • Added Niagara Texture 2D Array Data Interface.

  • If a Static Switch is switching on an enum that isn't registered yet, it now can be registered as a Niagara-wide enum using the new context option.

  • Added the "Set Fixed Bounds (System)" command in the "Bounds" section of the toolbar. Previous command for Emitters is now only available if any Emitter is selected (in a System); it is always available when in an Emitter Asset.

  • Added a new Waveform Module and Dynamic Input which can be used to generate and combine many different waveforms, including: triangle, square, sawtooth, trigonometric functions and multiple spline variants.

  • In Niagara 2D Fluid, added a world space noise option to the turbulence field module (the default is "Off").

  • Added an option to the Light Renderer to scale light brightness by color alpha.

  • Added support for overriding textures used with UNiagaraDataInterface2DArrayTexture.

  • Added "Renderer Visibility" to the Component Renderer, and fixed a bug where components would be deactivated but not set to invisible when a particle dies.

  • Added the ability to collide with custom depth in the Collision Query Data Interface.

  • Grid3D Updates: Added a preview.

  • New: Grid3D Updates: Users can now expose user parameter/render target binding to materials.

  • New: Grid3D Updates: Added an override for material/resolution selection.

  • New: Grid3D Updates: Added Details so users can display Attribute names (when hooked up).

  • Added mip map generation options to Niagara Render Target 2D.

  • Added a variable binding for the Pivot Offset of Niagara sprites.

  • Added an Inherit Source Movement module which emulates the Cascade Source Movement module.

  • Added "Default Exponent" (value to use when a variable is not bound) and "Renderer Visibility" to the Niagara Light Renderer.

  • Added Distance Culling and Renderer Visibility to the Niagara Sprite Renderer.

  • Added GPU support for GetFilteredSocketTransform.

  • Added symbolic search capability (+,-,*,/) in the search filter for common math dynamic inputs such as add, divide, and some boolean operations.

  • Added Show Flag for Niagara.

  • Improved Niagara's indirect dispatch argument buffer allocation scheme (the buffer that is used for GPU systems and for culling and sorting meshes and sprites).

  • Niagara now allows Particle Reader to be used as an iteration source.

  • Added "Pivot Offset" to the Niagara Mesh Renderer.

  • Exposed CustomDepth to the gbuffer interface.

  • Added support for the 2D Array Render Target.

  • New Static Switch nodes that switch on an enum will now automatically refresh upon load, or if it's open. Old Static Switch nodes will not do that, they do not break existing usages. CVar "Niagara.StaticSwitch.EnableAutoRefreshOldStaticSwitches" has been introduced to enable refreshes on old static switches as well.

  • New: Enum context options for Select and Static Switch when user performs a right-click on these nodes.

  • Added the ability to right-click and select "Auto-fill all options" on various array properties in Niagara (such as "Filtered Bones" on a Skeletal Mesh Data Interface).

  • Added unused attribute trimming for Niagara particle scripts. \ This improves the existing heuristics for figuring out which particle attributes are not needed (either by a renderer or an external reader), and adjusts the generated code so that the attributes can be stripped. This results in a ~25% reduction in particle payload for typical scripts.

  • Made updates to static VectorField. CPU data is now stored as a half3 (instead of float4) when ISPC is available, and an ISPC kernel has been added to the Niagara DI for sampling. For supported platforms, it reduces memory cost (from 16 bpp to 6 bpp) and improves sampling time (2x speedup).

  • Refactored significance handling. This now allows for various metrics such as Age and Distance. Projects can also define their own game-aware significance calculations. Spawn Only EffectTypes also have the option to consider the significance of Systems when spawning.

  • New: Systems with Dynamic Bounds can now make use of visibility culling.

  • New: Exposed fx.Niagara.Quality level as a System constant.

  • New: Added a new Data Interface that allows checking of the current platform. As an example, this can drive specific behavior that only works on a certain platform.

  • Optimized FNiagaraScalabilityManager for cases where there are large numbers of registered components. It now tries to meter out updates to scalability state over a number of frames, limited by a new cvar (fx.ScalabilityMaxUpdatesPerFrame) and based on the frequency of updates. It cleans up how significance is processed, so that it is done only for necessary components. It updates how we consider the component state to be dirty, which limits how often Niagara tries to unnecessarily activate/deactivate components.

  • Added a new instance count culling option, to cull for each System as well as for each effect type.

  • Updated the GridCollection2D and GridCollection3D node APIs to be more descriptive and consistent. Older paths still operate, but they are suppressed from creation.

  • Added a new experimental feature to Niagara Skeletal Mesh Data Interface, for generating and querying a quadtree mapping UV to the vertex index. A quadtree is created on demand for a given Skeletal Mesh when referenced by the Data Interface.

  • Prevented byte code generation by particle scripts for GPU emitters; this reduces runtime memory costs and compile time costs, and eliminates some edge cases where shader warnings can be generated.

  • Implemented RibbonRender DistanceFromStart to allow for correct train track-style UV tiling with minimal effort; spawn modules are being updated to set this by default.

  • Added a new module to the Skeletal Mesh Data Interface supporting adjacency information. A buffer containing up to 8 adjacent triangle indices for each vertex is created at runtime. Currently two methods are supported (on GPU only): one for retrieving an indexed element from the buffer, and one for finding the first adjacent triangle.

  • Niagara now supports reading barycentric coordinates and adjacency information. This allows users to traverse Skeletal Meshes using those values.

  • Implemented tessellation across ribbon width, this helps reduce stair stepping in UVs.

  • New: Implemented multiplane/sheet rendering for ribbons, similar to Cascades "Sheets".

  • New: Implemented tube ribbons with 3-16 sides, and custom shaped ribbons with 3-16 sides.

  • NiagaraPlatformSet now has the ability to select platforms based on arbitrary Float, Int or Bool CVars.

  • Added the ability for the Spline Data Interface to be driven by a User object variable.

  • Changed "Simulation is invalid..." message to "No active preview..." to better reflect the meaning of the message, which is that you don't have a preview simulation running, not that there's something actually wrong with the emitter.

  • The collision module now supports post-solve collisions.

  • Added a new mode "Fail if not previously set" to defaults; it makes Niagara generate a compile error if the variable hasn't been set previously. This is optional within graphs, but is set any time a variable is linked in the stack. This is only for new changes, as old Assets in the field "work" but will likely be using these defaults unintentionally.

  • Implemented Emitter mode rendering for the Mesh Renderer. Implemented material parameter binding for both the Mesh Renderer and the Ribbon Renderer.

  • Added an optional property to NiagaraParameterCollections to allow a MaterialParameterCollection to drive values in Niagara. Parameters are automatically created when an MPC is assigned, and the backing parameter store is updated as changes are made to the MPC.

  • Niagara Outliner tab in the Niagara debugger now allows gathering and display of information about the current state of Niagara systems on the connected debugger client.

  • Fixed an issue with disabling simulation stages; they will no longer generate a shader for the stage.

  • Updated debug draw UI, so it only shows the option to turn it on or off if the module contains debug switches.

  • The Collision Module now returns the material type index when CPU ray casts are used.

  • Added the ability to output compiler metadata, called Compiler Output Tags. This will allow users to get named metadata, like MaxLifetime or bIsImmortal, out of a complicated particle System.

  • Added a category field for Niagara Emitters, to specify a sorting category when adding an Emitter using the New Asset wizard or the asset picker.

  • Niagara Outliner can now display performance information about Systems on the connected client.

  • Moved Niagara's SkeletalMess Generated Data to a more generic implementation so it can be used by other Systems.

  • Niagara now contains all of Pivot Painter's functions, except the full foliage simulator.

  • Tweaked the HLSL shader generation for GPU particle simulations to reduce the burden on the HLSL compiler. Added preprocessor directives to limit the scope of FSimulationContext for simulations using shader stages. Reduced compilation time by 20x (for serial compilation, about 10x for regular usage in the editor).

  • New features have been added for timed Niagara effect notify.

    • GetSpawnedEffect returns the system spawned for a given mesh component.

    • GetNotifyProgress returns a 0-1 progress value between the notify's beginning and end for a given mesh component.

  • Added a unified FX Budget. You can now track and budget Cascade and Niagara runtime costs together. Niagara has some new scalability features to act upon this, such as reducing cull distances and max instance counts when budget usage is high. Projects using the Significance Manager with Cascade or otherwise driving SetRequiredSignificance calls into Cascade can use the result of the FFXBudget function, GetWorstAdjustedUsage, to influence calculations. This function returns the worst current budget usage for GameThread, Concurrent Threads or Render Thread work. It also has some decay on the value to help prevent fast oscillations that could cause FX to turn off/on repeatedly.

CL: 16199909 (Niagara)

Bug Fix: Fixed a bug where linked module outputs could be renamed to a wrong namespace.

CL: 16223604 (Niagara)

Bug Fix: Dialogs and graph pins now correctly show tooltips for intrinsic Niagara parameters.

CL: 16355938 (Niagara)

Bug Fix: Fixed a crash caused by checking compile results when the rendering thread is suspended.

CL: 16369575 (Niagara)

New: You don't need to create full copies of scripts and graphs when compiling. You can reuse objects instead, using an object pool that increases compile performance.

CL: 16386669 (Niagara)

Bug Fix: Fixed a bug where the Parameters panel would show all attributes and not filter by Static Switch selection.

CL: 16389995 (Niagara)

Bug Fix: Fixed a bug where propagating a Static Switch would delete it from the Parameter panel.

CL: 16400325 (Niagara)

Bug Fix: Fixed a bug where the Script.Usage and Script.Context Static Switches would generate an error if a new default value was defined behind one of its branches.

CL: 16410927 (Niagara)

Bug Fix: When duplicating a parameter in the module editor, metadata is also copied.

CL: 16518408 (Niagara)

Bug Fix: Fixed an issue where the Simulation Stage iteration source was showing unrelated items in the dropdown. Also fixed a problem with Simulation Stag iteration sources not updating on rename.

CL: 16531962 (Niagara)

Bug Fix: Fixed a bug where a deleted renderer's name remained in the Editor data.

CL: 16590157 (Niagara)

Bug Fix: Fixed a bug where tooltips for Map Get were not showing the parameter description from the metadata.

CL: 16590574 (Niagara)

Bug Fix: Fixed a bug where creating a duplicate parent created a redirector instead of a new Emitter Asset.

CL: 16590726 (Niagara)

Bug Fix: Fixed a bug where resetting a NPC instance caused a crash.

CL: 16605005 (Niagara)

Bug Fix: Fixed a bug where various engine constants were not displayed. Also improved sorting in the "add" menu.

CL: 16605005 (Niagara)

Bug Fix: Fixed a bug where various engine constants were not displayed. Also improved sorting in the "add" menu.

  • Updated Niagara sprites and meshes so they provide precise motion vectors for motion blur and temporal anti-aliasing by default (as opposed to the prior linear motion approximation).

  • A project setting was added to the Niagara project settings (Default Motion Vector Setting) to globally choose between the previous behavior and the more precise new behavior; the setting can also be overridden individually for each renderer.

  • Added Niagara GpuReadback Opengl optimization.

Crash Fix:

  • Fixed a potential crash in Niagara meshes when sections have materials with invalid indices.

  • Fixed a crash in Niagara sprites.

Bug Fix:

  • Fixed bugs occurring with Niagara Mesh Particle distance and frustum culling in Point, Spot, and Rect light shadow.

  • Fixed issues occurring with Niagara mesh shadows when the shadows are frustum culled, or culled using VisibilityTag.

  • Fixed crashes related to Static Mesh Data Interfaces being assigned a mesh that was marked Pending Kill.

  • Fix a crash that could occur when cooked out Niagara Emitters reset on some platforms.

  • Fixed crashes that could occur in the Niagara Mesh Renderer when reloading the Static Mesh Asset, and then changing the mesh.

  • Fixed bugs in Niagara occurring with Instanced Stereo for VR.

  • Fixed an issue in Niagara Blueprint functions caused by passing None in for various objects.

  • Exposed the Position for Point Attraction as an Input, but defaulting to Particles.Position.

  • Fixed an issue causing incorrect skeleton calculation when a master pose is used on CPU.

  • Fixed crashes that occurred when re-importing a static mesh that was being used by a Mesh Renderer.

  • Fixed frame-behind issues with the Niagara Component Renderer.

  • Fixed Z-axis sampling for Niagara curl baked fields.

  • Added copy-paste support for comments in the Niagara Overview graph. Emitter node positioning has been updated to be consistent with comment nodes when pasted, and will be pasted at the cursor location.

  • Fixed an issue occurring when trying to sample a Skeletal Mesh that has no valid LOD data streamed in.

  • Added the memory used by the 3D Neighbor Grid Data Interface to Niagara's GPU memory stats.

  • Fixed a bug where occlusion queries did not take perspective into account.

  • Dynamic Parameters beyond Cascade's range now return the material default value rather than the same value for all inputs.

  • Fixed a bug with culling/visibility shader for GPU emitters, where it would attempt to cull dead particles.

  • Fix a tear down/GC issue where the FFXSystem would be destroyed before the particle components that reference it.

  • Fixed a bug causing crashes when setting nullptr Asset.

  • A bug was causing incorrect removal of instances from the SpawningDataSet when they were in the MainDataSet; this has been fixed.

  • Bug Fix: Fixed a potential race that occurred when removing from pending spawn.

  • Fixed bugs caused by Particle Read Data Interfaces referencing emitters that are excluded when cooking for the target.

  • Wait for all simulation to complete before performing tick group update, to avoid potentially accessing simulation data that is still running concurrently.

  • Fixed an issue causing a crash when applying vertex painting to a Static Mesh that was being used for a Mesh Renderer in an active Niagara Editor.

  • Fixed issues that occurred with GC and pooled components when debugging was not enabled. The objects were created with the wrong outer, allowing them to be garbage-collected while playing.

  • Bug Fix: Removed strong reference from pool debugging to avoid confusion between different build configs; originally this was causing the shipping config issue to be masked due to the strong reference.

  • Bug Fix: Fixed HandleTimelineScrubbed so it uses UFXSystemComponent to handle all FX component types (Mainly Cascade and Niagara).

  • Previously, it was possible to use rapid iteration parameters in a worker thread while also accessing on the game thread. This has been resolved.

  • Niagara can now handle SkeletalMesh changes on a SkeletalMeshComponent when more than one Niagara System is referencing them.

  • Made RandomTriIndex more robust against missing or invalid data.

  • Ensured that pool prime does not occur inside PostLoad. It is not safe, as UStaticMesh does not ConditionalPostLoad the materials we need access to.

  • In certain cases, such as when there is no Asset set, a crash could occur. This has been resolved.

  • Fixed a crash that occurred when CalculateTickGroup is called from the SystemSimulation, as the prereqs were not updating.

  • Fixed a bug where local-space simple lights would render with a frame-old transform.

  • Fixed an issue where dump was not working with cooked out Emitters; modified the dump command so that we can perform a full dump of all Systems.

  • Fixed an issue with unmatched LODIndex between Register and Unregister. Also fixed potential nullptr access to SkelMesh.

  • Fixed an issue that could lead to transient namespace variables leaking between Emitters in a Niagara System.

  • Fixed the normals for Ribbon MultiPlane. The default is to flip normals on the standard two-sided render based on the view direction. An option has been added in renderer properties, to duplicate geometry with correct normals for opposite face and to re-enable backface culling for any material that doesn't behave correctly with the flipping normal. Updated test to show normals.

  • Optimized the Generated Code window in the NiagaraEditor.

  • Fixed a crash in the Scalability Manager.

  • Fixed an issue with dynamic bounds calculations for Niagara components with negative coordinates.

  • Fixed an issue where Niagara renderers were trying to update while their dependent objects (System/Emitter/Script) hadn't finished loading (RF_NeedsPostLoad). Since PostDuplicate is called before PostLoad, we need to defer any work on the renderers till after PostLoad. This existing work is handled by the System on load.

  • Fixed a problem where SpriteRenderer ParticleAlignment and ParticleFacing parameters were not respecting the LocalSpace setting on Emitters, and were defaulting to Worldspace. Regression from prior behavior.

  • Fixed issues with Niagara's compute shader generation.

    • Moved some string properties to Editor-only.

    • Now it skips deferred deletion of scripts unless they actually have cached shaders.

    • Moved FNiagaraShaderProcessorTickable to an FTickableGameObject so that compute shaders will be properly handled in -game situations.

  • Fixed an issue for a non-determinism cook with Niagara Renderer properties.

  • GPU Simulations were continually spawning the previous contents of their SpawnInfo struct if they became inactive. This has been fixed.

  • Fixed VectorVM assembly debug output.

  • Fixed an issue where device profile preview would not set correctly, because its device profile had not been loaded from its platform INI file.

  • Bug Fix: Fixed an issue where a Niagara-specific override console command would override the DP but would not set the fx.Niagara.QualityLevel cvar.

  • Bug Fix: Fixed an issue where after setting a DP preview, you could no longer properly use engine scalability.

  • Fixed a problem with the Niagara Matrix Multiplication node; made it actually a mul() rather than per-component scaling.

  • Fixed an issue causing a race condition in processing Niagara shaders. Now they are only processed when they have been released from the FShaderCompilingManager. BReleased has been added to the job, which is flipped when the job has actually been fully processed by the compiling manager.

  • Fixed an issue where internally complete Emitters would still render their final frame's data.

  • Fixed an issue for pooled Niagara components; components marked hidden in game would remain hidden when re-used from the pool.

  • Fixed a crash that happened when passing large text blobs into Niagara scratch pad names. Limited names to 256 characters.

  • There was a problem with Niagara VM bytecode compilation where self assignments had rvalues replaced in all expressions: A = A + B; OutputFloat(A); This has now been fixed.

  • Prevented some Niagara logspam in server builds.

  • Fixed an issue that could cause an incorrect component tick state for Niagara components.

  • Fixed uninitialized struct values for the Niagara plugin.

  • Fixed the initial bounds on fixed bounds systems.

  • Fixed an issue that could lead to incorrectly culled effects, due to the LastRenderTime not being reset early enough in Activate.

  • Fixed an issue where Ribbon Rendering with 2-3 particles was causing invalid UVs; these were either flipped or zeroed unless EdgeMode was set to Locked, due to same-age particles. Updated several Ribbon tests based on UV fixes with same-age particles, like beams, to show fixed UVs now. Updated some naming/descriptions, and the edit conditions of Ribbon UV Properties, to better reflect meaning and show what affects what.

  • Fixed a crash that occurred when you changed the size of a user-provided RenderTarget2D.

  • Made several Niagara shader compilation logging improvements.

    • Downgraded the importance of some of the logging.

    • Added system names to VectorVM logs so that they are more actionable.

    • Added NiagaraTrace channel.

  • Fixed a crash caused by a race condition in the unbinding of the GPUExecContext combined parameter store.

  • Fixed graph convert node pins so they properly dirty the graph.

  • Fixed a crash that occurred when spawn event handlers kill particles.

  • Ensured we don't try to resolve Niagara NPC references during PostLoad.

  • Fixed an issue with non-deterministic cooking with the Texture Asset backing Niagara curves. Added UTexture::SetDeterministicLightingGuid to be used for assets generated during cooking.

  • Fixed up UNiagaraComponent::GetDataInterface so that it just uses the existing implementation for the user parameter Data Interface (rather than the very specialized implementation that would only support the first GPU emitter).

  • Fixed ribbon indexing issues with multi-segment ribbons and initialization order of FNiagaraRibbonShapeCustomVertex.

  • Fixed an issue with resetting GPU Systems in some situations.

  • Fixed a bug with Niagara VM bytecode compilation for swizzled mask on LHS: MyVec3.yz = float2(1.0f, 2.0f);.

  • Fixed Niagara VM bytecode compilation for preserving original swizzle mask during self-assignments.

  • Ensured that NPC are fully loaded before we access them which was causing an issue if a compile was triggered from the PostLoad of a script/emitter/system.

  • Fixed crashes and bugs with Niagara Data Interfaces that must rebind their VM functions after a reinit.

  • DDC was getting polluted with NiagaraScript results when rapidly generating compile requests. This fix ensures that the data cached is associated with the source request rather than the current CompileId of the UNiagaraScript.

  • Fixed FNiagaraDataInterfaceArrayBool to use a Buffer<uint> on the GPU.

  • Fixed a problem for some cases in the Editor where CVars changed at runtime weren't applied correctly. Also created a threadsafety fix for CVar changed callback handles.

  • Fixed an issue causing Niagara crashes with -noshadercompile.

  • Fixed Niagara's Pow node to clamp the base to zero; it now matches materials and prevents divergent behavior between platforms.

  • Fixed a use-after-free bug within Cascade GPU simulations.

Deprecated:

  • Deprecated If node, Usage Selector node, and Sim Target node in favor of the new Select node and the old Static Switch node. Deprecated nodes will continue working, but are no longer offered in the action menu.

Online

New:

  • Updated libstrophe for android with openssl-1.1.1x support

  • OpenSSL has been upgraded to openssl-1.1.1k for Windows, macOS, iOS, and Android. All older versions of openssl for the Windows platform have been deprecated and removed from the source tree.

  • Added an ini-based setup for TestLeaderboardInterface, allowing ShooterGame to test its own leaderboard keys instead of using test keys.

  • Re-enabled Steam when running Single Process Play-In Editor, but disabled Steam Sockets. This will keep the connectivity path using local TCP/IP.

  • Pixel Streaming CVars can now be set using command line arguments. See documentation for specific arguments.

  • Multiple Pixel Streaming improvements such as parameterisation of many encoder settings, AMF encoder, and better pixel streaming stats.

  • Added indexed cache storage functionality for Switch Indexed cache storage support.

  • To use Indexed Cache, set [/Script/SwitchRuntimeSettings.SwitchRuntimeSettings] CacheStorageIndexMax to the max index of cache storage that will be used.

  • Fixed a clang issue with LPTSTR conversion.

  • Changed LogHotfixManager default verbosity from Verbose to Display. Significant log lines were updated to Log.

  • Engine bundled WebRTC upgraded to Release M84 for Windows and Linux. Engine Opus version upgraded to 1.3.1-12 on Windows and Linux to match WebRTC. Developers using the old bundled WebRTC directly, instead of through the Pixel Streaming plugin, will need to manually link the old WebRTC or upgrade their custom implementations to utilize the new WEBRTC library.

  • Moved Party Beacon crossplay restriction definitions to ini.

  • Added additional platform information to the Social Platform Description in order to to group similar platforms.

  • Improved functionality of Pixel Streaming web player, including more statistics data.

  • Added a CVar to allow guest accounts on GDK account picker. To use it, add [OnlineSubsystemGDK] bAllowGuestLogin=true

  • Added a configuration option to perform or skip the XBox Live Gold check. Defaults to XBox Live Gold account required.

  • Promoted LogHotfixManager lines to "Log" due to community feedback that they are commonly used as a reference.

  • Added Exec function to SocialToolkit, SocialManager now attempts to call Exec on all its SocialToolkit instances.

  • Quality of Service (QoS). Quality of Service pings are now performed using non-blocking sockets on a single async task thread. Spawns one socket per protocol type such as IPv4 and IPv6, based on the list of target host addresses supplied.

  • Promoted IsFriendRestricted from Protected to Public to allow for quick usage by Game implementations.

  • Added configuration options to enable or disable EULA and waiting room checks on PC/Mac.

  • The Engine Framebuffer Pixel now formats automatically.

  • Commandlets are now configured to function correctly if rendering is enabled or when passing -AllowCommandletRendering.

  • Made SocialUser's class method ValidateJoinTarget virtual, in order for it to be overridden at the game level.

  • Adjusted MarkupTag code to no longer use TypeName.

  • Added virtual "GetMarkupTagForPlatform" function to SocialUser class, so that games can override the icon or platform.

Crash Fix:

  • OnPartyJoined delegate listener will now clear on user logout. This fixes a crash observed when the local player changes.

  • Fixed an ensureMsgf crash that occurs when an Interaction Type is not recognized.

Bug Fix:

  • Audio over Pixel Streaming is now of higher quality and correctly plays in stereo.

  • Fixed platform specific issues in Party Platform Session Monitor.

  • Improved parsing of RTC ice server configuration for Pixel Streaming

  • Fixed instances of UserPlatform being constructed with an empty string which triggers an ensure.

  • Secondary local players can no longer be promoted by primary players.

  • Fixed connecting to Pixel Streaming session from browsers running on Mac or iOS.

  • OnApplicationActivationChanged now correctly fires on application reactivation

  • Changed GetCachedAchievements in Sony interfaces so they return an array of readable values.

  • SocialManager no longer marks itself as PendingKill on shutdown. Instead it sets a "bShutdownPending" bool.

  • Added ABORT_DURING_SHUTDOWN macro that checks the bShutdownPending bool, then displays a log message, and immediately returns. This macro is used in all SocialManager callbacks that might fire after a Shutdown occurs.

Deprecated:

  • The VivoxVoiceChat plugin is deprecated as of Unreal Engine 4.27, and is scheduled for removal in Unreal Engine 5.0.

  • Deprecated old versions of WebRTC that were not used by any of the projects.

  • Added new version of ProcessRequest (and derivative methods) that returns void instead of bool. Deprecated the previous versions for 4.27.

Removed:

  • Removed STUN/TURN server binary as it is no longer maintained.

HTTP

New:

  • Added configurable time limits for the flushing active HTTP requests when shut down or suspended. This aids compliance with platform requirements for shutdown and suspend times.

  • The trusted root certificate bundle used by the SSL module has been updated.

  • Added a new "Optional Object" JSON Serialization Macro.

  • HTTP Request Interface. The IHttpRequest interface has been modified so that a timeout can be specified on a per-request basis.

Bug Fix:

  • Resolved a non-thread safe execution pattern when handling request progress updates in AppleHTTP.

  • ProcessRequest and CancelRequest completion callbacks always fire on the main thread for all HTTP implementations.

  • Added ability to cancel all requests in progress when suspending.

Online Subsystem

New:

  • OnlinePurchaseInterface FinalizePurchase method now takes ReceiptInfo as an optional parameter.

  • Included party data in QueryPartyJoinability response.

  • Implemented GetSocialPlatformName method in the OnlineSubsystem Interface for use in labeling a platform's friend list.

  • Added a missing enum "VoiceChatResults" to the LexToString function in the VoiceChatManage class.

  • Modified the User Search to use the new "withUserGuid" endpoint.

Bug Fix:

  • Fixed OnlineEncryptedAppTicketInterfaceSteam using a unicast delegate where a multicast delegate was intended.

  • FUniqueNetId Thread Safety: It is now possible to use ESPMode's class method ThreadSafe with FUniqueNetId shared pointers and references by opening CoreUObject.Build.cs and changing the UNIQUENETID_ESPMODE public definition from ESPMode::Fast to ESPMode::ThreadSafe, then recompiling. The FUniqueNetIdPtr/FUniqueNetIdRef typedefs in CoreOnlineFwd.h are provided to help migration. For example, you can replace TSharedPtr<FUniqueNetId> with FUniqueNetIdPtr to cause it to use the appropriate ESPMode.

Deprecated:

  • Deprecated Online Subsystem Twitch. The web API has not been kept up to date. This will be removed in a future engine release.

OpenSSL

  • Deprecated old versions of OpenSSL for all platforms.

WebSockets

Bug Fix:

  • LWS Web Socket connections will now use a dynamic string buffer size when dealing with UrlPaths.

XMPP

Deprecated:

  • XMPP Jingle has been deprecated, licensees must move over to using the updated XMPP Libstrophe system for their message handling.

Physics

New:

  • Added Element Index to the Blueprint Break and Make hit result functions.

  • Added PopFutureOutputData_External to SimCallbackObject to get all physics thread outputs, including outputs past the current time.

Bug Fix:

  • Fixed Sweep_Geom to calculate the correct transform for queried shapes when querying from a component with multiple shapes like a skeletal mesh component.

  • Corrected SyncBodies logic for scenes with multiple custom Chaos solvers to correctly sync back results to components.

Clothing

New:

  • Chaos Cloth - Added fictitious centrifugal forces to compensate for when the Velocity Scale is reduced.

  • Chaos Cloth - Added a new Continuous Collision Detection mode. This is more accurate than sub-stepping, but can be more taxing on performance.

Improvement:

  • Added ISPC optimizations.

  • Improvement: Removed inactive LOD constraint rules from the simulation.

  • Re-enabled geodesic long range attachment and deprecated bUseGeodesicDistance.

Bug Fix:

  • Chaos Cloth - Fixed a crash caused by constraint map re-allocations.

  • PhysX Cloth - Fixed a crash when applying a higher definition LOD 1 cloth than the one used in LOD 0.

  • Cloth Painter - Reduced the long pause / delay before being able to interactively preview the simulation (while pressing on the H key) while in the cloth paint editor mode.

  • Chaos Cloth - Fixed an issue causing a bad simulation impulse at startup.

  • Chaos Cloth - Fixed issues that were occurring when a non unit scale was used on the owner component.

  • Chaos Cloth - Removed collision tests from collision particles that are not in the active LOD.

  • Cloth Painter - Fixed lag that was occurring after each paint stroke.

  • Chaos Cloth - Corrected an issue that occurred in cases where the simulation data was queried before the simulation's first step.

  • Chaos Cloth - Fixed an issue with the AnimDriveSpringStiffness parameter effect on the simulation that occurred when its value was changed in the Chaos Clothing Config UI.

  • Cloth - Added tapered capsules to the primitive lists to pass as external cloth collision sources.

  • Chaos Cloth - Fixed a crash in multi-cloth simulations caused by a race condition on the offset creation.

  • Chaos Cloth - Fixed a crash that occurred when a Skeletal Mesh asset with more than one LOD had only one cloth LOD.

  • Chaos Cloth - Fixed an overzealous collision LOD deactivation that was preventing external collision source updates.

  • Chaos Cloth - Fixed missing Animdrive stiffness and MaxDistancesMultiplier updates.

  • Chaos Cloth - Fixed a bad local space simulation impulse at simulation startup, that only became apparent with a lower than one Velocity Scale.

  • Cloth - Fixed an issue where sometimes the Undo function would reset the cloth LOD. \

Collision Detection

New:

Physics Asset Editor

Bug Fix:

  • Fixed simulation sometimes starting unexpectedly in the Physics Asset Editor when editing asset properties.

  • Keyboard navigation in the Physics Asset Editor skeleton tree view is now properly ignoring hidden elements.

  • The Physics Asset Editor 3D viewport and skeleton tree view are now properly synchronized when the selection changes in one or the other.

Rigid Bodies

  • Fixed the Rotation of Mass computation in all oriented implicit geometries to properly account for the rotation of the geometry axis compared to the Z axis.

Physics

Platforms

New:

  • Unreal Engine now ships with Dockerfiles and example code for official Docker container images.

  • The Steam SDK has been updated to 1.51.

  • Refactored Platform TextureFormat classes to be subclasses from a new FChildTextureFormat class that handles compressing with other modules, and then runs a post-process on it.

  • New: Pulled GetPixelFormatForImage out into a separate function in ITextureFormat, so that child formats can inherit a parent format that generates without needing to compress a test texture.

Bug Fix:

  • Added the function UserHomeDir to FGenericPlatformProcess, so that TestPAL could be updated to test UserHomeDir on Linux without breaking other platforms.

All GDK

New:

  • For GDK Pass-type entitlements, acquiredDate is appended to the receipt ID format, so that your game service can tell separate purchases apart. If your game services parse receipt IDs, or you have already stored receipt IDs in your game services, please consider migrating to this new format.

Bug Fix:

  • Fixed a potential block that occurred when checking account privileges.

  • Stopped the creation of search handles for sessions that aren't meant to be searchable.

  • Fixed a thread safety issue that could arise when the user was querying consumables on the platform store.

  • Fixed a crash that occurred when the user joined a multiplayer session with verbose logging enabled.

  • Removed the memset of a shared pointer in FOnlineAsyncTaskGDKQueryAchievements.

  • Fixed an issue with AutoPIX not working on GDK.

  • Fixed a crash that occurred while toggling between constrained and running applications. Added thread safety when handling responses from multiple checks.

Linux

New:

  • Moved to LLVM 11.0.1

  • When dynamically loading libraries under a Unix platform, the engine now also checks the global path.

  • Android support added for Installed Builds on Linux.

  • Added support for returning the last measured CPU time on Windows and Linux platforms. UnixPlatformTime can now update the CPU time independently of the fixed 250ms threshold.

  • Forked Process - Added DEFAULT_FORK_PROCESS_MULTITHREAD definition thats sets the default multithread behavior of a forked process (the default is singlethread).

  • New: Forked Process - Added -DisablePostForkThreading cmdline option that disables MT if the default is true.

Bug Fix:

  • Time moving backwards has been changed to a warning over a fatal error. This allows that time to be clamped and provides an opportunity for the system to recover.

  • This fix ensures that our ClockSource is always initialized.

  • LinuxAArch64 is now allowed to build and package CrashReportClient.

Mac

New:

  • macOS Catalina and above now supports Apples Game Controller framework for connecting the latest console controllers.

Windows

Bug Fix:

  • Previously, when using more than one monitor and switching from Window mode to Fullscreen mode, if the window was partially outside the virtual screen one monitor switched to Fullscreen and the other monitor only showed a single frame of the game. This has now been fixed.

  • GetWorkArea on Windows now correctly supports Remote Desktop.

WinGDK

New:

  • Added support for D3D11 RHI.

Bug Fix:

  • Fixed an issue that occurred with Visual Studio project generation after installation of February GDK. This prevents the Visual Studio solution from failing to load due to a duplicated project item MGCCompile error if the UWP component is installed in Visual Studio.

Linux

Crash Fix:

  • Fixed a crash that happened when no HOME environment variable was set.

Rendering

New:

  • Ray traced ambient occlusion, shadows, reflections, GI and skydome passes use a new sampling sequence that converges faster and diffuses the visible error in screen space.

  • The path tracer now performs anti-aliasing with a multi-pixel filter kernel for improved quality. The width of the filter can be set in the PostProcessVolume settings. Settings such as TAA are automatically disabled while the path tracer is active.

  • Improved the support for using the path tracer with Movie Render Queue.

  • The path tracer supports per light show flags and can isolate direct vs. indirect lighting.

  • The path tracer now applies backface culling to camera rays to match raster modes.

  • Orthographic cameras are now supported by the path tracer.

  • Updated the Vulkan SDK to 1.2.162.0 from 1.2.148.2.

  • Added Scene Capture visibility flags.

  • MovieRenderPipeline and DLSS - Added support for the DLSS Plugin to MRQ and for the supporting UI to control quality settings.

  • Adding logging of the before and (attempted) after states to viewport resize failure logging.

  • Enabled RenderDoc in cooked builds.

  • Added support for PIX GPU captures on Windows with a new plugin.

  • Added an option to disable ray tracing for old drivers.

  • Adding logging of the GPU status when a query timeout is hit.

  • Hair passes and hair shaders shouldn't have any performance impact on runtime when the HairStrands plugin is disabled.

  • Implemented RAY_TRACING_PAYLOAD_FLAG_IGNORE_TRANSLUCENT.

  • Added bIgnoreTranslucentMaterials to TraceMaterialRay.

  • Added extra logging for CreateSwapChain failing with E_INVALIDARG.

  • Fixed hair transmittance applied on hair cards in forward rendering.

  • Movie Render Queue: Users can now set overscan to work in combination with EXR output.

  • Added a cvar to set the minimum Windows version to enable ray tracing in DX12.

  • Added adaptive voxel allocation to avoid overallocation, allowing for a large set of grooms casting shadow.

  • Added support for screen percentage in ray-tracing skylight.

  • Changed the hair cards sampler to use anisotropic sampling for better rendition.

  • Added Blueprint methods to create volume / array textures.

  • Added a project setting to enable / disable auto virtual texture import. The setting defaults to enabled to match existing functionality.

  • Updated the hash functions Rand3DPCG32 and Rand4DPCG32 to have higher quality and faster GPU runtime performance.

  • Moved the location of virtual texture feedback per frame. Previously, we sampled the same location for feedback each frame, now we jitter the location over the virtual texture feedback tile to ensure we touch each location over time.

  • Added new optional hair strands composition points (after the separate translucent pass, and before the translucent render after DOF). \

  • Added an option to cull objects by distance and solid angle behind the camera in ray tracing.

  • SortedIndices and SortedIndicesOffset in NiagaraMeshVertexFactory are now part of FNiagaraMeshUniformParameters instead of being separate resources. This is needed for ray tracing hit shaders, which should always be uniform buffers or loose parameters.

  • Added ray tracing support for per instance attributes such as color for Niagara meshes.

  • Refactored per-vertex attribute interpolation in ray tracing shaders to reduce register usage. Attributes are now interpolated explicitly inside the per-vertex loop. Removed a few variables that are no longer used.

  • All ray tracing shaders now explicitly share the global root signature. This allows separate pre-compilation of ray tracing pipeline collection objects containing only hit shaders.

  • Added support for AMD HitToken extension.

  • Added clear coat approximation to the experimental ray-traced reflection shader.

  • Added cvars to globally control ray tracing shadows for different light types. All light types are enabled by default and are still controlled by r.RayTracing.Shadows as well as per-light settings. The new cvars are intended for global easy overrides, allowing fine grained control over quality vs performance in games, without content changes. New cvars:

    • r.RayTracing.Shadows.Lights.Directional

    • r.RayTracing.Shadows.Lights.Point

    • r.RayTracing.Shadows.Lights.Spot

    • r.RayTracing.Shadows.Lights.Rect

  • Moved pixel coord into an explicit field of the ray-tracing payload. This grows the payload structure to 64 bytes and invalidates all ray-tracing shaders.

  • Added r.RayTracing.Shadows.AcceptFirstHit CVar that adds RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH to shadow rays, allowing the ray tracing process to terminate before the real closest hit point is found. This improves shadow ray tracing performance, but may theoretically result in worse shadow denoising quality.

  • Added various improvements for the experimental ray-traced reflection shader:

    • Implemented support for the reflection capture fallback.

    • Excluded unlit and hair pixels.

    • Now respects cvars for direct and indirect lighting.

  • Implemented a roughness threshold for skipping any-hit shader invocation in the experimental ray-traced reflection shader.

  • Implemented a roughness bias for experimental ray-traced reflection, controlled by r.RayTracing.Reflections.ExperimentalDeferred.SmoothBias (default = 0). This can improve reflection performance in certain scenes by forcing ray directions to be more coherent. Additionally, this allows globally controlling RT reflection appearance without content modification.

  • Ray-tracing shader creation is now skipped when run-time ray-tracing support is compiled out. This replicates logic from FShaderCodeArchive::CreateShader in FShaderMapResource_InlineCode::CreateRHIShader.

  • Added the r.D3D12.DXR.MinimumDriverVersionAMD cvar to allow banning ray tracing on drivers that may be too old or have known issues. The default is 0, which allows any version.

  • Implemented an optional non-blocking ray-tracing PSO compilation mode, eliminating CPU time spikes at the cost of rendering some objects using a fallback shader (opaque black). \ The new cvar r.RayTracing.NonBlockingPipelineCreation can be used to opt-in to non-blocking mode (default=0, preserving previous PSO creation behavior). Non-blocking mode should only be used in the game where hitches are not acceptable. Any offline engine use cases, such as cinematic rendering, should use a default blocking mode to avoid any artifacts due to fallback shaders.

Improvement:

  • Improved the sampling pattern used by the path tracer to speedup convergence.

Crash Fix:

  • Corrected a crash with invalid ISM indices and ray tracing enabled.

  • Fixed a crash caused by a null pointer dereference in distance field generation while cooking assets.

  • Corrected a RHI Bypass crash caused by RHI Resources losing their reference counts before being used in a draw.

  • Fixed a Lightmap Density view mode crash when using tessellation.

  • Ensured that adaptive virtual textures allocation happens before any virtual texture flush. This fixed an intermittent crash bug when using adaptive virtual textures.

  • Fixed a crash when enabling r.RayTracing.ExcludeDecals because ray tracing instances were skipped but VisibleRayTracingMeshCommands had already been registered.

  • Fixed a crash with hair strands when running in split screen / VR due to VR not being supported yet.

  • Fixed a crash when deleting a groom asset while it is still being used.

  • Fixed a crash when ray tracing shadows is the only active ray tracing effect and r.raytracing.shadows is set to 0. While the "r.RayTracing.Shadow" cvar is thread safe, it is bound to the GRayTracingShadows variable, which is not. This could produce a scenario where the variable was still set to 1 when the cvar was already 0, and therefore the RenderRayTracingShadows function would be called when it should not have been.

  • Fixed a crash in SingleLayerWater when using the forward renderer.

  • Fixed a ray-tracing-related crash on startup when running on an old windows version or an old driver. The version checks must be done much earlier during initialization.

Bug Fix:

  • Fixed possible NaN values from UniformSampleDiskConcentric.

  • Corrected washed-out appearance in path traced images at high exposure values.

  • Fixed UI clamps of Path Tracing related scene settings.

  • The path tracer output is invalidated in more cases such as object deletion and setting changes.

  • Fixed the LockStructuredBuffer to work correctly with the OpenGL RHI thread.

  • Fixed a case where per-instance data size did not match a number of instances the Hierarchical Instanced StaticMesh Component was attempting to render.

  • Corrected a hair strands precision issue that occurred when a groom was attached to a skeletal mesh whose bounding box was too large.

  • Fixed the groom property override and reset on component. This allows a clearer view of what properties are overridden by a Groom asset compared to a Groom component.

  • Fixed forward lighting on hair strands rendering.

  • Fixed bad BC compression of the Runtime Virtual Texture mask channel.

  • Fixed a missing uniform buffer in custom depth passes.

  • Disabled occlusion meshes for primitives that only render to runtime virtual texture.

  • Fixed a D3D12 Race condition for ActiveGenerations having dequeue called concurrently in WaitForCompleteion and CleanupActiveGenerations, resulting in an incorrect double pop, causing an unrelated sync point to be dropped from processing (this fixed random meshes flickering, random GPU crashes / hangs, possibly fixed numerous texture corruption cases).

  • Copied strings being registered to FVisualizeTexture, because it can accept textures with dynamic string names allocated with FRDGBuilder::AllocObject, while GVisualizeTexture outlives the RDG builders.

  • Fixed an issue where pending barriers wouldn't always be submitted in DirectX12.

  • Enforced respect for the existing virtual texture setting on texture reimport. Previously a texture might change from a regular to a virtual texture simply because of a reimport, which is usually not desirable.

  • Configured the procedural mesh object to accept ray tracing updates.

  • Fixed virtual texture pages not being unmapped for virtual textures with a non-zero FirstMipToUse.

  • Fixed handling of null SRVs in RHI Validation.

  • The RHI command list is now flushed if we are using null RHI and are exiting the RHI just in case commands have been queued up.

  • Fixed the graphic corruption caused by streaming levels reloading in combination with the DisplayCluster module.

  • Format support is now checked before using display formats.

  • Fixed RTAO to work correctly when SSAO intensity is set to 0

  • Fixed a compilation warning for material referencing the hair attributes node.

  • Fixed RenderTarget validation.

  • World Origin shifting for Runtime Virtual Texture volumes is now supported.

  • Fixed an uninitialized texcoord value for LoadVertexFactoryInputForHGS in GeometryCacheVertexFactory.

  • Corrected a missing application of pre-shadow onto the hair strands shadow mask.

  • Added some checks in RHIGetAvailableResolutions around GetDisplayModeList returning DXGI_ERROR_NOT_FOUND.

  • Fixed disable section in ray tracing that was not working with cooked content.

  • Re-added missing SSR Visualization.

  • Fixed an issue where ray-traced reflections were not being accurately represented in multi-view (such as split-screen) when material sorting for ray tracing is enabled.

  • Fixed an issue with querying for local video memory in DX12.

  • Now correctly use anisotropic filtering instead of bilinear by default for runtime virtual textures.

  • Remapped virtual texture ancestor pages when doing an Evict. This fixed an issue where unmapped pages were still referenced in the page table leading to incorrect rendering for a few frames when the physical page was reallocated and written.

  • Fixed RHIReadSurfaceFloatData ignoring the mip / array index.

  • Fixed the resource size calculation for streaming virtual textures. The size should be based on the memory footprint, not the disk footprint. Note that any streamed data ends up in a fixed-size pool.

  • Corrected RenderDoc captures asserting when running with -onethread.

  • Fixed transforms of CPU Niagara meshes instances in ray tracing.

  • Fixed the IsRotationNormalized() assert in Niagara meshes with ray tracing enabled.

  • Fixed a possible deadlock in the ray-tracing PSO compilation tasks on machines with low CPU core counts. Ray-tracing PSO compilation tasks used to run on high priority threads and would internally create additional tasks and immediately wait on them. The inner tasks also use high priority, but they may never get to run as WaitUntilTasksComplete does not execute anything itself and all HP threads already run the outer tasks. The solution is to make the outer tasks run at normal priority (or lower), so that inner tasks will always run on other task threads.

  • Fixed DeprojectScreenToWorld inaccuracy when the camera is very far from the world origin (for example, painting clouds on earth from space when using the Volumetrics plugin).

  • Texture - Stopped logging an invalid data warning for DDC misses.

  • The stencil buffer is now cleared prior to the distortion accumulation pass to prevent unintended screen distortion.

  • Clamped the frame sync slack amount to not exceed one frame interval.

  • Fixed dynamic memory allocation every time FStaticMeshSceneProxy::GetLOD is called in development builds.

  • Fixed a potential use-after-free issue when RenderData is null, because the static mesh name did not live long enough.

  • Fixed the MeshBatch.SegmentIndex assignment for procedural ray tracing meshes.

  • Fixed a potential deadlock on shutdown in the FRHIFrameOffsetThread.

  • Corrected the handling of the mip tail in Texture2DArrays. FTexture2DArrayResource was not respecting the mip tail count, and CreateTexture was not correctly copying the bulk data.

  • Output pixel coordinates are now explicitly passed to ray-tracing hit shaders through payload instead of using DispatchRaysIndex to emulate SV_Position. This fixes dithering effects in ray-tracing shaders when ray sorting is used.

  • Fixed a race condition that occurred when initializing FormatVersionMap for FShaderCompileUtilities::DoWriteTasks.

  • A BitMask template function is now used to avoid bugs when creating masks where the number of bits requested equals the type bit size.

  • Added a fix to prevent the pre-loadscreen pumping of render thread ticks when RHI is suspended.

  • Fixed incorrect validation of the stencil plane in DSV surfaces. SRVs were always set up to validate against the depth plane, even for stencil SRVs, causing the validator to miss some barrier errors.

Deprecated:

  • Deprecated the PreviousLODLevel in UStaticMeshComponent. This member was added back in 2005 and all uses of the member have since been removed.

  • The groom length clip property is now deprecated and will be removed in a subsequent release.

  • Deprecated the unused function UStaticMeshComponent::UpdatePreCulledData

FX

New:

  • Open Color IO - Now when a user makes any external changes to the raw OCIO config file or any related files, UE4 will bring up a dialog prompting the user to reload the related config file.

    • These files will also be reloaded on UE4 start.

    • Added a button to reload the raw config file manually.

Bug Fix:

  • Fixed an issue with texture resources being deleted before being released.

Lighting

New:

  • The path tracer now implements multiple-importance sampling for all light and material types to improve sampling quality across the full range of light source sizes and roughness values.

  • The Source Length attribute on point and spot lights is now supported by the path tracer.

  • Skylight is now hidden from view in the path tracer unless real-time capture mode is active.

  • Textured Rect Lights are now supported in the path tracer.

  • The path tracer now approximates caustic light paths to reduce noise on scenes with glass and shiny metals by default.

  • Non-shadow casting lights, objects, and materials are now supported in the path tracer.

  • The path tracer now supports barn doors on Rect Lights.

  • The path tracer now supports the attenuation radius falloff controls.

  • Added MaxPathExposure to PostProcessVolume to clamp path tracer fireflies.

  • Added a setting for the path tracer to control if emissive materials affect other surfaces or not. This is enabled by default, but can be turned off to reduce noise if those surfaces are already represented by lights.

  • The Path Tracer now supports more than 256 lights. Performance will vary based on the amount of overlap in the attenuation radius.

  • Ray-traced shadows from Skylights now support the real-time capture mode.

  • Improved sampling quality for Skylights.

  • IES profiles are now supported in the path tracer.

  • An OpenImageDenoise-based plugin is now provided for the Path Tracer to reduce visible noise after the target sample count has been reached.

  • Added Sky Atmosphere functionality to recover the atmosphere transmittance from Blueprint (for a Directional Light).

  • The LMGPU panel is now forced to refresh on starting and stopping building to enforce CanEditChange settings.

  • Added a shadow source angle factor for ray-traced shadows from directional lights. This allows artists to vary the penumbra shape without changing the light shape.

  • Contact shadows now respects the "cast dynamic shadows" flag

  • Added ray tracing global illumination improvements to the final gather method.

  • Added support for ray-traced, subsurface shadows. This emulates raster, subsurface shadows by casting a secondary ray from the point-of-view of the light source. A homogenous volume is extruded from the furthest occluder to the shading point where the density of this volume is proportional to the shading model's opacity.

  • Subsurface falloff is now applied to contact shadows similar to the PCF path. This replaces the ad-hoc lightening of transmission shadows

  • Added a new flag for "cast contact shadows", which is stored in Gbuffer and respected (as much as possible) when applying contact shadows.

  • Added cvars to enable / disable ray-traced global illumination contribution by light type.

    • r.RayTracing.GlobalIllumination.Lights.DirectionalLight (default = 1)

    • r.RayTracing.GlobalIllumination.Lights.PointLight (default = 1)

    • r.RayTracing.GlobalIllumination.Lights.SpotLight (default = 1)

    • r.RayTracing.GlobalIllumination.Lights.RectLight (default = 1)

Improvement:

  • Adjusted barn door visualization to match how lighting is computed from Rect Lights

Bug Fix:

  • Fixed shading of points inside the barn door volume of Rect Lights

  • Fixed path traced shadow artifacts on point lights with tiny radiuses.

  • Ray traced shadows from point lights are now more robust for small radiuses.

  • Fewer auxiliary passes are rendered when the path tracer is active, speeding up render times in complex scenes.

  • Fixed lighting inconsistency with point lights of 0 radius.

  • Materials tagged as sky are now skipped for indirect rays by the path tracer to prevent double-counting against the skylight. Ensure that any such materials have the "Is Sky" checkbox enabled.

  • PostProcessVolume and Skylight now respect the different editor Hidden flags (Outliner, DataLayers, Level).

  • Fixed DFAO artifacts when the global distance field is disabled.

  • Fixed multi-view rendering for the Path Tracer.

  • The Indirect Lighting Intensity factor is now respected when computing ray-tracing global illumination.

  • Made Distance Field Ambient Occlusion (DFAO) mutually exclusive with Ray Traced Ambient Occlusion (RTAO).

Materials

New:

  • File containing stable shader keys used for PSO cache is no longer text (scl.csv) but a binary (.shk)

  • Performance of "expand" step during the PSO cache collection has been greatly improved.

  • ShaderCompiler will print a warning if it detects that a shadermap is taking too long to compile.

  • ShaderCompiler will print out a warning when a shadermap is taking too long to compile and can crash the build if configured so (useful to prevent the builds from being stuck indefinitely).

  • For a chunked build, shader library is now also split into chunks, so the shader code is there for the assets that need it.

  • Mapping between the assets and shader code will now be copied to build's Metadata after the cook.

  • Added an in-memory cache of shader compile jobs, which reduces the amount of shaders needed to be compiled.

  • "Missing cached shadermap" string now includes more information about the asset, including the DDC key hash.

  • The path tracer now supports Subsurface and Subsurface Profile materials with a random walk approach.

  • The cloth shading model is now supported in the path tracer.

  • Improved sampling quality for the shading models supported by the path tracer.

  • All material blending modes are now supported in the path tracer. Translucent materials will produce (rough) refraction when a non-unit IOR is provided.

  • The Thin translucent shading model is now supported in the path tracer. This produces colored transparency by default, and when refraction is specified, will produce (rough) thin refraction.

  • An error is now thrown when a translucent material with 'Output Velocity' enabled (in which case it writes to depth buffer) contains material nodes reading from the depth buffer, as it cannot read from and write to the depth buffer at the same time.

  • Added an option to blend skylight cubemap on forward shaded elements. Disabled by default to preserve performance.

  • Added Supports Anisotropic Materials as a DDPI setting to disable anisotropic materials on a per-platform basis. By default, Supports Anisotropic Materials is false.

  • The "missing cached shadermap" string now includes more information about the asset, including the DDC key hash.

  • ShaderCompiler will now print out a warning when a shadermap is taking too long to compile and can crash the build if configured so (this is useful to prevent the builds from being stuck indefinitely).

  • Added an in-memory cache of shader compile jobs, which reduces the amount of shaders needed to be compiled.

  • Added a Blueprint API to query material statistics.

  • Removed the dedicated logic around compiling debug view mode shaders on demand, instead they are now included in the regular shader map, and now compiled on demand by the new system used for all shaders.

  • Added the ability for shaders to check whether the editor is being targeted in ShouldCompilePermutation.

    • This now excludes debug view mode shaders from non-editor paks. Previously, debug view mode shaders were never cooked into .pak files, so this should match previous behavior.

    • This means more compile jobs will now be submitted in-editor, since debug view mode shaders jobs are now submitted by default, but this shouldn't affect overall editor performance, since important shaders should still compile on demand at a higher priority.

  • Now, when a 'ForceLocal' shader compiler job is prepared, if an existing job for the same key has already been started on an XGE worker, a copy of the job is also kicked with the 'ForceLocal' priority.

  • Added on-demand shader compiling:

    • Rendering from potentially incomplete shader maps is now allowed, as long as all required shaders are present.

    • Attempts to access missing shaders will now kick compile jobs on demand.

    • Shader compiler interface was refactored to better handle lots of (potentially duplicated) jobs being submitted from multiple threads.

Bug Fix:

  • Relaxed PSO cache filtering logic as to prevent it from flagging valid cases (particularly with packed normals in vertex declaration).

  • Fixed GPU skin vertex factory using too many TEXCOORD semantics.

  • Fixed non-deterministic name sorting in memory images that resulted in spurious build differences.

  • Fixed non-determinism in material shader maps (reduces patch sizes).

  • Added a saturate node to the parallax bomb material function to prevent Max Steps potentially exploding, which can hang the GPU.

  • Added support for sampling Eye Adaptation in decal materials.

  • Fixed the generation of material texture scales, used for texture streaming.

  • Fixed debug texture scale rendering.

  • Debug view rendering now takes the blend mode from the original material, which fixes flickering translucent materials.

  • Information from FDebugViewModeInterface is now considered when deciding whether or not to compile specific debug view mode shaders.

  • Fixed inheriting static material parameters from one material instance to another.

  • Fixed various problems related to material layer parameters.

  • Added changes to clear coat shading model, addressing several UDN issues:

    • Corrected ClearCoat not properly modifying roughness for specular contribution of the under-coat when lighting with area lights.

    • Fixed an issue with bottom-normal not initializing all context dot-products needed by some lights.

    • Now prefers NoL for the geometry term to have closer parity with DefaultLit when ClearCoat=0.

    • Now respects GBuffer.Specular for reflection specular contribution when ClearCoat=0.

    • Reverted the application of NoL to the refracted specular lobe.

    • Now apply the Fresnel term to the non-refracted bottom coat to handle cases when ClearCoat<1.

  • Relaxed PSO cache filtering logic to prevent it from flagging valid cases (particularly with packed normals in vertex declaration).

  • Trying to compile/render debug view mode shaders is now skipped, if FMaterial::ShouldCache returns false for any of the required shader types. This fixes a failed check / crash which occurred when trying to compile landscape debug shaders, as landscape material resources have a complicated ShouldCache override.

  • Various fixes related to material layer inheritance

  • Ensured FMatExpressionPreview::ReleaseResource happens on the render thread.

  • Ensured the Lambda that assigns RenderingThreadPendingCompilerEnvironment holds a ref-count

Deprecated:

  • Volumetric Cloud prototype: Disconnected the material connection to the volumetric cloud .ush file that was causing cook errors on some platforms. Please use the Volumetric Cloud actor, or reconnect the pins in the prototype material.

Mobile Rendering

New:

  • Vulkan is now allowed on devices with Adreno5xx GPUs running Android 10 or a newer Android version.

  • Added an onscreen warning for mobile for a misused Sky Atmosphere. This will help to identify why Sky Atmosphere is missing on mobile platforms.

  • DepthPass FullOpaque is now added when SDF or AO are activated on mobile.

  • DepthPass is now decoupled from BasePass when SDF or AO are active.

  • Removed reprojection from basepixel, it is no longer needed as we are now using current frame depth.

  • The TC_ReflectionCapture setting is now hidden.

  • Added support for Panini projection on mobile.

  • FXAA mobile is now available, it can be enabled with r.DefaultFeature.AntiAliasing=1

  • Added a SSAO technique to the mobile forward renderer.

  • Added a config cache for a per-platform toggle of MobileNumDynamicPointLights.

  • Implemented DistanceField Shadow on mobile (no GL / Metal for now).

  • Added support for the ASTC decode mode on GL.

  • Updated Metal version to 2.1 for the iOS desktop renderer.

  • Enabled Manual Vertex Fetch on the iOS desktop renderer.

Bug Fix:

  • Reducing the number of supported dynamic point lights on mobile (r.MobileNumDynamicPointLights) will now correctly reduce the number of bound constant buffers.

  • Read-only buffers are now explicitly marked as read-only in Vulkan shaders to improve device compatibility.

  • Fixed incorrect usage of Vulkan sub-passes while MSAA is enabled.

  • Fixed a case where unbuilt static objects were not affected by indirect lighting on mobile.

  • Generated Vulkan shaders will no longer initialize variables to zero where it is not required.

  • Added a missing DBuffer Emissive blend mode remapping for a mobile decal rendering.

  • Fixed runtime mipmaps generation on mobile.

  • It is now possible to opt out Encoded TextureCube from the package if the platform doesn't need EncodedData.

  • Fixed modulated shadows so that the Modulated Shadow option is greyed out if the Light is not Stationary.

  • Made fixes to the VK_EXT_ASTC_decode_mode extension.

  • Corrected the VertexInterpolator material node so that it functions correctly when used in a mesh particle material.

  • Fixed the DisableFlipCopyGLES logic that inverted scene captures with Android GLES RHI.

  • Fixed the Vulkan CPU readback.

  • Fixed a thread deadlock between ray tracing and RHI.

  • The calling context is now passed down during defrag instead of accessing the global context.

Postprocessing

New:

  • Added ray-tracing-specific ambient occlusion parameters in the post process volume.

    • Intensity: A scalar factor applied to the ambient occlusion score.

    • Radius: Adjusts the world-space radius of occlusion rays.

Improvement:

  • The following improvements have been made to Cubemaps to introduce better prefiltering that limits excessive blur from occurring from the sources:

    • Cubemaps generated from .hdr long-lat sources were being strongly blurred in cases when mipmaps were enabled. This happened originally because such cubemaps were intended for use only with the "Ambient Cubemap" lighting feature, and their mips were generated using angular filtering. Skylights now have many mechanisms for visibility and shadowing, causing that feature to become obsolete. Angular mipmap filtering for long-lat textures is disabled, and therefore mipmaps for cubemaps no longer introduce significant blur.

    • Cubemaps generated from long-lat originally were low quality because their maximum size was set to 512 pixels by default. This limitation has been removed, and resolution of generated cubemaps is now determined by the size of the source long-lat texture.

    • Imported .hdr textures were incorrectly marked as sRGB, even though they were internally processed as textures using linear color space. Now, they should have sRGB mode automatically disabled when imported.

    • Cubemaps generated from long-lat sources can now use the texture adjustment settings of the Texture Editor.

Bug Fix:

  • Color Correct Regions - changed the Regions refresh method to better support environments other than Editor.

  • Regions that occupy less than 1 pixel on the screen are no longer rendered.

  • Fixed a color correction issue where shaders with Highlights assumed that max Scene color was capped at value 1.

Sequencer

New:

  • Implemented a Camera Shake upgrade tool to convert any legacy Matinee camera shake asset to a Sequence animation. Shakes with no CameraAnim asset are left untouched.

  • The Dummy Camera Manager now enables you to see the camera shake FX in the Camera Shake Previewer tool.

  • Added per-material support for each Object ID instead of per-component in Movie Pipeline. Additionally, per-material support now applies to Instanced Static Meshes, such as foliage. Individual materials are not supported on instanced static meshes.

  • The "Write all Samples" debug option moved from HighRes settings to the new Debug Setting in MoviePipeline.

  • New options in Control Rig enable ticking on all skeletal mesh components and warm up frames when baking an animation sequence.

  • FK Control Rigs are now masked in all sections when a Control is inactive.

  • Add an aspect ratio axis constraint accessor on the IMovieScenePlaybackClient.

  • Add a serial number on bound object caches.

  • The Level Sequence playback context picker now lets you pick actual level sequence actors instead of just worlds.

  • Add support for previewing camera shakes' post process settings to the camera shake previewer tool.

  • Added track pre-compilation parameters. This lets tracks alter the default metadata at compile time for all the entities that will be created by their sections.

  • Added the HasAnyData method to non-float channels

  • Debug visualization now supports more component types for the new core evaluation system.

  • The asset picker in the Camera Animation Track now remembers your toggled preferences for showing / hiding outdated assets.

  • Added a component flag to CopyToOutput for the new core evaluation system.

  • Added an API to get the list of sequence IDs in a hierarchy.

  • Added a utility function to find a related sequence instance in a given hierarchy.

  • The Entity Import metadata allows a property track to use a different property binding that can also be computed during compiling.

  • The Camera Cut Track can now blend out to a parent sequence's camera cut track. Blend times are affected by sub-sequences time dilation.

  • The Frame Time Range conversion helper now includes a frame number range.

  • You can now directly load an Animation Sequence into a Control Rig Section at the current time.

  • Added return value to OnSectionMoved to know when a moved section caused other sections to be added/removed.

  • The interrogation linker now has a utility function to get the animated value of a property.

  • Camera Shake track now uses the base shake class instead of the (deprecated) Matinee shake class.

  • Camera animation sequences can now be toggled between the camera component and cine-camera component.

  • Added network masks to sub-sections allowing for server and / or client only sub-sequences. This optimizes cinematic assets such as FX or audio when playing back on dedicated servers.

  • Sequencer can now be emulated as a client or a server using the Networking section of the settings menu in the Sequencer UI.

  • High performance ECS-based evaluations now support Byte, Enum, Integer, Vector, and Color properties. This includes the following:

    • Byte, Enum, Integer, Vector and Color properties all now run through the ECS supporting greater parallelism and efficiency.

    • Vectors and Colors both leverage metadata components for the number of vector channels and the color type, respectively.

    • Both types run their own derived property component type handler (FVectorHandler and FColorHandler) for initializing their metadata components.

    • Automatic overriding of PostProcessing properties is now supported. This means that users no longer need to manually override PP settings when animated through Sequencer for them to apply to the camera.

  • Entity systems can now run in multiple phases. Systems can check the currently executing phase by checking Linker > GetActiveRunner() > GetCurrentPhase().

  • Trait Classes for runtime metadata simplify the runtime process, and removes the need for using the PropertyType and OperationalType template parameters. This includes the following improvements:

    • Built-in property accessors are refactored to correctly utilize a trait's class.

    • The API now uses traits which supports the specification of metadata components for switching property types at runtime. This lays the foundation for also using Vector and Color property types.

    • Traits now specify the conversation layer from storage type to the UObject property application for custom accessors, fast PTR offsets, and track instance bindings. This includes the storage type and the required metadata components.

    • Blend Output entities now also contain an FMovieScenePropertyBinding, which is copied from the contributors.

  • Added Read/WriteComponent methods to FEntityAllocation to make custom component access now return a scope-locked wrapper around the component data.

Improvement:

  • There are several new improvements for Sequencer playback.

    • Playback speed is now configurable per sequencer instance by using a delegate. Defaults to previous values.

    • Shuttle Backward/Forward now uses speeds from the delegate.

    • Added the Restore Speed command to restore the speed to the designated playback speed. No default binding.

    • TogglePlay now actually toggles play and no longer calls PlayForward.

  • Upgraded boolean property tracks to use the new evaluation core.

  • Resizing and moving camera cut and shot track sections are more streamlined and easier to do.

  • Files converted from Matinee to Sequencer are now broken into multiple files.

Crash Fix:

  • Duplicating a Control Rig track in Sequencer no longer crashes the Editor.

  • The Matinee to Level Sequence converter plugin no longer crashes Editor.

  • The Editor no longer crashes when playing / rendering level sequences that contain template sequences.

  • Dragging track sections over each other or completely overlapping other sections no longer crashes the Editor.

  • The Editor no longer crashes when you switch worlds with Sequencer open.

Bug Fix:

  • The Output Directory in MRQ now correctly uses a local file path.

  • Template Sequences now correctly have no hierarchical bias. This allows Template Sequence animation to blend with any animation set directly on the same object.

  • Fixed various minor issues with the Matinee to Level Sequencer Converter tool.

  • The camera cut global start times are no longer changed when new global times start.

  • Don't stomp the global start time of camera cuts when new ones start

  • FBX Export options can now correctly be created in Blueprints.

  • The FOV blending preview in Editor now displays correctly when scrubbing/playing over a blend-out at the end of a cinematic.

  • Non-Linear Animation now correctly only caches root transforms when an offset transformation is set.

  • Blending preview code is now viewable in the modifier callback. This solves problems with cameras who have look-at constraints and problems with system dependencies in the new core evaluation system.

  • Zero-frame-wide sections are no longer created when converting Matinee files to Sequencer.

  • Template Sequences now correctly use base classes instead of child classes for compatibility with other Template Sequences.

  • Resolved an issue that prevented a sequence from playing more than once.

  • Exiting a camera cut now correctly goes back to the previous Editor location for blending cuts.

  • Sequencer now correctly counts property composites in the non-float method in the new core evaluation system.

  • BlenderType component values now correctly copy child entities in the new core evaluation system.

  • The warning Number of TAA samples is no longer hard coded in MoviePipeline, and it now respects the actual variable set.

  • Camera shakes with a custom duration no longer incorrectly shows a warning on the shake track.

  • Ease in and out is now correctly enabled for the first and last sections on the Camera Cut track.

  • Easing durations are now automatically reset if auto-easing is not allowed for the given section.

  • Sequencer no longer incorrectly fails to animate an object's properties.

  • World depth green channels now have the correct values for view-relative depth in MoviePipeline. The values now represent the distance from the camera by direction-to-pixel.

  • The latent action setup is now simplified and correctly handles re-entrancy in latent actions.

  • Fixed an issue in MoviePipeline where using Camera Cut for Motion Blur caused camera motion vectors to be incorrect for motion blur.

  • The Camera Shake Previewer is now compatible with Matinee shakes.

  • Selections between Template Sequences and the Editor Viewport now synchronize correctly.

  • Fixed camera jitter problems related to camera blending after a blend has finished.

  • Sequencer: Can now Bake Anim Sequences from a loaded sub sequence.

  • Resolved various outlier issues with Camera Cut blending.

  • The Camera Shake previewer tool now correctly cleans up the completed camera animations and initializes the base FOV.

  • Correctly clean-up finished camera anims and initialize the base FOV in the camera shake previewer tool.

  • Event tracks now correctly rebind to the Sequence Director when copy / pasting tracks.

  • Initial Values are now correctly shared between FSequencer instances and Interrogators. This ensures that exports and trail rendering share the same initial value data, despite objects potentially being in animated states when an interrogation is performed.

Deprecated:

  • You can no longer use ForEachAllocation task callbacks for resolving access to component data. The task internals already handle the callbacks and the lock is maintained correctly for the duration of the task.

Tools

AutoSDK

New:

  • Updated AutoSDK to allow unprivileged execution of the install / uninstall hooks when possible.

UI

  • SRadialBox : Added support for Radial sectors with a central angle smaller than 360 degrees.

Slate

  • Added Custom Safe Zone support for runtime builds.

  • Added debug callstack to root Invalidation Widgets in Slate Insights plugin.

  • Added a new Slate.bAllowNotificationWidget console variable to enable / disable the display of notification widgets.

Crash Fix:

  • Fixed a crash related to Preload Screen multi-thread protection.

Bug Fix:

  • Fixed an issue where mouse input was ignored when the application ran in Standalone mode or after packaging when FSceneViewport wasn't associated with UGameViewportClient.

  • Fixed a bug with the Component Visualizer Manager that prevented right-clicks in the Editor from being reported correctly.

  • Fixed a possible bad reinterpret cast in WidgetRenderer.

  • Fixed an issue that caused combo boxes to sometimes start capturing keyboard or gamepad input upon construction, even though that was not intended.

  • Updated the Slate LetterSpacing property to take font scale into account. Zooming on the UMG designer no longer causes text with line spacing applied to change (relative) size.

  • OnItemScrolledIntoView can no longer be called if the item provided doesn't correspond to a valid Widget.

  • Fix to a possible deadlock in Slate Loading screen code.

  • You can now use the CVar, Slate.Font.AsyncLazyLoad, to force fonts marked as LazyLoad to be loaded on a background thread. This prevents IO hitches in font loading.

  • When reflowing the UI based on Right To Left, the pivot point is now also mirrored about the middle.

UMG

New:

  • UWidgets that had their SWidget component garbage collected now have a (No Slate Widget) label in the Debug Filter of the Blueprint Debugger.

  • The SetSelectedItem function in UCommonRotator (part of the experimental CommonUI plugin) is now virtual.

  • Added a Cvar to limit the Render target size used for Widget Components (4K size by default).

  • Renaming a UMG animation to a name longer than 100 characters now issues a warning and prevents you from submitting that name.

  • Added a new function to allow updating the render target on the UWidgetComponent even if ticking is disabled.

Crash Fix:

  • Fixed a crash that happened when trying to paste multiple items on a Widget that only supports one child if it already has one.

  • Fixed an issue that caused WidgetComponent to try accessing deleted resources in the render thread.

  • Fixed an issue that caused a crash on iOS when entering Korean text.

Bug Fix:

  • Copying and pasting a widget no longer pastes the copy as a child of the original.

  • Fixed a copy-paste issue where editing the text on the copy also changed the text on the original.

  • Fixed an issue that made it impossible to undo changes if window focus was lost while dragging a slider (for example, by using a keyboard shortcut to switch to a different window).

  • Fixed an issue that caused LongPress touch events to end prematurely when the finger or mouse didn't move.

  • Fixed a UMG bug that prevented Widgets from being dragged in the Designer view.

  • Added a null check in RichTextBlock's SetTextStyle.

  • Fixed an assert when renaming UMG animations to strings greater than 1023 characters

  • Fixed crash that could happen when pasting a Widget in UMG Editor.

Virtual Production

New:

  • Performance improvements are now in place for handling large files in Multi-User Editing. This means users can now sync light bakes, take recordings, and other heavy package data efficiently. These files now transfer in seconds on local networks.

  • Multi-user servers will do asynchronous writes with large files instead of serial processing. This improves multi-user servers and reduces possible timeouts when processing large files. \

  • We added Multi-User support to Virtual Camera Actors and authority is configured via the roles assigned in VPRoles.ini.

  • Overall cluster and per-viewport Post Process settings were added to nDisplay clusters.

  • Live Link FreeD is a plugin that allows cameras and other devices that send the FreeD protocol over UDP to be utilized as a Live Link source in the engine. The FreeD protocol sends a combination of device position, orientation, and/or FIZ (Focus, Iris, Zoom) data. These are combined into a Live Link Camera Role that can easily be used in the engine.

  • Live Link VRPN is a plugin that allows connection to a VRPN server to fetch device data as a Live Link source in the engine. VRPN device types that are currently supported are Analog, Dial, Button, and Tracker. Analog, Dial, and Button device types are seen as a basic Live Link role as an array of labeled floats. Tracker device types are seen as a Live Link Transform role.

  • Support has been added for Live Link rebroadcast to virtual subjects.

  • Timestamp functionality was added to Blueprint Live Link virtual subject.

  • Virtual subject Take Recorder support is now available.

  • Added a way to intercept requests before they are handled by the Web Remote Control.

  • The nDisplay plugin now includes a LightCard Blueprint Actor. The LightCard Actor is a customizable card used to provide practical lighting on nDisplay stages.

  • Improved Switchboard config file management allows subdirectory-based organization.

  • Added the ability to access exposed preset entities by ID through the web API.

  • Added a way to get, set, and delete exposed entities metadata, which shows up in the Remote Control Details panel.

  • You can now make Remote Control API requests by using either preset ID or preset name.

  • Improved Remote Control support in -game and packaged games. Properties or functions that can't be used in -game will be marked in the Remote Control Panel, which can be disabled by a project settings. \

  • Added rebinding to the Remote Control Preset, which allows you to re-use presets across levels.

  • The function-picker search is now reliable in the Remote Control Preset.

  • Added a Details panel for exposed fields in the Remote Control Panel.

  • For Switchboard, added autodetection of project and engine paths:

    • Looks for Unreal Editor processes and projects in their command lines for detection.

    • If UE isn't running, then it will try to fill out the engine directory that Switchboard is running from.

  • For Time Management, added a genlocked, fixed-frame rate, custom timestep. It is very similar to the Fixed Rate in Project Settings implemented in UnrealEngine.cpp, except that it keeps up with platform time by accounting for any missed frames when the fps drops below the specified fixed rate.

  • For Camera Calibration, prepared NodalOffsetAlgoPoints to become a base class for algos with machine vision.

    • Now that OpenCV doesn't crash, an extra copy of the media frame was removed.

    • Moved ReadMediaPixels to the step controller so that it can be used by any step without reimplementation.

    • Changed methods and member variables in NodalOffsetAlgoPoints from private to protected because they need to be accessed by derived classes.

    • Added a button to apply the nodal offset to the calibrator parent.

    • Improved a few user-facing error messages.

  • For Switchboard, added local P4 settings detection. These settings can be detected when P4 is enabled in the new Switchboard config dialog, but will respect existing values (if there are any), or if the new Detect button is pressed, in which case it will replace existing values with any values found.

  • Added Multi-User support to nDisplay.

  • In Movie Render Queue, added a stills automation editor utility called Still Render Setup Automation. This automates the creation of a sequence with a still for a given camera. The Python script required a plugin dependency to Sequencer Scripting.

  • The Composure ICompElementManager is now public.

  • RCWebUI: Added a command line option "-RCWebInterfaceDisable" to prevent the WebApp from starting. This is useful when starting instances of the same project that are not meant to run the web server.

  • VPUtilities: Created a Blueprint library function for virtual production rendering-related functions. Added a functor generator to activate a given Scene View Extension when it is:

    • A PIE viewport.

    • A SIE viewport.

    • The active editor viewport.

    • The game primary scene viewport.

    The initial use case is to be able to set an OCIO config in BP.

  • Added Line Wrap and Auto Scroll controls to the log pane in Switchboard. Enabling Line Wrap breaks long messages into multiple lines, ensuring you can read them in their entirety without needing to scroll horizontally. Auto Scroll causes the view to follow the newest messages as they're appended to the bottom of the log, but can be disabled to make it easier to inspect older log messages (and is disabled automatically when you drag the scroll bar).

  • SwitchboardListener now caches the mosaic topologies reported via NvAPI, which change infrequently and can be expensive to query, rather than updating them every second. A Refresh Mosaics button was added to Switchboard's nDisplay Monitor to manually trigger an update.

  • Switchboard now includes the ShaderCompileWorker target when performing compilation on Unreal and nDisplay devices.

  • Switchboard now uses a new Python script called sbl_helper to perform Perforce syncing, rather than the Unreal Automation Tool Sync Project. Syncing is now faster, with better progress reporting, and build versioning is more consistent with UnrealGameSync. sbl_helper laying the groundwork for additional planned improvements.

  • Added Linux support for Blackmagic.

  • Switchboard now includes a toggle setting for nDisplay devices (labeled Unattended, and enabled by default) to include the -unattended argument on the command line, suppressing undesirable interactive UI and notifications.

  • The Switchboard toolbar options, Install Listener and Uninstall Listener, were replaced with a checkbox labeled Launch Switchboard Listener on Login, which more accurately describes its behavior, and a bug in creating the corresponding registry entry was fixed.

  • Added an editor command line argument "-AutoDeclinePackageRecovery" to bypass the Restore Packages prompt and discard autosaves. This is controlled by a corresponding Skip Package Recovery checkbox in Switchboard's Unreal device settings. This can be useful in multi-user editing scenarios, where restoring autosaved packages may not be desirable.

  • Switchboard will send the local nDisplay cluster configuration Blueprint asset to nDisplay devices upon launching them, which simplifies iteration and testing of these configurations without the overhead of submitting to and syncing from version control.

  • Added a new Blueprint editor, the nDisplay Config Editor, specifically for creating nDisplay assets. You can create a cluster, assign projection policies, and model 3D previews of the complex configurations of physical displays. The assets created here are now Blueprint Actors which you can drag and drop into levels. Once instanced in a level, properties can be exposed to Remote Control and replicated with Multi-User. Assets from UE4 4.26 will update to the new version provided that the imported JSON config file is available and at the location where the old asset was imported. It is still possible to import old JSON config files manually by dropping them into the content browser.

Crash Fix:

  • Fixed a crash in the Virtual Camera remote output provider.

  • No longer crashes when force-deleting a Live Link remap asset.

  • Live Link virtual subjects API no longer crashes when multi-threaded.

  • Fixed a crash that occurred when loading a preset with an exposed BP function.

Bug Fix:

  • Fixed an issue with Multi-User Sequencer playback where scrubbing the timeline would result in playing game nodes.

  • Playing back a sequence on a game node no longer results in the spawned objects persisting when closing the Sequencer Editor.

  • Fixed a bug in the Live Link Transform Axis Switch preprocessor that caused incorrect mappings in some cases. The UI was also simplified to use standard Front, Right, and Up axis notation to match other available tools and software. Position and Orientation offsets were added as well to shift the incoming tracking origin to match the desired world origin.

  • The default OCIO 3D LUT file size was increased to 65x65x65.

  • The Camera component frustum now updates when driven from Live Link.

  • Added a way to avoid applying data coming in from Live Link on camera, and to force using the camera component's range instead of relying on the lens file.

  • Fixed the Timed Data Monitor timecode provider display.

  • Added getters for raw animation static and frame data from the Blueprint helper struct SubjectFrameHandle.

  • Fixed an issue where LiveLinkComponent selection based on role did not go down the hierarchy.

  • Resolved an issue with the Timed Data Monitor stage events type that made it unfilterable.

  • Updated the static assert to catch wrong base types for stage events.

  • Added a validity check when updating the Source Framerate from the first enabled Subject with valid data.

  • Fixed the TimedDataMonitor MediaIO input GetDisplayName, where player base SetRate would always return false, causing it to not play back correctly.

  • Composure is now allowed to run packaged builds.

  • Fixed presets with the same names not displaying when querying presets.

  • It is now possible to expose custom events in the Remote Control Preset.

  • In OpenCV, added cv::unreal module. This adds functions to override new and delete operators, so that UE can replace them with its FMemory implementations and avoid crashes when UE passes containers (such as std::vector<T>) that OpenCV populates, then UE tries to release the container memory.

  • Fixed an issue with Switchboard's multi-select combo boxes that could sometimes cause them to show a stale string after all items had been deselected, and improved their handling of mouse clicks.

  • Fixed several instances where malformed JSON commands could cause SwitchboardListener to crash, and added diagnostic logging indicating when required command fields are missing.

Deprecated:

  • Removed a property in FixedFrameRateCustomTimeStep that has been deprecated since 4.21.

Removed:

  • We removed old Virtual Camera tools and assets. Users should now use Simple Virtual Camera or VirtualCamera2 Actor.

  • All references to the deprecated VirtualCamera actor have been removed from the Virtual Camera Showcase project.

Worldbuilding

Bug Fix:

  • Fixed a race condition happening due to the render thread accessing the materials in the main thread.

  • The transient actor UBuoyancyManager is now hidden from Scene Outliner (it will eventually become a subsystem).

  • Deterministic fixes for water:

    • Deterministic names are now used for all automatically-generated UObjects generated by water body actors.

    • Hack around UBodySetup's BodySetupGuid, which generates random GUIDs each time a new UBodySetup is created (this can happen on construction for lake and ocean collision components).

    • With deterministic names for collision components, they can be made net-addressable. This is a solution for warnings occurring on the server about replicated references not being net-addressable.

    • Generated objects have been made NonPIEDuplicateTransient to work around a check in NewObject, which can happen when saving as a map. Otherwise, a duplicated and named object marked for NeedsPostLoad might end up being reused without the flag being cleared.

  • GC collector was not properly tracking materials used by WaterMeshComponent, and this caused a crash. This issue has been fixed.

  • Fixed an issue causing an assert when the debug information for underwater materials was displayed.

  • Fixed an issue where river spline point parameters were getting out of order when the user added new points; it now uses the ordered list of spline mesh components from the river water body, instead of relying on the Actor's GetComponents function which returns components in an undefined order.

  • Fixed a reentrance crash with UWorld::UpdateLevelStreaming.

HLOD

New:

  • Added an HLOD build option "-MapCleanup" that will delete any invalid LODActor.

  • Added the ImpostorBaker Plugin to Plugins\Experimental.

  • HLOD - Added support for per-level custom HLOD baking transform; this allows materials with WPO to be baked properly for the HLOD.

  • HLOD Rebuild Commandlet - Added a "-SkipSubLevels" option to allow building HLODs only for the persistent level.

Bug Fix:

  • Material Baking - Fixed a color constant conversion issue in FMaterialUtilities::CreateProxyMaterialAndTextures. This will only affect the "Bake out materials" tool in the Static Mesh viewer, with no change to HLODs.

  • Fixed a bug causing some Actors with multiple static mesh components to be excluded from the HLOD generation by error.

  • HLOD Clustering - Meshes excluded from HLOD volumes were not considered by the next HLOD level; this is now fixed.

  • HLOD - Ensured that all ISMC instances are properly added to the LODActor instances.

  • Fixed an issue with unbuilt HLOD detection being too sensitive.

  • Mesh Merging - Lightmap UV generation is now skipped if no free channel is found.

Landscape

New:

  • Added a render capture tag for each landscape brush being rendered.

  • Reduced runtime virtual texture invalidation during landscape editing. Editor now invalidates the brush region instead of full components.

  • Deferred readback of landscape edit layer textures to the CPU, to avoid stalling on GPU during landscape layer editing.

  • Neither selecting landscape components nor locking/unlocking landscape layers will dirty world packages anymore.

Bug Fix:

  • Fixed a problem where heightfield data was not being updated when the water brush was updated; if a heightmap/weightmap readback modification was detected during the frame, and the component was not requesting that the collision data be updated, it would fail to update the collision data when a later request was made and no modification was detected at the time of the later request.

  • Fixed an issue where the landscape layer reserved for spline was being lost upon resize.

  • Edigrated CL 14156485 - Fixed a crash that occurred when using the Smooth tool in landscape mode.

  • Edigrated CL 14193183 - Fixed a rare crash that occurred during landscape painting. LandscapeComponent's SceneProxy was recreated while RenderThread was accessing it through the component. Now it makes its copy first.

  • Fixed a problem with landscape component bounds being invalidated when using the water brush; the components were first updated with the ELandscapeComponentUpdateFlag::Component_Update_Approximated_Bounds flag, (temporarily) invalidated the bounds, and then were updated with the IsUpdateFlagEnabledForModes(ELandscapeComponentUpdateFlag::Component_Update_Heightmap_Collision) flag, but the bounds weren't updated if the heightfield was actually unchanged. Now, the bounds are not invalidated (with an approximate bounds computation) if no change is actually detected on the heightmaps.

  • Edigrated CL 14187664 - Fixed a crash occurring in RenderLandscapeComponentToTexture_RenderThread when LandscapeComponentSceneProxy is null. Added ensures at a couple of places to help track rare crashes.

  • Default landscape grass inputs to zero now, instead of throwing a compile error when not connected. Previously we threw an error as soon as node was created but not set up.

Worldbuilding/Landscape

New:

  • Added CVars landscape.RenderCaptureLayersNextHeightmapDraws and landscape.RenderCaptureLayersNextWeightmapDraws to trigger a render capture during the next heightmap/weightmap draw calls.

Improvement:

  • All landscape edit layers, render targets, and draw calls now have a proper debug name.

  • Replaced CVar landscape.OutputLayersDebugDrawCallName, which was forcing the layers to update, with landscape.ForceLayersUpdate, which does the same thing but more explicitly.

Bug Fix:

  • Fixed an issue where landscape layers were incorrectly compositing/decompositing heightmaps when a heightmap was shared between multiple landscape components and not entirely covered by its components (for example, 3x4 components).

  • Generation of landscape normals now matches the CPU version.

  • Fixed an issue where deleting a layer from the Landscape would have no lasting effect when Edit Layers was enabled.

  • The landscape scale XY constraint is now respected when using the viewport gizmo.

  • bFillCollisionUnderLandscapeForNavmesh and bUsedForNavigation were not propagating from landscape streaming proxies to their components when setting the property. This has been fixed.

XR

New:

  • Added the -xrtrackingonly command line parameter to start OpenVR in a mode where frames are not submitted to the renderer. This allows for reading the tracker and device info separately. It also allows multiple instances of the engine to run on a single machine, and for all instances to share incoming tracking and input data.

  • Added support for StereoLayer Quads to the OpenXR plugin.

  • Took OpenXR out of Beta and set it to On by default.

  • Implemented OpenXR Controller Visualization.

  • Implemented missing Head Mounted Display Blueprint nodes for OpenXR.

  • Updated the OpenXR loader and headers to version 1.0.17.

  • OpenXR doesn't support 10-bit sRGB swapchains, so we're forcing 8-bit sRGB swapchain format in OpenXR.

  • Added support for late updating the projection of each stereo view. This ensures that you are projecting for the latest field-of-view information from the headset.

  • Added WebXR standard controller models to OpenXR plugin content. The OpenXR plugin now includes all commonly found XR controller models. \

  • Added Linux support to the OpenXR plugin.

  • Added Head Mounted Display Blueprint nodes to query play space size.

Improvement:

  • For OpenXR, improvements were made to swapchain pipelining.

Crash Fix:

  • Editor no longer crashes when opening a project with OpenXR enabled if an HMD is not attached.

Bug Fix:

  • Start Session/Stop Session in OpenXR plugin now uses exclusive locks so frame calls can't overlap session calls.

  • Fixed the swapchain timeout by increasing retry count, adding a timeout for stereo layers, and increasing the timeout value to 100ms by default.

  • Get Camera Intrinsics for WMR was implemented.

  • Windows Mixed Reality Anchor Store case-sensitivity problems were resolved by setting all IDs on the way into WMRInterop to lowercase.

  • Added Hand Mesh as an AR Capture type for use in WMR and OpenXR.

  • WMR Hand Mesh now hooks up to XRVisualization.

  • WMR's Hand Mesh has been decoupled from spatial mapping. Previously, the Hand Mesh was part of the MRMesh, would only show if spatial mapping was enabled, and could leave zombie hands in view as the hands lost and regained tracking.

  • XR now allocates backing MSAA targets from XR runtimes.

  • Temporarily disabled ScreenSpaceDiffuseIndirect rendering for VR.

  • OnControllerButtonReleased now triggers when isActive becomes false.

  • Fixed ShadowSetup incorrectly checking for Multi-Viewport instead of Mobile Multi-View.

Removed:

  • The deprecated Mono Culling Distance variable was removed from World Settings.

AR

New:

  • Live Link was updated to handle a tick from OpenXR hand tracking.

  • HoloLens apps can now launch a website from an existing Unreal interface in an Edge pop-up.

  • A quality-of-life improvement has been added for using an EHandKeypoint directly as an input in arrays from FXR Motion Controller Data. Previously, developers could cast the EHandKeypoint byte to a 32-bit int using built-in math conversion Blueprint functions, but this was not discoverable, and is not automatically suggested when dragging an EHandKeypoint to a Blueprint integer input.

  • A Scene Understanding update adds an Occlusion Hint OpenXR extension that could return different meshes with different levels of detail for the same surface. This could be a higher detail visible mesh, an occlusion mesh that is not meant to be visualized, or a mesh for collision.

  • Since multiple meshes could be returned for the same surface, we now ensure that only the collision meshes are used with the physics system. The user can set materials on the meshes based on what the mesh usage type is. This also fixes a bug where the trackable added event was firing before the spatial mesh was initialized. Meshes now have an appropriate material applied or added to a particular list when the mesh is first added, rather than waiting for the first update.

  • Add NV12 texture format support for DX11 and DX12 RHIs for HoloLens

Crash Fix:

  • WMR Spatial Mapping has been fixed so that it no longer crashes on Stop/Pause in an AR Session.

Bug Fix:

  • AR Actor types are now cached so the AR Session is not used erroneously in Update.

  • Plane finding in OpenXR no longer checks that spatial mapping meshes exist before processing planes. This allows updating plane finding if spatial mapping is not being used. This has been fixed by making the check predicated on the list of planes.

  • The function SupportsMultipleRenderTargets() now returns true (instead of false) for the Magic Leap OS Lumin.

  • UXR Visualization Function Library methods are now accessible via C++.

  • The ability to toggle Spatial Mapping on and off at runtime without needing to stop/resume the ARSession is now exposed. Toggle failures return false for each of WMR's AR Captures (QR, PV, SR) so a toggle retry can be made.

  • Updated WMR Toggle AR Capture to work before Start AR Session.

  • Added an option to write depth to translucent materials for HoloLens devices.

  • ARCore now uses parent class FDefaultXRCamera for SetupView.

VR

New:

  • The Oculus OVR plugin has been upgraded to v25 (v1.57). Some deprecated API usages were also fixed.

  • Enabled the Mobile Phase Sync for mobile Oculus devices in the Oculus VR plugin.

  • Update HMD priority list to be in this order:

    • Oculus VR

    • OpenXR

    • WMR

    • SteamVR

    Since SteamVR also works with the Oculus Rift and Windows Mixed Reality, give priority to the native Oculus and Windows Mixed Reality plugins before trying SteamVR.

OpenXR is production-ready. If enabled, it should be the priority plugin. In 4.27, the native Oculus plugin still requires higher prioritization to address runtime features that are required for shipping by Oculus but not yet supported in OpenXR .

Crash Fix:

  • Fixed a crash on startup with Oculus when -nohmd was specified in the command line.

Bug Fix:

  • Oculus HMD Module can now set up the Oculus Plugin Wrapper when the Oculus Service is not installed or broken.

  • Redundant OVRPlugin.dll verification has been removed from the Oculus Editor Module.

  • For the Steam VR Input Device, unchecked static_casts to FSteamVRInputDevice were fixed.

Upgrade Notes

AI

Upgrade Notes:

  • The signature for IAISightTargetInterface::CanBeSeenFrom has changed to give users more information about the previous visibility state, and provide access to a userdata payload. Please update your code accordingly.

Datasmith

Upgrade Notes:

  • If you have an existing project using the USDImporter plugin on platforms other than Win64, Mac, or Linux, you may get and error like this:

"ERROR: USDImporter.uplugin is referenced via YourProject.uproject with a mismatched 'SupportedTargetPlatforms' field"

To fix this, open the .uproject file for the project, and change the USDImporter entry in the plugins section from this:

  {
     "Name": "USDImporter",
     "Enabled": true
  },

To this:

  {
     "Name": "USDImporter",
     "Enabled": true,
     "SupportedTargetPlatforms": [
        "Win64",
        "Mac",
        "Linux"
     ]
  },

Editor

  • This introduces a breaking API change for classes inheriting IPersonaPreviewScene or ISkeletonTree that override SetSelectedBone, and for user code that binds to their SelectionChanged event. These now take an extra argument to route the cause of the change (user interaction or direct code) through to the UI elements.

Niagara

New:

  • Updated the Niagara system and emitter asset tag generation code. There are multiple new tags that can help in mass-analyzing content, but these tags will only be available on assets from UE4 4.26 or earlier after resaving the assets in UE4 4.27.

Online

Upgrade Notes:

  • Matchmaker and Signalling server have been moved from Engine/Source/Programs/PixelStreaming to Samples/PixelStreaming. References to these paths will need to be updated. Both Signalling server and Matchmaker can now log to a file.

Deprecated:

  • Deprecated PixelStreamingIP and PixelStreamingPort in favor of the new PixelStreamingURL command line parameter to specify Signalling Server url using ws:// or wss:// Users should replace -PixelStreamingIP <ip> and -PixelStreamingPort <port> with -PixelStreamingURL=ws://<ip>:<port>

Platforms

Windows

Upgrade Notes:

  • Profile Guided Optimization is now available on Windows. Build the client with -PGOProfile and -PGOOptimize to create Profile Guided Optimization executables for improved performance.

Rendering

Bug Fix:

  • Default maximum texture size for cubemaps generated from long-lat sources has been changed from 512 to unlimited. Cubemap textures saved before upgrading to UE4 4.27 will be explicitly set to 512 on asset load to preserve their old behavior, but new generated cubemaps will base their resolutions on the sizes of their source long-lat textures.

  • Previously imported .hdr textures were processed in linear color space but marked as sRGB, which could lead to incorrectly using "Color" sampler type instead of "Linear Color" in texture expressions. This can cause incompatibility between new textures and old texture expressions; to resolve this, update the texture expressions to use "Linear Color" sampler type when referencing newly imported .hdr textures.

UI

Slate

  • WidgetInteractionComponent's PointerIndex variable is now an integer; it used to be a float.

Virtual Production

Upgrade Notes:

  • The LiveLink camera controller has been moved to its own plugin, called LiveLinkCamera. You must enable this to get LiveLink camera controller functionality. Previously, the controller was automatically added when enabling the LiveLink plugin.

New:

  • To improve performance of Multi-user in situations of large files, we have added heuristics to the message construction to use compression. With this change, the system only compresses messages between 512 bytes and 3 megabytes. This is a major update to the session database, and existing sessions will be incompatible.

알려진 이슈

언리얼 엔진 4.27에 영향을 주는 알려진 이슈의 전체 목록은 언리얼 엔진 퍼블릭 이슈 트래커(영문)를 참조하세요.

언리얼 엔진 문서의 미래를 함께 만들어주세요! 더 나은 서비스를 제공할 수 있도록 문서 사용에 대한 피드백을 주세요.
설문조사에 참여해 주세요
건너뛰기