언리얼 엔진 4.26 출시 노트

언리얼 엔진 4.26의 신규 및 업데이트된 기능 개요

Windows
MacOS
Linux

새 소식

언리얼 엔진 4.26이 출시되어, 이제 언리얼 엔진으로 전례 없는 사실적인 환경, 캐릭터, 크리처를 제작하고 프로덕션 파이프라인 전반을 설계 할 수 있습니다.

헤어, 퍼, 페더 시스템 정식 버전을 통해 사실적인 사람과 동물을 제작 할 수 있습니다. 볼류메트릭 클라우드 컴포넌트와 스카이 애트머스피어, 스카이 라이트를 이용하여 자유롭게 사실적 또는 스타일라이즈드 스카이, 클라우드 그리고 기타 애트머스피어 이펙트를 만들고 렌더링 할 수 있습니다. 새로운 워터 시스템으로 랜드스케이프 터레인에 사실적인 물을 표현하고 , 캐릭터, 비히클, 무기 등에 반응하도록 할 수 있습니다. 카오스 피직스는 기능이 향상 및 확장되어, 이제 리지드 보디는 물론 비히클, 클로스, 래그돌까지 시뮬레이션 할 수 있습니다. 환경의 모든 요소가 생생하게 구현됩니다.

이제 시퀀서는 컨트롤 릭, 신규 풀보디 IK 솔루션과 함께 기능하여 시퀀서 내에서 새 애니메이션을 생성 할 수 있습니다. 외부 툴의 필요성이 감소한 것입니다. 기존에 하이퀄리티 미디어 익스포트로 알려졌던 무비 렌더 큐는 다운스트림 컴포지팅 애플리케이션에서 최종 이미지를 더욱 향상하기 위해 렌더 패스를 지원 하도록 개선되었습니다. nDisplay 멀티 디스플레이 렌더링은 보다 높은 프레임 속도에서 더 많은 픽셀을 렌더링할 수 있게 해줄 뿐 아니라 구성 및 환경설정도 더 쉬워서, 퍼포먼스를 향상하고 기존 하드웨어로 더 큰 LED 세트를 지원합니다. 콜라보 뷰어 템플릿은 협업 디자인 리뷰 작업을 강화하고, 한 세션에 더 많은 사용자가 참여할 수 있도록 하여 현저하게 향상되었습니다. 리모트 컨트롤 API는 언리얼 에디터의 프로퍼티와 기능이 위젯으로 유기적으로 연결되도록 향상되어, 아티스트가 즉석에서 iPad로 하늘 회전 및 태양 위치를 변경하는 등 외부 디바이스로 프로퍼티를 빠르게 변경 할 수 있습니다.

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

adamnv, Aintaer, aknarts, Ale Segovia Azapian, aleksei-romanov-varjo, andrewhwood, Antonrr, asansottera-ba, bdiamand, bitdewy, blakeanator, broly, Bruno.Torijano2, Bryce Hutchings (Microsoft), CheshireDev, ckendal3, cmsmithio, codeslicer0, CodyDWJones, D3adKnight, dboehle-modumate, dd-sbinet, DecoyRS, dogles, doublebuffered, drichardson, erebuswolf, eugene-rho, fakersaber, Filoppi, FLo.Schar, francis.hurteau, GBFS, geordiemhall, GlassBeaver, gmpreussner, guillermo.quesada, gunsungithub, HafdisE, hgamiel, HSeo, HughMacdonald, ibbles, IGood, iwlasny, jackknobel, Jackson Fields (Microsoft), Jason Stewart, JayouZheng, Jeff Rous, jessicafalk, jgilbert-ca, jiahuah-owi, JorgeQuesada, jpark37, Juan.Canada, kristjanvalur, KristofMorva, LizardThief, lolmx, Magic Leap, Mattiwatti, mengran3275188, mhoelzl-br, MichaelBell, Microsoft, moppius, muchcharles, muchcharles (charlesalexander(at)gmail.com), ngemonji(at)gmail.com, nklose, Oculus, oehrl, paxamit, pdfrod, projectgheist, RobertMarrMS, Robmaister, RPG3D, SertacOgan, simon.therriault, Skylonxe, smallshake, stephan-nordnes-eriksen, The Coalition, Thomas.Kilkenny, tommybear, valval88, Vawx, vsolobay, Wang Hao, windkey, yaakuro, ymurata1, Zeblote, zompi2

주요 기능

헤어, 퍼, 페더 정식 버전

이번 출시부터 헤어 렌더링 시스템의 정식 버전을 사용할 수 있다는 소식을 기쁜 마음으로 전해드립니다! 앞서 여러 번에 걸친 출시를 통해, 중사양부터 고사양 디바이스를 대상으로 퍼포먼스 기준에 부합하고 확장 가능한 시각적 향상을 통해 헤어 렌더링을 계속해서 개선하고 있으며, 언리얼 엔진의 다양한 기능을 지원합니다.

image alt text

그룸 에셋 에디터

새로운 그룸 에셋 에디터는 프로퍼티 에디터를 대체하며, 뷰포트의 시각적 표현을 활용하여 임포트된 그룸을 관리 및 편집할 수 있는 전체 기능을 갖춘 에디터입니다.

그룸 에셋 에디터에서 다음과 같은 기능을 활용할 수 있습니다.

  • 그룸의 보간, 스트랜드 외관 및 길이, 피직스 등 미세 조정

  • 에디터 내 툴을 사용하여 스트랜드, 카드 및 메시의 레벨 오브 디테일(LOD)을 생성하고 설정

  • 다양한 헤어 구현을 위한 머티리얼 관리

자세한 정보는 헤어 렌더링 및 그룸 에셋 에디터 문서를 확인하세요.

스카이, 클라우드 및 인바이런먼트 라이팅

이번 버전은 방대한 규모의 월드에서 동적 시간대 라이팅을 스카이, 애트머스피어, 클라우드 시스템에 구현하는 작업의 정점이라 할 수 있습니다. 또한 이러한 인바이런먼트와 라이팅 컴포넌트를 한곳에서 만들고 편집할 수 있는 통합 창을 추가했습니다.

볼류메트릭 클라우드

콘솔 및 데스크톱 플랫폼에서 퀄리티 조정 가능한 클라우드를만들 때 완벽하게 동적인 머티리얼 기반 워크플로를 제공하여, 대규모 클라우드스케이프 및 애트머스페릭 포그 구현에 사용하는 클라우드 렌더링 시스템을 새로 추가했습니다. 이 시스템은 영화 및 TV 프로덕션 수준의 시네마틱 퀄리티를 지원합니다.

머티리얼 기반 워크플로는 볼륨 텍스처를 사용하여 대기 중에 밀려오는 구름, 음울하게 흐린 낮, 또는 날씨 이펙트와 결합할 수 있는 사이클론까지 다양한 클라우드 유형 및 베리에이션을 표현하며 아티스트 친화적인 접근 방식을 제공합니다.

image alt text

클라우드 시스템은 스카이 애트머스피어, 스카이 라이트 및 2개의 디렉셔널 라이트(해와 달을 나타냄) 등, 인바이런먼트 라이팅과의 인터랙션을 완전히 통합 및 지원합니다. 볼류메트릭 클라우드 컴포넌트를 씬으로 드래그하고 볼륨 텍스처가 포함된 머티리얼을 할당하여 클라우드 시스템을 시작할 수 있습니다. Engine Content 폴더 내 경로 Engine/EngineSky/VolumetricClouds/m_SimpleVolumetricCloud에 예시 클라우드 머티리얼이 이미 구성되어 있습니다.

자세한 정보는 볼류메트릭 클라우드 문서를 확인하세요.

스카이 애트머스피어 컴포넌트 개선 사항

이번 버전에서 스카이 애트머스피어 컴포넌트에 여러 기능이 새로 추가되고 개선되어 사용이 간편해졌으며 프로젝트 전체에서 퀄리티를 조절할 수 있습니다.

image alt text

  • 스카이에서 이제 불투명 메시와 볼류메트릭 클라우드로부터 섀도를 받을 수 있습니다.

    • 디렉셔널 라이트에서 애트머스피어에 그림자 드리우기클라우드 그림자 드리우기 를 활성화하여 애트머스피어의 섀도 표현을 지원합니다.

    • 클라우드 섀도 세기애트머스피어의 클라우드 섀도 세기 를 통해 섀도의 세기를 제어합니다.

    • 상당한 수준의 섀도 맵 해상도를 설정하고 월드 커버 범위와 합리적인 퍼포먼스를 설정하여 불투명 섀도 거리, 깊이 바이어스 및 스케일러블 섀도 맵 해상도를 제어할 수 있습니다.

    • 클라우드는 또한 아래로 흩어지는 애트머스피어를 가립니다. 이러한 앰비언트 오클루전를 통해 어둡고 위협적인 폭풍을 만들 수 있습니다.

  • 애트머스피어 트레이스에 사용되는 샘플 수에 대한 슬라이더 사용으로 확장성을 개선했습니다.

    • 애트머스피어 트레이싱 시 불투명 메시 또는 클라우드에서 볼류메트릭 섀도를 활성화할 때 더 많은 샘플이 있어야 모든 볼류메트릭 섀도 디테일을 캡처할 수 있습니다. 샘플링 퀄리티는 스카이 애트머스피어 컴포넌트에서 조절 가능합니다.

    • 시네마틱의 경우 콘솔 변수 r.SkyAtmosphere.SampleCountMax를 사용하여 샘플 수의 한도를 높이고 스카이 애트머스피어 컴포넌트의 프로퍼티 필드에 높은 값을 입력하여 더 높은 퀄리티의 결과물을 만들 수 있습니다.

자세한 정보는 스카이 애트머스피어 문서를 확인하세요.

리얼타임 스카이 라이트 캡처

스카이 라이팅에서 이제 애트머스피어, 클라우드, 하이트 포그, 불투명 메시(Is Sky가 활성화된 언릿 머티리얼 사용)에 대한 리얼타임 씬 캡처를 지원하며, 블루프린트 노드보다 개선되어 더욱 빠릅니다. 스카이 라이트의 리얼타임 캡처 모드는 GPU의 모든 연산을 수행하고 CPU 리드백 없이 씬을 캡처할 때 발생할 수 있는 멈춤 현상을 해결합니다.

자세한 정보는 스카이 라이트 문서를 확인하세요.

인바이런먼트 라이트 믹서

새로운 인바이런먼트 라이트 믹서 는 스카이, 클라우드, 디렉셔널 및 스카이 라이트에 대한 모든 인바이런먼트 라이팅 컴포넌트를 단일 창에 가져와 쉽게 액세스하고 편집할 수 있습니다. 디자이너와 아티스트는 이 창에서 이러한 컴포넌트를 만들고 편집할 수 있으며, 프로퍼티 패널이 표시하는 레벨 오브 디테일을 선택할 수 있습니다.

image alt text

드롭다운의 메인 메뉴에서 선택하여 씬에서 인바이런먼트 라이트 믹서 사용을 시작할 수 있습니다.

자세한 정보는 환경 라이트 믹서 문서를 확인하세요.

워터 렌더링 및 메싱 시스템(실험단계)

완벽한 기능을 갖춘 새로운 워터 렌더링 및 메싱 시스템은 넓은 오픈 월드를 지원하므로 스플라인 기반 워크플로를 사용하여 강, 호수 및 바다를 빠르게 만들 수 있습니다. 워터 시스템은 또한 표면 메싱을 따라 통합된 셰이딩 및 렌더링 파이프라인 통합을 제공하면서 피직스 인터랙션과 게임플레이와의 유체 시뮬레이션을 지원합니다.

image alt text

image alt text

Water 플러그인은 워터 보디 액터가 비손실 랜드스케이프 편집 레이어 기능을 사용하는 지형 표면과 상호작용하도록 기존 Landmass 플러그인을 사용합니다.

image alt text

워터 시스템은 월드 빌딩의 두 가지 기능적 컴포넌트 즉, 강, 호수 및 바다가 월드와 매끄럽게 블렌드되도록 빌드 및 편집하는 기능과 머티리얼 및 포스트 프로세싱을 사용하여 룩 앤 필(look and feel)을 정의하는 렌더링 및 셰이딩 파이프라인을 보여줍니다.

워터 렌더링 및 셰이딩 기능

워터 렌더링 파이프라인에 여러 개선 사항과 속성이 포함되어 월드에서 물의 룩을 정의하는 데 도움이 됩니다. 이를 통해 고유한 머티리얼을 만들거나 엔진에서 제공되는 편집 가능한 기본 머티리얼로 시작할 수 있습니다. 어두운 호수, 흐르는 강 또는 멋진 푸른 바다처럼 정의하는 룩에 따라 모든 유형의 물을 만들 수 있습니다.

워터 렌더링 및 셰이딩의 일부로 다음 특성과 기능이 제공됩니다.

  • 카메라 위치를 기반으로 자동 적용되는 수중 포스트 프로세스 머티리얼로, 부분적인 잠수도 연출할 수 있습니다.

    image alt text

  • 흐르는 강에서 잔잔한 호수로의 전환과 같은 머티리얼 기반의 워터 보디 유형 간 지정된 트랜지션.

    image alt text

  • 잔잔한 수면 아래에 적용할 수 있는 굴절 반사 머티리얼을 정의 및 렌더링하는 데 도움이 되는 굴절 반사 생성 툴.

  • 물리 기반 수면에 리프랙션과 사용자 정의 스캐터링, 흡수 및 소멸 계수를 지원하는 깊이 레이어 하나를 제공하는 싱글 레이어 워터 셰이딩 모델.

워터 보디 액터 및 편집

작은 씬 또는 오픈 월드에 물을 추가할 때 물의 생성 및 편집 작업을 매끄럽고 간편히 할 수 있습니다. 워터 보디 액터를 통해 강, 호수 및 바다 등의 물을 표현하기 위해 레벨에 배치할 수 있는 다양한 워터 보디 유형을 선택할 수 있습니다. 각 워터 보디 유형에 대한 스플라인 기반 워크플로를 통해 더욱 직관적이면서 쉽게 레벨을 만들고 편집할 수 있습니다.

다음 기능이 새 워터 보디 액터에 제공됩니다.

  • 지형 표면의 블렌딩과 편집을 지원하는 여러 워터 보디 액터를 사용하여 단순하거나 복잡한 월드 생성. 랜드스케이프 지형과 같이, 워터 보디 메시는 거리를 기준으로 동적으로 조절되어 테셀레이션과 디테일이 높은 수면을 가까이에 만들고 먼 쪽의 디테일을 줄이는 타일을 사용합니다.

    image alt text

  • 워터 보디에는 고도로 커스터마이징이 가능한 Gerstner 웨이브 시뮬레이션이 있어 단순하거나 복잡한 수면을 만드는 데 사용하면 월드에 배치된 각각의 워터 보디 룩을 간단하게 만들고 편집할 수 있습니다.

    image alt text

    image alt text

  • 스플라인 기반 워크플로를 사용하면 월드를 채울 워터 보디의 편집 및 복제에 빠르게 액세스하여 월드를 채울 수 있습니다.

    image alt text

  • 인터랙티브 유체 피직스 시뮬레이션을 통해 수면에서 캐릭터와 오브젝트의 상호작용이 가능합니다. 이는 잔물결, 거품, 물 튀김 등으로 표현될 수 있습니다.

    image alt text

무비 렌더 큐 워크플로 및 개선 사항 (베타)

이번 출시에서는 새 워크플로와 익스포트 기능을 추가하여 무비 렌더 큐(기존 하이퀄리티 미디어 익스포트) 기능을 확장합니다.

새 워크플로

익스포트와 렌더링을 지원하는 다음과 같은 여러 가지 새 워크플로가 있습니다.

  • Final Cut Pro XML 지원 - EDL

  • OpenColorIO 통합

  • 고유 애플리케이션에 적용을 위한 런타임 지원

image alt text

렌더 패스 지원

표준 프로덕션 파이프라인의 여러 단계(예: 데일리, 포스트, 에디토리얼 등)에서 사용할 콘텐츠를 생성하기 위해 무비 렌더 큐에서 이제 별도 패스로 여러 데이터를 렌더링할 수 있습니다.

  • 매트 ID (제한) / 사용자 정의 레이어

  • Z-뎁스

  • 월드 위치

  • 월드 노멀

  • 앰비언트 오클루전

  • 리플렉션

image alt text

채널 외에도 다음과 같은 여러 가지 개선 사항이 있습니다.

  • 렌더링하고자 하는 특정 샷을 분리할 수 있도록, 개별 샷을 활성화 또는 비활성화할 수 있습니다.

  • 이제 큐를 현재 작업, 세팅, 샷 마스크 정보를 보관하는 에셋에 저장할 수 있습니다.

  • 일부 환경설정 세팅은 샷별로 조정 가능합니다.

또한, Deadline과 같은 서드 파티 렌더 관리 툴을 사용할 때 익스포트 및 배치 렌더링 작업이 원활하도록 해주는 UX 개선 사항이 있습니다.

Pro Media 코덱 지원

무비 렌더 큐에서 이제 다음 코덱을 지원합니다.

  • Apple ProRes(높은 비트 뎁스 10~12비트)

  • Avid DNxHR (810-12비트)

  • Multi -Channel EXR (16, 32 비트)

image alt text

다음과 같은 EXR 압축 세팅을 지원합니다.

  • 비압축

  • PIZ

  • ZIP

image alt text

시퀀서에서의 렌더링 및 익스포트 하기에서 무비 렌더 큐 관련 모든 문서를 확인할 수 있습니다.

시퀀서 비선형 애니메이션(NLA) 툴(베타)

비선형 애니메이션을 통해 애니메이션 에셋을 빠르게 생성, 수정, 조인 및 블렌드하여 새 애니메이션과 시네마틱을 만들 수 있습니다. 이로 인해 버추얼 프로덕션에 있어 매우 유용한 애니메이션 시퀀스 재사용 및 생성 워크플로가 개선됩니다.

이는 다양한 방식으로 지원됩니다.

  • 예측 가능한 변경 유지 방식으로 시퀀스 블렌딩.

  • 루트 모션 솔루션이 더욱 매끄럽게 게임플레이를 통합.

  • 시퀀서를 통해 스켈레탈 구조의 개별 본을 편집 가능.

  • 향상되고 간소화된 다양한 시퀀서 툴로 비선형 편집 지원.

image alt text

시퀀서의 ControlRig으로 컨트롤 애니메이션 임포트(실험단계)

이제 FBX를 통해 DCC 릭의 트랜스폼에 있는 저밀도 애니메이션 데이터를 시퀀서의 ControlRig으로 임포트할 수 있습니다. 따라서 더 이상 스켈레탈 애니메이션을 시퀀서로 임포트하는 데 있어 제한이 없습니다.

컨트롤 릭 트랙을 통해 FBX 데이터를 임포트하려면 컨트롤 릭 FBX 임포트 를 선택합니다. 임포트할 컨트롤을 지정할 수 있으며, 애니메이션 커브가 컨트롤로 매핑되는 방식에 대한 옵션을 필터링할 수 있습니다.

nDisplay 개선 사항

이번 버전에서는 사용자 경험을 개선하고 다양한 종류의 디스플레이 표면을 렌더링할 수 있도록 nDisplay 에 여러 기능을 추가했습니다. 이제 손쉽게 JSON 파일 형식으로 nDisplay 구성 파일을 커스터마이징하고 클러스터 이벤트가 포함된 바이너리 형식을 사용하여 데이터 처리량과 지연시간을 개선할 수 있습니다.

nDisplay 환경설정 뷰어(베타)

새로운 nDisplay 환경설정 뷰어 로 nDisplay 설정을 손쉽게 설정합니다. 뷰어에 환경설정 계층구조, 렌더 노드, 창, 뷰포트, 입력, 카메라 및 투영 정책 트리와 각각 고유한 디테일 패널이 표시됩니다. 뷰포트의 2D 레이아웃과 투영 정책의 3D 표현을 볼 수 있습니다.

image alt text

NVIDIA NVLink를 통한 멀티 GPU 지원

NVIDIA NVLink를 통한 멀티 GPU(mGPU) 지원을 추가하여 nDisplay 를 대규모 LED 볼륨으로 확장할 수 있습니다. 구성 파일의 뷰포트에 대한 gpu_node 파라미터를 사용하여 nDisplay 뷰포트를 렌더링하는 데 사용해야 하는 시스템 내 GPU를 지정할 수 있습니다. 인카메라 VFX 시나리오에서, 카메라 내부 프러스텀 렌더링에 GPU를 할당하고, 낮은 스크린 퍼센티지로 외부 프러스텀 렌더링에 또 다른 GPU를 할당하면 퍼포먼스가 개선될 수 있습니다.

image alt text

image alt text

nDisplay VIOSO 통합 (실험단계)

고도로 복잡한 표면의 프로젝터 워핑(warping)과 부드러운 에지 블렌딩을 위해 언리얼 엔진에 VIOSO 기술에 대한 통합과 지원을 추가했습니다. 다음 nDisplay 투영 정책을 사용하여 네이티브 VIOSO 형식(.vwf)의 워프 및 블렌드 파일을 로드할 수 있습니다.

  • MPCDI

  • 네이티브 SDK 통합

image alt text

nDisplay DomeProjection ProjectionTools 통합 (실험단계)

거대 돔 표면에서의 프로젝터 워핑(warping) 및 부드러운 에지 블렌딩이 언리얼 엔진에서 가능하도록 DomeProjection ProjectionTools 기술을 추가 통합하여 지원합니다. nDisplay 투영 정책 **네이티브 SDK 통합**을 사용하여 네이티브 DomeProjection 형식에서 워프 및 블렌드 파일을 로드할 수 있습니다.

image alt text

카오스를 이용한 결정론적 클러스터 렌더링 (베타)

카오스 와 같은 실시간 기능의 결정론적 렌더링을 추가하여 클러스터 렌더 노드에서 렌더링 시 시각적 일관성을 달성할 수 있습니다.

스카이 애트머스피어 렌더 관련 문제 해결

캡처하지 않도록 플래그가 지정되었어도 nDisplay에서 사용하는 씬 캡처 컴포넌트 중 하나가 스카이 애트머스피어를 캡처하여 씬 상단의 절반이 더욱 밝아졌습니다. nDisplay에서 이 문제가 발생하지 않도록 해결 방법을 제공했습니다.

인카메라 VFX 템플릿

인카메라 VFX 언리얼 프로젝트 템플릿을 라이브 액션 LED 스테이지 구성의 시작점으로 사용합니다. 프로젝트 내 기능은 다음과 같습니다.

image alt text

  • 인카메라 VFX의 nDisplay 구성 및 블루프린트 설정

  • 내부 프러스텀 및 외부 프러스텀

  • 메시 기반 워프로 nDisplay의 LED 벽 정의

  • 라이브 링크

  • 크로마 키와 트래킹 마커

  • 색 보정 영역

  • 웹 리모트 컨트롤

  • OSC

콜라보 뷰어 템플릿 개선 사항

이번 버전에서 UI를 다시 디자인하고 협업 세션을 위한 사용자 입력을 더욱 추가했습니다. 또한 세션이 다수의 사용자에게 확장될 수 있도록 퍼포먼스를 개선했습니다.

협업 세션의 보이스 커뮤니케이션

프로젝트에서 기본적으로 활성화된 보이스오버 IP를 사용하여 세션의 다른 사용자와 커뮤니케이션할 수 있습니다. 데스크톱 UI에서 보이스 커뮤니케이션을 켜거나 끌 수 있습니다.

UI 재디자인

2D 데스크톱 UI에서 VR 메뉴까지 모든 UI 엘리먼트가 재디자인되었습니다. 3D 아바타가 개선되었고 원격 참가자가 뷰에 없는 경우 표시기가 나타납니다.

image alt text

image alt text

네트워킹 개선 사항

네트워킹 블루프린트 퍼포먼스를 개선하여 병목 현상과 연결 해제를 방지합니다. 높은 로드에 맞춰 네트워크 설정이 조정되어 참가자 수가 증가하고 더욱 부드러운 오브젝트 조작 및 이동이 가능합니다.

image alt text

양손 인터랙션

이제 양손 또는 컨트롤러를 사용하여 몰입형 환경에서 동시에 여러 오브젝트와 상호작용할 수 있습니다.

image alt text

리모트 컨트롤 API (베타)

리모트 컨트롤 API는 이제 GET, PUT, POST 및 DELETE 액세스와 완전 호환되는 REST API입니다. 추가로 엔진에서 원격으로 프로퍼티를 제어할 수 있는 기본 위젯, 슬라이더, 게이지 및 버튼이 포함된 컴패니언 웹 앱이 포함됩니다.

image alt text

  • 영구적 웹 연결 - WebSocket 연결이 영구적이므로 연결 해제 없이 라이브 데이터를 수신할 수 있습니다.

  • 패키지 앱 속의 웹 서버 - 이제 패키지 앱에서 웹 서버를 실행하여 웹 앱에서 원격으로 제어할 수 있습니다.

  • 리모트 컨트롤 프리셋 - 리모트 컨트롤 프리셋 에셋에 노출되는 모든 컨트롤을 보여주는 리모트 컨트롤 패널을 추가했습니다. 이 패널을 통해 UI에서 프로퍼티 및 디테일 패널에서 볼 수 없는 함수 라이브러리를 노출할 수 있습니다.

  • 리모트 컨트롤 프리셋 API 레이어 - 사용자 친화적인 리모트 컨트롤 프리셋 외에도 노출된 모든 액터 검색처럼 씬의 정보에 쉽게 액세스할 수 있도록 API를 추가했습니다.

  • HTTP 서버 포트 변경 - 이제 리모트 컨트롤 API의 디폴트 HTTP 서버 포트는 30010입니다.

카오스 피직스 (베타)

카오스 피직스포트나이트 에서 사용하는 경량 피직스 시뮬레이션 솔루션입니다. 이번 베타 버전에서는 이 기능을 익히시는 개발자분들을 위해 기능을 사용 가능하도록 했습니다. 언리얼 엔진 4.26에서는 PhysX가 기본적으로 활성화되어 있는데(에픽 런처에서 사용 가능), 향후 버전에서 카오스 피직스가 기본적으로 활성화되면 지원이 중단될 예정입니다. 하지만 UE_4.26Chaos 빌드를 사용하시는 경우, 카오스 솔버가 기본적으로 활성화되어 있습니다.

카오스 솔버가 기본적으로 활성화되어 있는 특수 빌드가 곧 출시될 예정입니다.

image alt text

카오스 피직스 베타 버전에서는 다음과 같은 기능을 이용할 수 있습니다.

이러한 기능에 대한 자세한 정보는 카오스 피직스 개요를 확인하세요.

카오스 비히클 (실험단계)

카오스 비히클을 실험 삼아 만들어보고 싶으시면 카오스 비히클 셋업 가이드 를 읽어보세요. 또는, PhysX 비히클을 카오스로 변환하시려면 변환 가이드 를 확인하세요.

젠 로더(베타)

차세대 콘솔에 대한 런타임 **젠 로더**를 출시하여 다음을 포함한 이점으로 최신 하드웨어 기술을 활용합니다.

  • 로드 시간 개선

  • 스트리밍 및 부팅 프로세스를 위한 로드 시간 감소

  • 데이터 액세스에 오버헤드가 낮은 인터페이스를 제공하는 새로운 입력/출력 메커니즘

  • 최소 CPU 오버헤드로 데이터를 타깃 메모리로 직접 읽을 수 있는 차세대 스토리지 API와 상호작용하는 API

기존 EDL 로더를 기반으로 하지만 젠 로더는 EDL 로더의 전체 기능 세트를 지원하지 않습니다.

메시 생성 툴 개선(실험단계)

메시 생성 툴이 확장되어 엔진 내에서 메시 에셋의 생성을 지원하는 툴과 개선 사항이 추가되었습니다. 툴세트를 업데이트하면 에디터 내 기본 모델링과 편집 작업의 워크플로가 확장됩니다.

image alt text

상단 메뉴 바에서 편집 > 플러그인 으로 이동하고 Modeling Tools Editor Mode 플러그인을 활성화하여 이러한 툴에 액세스할 수 있습니다. 플러그인이 활성화되면 툴바의 모드 버튼을 클릭하고 모델링 옵션을 선택하거나 Shift + 7 을 누릅니다.

프리미티브 생성 툴바

고유한 툴바에서 받은 파라메트릭 프리미티브로 커스터마이징 가능한 표준 프리미티브 셰이프 세트에 더욱 쉽게 액세스할 수 있습니다.

image alt text

리볼브 메시 툴 개선

커스텀 리볼브 메시 생성을 위한 새로운 툴 두 가지가 추가되었습니다. 아티스트는 인터랙티브 방식으로 에디터 창에서 새 크로스 섹션을 가져오거나 기존 섹션을 선택하고 이를 회전시켜 다수의 고유한 셰이프를 만들 수 있습니다.

image alt text

  • 사용자 정의 축으로 회전 커스터마이징 가능

  • 사용자 정의 파라미터를 사용하여 셰이프의 퀄리티 개선

미러링 툴 개선

이제 정의된 축을 따라 선택한 메시를 미러링할 수 있습니다. 선택적으로 새 메시를 원래 메시에 병합하거나 새 메시를 생성할 수 있습니다.

image alt text

미러링 툴에 이제 여러 개선 사항이 포함되어 대칭에 대한 영향을 없애고 반복적 함수를 단일 툴로 결합하여 메시를 결합하고, 노멀을 플립하고, 축을 따라 에셋을 미러링할 수 있습니다.

부울 툴

메시 생성 툴세트에 부울 툴 이 포함됩니다. 부울 연산은 여러 스태틱 메시의 교집합, 합집합, 차집합을 사용하는 단일 스태틱 메시를 생성합니다.

image alt text

1, Boolean: Union; 2, Boolean B-A.

부울 툴세트는 두 스태틱 메시의 오버랩 부분을 빼거나 이러한 메시의 트리밍된 섹션을 추출하는 옵션을 제공합니다.

메시 편집 툴 개선(실험단계)

메시 편집 툴세트에 새 툴이 추가되어 일반 모델링 기법 및 사례를 수용합니다. 추가로, 기존 툴에 새 옵션이 추가되어 사용성이 증대되었습니다.

image alt text

image alt text

  • 에지 삽입 을 사용하여, 메시 결과물의 명확한 토폴로지를 위한 재트라이앵글화 옵션으로 쿼드 기반 PolyGroup을 인터랙티브 방식으로 분할할 수 있습니다.

  • 에지 루프 툴을 사용하여 단일 또는 다중 에지 루프를 쿼드 기반 PolyGroup이 있는 메시로 추가할 수 있습니다.

  • 구멍 채우기 툴이 새 옵션으로 개선되어 더욱 부드러운 구멍 채우기가 가능합니다.

  • 아티스트는 이제 셸형 메시를 만들거나 오프셋 툴을 사용하여 기존 메시 양식을 확장하고 지정된 값으로 메시를 오프셋할 수 있습니다.

  • 탄젠트 편집 툴을 사용하여 선택한 메시의 탄젠트를 구성 또는 재계산할 수 있습니다.

스컬프팅 툴 개선(실험단계)

image alt text

스컬프팅 및 디포메이션 툴에 새 기능과 브러시 옵션이 추가되었습니다. 아티스트는 이제 엔진 내에서 커스텀 가중치 맵을 만들 수 있으며, 이를 통해 스무스 및 디스플레이스 툴의 기능을 개선할 수 있습니다.

image alt text

웨이트 맵

image alt text

웨이트 맵을 사용하는 디스플레이스먼트 메시

이제 Autodesk Navisworks가 지원되어 데이터스미스가 지원하는 3D 애플리케이션 수가 늘었습니다.

Navisworks Exporter 플러그인에는 다른 데이터스미스 익스포터와 동일한 기능이 다수 포함되며, Navisworks 2019, Navisworks 2020 및 Navisworks 2021을 지원합니다.

메타데이터 익스포트

이 플러그인은 Navisworks 씬의 메타데이터 익스포트를 완벽히 지원합니다. 다음 형식을 사용한 탭 이름이 데이터 앞에 붙습니다.

[TabName]_[PropertyName] = [Value]

image alt text

위 이미지에서 결과는 다음과 같습니다.

MyTab_MyStringProperty = "MyStringValue"

MyTab_MyBooleanProperty = "Yes"

MyTab_MyFloatProperty = "0.000"

MyTab_MyIntegerProperty = "0"

Rhino용 Datasmith Exporter 플러그인 정식 버전

3D 애플리케이션을 폭넓게 지원하고자 언리얼 엔진은 이제 Rhino에서 직접 데이터스미스 파일 익스포트를 지원합니다.

새로운 익스포터는 기존 데이터스미스 플러그인과 유사하게 작동하며, MacOS와 Rhino 6를 지원합니다. 이 플러그인은 기존 UE 4.25 Rhino 임포트 플러그인과 동일하거나 매우 유사한 수준으로 오브젝트 이름, 피벗 포인트, 머티리얼 이름, 레이어, 계층구조 등을 유지합니다.

메타데이터

이러한 중요 세부 정보를 유지하는데 도움이 되도록 이제 에셋에 키 값 쌍 형식으로 커스텀 프로퍼티를 추가할 수 있고, 해당 값을 데이터스미스 메타데이터로 씬에 가져올 수 있습니다.

image alt text

Rhino 워크세션 데이터

Rhino Exporter 플러그인이 씬의 일부로 워크세션드 데이터를 익스포트할 수 있습니다. 데이터스미스는 이러한 오브젝트가 네이티브 씬의 일부인 것처럼 데이터를 임포트합니다.

USD 라이브 액터 및 스테이지 임포터 개선(베타)

언리얼 엔진은 픽사(Pixar)의 USD(Universal Scene Description) 교환 형식에 대한 지원을 확장합니다. 여러 애플리케이션에서 USD 형식을 사용하고 다양한 개선 사항이 이에 추가되어 언리얼에서 기존 프로덕션 파이프라인으로의 통합이 용이합니다.

image alt text

USD 스테이지 개선 사항

  • 이제 시퀀서에서 직접 UsdGeomXformable 트랜스폼을 움직이고, 애니메이션을 다시 USD로 쓸 수 있습니다.

  • USD 라이트 지원을 추가했습니다(UsdLuxLight 스키마).

  • USD 프리뷰 표면의 노멀 맵에 대한 지원을 추가했습니다.

  • USD 블렌드 셰이프를 언리얼 모프 타깃으로 지원하는 기능을 추가했습니다.

  • USD 지오메트리 애니메이션이 이제 언리얼 지오메트리 캐시를 통해 재생되어 퍼포먼스가 향상되었습니다.

USD 임포터 개선 사항

  • 새로운 USD 임포터는 USD 스테이지가 지원하는 모든 USD 스키마를 임포트할 수 있습니다.

  • 새 임포터는 스태틱 메시, 스켈레탈 메시, 모프 타깃, 애님 시퀀스, 머티리얼, 액터, 카메라, 라이트, 계층구조 스태틱 메시 컴포넌트(HISM)을 임포트합니다.

  • 베리언트 세트와 베리언트 사용을 통해 USD에서 LOD 레벨의 구현을 처리합니다.

USD 익스포터 개선 사항

  • USD 익스포터가 스태틱 메시를 익스포트할 때 이제 버텍스 컬러, 불투명도, LOD, 머티리얼 할당 정보를 익스포트합니다.

  • 언리얼 엔진 머티리얼을 USD 프리뷰 표면으로 직접 USD에 굽기 및 익스포트합니다.

  • 스켈레탈 메시와 모프 타깃을 익스포트하는 기능을 추가했습니다.

기타 USD 개선 사항

  • MacOS에서 USD 지원을 추가했습니다.

  • USDZ 파일 확장자를 지원합니다.

  • USD SDK를 20.05로 업그레이드하여 Python 3를 지원합니다.

Alembic 스트리밍 개선(베타)

image alt text

Alembic은 미디어 및 엔터테인먼트 분야 전반에서 복잡한 스태틱 및 애니메이션 데이터를 디스크의 스트리밍 가능한 캐시 파일로 캐싱하는 메커니즘으로 폭넓게 사용됩니다. 언리얼 엔진에서는 이제 지오메트리 캐시로 먼저 임포트할 필요 없이 스트리밍 캐시 Alembic 데이터를 직접 엔진으로 스트리밍할 수 있습니다.

프로세스 간 GPU 텍스처 공유(베타)

image alt text

TextureShare 는 CPU를 우회하면서 언리얼 엔진과 다른 프로세스 사이에서 GPU 텍스처와 버퍼를 효율적으로 주고받는 새 플러그인입니다. TextureShare는 공유 애플리케이션 사이에서 일관성을 유지하도록 동기화 메커니즘과 스레드 배리어를 지원합니다. nDisplay를 통하거나 독립형으로 이 기능을 사용할 수 있습니다.

신규 버추얼 카메라 (베타)

자체 버추얼 카메라를 커스터마이징, 확장 또는 생성할 수 있도록 버추얼 카메라 아키텍처를 모듈식 컴포넌트 로 재구성했습니다. 또한 재설계된 아키텍처를 기반으로 새로운 버추얼 카메라 기능을 구현하여 정식 버전의 솔루션을 제공합니다. 새로운 아키텍처를 사용하지 않는 버추얼 카메라는 이제 지원이 중단되었습니다.

새로운 버추얼 카메라에는 다음이 포함됩니다.

  • 멀티 유저 지원으로 **에디터**에서 모든 기능 작동

  • 재설계된 사용자 경험

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

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

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

  • 터치스크린뿐 아니라 컨트롤러 및 기타 하드웨어 입력에 대해 기본 지원

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

  • Live Link 로 원하는 커스텀 트래킹 시스템으로 전환할 수 있는 기능

  • 카메라 운영자를 지원하는 데스크톱 운영자 패널

  • iOS 앱, 언리얼 리모트의 UI를 새로 업데이트하고 스트리밍 퍼포먼스를 개선. 이제 앱의 ARKit 데이터를 Live Link 로 보냅니다.

프레임 정확도 비디오 피드백(베타)

여러 개선 사항을 통해 비디오 피드백 도중 프레임 정확도를 개선합니다.

  • 타일 기반 미디어 재생으로 카메라 뷰의 표시 내용을 GPU로 스트리밍합니다. 이를 통해 전체 클립을 스트리밍할 필요가 없고 프로세싱 시간을 크게 줄여 빠르고 효율적인 재생이 가능합니다.

  • 미디어 트랙에서 이제 Apple Pro Res 및 Avid DNxHR 코덱 클립을 지원합니다.

  • EXR 리더 GPU 모듈이 최적화되어 속도가 증가하고, EXR이 비압축 RGB 또는 RGBA 사용 시 CPU 사용량이 최소화됩니다.

DMX 플러그인 정식 버전

DMX(Digital Multiplexer) 플러그인은 DMX 프로토콜을 사용하는 외부 컨트롤러 및 디바이스에 언리얼 엔진을 연결합니다. 양방향 통신과 ArtNet 및 aSCN 네트워크를 통한 상호작용으로 언리얼에서 스테이지 쇼 및 라이팅 장비를 제어하고, 디자인 단계 중에 가상 환경에서 쇼를 프리비즈할 수 있습니다.

DMX 개선 사항

image alt text

방송국 및 라이브 이벤트 프로듀서에게 유용하도록, DMX 플러그인에 개선된 UX, 통합 UI 엘리먼트, 퍼포먼스 개선, 리팩터링된 코드 및 DMX 매트릭스 지원이 추가됩니다. 언리얼 엔진에 DMX 버튼을 추가하는 것 외에도 이번 버전에서는 다음 기능을 개선합니다.

  • DMX 모니터

  • DMX 컨트롤러 패널

  • DMX 출력 콘솔 패널

  • 픽스처 유형 패널

  • 픽스처 패치 패널

  • DMX 어트리뷰트 맵

또한, 이 플러그인은 DMX 멀티캐스트 및 유니캐스트를 지원합니다.

DMX와 시퀀서

image alt text

DMX와 시퀀서 가 통합되어 개발자가 물리 DMX와 언리얼 엔진을 사용하여 쇼를 구성할 수 있습니다. 이번 통합으로 커스텀 DMX 타임라인을 만들 수 있어 사용자는 애니메이션 및 이벤트 트리거링을 사용하는 선형 라이팅 경험을 빠르고 쉽게 만들 수 있습니다. 시퀀서를 통해 커브와 서브 시퀀싱 같은 기능을 활용하여 블루프린트 스크립트 또는 C++ 프로그램 없이 DMX를 프로그래밍 및 제어할 수 있습니다.

DMX 픽셀 매핑 (실험단계)

image alt text

DMX 픽셀 매핑 은 픽셀 버퍼(렌더 타깃)를 DMX 스트림으로 변환합니다. 이 메커니즘을 통해 개발자는 라이브 렌더 타깃 텍스처 데이터를 사용하여 DMX 픽스처를 구동하거나 저해상도 LED 패널 및 디바이스를 구동할 수 있습니다. 기본적으로 모든 픽셀이 DMX 픽스처를 나타냅니다.

image alt text

  • DMX 픽셀 매핑 LED 스트립*

DMX 픽셀 매핑 기능은 다음과 같습니다.

  • XY 좌표 샘플링 및 순서 지정용 툴 포함

  • 텍스처 데이터를 사용하여 LED 테이프 또는 저해상도 LED 디스플레이에 애니메이션 구현

image alt text

LED 디스플레이

자세한 정보는 DMX 플러그인 을 확인하세요.

DMX 픽스처 VFX 블루프린트 및 템플릿

라이브 쇼 디자이너, 오디오 비주얼 통합 작업자 및 전문가 또는 관련 에이전시 및 프로덕션 업체 등 다양한 업계에서의 DMX 지원에 관심이 있는 분들을 위해, DMX의 사용자 경험을 향상하고자 제공된 DMX 템플릿에서 선보인 바 있는 DMX 픽스처 및 VFX 블루프린트 를 출시했습니다.

DMX 픽스처 시스템은 이제 C++ 기반 모듈식 시스템을 사용하며, 다음의 하위 기능을 활성화 또는 비활성화할 수 있습니다.

  • 패닝

  • 틸트

  • 고보

  • 스트로브 등

DMX 픽스처 시스템에는 조절 가능한 퀄리티 레벨의 볼류메트릭 빔 셰이더와 매트릭스 및 픽스 바 픽스처 모델(Pix Bar Fixture Model)이 있습니다. 추가로 블루프린트 스크립터를 위해 다음 액터를 포함하여 DMX가 활성화된 VFX 블루프린트 액터 세트를 제공합니다.

  • 파이로

  • 레이저

  • 파이어워크

  • 워터 파운틴

DMX 템플릿

베타 DMX 템플릿 을 통해 다음 기능을 보여주고자 합니다.

  • Artnet + sACN 프로토콜 송수신

  • 픽스처 패치 및 GDTF 설정

  • 어트리뷰트 매핑

  • 픽스처 프록시

  • 시퀀서 통합

  • DMX 레코딩

  • 픽셀 매핑

image alt text

DMX 템플릿

또한, 개발자에게 라이브 장소를 프리비즈하고, 픽스처 컨트롤을 활용하고, 리얼타임 콘텐츠 트리거를 사용하는 방법을 보여줍니다.

라이브 장소 프리비즈

DMX를 사용하여 다음 기능을 통해 라이브 쇼 스테이지와 다양한 라이브 장소를 프리비즈할 수 있습니다.

  • 픽스처 패치

  • DMX 입력 및 블루프린트 로직

  • 시퀀서 통합 및 DMX 레코딩

픽스처 제어

언리얼 엔진을 통해 다음 기능을 사용하여 DMX 픽스처를 제어할 수 있습니다.

  • 픽스처 패치

  • DMX 출력 및 블루프린트 로직

  • 픽셀 매핑

콘텐츠 트리거

언리얼 엔진의 DMX를 사용하여 다음 기능을 통해 실시간, 생성적 또는 사전 레코딩 콘텐츠를 트리거할 수 있습니다.

  • 픽스처 패치

  • DMX 입력 및 블루프린트 로직

자세한 정보는 템플릿 다운로드 후 DMX 템플릿 개요 가이드 를 확인하세요.

스테이지 모니터(베타)

image alt text

새로운 스테이지 모니터 툴은 멀티 유저 세션의 모든 머신에 연결하고 FPS 및 GPU 사용량과 같은 퍼포먼스 통계와 멈춤 현상을 보고합니다. 세션의 모든 머신에서 이 보고서를 볼 수 있고, 보고서를 중요 섹션에 컨텍스트화하여 필터링을 간편하게 하거나 JSON 파일로 익스포트할 수도 있습니다.

스위치보드(베타)

스위치보드 는 씬과 상호 작용하고 버추얼 프로덕션 스테이지의 데이터를 생성하는 툴과 여러 디바이스를 조절하는 확장 가능한 PySide 앱입니다. 스위치보드는 다음 작업을 지원합니다.

  • 다양한 머신에서 여러 언리얼 엔진과 nDisplay 인스턴스를 실행하고 자동으로 멀티 유저 에디터 와 연결합니다.

  • 모든 머신에서 Perforce와 콘텐츠를 동기화합니다.

  • 테이크 레코더 를 통한 언리얼 엔진 및 추가 퍼포먼스 캡처 소프트웨어 및 디바이스에서 테이크 이름을 설정하고 레코딩을 시작합니다.

  • nDisplay 동기화 상태에 관한 진단 정보를 제공합니다.

Live Link XR 플러그인

이제 XR 디바이스를 퍼포먼스 캡처용 버추얼 카메라 또는 Live Link XR 플러그인을 사용하는 라이브 액션 촬영용 라이브 카메라 트래킹으로 사용할 수 있습니다. 라이브 링크 워크플로는 XR 디바이스 또는 다른 트래킹 시스템을 사용하는지 여부에 상관없이 동일하기에 프로젝트의 요구 사항과 디바이스 가용성에 따라 트래킹 시스템을 바꿔 사용할 수 있습니다. 이번 출시에서는 Live Link XR이 Steam 기반 디바이스만 지원합니다.

비주얼 데이터프렙 툴 정식 버전

비주얼 데이터프렙 툴은 높은 수준의 구성 요소를 포함한 명확한 워크플로를 제공하여 데이터 임포트부터 UE 에셋 생성에 이르는 준비 프로세스를 설명합니다. 이제 데이터프렙 정식 버전을 사용할 수 있으며 유저 인터페이스와 사용성이 개선되었고 새로운 연산자와 선택 필터에 액세스할 수 있습니다.

  • 대체 머티리얼 테이블 - 데이터프렙에서 대체 머티리얼 테이블을 직접 생성하여 모델에서 머티리얼을 빠르게 대체합니다.

    image alt text

  • 메시 모델링 연산 - 이제 메시 모델링 연산자를 데이터프렙에서 사용할 수 있습니다. 여기에는 데시메이션, UV 생성 등이 포함됩니다.

  • 개선된 그래프 및 선택 툴 - 데이터프렙의 그래프 및 선택 툴에 대해 여러 사항이 개선되었습니다.

  • 그래프의 불필요한 노드를 무시할 수 있습니다.

  • 액터 세트에서 표시되는 모든 액터를 선택합니다.

  • 액터 세트와 겹치는 모든 액터를 선택합니다.

  • 선택 트랜스폼, 모든 연산자 및 필터를 액터 컴포넌트와 함께 사용할 수 있습니다.

  • 입력 패널이 업데이트되어 가독성과 사용성이 개선되었습니다.

  • 콘텐츠 프리뷰에서 선택한 에셋을 사용하는 씬 프리뷰에서 액터를 선택할 수 있습니다. 반대로도 가능합니다.

  • 프리뷰 필터를 사용할 때 선택 항목이 콘텐츠 프리뷰 및 씬 프리뷰와 자동으로 동기화됩니다.

OpenColorIO 지원

이제 언리얼로 렌더링하는 이미지 및 선형 미디어의 컬러 스페이스에 대한 제어를 확장하여 카메라 캡처부터 언리얼 에디터 작업을 거친 최종 출력에 이르기까지 전체 과정에서 컬러 일관성을 유지할 수 있습니다. OpenColorIO(OCIO) 컬러 변환 지원을 확장함으로써 다음이 가능합니다.

  • 각 에디터 뷰포트에 컬러 스페이스 변환을 설정합니다.

  • 무비 렌더 큐의 샷을 렌더링할 때 컬러 스페이스 변환을 설정합니다.

  • 각 nDisplay 뷰포트에 컬러 스페이스 변환을 설정합니다.

컨트롤 릭 브랜칭 및 루핑

브랜칭 및 루핑을 통해 최소한의 설정으로 유연하고 동적인 컨트롤 릭을 만들 수 있습니다. 루핑을 통해 사용자는 동적으로 채워진 오브젝트 컬렉션(본 체인, 컨트롤 목록)을 만들 수 있으며, 이는 반복 가능합니다. 이를 통해 그래프 크기가 크게 감소하고, 그래프 퍼포먼스, 릭의 생성 시간 및 유연성이 개선됩니다.

image alt text

  • 새로운 브랜칭/조건부 노드를 통해 조건부 인수 기반 그래프를 브랜칭할 수 있습니다.

  • 루핑을 통해 로직을 활용하여 더욱 간결하고 유연한 그래프를 만들 수 있습니다.

  • 아이템 및 지원 노드 그룹화에 대한 지원이 추가되었습니다.

컨트롤 릭 인버전

image alt text

컨트롤 릭 인버전을 통해 기존 애니메이션을 시퀀서를 사용하여 수정 가능한 애니메이션 릭으로 리매핑할 수 있습니다. 이제 사용하기 편리한 컨트롤 릭으로 기존 스켈레탈 애니메이션을 수정할 수 있습니다. 새로운 백워드 이벤트 노드는 본이 컨트롤 또는 다른 컨트롤 로직으로 매핑되는 방법을 정의합니다.

  • Numerical PreSequencer 기능을 통해 시퀀서의 애니메이션 프레임당 백워드 이벤트를 실행하여 Bake to Control Rig이 허용됩니다.

컨트롤 릭 컴포넌트

이제 컨트롤 릭 컴포넌트를 사용하여 블루프린트에서 컨트롤 릭 데이터에 액세스할 수 있습니다. 이를 통해 블루프린트의 게임플레이 로직으로 컨트롤 릭을 구동하고, 다른 비율의 캐릭터에 맞게 컨트롤 릭을 다시 초기화하고, 다른 컨트롤 릭 데이터를 직접 읽거나 쓸 수 있습니다. 추가로 사용자는 컨트롤 릭 컴포넌트의 접근자를 통해 넌스켈레탈 메시 오브젝트를 컨트롤 릭 계층구조에 어태치할 수 있습니다.

image alt text

  • 컨트롤 릭의 새로운 설정 이벤트를 통해 스켈레톤과 컨트롤의 초기화가 가능합니다.

  • 컨트롤 릭 초기화 상태 도중 스켈레톤과 컨트롤을 배치할 수 있습니다.

  • Getter와 Setter 함수가 블루프린트에 제공되어 본 및 컨트롤 트랜스폼/값을 가져오거나 설정할 수 있습니다.

  • 컨트롤 릭 컨트롤 및 디버그 드로가 블루프린트 뷰포트에 표시됩니다.

  • 컨트롤 릭에서 본 트랜스폼을 가져와 스태틱 메시 트랜스폼을 구동할 수 있습니다.

풀보디 IK 노드(실험단계)

런타임에서 절차적 방식으로 캐릭터 포즈를 수정해야 하는 사용자를 위해 풀보디 IK 솔버가 추가되었습니다. Jacobian Pseudoinverse Damped Least Squares를 기반으로 하는 풀보디 IK 컨트롤 릭 노드에는 강성, 본 한도, 폴 벡터 및 기타 솔버 파라미터 제어를 위한 추가 프로퍼티가 있습니다.

  • 모든 스켈레톤에서 사용할 수 있습니다.

  • 컨스트레인트 및 강성 설정과 같은 추가 프로퍼티를 통해 특정 아티스트 요구 사항에 맞춰 솔버를 조절할 수 있습니다.

GPU 라이트매스 (베타)

언리얼 엔진의 라이트 굽기 시스템인 라이트매스는 이제 차세대 GPU 기반으로 새로이 제작한 버전도 이용 가능합니다. GPU 라이트매스는 DirectX 12 및 DXR 레이 트레이싱 기능을 활용하여 CPU 기반 라이트매스 시스템을 향상해줍니다. 복잡한 씬을 빌드하는 시간이 현저히 줄어들어, 싱글 호스트 속도와 CPU 기반 시스템에서의 배포 스웜 렌더 속도가 비슷한 수준입니다.

image alt text

크레딧: 아트 제작: Dekogon Studios - www.dekogon.com

새로운 GPU 라이트매스는 다음을 통해 현재 라이트 굽기 시스템을 개선합니다.

  • 뷰포트의 실시간 프리뷰 옵션을 통한 프로그레시브 라이트매퍼 사용

  • 라이팅 빌드 시 다음과 같은 여러 가지 모드를 이용할 수 있습니다. 전체 굽기보이는 대로 굽기

  • 복잡한 씬에서 라이트를 굽는 속도가 크게 증가

  • CPU 기반 라이트매스보다 물리적으로 더욱 정확한 결과를 도출

GPU Lightmass 플러그인을 활성화하고 다음 프로젝트 세팅을 설정하여 GPU 라이트매스 사용을 시작할 수 있습니다.

image alt text

  • 디폴트 RHI를 DirectX 12 로 설정(Windows 10 빌드 1809 이상 필요)

  • 레이 트레이싱 지원 활성화(DXR 지원 카드 필요)

  • [선택 사항] 인터랙티브 프리뷰 모드에 버추얼 텍스처링버추얼 텍스처 라이트맵 활성화

    image alt text

    image alt text

언리얼 인사이트

메모리 인사이트 (베타)

메모리 인사이트 가 추가되어 언리얼 인사이트로 애플리케이션의 메모리 사용 방법을 파악할 수 있어 개발자는 작업이 애플리케이션 성능과 엔진 동작에 어떤 영향을 주는지 알 수 있습니다.

image alt text

디폴트 그래프 트랙이 제공되어 Total, TrackedTotal, Untracked, Meshes, Textures, Physics 및 Audio별로 메모리 사용량이 표시됩니다.

메모리 인사이트 패널의 추가 LLM 태그에 대해 자세히 알아보려면 언리얼 인사이트 의 업데이트 개요를 읽어보세요.

슬레이트 인사이트

UI 개발자가 유저 인터페이스의 퍼포먼스를 파악할 수 있도록, 언리얼 엔진에서는 UMG 및 슬레이트 프로파일링 툴로 언리얼 인사이트를 확장하고 있습니다. 슬레이트 인사이트 확장자 이용 시 슬레이트 프레임 뷰 를 사용하여 페인트, 무효화, 프레임당 업데이트되는 위젯 목록을 얻을 수 있습니다.

image alt text

개발자가 GlobalInvalidation을 활성화하는 경우 비용이 높은 프레임의 원인인 위젯을 식별할 수 있습니다.

UMG 및 슬레이트 프로파일링 툴(예: 슬레이트 프레임 뷰)에 대해 자세히 알아보려면 이 슬레이트 인사이트 개요 를 읽어보세요.

모바일 렌더링 개선 사항

기존 모바일 렌더링 파이프라인 개선 사항에는 기존 기능의 최적화와 새롭게 제공되는 포스트 프로세스가 모두 포함됩니다.

모바일용 버추얼 텍스처 압축(정식 버전)

모바일의 런타임 버추얼 텍스처에 대한 텍스처 압축 지원을 추가했습니다. 이를 통해 모바일 디바이스에서 퍼포먼스가 크게 개선된 버추얼 텍스처를 사용할 수 있습니다. 버추얼 텍스처를 사용하는 방법에 대한 추가 정보는 버추얼 텍스처링 레퍼런스 를 참고하세요.

모바일용 리플렉션 캡처 압축(정식 버전)

리플렉션 캡처 컴포넌트 에서 이제 모바일 디바이스에서의 텍스처 압축을 지원합니다. 이를 통해 리플렉션 캡처의 메모리 사용량이 감소하여 모바일 프로젝트에 보다 유용합니다.

모바일용 그라운드 트루스 앰비언트 오클루전(GTAO) (실험단계)

그라운드 트루스 앰비언트 오클루전이 모바일 디바이스에 제공됩니다. 앰비언트 오클루전의 구현을 통해 모바일 프로젝트에서 합리적 비용으로 간접광과 섀도의 외형을 개선할 수 있습니다.

GTAO 비활성화

GTAO 활성화

*GTAO가 활성화되면 이 씬의 모서리에서 앰비언트 오클루전을 볼 수 있습니다. ***_Modular Building Set courtesy of PurePolygons_**

모바일에서 GTAO를 구현할 때 Mali 디바이스에서 퍼포먼스 문제가 발생하는데, 이는 1,024개의 최대 컴퓨팅 셰이더 스레드보다 수가 적기 때문입니다.

모바일용 다이내믹 스포트라이트 섀도(실험단계)

다이내믹 스포트라이트 섀도가 모바일에서 지원됩니다. 이제 이를 통해 스포트라이트로 스태틱 및 무버블 메시 모두에 그림자를 드리울 수 있습니다.

모바일용 픽셀 프로젝티드 리플렉션(실험단계)

4.26에서 모바일 디바이스용 픽셀 프로젝티드 리플렉션 지원이 추가되어 리플렉션 플레인에서 모바일에 스크린 스페이스 리플렉션을 생성할 수 있습니다.

image alt text

현재 다음 모드가 지원됩니다.

  • Usual — 플레이너 리플렉션 액터가 모든 플랫폼에서 동일하게 기능합니다.

  • MobilePPR — 플레이너 리플렉션 액터가 PC/콘솔 플랫폼에서는 정상적으로 작동하지만 모바일 플랫폼에서는 픽셀 프로젝티드 리플렉션을 사용합니다.

  • MobilePPRExclusive — 모바일 플랫폼의 픽셀 프로젝티드 리플렉션에 대해서만 플레이너 리플렉션 액터가 사용됩니다. 이로 인해 PC 및 콘솔 프로젝트에서 기존 SSR을 대신 사용할 수 있습니다.

레이 트레이싱 업데이트 및 개선 사항

기능을 지속적으로 확장 중이며, 게임 내 레이 트레이싱의 활용 범위를 넓히는 중입니다. 최근 노력을 쏟아부은 포트나이트의 레이 트레이싱 지원 을 예로 들 수 있습니다. 포트나이트에서 레이 트레이싱을 지원하기 위한 노력을 통해 리얼타임 퍼포먼스가 좋아졌고, 퀄리티를 향상해주는 여러 가지 최적화 작업도 수행했으며, 여러분의 프로젝트에서도 사용할 수 있게 되었습니다.

image alt text

1, 레이 트레이싱 활성화; 2, 레이 트레이싱 비활성화

이번 버전에는 다음이 포함됩니다.

  • 효율적인 버퍼 할당자, 힙 관리, 더욱 빠른 다이내믹 패스 및 RTPOS 핸들링 개선을 통한 CPU 퍼포먼스 최적화로 DirectX 12의 경험 개선에 유용.

  • 비시각적으로 관련 있는 월드 포지션 오프셋(WPO) 평가의 더욱 정확한 비활성화, 더욱 효율적인 라이팅 샘플링을 위한 공간적 구조, 카메라 뷰 뒤에 있는 오브젝트에 대한 컬링 옵션 등을 통한 GPU 퍼포먼스 개선.

  • 안정성 증가를 통해 게임 및 프로젝트에 다양한 레이 트레이싱 도입으로 인한 엔진 내 여러 충돌과 불안정성의 원인 해결.

  • 양면 폴리지, 반투명 지원 확장, 반투명 섀도 등의 지원을 통한 글로벌 일루미네이션 퀄리티 및 퍼포먼스 개선을 포함한 레이 트레이싱 기능의 시각적 개선.

베이킹 툴 개선(실험단계)

베이킹 툴을 통해 노멀, 앰비언트 오클루전, 커버처, 위치 및 텍스처에 대한 맵을 프로젝트의 콘텐츠 브라우저에 편리하게 구울 수 있습니다. 아티스트는 메시를 선택하고 특정 UV 채널을 기반으로 맵을 구울 수 있습니다.

image alt text image alt text

UV 편집 툴 개선(실험단계)

UV 편집 툴에 에디터 내 UV 레이아웃의 표시 및 조절용 신규 옵션이 계속해서 추가됩니다. 새로운 UV 디스플레이 옵션은 UV 툴 중 하나를 사용하면서 에디터 뷰포트에 있는 메시의 UV 레이아웃 시각화 방법을 제공합니다. 새로 선택한 에지 UV 자르기 툴을 사용하면 아티스트는 3D 소프트웨어에서 변경하고 다시 익스포트할 필요 없이 스태틱 메시의 UV 맵을 편리하게 조절할 수 있습니다.

image alt text

볼륨 편집 툴(실험단계)

새로운 볼륨 편집 툴세트를 사용하면 엔진에서 콜리전 및 볼륨 셰이프를 직접 편집할 수 있습니다. BSP 셰이프, 기존 볼륨 또는 콜리전 셰이프를 스태틱 메시 액터로 변환하고 메시 편집 툴을 사용하여 이를 편집할 수 있습니다. 커스터마이징이 끝나면 이러한 메시를 볼륨 또는 콜리전 셰이프로 다시 변환할 수 있습니다.

Gen5 템포럴 업샘플링(실험단계)

현재 차세대 플랫폼 및 PC 전용인 새로운 템포럴 업샘플링 알고리듬을 열심히 준비하고 있습니다. 현재 이 신규 알고리듬을 사용하여 4K로 포트나이트 출시 및 전투 테스트를 진행 중입니다. Gen5 템포럴 업샘플링은 아직 개발 중이지만 공정한 퀄리티 비교를 위해 동일한 프레임 속도 내에서 더 낮은 스크린 퍼센티지로 구성하여 추가 퍼포먼스 비용을 확보해야 한다고 하더라도 현재 템포럴 안티 에일리어싱(TAA) 및 템포럴 업샘플링보다 더 높은 이미지 퀄리티 출력이 가능합니다.

Gen4 Temporal Upsample

Gen5 Temporal Upsample

보다 높은 퀄리티의 템포럴 업샘플링 기술을 사용한 퍼포먼스는 더 높은 업스케일링 비용 이상으로 스크린 퍼센티지를 낮출 때 빛을 발합니다. 나머지 프레임에서 GPU 예산을 확보하기 때문에 다른 렌더링 기능의 활성화 또는 퀄리티 향상에 재투자할 수 있어서, 궁극적으로 최종 출력 픽셀 퀄리티가 높아집니다.

기존 Gen4 템포럴 업샘플링은 유지되며, 이 플랫폼을 지원하는 동안 Gen5의 적극적인 개발에서 분리하여 기존 콘텐츠의 리그레션을 방지할 것입니다.

Python 3.7.7 지원

올해 초 Python 2.x 버전 수명이 종료된 이후, 언리얼 엔진에 Python 3.x 지원을 추가하여 VFX 레퍼런스 플랫폼 가이드라인을 준수하고 있습니다. 엔진에는 Python 3.7.7이 제공되지만 Python 2.7 지원도 포함됩니다. 이번 출시 후에는 Python 2.x 버전은 엔진에서 지원이 중단됩니다.

언리얼 엔진의 USD 지원 또한 Python 3.x 버전으로 마이그레이션됩니다. Python 2.7을 계속 사용해야 하는 경우, USD 플러그인과 엔진을 다시 컴파일하여 Python 2.7을 타기팅해야 합니다. 엔진에서 Python 버전을 변경하는 방법에 대한 자세한 내용은 Python을 사용한 에디터 스크립팅 을 참고하세요.

데이터스미스 개선 사항

데이터스미스는 지속적으로 성능이 개선되며 관심 있는 3D 소프트웨어 패키지에 대한 지원을 확장합니다.

  • Revit용 데이터스미스 익스포터에 Revit 2021 지원이 추가됩니다.

  • 3ds Max 플러그인용 데이터스미스가 확장되어 여러 코로나 머티리얼 및 맵이 지원됩니다.

데이터스미스 퍼포먼스 개선

데이터스미스의 여러 퍼포먼스 개선을 통해 자동차업체 및 제조업체의 크고 복잡한 CAD 모델을 지원합니다.

  • 적절한 최적화 설정을 포함한 MSVC2017 사용 컴파일.

  • 멀티 스레딩에서 Siemens JT 모놀리식 모델을 읽도록 임시 솔루션 구현.

  • 메모리 할당 향상을 통한 성능 최적화.

데이터스미스 익스포트 API에 대한 MacOS 지원

데이터스미스 지원을 Mac OS X에서 실행되는 디자인 애플리케이션에 추가하고자 하는 서드 파티 개발자의 경우, 데이터스미스 익스포트 API의 툴 및 헬퍼 클래스를 사용하여 고유의 익스포터를 만들고 오브젝트와 씬 데이터를 .udatasmith 파일로 변환할 수 있습니다.

애니메이션 인사이트에서의 오브젝트 프로퍼티 트레이싱 (실험단계)

애니메이션 인사이트는 이제 액터, 컴포넌트 또는 애님 인스턴스 등 게임플레이 관련 오브젝트의 프로퍼티를 트레이스할 수 있습니다. 이를 통해 외부 디버거 없이도 오브젝트의 프로퍼티가 시간이 지남에 따라 어떻게 변화하는지 시각화할 수 있습니다. 네이티브와 블루프린트 클래스 모두 지원합니다.

image alt text

'ObjectProperties' 트레이스 채널을 활성화한 후 에디터에서 액터를 우클릭하여 프로퍼티를 트레이스하면 됩니다. 컴포넌트와 다른 오브젝트의 프로퍼티는 인사이트에서 트랙을 우클릭하여 트레이스할 수 있습니다.

애님 노드 프로퍼티 액세스 시스템

애니메이션 블루프린트 노드의 경우, 이제 프로퍼티 액세스 시스템을 통해 핀이 노출된 파라미터를 이용 가능한 게임 내 프로퍼티와 바인딩할 수 있습니다.

image alt text

핀을 통해 데이터를 연결하면 다음과 같은 여러 가지 이점이 있습니다.

  • 항상 스레드 세이프 방식으로 데이터에 액세스됩니다.

  • 데이터를 수동으로 애니메이션 블루프린트에 모을 필요성이 줄어듭니다.

  • 여러 노드를 동일한 값에 바인딩하면 그래프가 더 적고, 복잡하지 않은 간단한 구조가 되어 식별하기 쉽습니다.

  • 일반 '빠른 경로'로 퍼포먼스가 최대 25% 향상됩니다.

  • 함수, 배열, 링크된 오브젝트, 중첩된 구조체 및 위 사항의 모든 조합에도 바인딩을 지원합니다.

쿼츠(베타)

image alt text

4.26에 추가된 새로운 오디오 툴인 쿼츠 는 오디오 엔진 내 모든 사운드를 대상으로 샘플 정확도 클립을 이용해 사운드 스케줄링을 하여 오디오 렌더링 프로세스에서의 컨트롤 수준을 높입니다.

쿼츠를 통해 완벽한 샘플 단위 정확도의 시간 범위(음악적 또는 기타)에서 월드 사운드를 재생하고 월드 전체의 사운드 이미터와 임의로 동기화할 수 있습니다.

오디오 모듈레이션(베타)

image alt text

새로운 Audio Modulation 플러그인 에는 더욱 직관적인 기능 서브셋이 포함되어 소스 오디오를 믹싱하고, 다음을 통해 오디오 프로퍼티를 동적으로 제어하고 파라미터화할 수 있습니다.

  • 유연하고 분리된 일반 파라미터 모듈레이션 및 믹스 시스템 노출

  • 게임 믹스 오디션과 디버그를 위한 견고한 툴 세트 구축

  • 손쉽게 확장할 수 있고, 플러그인을 통한 소스, 이펙트, 서브믹스 및 다양한 기타 오디오 유형의 추가 모듈레이션에 사용할 수 있는 API 제공.

오디오 스트림 캐싱

스트림 캐싱은 원하는 시점에서 오디오를 로딩하고 미사용 시 자동으로 해제하는 방식입니다. 스트림 캐싱을 사용하면 오디오의 메모리 예산을 고정으로 설정하고 필요에 따라 오디오 데이터를 스트리밍하며 나머지는 엔진이 제어하도록 할 수 있습니다. 이를 통해 사운드 디자이너는 메모리 한도 초과 없이 필요에 따라 오디오 에셋을 로드할 수 있습니다. 이 기능은 4.24 버전 이후 베타로 제공되었지만 4.26 버전에서는 모든 플랫폼에서 사용할 수 있습니다.

모바일용 데스크톱 렌더러 (iOS - 베타/Android - 실험단계)

언리얼 엔진 4.26에서 모바일 디바이스용 포워드 및 디퍼드 데스크톱 렌더러를 제공하며, 이를 통해 호환 디바이스에 개선된 렌더링 기능 세트를 제공합니다. Vulkan을 사용하는 Android 디바이스는 물론 iOS 디바이스에서 사용할 수 있습니다. iOS 구현은 기능 준비 면에서 베타로 간주되는 반면 Android Vulkan 구현은 실험단계로 간주됩니다.

image alt text

데스크톱 포워드 렌더러 포함 iPad Pro에서 실행되는 잠입자 데모

이러한 렌더링 옵션에 대한 추가 정보는 포워드 셰이딩 렌더러 가이드를 참고하세요.

모바일 디퍼드 렌더러 (실험단계)

언리얼 엔진 4.26은 이제 모바일 렌더러용 디퍼드 렌더링 모드를 지원합니다. 이 모드는 하이 퀄리티 리플렉션, 방대한 양의 다이내믹 라이트, 릿 데칼 및 모바일 포워드 셰이딩에서 지원하지 않는 다른 기술까지 지원합니다.

Mobile Forward Renderer

Mobile Deferred Renderer

디폴트 모바일 포워드 렌더링과 새로운 디퍼드 렌더러

현재 모바일 디퍼드 렌더러는 iPhone 6 이상의 iOS 디바이스에서 지원하며, Android Vulkan의 경우 Galaxy S9 이상에서 지원합니다.

애니소트로피 정식 버전

이제 애니소트로피를 정식 버전을 사용할 수 있습니다! 사용하지 않을 때 추가 퍼포먼스를 도입하지 않고 퍼포먼스를 개선하고 이를 디폴트로 표시합니다.

애니소트로피를 사용하여 스페큘러 하이라이트 및 리플렉션의 형태 및 방향을 제어할 수 있으며, 가장 일반적인 것이 브러시드 메탈 머티리얼을 구현하는 것입니다.

image alt text

1, 애니소트로픽 반응; 2, 아이소트로픽 반응

머티리얼에서 애니소트로피를 사용할 때 애니소트로픽 패스가 활성화되어 애니소트로픽 머티리얼을 사용하는 오브젝트에 추가 gbuffer 프로퍼티를 발산합니다. 추가로, 씬에 애니소트로픽 머티리얼이 포함된 경우 픽셀에 애니소트로픽 프로퍼티가 포함될 때에만 라이팅 패스가 애니소트로픽 BRDF를 사용하여 각 픽셀을 비춥니다. 실제로 애니소트로피의 비용은 이런 머티리얼을 표시하는 픽셀의 수에 비례합니다.

애니소트로피는 기본적으로 PC 및 차세대 콘솔(XBXS/PS5)에서 기본적으로 활성화됩니다. 현재 에어리어 라이트, 또는 소스 영역 크기가 포함된 스포트 및 디렉셔널 라이트를 지원하지 않습니다.

애니소트로피 관련 자세한 정보는 머티리얼 입력 문서를 참고하세요.

UMG 및 슬레이트 입력 디버깅 툴

유저 인터페이스(UI)를 디버깅하는 동안 프로세스를 간섭하지 않고 입력(예: 게임패드 또는 키보드 입력) 시퀀스를 재생산하는 것은 어려울 수 있습니다. 이번 출시를 통해 UI 탐색을 디버그하고 탐색 이벤트의 정적 동작을 시각화하는 툴이 제공됩니다. 이를 통해 개발자는 특정 UI 버그와 관련된 입력을 효율적으로 식별할 수 있습니다.

image alt text

위젯 리플렉터에서의 내비게이션 이벤트 시뮬레이션*

위젯(또는 시스템)은 런타임 시 다른 결과를 제공할 수 있습니다.

자세한 정보는 위젯 리플렉터 를 참고하세요.

콘솔 슬레이트 디버거

슬레이트 디버거 의 콘솔 버전에 다음 프로파일링 익스텐션이 포함됩니다.

  • 이 프레임에 대해 페인트된 위젯을 표시하는 페인트 옵션

  • GlobalInvalidation 모드가 활성화된 상태에서 디버거를 통해 개발자는 유저 인터페이스를 수시로 무효화하는 위젯을 찾을 수 있음

또한 다음 입력 익스텐션이 있습니다.

  • 추가 필터 및 이벤트 옵션

  • 개발자가 시스템이 이벤트 핸들러로 위젯을 선택하는 방법을 관측할 수 있도록 하는 라우팅 옵션

image alt text

자세한 정보는 콘솔 슬레이트 디버거 레퍼런스 를 참고하세요.

LiDAR Point Cloud 개선 사항

LiDAR Point Cloud 플러그인에는 추가 파일 유형에 대한 지원과 퍼포먼스 및 워크플로 개선 사항이 포함되어 있습니다.

image alt text

  • LAZ 및 E57 파일 형식에 대한 지원이 추가되었습니다.

  • 새로운 LidarClippingVolume 액터는 씬의 모든 LiDAR 컴포넌트와 함께 실시간으로 작동합니다.

  • 플러그인을 통해 이제 포인트에 대한 노멀 벡터를 계산할 수 있습니다. 전체 클라우드 또는 선택 항목에 대해 이를 수행할 수 있습니다.

  • 포인트 클라우드의 임포트, 처리 및 익스포트에 대한 RAM 요구사항이 크게 감소했습니다.

  • 선택 반전: 토글이 추가되어 모든 선택한 포인트와 선택하지 않은 포인트 사이의 전환이 가능합니다.

  • 다이내믹 포인트 예산: 화면에서 포인트 예산을 제어하는 새 시스템이 있습니다.

    • r.LidarTargetFPS X - 계속해서 포인트 예산을 미세조정하여 전체 FPS를 X로 유지합니다.

    • r.LidarIncrementalBudget X - true로 설정된 경우 뷰포트가 움직이지 않는 한 자동으로 포인트 예산을 매우 높은 값(sub 10FPS)으로 높입니다.

  • 에셋 한도당 20억 개 포인트를 제거합니다.

OpenXR 통합(베타)

OpenXR 플러그인 하나만 프로젝트에 추가하면 여러 XR 디바이스를 타기팅할 수 있습니다. OpenXR 플러그인은 현재 마켓플레이스의 확장 플러그인을 지원하므로 엔진 출시에 의존하지 않고 OpenXR에 기능을 추가할 수 있습니다.

image alt text

크레딧: OpenXR 및 OpenXR 로고는 Khronos Group Inc.의 등록상표입니다.

언리얼 엔진의 OpenXR 플러그인에 다음의 기능 지원이 추가되었습니다.

  • 아이 트래킹, 핸드 트래킹 및 그립 앤 에임 포즈와 같은 입력.

  • 언리얼 엔진의 현실 세계의 관심지점(POI), ARPin.

  • DirectX12 RHI.

플랫폼별 플러그인은 4.26 버전에서 여전히 사용 가능합니다. OpenXR 플러그인 또는 플랫폼별 플러그인을 선택하여 사용할 수 있습니다.

Azure 공간 앵커(베타)

이제 몰입형 모바일 앱의 세션 사이에서 현실 세계에 기반하기 위해 관심 지점을 지정할 수 있습니다. ARKit 및 ARCore에 대한 Azure 공간 앵커 지원을 언리얼 엔진에 추가하고 C++ API를 업데이트했습니다.

image alt text

RHI 변경 사항: 배리어 리팩터, RDG 업데이트

해당 장면은 API 업데이트를 보여주고 있습니다. 이와 같은 변화는 소스 코드 작업을 접하지 않는 최종 사용자가 인식하지 못한 상태에서 이뤄집니다.

RHI 리소스 배리어/트랜지션 API는 분할 트랜지션, 서브리소스 상태 추적, 명시적 리소스 상태를 지원하도록 리팩터링되었습니다. 분할 트랜지션으로 동일한 하드웨어 파이프라인에서 워크로드의 오버랩이 가능하고, 더욱 명시적인 상태 트랜지션으로 인해 타기팅된 GPU 캐시 플러시가 증가합니다. 새로운 트랜지션 API에는 리소스의 현재 및 목표 상태가 모두 필요하며, 최신 그래픽 API의 디자인을 미러링합니다. 상태 또한 더욱 세분화되어, 일반 읽기 가능/쓰기 가능 상태 대신 새 API는 렌더 타깃, SRV, UAV 등 별도의 플래그가 있습니다. 이를 통해 GPU로 더욱 정밀한 배리어를 전송할 수 있어, 경우에 따라 퍼포먼스가 향상될 수 있습니다.

또한 RHI에 의해 내부적으로, 주로 BeginRenderPass 내에서 수행되었던 암시적 배리어 대부분이 제거되었습니다. 호출 코드는 이제 명시적으로 렌더 타깃을 올바른 상태로 트랜지션한 다음 렌더 패스를 시작해야 합니다.

경우에 따라 리소스의 현재 상태를 추적하기 어려울 수 있습니다. 새 렌더링 코드에 렌더 종속성 그래프 사용을 권장합니다. RDG를 통해 상태 추적과 배리어 배칭을 처리합니다. 이전 트랜지션 API는 현재 지원이 중단된 상태로 향후 엔진 출시에서 제거될 예정입니다. 이러한 함수를 사용하는 기존 코드의 경우 컴파일러 경고가 트리거되며, 새 API를 사용하도록 변환되어야 합니다.

명령이 제출될 때(드로 콜, 셰이더 디스패치 컴퓨팅, 복사 작업 등) 리소스가 올바른 상태에 있는지 검사하는 유효성 검사 레이어를 추가했습니다. 이는 명령줄에 -rhivalidation 플래그를 추가하면 활성화할 수 있고, 모든 RHI에서 사용할 수 있습니다.

RDG 구현에서 이제 비동기 컴퓨팅 스케줄링, 렌더 패스의 병합, 미사용 패스의 컬링, 읽기 전용 상태의 병합 및 서브리소스 단위에서 추적되는 트랜지션 분할을 지원합니다. RDG 리소스를 사용한 균등 버퍼가 현재 지원됩니다. 디퍼드 렌더러가 추가로 리팩터링되어 통합 RDG 빌더 인스턴스를 사용합니다. 뎁스 프리패스 이후의 모든 건 이제 모놀리식 렌더 그래프입니다.

개선된 스마트 리테셀레이션

리테셀레이션 툴이 개선되어 사용자가 트라이앵글을 재생성하고자 하는 표면을 보다 면밀하게 관리할 수 있습니다.

리테셀레이션에 대한 새 옵션은 다음을 포함합니다.

  • 그대로 유지 및 변경된 전체 표면(삭제되지는 않음)

  • 전체 표면

사운드 클래스를 통한 감쇠 거리 조절

이제 사운드 클래스를 사용할 때 거리를 기반으로 사운드 감쇠를 조절할 수 있습니다.

서브믹스 이펙트

이 기능은 동일한 디지털 신호 처리(DSP)를 소스 이펙트에 대한 스테레오 딜레이로 제공하지만 서브믹스 이펙트에 적용됩니다.

가비지 컬렉션 개선

빠른 레퍼런스 컬렉션의 즐겨찾기를 통해 FArchive 사용량을 낮춤으로써 가비지 컬렉션 의 퍼포먼스를 개선했습니다.

자세한 정보는 가비지 컬렉션 을 읽어보세요.

베리언트 매니저 개선

베리언트 매니저의 지속적인 개선을 통해 베리에이션을 쉽게 설정하고 액터 계층구조의 비저빌리티를 토글할 수 있습니다. 이제 베리언트 사이의 종속성을 설정하고, Python을 사용하여 베리언트 섬네일을 설정하고, 베리언트 세트에 섬네일 이미지를 설정할 수 있습니다.

image alt text

iOS용 Windows 메탈 셰이더 컴파일러

Windows 메탈용 셰이더 컴파일러를 새로 도입합니다. 이를 통해 Windows 사용자는 더욱 간소화된 워크플로로 iOS 프로젝트에 대한 셰이더를 컴파일할 수 있으며, 더 이상 원격 셰이더 컴파일링을 사용할 필요가 없습니다.

Windows 메탈 셰이더 컴파일러를 사용하려면 Windows용 메탈 개발자 툴 을 설치해야 합니다. 프로젝트 세팅 > iOS 에서 셰이더 컴파일러를 활성화할 수 있습니다.

iOS/tvOS 게임패드 입력(정식 버전)

iOS, tvOS 및 iPadOS 14에서 이제 게임패드, 키보드, 마우스 및 트랙패드와 같은 다양한 입력 디바이스를 지원합니다. 추가로, Xbox 및 PlayStation 컨트롤러에 대한 게임패드 버튼을 OS 레벨에서 다시 매핑할 수 있으며, OS는 버튼 디스플레이 핸들링을 제공합니다.

4.26 버전에서 이러한 디바이스의 입력 핸들링을 리팩터링하여 입력 디바이스에 대한 새 옵션을 활용하며, 블루프린트의 게임패드 버튼 글리프 가져오기 노드를 사용하여 매핑에 정확한 글리프를 가져올 수 있습니다.

ChunkDownloader 플러그인(베타)

새로운 패치 플러그인 ChunkDownloader 를 언리얼 엔진 4.26에 통합했습니다. 이와 같은 BattleBreakers의 패치에 사용되는 시스템은 수많은 작은 콘텐츠 파일로 정기적인 업데이트를 제공하는 게임에 적합합니다.

ChunkDownloader가 초기화되면 먼저 최신 버전의 매니페스트 파일을 다운로드합니다. .pak 파일 다운로드 이후, 매니페스트를 사용하여 로컬 파일이 최신 상태인지 확인하고, 매니페스트에 최신 상태가 아닌 것이 있는 경우 폐기하고, 디스크에 없는 파일을 다운로드합니다.

ChunkDownloader 사용 시작 방법에 대한 자세한 정보는 ChunkDownloader 퀵스타트 가이드를 참고하세요.

Google GamePAD 지원(베타)

언리얼 엔진에서 Google의 Play Asset Delivery 시스템을 지원합니다. 이 시스템은 Google Play Store의 App Bundle 빌드에 제공됩니다.

App Bundle 빌드(.aab)를 만들면 텍스처, 모델 및 텍스트 파일과 같은 에셋을 .pak 파일로 분할한 다음 App Bundle 내부에 이를 에셋 팩 으로 포함하고 Google Play Store에 업로드할 수 있습니다. Google의 동적 콘텐츠 제공 시스템에서 최적화된 .apk를 사용자의 디바이스에 설치하고, GooglePAD 플러그인에 포함된 라이브러리를 사용하여 제공한 에셋 팩의 다운로드를 요청할 수 있습니다. 이를 애플리케이션의 특정 단계에 제공하도록 구성할 수 있습니다.

프로젝트에서의 Google GamePAD 사용법에 대한 자세한 정보는 Google Play 에셋 딜리버리 레퍼런스 를 읽어보세요.

플러그인은 여전히 베타 모드이며 별도의 .pak 파일을 에셋 팩에 수동으로 설치해야 합니다.

Sun Sky 플러그인 퍼포먼스 개선

태양 및 스카이 액터(Sun Position Calculator 플러그인의 일부)는 리얼타임 캡처 모드와 스카이 라이트 렌더링의 최신 개선 사항을 활용하여 씬의 퍼포먼스를 개선하면서 하늘과 머티리얼 사이의 시각적 불일치를 제거합니다.

이 플러그인 및 사용 관련 추가 정보는 태양 및 스카이 액터 문서를 참고하세요.

나이아가라 업데이트 및 개선 사항

이번 버전에서는 다음과 같이 안정성, 퍼포먼스 및 전체 메모리 사용량이 지속적으로 개선됩니다.

  • 플랫폼 간 퍼포먼스 증가 및 메모리 사용량 감소에 대한 지속적인 노력.

  • 나이아가라 파티클 시스템과 시퀀서의 원활한 통합.

  • 유저 인터페이스 업데이트로 사용자 경험 및 사용 편의성 개선.

  • 새로운 어레이 입력 으로 나이아가라 UI 스택의 어레이 허용. 어레이는 사용자가 생성할 수 있고 인덱스별로 직접 처리하고 스폰 시간, 모든 프레임에서 무작위로 어레이 엘리먼트를 선택하거나 연결된 어트리뷰트를 포함한 어레이 엘리먼트를 통한 보간을 하는 기본 옵션이 내장되어 있습니다.

  • 새로운 파티클 어트리뷰트 리더 모듈 세트가 추가되어 단일 이미터가 다른 이미터의 파티클을 샘플링하고, 스폰, 복사할 어트리뷰트, 샘플링된 이후 작업과 같이 샘플링으로부터 의사 결정을 내릴 수 있습니다. 이 동작은 GPU에서 작동하고 리드/팔로워 관계를 활성화합니다. 나이아가라 이미터의 리지드 및 플렉서블 체인용으로 새롭게 일반화된 컨스트레인트 함수는 파티클 어트리뷰트 리더를 활용합니다.

    image alt text

  • 새로운 기본 나이아가라 프로파일러는 기존 통계 시스템을 통합하여 CPU에 대한 모듈의 에디터 내 라이브 프로파일링과 GPU에 대한 전체 스크립트 비용을 제공합니다. 이미터 및 시스템 스크립트에서도 작동합니다.

    image alt text

최신 정보는 나이아가라 비주얼 이펙트 문서를 참고하세요.

나이아가라 무작위 입력 리팩터

나이아가라 난수 동적 입력의 이름이 랜덤 레인지 X 로 변경되어 블루프린트의 해당 부분과 더욱 면밀하게 매칭됩니다. 난수 동적 입력 사용은 이제 스폰 시간에서 난수를 계산하는 데에서만 기본값이며, 업데이트 스크립트에서 난수 사용이 간소화됩니다. 이미터 또는 시스템 스크립트에서 사용될 때 스폰을 설정하여 루프당 1회 재계산하도록 설정될 수 있습니다. 매 루프마다 스폰 버스트 시간 계산을 예로 들 수 있습니다.

새로운 어레이 입력은 어레이에서 X 선택 을 사용할 수 있는 무작위 어레이 동적 입력에서 제공되며, 무작위로 선택되거나 어레이 인덱스를 사용하는 스택 UI에서 직접 처리할 수 있는 숫자 어레이를 자동으로 생성합니다.

image alt text

Cascade to Niagara Converter (실험단계)

Cascade to Niagara Converter 플러그인을 사용하여 캐스케이드에서 나이아가라로 파티클 시스템을 빠르게 마이그레이션할 수 있습니다.

image alt text

이를 사용하려면 플러그인 창에서 Cascade to Niagara Converter 를 활성화합니다. 활성화 시, 캐스케이드 파티클 시스템 에셋을 우클릭하고 ‘나이아가라 시스템으로 변환'을 선택하면 동일 디렉토리에 동급 나이아가라 시스템이 생성됩니다. 생성된 나이아가라 시스템은 변환 프로세스 로그를 저장하여 캐스케이드 패러다임에서 상향 변환 시 지원합니다.

Cascade to Niagara Converter 툴은 실험단계라서 모든 모듈, 렌더러, 캐스케이드 시스템 프로퍼티, 이벤트, 빔, AnimTrail 렌더러, 벡터 필드, LOD당 스케일링을 지원하지는 않습니다. 이 컨버터 툴은 동등한 행동으로 나이아가라에서 생성한 FX 에셋을 캐스케이드로 변환하는 시작점이자 캐스케이드 시스템 상향 변환을 지원하는 좋은 방법입니다.

캐스케이드 시스템 변환은 Python 스크립팅 레이어를 통해 활성화됩니다. 이 레이어는 커스텀 에셋 변환, 프로그램적으로 새로운 나이아가라 이미터 및 시스템 에셋을 생성하기 위해 캐스케이드 모듈별 스크립트 드롭 인/아웃을 지원합니다.

나이아가라 컴포넌트 렌더러(실험단계)

나이아가라 컴포넌트 렌더러렌더 스택 아래의 나이아가라 이미터에 추가할 수 있는 실험단계 노드입니다. 플랫폼별 확장성 오버라이드 및 에디터 내에서 사용 가능한 다양한 컴포넌트 타입을 제공합니다. 컴포넌트 렌더러를 통해 포인트 라이트 또는 스태틱 메시 컴포넌트 등 원하는 컴포넌트 타입을 빠르게 할당할 수 있고, 파티클 시뮬레이션으로부터의 데이터를 원하는 컴포넌트 프로퍼티로 바인딩할 수 있습니다. 다양한 신규 기능으로 프로젝트 아이디어를 빠르게 적용하고자 할 때 이상적입니다.

나이아가라 하이 퀄리티 파티클 라이트

나이아가라는 이제 포인트 라이트 컴포넌트를 사용하는 컴포넌트 렌더러 노드를 사용하여 파티클 시뮬레이션에서 높은 퀄리티의 섀도우 라이팅을 지원합니다. 이는 고사양 및 시네마틱 프로젝트 타기팅에 이상적입니다.

시뮬레이션에 기본 프로퍼티와 라이팅만을 제공하는 라이트 렌더러 노드와 달리, 포인트 라이트 컴포넌트를 사용하는 컴포넌트 렌더러는 아티스트와 디자이너에게 완벽한 라이트 프로퍼티 및 기능을 제공합니다.

image alt text

나이아가라 파티클 시뮬레이션으로 오디오 재생

간단한 원 샷 '파이어 앤 포겟(fire and forget)' 사운드 이펙트를 사용하여 파티클 인터랙션에서 오디오를 더욱 간편하게 재생하거나 재생 중인 동안 사운드의 피치 제어 등 오디오를 더욱 정교하게 관리할 수도 있습니다. 이를 통해 블루프린트로 파티클 데이터를 익스포트하여 필요한 오디오 이펙트를 트리거하는 워크플로가 개선됩니다.

나이아가라 시스템이 비활성화 또는 파괴된 경우에도 계속 재생되는 원 샷 사운드 이펙트 의 경우 오디오 재생 노드를 모듈 스택에 추가하여 이를 설정하고 구성할 수 있습니다. 이제 모듈이 평가될 때마다 Particles.PlayAudio 어트리뷰트를 점검하고 어트리뷰트가 활성화된 경우 사운드 이펙트를 만듭니다.

전체 오디오 제어 의 경우 활성화된 바인딩이 true인 경우에도 계속 재생되는 오디오에 대한 고급 제어가 활성화되고, 나이아가라 시스템이 파괴 또는 재설정되는 경우 중지됩니다. 영구 오디오 재생 모듈을 모듈 스택에 추가하여 이를 설정하고 구성할 수 있습니다. 실행 중인 사운드의 속성을 변경하려면 영구 오디오 업데이트 모듈을 스택에 추가하고 구성합니다.

시작하려면 에픽게임즈 런처의 학습 탭에서 제공되는 업데이트된 콘텐츠 예제 프로젝트를 확인하세요. 해당 탭에서 두 접근 방식 모두 확인할 수 있습니다.

고급 나이아가라 콘텐츠 예제

콘텐츠 예제 프로젝트에는 이번 버전에서 사용 가능하여 사용법을 익혀볼 여러 가지 신규 나이아가라 파티클 예제가 들어있습니다.

image alt text

에픽게임즈 런처의 학습 탭에서 콘텐츠 예제 프로젝트를 다운로드하면 이러한 최신 기능을 사용해볼 수 있습니다. 나이아가라 를 로드한 후 Niagara_Advanced 레벨을 로드하면 됩니다.

나이아가라 GBuffer 데이터 인터페이스 (실험단계)

이 데이터 인터페이스를 통해 나이아가라 GPU 시뮬레이션 내 GBuffer의 어트리뷰트를 읽을 수 있습니다. 예를 들어, 디퓨즈 컬러, 월드 노멀, 커스텀 뎁스, 씬 뎁스, 씬 컬러 등을 읽을 수 있습니다. Niagara_Advanced 레벨 예제 1.4를 열면 정확한 사용 방법을 볼 수 있습니다.

제거: OpenGL 데스크톱 렌더링

OpenGL은 4.23 버전에서 데스크톱 렌더링 사용 지원이 중단됩니다(SM4/SM5). 4.26 버전에서 데스크톱 옵션으로 제거됩니다. Vulkan은 Linux에서 지원되는 RHI입니다. OpenGL은 데스크톱의 모바일 렌더러에서 계속 실행하여 스타트업 시 다음 플래그를 전달하여 GLES 문제를 디버깅할 수 있습니다. "-game -opengl -featureleveles31". "-opengl"만 전달하면 오류가 표시되고 플랫폼의 기본 RHI를 사용합니다.

시퀀서의 신규 런타임 퍼포먼스 시스템

리얼타임 시네마틱 콘텐츠의 복잡도, 스케일, 충실도가 언리얼 엔진의 표현 퀄리티 한계를 시험할 수 있게 함에 따라, 언리얼 엔진의 시네마틱 툴인 시퀀서의 런타임 기능을 최대한 활용하여 최적화 가능 영역을 확인해 볼 수 있습니다.

4.26 버전에서는 대규모 시네마틱 및 현재 수준의 UI 애니메이션에서 기존에는 불가능했던 수준의 매우 강력한 퍼포먼스를 도출할 수 있는 새로운 기본 런타임 아키텍처를 적용했습니다. 데이터 기반 디자인 원칙으로 런타임 데이터 구조 및 로직을 재설계한 덕분에 대규모 데이터 세트 처리 시의 최적화 가능성을 최대화했고, 서드 파티 확장성이 증대되었으며, 향후 더욱 활발하게 상호작용이 이루어지고 동적인 시퀀스 콘텐츠가 가능하도록 기반을 마련할 수 있었습니다.

이러한 시스템 변경 사항에 대한 자세한 정보 및 4.26과 기존 버전 간 변경 사항, API 손상 등에 대한 정보는 새로운 관점으로 본 기술 블로그의 시퀀서 관련 글: 4.26 버전의 시네마틱 퍼포먼스를 확인하세요.

시퀀서 개선 사항

여러 가지의 새로운 시퀀서 개선 사항이 있습니다.

UI/UX 개선 사항

  • 글로벌 마커

  • 커브 에디터

  • 카메라 셰이크 소스 셰이크 트랙과 에디터 내 프리뷰

  • 특정 트랙의 커스텀 뷰를 만들 수 있는 트리 그룹. 이를 통해 트랙 계층구조를 조절할 필요 없이 특정 트랙을 쉽게 보고 조절할 수 있습니다.

  • 서브시퀀스의 브라우저 계층구조에 전체 이동경로 표시

  • 이제 단축키 "F"를 사용하여 선택한 키프레임의 프레이밍 가능

파이프라인 개선 사항

시퀀서에서 이제 Python의 스크립팅 레이어에 대한 액세스를 지원합니다. 에디터 유틸리티 위젯을 통해 다음을 사용할 수 있습니다.

  • GetSelectedSections, SelectSection

  • GetSelectedTracks, SelectTrack

  • GetSelectedFolders, SelectFolder

  • GetSelectedObject, SelectObject

  • EmptySelection

평가 개선

특정 프레임을 재생하고 어느 시점에서든 정지할 수 있습니다. 이를 통해 라이브 이벤트와 방송의 큐 시스템에 도움이 됩니다.

iPad용 라이브 링크 페이스

라이브 링크 페이스 앱을 업데이트하여 공식적으로 iPhone뿐 아니라 iPad 또한 지원하여 이제 더 큰 화면에서도 페이스 캡처가 가능합니다.

색 보정 영역

색 보정 영역 을 사용하여 컬러 그레이딩을 언리얼 씬의 영역에 적용합니다. 인카메라 VFX 촬영의 경우, 실제 세트와 LED 볼륨에 표시된 언리얼 씬 사이의 라이팅과 섀도를 매칭할 수 있습니다.

타임코드 및 동기화 개선

이번 버전에서 타임코드 데이터 캡처를 위한 여러 기능이 추가되었습니다. 엔진 젠록에 AJA 또는 BlackMagic SDI 캡처 카드를 사용할 때 타임코드 소스보다 더 빠르게 실행할 수 있습니다. 이제 반복하는 대신 사이에 타임코드 값이 자동으로 생성됩니다.

Timed Data Monitor

Timed Data Monitor 플러그인은 소스 타임코드를 기반으로 다중 라이브 링크와 미디어 소스의 평가를 연결합니다. 타임드 데이터 모니터 패널에서 여러 소스를 관리하고 동기화 상태를 볼 수 있습니다.

노드의 커스텀 어트리뷰트

노드의 커스텀 타임코드 어트리뷰트 지원을 추가했습니다. 테이크 레코더시퀀서 의 액터와 애니메이션 에셋 둘 다를 녹화할 때 현재 타임코드를 사용하는 커스텀 어트리뷰트를 생성합니다. 또한, FBX 임포트 및 익스포트에서는 타임코드 데이터를 보존합니다.

애니메이션 시퀀스 에셋에 저장 및 평가되는 커스텀 어트리뷰트는 실험단계 이므로 실제 프로젝트 제작에 사용할 수 없습니다.

AR 통합(베타)

지원되는 AR 플랫폼에서 기능 세트에 대한 일반 기능을 파악하고 이를 언리얼 엔진의 일반 AR 툴세트에 통합했습니다. 플랫폼 애그노스틱 AR 툴세트를 통해 지원되지 않는 모든 플랫폼에서도 동일한 API를 컴파일할 수 있습니다.

ARCore 1.18 지원

최신 ARCore 버전의 뎁스 API를 사용하여 증강 현실 앱에서 실시간 오브젝트가 홀로그램을 가리도록 할 수 있습니다. 뎁스 API는 depth-from-motion 알고리듬을 사용하여 단일 RGB 카메라를 사용하는 뎁스 맵을 생성합니다.

image alt text

ARKit 3.5 지원

씬 지오메트리, 인스턴트 AR, 모캡 및 오클루전 개선을 포함하여 ARKit 3.0에 제공되는 고급 기능을 사용할 수 있습니다.

ARKit 4.0 지원(베타)

LiDAR 스캐너를 사용하는 뎁스 API, 실제 세계에서 관심 지점을 지정하는 지오 앵커와 같은 ARKit 4.0 및 기능 지원을 포함합니다.

신규: 플랫폼 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 타기팅 팩

  • 빌드 팜(Build farm) 컴파일 대상 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

      • NET 4.6.2 타기팅 팩 필요

    • Xcode - Xcode 11.1

  • Android

    • Android Studio 3.5.3

    • Android NDK r21b

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

  • ARCore

    • 1.18

  • ARKit

    • 4.0

  • Linux "SDK"(cross-toolchain)

    • v17 clang-10.0.1 기반(CentOS 7)

  • Oculus

    • 1.44

    • API Level 23

  • OpenXR

    • 1.0

  • Google Stadia

    • 1.53

  • Lumin

    • 0.23

  • Steam

    • 1.47

  • SteamVR

    • 1.5.17

  • Switch

    • SDK 10.4.0 및 NEX 4.6.4(선택사항)

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

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

  • PS4

    • Orbis SDK 8.008.011

    • 시스템 소프트웨어 8.008.041

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

  • XboxOne

    • XDK: July 2018 QFE-13

    • 펌웨어 버전: Recovery October 10.0.19041.4981

    • 지원되는 IDE: Visual Studio 2017

  • macOS

    • 지원 버전

      • macOS Big Sur 11.0.1, 최신 Xcode 12

    • 권장 버전

      • macOS Catalina 10.15.7, 최신 Xcode 12

    • 최소 버전

      • 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

Major Upgrade Notes

AI

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

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

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

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

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

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

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

  • New: 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.

  • New: 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.

Behavior Tree

  • Crash Fix: Fixed a BlackboardComponent issue resulting in a failed check crash when a new BlackboardComponent is being created as part of AAIController::UseBlackboard call and the BB asset being used has synchronized keys.

  • Bug Fix: Fixed an issue with behavior tree combo buttons in the editor resulting in creating multiple instances.

  • Bug Fix: Fixed Behavior Tree highlight for decorators using abort priority.

  • Bug Fix: Fixed stats for instance memory, number of loaded templates and number of created instances.

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

  • Bug Fix: Fixed a bug where a tick function that is ready to run during the current frame could get rescheduled back to a previous frame

  • Bug Fix: Fixed a bug with Behavior Tree Component not Ticking even though ticking was still enabled.

  • Bug Fix: Fixed a bug in UBTNode::CastInstanceNodeMemory that was making it impossible for BT node child-classes to extend its parent class' memory structure.

  • New: Newly created Blackboard assets using the "New Blackboard" button are now automatically assigned to the BehaviorTree.

  • New: Added unregister queue for decorator abort to prevent removing auxiliary nodes while iterating through them.

  • New: Added unit tests when exiting a branch due to a parent decorator failure to validate that all auxiliary nodes below it are unregistered.

  • New: Made automatic creation of "SelfActor" entry in newly created blackboard assets optional. This is controlled via AddBlackboardSelfKey property in the Project Settings.

  • New: Added a failed-case warning to UBehaviorTreeComponent::RestartTree to let the user know that restarting has failed and why.

Debugging Tools

  • Bug Fix: Fixed FGameplayDebuggerCanvasContext::PrintAt functions to properly save and restore previous cursor and default positions

  • Bug Fix: Fixed EQSTestingPawn to update it's query and results upon selection in the Editor.

  • Bug Fix: Fixed SIGHT_LOG_SEGMENT and SIGHT_LOG_LOCATION AIPerception logging macros.

  • Bug Fix: Fixed Label drawing on a numerous amount of vislog shapes.

  • Bug Fix: Fixed CrowdManager from not displaying debug drawing if it's being run in Client-Server PIE.

  • New: Zoom is now applied at cursor position in VisualLogger.

  • New: Added tweakable cvars to control refresh rate "ai.debug.nav.RefreshInterval" and size of the displayed area "ai.debug.nav.DisplaySize" for navmesh through the GameplayDebugger.

  • New: AI testing framework improvements:

    • Changed signatures of test-time FAITestBase methods to give those functions a way to signal that the test went wrong.

    • Added an easier route for implementing a bunch of high-granularity tests using a common fixture. (see the IMPLEMENT_INSTANT_TEST_WITH_FIXTURE macro)

    • Switched a numerous amount of 'latent' AI tests to properly mark them as 'instant'.

    • Changed how assertions are being tested to replicate how UTEST_* macros work. Updated all AI tests to utilize the new approach.

  • New: Improved FGameplayDebuggerCategory_Perception::CollectData so that it can now collect PerceptionComponent data even if the current DebugActor is not AI-controlled.

  • New: Added a console command to the gameplay debugger (gdt.EnableCategoryName) that allows setting an enable/disable state of a category indicated by a partial name.

  • New: Added a flag to VisLog settings that controls how we differentiate between logged objects. The default behavior remains, but by setting the flag ForceUniqueLogNames, we generate IDs more probable to be unique across the engine session.

  • New: Enabled the capability to summon an in-game hud for GameplayDebugger during replay playback.

  • New: Added an option to enable shadows by default for gameplay debugger's text. (DebugCanvasEnableTextShadow in Project Settings).

  • Improvement: Fixed a vislog's performance and architecture issue that resulted in vislog constantly recreating AVisualLoggerRenderingActor in client-server PIE due to vlogging with different worlds.

  • Bug Fix: Fixed computation of the navmodifier area in the NavModifierComponent when using the failsafe extents.

  • Bug Fix: Fixed a scenario where navmesh might get deleted on load when streaming in NavigationData and NavMeshBoundsVolume from different levels depending on the loading order.

  • Bug Fix: Fixed holes in NavMesh caused by single voxel areas near the area boundary.

  • Bug Fix: Fixed computation of the vertices count between mesh and detail mesh when creating the BVTree in DetourNavMesh.

  • Bug Fix: Fixed InstancedStaticMesh components that were not registered to the navigation octree if their associated mesh was assigned post registration.

  • Bug Fix: Added error reporting and fixed calls to GetNavigationParent in UNavRelevantComponent that were being made before the cache initialization.

  • Bug Fix: Added a safe-guard to make sure FRecastBuildConfig.tileSize doesn't end up being 0.

  • Bug Fix: Fixed mesh loading dependency for static mesh using a ComplexCollisionMesh and ensured physical meshes are created before creating the nav collision. This fixes missing collisions when using ComplexCollisionMesh to create nav collisions for meshes.

  • Bug Fix: Fixed missing navmesh tiles when cooking maps from the editor 'Launch'. This includes fixing multiple AI tests failing when locally running in a cooked build, and enemy bots not moving when launching Sanctuary in the ShooterGame example project.

  • Bug Fix: Changed UNavigationSystemModuleConfig::UpdateWithNavSysCDO to no longer copy the value of UNavigationSystemV1.bStaticRuntimeNavigation since it resulted in the the value of static bStaticRuntimeNavigation persist between maps.

  • Bug Fix: Fixed possible NaN when calling GetPolysInBox.

  • Bug Fix: Fixed a serious issue with FRecastQueryFilter::SetIsVirtual that resulted in losing virtual function overrides if called on a derived filter class.

  • Bug Fix: Fixed navigation octree not being updated when custom navlinks state change. This fixes dynamic navmesh updates causing navlinks to reset to their default state.

  • Bug Fix: Modified how we react to RecastNavMesh's generation-category value changes. The main goal is higher reliability while changing properties in the editor, meaning that the property being changed is the driving factor of other properties' changes which keeps the value from being changed.

  • Bug Fix: Fixed a navmesh rasterization offset by one when projecting spans to bottom. This is related to the usage of the bFillCollisionUnderneathForNavmesh property.

  • New: Changed the CrowdFollowingComponent dependencies to use IRVOAvoidanceInterface from the movement component instead of the UCharacterMovementComponent.

  • New: Added CSV stats for navigation generation tasks.

  • New: Added error reporting for large areas dirtying the navigation data. Error reporting is disabled as long as navigation lock is effective.

  • New: Added advanced property "DirtyAreaWarningSizeThreshold" in NavigationSystem to report warning logs when tiles larger than the specified threshold are pushed to the dirty queue.

  • Optimization: Optimized RecastNavMeshGenerator MarkDirtyTiles by reducing search size in dirty tiles set and the number of copies between containers. The order of the pending elements is now preserved if tile sorting isn't used.

  • New: Added compile switches for segment links (WITH_NAVMESH_SEGMENT_LINKS) and cluster (WITH_NAVMESH_CLUSTER_LINKS) to allow projects that don't require them to save memory.

  • New: Added support for asynchronous pathfind queries with dynamic generation.

  • New: Synchronization between the async pathfind query tasks and the game thread. The sync point is implemented in OnWorldPostActorTick. This prevents pathfind requests from running at the same time as Navmesh generation tasks or beyond the engine frame boundary.

  • New: Replaced task to broadcast async pathfinding results by a queue that is flushed by the NavigationSystem update. This prevents tasks from being started during loading or other undesired locations.

  • New: Replaced task to register new active path instance by a lock to ensure all paths are registered for potential invalidation before adding a generated tile on the main thread.

  • New: Added a new project setting bUseExtraTopCellWhenMarkingAreas to control the addition of extra cells on top of shapes when marking areas. Added a similar option on FAreaNavModifier to allow exceptions. This is useful for objects that affect navigation on the floors above them.

  • New: Made UNavCollision.AreaClass read only in the StaticMesh editor if bIsDynamicObstacle==false.

  • New: Added 'bMaskFillCollisionUnderneathForNavmesh' option on NavModifierVolume to go along with 'bFillCollisionUnderneathForNavmesh'. This allows navvolumes to mark a 2D area to be ignored by the fill under feature.

  • New: Added additional logs to track geometry and their bounds when added to navigation.

  • New: Ensure to mark map packages as dirty when navmesh tiles are built, except for when automatic navigation build is occurring on load.

  • New: RecastNavMeshDataChunk can now be used to move and rotate navmesh tiles on the tile grid.

  • Added utilities to allow movement and rotation of navmesh tiles on the tile grid (dtTransformTileData and dtComputeTileOffsetFromRotation).

  • New: Added functionality to properly account for time slicing across multiple generators. The time slicing is now calculated in the navigation system.

  • New: Added some more stats to help trace down long navmesh tile generator times.

  • Improvement: Improved logging of locks and rebuild all for the navmesh.

  • Deprecated: IsNavigationBuildInProgress(bool) and IsBuildInProgress(bool). These functions behaved inconsistently between the different navmesh build types and were causing issues.

Animation

  • Crash Fix: Fixed a crash when re-opening an asset editor after a new preview mesh is applied.

  • Crash Fix: Fixed a crash when duplicating older Control Rigs.

  • Crash Fix: Fixed a crash when opening a level with a saved skeletal mesh component that has a post-process anim blueprint.

  • Crash Fix: Fixed a crash when compiling an actor implementing an interface referenced by its mesh component's anim notifies.

  • Crash Fix: Fixed a crash when trimming a rich curve with invalid key handles.

  • Crash Fix: Renamed FComponentData in AnimationBudgetAllocator.h to FAnimBudgetAllocatorComponentData. This fixed a crash that's suspected to be caused by the compiler generating code with the size of another struct with the same name.

  • Crash Fix: Fixed various crashes when playing back Geometry Cache.

  • Crash Fix: Fixed crash when exiting while async animation compression is still in progress.

  • Crash Fix: Fixed crash in TallyErrorsFromPerturbation when animation contains a track that doesn't exist on the target skeleton.

  • Crash Fix: Fixed editor crash when exporting anim sequences with a changing UIDToArrayIndexLUT.

  • Bug Fix: Fixed FStringView overload of IAnalyzer::FEventData::GetString to now return the correct buffer size.

  • Bug Fix: Fixed notifies from not being fired for linked instances when running "root motion from everything".

  • Bug Fix: Pin watches now work for property access bindings.

  • Bug Fix: Fixed some thread safety issues with parallel physics blending.

  • Bug Fix: Fixed linear interpolation in the Pose Driver.

  • Bug Fix: Restricted fast-path MakeStruct support to split pins in order to ensure nodes update correctly.

  • Bug Fix: Fixed a bug with AnimNode_SaveCachedPose not properly propagating Initialize to children.

  • Bug Fix: Fixed linked anim graphs that were not properly tearing down their anim instances in TeardownInstance.

  • Bug Fix: Restricted Animation Blueprint compiler subsystem APIs.

  • Bug Fix: Re-enabled ticking for controlled components when the animation budget allocator is disabled.

  • Bug Fix: Implemented a Guard against tracing object properties when the channel is disabled.

  • Bug Fix: Fixed root motion playing faster when the animation budget allocator is enabled.

  • Bug Fix: Animation Layer defaults for a single group can now come from different Animation Blueprints.

  • Bug Fix: LinkAnimClassLayers can now be called from within UAnimInstance::UpdateAnimation.

  • New: Moved away from templated getters for value arrays, replaced with regular function overloading.

  • Bug Fix: Fixed baked additive data for Custom Attributes. Previously the base sequence data was not taken into account. + Changing additive automation test to use an animation sequence as base pose rather than ref-pose

  • Bug Fix: Ensure geometry caches adhere to lighting channels.

  • Bug Fix: Changed how multiple additive states are handled within the Animation Sharing system to ensure state-specific animations will be ticked.

  • Bug Fix: Fixed crash reimporting a skeletal mesh in skeletal mesh editor with LOD or weight filter applied.

  • Bug Fix: Fixed a crash when inspecting a BlendProfile property within the Blueprint Diff tool.

  • Bug Fix: Fixed SkeletalMeshes with AnimSharing from being unable to turn off ticking.

  • Bug Fix: Fixed Control Rig from folding into itself when loops are present.

  • Optimization: Heavily optimized TraceSourceFiltering plugin runtime performance.

  • Bug Fix: Added new EulerTransform Control Type to allow rotations above 180 degrees.

  • Bug Fix: Fixed collapsing hierarchy when using root motion on additive animations.

  • Bug Fix: Fixed virtual bones being reordered during removal.

  • Bug Fix: Changed how Anim Node Live Link determines whether or not an animation and basic roles are supported.

  • Bug Fix: Async anim compression now cancels existing attempts if we are requesting a new compression on the same animation.

  • Bug Fix: Fixed baked transform curves crash when the track doesn't currently exist.

  • Bug Fix: Fixed deterministic cook issue with the pre smart name skeletons.

  • Bug Fix: Fixed insert frame leaving raw/source animation data in invalid state.

  • Bug Fix: Get marquee selection is now working with Control Rig controls.

  • Bug Fix: Stopped UAnimSequence CDO from trying to load a compression scheme.

  • Bug Fix: Fixed looping in marker sync blend spaces.

  • Bug Fix: Removed filtering on async anim compression toast notification.

  • Bug Fix: Fixed blend space marker sync popping when markers land on animation boundaries.

  • Bug Fix: Fixed Apply compression in the editor from blocking the main thread.

  • Bug Fix: Added new functionality when selecting multiple Controls with different gizmo's supported (pos,rotate,scale), Select will now use the first gizmo, otherwise a flash will indicate as you cycle between them.

  • Bug Fix: Added option to edit mode in Control Rig. Edit mode will now translate multiple objects in their own local space instead of the first object's local space.

  • Bug Fix: Removed USkeleton reference from anim compression to address thread safety.

  • New: Sync groups can now optionally sync with other linked instances.

  • New: Added CustomAttribute feature to support float/int/string curve data within AnimationSequences on a per-bone basis.

  • New: Added customization details for (Baked)Custom attribute structures - Showing bone name rather than the index - Grouping the attributes according to their types - This will only show the number of keys for individual attributes. (no data)

  • New: Added support for URO/interpolation of custom attributes #misc fix attribute look-up crash with nullptr skeletal mesh

  • New: Added hide baked custom attributes property, which was causing performance issues with Slate.

  • New: Added AnimSequence.h Include into CustomAttributeCustomization.cpp

  • New: Moved deprecated functionality to AnimSequenceBase and deleted all overrides from child classes.

  • New: Reworked the TraceSourceFiltering tab.

  • Pulled out source filtering widgets into a separate CompoundWidget.

  • Wrapped different filtering widgets within SExpandableArea rather than into splitters.

  • Fixed incorrect ComboButton style name.

  • New: Reworked (SourceFiltering) World filtering tab.

  • New: Added toggle button style it, World filtering will now use toggle buttons rather than menu items.

  • New: Introduced high-level actor class filtering concept to TraceSourceFiltering plugin.

  • New: Added Actor class specific filtering.

  • New: Added Widget to SourceFiltering tab for setup.

  • New: Added Actor class filtering data to SourceFilterCollection.

  • New: Added filter picking functionality to session service.

  • New: Added ActorCollector, similar implementation to TActorIterator, this functionality filters the AActors at UObject hash table level, drastically increasing performance for a large number of actors vs IsA() within user filters.

  • New: Added ForEachObjectOfClasses.

  • New: Added the ability to create a data source filter class from within the Source Filtering tab.

  • New: Added Blueprint and Python exposed functionality to retrieve curve names from an Animation Sequence.

  • New: GetBoneIndex, GetRigidBone and GetBoneWeight on FSkinWeightVertexBuffer are now exported.

  • New: Converted 'a.SkinWeightProfile.LoadByDefaultMode=1' from Scalability to Default cvar. Users should set these in the device profile rather than scalability from now on.

  • New: FullBodyIK plugin - this includes a FullBodyIK Solver Node that you can use in the ControlRig.

    • Takes a list of Effectors as inputs.

    • Takes a list of Constraints, which you can apply to any joint within the chain.

    • Enables users to tweak Joint's Limit, Stiffness, and PoleVectors.

  • New: Added the ability to scale gizmo's in the Animate Panel.

  • New: Eigen library has been upgraded to 3.3.7

  • New: Added an "AddToClient" method in ULiveLinkPreset that will not destructively add subjects and sources to Live Link.

  • Improvement: Optimized TallyErrors to significantly reduce anim compression overhead and worker thread blocking.

Animation Assets

  • Crash Fix: Fixed a crash when deleting a pose if the pose was prior to a base pose.

  • New: Added Support to ControlRig AnimNode and Pose Driver to support LOD Threshold for optimization.

  • New: Added Weighted Tangents for Rich Curve in Animation Editor.

Animation Blueprints

  • Crash Fix: Fixed a crash when selecting nodes in sub-graphs of deleted nodes.

  • Crash Fix: Fixed a crash when compiling an anim BP containing an animation node with a TMap exposed as a pin.

  • Bug Fix: Prevented pasted linked anim graph nodes from referencing Blueprints with other skeletons.

  • Bug Fix: Fixed ensure when resetting a preview mesh while a specific animation is set to be previewed for an animation blueprint.

  • Bug Fix: Fixed Linked Anim Layer nodes without input poses failing to trigger inertial blends.

  • Bug Fix: Fixed being able to place input poses in state machine state graphs.

  • Bug Fix: Fixed inertial blending not being triggered when switching a Linked Anim Layer to a child Animation Blueprint.

  • Bug Fix: Added the option to force an update on the K2Event Node, to guarantee that the node is up to date in case any function declarations have moved from parent to child.

  • Bug Fix: Sequence players can now use bindings for pin-exposed sequences.

  • Bug Fix: An orphan pin will no longer be created when hiding a pin.

  • Bug Fix: Removed experimental flag from linked anim layers.

  • Bug Fix: Fixed an issue with sync group collisions when syncing with 'component' scope.

  • Bug Fix: Fixed an issue with ConvertComponentPosesToLocalPoses.

  • New: Enabled auto-sizing functionality for bone reference widget to allow it to grow larger to show the full bone name.

  • New: Added support for CopyPose AnimNode to allow ComponentSpace Pose. This can be useful when you want to copy a part of the hierarchy as an optimization.

  • New: Added Support for CopyPose AnimNode to select which joints to copy from 'select a root bone to copy from'.

Animation Tools

  • Crash Fix: Fixed a crash when tracing an animation Blueprint with linked anim graphs/layers.

  • Crash Fix: Fixed a crash when closing the animation document tab with a curve editor tab open.

  • Crash Fix: Fixed editor crash in PersonaMeshDetails.cpp.

  • Crash Fix: Fixed a crash when removing a curve that hasn't been edited.

  • Crash Fix: Fixed a crash when a native control rig is selected when creating a new ControlRig.

  • Bug Fix: Fixed Animation Insights tab from always popping up in the editor when the plugin is enabled.

  • Bug Fix: Fixed frames provider to use Algo::LowerBound, it now supports int64.

  • Bug Fix: Added FStringView overload to string store.

  • Bug Fix: Fixed to prevent animation asset preview tooltips from continuing to advance after closing.

  • Bug Fix: Added a feature to loop animation insights playback inside the currently selected range.

  • Bug Fix: Fixed notify tracks not resizing when external modifications are made to notifies.

  • Bug Fix: Added copy/paste keyboard shortcuts for anim notifies.

  • Bug Fix: Converting a curve to metadata now zooms-to-fit for a consistent appearance.

  • Bug Fix: Added safety checks to prevent OOM when panning anim timeline after an anim notify is placed.

  • Bug Fix: Fixed notify labels jittering when label color changes.

  • Bug Fix: Fixed keyboard shortcuts registered in the Insights plugins from not functioning in standalone app.

  • Bug Fix: Fixed and improved snapping in animation editor timelines.

  • Bug Fix: Fixed Animation Insights traced data not appearing until PIE is stopped when enabling tracing while PIE is in progress.

  • Bug Fix: Disabling snapping to grid when editing 1D Blend Spaces now functions as expected.

  • Bug Fix: Changed Animation Graph Overrides layout to make it more readable with long property names.

  • Bug Fix: Added Ensure to maintain global and initial transforms in Control Rig, when reparenting items in hierarchy view.

  • Bug Fix: Moved Control Rig BoneIndex to CachedRigElement.

  • Bug Fix: Added Support for debug watches on variable nodes. You can now right click pins on variable nodes and debug watch them in the editor.

  • Bug Fix: Control Rig now uses defaults when exporting RigVM memory contents. Previously the VM was storing differences to a zero mem version of each register, with this fix we now use the default for structs.

  • Bug Fix: Control Rig will now draw bones in the editor when there is no skeletal mesh.

  • Bug Fix: Fixed marking assets as dirty upon opening Control Rig.

  • Bug Fix: Fixed Bool Math Constants from not working correctly in Control Rig.

  • Bug Fix: Fixed connectability issues by allowing mutable nodes to connect to previous nodes in the execution stack.

  • Bug Fix: Fixed a bug with resetting ControlRig Mapping info.

  • New: Added basic RBF interpolation nodes to Control Rig.

  • New: Added ability to trace an Object's property to the trace stream.

  • New: Added functionality to preserve camera speeds in animation editor viewport similar to how we preserve FOV.

  • New: Moved virtual destructor to ControlRigDrawContainer from ControlRigDrawInterface.

  • New: Implemented Base functionality around interaction rigs in Control Rig.

  • New: Introduced new "offset transform" for controls which allows spatial offsets without the use of spaces.

  • New: Implemented Looping in Control Rig. Users now have the ability to build graphs which can loop, solve multiple parts of the pose sequentially or perform a computation multiple times.

  • New: Implemented RigElementCollection for Control Rig. The collection data type allows the ability to group a series of items in the hierarchy using name based search, hierarchy traversal, and group operations such as union, difference etc.

  • New: Added Support for ControlRigComponent in Sequencer.

  • New: Added Support for Curves in the Control Rig Component.

  • New: Added Mirror functionality in Control Rig for hierarchies. Includes support for bones, controls, and spaces. This functionality can be utilized by right clicking elements in the hierarchy and choosing "Mirror" to create a matching, mirrored hierarchy.

  • New: Added Support for enums in Control Rig. Controls can now represent enums. To utilize this feature, turn the Control to be of type int32 and enable the enum setting in the details panel.

  • New: Added RigVM Support for external variables in Control Rig. External variables represent unowned memory and allow the VM to read / write to those.

  • New: Added Control Rig Inversion: Added Backwards event to enable users to define the execution to invert the rig, solving from an existing pose to animation inputs.

  • New: Added Control Rig: Constant folding - allows the VM to fold constant branches into a resulting set of values to optimize runtime performance.

  • New: Added Control Rig Component - a new component to host a Control Rig on an actor and connect other components. For example, this allows the ability to drive static meshes.

  • New: Added pin redirector functionality to Control Rig. Pins / struct members now properly support redirectors. If you need to change a data structure after serializing assets, you can rely on the default pin director functionality in the project ini files. The Control Rig graph will pick up the redirection and adjust pin default values accordingly for backwards compatibility.

  • New: Enabled blueprint-side variables and implemented an upgrade path. Control Rig now uses normal Blueprint Variables (through the MyBlueprint) widget. Parameters are auto converted to public variables in UE 4.26.

  • New: Added support for if and select branching in Control RigVM. New If and Select nodes perform branching based on a value selection. To use this functionality drag a pin out and look for If and Select in the contextual menu.

  • New: Added Support for nested dynamic arrays in Control RigVM.

  • New: Added Aim Math node in Control Rig.

  • New: Introduced bracketing scope system to bracket init, update, setup, interaction and sync in Control Rig.

  • New: SetRelativeTransform node now replaces SetRelativeBoneTransform.

Deprecation Note: Users won't be able to create the old nodes, but content won't break. Nodes will be flagged as "deprecated" with a red node title.

  • New: Updated descriptions, keywords, and tooltips in Control Rig nodes.

  • New: Lift error reporting nodes to be interactive - nodes will now show changes as the graph is running in Control Rig.

  • New: Added new generalized GetTransform node to replace GetBoneTransform and 5 other nodes in Control Rig. The GetTransform takes in an item, and can now read any transform within the hierarchy.

  • New: Added Control Rig operation nodes : Name endswith, startswith, contains. String operation / Name operation nodes.

  • New: Control Rig will now Save default expansion state for nodes. Users can provide a default expansion state for a node and save it by right clicking the node and choosing "Save Default Expansion State".

  • New: Enabled Control Rig Component to drive the root component of an Actor.

  • New: Added a new Control Rig Ability to create collections by drag & dropping.

  • New: Added a Control Rig Collection Difference node.

  • New: Moved mode on FK Rig to UProperty instead of Control RIg.

  • New: SetTransform node in Control Rig will now replace SetBoneTransform, SetSpaceTransform, SetControlTransform, SetInitialTransform, SetInitialSpaceTransform. Users won't be able to create the old nodes, but content won't break. Nodes will be flagged as "deprecated" with a red node title.

  • New: Added support for sending events from a Control Rig to the Engine/Editor.

  • New: Added an "Additive" option to the contextual menu in FK Control Rig.

  • New: Added Branching support for execution model in Control Rig.

  • New: Added new Control Rig node: Propagate to Children Unit. This node enables the ability to propagate a transform change within the hierarchy to the children of a provided item. This is useful if you want to delay the propagation to a later time and manually call it.

  • New: Initialize Verlet integrator during the first run, not during init. To avoid an issue concerning determinism, we now initialize all verlet simulated nodes during the first run of the node instead of initialization time.

  • New: The Rig Hierarchy now uses Int32 for comparison of hierarchy topology versions. (adding, removing, renaming / repairing items).

  • New: Introduced notion of SliceContext per pin in Control Rig.

  • New: Added weight to fit on a curve node in the Control Rig.

  • New: Added new node to Control Rig 'Quaternion Scale Unit'. A node which enables magnitude scalability of a quaternion.

  • New: Added 'Twist Bones Unit Node' to Control Rig.

  • New: Added PreSetup / PostSetup events and support units to Control Rig Component.

  • New: Added new functionality to Control Rig to support entry names + init execution.

  • New: Enabled Control Rig access to mapped elements in Blueprint.

  • New: Added Blueprint functionality to Control Rig component. You can now drive the Control Rig Component's functionality through Blueprint.

  • New: Added Hierarchy accessor units such as GetParent, GetParents, GetChildren and GetSiblings to Control Rig.

  • New: Introduction of slice context and support for a loop node in Control Rig.

  • New: Added Support for additive mode to FK Control Rig.

  • New: Introduced slices data structure to ExecuteContext and Dynamic Memory support in Control Rig.

  • New: Disabled Control Rig auto-compile during setup mode.

  • New: Added new hotkey Ctrl+Shift+G to reset all Control Rig transforms.

  • New: Provided access to event names and information about controls being accessible. The Control Rig API including the RigVM API has been extended to provide access to the supported event names as well as the accessibility of Controls.

  • New: Pin Watches now support slices (multiple values per loop) in Control Rig.

  • New: Added new node 'Item Exists' to Control Rig. Item Exists node will return false if a specified item cannot be found.

  • New: Enabled Shift P hotkey to Parent/Unparent User defined bones. Within the Rig Hierarchy Widget or the Control Rig Editor viewport press 'Shift+P' on your keyboard for parenting or unparenting the selection to the root of the tree.

  • New: Added draw space functionality to Control Rig. The Control Rig Editor's viewport now provides the option to draw all spaces by default.

  • New: Introduced support for the constant / varying state of pins and nodes in Control Rig to prepare for constant folding.

  • New: Events coming from Control Rig will now provide a total time.

  • New: Added Ensure to set map range and other settings on alpha interp during Execute in Control Rig.

  • New: Enabled the option to retain control values within the ControlRigEditor during compile. Within the editor preferences you can now choose if you want to retain the pose of Controls during a compile or not.

  • New: Added a new menu entry for adding an FK Rig in Control Rig and removed additive and automaticbonecurve rig from the asset filter when adding a track.

  • New: Added a new setting to Control Rig that enables the automatic reset of all transforms on compile.

  • New: Control Rig / RigVM: Change MaxArraySize tag to ArraySize Since we no longer support resizing of arrays we are dropping the Max prefix.

  • New: Replaced Control Rig Name unit.

  • New: Added Copy & Paste functionality to mouse location in Control Rig.

  • New: Added Support to Control Rig for creating comments using the 'C' hotkey.

  • New: Moved all DebugSettings on Control Rig node to "details only".

  • New: Added DetailsOnly functionality for RigUnits. Pins can now provide the "DetailsOnly" meta tag to make them show in the details panel.

  • New: Implemented access to all Control Rig control values in python. This includes minimum and maximum.

  • New: Upgraded Control Rig's AimBone, BoneHarmonics, ChainHarmonics and DistributeRotation to use FRigElementKey.

  • New: Added Mirror functionality to the Control Rig graph. To use, right click on a selection of nodes to allow string replacement and mirroring of transform pins.

  • New: Control Rig Sequencer will now use a display name test to track a name, rather than the class name.

  • New: Implemented new SetControlVisibility Node in Control Rig. You can utilize Control Visibility within the graph to hide sets of controls.

  • New: Implemented RigVM access to currently active instructions.

  • New: Implemented new nodes to Control Rig 'Collection enumerate', 'Index accessor' and 'get length'. These nodes enable the user to get the index of an enumeration as well as the overall count / length.

  • New: Added new ControlRig Component to get two auxiliary blueprint functions which simplify mapping elements.

  • New: Added new Plane intersection node to Control Rig.

  • New: Implemented int32 nodes and all related int32 math nodes to Control Rig.

  • New: Control Rig will now Set Initial Transforms on Controls in order to affect Offset.

  • New: Renamed Control Rig helper nodes for item and collection.

  • New: Implemented Control Rig API for introspection on available events / entries.

  • New: Added support scale for BasicIK in Control Rig.

  • New: Added Control Rig support for auto compile during setup mode.

  • New: Added weight to Control Rig DistributeRotation node.

  • New: Replaced GetBoneRelativeTransform with GetRelativeTransform node in Control Rig. Users won't be able to create the old nodes, but content won't break. Nodes will be flagged as "deprecated" with a red node title.

  • New: Replaced AddBoneTransform with OffSetTransform node. Users won't be able to create the old nodes, but content won't break. Nodes will be flagged as "deprecated" with a red node title.

  • New: Added Control Rig functionality to apply effector transform even if FABRIK or CCDIK doesn't change bone locations. In certain scenarios FABRIK and CCDIK nodes would not perform changes to the effector in the past.

  • Improvement: Improved keyboard workflow in Control Rig with pin name list widgets.

  • Improvement: Improved gizmo material and integrated with eye adaption in Control Rig.

  • Improvement: Added Branch folding for branch, if and select nodes. Optimized Compiler to remove unnecessary dead branches when using If and Select nodes.

  • Deprecated: Removed IControlRigManipulatable and IControlRigManipulationLayer in Control Rig.

  • Deprecated: Deprecated Blend(Transform) Node in Control Rig.

  • Deprecated: Removed ControlRigPickerWidget. The Control Rig Picker is no longer supported and has been removed.

  • Deprecated: Deprecated all other get transform nodes and updated "GetUnitLabel" in Control Rig. Users won't be able to the old nodes anymore, but content won't break. Old nodes will show up as "deprecated" with a red node title.

  • Deprecated: Removed the manipulation module and moved the GizmoActor to the Control Rig module.

  • Deprecated: Disabled Point Simulation Node in Control Rig. Please note that this node is using a deprecated point solver which is going to be replaced by another physics solver. Please do not rely on this node.

  • Deprecated: If you were using the "MaxArraySize" metadata tag in a custom Control Rig node, replace it with "ArraySize" for 4.26+.

Import/Export

  • Crash Fix: Fixed various crashes when importing Alembic as a Geometry Cache or a Skeletal Mesh.

  • Bug Fix: Fixed materials not applying correctly to a flattened GeometryCache.

  • Bug Fix: Fixed a bug when importing animations that would try to report invalid progression values on an animation with multiple channels.

  • New: Added a new Alembic import option to skip computing tangents that can improve playback performance of a streaming Geometry Cache.

  • New: Added an experimental editor plugin to stream a GeometryCache from an Alembic file without having to import it as an asset. Enable the "Geometry Cache from Alembic File(Experimental)" plugin to start using it.

  • New: Improved playback performance of animated meshes inside a USD stage.

Skeletal Mesh

  • Bug Fix: Fixed missing macros in FSkinWeightVertexBuffer and FSkinWeightDataVertexBuffer.

  • Bug Fix: Explicitly specify which UAV buffers participate in overlapped compute shaders.

  • Bug Fix: Exposed Skin Weights public API to external modules.

  • Bug Fix: Fixed PoseableMeshComponent to now tick when the transform is updated.

  • New: Added warning on mobile if skelMesh LOD number of influences per vertex is greater than twelve.

  • New: Exposed pre-skinned vertex buffer to local vertex factory so that pre skin vertex position is available to material nodes that use it when derived vertex factories generate position buffers that are post skinned.

  • New: Exposed pre-skinned vertex buffer to local vertex factory so that pre skin vertex position is available to material nodes that use it when derived vertex factories generate position buffers that are post skinned.

  • New: Added LODSyncComponent to synchronize LOD across different mesh components, for example, SkeletalMeshComponent or GroomComponent. This can be used for synchronizing LOD to ensure the intended LODs are used together between different parts.

  • New: When the recomputing tangent option is on in GPUSkinCache, allow the user to select which Vertex Color channel to use to blend between the recomputed tangents and the skinned tangents. The color green is used as the default channel color.

  • New: Allowed classes that have FBoneReference properties to specify what skeleton to use by inheriting from IBoneReferenceSkeletonProvider.

Audio

  • Crash Fix: Fixed a crash on an audio device hot swap when channels have changed.

  • Crash Fix: Fixed a garbage collection crash with an async task owned by FMixerSourceBuffer.

  • Crash Fix: Fixed a crash due to a race condition with the Audio Spectrum Analyzer.

  • Crash Fix: Fixed a crash on load with the Oculus audio plugin.

  • Crash Fix: Fixed a crash that occurred during Submix Graph editing when trying to connect certain pins to or from a parent submix.

  • Bug Fix: Cooked Quality Node Culling now works properly; when enabled, projects will only cook the branches of the quality node that are enabled for that platform, discarding all other branches. This saves memory and speeds up serialization.

  • Bug Fix: Fixed a SoundConcurrency issue where StopLowestPriority and StopLowestPriorityThenNewest had swapped logic.

  • Bug Fix: Fixed a deadlock caused by listeners attempting to access an audio device instance during device destruction when it should no longer be accessed.

  • Bug Fix: SoundCueTemplate code now utilizes the new ClassTemplateEditorSubsystem.

  • Bug Fix: The proper SoundClass per SoundWave now shows when using stat waves/au.debug.soundwaves 1.

  • Bug Fix: Low-pass filters now behave correctly when set through a Sound Class mix.

  • Bug Fix: Fixed a submix issue with muting audio output in unrelated submixes.

  • Bug Fix: Fixed issue with ambisonic decoding where rotation had to occur in both elevation and azimuth to update the decoding instead of either/or.

  • Bug Fix: Fixed a bug where SoundCues wouldn't update the Stream Caching loading behavior of their USoundWaves.

  • Bug Fix: Fixed the mic noise gate threshold for OSS VoIP.

  • Bug Fix: Fixed a bug where sounds with a short fade-in were not playing.

  • Bug Fix: Impulse responses (IRs) have been removed from the list of assets that can be created from the Content Browser. This fixed an issue when using raw imported .wav data vs. compressed data for IR Assets.

  • Bug Fix: Fixed the default device selection in OSS VoIP.

  • Bug Fix: Fixed an issue with a flipped X-axis in ambisonics decoding.

  • Bug Fix: Fixed a bug where sounds in a concurrency system were becoming orphaned and stale if set to PlayWhenSilent.

  • Bug Fix: Added a normalized version of FSpectrumAnalyzer::GetMagnitudeForFrequency() called GetNormalizedMagnitudeForFrequency().

  • Bug Fix: Fixed submixes not re-registering in editor when modifying an effect array or reparenting submixes. Also fixed a crash that occurred when attempting to call InitInternal() from a render thread.

  • Bug Fix: Fixed a memory stomp in the editor when importing audio files.

  • Bug Fix: Fixed a bug with import math for impulse responses.

  • Bug Fix: Fixed an error on the gains of the upmixing function Mix2ChannelsTo6ChannelsFast.

  • Bug Fix: Fixed an issue with AudioComponent::StopDelayed() not stopping the audio component under certain conditions.

  • Bug Fix: A fix was made for the submix envelope follower delegate not outputting the correct envelope for the submix.

  • Bug Fix: Fixed a race condition on rebuilding the submix graph.

  • Bug Fix: Fixed an issue with updating params on submixes.

  • Bug Fix: Fixed a bug in the source effect chain initialization that caused source effects to not play in certain cases.

  • Bug Fix: Fixed the ability for audio components to control source bus sends in Blueprint through SetSourceBussendPreeffect and SetSourceBusSendPostEffect.

  • Bug Fix: Swapped function descriptions to match audio volumes for interior and exterior settings.

  • Bug Fix: Fixed an issue with sound class-based distance attenuation scaling.

  • Bug Fix: Fixed the audio component start time offset for playback percentage.

  • Bug Fix: Fixed short XMA stream truncation.

  • Bug Fix: Fixed a bug with passing an incorrect target platform name for cook overrides.

  • Bug Fix: Fixed an issue with soundfield submixes connecting to incompatible soundfield submixes in the submix graph. They are now shown as disconnected and incompatible.

  • Bug Fix: Fixed an issue with submix assets not opening correctly when double-clicked in the Submix Editor.

  • Crash: Fixed a crash caused by the immediate teardown of an audio device if the device fails to initialize.

  • Bug Fix: Fixed the audio distortion when resuming after a constrain/suspend app life cycle event on Xbox.

  • Bug Fix: Fixed a buzz issue with resonance when outputting to output > 2 channels (such as for surround) and graph has no binaural sources to process.

  • Bug Fix: Fixed a crash when calling GetMMDeviceInfo.

  • Bug Fix: Fixed an assert in FinishRecordingOutput when given an invalid path argument.

  • Bug Fix: Fixed a COM exception in the audio mixer.

  • Bug Fix: Fixed an issue with the non-realtime renderer outputting silence.

  • Bug Fix: Fixed a race condition in the audio renderer by refactoring the audio render buffers to use a thread-safe circular buffer.

  • Bug Fix: Fixed an OSS VoIP failure that occurred after level travel.

  • Bug Fix: Fixed an APU crash caused by a race condition on shutdown on Xbox.

  • Bug Fix: Fixed the support for audio Niagara Data Interfaces on the CPU.

  • Bug Fix: Fixed an issue of sounds failing to cull based on priority.

  • Bug Fix: Fixed an issue where sound cue node culling was not working in non-editor builds.

  • Bug Fix: Fixed an issue with rotating ambisonics sound sources.

  • Bug Fix: Fixed to ensure on servers when USoundWave::RetainCompressedAudio is called. Retained audio is not relevant for servers.

  • Bug Fix: Fixed a regression in the way SoloSound console command works.

  • Bug Fix: Fixed an issue for when sample rate quality changes asset do not recook.

  • Bug Fix: Fixed an issue with source buses and submixes not getting properly imported or discovered when the editor is run with -nosound.

  • Bug Fix: Fixed a bug with quality 100 seekable streams (LPCM) hitting the EOF correctly.

  • Bug Fix: Fixed a bug with baked envelope data returning data for non-looping sounds.

  • Bug Fix: Fixed a hang on PIE exit.

  • Bug Fix: Fixed a shutdown for single-threaded applications.

  • Bug Fix: Fixed a rare hang when the application exits on Xbox.

  • Bug Fix: Fixed a dynamics processor key gain issue.

  • Bug Fix: Fixed an issue where the reverb dry level was not working correctly.

  • Bug Fix: Fixed a bug with the IR asset being in the correct category in the sound submenu.

  • Bug Fix: Fixed a race condition with audio device swapping.

  • Bug Fix: Fixed a Solo Sound Wave action that was not working.

  • Bug Fix: Fixed an issue with the Create New option in the editor for IR assets since they are converted from SoundWaves.

  • Bug Fix: Fixed an issue with audio assets getting compressed/retrieved from the DDC even when cooking the server, which resulted in long server cook times.

  • Bug Fix: Fixed a bug with multiple submix effects not processing.

  • New: Migrated modulation plugin debug commands to work properly with the au.debug.soundmodulators command.

  • New: A new interface was added for procedural audio generation to avoid UObject dependencies in the audio render thread: the ISoundGenerator.

  • New: Audio volumes can now send audio to submixes.

  • New: Dry (initial sound) and wet (repeated sound) level controls were added to submixes.

  • New: Improved the FAudioChunkCache::GetChunk()—if it is called with bBlockForLoadCompletion, it will perform that load synchronously instead of starting and waiting for an async task.

  • New: Added a LoadingBehavior category to the Audio Stream Caching section in AudioMemReport, as well as an on-screen debug print.

  • New: Added a new Audio Bus Asset feature that allows audio to be routed to effects but not rendered as audible.

  • New: A multiband compressor was added to the DSP library.

  • New: Multi-channel sources can now send to source buses.

  • New: Real-Time Submix Spectrum Analysis Delegate contains a host of improvements and new functionality over the existing submix spectral analysis utilities:

    • Convenience functions for creating spectrum bands make it easier to choose the right set frequencies for the sounds you want to visualize.

    • Custom delegate events and a configurable update rate provide easy control over the runtime cost of performing spectral analysis.

    • Normalization and Auto Range make the spectrum analyzer robust to all types of content.

  • New: Subtitle-related properties of Sound and Dialogue Wave are now exposed to Blueprints.

  • New: Added AssetUserData support to SoundBase.

  • New: Organized attenuation categories when they display in the Details panel.

  • New: Added a new convenience method in Blueprints for creating an OSC Server and Client that avoids common problems with the garbage collector.

  • New: Moved the Audio Modulator update to the audio render thread for smoother transitions and better audible masking of game thread hitches.

  • New: Added the ability to use PlaySound2D for non-UI related sounds.

  • New: Updated libsndfile to 0.1.9.

  • New: Added a Modulation Envelope Follower Generator.

  • New: Added a Class template.

  • New: Added the ability for plugins to define their own Modulation Generators.

  • New: Added data-driven Modulation Parameters, which are now assets that can be referenced by Modulation Destination Settings and modulator types.

  • New: Added delegates for reporting when playstate and virtualization change in an AudioComponent.

  • New: Added functions to audition Modulation Mixes in the editor.

  • Improved: Added an SIMD-optimized version of the plate reverb effect.

  • New: Added visual data and layouts for linear and unit encoding for Modulation Bus values in the editor.

  • New: Added a retrigger threshold for sound concurrency. Sounds that trigger on the same sound concurrency below the threshold will not be played.

  • New: Added new CVAR-based debug commands that replace and deprecate the older, stat-style debug commands.

  • New: Added an option for enabling all viewports in editor (present and future), as well as per viewport, by setting -allViews to on or off.

  • New: Added support for True Stereo impulse responses for the Convolution Reverb Submix Effect.

  • New: Additional multichannel mixing controls provide the tools needed to create a consistent convolution reverb for stereo and surround channel configurations.

  • Deprecated: Deprecated OnStart and OnStop synth component virtuals as they are redundant to OnBeginGenerate and OnEndGenerate.

  • Deprecated: Deprecated specialized import for multiple .wav files with special cased file names.

Automation

  • Bug Fix: Expected errors in automated tests are no longer reported as errors in commandlet runs or causing commandlet runs to return a non-zero return code.

  • Bug Fix: Fixed a typographic error ("Screnshots") for Automation errors.

  • Bug Fix: Fixed Linux packaging failure resulting from Lumin key being copied locally into Gauntlet.

  • Bug Fix: Fixed an issue where, on some platforms, new and modified screenshots for the automation framework could not be approved in the Editor.

  • New: Added stompmalloc and d3ddebug options to the EngineTest BuildGraph script.

Blueprints

  • Crash Fix: Fixed a crash on cook with Blueprint nativization enabled if an unexpected class type was specified in the 'ExcludedBlueprintTypes' list.

  • Crash Fix: Fixed crash loading a map after adding an entry to a set on an instance of a Blueprint when the set's default values in the Blueprint had at least 1 entry.

  • Crash Fix: Fixed an occasional crash during nativization of child Blueprint assets that were reparented to a native Actor class in an older editor version.

  • Crash Fix: Fixed a crash when renaming a nested UserDefinedStruct would incorrectly access pin indices after reconstruction.

  • Crash Fix: Fixed a crash when creating a Blueprint User Struct with the same short name as a C++ struct.

  • Crash Fix: Fixed a crash in SetLinker when loading actors with components that have subobjects.

  • Crash Fix: Fixed a crash that could occur after deleting and replacing references to a Blueprint asset.

  • Crash Fix: Fixed crashes that could occur after reloading Blueprint assets from the Content Browser.

  • Crash Fix: Using Undo after duplicating Custom Event nodes no longer causes a crash.

  • Crash Fix: Fixed a crash in SGraphPinKey construction of orphaned pins.

  • Crash Fix: Fixed a crash that could happen when gathering asset registry tags from a cooked Blueprint.

  • Crash Fix: Fixed an editor crash after converting a class with a user-defined type dependency when using the Blueprint native code generation developer menu tool.

  • Crash Fix: Fixed an editor crash that could occur when compiling a Blueprint Function Library with a function graph that contained an error if a dependent Blueprint contained a call to the library function in its construction script.

  • Crash Fix: Fixed an editor crash on process exit if one or more Blueprint assets were still being indexed in the background.

  • Bug Fix: Prevented pin types from propagating on the target array if it is a wildcard and there is already a connection type.

  • Bug Fix: Updated EnumEditorUtils to propagate to user defined structs as well, not just classes when the order of an enum is changed.

  • Bug Fix: Fixed the Blueprint delegate references not being updated after duplication.

  • Bug Fix: Added a missing code thunk for nativized Blueprint assets utilizing an array swap node.

  • Bug Fix: The construction script is now correctly run from FinishSpawning when an actor is spawned via blueprint in the editor world.

  • Bug Fix: Fixed Reset Instance Changes to Default for Blueprint added components.

  • Bug Fix: Function nodes added by dragging from the function list will now correctly snap to the grid.

  • Bug Fix: Disabled adding parameters to functions during PIE.

  • Bug Fix: CompileAllBlueprints whiteList option will now work as one. Previously, It was acting as a black list.

  • Bug Fix: Fixed call in editor buttons visible in Blueprint editor.

  • Bug Fix: Fixed incorrect encoding on UHT boilerplate source files generated from a nativized Blueprint class header file with Unicode characters in one or more Blueprint function names.

  • Bug Fix: Fixed a potential C++ type ambiguity in a nativized Blueprint function call site with at least one input argument that accessed a non-native member through an unconverted stub class.

  • Bug Fix: Hid Shortest Path Pin by default on the Ease Function Blueprint node.

  • Bug Fix: Added missing nativized Blueprint typecast support for map key/value and set element wildcard-typed function call inputs.

  • Bug Fix: Fixed an edge case in nativized Blueprint ctor code generation where custom collision profile response values would sometimes not be applied to a mesh instance.

  • Bug Fix: Component Expose on Spawn properties are now correctly set before OnConstruction or OnRegister events occur.

  • Bug Fix: No longer display the bindable events if the object property cannot be resolved.

  • Bug Fix: Added Component nodes now correctly hide the comment bubble on disabled "ghost" nodes.

  • Bug Fix: TSubclassOf is now correctly reflected to nativized Blueprint C++ code for "wrapped" object ptr types.

  • Bug Fix: Fixed negative time check in K2_SetTimer.

  • Bug Fix: Instanced components will no longer remain visible in the component tree view after resetting to Blueprint defaults.

  • Bug Fix: Fixed a bug where using a reroute node connected to GetClassDefaults would cause pins to become hidden on compile.

  • Bug Fix: Fixed a bug where variables created by promoting a pin would lose their default value on undo.

  • Bug Fix: Fixed an unrecognized tab that appeared when opening a Blueprint that was not up-to-date in defaults-only editor mode.

  • Bug Fix: Fixed "Call Parent Function" nodes having an incorrect tooltip in duplicated Blueprints.

  • Bug Fix: Fixed non-commutative binary operators in FBasicMathExpressionEvaluator.

  • Bug Fix: Removed the ability to create a Property Reference type in the blueprint editor as it is not functional on it's own. Native FFieldPath properties can still be used with a customization.

  • Bug Fix: Added missing code thunks for auto generated SetMapPropertyByName()/SetSetPropertyByName() call sites in a nativized Blueprint class.

  • Bug Fix: Fixed a compiler error that occurred when removing interfaces from duplicated blueprints.

  • Bug Fix: Added IsConnectionDisallowed to UK2Node_CallArrayFunction to correctly block connections from related object classes.

  • Bug Fix: Added a KismetSystem function for setting FColor's properly, instead of incorrectly calling the setting for "FLinearColor" upon compilation.

  • Bug Fix: Added 'Self' as a reserved name for function parameters in Blueprints.

  • Bug Fix: When collapsing a to Function and Add Function in a const Blueprint, it will now automatically make the new function const.

  • Bug Fix: Updated the green "+" or "view" buttons in the details panel to properly utilize the ComponentTemplate class so native component delegates will show up as well.

  • Bug Fix: BP Variable sets will now only clear wildcard types if both pins are empty.

  • Bug Fix: Removed an unnecessary call to NotifyPostChange which was causing UserDefinedStruct recursion guard to trigger and not save references to assets.

  • Bug Fix: MaterialParameterCollection can now be promoted to variable in Blueprints.

  • Bug Fix: Map Variables now have an icon in the Blueprint Editor Action Menu.

  • Bug Fix: Fixed interface-typed inputs on non-native Blueprint functions leading to a compile error in its nativized C++ code if the input was cast to an object inside the function graph.

  • Bug Fix: Fixed case sensitivity for Switch on String node.

  • Bug Fix: Added soft class/object support to FDynamicOutputHelper::IsTypePickerPin. Remove invalid ensure about dynamic output pin directions.

  • Bug Fix: Updated the amount of padding for graph nodes by default so that it better fits our compact math nodes.

  • Bug Fix: Fixed non-nativized Blueprint stub functions failing to copy values back out to any output parameters after VM execution when using exclusive nativization.

  • Bug Fix: Fixed the default BlueprintNativeEvent method definitions in the DataSourceFilter/IDataSourceFilterInterface APIs to be overridable in C++ in order to support nativization of Blueprint implementers.

  • Bug Fix: Added more explicit messaging for map/set errors when attempting to create a container of non-hashable type.

  • Bug Fix: Disabled connections of exec pins to array, set, or map container nodes.

  • Bug Fix: Made local function variables global when converting from a function to an event.

  • Bug Fix: Fixed keyboard navigation issue after renaming a component in Blueprint Editor.

  • Bug Fix: Added UFUNCTION parameter name validation to UHT on native functions.

  • Bug Fix: No longer set autogenerated nodes to transactional unless the owning graph is also marked as transactional.

  • Bug Fix: Added ATAN2 naming alias which allows it to be placed in the Math Expression node.

  • Bug Fix: Removed Blueprint recompiling on rename as it is redundant with new BP Compiler updates and causes a re-entrance into FileHelpers::SaveWorld.

  • Bug Fix: Dragging off a pin in Blueprint Function Libraries will now allow the user to Promote it to a Local Variable.

  • Bug Fix: Components added directly as a child node will now have an initial transform consistent as if they were added to the root and then attached to the parent node.

  • Bug Fix: Native Components will now only display the "Add Event" context menu if editing is allowed on them.

  • Bug Fix: Duplicating a function now correctly updates the details panel to edit the new function.

  • Bug Fix: Marked child Blueprints as modified when removing an interface to prevent phantom references in the Reference Viewer.

  • Bug Fix: All subobjects are now preloaded when preloading templates for the Inherited Component Handle.

  • Bug Fix: Fixed duplicate nodes being created when Promoting a collapsed graph to a function or macro.

  • Bug Fix: Exported the FFindInBlueprintsResult and FStreamSearch APIs.

  • Bug Fix: Duplicating variables inherited from a parent class in the MyBlueprint panel now copies the default value from the old variable to the new one.

  • Bug Fix: Enabled renaming Enumerators to the same name with different capitalization.

  • Bug Fix: Self-context function calls that are implemented as an event will now be properly created as such.

  • Bug Fix: Enabled wildcard pins for assignment nodes to take on container types from other wildcard pins.

  • Bug Fix: Fixed Blueprint type-checking logic so that an error is properly raised after a member variable changes type.

  • Bug Fix: Fixed an edge case where custom collision profile response values were not being applied in nativized Blueprint ctor code.

  • Bug Fix: Refactored UEdGraphPin::GetPrimaryTerminalType to use the existing FEdGraphTerminalType::FromPinType method.

  • Bug Fix: Fixed non-functional collision in a nativized Actor Blueprint with one or more components set up to use a custom collision profile to override the component's inherited default collision response.

  • Bug Fix: Added a check to guard against a reported crash while scanning a new object redirector to a Blueprint asset when surfaced by the directory watcher.

  • Bug Fix: Fixed variables on spawned Blueprint instances from not being initialized to modified native struct types with details customization and no UPROPERTY() fields.

  • Bug Fix: Fixed a compile error during packaging when nativizing a Blueprint class with a MakeStruct node used to create an FFrameTime struct value literal.

  • Bug Fix: We now validate bound events at compile time to ensure that the owning component has not been removed from the Blueprint. This may throw Blueprint Warnings in existing assets and exposed events that were bound, but never called. The error will read " does not have a valid matching component".

  • Bug Fix: Blueprints with containers that reference user-defined structs that have been deleted outside of the editor are no longer unfixable. Users can now delete these references so that the Blueprint compiles again.

  • Bug Fix: Skeleton classes will now only reinstance into valid class hierarchies, enabling garbage collection to handle them properly, avoiding reprocessing during every instance.

  • Bug Fix: Blueprint diff tool's AdvanceMapIterator and AdvanceSetIterator will now correctly advance valid iterators. This fixes a bug where only the first element in a map would be diffed against, but it would be done N times.

  • Bug Fix: We no longer relocate transient ICH override templates when compiling a parent Blueprint class. This avoids archetype lookup failures on a child class load.

  • Bug Fix: Added functionality to break custom event node links when promoting from a collapsed graph to a new function graph to avoid creating a cross-graph pin link.

  • Bug Fix: Fixed an issue where blueprint functions called from UMG or async callbacks would run in the wrong client/server context when using Play In Editor. Now every time a blueprint function gets executed it will correctly set the "world context" which should fix issues with soft object references.

  • New: Added Move to Parent option for variables and functions in MyBlueprint list.

  • New: Added Copy/Cut/Paste Support for variables, functions, and macros.

  • New: Disabled editing of default values on soft object reference member variables.

  • New: Added "Create Matching Function" context menu option to unresolved CallFunction nodes.

  • New: Improved Replace Node References feature and promoted from experimental.

  • New: Component tick properties can now be modified by a Blueprint that has added a component of that type.

  • New: Instead of just removing connections on latent action nodes, rewire them if possible and if not then create an orphan pin.

  • New: Exposed TSoftObjectPtr variants of LoadStreamLevel, UnloadStreamLevel, and OpenLevel.

  • New: Generated new Variable GUIDs when duplicating blueprint assets, preventing them from finding false positives in Blueprints.

  • New: Added GetPlatformUserDir to kismet function library.

  • New: Fixed static functions on network-enabled classes like Actor to correctly handle Authority Only/Cosmetic correctly.

  • New: Blueprint Variables now show tooltip text when hovering over the tooltip EditableTextBox in the details panel.

  • New: Added reverse function for arrays to Blueprint API.

  • New: Added bOpenInEditor parameter to CreateBlueprintFromActor and CreateBlueprintFromActors.

  • New: Adjusted the blueprint debug toolbar to better fit on the screen for smaller window sizes.

  • New: Added the ability to convert functions and events from the "My Blueprint" window as well as by right clicking on the node.

  • New: Added export flag to UK2Node_GetSubsystem.

  • New: Enabled Vectors and other struct types to edit the value and slider range metadata in the details panel.

  • New: The context search will now prefer options that have been favorited by the user.

  • New: Added automatic naming of Blueprint variables to match their target pin when "Promoting to Variable".

  • New: Added controllable length to ArrowComponent and expose in TargetPoint, which grants ability to use them as an editor visualization from blueprints.

  • New: Added GetSystemPath function for finding the full path to an Asset on disk.

  • New: Subsystems that are marked NotBlueprintType in their metadata are now hidden from showing up as subsystem targets in blueprint editor, allowing native-only subsystems. Static functions will still be available.

  • New: Added suppressable warning dialog when attempting to rename RepNotify functions.

  • New: Added prompt when pasting unresolved function nodes to ask how they should be resolved.

  • New: Added new "Random" and "RandomFromStream" to KismetArrayLibrary.

  • New: Enabled UEdGraphPin to opt out of "Friendly" Names in Editor without explicitly declaring an override.

  • New: Added int64 type to Temporary variable action registry and GetValueFromString in Blueprints.

  • New: Actor Component Blueprints now use the same Data Only Blueprint logic as all other types. They will open in the Data Only Blueprint editor if they contain no nodes.

  • New: Blueprint debugger commands Step (Into/Next/Out) will now ignore the currently selected filter object, making it easier to trace execution from one Blueprint to another.

  • New: Blueprint Editor will now display which Blueprint library is currently being loaded so that developers can have visibility on which libraries take a long time to load.

  • New: Exposed InterpToMovementComponent's AddControlPointPosition and ResetControlPoints functions to Blueprint.

  • New: Added an on-by-default CVar that enables users to suppress warnings about events that are missing their bound components. Turning this on will result in possible silent failures of the Blueprint compiler.

  • New: Added a new Blueprint compiler safety check that will warn when a bound event's component has been deleted. This can possibly expose a lot of previous silent failures. If you wish to disable these warnings, then you can set the Config variable "bp.PinValidityCheck.bDisplayMissingBoundComponentWarning" to false in your DefaultEngine.ini file. We don't recommend turning off these warnings in the long term, but it can be useful to clean up the issues over time on large projects instead of all at once.

  • New: Added function alias "FCeil" for "Ceil" on math expression nodes

  • New: Added wildcard connections to the wildcard pins in the Format text node so that it can be used inside of macros.

  • New: Added Preview Playback FPS option to SubUVMaker, changing settings will no longer reset the preview result.

  • New: Added new Macros "Create and Assign Render Target" and "Create and Assign MID" that handle the logic to assign the resulting assets to variables and avoid re-allocating memory if the variable still contains data that matches the requested input.

  • New: Added Cloud Compositing BP tool to Volumetrics Plugin, includes some example shaders from simple billowy clouds to storms.

  • New: Made SubUV maker work with Niagara systems and capture them directly in the editor viewport.

  • New: Exposed more LiDAR interactions to Blueprints.

  • New: Added a simpler preview subUV that works better and is easier to start from.

  • New: Added override functionality for fluid simulation testing in Landmass.

  • New: Added a "DisableSplitPins" metadata tag for native make/break nodes. Adding the metadata tag to the "meta" section of your UPROPERTY tag will disable split pins on your custom UClass/UStruct.

  • Improvement: Improved behavior when using the blueprint debugger object filter on an actor that was dynamically spawned. It will attempt to save and restore your selected actor/object over multiple PIE sessions until the filter is manually changed.

  • Deprecated: Fixed "Quaterion" typo by renaming two functions with the type to Conv_VectorToQuaternion and Conv_Vector4ToQuaternion.

Core

  • Crash Fix: Fixed a crash in UnrealHeaderTool when you have a UInterface but no corresponding IInterface.

  • Crash Fix: Fixed a crash when using the property system to edit a TMap property with a TWeakObjectPtr key.

  • Crash Fix: Fixed rare crash occurring during LoadTime analysis threading issue where EditCpuTimeline ended up being called without being under the proper edit session scope.

  • Crash Fix: Fixed hot reload crashing when creating a new user-defined Blueprint struct.

  • Crash Fix: Fixed a crash in UnrealHeaderTool when parsing two headers with the same leaf name but different paths.

  • Crash Fix: Fixed shutdown crash in monolithic editors, this was due to a global static being marked destroyed and falling out of scope.

  • Crash Fix: Fixed an UnrealHeaderTool crash when you have a UInterface but no IInterface.

  • Crash Fix: Fixed skiprows crashing in CsvToSvg, csvdir will now read .csv.bin files.

  • Crash Fix: Fixed nullptr crash when cooking.

  • Crash Fix: Fixed a crash when running clients and -nullrhi. Ensure the preload screen manager is running even though there is no window to render.

  • Crash Fix: Fixed a rare crash when incremental Garbage Collector is running and other threads create new UObjects.

  • Crash Fix: Fixed TCHAR_TO_UTF8 crash for illegal UTF-16 strings that end with the first half of a UTF-16 surrogate pair.

  • Crash Fix: Fixed Garbage Collector crashes caused by Object class 'ClassPrivate pointer' being null, and added an assert to FObjectPropertyBase::CheckValidObject when an object class is null.

  • Crash Fix: Fixed a crash when generating native code for Blueprints that contain 'Property Reference' variables.

  • Crash Fix: Fixed a rare crash when destroying objects caused by logging code trying to log path names of destroyed objects.

  • Crash Fix: Fixed a crash when saving Blueprints with 'Set Float Attribute' node.

  • Bug Fix: Fixed potential precision error in FEngineWaitLatentCommand::Update and FStreamAllResourcesLatentCommand::Update.

  • Bug Fix: Changed DDC file writes and reads to be silent. This avoids commandlets failing because of errors logged during access to DDC.

  • Bug Fix: Fixed usage of SCOPED_NAMED_EVENT and TRACE_CPUPROFILER_EVENT_SCOPE in various places. This avoids scope event names to get additional quotes and avoids the overhead of using macros with dynamic string as scope names.

  • Bug Fix: Fixed TRACE_PLATFORMFILE_FAIL_OPEN to use -1 as an invalid handle for trace events.

  • Fixed missing TRACE_PLATFORMFILE_END_WRITE event when write operation fails to write all bytes.

  • Bug Fix: Updated ProjectManager.cpp.

  • Bug Fix: Remapped soft/weak object pointers when duplicating multiple actors.

  • Bug Fix: Fixed the FGenericPlatformOutputDevices::GetAbsoluteLogFilename() not reporting the correct log filename when more than one instance of the same application was running. This could lead to attaching the wrong log file to a bug report.

  • Bug Fix: Fixed leaked process handles on Windows.

  • Bug Fix: Fixed issue where the crash reporter was truncating some pointers.

  • Bug Fix: Fixed XMLFile. It wasn't properly dealing with a single quote in a content field.

  • Bug Fix: Fixed a race condition occurring when an ensure and a crash executed concurrently.

  • Bug Fix: Fixed the name generation of the folder containing the crash/ensure artifacts to avoid collisions.

  • Bug Fix: Fixed a race condition when generating the crash error message.

  • Bug Fix: Fixed a deadlock that could occur between an application and CrashReportClient.

  • Bug Fix: Fixed CrashReportClient HttpSendTimeout configuration having no effect because it was set before GConfig was initialized.

  • Bug Fix: Fixed a variety of subobject instance issues:

    • ComponentInstanceDataCache will now compare instances when evaluating whether objects are identical or not.

    • ComponentInstanceDataCache now preserves object names by duplicating them in unique objects rather than directly in the transient package where the name could already be taken.

    • ComponentInstanceDataCache now overwrites objects with the same name when restoring a duplicated object during the apply phase.

    • Fixed PPF_DeepCompareInstances between 2 instances not working. Now only template against template is skipped.

    • Deep comparisons now work on objects instanced in Blueprints. Instead of insisting the CDO itself has a DSO of the correct name, we simply compare that the objects have the same name and that they either have the same archetype, or one is the archetype of the other.

    • Comparisons of instanced objects in containers are now correctly using a deep comparison for property panel purposes.

  • Bug Fix: Fixed a bug that resulted in an infinite loop when launching a project where the editor was built with a Unique Build Environment.

  • Bug Fix: Fixed UnrealHeaderTool wrongly emitting a UObject::Serialize adapter function when a type provides overloads for both FArchive& and FStructuredArchiveRecord.

  • Bug Fix: Fixed UnrealHeaderTool generated code when a BlueprintNativeEvent UFunction is inside a WITH_EDITOR block.

  • Bug Fix: Fixed a hang in UnrealHeaderTool when a class inherits an interface with the same name except for the prefix.

  • Bug Fix: Fixed a bug in FVector::Coplanar. The test was returning a false result when plane B was 'under' plane A.

  • Bug Fix: Fixed usage of Encode 7bit in trace code. It may now use up to a maximum of 10 bytes.

  • Bug Fix: Fixed FString::TIsCharRangeNotCArray and FString::TIsTCharRangeNotCArray to avoid recursive template instantiation on some compilers.

  • Bug Fix: Fixed issue where application aborted when plugins failed to load due to EnableAllPlugins command.

  • Bug Fix: Removed CPF_HasGetValueTypeHash from FArrayProperty as arrays are not hashable.

  • Bug Fix: Changed the generated code emitted for properties by UnrealHeaderTool to avoid a PVS static analysis warning.

  • Bug Fix: Renamed CVar Debug.EnableLeakTest to EnableLeakTest. It was not possible to change from the console as "DEBUG" was consumed by UEngine::Exec.

  • Bug Fix: Fixed a MallocStompOverrunTest for 64 bits platforms. The original code was not causing a buffer overrun because of the 16 bytes alignment.

  • Bug Fix: Fixed a compile error TSparseArray::PointerToIndex.

  • Bug Fix: DisableEnginePluginsByDefault is now saved as part of the written Uproject JSON.

  • Bug Fix: Added support for namespaced native base types of UStructs in UnrealHeaderTool.

  • Bug Fix: Fixed a compile error in TLruCache::RemoveByPredicate.

  • Bug Fix: Fixed a compilation error with Algo::Rotate.

  • Bug Fix: Increased read buffer limit to 1MB (from 48K) for reading metadata from a trace file.

  • Bug Fix: Fixed TSet not being able to accept const pointers as search inputs when the element type was a non-const pointer.

  • Bug Fix: Fixed the nulling of properties during hot reload when a reinstanced object refers to another reinstanced object.

  • Bug Fix: Removed the "Channel" suffix from channel names when tracing them. This fixes regression for Trace Data Filtering plugin (showing "Channel" suffix and presets not working anymore) and backward compatibility with previous traces.

  • Bug Fix: Added comments to TRACE_CPUPROFILER_EVENT_SCOPE macros.

  • Added TRACE_CPUPROFILER_EVENT_SCOPE_STR macro that receives static string parameters.

  • Fixed SCOPED_NAMED_EVENT macros adding extra quotes to named events when traced.

  • Fixed SCOPED_BOOT_TIMING to use TRACE_CPUPROFILER_EVENT_SCOPE_STR instead of the dynamic string version.

  • Bug Fix: Fixed FString::ParseIntoArray when the string has uninitialized reserved memory but is zero length.

  • Bug Fix: Fixed TSet properties' text import of a struct type, where the struct doesn't initialize all of its members in the constructor.

  • Bug Fix: Fixed ObjectName:FieldName reversal bug in FField::GetPathName. Added StringBuilder version of FProperty and UObject GetPathName to optimize allocations in Niagara graph cooking.

  • Bug Fix: Changed GetNum(std::initializer_list) to return int32. This fixes the construction of a TArrayView from an initializer list.

  • Bug Fix: Fixed bias in Array_Shuffle.

  • Bug Fix: Fixed ObjectName:FieldName reversal bug in FField::GetPathName().

  • Bug Fix: Fixed TArrayView comparison ambiguity with == and != when both operands are TArrayView.

  • Bug Fix: ReadLibraryImportsFromMemory will no longer read past the end of the Imports table. This could result in invalid symbols added to the ImportNames table which resulted in increasing the engine start time.

  • Bug Fix: Allowed FStringView to be used with the ByHash TMap functions for FString TMap key queries.

  • Bug Fix: Forced stat groups to register in the constructor of their FThreadSafeStaticStat. This fixes a situation that prevented a group without FScopeCycleCounter from being activated if no other group was activated.

  • Bug Fix: Disabled copying of FUObjectItem.

  • Bug Fix: Prevented precision loss when passing an int64 value with basic math expression. The default value of the min and max is now the limit of the numeric type.

  • Bug Fix: Save INI files as UTF-8 by default.

  • Bug Fix: Subsystems will not attempt to instance non-authoritative classes.

  • Bug Fix: Avoided a stack overflow in FOutputDeviceRedirector.

  • Bug Fix: Added double overloads of IsNaN and IsFinite for Unix and Mac.

  • Bug Fix: Added an Ensure to AssetRegistry OnPathAdded and OnPathRemoved events are always fired hierarchically.

  • Bug Fix: Prevented the render thread from tracing an unmatched frame event.

  • Bug Fix: Fixed pak signature file data from incorrectly storing the original decrypted master hash after the initial load. This behavior caused future chunk hash mismatches to incorrectly report a master table corruption.

  • Bug Fix: Fixed CrashReportClient/CrashReportClientEditor sometime uploading the wrong log file.

  • Bug Fix: Fixed GenericPlatformOutputDevices to reserve and lock the name of the log file to prevent a concurrent instance to use it and ensure CrashReportClient.exe pick up.

  • Bug Fix: Fixed memory hangs when flushing async loading and the queue gets stuck on a low priority job which is not being serviced due to throttling. Please note that this is disabled by default due to a potential performance impact, but can be enabled via the CVar pakcache.AsyncLoadingAllowFlushProtection.

  • Bug Fix: Fixed a present hang detector race condition.

  • Bug Fix: Fixed initialization workflow of ExternalProfilers.

  • Bug Fix: Fixed a random memory corruption when using FMallocBinned.

  • Bug Fix: Fixed a Check failure in FD3D12CommandListManager::EndTrackingCommandListTime when running ProfileGPU.

  • Bug Fix: Fixed access violation in subsystem container startup discovered with the command '-stompMalloc'.

  • Bug Fix: Disabled use of FPreloadFile for the asset registry. To re-enable define ASSET_REGISTRY_USE_PRELOAD_FILE to 1.

  • Bug Fix: TAllFieldsIterator will now iterate over nested inner fields. This fixes a bug where adding a new property to a user defined struct that's used in an array property on a blueprint will corrupt the array values.

  • Bug Fix: Fixed up analytics WeakPtr reference by using Pin.

  • Bug Fix: Fixed Tickable objects from sometimes failing to register when re-allocated with the same address as previously destroyed ones.

  • Bug Fix: Added Ensure that FParse::Value returns a string with a correct length when used with an input string which length is greater than 4096.

  • Bug Fix: Fixed FPackageReader to copy the editor only filtering flag from the underlying reader archive to the owning package reader. It can be set by the summary reading code and affect how future serialization occurs.

  • Bug Fix: Fixed type conversions between Percentages and Multipliers.

  • Bug Fix: Fixed cooked builds using async archives, if we fail to load the package file summary then advance the async archive's load state out of "waiting for header" so that the failure can be processed gracefully and not trigger a check.

  • Bug Fix: Fixed StaticFindObject to search for any package with a package name that is only a substring of the full package name.

  • Bug Fix: Fixed a rare thread hang that could occur when reading from signed pakfiles from multiple threads.

  • Bug Fix: Fixed operator precedence and associativity in basic math expression evaluator.

  • Bug Fix: FReferenceFinder will no longer use multithreading until all native classes have been registered in order to avoid asserts when assembling token streams for classes that haven't had it assembled yet.

  • Bug Fix: Fixed FFieldPath::ToString from not removing nativized BP temp package prefix.

  • Bug Fix: Fixed a wrong printf conversion specifier for int64 type.

  • Bug Fix: Fixed final window size computation when only the window height is specified.

  • Bug Fix: Fixed global fstructuredarchive insertion operator not closing the adapter after use, added slot insertion overloads for TEnumAsByte, and enum class types.

  • Bug Fix: Fixed FAsciiSet::Skip skipping wide characters, Optimized Skip speeds, simplified ParsePropertyToken, and added some unit tests.

  • Bug Fix: Fixed issue with non-ASCII directory names.

  • Bug Fix: Added missing AddReferencedObjects functions to FDelegateProperty and FMulticalDelegateProperty.

  • Bug Fix: IncrementalPurgeGarbage will now lock the Garbage Collector guard only once to avoid too many locks.

  • Bug Fix: Made FPageAllocator a singleton to control global initialization/destruction order. Avoids a potential startup crash in monolithic builds.

  • Bug Fix: FFieldPaths should no longer re-resolve themselves each time a Blueprint is destroyed and only re-resolve if the Blueprint that owns the property they resolve is destroyed / or recompiled.

  • Bug Fix: Fixed Garbage Collector skipping some generated class references because they were incorrectly marked as CLASS_Native.

  • Bug Fix: Fixed a rare case of a compressed IO read re-using a cached buffer that it shouldn't have.

  • Bug Fix: Fixed StaticFindObject to handle nested sub-objects when searching for any package without a package pointer.

  • Bug Fix: Added ensure to fail the loading of an async package correctly when the summary load fails.

  • Bug Fix: FieldPath property's ImportText will now properly support full path names including the field type as well as delimited strings.

  • Bug Fix: UStructs with AddStructReferencedObjects are now correctly marked as containing object references, even if it contains no UPROPERTY object references

  • Bug Fix: Fixed memory stomping occurring when a long command line is used.

  • Bug Fix: When cooking, references to editor-only FProperties will be nulled out.

  • Bug Fix: Fixed wrong return type of rarely used ExportTextPathToObjectPath overload.

  • Bug Fix: FKismetCompilerContext::ValidateVariableNames will now look through both UFields and FProperties when looking for conflicting names.

  • Bug Fix: FFieldPaths will no longer attempt to resolve themselves to new fields after the original field they resolved to has been destroyed.

  • Bug Fix: FReferencerFinder will now properly find GGCObjectReferencer as one of the referencing objects.

  • Bug Fix: When converting UProperties to FProperties, the engine will rename the old property so that it doesn't collide with potentially valid objects of different type.

  • Bug Fix: Fix incorrect default value being applied for the skipiostore parameter in UAT

  • Bug Fix: Fixed memory stomping occurring when a long command line is used. Modified FGenericCrashContext to perform safe string copies which caused TLazySingleton to crash due to static memory being overloaded.

  • Bug Fix: Fixed code for c++17 compilation. std::binary_function, std::unary_function and register keyword have all been deprecated.

  • Bug Fix: Added ensure to UAnimBlueprintGeneratedClass::EvaluateGraphExposedInputs' ValueHandlerNodeProperties so they now properly resolve against their class which can be in a renamed package when loading.

  • Bug Fix: TFieldPaths will now always try and use the provided struct when resolving themselves and update its path with the resolved package if it's different to the existing serialized value.

  • BugFix: The command line '-handleensurepercent=' now works correctly.

  • Bug Fix: Changed TArray version of TMap::GetKeys to reset supplied array before adding keys as the function did not work correctly if used to accumulate keys over multiple maps.

  • New: Updated API in FAxisViewportInt32 and FAxisViewportDouble. All functions from FAxisViewportInt32 and FAxisViewportDouble classes that change positions now return true if the position was changed.

  • New: Exposed a more customizable EnforceScrollLimits, in addition to UpdatePosWithinLimits.

  • New: Converted StaticConstructObject_Internal to use a parameter block.

  • New: TMap::GetKeys now resets the TArray passed into it.

  • New: Moved DeveloperSettings into its own module so it can be used outside of Engine. When inheriting from UDeveloperSettings, you will need to add DeveloperSettings as a module dependency.

  • New: Made the string builder types more generic. The string builder type hierarchy has been simplified to TStringBuilderBase and TStringBuilderWithBuffer.The append operators have been simplified to append anything convertible to a string view.

  • New: Changed TStringView to be usable where CharType must be deduced Both FString and TStringView can now be constructed and assigned from any contiguous container of the same character type. This allows FString to be constructed and assigned from FStringBuilderBase and TStringBuilder.

  • New: Added GridSnap and Floor as a templated function.

  • New: Added Emplace functions to SparseArray.New: Made internals of LoadFileToStringArray[WithPredicate] to support 64-bit sized files (still returns a 32-bit TArray of 32-bit FString lines).

  • New: Added Game and EditorOnly dependencies to the AssetRegistry. The information for which imports and soft package references are editor-only is calculated during SavePackage, and requires resaving packages to use; until packages are resaved, all of their dependencies are assumed to be used in-game. The interface of dependencies in the asset registry changed to support reporting the extra information for each dependency: EAssetRegistryDependencyType was split into EDependencyCategory and EDependencyProperty.

  • New: Added an option to view full reference chains (ignoring non-GC objects). Just add "full" to the argument list.

  • New: Custom versions can now register a validation function that can flag an asset as unloadable.

  • New: Added the IsValidPath function to FPackageName. This function checks for a valid root. FindOrLoadAssetsByPath (in EngineUtils) now uses IsValidPath to be able to load the content of roots. This was not possible before as IsValidLongPackageName on a root is always false.

  • New: Added FindDisplayNameTextByValue and FindAuthoredNameStringByValue functions to UEnum. These are like their Get equivalents, but return whether a value was found or not.

  • New: Updated ApplyBefore and ApplyAfter to TTuple. These functions use Invoke instead of a direct call to the callable object so that member function pointers can be used instead. Also removed TMemberFunctionCaller from the delegate system, which was doing the job that Invoke now does.

  • New: Added TDelegate and TMulticastDelegate syntax, similar to TFunction, to be used instead of the DECLARE_DELEGATE and DECLARE_MULTICAST_DELEGATE macros.

  • New: Added the Get function to TTuple to enable developers to get a tuple element by its type rather than by its index.

  • New: Updated AsConst to work the same as std::as_const. The overload for pointers is deprecated because it caused arrays to decay to pointers.

  • New: Added a check for VS2019 redist, and to trigger the prereq installer if it isn't found.

  • New: Moved AssetRegistry structs into CoreUObject - AssetData, AssetBundleData, ARFilter, and AssetDataTagMap were moved into CoreUObject. This will enable us to remove the link requirement that all functions in these structs are inlined.

  • New: Moved all AssetRegistry headers into AssetRegistry subdirectory to match include style in the rest of the engine. Includes using the invalid include path AssetRegistry/Public/ will need to immediately change to AssetRegistry.

  • New: Added "Render" thread group (trace events) also to the "RHIThread" and to the "RTHeartBeat" rendering threads.

  • New: Added support for the %hs format in FGenericWidePlatformString::GetVarArgs.

  • New: Added a TTupleIndex trait for getting the index of a type in a tuple, and a TTupleElement trait for getting the type at a given index.

  • New: Changed TTuple::Get() to work like std::get<>, which behaves differently from struct member access when elements have rvalue reference types and are extended to allow volatile tuple access.

  • New: Added a ::type typedef to TEnableIf and ::value static members to TAnd, TOr and TNot for compatibility with the standard library.

  • New: Added policy support to delegates, allowing them to take a user policy to configure behavior and state. Added .natvis support for multicast delegates.

  • New: Added IoStoreUtilities: Compression support.

  • New: Promoted the prototype RingBuffer class into Core\Public\Container, this is the recommended container for a single-threaded queue, dequeue, circular buffer, or ring buffer.

  • New: The following minor additions have been added to the TaskGraph interface:

    • FFunctionGraphTask supports functors that take the completion graph event as a parameter.

    • A shortcut for FTaskGraphInterface::GetWaitUntilTaskCompletes()->FGraphEvent::Wait().

  • New: Captured and logged the call stack of a crash inside CrashReportClientEditor.exe. The log is emitted with the Editor analytics to help diagnose crash in the crash reporter.

  • New: Memory-mapped bulk data in IoDispatcher.

  • New: Made the Algo:: Sort algorithms take rvalue refs so that they can be passed temporary TArrayViews.

  • New: Added an option for potentially increased performance when getting UTC time via FDateTime::UtcNow when PlatformUtcNow is slow. This can be enabled with 'bUseEstimatedUtcNow' located in the TargetRules.

  • New: TMap::StableSortByValue now works when your value contains a TUniquePtr.

  • New: Enabled the unhandled exception filter on Windows for games. This captures crashes in non-engine threads and from Windows Kernel callback.

  • New: Added a version of CreateOptionalDefaultSubobject which allows specification of the type to create by default.

  • New: Added a version of TMap::GetKeys that takes a TSet instead of TArray to populate.

  • New: Vectorized several FQuat operations and improved numerical stability of FQuat::GetRotationAxis().

  • New: Added .natvis visualizers for FVector, FQuat, FRotator and FTransform.

  • New: Implemented new class FEventRef - an RAII-style alternative to FEvent which gets or returns an FEvent instance from or to the pool automatically. The class definition is placed into Event.h to be close to FEvent so Users can see that there's an alternative to FEvent. Implementation is placed in ThreadingBase.cpp where FEvent and FScopedEvent implementations are.

  • New: Allowed TTuple to be constructed and assigned from tuples with different types, as long as all the destination element types are constructible or assignable from the source types.

  • New: Added Tie function for destructuring TTuple return types into individual variables, like std::tie().

  • New: Added a ForwardAsBase function which allows the perfect forwarding of a reference as a base type.

  • New: ReadLibraryImportsFromMemory was reading past the end of the Imports table. This could result in invalid symbols added to the ImportNames table which was increasing the engine start time.

  • New: Added new code comment inside TUniquePtr; containing advice for when its use inside UObjects causes a compile error.

  • New: Added First function and Last function to TPageArray.

  • New: Added a new compile error when binding a delegate with a const object pointer and non-const function.

  • New: Added a new TVariablePagedArray implementation with fixed-size pages, but a page may have unused items either at the beginning or at the end of it's items array.

  • New: Added FPlatformProcess::Yield method.

  • New: Changed the definition of LLM_ALLOW_ASSETS_TAGS to allow activation without modifying the header.

  • New: Added Move operations to TAttribute.

  • New: Made trace channel names tolerant to ending 's' or 'S.

  • New: Added new BuildPatchErrorUtils to add patching error utilities.

  • New: Added support for passing "abscrashreportclientlog" and "nullrhi" command line arguments to crash reporter monitor.

  • New: Added a TPimplPtr type which can be used as a substitute for TUniquePtr of an incomplete type; without forcing the outer class to define all of its special member functions in the .cpp file where the type is fully defined.

  • New: Added a TInvokeResult trait for getting the return type of a callable with given argument types.

  • New: Added templatized InitializeDependency to subsystems. Also modified InitializeDependency to return the subsystem.

  • New: Extended TValueOrError with TryGet functions, perfect forwarding of arguments, and more efficient storage.

  • New: Fixed PLATFORM_CAN_ASYNC_PRELOAD_FILES code path in FPreLoadFile to correctly handle files that are not available when the read request is executed.

  • New: Created a new trace event "Diagnostic.Session2". This event includes improved formatting that utilizes string type fields and handles the new event in the DiagnosticsSessionAnalyzer.

  • New: Enabled the unhandled exception filter on Windows for all applications. This is to capture crashes in non-engine threads, additionally, this captures some crashes from Windows callback that are not going through the main thread except blocks.

  • New: Added CreateStandardFileName, implemented by MakeStandardFilename, and optimized both to be approximately 30% faster than the original MakeStandardFileName.

  • New: Added Ensure when getting the correct case for the project path during engine startup on the Windows platform. This no longer resolves directory junctions at the same time as it can cause problems for p4 operations. This is done using the slow 'FindFirstFile' approach on EVERY SEGMENT of the project file path.

  • New: Enabled CONTAINER_INITIAL_ALLOC_ZERO_SLACK, this provides cross-platform memory saving functionality which saves up to 96MB on consoles.

  • New: Added Ensure that the project directory is updated after the first time that the project file path is set.

  • New: Added support for passing strings in execcmds, enclosed in single quotes.

  • New: Added Silence warnings regarding the possible loss of precision converting from integer to floating-point types.

  • New: Removed unnecessary conversion to float in FTimecode::FromFrameNumber to minimize loss of precision in FThreadHeartBeatClock::Seconds for long-running titles

  • New: FGenericPlatformMath::FRand now truncates Rand to 24 bits or RAND_MAX, whichever is smaller. This prevents values closer to 1.0 being higher probability due to loss of precision.

  • New: Added TArrayView64 by adding a SizeType parameter to TArrayView.

  • New: Added Ensure to no longer resolve directory junctions when also getting the correct case for the project path during engine startup on Windows.

  • New: Fixed an infinite recursion error when calling Add in TDiscardableKeyValueCache.

  • New: Added csvExecCmds command line option to run exec commands on particular CSV frames. E.g: -csvexeccmds="500:listtextures,1000:listtextures". This can be useful when doing deterministic benchmarking.

  • New: Added the command line option '-d3d12instrumented' to control the use of the instrumented d3d driver.

  • New: Added a new CSV tool for binary support. Use the conversion tool 'CsvConvert' to convert CSVs to a packed binary representation (csv.bin), which is smaller and faster to parse. All CSV tools will seamlessly read .csv.bin files.

  • New: Added a version of FPaths::ChangeExtension to FPathViews that uses FStringView as the input type rather than FString.

  • New: Removed identical duplicate types from PS4UE4.natvis that existed and matched in UE4.natvis.

  • New: Added a fallback so that '-mempro' and '-memprollmtag' will work if the command line wasn't initialized when FMemProProfiler::Init when it was first called,

  • New: Fixed a bug where fatal UE_LOG messages could potentially return and continue execution if several threads were issuing fatal log messages at the same time.

  • New: Added Ensure to no longer resolve directory junctions when also getting the correct case for the project path during engine startup on Windows. This is done using the slow 'FindFirstFile' approach on EVERY SEGMENT of the project file path.

  • New: Added two new arguments to PerformanceReportTool for bulk query support '-spreadsheetfriendly' which outputs a single quote before non-numeric entries in summary tables and '-noSummaryMinMax': which makes disables min/max columns for each stat in a condensed summary.

    • Fixed a bug with duplicate header entries in email summary tables.

    • Added a support for reading .csv.cache files. These contain metadata and stat names, so they are faster to read than the full CSV when filtering with '-metadatafilter'.

    • Allowed specifying a condensed summary table type, with '-condensedSummaryTable '.

    • Made the tool robust to accommodate zero-length CSVs.

  • New: FString now supports construction from an FStringView with an additional memory slack in its internal buffer.

  • New: Mempro tag tracking improvements:

  • Added support for tracking multiple LLM tags, for example, mempro.llmtag "chaos,chaostrimesh"

  • New: Added support for enabling mempro and specifying tags without the need for execcmds. This can be done with -mempro and -memprotags= respectively.

  • New: Added a cooker parameter (-DevelopmentAssetRegistryPlatformOverride) 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. Guard a loop that accesses asset registry data for cases where that data doesn't exist.

  • New: Added FScopedMemory, which will scope out the difference in Physical and Virtual memory in addition to capturing other threads allocating.

  • New: Added GetTypeHash() support to TWeakObjectPtr properties.

  • New: Refactored stage time only encryption config to be "explicit" groups that can take normal assets and external non-UAsset based files for encryption.

  • New: Removed comments from *.ini files when staging.

  • New: Reduced the constant memory cost of keeping FProperty related references from 32 to 8 bytes per UStruct.

  • New: Added additional asserts when failing to remove UObjects from hash tables due to a rare crash in Garbage Collector.

  • New: Creating new UObjects while Collecting Garbage will now result in an assert.

  • New: Added a missing constructor definition of FAutoConsoleVariableRef when NO_CVARS is defined.

  • New: Fixed a spelling error located in assertion.

  • New: Added the name of the slowest unit test in warning for >2s smoke test run time.

  • New: Only inject encryption key asset metadata into the cooked asset registry for platforms that actually require it.

  • New: Various engine init optimizations and new string conversion paths:

    • Added some core string conversion paths, added FString::Append and += overloads to avoid pointless temporaries when appending c strings and various other string types.

    • Added UTF32 <-> TCHAR string conversion macros.

    • Optimized QuotedString parsing, and property parsing.

    • Added PackageName optimizations and SoftObjectPath optimizations.

  • New: Added logic to change how background generation of distance fields works in the editor, Instead of creating a new thread pool for the distance field tasks the editor will now use GLargeThreadPool when available. This reduces thread spam in profilers and reduces overhead on machines with a large number of available logical processors.

  • New: Removed unnecessary target dependencies for ShaderCompileWorker on Linux.

  • New: Folded FSynchronizedArchiveState into FArchiveState to reduce complexity and restore private FArchiveState inheritance.

  • New: Disabled STATS in UHT.

  • New: Core will now be aware of multiple CPU groups to make better use of high-core systems. Reimplemented FWindowsPlatformMisc::NumberOfCores and FWindowsPlatformMisc::NumberOfCoresIncludingHyperthreads in terms of GetLogicalProcessorInformationEx.

  • New: Added in-game console key for Swedish keyboard layout.

  • New: Avoided pointless FString temporaries when appending c strings.

  • Added Append and += overloads compatible with C strings, char arrays, string views, and string builder as well as FString.

  • New: Added some core string conversion paths.

  • New: Added FPlane::IsValid, FPlane::GetOrigin, and FPlane::GetNormal.

  • New: Added FVector::XAxis, YAxis, and ZAxis constants.

  • New: Added .uptnl to the list of extensions that must exist in pak files, and won't trigger a lower level platform file call.

  • New: Refactored sandbox file system creation so it gets funneled via a factory function, to support multiple implementations.

  • New: Optimized Garbage Collection, Core Redirect, and SavePackage related code in UHT since they contribute greatly to the overall build time.

  • New: BMP writing is now supported in shipping config.

  • New: Converted UEdGraph::Serialize over to a structured archive format.

  • New: Parsed int64 value with basic math expression without losing precision. Added the option to only parse FText to number parsing only if the parsed number is inside the limit of the desired type and the option to clamp that value to the limit of the desired type.

  • New: PluginManager now takes into account the default editor target config param when trying to decide which editor target to use.

  • New: Moved the hardcoded list of ini suffixes in the staging system out into lists in the deployment context so that projects can choose to override them.

  • New: Added a PreModifyDeploymentContext callback to the project params struct which will be invoked after the deployment context is created, but before any files are processed by the staging system.

  • New: Fixed staging chunk assignment from failing when there are case mismatches between paths in the staging manifest and the pak chunk lists.

  • New: Added ELogVerbosity to FDebug::DumpStackTraceToLog.

  • New: Added Windows SetProcPriority implementation.

  • New: Added FArchive error propagation to all proxies.

  • New: Changed how FFieldPaths are internally stored and serialized. Now instead of storing the full path from the outermost UPackage to the innermost FProperty, FFieldPaths will store the owner's UStruct reference and a short path to its property or inner property of its property. The same applies to serialization: both the owner UStruct reference and only the short path will be serialized. Serializing the owner reference will enable proper handling of any owner struct package renames as well as greatly increase the initial field resolution performance.

  • New: Added CanUseUnversionedPropertySerializationForServerOnly setting to disable UPS for dedicated servers.

  • New: Fixed a path comparison in LaunchEngineLoop.

  • New: Added a bAllowShrinking parameter to TArray::RemoveSwap().

  • New: Published UE_NODISCARD and UE_NORETURN.

  • Improvement: Improved TSet and TMap .natvis to skip invalid entries.

  • Improvement: Optimized TArray::RemoveSwap() and TArray::RemoveAllSwap() to shrink once at the end of the operation, rather than each time it removes an element.

  • Improvement: Improved delegate system comments and added pointer from DelegateCombinations.h to the proper Delegate.h header that should be included instead.

  • Improvement: Improved ResavePackage commandlet reporting.

  • Improvement: Optimized TSet::Empty to avoid a pathological case where the hash size would be large, without many elements populated in the hash set.

  • Improvement: Implemented FString equality optimizations that checks length before touching data and incurring cache misses.

  • Improvement: Optimized code in XmlFileParser.

  • Improvement: Optimized QuotedString parsing and added UTF32 <-> TCHAR string conversion macros.

  • Improvement: Added Property parsing optimizations.

  • Improvement: Optimized PackageName.

  • Improvement: Optimized SoftObjectPath.

  • Improvement: Fixed and Optimized TBitArray. Initialized unused TBitArray bits, switch to faster unsigned operator%, and don't shrink past initial allocation size operator<, == and GetTypedHash would access unused bits in the last word.

  • Improvement: Removed redundant ToLower calls which caused slowdowns when launching console while using -stompmalloc.

  • Improvement: Refactored FindField into FindUField and FindFProperty to avoid confusion caused by the fact that FindField will no longer return FProperties.

  • Improvement: Optimized TRobinHoodHashMap by changing a costly check to a checkSlow.

  • Improvement: Significantly improved MarkObjectsAsUnreachable phase of Garbage Collection performance in scenarios where there are many root objects.

  • Improvement: TBitArray fixes and optimizations. Initialize unused TBitArray bits, switch to use a faster unsigned operator% and don't shrink past initial allocation size operator<, == and GetTypedHash will access unused bits in the last word.

  • Deprecated: Deprecated TracingProfiler.

  • Deprecated: Deprecated GRenderThreadId and GRenderingThread global vars as preparation for removing the rendering thread.

  • Deprecated: Macros deprecated: FUNCTION_CHECK_RETURN_START FUNCTION_CHECK_RETURN_END FUNCTION_NO_RETURN_START FUNCTION_NO_RETURN_END.

  • Deprecated: Deprecated GRHIThreadId and GRHIThread_InternalUseOnly as preparation for removing the RHI thread.

  • Deprecated: Added a comment to use std::atomic instead of `TAtomic'.

  • Deprecated: Removed FSubobjectPtr and TSubobjectPtrDeprecated.

    • Removed deprecated FObjectInitializer functions 'CreateAbstractDefaultSubobject' and 'CreateDefaultSubobject' with a bAbstract parameter.

    • Removed deprecated FCoreUObjectDelegates StringAssetReferenceLoaded, StringAssetReferenceSaving, and RedirectorFollowed. Removed deprecated private_subobject define.

    • Removed unused EPropertyFlags::CPF_SubobjectReference.

  • Deprecated: EPowerSavingEligibilityFGraphEvent::SetGatherThreadForDontCompleteUntilFCompletonList.

  • Deprecated: Deprecated GAudioThread and GAudioThreadId in preparation for removing named threads. This allows to remove them completely in the next version and to modify IsAudioThreadRunning and IsInAudioThread functions to work correctly even without the audio thread.

  • Deprecated: Deprecated the PROJECTION and PROJECTION_MEMBER macros, replacing them with UE_PROJECTION and UE_PROJECTION_MEMBER.

  • Deprecated: Deprecated AddAtLowestFreeIndex in favor of EmplaceAtLowestFreeIndex.

  • Deprecated: Added deprecated support for Cast and CastChecked functions for FProperties to minimize compilation errors when upgrading to the new engine version

  • Deprecated: The existing StaticConstructObject_Internal has been deprecated in favor of a version that takes a parameter struct.

  • Removed: Removed legacy file profiling wrappers.

  • Removed: Removed AddFrameRenderPrerequisite and AdvanceFrameRenderPrerequisite.

Cooker

  • Crash Fix: Fixed a crash that was occurring when cooking a scene containing a runtime-generated static mesh.

  • Bug Fix: Fixed cooking without a project.

  • Bug Fix: Corrected the name of 'GetContentDirecctoryForDLC' and implemented it in terms of "GetBaseDirectoryForDLC" so that it doesn't throw an assert when building DLC without plugins.

  • Bug Fix: Fixed MapsToCook to match its documented behavior. Maps in MapsToCook will no longer be added to cook when there are maps specified on the command line using -Map or -MapIniSection.

  • Bug Fix: Fixed a bug where a substring could be replaced multiple times when path remapping is done when using COTF server.

  • Bug Fix: Fixed a bug to ensure the DDC graph used when launching a command-line cook from the editor is the same one used in the editor. While UAT will accept this argument as part of the 'Run' command, the editor/launcher does not supply this argument in those scenarios for now.

  • Bug Fix: Fixed duplicated property comment in cooker settings.

  • Bug Fix: Fixed bug where recursive directory traversal would not reach plugin or platform extension directories when using the cook on the fly server.

  • Optimization: Optimized FindTargetPlatform during cooking.

  • Optimization: Optimized Skip VerifyEDLCookInfo when cooking DLC.

  • Bug Fix: Added a warning to resave static meshes that invalidate physics when loaded. Meshes that generate the new warning need to be resaved to suppress the warning and ensure deterministic cooking. The warning text is, "Mesh {MeshName} is recomputing physics on load. It must be resaved before it will cook deterministically. Please resave {MeshPath}."

  • Bug Fix: Removed duplicated warnings when cooking.

  • Bug Fix: Fixed a bug where platform-specific raytracing data is incorrectly stripped during a cook.

  • Bug Fix: Fixed a non-deterministic cook issue with hierarchical precompiled Level Sequence data.

  • New: Cooker LoadQueue CookOnTheFlyServer now has an additional state for UE::Cook::FPackageData - EPackageState::Load. When in the Load state, FPackageData are contained in the new FPackageDataQueue LoadQueue. When processing requests, the load dependencies of FPackageData are read from the asset registry, and dependencies are inserted into the LoadQueue ahead of the requested package.

  • New: Added a diagnostic during cooking that shows the number of open file handles.

  • Added hooks for PlatformFileTrace on Mac.

  • Added tracking of open file handles in FPlatformFileTrace.

  • New: Cooker LoadQueue Preloading. Divide LoadQueue into LoadPrepareQueue and LoadReadyQueue; Packages in the LoadPrepareQueue are waiting for FPreloadableFile archives to be asynchronously opened for their Package; these archives are passed into the linker for use when loading the package.

  • New: UCookOnTheFlyServer - Refactor PackagesPendingSave into a SaveQueue.

  • New: Replaced Regex of COOKTIMER macros to all have UE_ prefix.

  • New: Changed LoadTimer & CookTimer to use a metadata field to record the package name instead of creating new scopes for the package name.

  • New: Marked save/load custom trace events as NoSync.

  • New: Included StaticSwitch and StaticMaskComponent to the cached data set and leveraged it from the UpdateParameterSet.

  • New: Added Cook insights instrumentation.

  • New: Changed DLC Mount point to be '//' rather than '/Game/' when cooking DLC.

  • New: Added a new method to the AssetManager ModifyDLCCook, which preserves the current behavior of scanning the path for all assets, however, this can be overridden for custom game DLC cooking logic.

  • New: Fixed cooking non-determinism issue related to ChildActorComponent.

  • New: Added command-line options for DisableUnsolicitedPackages and NoDefaultMaps to the Cook Commandlet.

  • New: New setting ProjectSettings -> Project -> Packaging -> Test directories to not search. This setting is similar to DirectoriesToNeverCook, except that it applies to all commandlets that enumerate assets, including the DerivedDataCacheCommandlet which populates DDC from all files on disk. This is useful for test assets or incomplete assets that are known to give errors on load.

  • New: Added an option to not populate the entire asset registry when cooking for DLC

  • Improvement: Avoided having native packages look up on disk by considering them "fully loaded" without checking if a file already exists on disk for them.

  • Improvement: Improvements to PostLoad and Serialize profiling instrumentation in the LoadTimes channel for use during a cook.

  • Improvement: Avoided scanning and sending superfluous files under the Plugins directory server during initialization.

  • Avoided requesting the same package as a .uasset and as a .umap by allowing the server to return a different file than the one that was requested.

  • Improvement: Optimizations and bug fixes to improve Cook On The Fly server iteration times.

    • Avoided performing both FileExists and GetTimeStamp operations on the same file in IPlatformFileSandboxWrapper.

    • Added Ensure for *.uasset files that are not excluded from the cached files list sent by network filesystem connection.

    • Avoided having the network file system server do two passes recursively iterating over directories to get file timestamps.

    • Fixed the network file system to handle looking for packages with FindPackageFileWithoutExtension as a .uasset file first, and then as a .umap file. If the target file already exists in the local cache as a *.umap file, then the filesystem will not ask the COTF server to cook the map again.

  • Improvement: Avoided calling UpdateStaticDrawListsForMaterials in the FMaterialUpdateContext destructor at cook time if there's no renderer that needs to be updated.

  • Improvement: Optimized cook time in large project cooks due to repeated calls to UMaterial::UpdateCachedExpressionData.

  • Improvement: Optimized large cached project cooks, by using material cached data when remapping override values to the parameters they're overriding.

  • Improvement: Avoided calling SerializeInlineShaderMaps during a save if the archive save pass is non-persistent, is an object reference collector pass, or should skip bulk data.

  • Improvement: Avoided excessive realloc and memcpy overhead when regenerating procedural foliage.

  • Deprecated: Deprecated the -DiffCookedPackage command-line argument with a warning in the log when used.

  • Deprecated: Deprecated the -dumpsavestate and -dumpsavestatebyarchetype command line support with a warning in the log when used. Please note that the aforementioned commands will be removed in a future version.

Memory Profiler

  • Bug Fix: LowLevelMemTracker fixes.

  • Bug Fix: Fixed memory leak in FLLMArray Add, a critical section to prevent simultaneous calls to UpdateStatsPerFrame from multiple threads.

  • Bug Fix: Fixed console variable usage to work on threads other than the game thread.

  • Bug Fix: Fixed use of physical memory rather than virtual memory on Windows.

  • Bug Fix: Disabled ShouldReduceThreads; it is currently used by FGenericPlatformMisc::UseRenderThread, which is defunct and crashes if it returns false.

  • Bug Fix: Fixed calculation of total memory in TrackFree which was using (int64)(-(uint32)), and getting additions of large uint32 instead of subtraction of small uint32. Fix missing critical section, header, and parent tag handling in LLM_ALLOW_ASSETS_TAGS.

  • Bug Fix: Changed Bump LLMMap in LowLevelMemoryUtils to handle a 64-bit number of allocations. When running on a large project, Cook Margin Capacity was causing the cook time to become arbitrarily slow.

  • New: Added FullClassName option to "obj list" command. If present, this will output the full pathname of each class rather than the short name.

  • New: Added FMallocFrameProfiler class to get callstack of allocation/deallocation of the same pointers in the same frame.

Network Profiler

  • Crash Fix: Network Profiler will no longer cause a crash when it's enabled before a map is loaded.

  • Bug Fix: Resized cut-off UI elements of Network Profiler.

  • Bug Fix: Fixed the "check all connections" checkbox in the networking profiler which had stopped working.

  • Bug Fix: Fixed an issue in the networking profiler where profiles with fewer than 30 frames of data could not be loaded.

UnrealPak

  • Crash Fix: Fixed a crash after removing a property from a struct while being used in a Blueprint that's also open in the Editor.

  • Bug Fix: Fixed some bad logic for calculating when padding is needed in Pak files.

  • Bug Fix: Fixed UnrealPak patch generation crash when the crypto.json file for the source data isn't explicitly specified. Core

  • Bug Fix: Fixed Crash Report Client dealing with crashes that occur very early in the process lifetime.

  • Bug Fix: Fixed async purge phase to finish with the same multithreading settings before switching multithreading off for the exit purge to prevent an assert.

  • Bug Fix: Added missing UDelegateProperty deprecation macros.

  • Bug Fix: Fixed classes that have potential thread-safety issues with their destructors when they are not destroyed asynchronously by Garbage Collection.

  • Bug Fix: Fixed disregard for the Garbage Collector pool, it no longer needs to be enabled for Garbage Collector clustering to be enabled.

  • Bug Fix: Fixed modifications to the command line using environment variables to be correctly used in PreInitPreStartupScreen.

  • Bug Fix: Enabled SEH on Clang on Windows.

  • Bug Fix: Removed the requirement for AddStructReferencedObjects to be const. AddStructReferencedObjects should not be const because GaC will attempt to null references to pending kill objects when calling this function.

  • Bug Fix: Fixed Project-specific tags from being collected When LLM tags were summarized per frame.

  • Bug Fix: Disabled permanent object pool when disregard for Garbage Collector pool is disabled due to permanent object pool objects becoming marked as unreachable and potentially becoming destroyed.

  • Bug Fix: Fixed Crash Report Client from needing full access to the process on Windows.

  • Bug Fix: Soft Object Pointers will no longer return pending kill objects in PIE.

  • Bug Fix: Fixed issue with plugin stack traces not resolving correctly in logs. This manifested as "UnknownFunction" entries in the logged stack trace.

  • Bug Fix: Fixed issue where CrashReportClientEditor would crash while exiting due to the "request exit flag" not being set.

  • Bug Fix: When defining AddStructReferencedObjects for Garbage Collector exposed structs, GC will now continue to process other UPROPERTY exposed UObject references instead of only calling AddStructReferencedObjects on that struct.

  • Bug Fix: Imported FFieldPathProperty from the text.

  • Bug Fix: Toggling TraceLog CPU channel could result in incorrect timing data. Due to mismatching begin/end events and batches that weren't flushed incorrect scopes would frequently be displayed in UnrealInsights when toggling the CPU channel on and off.

  • Bug Fix: Added Ensure for getting the correct case of project path during engine startup on the Windows platform.

  • Bug Fix: Fixed buffer overrun and static buffer reuse in crash context.

  • Bug Fix: No longer load pak verification data if pak verification is turned off, this leads to a slight reduction in memory footprint.

  • Bug Fix: Fixed a small bug in which pak verification data was being loaded, when pak verification was turned off. This is always in memory so represents a small memory gain.

  • Bug Fix: Fixed some bad logic for calculating when padding is needed in Pak files.

  • New: Moved environment command-line parsing earlier. This allows setting up for example log output using environment variables in automated scenarios.

  • New: Added Ensure fix for getting the correct case of the project path during engine startup on Windows platforms. The case will no longer resolve directory junctions at the same time as doing so can cause problems for p4 operations.

  • New: Added Ensure to the project directory so that is updated after the first time the project file path is set.

  • New: Added Support for "-ddc=default" syntax. It functions the same as omitting the "-ddc" argument, but useful for CI environments.

  • New: Refactored TFastReferenceCollector template arguments to use enum options instead of multiple bool flags.

  • New: TFastReferenceCollector now supports traversing weak pointer properties when collecting references to UObjects.

  • New: Added a callback to allow custom property types (from plugins etc) to be converted from UProperties to their respective FProperty types.

  • New: Added support for additional properties to TraceLog channels.

  • New: Cooker File IO improvements:

    • No longer check the End-of-File tag unless working in a Windows uncooked build with DO_GUARD_SLOW enabled.

    • Avoid emptying the file content buffer in FArchiveFileReaderGeneric when performing a seek but staying within our current buffer window.

    • Avoid emptying the file content buffer in FArchiveFileReaderGeneric when performing a seek outside the buffer window then a seek back into our buffer window without any read in between.

  • New: Added more debug info to ensure triggered by invalid object path when setting Soft Object Path.

  • New: Introduced additional UE_LOG statements in SavePackage.cpp.

  • New: Refactored ContainsObjectReference and ContainsWeakObjectReference so that the latter is implemented in terms of the former.

  • New: TraceLog channels now use refcounting to track enabled state. In order to easier manage enabled channels and initialization, Trace::FChannel now uses reference counting. Negative values mean the channel is disabled.

  • Improvement: Optimized Pak file indices by computing the PathHashIndex in Unrealpak rather than using strings at runtime. This removes the need to shrink the string indices for performance, which was triggering a bug due to unsynchronized multithreaded access.

  • Improvement: Garbage Collector will now use the token stream instead of serialization for TMap and TSet properties.

  • Improvement: Flipped the logic for UObject::IsDestructionThreadSafe. It will now be whitelisting classes instead of blacklisting resulting in memory and performance optimizations for async destruction of UObjects.

  • Improvement: Optimized internal Garbage Collector functions by removing inline in order to optimize compile times.

  • Deprecated: Deprecated CreatePackage(Outer, Name) and replaced it with CreatePackage(Name).

Datasmith

  • Crash Fix: Fixed a crash that occurred when importing variant data from some DeltaGen scenes.

  • Crash Fix: Fixed a crash when parsing UsdGeomPointInstancersin USD where the prototype is a reference to another primitive.

  • Crash Fix: Fixed a Datasmith Addin crash on export of Line and Curve entities with Revit.

  • Crash Fix: Fixed a crash that occurred when adding new USD layers via the USD Stage Editor window, and fixed meshes that were unnecessarily rebuilding when adding empty layers via the USD Stage Editor window.

  • Crash Fix: Fixed a crash from changing the framerate of the AUsdStageActor's imported LevelSequence after opening a USD stage.

  • Crash Fix: Fixed a crash that occurred when trying to import meshes from Cinema 4D scenes that have more than 7 UV channels.

  • Crash Fix: Crash caused by Set Convex Collision Dataprep node was fixed.

  • Bug Fix: Fixed USD PointInstancers that did not update their spawned HISM components when their prototypes were updated and the file was reloaded via the USD Stage Editor window.

  • Crash Fix: Fixed a crash that occurred when reloading a USD stage and a PointInstancers prototype path could not resolve.

  • Crash Fix: Fixed a crash when adding empty existing USD layers as references in the USD Stage Editor window.

  • Crash Fix: Fixed a crash caused by parsing USD SkelRoot meshes with interleaved triangles and quads.

  • Bug Fix: Fixed USD stage not animating when going into PIE in some scenarios.

  • Crash Fix: Fixed a crash when unchecking prim payloads on the USD Stage Editor window.

  • Crash Fix: Fixed a crash when importing a USD prim that doesn't have enough displayColors.

  • Crash Fix: Fixed a crash when importing a USD SkelRoot mesh that does not have joint weights.

  • Crash Fix: Datasmith no longer crashes when parsing VRED variant files with invalid transform data.

  • Crash Fix: Closing the USD stage or switching variants via the USD Stage Editor window no longer leads to a crash.

  • Crash Fix: Fixed crashes related to undoing a change of the metersPerUnit field on the USD Stage Editor window.

  • Crash Fix: Fixed a crash after clicking Execute button in a Dataprep asset instance.

  • Crash Fix: For OpenNurbs importer, a potential crash if the scale vector was non-uniform was fixed.

  • Bug Fix: Fixed the displacement scale for MDL files.

  • Bug Fix: Fixed an incorrect export time field in a Datasmith scene when imported from Revit.

  • Bug Fix: Fixed metersPerUnit display not resetting when closing the USD stage.

  • Bug Fix: Now shows original import options when reimporting USD assets.

  • Bug Fix: Fixed Variant Manager variants with unspecified dependencies being marked as invalid dependencies for others; fixed Variant Manager variant dependencies not being updated when the target variant has been removed.

  • Bug Fix: Fixed the blend shape and animation bugs that occurred when the same SkelRoot was referenced multiple times in the same USD stage.

  • Bug Fix: FBX Exporter now supports material instances.

  • Bug Fix: Fixed an issue where Cinema 4D objects would always use display color materials even when set to off.

  • Bug Fix: Components name collision is now better handled when importing through Datasmith.

  • Bug Fix: Corrected a wrong Normals orientation on wall entities exported from Revit Datasmith.

  • Bug Fix: Dataprep Merge and Proxy Mesh Operators no longer leave empty mesh actors in the hierarchy.

  • Bug Fix: Volumes from Boolean operations are now removed by the IFC importer.

  • Bug Fix: Datasmith now supports Opacity Mask Clip Value.

  • Bug Fix: SkeletalMesh now outputs logs with the mesh name when there is a compute tangent error.

  • Bug Fix: The Dataprep Disable/Enable function now populates the undo stack.

  • Bug Fix: The Reimport workflow for FBX from Import to Level now updates in place.

  • Bug Fix: For PLM XML, the ProductRevisions and ProductViews actors are no longer created if not present in the original file.

  • Bug Fix: Fixed the Selected Option property where Switch Actors were not capturable via the Variant Manager window.

  • Bug Fix: Fixed an issue where, in some cases, the Corona default light units conversion wasn't correct, making the lights too bright in Unreal.

  • Bug Fix: Incorrect location of spawned actors using Spawn Actors At Location no longer happens.

  • Bug Fix: Scene hierarchy from a Revit Datasmith export no longer has duplicates.

  • Bug Fix: Fixed a section length rounding error for LevelSequences imported from USD for optimized builds.

  • Bug Fix: Fixed animations that were not resetting properly when reloading the USD stage via the USD Stage Editor window.

  • Bug Fix: Dataprep no longer creates assets that cannot be moved to dataprep subfolders.

  • Bug Fix: Revit Structural Steel Connections are now exported with Datasmith.

  • Bug Fix: Incorrect names on subcomponents imported with Datasmith integrated from Dev-Enterprise no longer occur.

  • Bug Fix: Fixed the behavior of AUsdStageActor when going into and out of PlayInEditor sessions, and fixed the stage not closing when switching maps with the USDStage window closed.

  • Bug Fix: Fixed a behavior of AUsdStageActor when undoing and redoing in the editor, along with the USD Stage Editor window not updating when switching maps.

  • Bug Fix: Fixed the parent SwitchActor option switching, clearing the chosen choices of child SwitchActors; fixed child SwitchActors being able to set children as visible when they themselves are unselected.

  • Bug Fix: You can now hide USD mesh prims with the USD Stage Editor window in some circumstances; invisible meshes sometimes contributing to collapsed parent meshes when importing from USD has also been fixed.

  • Bug Fix: Fixed skeletal meshes disappearing when toggling the visibility of SkelRoot meshes in the USD Stage Editor window.

  • Bug Fix: The DataPrep Output to Folder now does a sanitize check on the name of the folder.

  • Bug Fix: Illegal characters in a texture name will now survive a Datasmith export when integrated from Dev-Enterprise.

  • Bug Fix: Fixed incorrect CineCamera transforms and parameters when importing from USD files.

  • Bug Fix: Entities in Revit exporter Datasmith scenes no longer have offsets on their meshes.

  • Bug Fix: Fixed incorrect camera transforms when opening or importing stages with Z as the up-axis.

  • Bug Fix: Fixed an issue where escaping out of renaming a prim with the USD Stage Editor window sometimes left an empty row on the prim hierarchy view; fixed updates to USD Stage Editor prim hierarchy view resetting item collapsed states; when creating prims with the USD Stage Editor window, no longer allows names that would lead to USD errors.

  • Bug Fix: It is now possible to drag and drop actors onto empty Variant Manager actor lists.

  • Bug Fix: Fixed some USD scenes from being opened purely as components of the AUsdStageActor.

  • Bug Fix: Fixed importers incorrectly traversing into USD PointInstancers when generating meshes.

  • Bug Fix: Fixed additional static mesh and components from being generated when collapsed USD prims update under some circumstances.

  • Bug Fix: Stabilized behavior of AUsdStageActor during some complex editor interactions such as undoing deletes, undoing stage changes, and map changes.

  • Bug Fix: Fixed exported CineCamera parameters when exporting levels to USD.

  • Bug Fix: Fixed an error when exporting level to USD due to incorrect CineCamera property names; improved name sanitizer when exporting USD levels.

  • Bug Fix: Fixed an issue where the PurposesToImport import option was not being saved to a config file between USD imports.

  • Bug Fix: Fixed an issue where imported USD assets were not being updated in some circumstances when reimported.

  • Bug Fix: Fixed a USD error message when trying to import AnimQuery objects of SkelRoots that do not have any SkelAnimations.

  • Bug Fix: Fixed an issue when importing a USD stage after opening it via the USD Stage Editor window.

  • Bug Fix: UE4 materials are no longer ignored when importing from an existing USD stage.

  • Bug Fix: USD PointInstancer prims no longer import with extra actors.

  • Bug Fix: Fixed mesh with partial material assignment not receiving DisplayColor materials on unassigned faces when importing USD scenes.

  • Bug Fix: Fixed USD SkelRoots not generating DisplayColor materials when imported.

  • Bug Fix: Added support for importing all USD interpolation types for displayColor and displayOpacity for SkelRoots.

  • Bug Fix: Fixed displayOpacity USD materials not being created when importing unless there's also a displayColor.

  • Bug Fix: Fixed Normals being unnecessarily discarded and recomputed in some scenarios when importing Cinema 4D scenes.

  • Bug Fix: Imported actor and component visibility now import correctly from VRED scenes.

  • Bug Fix: Improved support for parsing USD primvars as UV sets.

  • Bug Fix: Fixed the File > Reload option on USD Stage Editor window not re-reading the USD file in some scenarios.

  • Bug Fix: Fixed GeomBindTransform not being applied to imported blend shapes when importing USD SkelRoot scenes.

  • Bug Fix: Wrong Normals orientation on wall entities exported from Revit Datasmith Integrated from Dev-Enterprise no longer occurs.

  • Bug Fix: Renamed Scale to metersPerUnit on the USD Stage Editor window.

  • Bug Fix: Fixed mismatching frame rates on imported LevelSequence when the parent USD layer is not animated but the child layer is.

  • Bug Fix: Fixed USD message log messages that never cleared on sequential imports.

  • Bug Fix: Fixed displayColor interpolation support for varying mode in USD scenes.

  • Bug Fix: In the USD Stage Editor window, fixed hiding UsdGeomMesh prims that are part of SkelRoots but were having no effect.

  • Bug Fix: Fixed USD blend shapes desyncing with SkeletalMesh in some scenarios.

  • Bug Fix: Old assets no longer show up in content folders when importing USD scenes from the USD Stage Editor window.

  • Bug Fix: Fixed AUsdStageActor not loading USD stage on startup if loaded from a sub-level.

  • Bug Fix: Fixed the USD Stage Editor window not refreshing when the StageActor was destroyed.

  • Bug Fix: Fixed a behavior when opening, closing and reloading USD stages if the AUsdStageActor is in a sublevel.

  • Bug Fix: Fixed undoing an Action > Import in the USD Stage Editor window removing the dirty flag from imported assets.

  • Bug Fix: Fixed a warning when creating an import package with an invalid name when importing USD scenes.

  • Bug Fix: Fixed an issue where assets were not being generated if parsing a custom, user-defined schema when opening a USD stage, or during USD import.

  • Crash Fix: The following crashes were fixed:

    • The USD plugin no longer crashes when opening USD stages (both via USD Stage Editor as well as importing) with generated static meshes containing more than 255 material slots if the ray-tracing plugin is enabled.

    • It no longer crashes on every second reimport when reimporting USD scenes.

    • A crash that happened in some scenarios when importing the same skeletal mesh twice in a row from USD scenes no longer occurs.

    • USD materials destined for Renderman are ignored by our USD importer.

    • Fixed a crash that occurred when closing an open USD stage via the USD Stage Editor window with one of the generated static mesh components selected.

    • Fixed a rare crash when closing the USD Stage Editor window after deleting its AUsdStageActor.

  • Bug Fix: The following bugs were also addressed:

    • Fixed skeletal meshes not updating material assignments whenever the USD stage was reloaded via the USD Stage Editor window.

    • USD skeletal mesh reimports now only consider vertex positions when deciding whether the skeletal mesh was changed on disk.

    • Skeletons now import alongside their skeletal meshes when importing USD scenes in some scenarios.

    • Fixed USD importer and stage editor ignoring higher index UV sets if a lower index UV set wasn't available.

    • Now keeps intended UV set indices when importing or opening USD scenes, as opposed to always packing them sequentially.

    • Improved feedback related to UV set or primvar problems when importing or opening USD scenes.

    • Refresh metersPerUnit display on USD Stage Editor window whenever the stage is reloaded.

    • Fixed undoing USD Stage Editor stage openings, sometimes leading to duplicate components.

    • Fixed SkinnedMeshComponents generated when opening USD scenes not refreshing their render state when undoing or redoing changes.

    • Added basic editor multi-user support for USD Stage Editor (opening/closing stages, manipulation of the AUsdStageActor directly, and undo/redoing those operations).

    • Added support for sharing meshes and using material overrides when importing USD static and skeletal meshes via the USD Stage Editor window or direct import.

    • Fix bugs on USD Stage Editor related USD always converting layer file paths to lower case (especially visible if layers had absolute file paths).

    • Fixed some generated static and skeletal meshes losing their UV sets whenever the USD stage was reloaded via the USD Stage Editor window.

    • Fixed file extensions when browsing for USD files to open or save via the USD Stage Editor window on Mac.

    • Fixed a stack overflow when importing USD stages (or opening via the USD Stage Editor window) if a layer has itself as a sublayer.

    • Fixed the USD Stage Editor window to correctly remember the stage variant state between different openings of the same stage.

    • Fixed undoing a AUsdStageActor deletion with an opened USD stage that sometimes caused a component to pop out of its actor/component hierarchy.

    • On the USD Stage Editor window, visibility buttons for prims that can't be hidden via USD were removed.

    • Minor tweaks were made to the USD Stage Editor window so that column splitters can be used for the variant and variant sets panel.

    • Fixed rounding errors when parsing some types of animation curves imported from USD scenes.

  • Bug Fix: When importing an Alembic file as a Skeletal Mesh, normals will be computed for each of the generated morph targets.

  • Bug Fix: Fixed duplicate objects being spawned when importing Cinema4D scenes with instanced nodes; also fixed animations of instanced nodes not importing correctly from Cinema4D scenes.

  • Bug Fix: Fixed an issue where material instance parameters that were overridden in Unreal were not preserved during a reimport.

  • Bug Fix: Fixed mesh reimport not using tessellation parameters specified at import time.

  • Bug Fix: Improved support for lights with no attenuation when importing Cinema4D scenes.

  • Bug Fix: Fixed multiple LevelSequence bindings when importing Cinema4D scenes with instanced nodes.

  • Bug Fix: Fixed SwitchActor label incrementing twice when dragging and dropping it onto the viewport.

  • Bug Fix: An issue with Materials was fixed where material parameters were not updated when parent master material changed by reimport.

  • Bug Fix: Fixed a reimport issue where new components would be created instead of updating the existing ones in the case where the label of a component had changed since the last import.

  • Bug Fix: Improved support for the standard 3ds Max blend material. Its conversion has been updated to use the newer Datasmith UE Pbr material system.

  • Bug Fix: In MDL, fixed excessive material compilation on import.

  • Bug Fix: Removed a redundant folder creation in MDL.

  • Bug Fix: Dataprep folder import no longer creates an unexpected folder hierarchy.

  • Bug Fix: Fixed incorrect shading on LiDAR Point Cloud assets when extracted from another asset.

  • Bug Fix: Fixed a bug in the DatasmithSDK that would prevent the FDatasmithSceneImpl::Reset() function from fully resetting the scene.

  • Bug Fix: DatasmithFacadeCSharp—In C#, FDatasmithFacadeActors now stay valid after they are added to a scene.

  • Bug Fix: The scene orientation of the OpenNurbs (.3dm) Datasmith importer has been modified to match the orientation of the .FBX scene importer and of the upcoming DatasmithRhinoExporter. Effectively, this translates into a 180° rotation around the Z-axis, between .3dm scenes imported with UE4.25 and those imported with UE4.26.

  • Bug Fix: Fixed a bug in the DatasmithSDK that would prevent the Flatness property for FDatasmithMaterialExpressionFlattenNormal to be properly set.

  • Bug Fix: The failure message when trying to import huge meshes(bigger than 2Gb) has been improved.

  • Bug Fix: Fixed a bug in the DatasmithSDK when exporting an IDatasmithTextureElement with a custom Label, where the label would not be exported to the generated .udatasmith file.

  • Bug Fix: MDL: Removed a misplaced error message.

  • Bug Fix: Fix a bug when reparenting an actor during reimport did not give the proper result.

  • Bug Fix: In Dataprep, an actor nesting for Folder import was fixed.

  • Bug Fix: Fixed color- and contrast-related issues when importing LAS files containing 12-bit components.

  • Bug Fix: Fixed a bug in the DatasmithSDK that would prevent exporting 2 textures with the same file name but different paths. A suffix is now added to the conflicting file name instead of ignoring that texture file.

  • New: PLM XML now retessellates imported geometry without having to reimport it.

  • New: Improved conversion of UVs and transforms for tiling/shift coordinates when importing Rhino files.

  • New: Pivot for files imported from Rhino now set to geometry bounding box center.

  • New: Implemented a new class: UDataprepFilterTransform.

  • New: Added support for normal maps when processing UsdPreviewSurface materials.

  • New: Added support for USD on Mac.

  • New: Added support for USD Lights. The following UsdLux schemas are now supported: UsdLuxDistantLight, UsdLuxDiskLight, UsdLuxRectLight and UsdLuxSphereLight.

  • New: Support now in place for exporting and importing variant data from .udatasmith files.

  • New: Implemented Flip Face operation in Dataprep.

  • New: Implemented a Spawn Actors at Location operation.

  • New: Created a selectable material substitution table.

  • New: Added support for UsdLuxDomeLight as UE SkyLight with a cubemap for USD.

  • New: Implemented the ability to skip a step within an action node in Dataprep.

  • New: Updated the USD SDK to 20.05 with Python 3 support.

  • New: In Dataprep, you can now copy a name from an asset/actor in a content/scene preview.

  • New: Dataprep now has a wizard for custom operation and filter creation.

  • New: Regroup Add New and search bar in operators/filters tab now available in Dataprep.

  • New: Automatically synchronize selection with filter preview.

  • New: You can now implement Reference Filter Transform in Dataprep.

  • New: The USD importer will now reuse identical generated DisplayColor materials when importing USD scenes; support for generating double-sided DisplayColor materials when importing USD scenes has also been enabled.

  • New: Setting thumbnails to the Variant Manager's variant sets is now allowed, along with setting Variant Manager thumbnails at runtime with Texture2D objects. An event was added that is fired whenever Variant Manager thumbnails are updated.

  • New: Exposed access to the Variant Manager's UPropertyValue's prop segments.

  • New: The UI for the Variant Manager was updated to better separate elements.

  • New: Multiple transform animations are now combined into the same LevelSequence when importing animated DeltaGen scenes.

  • New: Some materials are now always set on the base imported mesh when importing Cinema 4D scenes, even if there are multiple overrides.

  • New: Added support for exporting materials to USD as preview surface materials with baked textures.

  • New: The USD importer now imports baked UAnimSequence skeletal animations when importing USD stages with animated SkelRoots.

  • New: Updated the Dataprep operation Spawn Actors At Location to support more asset types.

  • New: Added support for exporting SkeletalMeshes to the USD formats.

  • New: Changed USD Exporter to emit Z-up stages by default.

  • New: Added widgets to control prim kinds and purposes on the USD Stage Editor window; set root prim to Assembly kind by default when creating stages via the USD Stage Editor.

  • New: Fixed multiple bugs that occurred when adding, removing, or renaming prims in the USD Stage Editor window. Now allows adding top-level prims with the USD Stage Editor window.

  • New: Allows setting dependencies between Variant Manager variants.

  • New: Added support for parsing USDZ archives as regular USD scenes.

  • New: Now writes back the visibility of scene components to the USD stage when opened via the AUsdStageActor; fixed prims that sometimes were not hiding when toggled in the USD Stage Editor window.

  • New: Support for:

    • Exporting vertex color and opacity to USD

    • Exporting all static mesh LODs to USD as "LOD" variant sets

    • Exporting to USD multiple material assignments per LOD

  • New: Added support for importing USD Skel blend shapes as Morph Targets.

  • New: Implemented a Set Layer operation.

  • New: Disabled actor importing when importing USD scenes from the Content Browser.

  • New: It is now possible to import Alembic velocities. This is useful when the topology is not constant during an animation since Unreal cannot compute motion vectors without matching vertex pairs between frames. If the velocities are available in the Alembic file, they can be imported, and motion vectors will be deduced from them.

  • New: Removed an icon that showed when moving a node onto itself and replaced the associated message.

  • New: Datasmith now exposes a multi-process CAD import to Python.

  • New: The MDL SDK has been upgraded to 2020.1.

  • New: With Datasmith, you now have the ability to author USD xform animations in Sequencer when using the USD stage.

  • New: Import of folders has been speeded up by making use of multi-core processing.

  • New: Datasmith now supports the thin translucency shading model.

  • New: Improved support for 3ds Max Corona materials when exported through Datasmith. The following materials and maps conversion have been improved: CoronaMtl and CoronaLayeredMtl, CoronaAO, CoronaColor, CoronaNormal and CoronaBitmap.

  • New: Support is now available for display and document color when importing Cinema4D scenes.

  • New: PLM XML now accepts .xml. It also includes minor wording fixes.

  • New: Datasmith importers should now only recompute invalid normals and tangents, and leave valid ones intact, as opposed to discarding them all and recomputing the entire set.

  • New: A Navisworks exporter has been added.

  • New: Individual LiDAR Point Cloud assets no longer have a 2-billion point limit, which allows virtually unlimited amounts of points per asset.

  • New: Added support for importing and exporting point clouds in LAZ format.

  • New: Significantly improved performance (up to 80%) when merging LiDAR Point Cloud assets.

  • New: Added LiDAR Clipping Volume Actor, allowing real-time clipping of LiDAR point clouds.

  • New: It is now possible to calculate the Normal vectors for points, either for the whole cloud or for only a selection. The current model is best suited for urban and human-made surfaces.

  • New: Added support for importing point clouds in E57 format.

  • New: Significantly improved performance (up to 65%) and RAM usage (up to -80%) when exporting Point Cloud assets as LAS.

  • New: Significantly improved performance (up to 50%) and RAM usage (up to -40%) when importing LAS files.

  • New: The DatasmithFacadeCSharp is now Mac-compatible. With it, it is now possible to export Datasmith scenes in C# on Mac.

  • New: Better handling of incorrectly formatted LAS/LAZ files

  • New: Rhino Exporter is now available.

  • New: Datasmith OpenNurbs (.3dm) import now supports importing the Rhino Attribute User Text as metadata.

  • Deprecated: Deprecated the old version of the USD Importer in favor of the new module, USD Stage Importer, that shares code paths with the newer USD Stage Editor window.

  • Deprecated: Removed deprecated async functions from actors and components.

  • New: DatasmithFacadeUEPbrMaterial was added to the DatasmithFacadeCSharp. With it, it is now possible to export material graphs using the DatasmithFacade.

  • API Change: We must now use the FDatasmithFacadeScene.AddMaterial() function instead of the FDatasmithFacadeScene.AddElement() when adding materials to the scene.

  • New: FDatasmithFacadeTexture was added to the DatasmithFacadeCSharp, allowing for better customization of the exported textures.

DevTools

  • Bug Fix: Fixed incorrect quotation in VSCode configuration files thus breaking IntelliSense.

  • Bug Fix: VSCode - Stopped iterating to parent directories when the root directory is reached, as there can not be any relevant compiler options specified further up than that. Avoids reaching the root of the drive.

  • Bug Fix: Fixed an error that occurred when the ParentDirectory property was used on non-windows paths and it would iterate to the root (index out of bounds exception).

  • Bug Fix: Fixed an issue with converting UnrealTargetPlatform to a string when parsing command-line options. Added a "TypeConverter for UnrealTargetPlatform Added" check to verify if a type converter exists when parsing command-line arguments.

  • Bug Fix: Separated CppStandards into different PCHs to not mix Cpp17 with Cpp14 in the same shared PCH.

  • Bug Fix: Fixed excluded files in VsCode for foreign projects. Hid the .vscode folder as it only contains configuration files for the project itself.

  • Bug Fix: Corrected settings.json generation for single projects (VSCode).

  • Bug Fix: Added a small variance to the time the UGS scheduled sync starts (+/- 10 minutes) to avoid everyone hitting the P4 server at exactly the same time.

  • Bug Fix: Fixed VsCode error failing to find the omnisharp extension.

  • Bug Fix: A display message will now only be issued when NvAPI / AGS isn't available due to RenderDoc being enabled. Reduced the normal path verbosity to Warning from Error.

  • Bug Fix: The UAT script SyncProject can now be used outside of Perforce when syncing a project without syncing the engine.

  • Bug Fix: The RenderDocPlugin should now only prompt to find RenderDoc when not running in Unattended mode.

  • Bug Fix: The editor Perforce plugin will now sync all revisions up to the specified changelist instead of just the specified change.

  • Bug Fix: Because the RenderDoc plugin loads well before DPCVars are loaded, it was not possible to disable RenderDoc during Ray Tracing tests. Support for disabling frame trace captures via cmd line was added as a workaround.

  • Bug Fix: Fixed infinite loops for DMX blueprint events.

  • Bug Fix: For DMX, the default Protocol Name is no longer None.

  • New: VSCode Intellisense mapping has been reworked, it now creates a C++ configuration per project, with a name that makes it clearer to which target/platform/configuration the Intellisense is mapped.

    • Win64 development is still mapped for each target so run a build for it to make UHT generate the headers in the expected location.

    • The clang cpp file now specifies PCH / defines for each cpp file, which will correct occasional Intellisense errors for certain files.

  • New: Added a Perforce cstat command wrapper to the editor Perforce plugin.

  • New: Exposed AllowShaderWorkers to CVars as well.

  • New: Added the 'Res=1280x720wf' command line argument to simplify setting window resolution.

  • New: The RenderDoc plugin no longer loads when automation is not allowed to take frame traces. Loading the RenderDoc plugin is disallowed when RayTracing tests are being run.

  • New: Optimizations for DDC access on remote/slow drives.

    • Added a new 'ConsiderSlowAt' property to the 'Filesystem' DDC entries in DefaultEngine.ini. If latency to the node is greater than or equal to this value then the node will be marked as slow which disables touching and reduces file stats.

    • Added a new 'PromptIfMissing' property to the 'Filesystem' DDC entries in DefaultEngine.ini. If a path is set but not accessible, the user will be prompted and able to retry if they had to start a VPN or mount a drive.

  • New: Implemented auto mapping of Function Names to Attributes in the DMX Attribute system when parsing a GDTF file.

  • New: Added a "-Info" option for UnrealPak to dump some header information about a pak file.

  • Improvement: Disabled attempting frame trace captures when the cmd line is specified.

  • Improvement: Tweaked job scheduling in ParallelExecutor to make ISPC jobs execute early; ISPC jobs tend to run long so starting them early prevents ISPC from causing the build to take longer than necessary.

  • Improved: Updated DXC to rev. 04a84f0.

AutomationTool

  • Bug Fix: AutomationTool: Force the usage of backslashes in the *.exe path that will be set as resource 201 for BootstrapPackagedGame. The usage of slashes resulted in a part of the path being truncated by PathRemoveFileSpec which was preventing the test of local DLLs from succeeding.

  • Bug Fix: The BuildPluginCommand now properly supports non-Test and non-Shipping Game targets. The previous code prevented the DeveloperTool modules from being compiled if there were no Runtime modules in the plugin.

  • Bug Fix: Removed the [STAThread] attribute from the AutomationTool entry point as this was causing issues with some platforms' use of COM APIs.

  • New: Added CSVTools to installed builds.

  • New: Added a callback to the UAT project parameters so a script that uses buildcookrun can choose to modify the deployment context before staging.

  • New: Exposed a function from the staging code which allows remapping staged file paths based on the project remapping configuration.

  • New: Extended cooked target staging so that any programs or editor server targets are forced to Development configs, rather than what the master client/server targets request.

  • New:

    • Missing target receipts are now ignored when staging a DLC plugin. A content-only DLC plugin can now be staged using the previously-built executables from the staging of the original project.

    • Disabled chunking when staging a DLC plugin.

  • New: In UAT, added a staging option to disable the use of existing .pak files from the staging folder of other build targets, when forcing the reuse of another target's cooked data.

  • Improvement: Hardened UAT to not crash when the PATH variable contains a path with invalid characters.

UnrealBuildTool

  • Bug Fix: Fixed retry in Linux when linking batch files.

  • Bug Fix: Moved VS Code file exclusions to .ignore to fix large projects.

  • Bug Fix: Fixed a crash in ListThirdPartySoftware.Automation.cs.

  • Bug Fix: Fixed the UnrealBuildTool crashing on launch if the initialization of UnrealTargetPlatform static members variables happens out of order.

  • Bug Fix: Corrected the ConfigHierarchy parsing of negative integers. The value parsing code was not handling the "-" character so config items such as "Value=-1" would fail to parse.

  • Bug Fix: Corrected some inconsistencies with how inlining compile options were applied to the VCToolChain:

    • The CompileEnvironment variable 'bUseInlining' is now correctly applied in all configurations.

    • Enabling 'Edit and Continue' will now disable inlining for all configurations.

  • Bug Fix: Fixed IsHostOnVpn always returning false (so XGE will now be turned off when working on a VPN).

  • New: Build targets are now allowed to use config file attributes.

  • New: Added code in UBT to detect circular dependencies in module references early in the build process. This will display an error message such as: Error : Circular dependency on PhysicsCore.Build.cs detected. Route is Target -> Launch.Build.cs -> Engine.Build.cs -> RenderCore.Build.cs -> RHI.Build.cs -> (Dynamic) -> VulkanRHI.Build.cs -> HeadMountedDisplay.Build.cs -> AugmentedReality.build.cs -> MRMesh.build.cs -> PhysicsCore.Build.cs -> ChaosEngineBridge.Build.cs -> ChaosSolvers.Build.cs -> PhysicsCore.Build.cs. Break this loop by moving dependencies into a separate module or using Private/PublicIncludePathModuleNames to reference declarationsAs part of this change, all current UE4 modules with circular references have been modified to declare them and those dependencies either whitelisted or fixed if the change was straightforward.

  • New: Added an option to UBT project generation to allow users to specify include paths to be omitted from project files. This speeds up parsing, reduces the memory footprint, and allows irrelevant symbols to be excluded from IntelliSense suggestions. Example usage in BuildConfiguration.xml: ThirdParty\WebRTC;ThirdParty\PhysX Example savings - Adding ThirdParty\PhysX = 47% vcproj reduction (28MB -> 15MB) Adding ThirdParty\ = 61% vcproj reduction (28MB -> 11MB)

  • New: Added Thread_UseAllCpuGroups to the UnrealBuildTool config to enable UBT to use both CPU groups on high-core systems such as 64-core ThreadRippers.

  • New: Performance improvements to SN-DBS integration in Unreal Build Tool:

    • Switched to the json interface and removed local task execution, allowing all task scheduling to be handled by SN-DBS.

    • A full engine rebuild demonstrated an improvement of ~40% vs the previous implementation on a network with 4 worker agents.

  • New: Added a minor fix for the bCreateHotPatchableImage property setter which ignored the requested value.

  • New: Exposed a function to clear plugin and directory caches. If new plugins are created by the owning UAT script, then they can be ignored because they weren't there when the directory/plugin availability information was cached.

  • New: When generating visual studio project files, projects with multiple editor targets will now use the default editor target config setting, if it exists, to determine which editor target should be added to the main project file. All others will generate separate projects inside the VS solution.

  • New: Clang 10 is now the default for Windows Clang configuration.

  • Improvement: Turned off parsing of platform data that fails for disabled plugins during project generation.

UnrealGameSync

  • New: Added a "View in Swarm…" command to the contextual menu for changelists.

UnrealHeaderTool

  • Bug Fix: UHT will now correctly parse an implemented interface class function declaration that includes one or more TSet/TMap parameters.

  • Bug Fix: Added a static assert to detect that inherited UStructs are not polymorphic unless basestruct is also polymorphic as this is currently not supported by the reflection system.

Editor

  • Crash Fix: Fixed a crash in the P4 Source Control plugin when parsing the history of an asset that was deleted, then added back.

  • Crash Fix: Fixed crash when issuing the Console command stat none.

  • Crash Fix: In multiplayer, you can reload your level in-game.

  • Crash Fix: Fixed a crash that occurred when resetting the layout.

  • Crash Fix: The Level Editor no longer crashes when adding a new level.

  • Crash Fix: Duplicates are filtered out when gathering Source Control states, preventing a crash when syncing Editor data.

  • Crash Fix: Fixed a crash on Undo and Redo actions when the Preview Material source instance is null.

  • Crash Fix: Cancelling a transaction now cancels the entire transaction instead of a part of it.

  • Crash Fix: The tutorial closes when the Editor window is closed.

  • Crash Fix: Updated ObjectTools where we de-referenced an Editor transaction without checking its validity. This caused a crash when using these functions from commandlets.

  • Crash Fix: Fixed an issue where canceling the PIE multiplayer client while loading would cause a crash.

  • Crash Fix: Fixed an issue with scripted toolbar buttons where implementing IsVisible or CheckState functions would cause a crash because no UFunction was allowed.

  • Crash Fix: Fixed a crash when calling CanSelectActor on an actor that is not in a Level.

  • Crash Fix: Fixed an issue where newly-created redirectors would be garbage-collected before being renamed, causing a crash.

  • Crash Fix: Fixed a crash when opening a recent level that had changed to a redirector.

  • Crash Fix: Fixed a crash when trying to restore a package at startup that no longer exists.

  • Crash Fix: Fixed a crash when following tutorials that opened the Modes tab.

  • Crash Fix: Fixed an Editor crash when toggling to full screen after a layout change.

  • Crash Fix: Fixed a crash where SPropertyEditorInteractiveActorPicker was trying to deactivate a mode that was not active.

  • Crash Fix: Fixed a crash when an Asset is deleted inside the Save As dialog.

  • Crash Fix: Fixed an issue where re-importing a SpeedTree that had its original materials removed from the Project caused a crash.

  • Crash Fix: Fixed a crash with the transactional temporary UI stub object.

  • Crash Fix: Fixed a crash when re-importing a Skeletal Mesh with new bones that had animations using that skeleton.

  • Crash Fix: Fixed a crash when re-importing a Skeletal Mesh that failed to re-import.

  • Crash Fix: Fixed an Editor crash during multi-user editing when using the Retopologize Tool.

    • Fixed the file sharing service to gracefully handle the case where the file containing the list of active processes using the service failed to open or save.

    • The service will only delete the expired files after one hour, rather than removing the entire shared folder.

    • Fixed the recovery service being killed on Editor exit.

  • Crash Fix: Fixed crash when syncing out-of-date Assets in the Editor if a dependency package was not found.

  • Crash Fix: Fixed a crash when the frame rate was zero in the animation timeline.

  • Crash Fix: Fixed an issue where the Editor crashed if the package path being passed to Map Load was a redirector, such as the EditorStartupMap.

  • Crash Fix: Fixed an issue where removing a Level from the world would cause a crash if actors in that level were selected inside the Hierarchical Level of Detail (HLOD) Outliner.

  • Crash Fix: Fixed an issue where accessing certain static functions caused a crash due to the EditorStyle module not being loaded first.

  • Crash Fix: Fixed a crash on auto-save when a Hierarchical Level of Detail (HLOD) Actor was manually deleted from the HLOD Outliner.

  • Crash Fix: Fixed a crash when importing an FBX file containing degenerate tangents or invalid meshes.

  • Crash Fix: Fixed a potential crash when force-deleting textures or materials used by BSP geometry in the current Level.

  • Bug Fix: MessageBus: Fixed infinite message sending when sending a direct message to a combination of local and remote recipients.

  • Bug Fix: Fixed initialization for UInstanceStaticMeshComponent after an owning actor Blueprint compilation.

  • Bug Fix: Fixed the mesh paint adapter so it handles larger meshes.

  • Bug Fix: Undo/Redo actions now work after adding a Component to an Actor, when the Component name was scrolled out of the view while still being edited.

  • Bug Fix: - USplineComponent::ClearSplinePoints now updates its SplineMetadata - SplineComponent.

  • Bug Fix: Fixed the text location in HiDPI.

  • Bug Fix: Restored child Editor windows now display their name.

  • Bug Fix: The JSON data table import now respects the Ignore Extra Fields option.

  • Bug Fix: In the Content Browser, the Asset file path is no longer cleared in the Editor after cancelling and closing the browser.

  • Bug Fix: When using Force Delete, the selection change is now detected.

  • Bug Fix: Vertex data statistics now update in Mesh Paint mode.

  • Bug Fix: Painting is no longer permitted on textures with an unknown number of bytes per pixel.

  • Bug Fix: Updated CSV import factory to prevent setting the import path to an empty string when importing text directly

  • Bug Fix: The Play dropdown menu now reflects the correct value for the number of clients.

  • Bug Fix: Fixed several issues with Editor UI interaction when using single-process multiplayer mode, and fixed the client number in the window name to always match the log client number.

  • Bug Fix: Updated Class Viewer to allow unloaded Editor-only classes.

  • Bug Fix: Updated Level Editor floor snapping to properly ignore all Actors in a group selection.

  • Bug Fix: Fixed nodes that were placed in unexpected locations on Material, Blueprint, and Niagara graphs.

  • Bug Fix: Broadcast Camera Moved event when the user jumps to a Bookmark in Editor.

  • Bug Fix: The selected Actor and corresponding Details panel now transfers to the current PIE or SIE instance when starting the session.

  • Bug Fix: Fixed legacy world rename handling, avoiding potentially renaming map build data with the name of an existing build.

  • Bug Fix: In the Perforce plugin, you can now use the command, -P4Passwd cmd , when connecting to Perforce.

  • Bug Fix: Fixed FName and exponential behavior when fixing up Meshes with many duplicate material names.

  • Bug Fix: When using Replace Actor, the mobility of the original Actor is retained.

  • Bug Fix: The Details panel no longer attempts to select separator nodes, which resulted in an invalid selection.

  • Bug Fix: Fixed viewports getting stuck upside down after orbit because of pitch locking.

  • Bug Fix: The Message Log now uses a fixed size font, and duplicate tooltip text was removed.

  • Bug Fix: User configuration is now preserved across package copies. Copying a package no longer causes packs like StarterContent to re-import and overwrite changes.

  • Bug Fix: Disabled editing of data table rows in the composite data table editor since changes are not saved.

  • Bug Fix: The SVN connection log message has been rewritten.

  • Bug Fix: Properties that have subcategories specified for them and have the ShowOnlyInnerProperties metadata flag now display correctly.

  • Bug Fix: World subsystems now initialize after a map rebuild.

  • Bug Fix: When Class Viewer is refreshed, it now scrolls to the selected item.

  • Bug Fix: The Parameters menu size has been clamped to no longer appear larger than the screen, also preventing flickering.

  • Bug Fix: When resetting Transform from the Details panel, the Transform of the rendered instance updates correctly.

  • Bug Fix: When resetting Curve Atlas Row, the row value resets correctly and no longer locks the user out of editing the value.

  • Bug Fix: Fixed PropertyEditor argument names for clarity and consistency.

  • Bug Fix: In the Details panel, the spacing of Float Curve Asset widgets was fixed.

  • Bug Fix: If the index is greater than the default array size, you can now export the last item of an array containing default values.

  • Bug Fix: There is no longer a prompt to save content when the user has bUseSingleProcess turned off, regardless of whether or not their PIE session was occurring in a separate process.

  • Bug Fix: When invoking CodeLite, a path name that includes spaces is now recognized correctly.

  • Bug Fix: PIE session windows now open with the correct Multiplayer Viewport Size setting found in Editor Preferences.

  • Bug Fix: Fixed an issue with Source Control submitting Project files.

  • Bug Fix: Updated Asset Picker to simultaneously show the filtered menu and hide the Search field.

  • Bug Fix: StatsRender no longer overlaps when using a custom LegacyFontSize.

  • Bug Fix: The MeshSimplifier & ProxyLODPlugin plugins were updated. The ProxyLOD plugin no longer generates uninitialized vertices at the end of the vertex buffer.

  • Bug Fix: The Editor analytic now correctly accounts the computer hibernation time as idle time.

  • Bug Fix: Updated Socket Manager to correctly adjust for DPI scaling. It no longer moves to the corner of the screen.

  • Bug Fix: In a VR PIE session, only the first viewport is marked as stereo-capable.

  • Bug Fix: When joining a multi-user session with in-memory change, the notification message has been rewritten for clarity.

  • Bug Fix: Moving an Actor to a World Outliner folder now created the proper transaction.

  • Bug Fix: Allow parsing of complex and localized numbers when emitting change events from SNumericTextBox.

  • Bug Fix: Fixed Level Details that were not using all of the space in its panel.

  • Bug Fix: Class Viewer now retains its selection when losing focus.

  • Bug Fix: Edit conditions now work correctly with fixed-sized C arrays.

  • Bug Fix: Fixed Class Viewer selection of unloaded Blueprint classes.

  • Bug Fix: Added partial Perforce state support for Move and Delete actions and Move and Add actions.

  • Bug Fix: Fixed a grammar mistake in the FBX Scene Import dialog.

  • Bug Fix: Changed Python3 TCHAR to PyApiChar(wchar_t) for platforms where wchar_t is 4 bytes.

  • Bug Fix: Fixed an issue where double-clicking a water mesh would cause a run-time error if the engine was compiled from source.

  • Bug Fix: Editor actions that try to focus a particular tab, like Blueprint debugging, will always work, even if the window is minimized.

  • Bug Fix: Fixed an issue where the Show in Explorer menu was not working properly for plugins in the Content Browser folder tree.

  • Bug Fix: Fixed an issue where displaying multiple instances of the InstancedStaticMeshComponent caused a long UI refresh. Now, if there are more than 512 instances (controlled by CVar r.Editor.MaxNumInstancesDetails), a performance warning displays with a button to show or hide instances per user preference.

  • Bug Fix: Fixed a thread safety issue in Perforce integration.

  • Bug Fix: Fixed the map-built data not being saved when closing a Level due to a save prompt re-entrance guard.

  • Bug Fix: Fixed an issue where changing the preview rendering level to Android and creating or opening a new Level would cause a mismatch between the tool button status and the feature Level.

  • Bug Fix: Fixed an issue where clicking the Clear option for a Streaming Volume was not working correctly.

  • Bug Fix: Fixed an issue where CreateNewStreamingLevel would try to load a streaming level of abstract type, causing an error.

  • Bug Fix: Fixed source control errors during rename of a file open for an add operation.

  • Bug Fix: Fixed the unsafe cast of IAssetTypeActions to FAssetTypeActions_Base

  • Bug Fix: Fixed an issue where opening the Landscape Spline Tool would cause a run-time error if the engine was compiled from source.

  • Bug Fix: Fixed a memory leak in SDetailsView when it was refreshed while not visible.

  • Bug Fix: Fixed an issue where a redirector was being saved as a .uasset instead of a .umap if the file did not exist.

  • Bug Fix: Fixed an issue where users were able to create a new streaming layer with a streaming distance of 0 when distance streaming was enabled.

  • Bug Fix: Fixed a bug where resizing the Content Browser was not updating the hit detection correctly.

  • Bug Fix: Closing a menu now releases the memory taken by the menu widget.

  • Bug Fix: A 1.0 vertices/triangles reduction will now correctly reduce the mesh if the source model has more vertices/triangles than the MaxNumOfVertsPercentage/MaxNumOfTrianglesPercentage value.

  • Bug Fix: Fixed an issue where the ChildActorComponent was not properly previewing in the editor.

  • Bug Fix: Fixed an issue where a column customization passed to the PropertyTable widget was ignored.

  • Bug Fix: Fixed an issue where re-importing a Static Mesh with custom LODs would result in the LODs to have incorrect materials assigned to their sections.

  • Bug Fix: Fixed a crash when moving the mouse during LOD generation. Some UI delegates were not unbound properly.

  • Bug Fix: Fixed Editor Analytics sessions not correctly reporting bIsLowDriveSpace field.

  • Bug Fix: Fixed an issue where importing a Skeletal Mesh with custom LODs and no skinning was resulting in incorrect remapping of the bones.

  • Bug Fix: Fixed an issue to ensure that the Skeletal Mesh source data supports 16 bits of materials to be on par with the render data.

  • Bug Fix: Fixed an issue where screen messages were displaying when GAreScreenMessagesEnabled was set to False.

  • Bug Fix: Fixed an issue where the Mesh Bone Reduction would use a fixed InfluenceIndex, instead of the MAX_TOTAL_INFLUENCES.

  • Bug Fix: Fixed the Editor Analytics so it reports a project name by concatenating UGeneralProjectSettings::ProjectName and FApp::GetProjectName().

  • Bug Fix: Fixed an issue where re-importing a Skeletal Mesh would result in the values of Use High Precision Tangent Basis and Use Full Precision UVs to be reset in the Skeletal Mesh asset.

  • Bug Fix: Fixed an issue where the Editor would check for a pre-existing realtime override on viewports when doing a blanket removal.

  • Bug Fix: Fixed an issue where the Project Creation dialog would display a blank selection for the Starter Content option if the Feature Packs folder was unavailable.

  • Bug Fix: Changed the sharpening method for mask textures so that each color channel is processed separately.

  • Bug Fix: Fixed an issue where Instanced Static Meshes (ISM) were not initializing properly after a Blueprint re-instance.

  • Bug Fix: Fixed an issue where an old reduced Skeletal Mesh asset with a disabled section would not keep the disabled section state after a re-import.

  • Bug Fix: The Actor Picker Mode now gets disabled when the Editor loses focus. This prevents the Unreal Engine tooltip from rendering over the top of other applications.

  • Bug Fix: Fixed an issue in the Static Mesh Importer where it would use the FBX bounding box to test if the mesh was too small to be imported. Now, it correctly multiplies the mesh bounding box by the node global scale transform to test the real bounding box size.

  • Bug Fix: Fixed an issue to prevent a FBX node name clash when not keeping the namespace.

  • Bug Fix: Fixed an issue where using USkeletalMesh::ReleaseResources would use the FlushRenderingCommand in PIE tick.

  • Bug Fix: Fixed an issue where screen warnings were displayed even when bSuppressMapWarnings was set to False.

  • Bug Fix: Fixed an issue where an old package was not properly deleted when renaming a package.

  • Bug Fix: Fixed crash on map load when world legacy rename handling was renaming over other existing maps.

  • Bug Fix: Fixed level streaming volume properties so they can be cleared.

  • Bug Fix: Fixed an issue where the Skeletal Mesh was being rebuilt every time the LOD settings were changed in the Persona Editor.

  • Bug Fix: Fixed source control checkout errors when a package is saved. Errors will no longer appear if the file is already open, or being renamed.

  • Bug Fix: Fixed an issue where the Editor transaction buffer was being cleared when hiding levels.

  • Bug Fix: Fixed an issue with the transaction system in the Editor where intermediate transactions would record incorrect information due to using a different serialization algorithm.

  • Bug Fix: Fixed an issue where the message dialog would appear after a FBX import if no import error was found.

  • Bug Fix: Fixed an issue where the last item of an array would not export if it contained default values and the index was greater than the default array size.

  • Bug Fix: Fixed an issue where Actors with Editor-only Static Mesh components or components with no Static Meshes assigned were being included in the Hierarchical Level of Detail (HLOD) generation.

  • Bug Fix: Fixed issue causing some actors with multiple static mesh components to be excluded from the Hierarchical Level of Detail (HLOD) generation.

  • Bug Fix: Fixed an issue where selecting a spline point in one viewport and manipulating that point in another would result in the entire spline component being transformed, instead of the selected spline point.

  • Bug Fix: Added a fix to ensure that the Editor style module is loaded before calling its static functions from MeshPaintMode.

  • Bug Fix: Fixed an issue that caused invalid material baking in Hierarchical Level of Detail (HLOD) meshes when using the option 'Reuse Mesh Lightmap UVs' on mirrored (negative scale) meshes.

  • Bug Fix: Fixed incorrect DPI scaling of the selection box inside the LiDAR Point Cloud asset editor.

  • Bug Fix: Fixed an issue that occurred when attempting to convert a procedural mesh component without materials to a static mesh. If no material is assigned, the new static mesh will now use the default material.

  • Bug Fix: Fixed an issue where newly created Hierarchical Level of Detail (HLOD) packages that were only present in memory, did not appear in the Save All dialog.

  • Bug Fix: Fixed an issue in the Hierarchical Level of Detail (HLOD) volumes caused by overlapping meshes with offsets from their origins.

  • Bug Fix: Removed unneeded UV sets generated for Hierarchical Level of Detail (HLOD) meshes.

  • Bug Fix: Fixed an issue where a code-less project would fail to compile after adding a feature pack.

  • Bug Fix: Fixed multiple UV remapping issues in merged meshes created by the Hierarchical Level of Detail (HLOD) system.

  • Bug Fix: Added the Hierarchical Level of Detail (HLOD) results to the Message Log user interface.

  • Bug Fix: When adding the first C++ class to a source-less project, the internal UBT target name is now correctly set to the default Editor target name for the project.

  • New: Removed cast to SceneComponent when drawing component visualizer HUDs in the Blueprint editor. Actor component visualizers can also draw to the HUD.

  • New: Added BLUTILITY_API to UEditorUtilityWidgetBlueprint.

  • New: Loaded and on-disk gather functions for external actors are now split.

  • New: When requesting a PIE session, an open PIE transaction is now cancelled and the user notified, instead of preventing the PIE session entirely.

  • New: Added list of real-time overrides for level viewports. Previous APIs were deprecated or renamed to better indicate that a list of overrides is keyed to a system name. A system name is now required to ensure the caller removes the override they actually want to remove. This solved the problem where various systems added or removed real-time overrides in interlocked ways, especially when starting or stopping a PIE session.

  • New: Broadcast OnActorMoved for all Move and Snap Editor actions.

  • New: Added Package class filters similar to transaction class filters in multiplayer mode. This allows the Editor to filter package save from an asset type and/or a folder path. When a package is filtered out, the package event is not sent out to the server and the file is locally persisted instantly.

  • New: On Windows, handled WM_ENDSESSION message to detect the user logging off the system, calling the core delegate OnUserLoginChangedEvent to notify the event.

  • New: Pasting properties in a Details panel now retains the existing item expansion state, when possible.

  • New: Added the Rendering Hardware Interface (RHI) to the Editor analytics summary session.

  • New: Made an improvement to avoid memcopies in MergeFlattenedMaterials.

  • New: Level Play Settings now include Logical Resolution and Content Scale for device profiles.

  • New: User-defined filters are now allowed in the Open Blueprint Class dropdown menu using View Options.

  • New: When duplicating levels for PIE, Actors are duplicated instead of loaded from disk.

  • New: Class Viewer filters match with cpp-prefixed Search text.

  • New: Added Editor Utility version of Tool Menus for Blueprints in the Editor.

  • New: When all items are filtered from the Details panel, a message displays indicating that there are active filters.

  • New: Improved Scale to Fit Zoom mode in Texture Editor.

  • New: Added the display of native component names in the Simple Construction Script tooltip.

  • New: Added Mesh CSG operations (union, intersect, subtract, and a self-union to resolve self-intersections) to the modeling tools.

  • New: Code templates can now be easily added to Plugins using the UClassTemplateEditorSubsystem. Class template .h/.cpp files can be added to the plugin's Content/Templates subdirectory. By implementing a child class of UPluginClassTemplate in a plugin's Editor module, developers can override the default code UClass generation of their given class provided by the Class Generation Wizard.

  • New: Added the ability to bundle commands in the Keyboard Shortcuts menu.

  • New: Added a contextual menu when there is no valid selection that allows you to select all Actors or place an Actor.

  • New: The DisplaceMeshTool was updated. Multiple layers of Perlin noise can be combined. For each layer, the user can specify the frequency and amplitude. A new option was added to apply the offset only to vertices with normals pointing in a given direction.

  • New: Category expansion state in the Details panel is now restored after clearing the Search bar.

  • New: FMouseDeltaTracker can be exported from a DLL.

  • New: Always Center Window to Screen checkbox is now disabled by default.

  • New: The last known size of the PIE window is saved.

  • New: Added procedural animation support to the Data Charts plugin. This allows growing and collapsing data charts based on user events.

  • New: Added the bAvoidRelabelOnPasteSelected option to avoid relabeling Actors when pasting them.

  • New: Made all linked instancing context pointers pass as constant.

  • New: PIE sessions that launch a new standalone window no longer double render debug safe zones and all PIE options are more consistent when handling r.DebugSafeZone.XXXX cvars.

  • New: The following fields were added to Editor analytics:

    • bIsUserLoggingOut detects when the Editor closes because the user logged out.

    • bIsCrcExeMissing detects if the user compiled CRC.

    • SessionTickCount detects if the Editor ticked.

    • UserInteractionCount detects if the user interacted with the Editor.

    • MonitorTimestamp gets the approximate time of crash of CrashReportClientEditor.

  • New: Loading an Editor layout keeps the displayed asset sub-editors open. If PIE or SIE is open, the Editor displays a warning to prevent loss of work, and if the user accepts, it will close PIE and load the desired layout.

  • New: Added a Blueprint Editor option for short tooltips.

  • New: In Editor Preferences, added Minimum Orthographic Zoom option to the Level Editor - Viewport settings.

  • New: Added Title Property meta support to arrays of Instanced UObjects.

  • New: Common pin action menu items in the Graph Editor were moved to the Base Graph Editor.

  • New: In the Graph Editor, the Tab key opens the contextual menu to create a node at the current mouse position.

  • New: Details panel dropdown menus for Enums and other items now display a Search field if there are more than 20 items. This threshold can be changed for a custom property dropdown menu using the new FPropertyComboBoxArgs structure.

  • New: Files created by the Editor for a new C++ class can be put into subfolders.

  • New: Mouse panning was added to the Texture Editor.

  • New: Added spline point fast selection buttons to the Spline component Details panel.

  • New: Added an optional background Brush setting for all Graph Editors.

  • New: Replace references now considered subclasses of DataTable to be compatible, including CompositeDataTable.

  • New: Added the option to make BoundsCopyComponent usable outside of RuntimeVirtualTextureVolume and made it Editor-only.

  • New: GeometryProcessing library updates:

    • Added copy Boolean improvements from Main.

    • Added a catch out-of-range search tolerance in MergeCoincidentMeshEdges.

    • Added TMeshSimplification::SimplifyToMinimalPlanar, which simplifies flat areas of the mesh only.

    • Enabled the GeometryProcessing plugin for Runtime use.

  • New: Made the spline point details show up first in the Details panel of a Spline component.

  • New: We now allow a SaveConfig to not update the class default object.

  • New: Added a maximum number of debug strings per actor for AddDebugText in the HUD to avoid long frames when possessing the player after having ejected from it in PIE.

  • New: The Gameplay tags are now saved to a separate configuration file to improve performance of the main Editor configuration file.

  • New: Made the UDP Messaging Module add and remove static endpoint functions thread-safe.

  • New: Made the FBX Scene Importer accessible in Python.

  • New: You can now call SetLODGroup directly in Blueprint and Python to set a static mesh LOD Group.

  • New: You can now set all material properties directly in Blueprint when importing a material.

  • New: The Place Actors panel now allows filtering by the native class name as well. For example, PointLight is now a valid search term for the Point Light item.

  • New: Added the export flag to UK2Node_GetSubsystem.

  • New: Added the ability to import and re-import custom LODs directly in Blueprint and Python by adding functionality to EditorStaticMeshLibrary and EditorSkeletalMeshLibrary.

  • New: Added an option to downscale textures without Mips to allow for texture compression.

    • Accepts values between 1.0 and 8.0.

    • Can be overridden per-platform, for a specific texture or texture group.

    • Downscaling will keep texture size divisible by 4 so they can still be compressed

  • New: Added the new console command stat framecounter to see the overlay of the GFrameCounter that increments for every frame.

  • New: Added improvements to the Editor analytics.

    • Added WasDebuggerIgnored Editor summary event analytic fields.

    • Updated the save frequency on Windows from 1 minute to 30 seconds.

  • New: SpeedTree assets can now be imported using automated imports.

  • New: Updated the tooltip and display name for the Editor preference LogTimestampMode to make it clear that it affects the Output Log Window, and not the log file itself.

  • New: Added a delegate that allows developers to add widgets to individual property rows in the details panel via C++.

  • New: Added improvements to the Editor analytics

    • Added the filtered Editor command line to the Editor summary analytic event.

    • Added the engine tick count to the Editor summary analytic event.

    • Added the engine last tick timestamp to the Editor summary analytic event.

    • Added the Editor death timestamp as captured by CRC to the Editor summary analytic event.

  • New: Made the Static Mesh reduction options available directly in Blueprint and Python.

  • New: Users are now able to set the AssetImportData source file directly in Blueprints and Python, in addition to C++.

  • New: Added a Max Vertices/Triangle option to the skeletal mesh reduction options in addition to the current Percent Vertices/Triangle. This allows the user to enter a percentage while still keeping a budget limit.

  • New: Reduced the memory used when building textures.

    • Reduced the maximum memory usage when importing 16k PNG textures from 12 638 MB to 8 885 MB (Delta from before the import).

    • Allowed the function ITextureCompressorModule::GenerateMipChain to reuse the BaseMip when possible instead of generating another intermediate texture of the same size as the BaseMip.

    • When compressing the texture, the compressed texture is moved to the output instead of being copied.

    • Added some moves instead of copies in the CompressImage function of FTextureFormatUnCompressed.

    • Avoided an unnecessary copy in the CompressImage function of FTextureFormatDXT.

  • New: Added Editor settings to avoid Actor relabel on paste.

  • New: Added GRHIName to the Editor Analytics summary report.

  • New: The DumpPrimitives command creates a CSV file of visible primitives in the Logs folder.

  • New: Added a Voxel Solidify tool to the Mesh Modeling Toolset that turns mesh inputs into solid meshes by running marching cubes on the fast winding number of the mesh. In addition, added an option to pre-process other voxel tool inputs with a solidify pass to make them work more easily on bad inputs.

  • New: Added option to focus the viewport on the selection when inside the LiDAR Point Cloud Asset Editor.

  • New: The meta flag GetOptions now handles TArray as well. In addition, added support for multiple selected items.

  • New: Minor update to Editor target selection on launch to account for the possibility of default targets living in the engine.

  • New: Improved the built-in menu searching so it now filters options with more consistency. In addition, the search box now allows for actions such as copying and pasting as well.

  • New: Added a TArray64 overload to FImageUtils::ImageResize for working with pixels already in linear space.

  • New: Made the multibox search filter reset on gaining focus.

  • New: Added a new hyperlink to the Project root folder that appears when the Project has completed the zipping process. This notification now appears for a longer period of time to give the user more time to click on the hyperlink.

  • New: Replaced the Wiki option in the Editor Help menu with Online Learning.

  • New: Added new spline component options for selected spline points: Snap To Actor, Align to Actor and Align Perpendicular to Actor.

  • New: Hierarchical Level of Detail (HLOD) actors can now be saved to the HLOD packages.

    • Added a Save LOD Actors To HLOD Packages project option, which will cause all properties necessary to rebuild LODActors from scratch to be saved in the _HLOD packages.

    • When loading a level in the editor, the LODActors from the level are destroyed and new (transient) actors are spawned from the content of those packages. This extra processing isn't performed in cooked builds as LOD actors are recreated one last time during cooking.

    • The HLOD rebuild commandlet will avoid submitting the level itself and will now only update its associated _HLOD packages.

  • New: Added an option to create transient actors in EditorLevelLibrary.

  • New: Updated disaster recovery icons.

  • New: Projects now use the default editor target configuration setting, if specified, to determine the name of the editor target file for startup re-compilation purposes.

  • New: Added hotkeys to reset spline point tangents in the spline component. With a spline point selected, pressing T will reset the tangent to the default unclamped value, while pressing Shift-T will reset the tangent to the default clamped value.

  • New: Added Snap To Last Selected Axis options to the spline component. In addition, modified the option Snap All to Selected Axis to set the spline point to Auto so tangents are automatically adjusted.

  • New: Added post-process calibration materials for display calibration. Materials are set in Project Settings with show flags for visualizing materials full-screen when calibrating.

  • New: Added spline component functions SetScaleAtSplinePoint and SetRotationAtSplinePoint.

  • New: Added the concept of EditorUtilityTasks. These tasks are long running operations that can be queued to execute as soon as the previous task finishes.

  • You can create and customize your own tasks by extending the base class and can run a task by simply calling RunTask .

  • New: Introducing a new optional plugin called Asset Search. Its job is to index different asset types and store an indexed set of searchable data in a local SQLite database.

  • This plugin complements the Content Browser search by adding the ability to search for tags and phrases that appear on any asset in the project. In addition, it can be extended to support new asset types in your project or plugin.

  • New: Splines: Changed Alt-drag behavior when dragging off spline endpoints. The attached segment will be split if the drag direction is within 60 degrees of the segment rather than always creating a new point.

  • New: Splines: Added Editor Preferences for spline hit proxies to adjust point size, tangent handle size, line thickness and tangent scale.

  • New: Added a configuration value to determine if the asset registry scanner should gather data on cooked packages that it didn't find an asset export for. Defaults to TRUE to match existing behavior.

  • New: Added the failed assert error message that terminated the Editor to the Editor session summary analytic event.

  • New: The ResavePackages commandlet can now customize its garbage collection frequency via the command line GCFREQ=??? where ??? is how many packages should be resaved before a garbage collection is run.

  • New: Point selection within the LiDAR Asset Editor can now be inverted.

  • New: During advanced copy, don't reparent and recompile a Blueprint unless the parent changes, and don't reparent any Blueprints in the restricted list.

  • New: Improved performance of tangent generation when building Static Meshes after import, or when modified in the Static Mesh Editor.

  • New: Added Tangent Color property to spline components.

  • Improvement: Increased write performance for the .ini configuration files.

  • Improvement: Loading an Editor layout now leaves the open Asset sub-editor open. If either PIE or SIE is open, the editor will warn the user and once accepted, it will automatically close PIE or SIE and load the desired layout. This alert notifies the user of potential loss of work.

  • Improvement: A Project user can set their own default layouts for a selected Project. Each Project can have its own DefaultEditorLayout.ini file, which opens the first time a Project is opened and overrides the default engine layout found in Engine/Config/BaseEditorLayout.ini.

  • Deprecated: Deprecated the duplicated IBookmarkTypeTools functions that were inside FEditorModeManager.

  • Deprecated: The SnapGrid macro definition. Going forward, use the UEditorStyleSettings::GridSnapSize config.

  • New: The property Collision Accuracy has been renamed to Max Collision Error to better reflect its intent. Going forward, references to ULidarPointCloud::CollisionAccuracy should be updated to use ULidarPointCloud::MaxCollisionError instead.

Content Browser

  • Bug Fix: Fixed it so object properties marked AssetRegistrySearchable — such as DataAsset native class — properly show in the content browser.

  • Bug Fix: Initialized asset view search options in content browser so that they don't need to be toggled in the active session to take effect.

  • Bug Fix: Changed SizeMap to use the standard FText::AsMemory function.

  • Bug Fix: Fixed a bug when reloading unsaved packages.

  • Bug Fix: Added a fix to prevent Delete Assets Dialog from compiling every blueprint when you open the Replace References drop down.

  • Bug Fix: Fixed the Skeletal Mesh assets vanishing thumbnails, caused by incorrect bounds calculation of empty Chaos Cloth simulations.

  • Bug Fix: Fixed an issue where the Content Browser was not showing the newly created asset after merging LiDAR Point Clouds.

  • New: Added support for extensible data sources for the Content Browser:

    • UContentBrowserDataSource is the common implementation of a "do nothing" data source for the Content Browser. You can derive from this type to create new data sources for the Content Browser, overriding any required functionality and validation logic.

    • See UContentBrowserAssetDataSource and UContentBrowserClassDataSource as an example.

  • New: The function CopyFilePathsToClipboard in ContentBrowserUtils now returns the absolute path of an asset, instead of the relative path.

  • Improvement: Improved the experience of renaming a read-only asset when SCC is disabled.

Foliage

  • Bug Fix: Fixed a rare desync between GPU/CPU when Foliage was erased completely and then painted again.

  • Bug Fix: Fixed a crash in HISM.

  • Bug Fix: Reminded UE to make sure to BuildTree non-async when in a Serialize call with Ar.IsSaving() cases Cleanup HISM Duplication/PostEditImport/Serialization.

  • Bug Fix: Grass Maps updated during Tick are no longer dirtying packages. Instead, they mark themselves as dirty/need rebuilt. The new map warning will display "GRASS MAPS NEED TO BE REBUILT" whenever grass maps are outdated. We've added a new "Build Grass Maps" command to the Build menu options.

  • Bug Fix: Fixed an issue where foliage instances snapping was dirtying/invalidating foliage component's lighting cache even when result didn't change.

  • Bug Fix: Fixed an issue where foliage Erase Mode radio button remains highlighted even after releasing Ctrl and Shift keys.

  • Bug Fix: Fixed a bug with foliage that was writing to both a Runtime Virtual Texture and the main pass. Previously hierarchical and distance culling were getting disabled in the main pass.

  • Bug Fix: Fixed landscape grass not updating in edit layers mode when landscape material doesn't have any paint layers.

  • Bug Fix: Fixed Grass Align to Surface normal computation when using Halton sequence placement.

  • Bug Fix: Fixed an issue when removing null entries in AInstancedFoliageActor::CleanupDeletedFoliageType that never worked properly.

  • Bug Fix: Made sure we EndTransactions on ExitMode. Also wrapped most Begin/EndTransactions inside scopes.

  • Bug Fix: UE now deletes null entries from the types before rebuilding foliage actors.

  • Bug Fix: Fixed an issue where UpateGrass discarded components were processing in the next loop.

  • New: Added CustomDepthStencilWriteMask support to foliage.

  • New: Fixed foliage non-deterministic cooking by removing unused UProceduralFoliageSpawner::bNeedsSimulation that can change depending on the cooking order.

  • New: Added support discarding Foliage types independently from density scaling.

  • Improvement: Improved performance when adding multiple instances to InstancedStaticMeshComponent.

Landscape

  • Bug Fix: Fixed Landscape Grass Scale to not be applied when min and max are the same value.

  • Bug Fix: Fixed crash when applying spline component to landscape without a proper edit layer (when Edit Layers is enabled).

  • Bug Fix: Fixed a crash when copying offset regions.

  • Bug Fix: Reimported tiled Landscape Layer Weightmaps now have the same behavior as Import (no more forcing a normalization of layer weightmaps).

  • Bug Fix: Addressed a crash when entering Landscape Mode with Mirror Tool enabled and mirror point set to 0,0 but without any landscape.

  • Bug Fix: Resolved a crash when importing sublevels with landscape layers.

  • Bug Fix: Fixed a crash when using the smooth tool in landscape mode.

  • Bug Fix: Addressed a crash when importing sublevels with landscape layers.

  • Bug Fix: Resolved a crash when creating a new Landscape with Edit Layers enabled.

  • Bug Fix: Fixed Landscape rotation not being considered in ULandscapeComponent::GetLayerWeightAtLocation.

  • Bug Fix: Fixed a bug with ForeignWorld not being updated properly on SplineControlPoints.

  • Bug Fix: Fixed Undo/Redo of Clear/FillLayer which was filling MaterialInstanceConstantMap with mismatching Key/MI.

  • Bug Fix: Fixed ULandscapeSplineControlPoint not updating its body instance when changing mesh collision preset.

  • Bug Fix: Fixed a crash using landscape add component tool.

  • Bug Fix: Addressed a crash from unbound shader parameters when using RVT and tessellation together in a landscape material.

  • Bug Fix: Fixed a bad index buffer generation on mobile landscape. Vertex Key generation was not unique for a 255*255 grid. Removed it along with its use as a TMap key and replaced it with a simpler array lookup.

  • Bug Fix: Fixed crash using GetLandscapeMaterial node in BP.

  • Bug Fix: Fixed not thread-safe Landscape CVar code.

  • Bug Fix: Fixed a bug preventing the edit layer brush from applying when one of its resources is not ready. Editing layer brush resources may now include all types of objects but only handles UTexture2D (texture resource needs to be streamed in) and UMaterialInterface (material shader needs to be compiled). UE will now display user notification after the brush fails to apply for more than 3 seconds.

  • Bug Fix: Fixed a crash with grass scattering when virtual texturing is not enabled. We use the fixed grid vertex factory for both the grass and virtual texturing now.

  • Bug Fix: Fixed crash when importing Landscape layers in the New Landscape Tool.

  • Bug Fix: Fixed an issue with grass components trying to be detached while not attached after undoing a location change.

  • Bug Fix: Fixed a crash when Resizing a Landscape with Edit Layers.

  • Bug Fix: Fixed an occasional crash when creating a new landscape with edit layers.

  • Bug Fix: Fixed a crash when opening an old map with Chaos.

  • Bug Fix: Fixed landscape grass placement shader to correctly calculate SvPosition. This fixes landscape grass placement materials which use AbsoluteWorldPosition.

  • Bug Fix: Fixed LandscapeExportHeightmapToRenderTarget to take exported components' overall extent into consideration. Added option to export or not all landscape proxies when LandscapeExportHeightmapToRenderTarget is used with Landscape Actor.

  • Bug Fix: Fixed an infinite loop when undoing a landscape change.

  • Bug Fix: Fixed crash when creating a landscape from scratch with edit layers enabled.

  • Bug Fix: Fixed an issue with Runtime Virtual Texture updates to landscape paintings when working with landscape streaming proxies. Before the fix if no Runtime Virtual Texture targets were set in the main landscape actor (but were only set in the landscape streaming proxies) then the virtual texture wouldn't immediately update on landscape painting.

  • Bug Fix: Fixed an issue preventing stored reimport weightmap paths per tile when importing a tiled landscape.

  • Bug Fix: Fixed an issue causing problems when going in and out of landscape (and in manage tab).

  • Bug Fix: Fixed a crash in Landscape Mode when a paint layer gets its Layer Info assigned but no Edit Layer is selected. Also made sure to always have a valid Edit Layer selection.

  • Bug Fix: Fixed an issue with landscape shadows still rendering when the landscape show flag is disabled. To help with this we exposed shadow settings on the landscape proxy.

  • Bug Fix: Replaced temporary toolbar Landscape Resize icon with new one.

  • Bug Fix: Fixed a crash with landscape grass mesh when there are more mips than the landscape currently has.

  • Bug Fix: Fixed crash after moving Landscape Actor to another Level.

  • Bug Fix: Fixed crash when Resizing a Landscape with Edit Layers.

  • Bug Fix: Fixed warnings about invalid material for landscape thumbnail renders.

  • Bug Fix: Fixed crash in Landscape Mode when a paint layer gets its Layer Info assigned but no Edit Layer is selected. Also made sure to always have a valid Edit Layer selection.

  • Bug Fix: Fixed an issue with the Resize Landscape Tool not showing up in the manage landscape toolbar. We've also replaced the temporary toolbar Landscape Resize icon with a new one.

  • Bug Fix: Fixed crash in Landscape Edit Layer mode that occured when Landscape Material changes are applied without Landscape properly updating/creating the necessary rendering resources.

  • Bug Fix: Fixed an issue causing the landscape max draw distance from updating correctly in landscape components when set on the owning landscape proxy.

  • Bug Fix: Fixed an issue preventing the landscape cached heightfield from being cleared when the landscape is changed.

  • Bug Fix: Fixed Landscape LOD selection for stereo rendering.

  • Bug Fix: Fixed SimpleCollisions from being incorrect on Landscape when the specified Simple Collision mip level is greater than Collision mip level.

  • Bug Fix: Fixed non-determinism in the generation of Runtime Virtual Texture low mips. This is done by forcing textures to stream before each tile render.

  • Bug Fix: Fixed an issue preventing all split screen views from using view 0 for landscape LOD calculation. This fixes bugs where landscape components would be rendered with the wrong scale in the second view.

  • Bug Fix: Fixed Landscape Edit Layers warning text to be read-only.

  • Bug Fix: Fixed a crash when attempting to re-import weightmaps with Landscape Edit Layers disabled.

  • Bug Fix: Fixed a memory leak of FViewInfo objects in Runtime Virtual Texture rendering.

  • Bug Fix: UE now accounts for StaticMeshLODDistanceScale when calculating landscape shadow LOD. This fixes bugs where offscreen landscape components could render shadows at a scale too large or too small.

  • Bug Fix: Fixed bug where user was able to select actors while in the Landscape Edit Mode.

  • Bug Fix: Fixed an issue where resetting sub-levels in the World Composition window where new position and old position overlap would cause visual defects.

  • Bug Fix: Fixed crash when loading a map with a BP landscape brush that is not compiling.

  • Bug Fix: Fixed grass.MaxCreatePerFrame.

  • Bug Fix: Fixed landscape visibility mask material warning when using the landscape base material for holes.

  • Bug Fix: Fixed a crash when using the smooth tool in landscape mode.

  • Bug Fix: Fixed Landscape rotation not being taken into account in ULandscapeComponent::GetLayerWeightAtLocation (Procedural Foliage).

  • Bug Fix: Fixed a crash in ULandscapeMaterialInstanceConstant::UpdateCachedTextureStreaming.

  • Bug Fix: Fixed a crash when importing sublevels with landscape layers.

  • Bug Fix: Fixed a crash when importing sublevels with landscape layers.

  • Bug Fix: Fixed Landscape Grass Scale not being applied when min and max are the same value.

  • Bug Fix: Fixed a regression with Landscape Collision when the whole LandscapeComponent is painted as a hole.

  • Bug Fix: Fixed Undo/Redo of Clear/FillLayer which was filling MaterialInstanceConstantMap with mismatching Key/MI.

  • Bug Fix: Fixed ForeignWorld not being updated properly on SplineControlPoints.

  • Bug Fix: Fixed a crash occurring when copying offset regions.

  • Bug Fix: Fixed an issue where UpdateCachedTextureStreaming compound TexelFactor every load/save.

  • Bug Fix: UE will now allow the landscape editor to continue gracefully if the CDO alpha texture doesn't contain any source data. This can happen when the editor is loading cooked data.

  • Bug Fix: Fixed a bug allowing edition of landscape proxy properties that are shared with the parent landscape properties.

  • Bug Fix: Within a Landscape, UE will now use Equal() (with error tolerance) when testing whether a spline component transform should be updated.

  • Bug Fix: Fixed a crash when loading a cooked landscape in the editor.

  • New: Added experimental version 0.1 of the Virtual Heightfield Mesh plugin. The plugin is a mesh renderer for heightfields where the source data is a runtime virtual texture containing height values. It is intended as an alternative final rendering technique for very large landscapes

  • New: Added support for adaptive virtual texture added. This allows the support of larger runtime virtual texture resolutions. The new limit is 1GiTexel x 1GiTexel.

  • New: Added the UVirtualTextureBuilder asset type for building virtual textures. The URuntimeVirtualTexture low mips have been moved out of the URuntimeVirtualTexture asset and into this. The streaming mips build is now set up from the Runtime Virtual Texture Volume Actor. This allows multiple streaming mips to be built against a single URuntimeVirtualTexture for cases where the URuntimeVirtualTexture is reused in different levels.

  • New: Added a continuous update flag to Runtime Virtual Texture assets. This allows Runtime Virtual Textures to be marked to have a random small number of pages updated each frame. This can help in cases where Runtime Virtual Textures contain stale data due to late texture streaming etc.

  • New: Added the concept of virtual texture scalability groups to allow varying scalability settings for different Virtual Texture assets and components.

  • New: Changed the naming for the Runtime Virtual Texture setting: "Virtual Texture Pass Type" to "Draw in Main Pass". The enumerated option names have also changed to try to make the usage more clear.

  • New: Rewrote the Runtime Virtual Texture Volume SetBounds logic so that all relevant primitives are considered in the bounds calculation, not just the selected alignment actor.

  • New: UE now provides additional information in message dialogs when import using the landscape copy gizmo fails.

  • New: Added custom stencil write mask support for landscape. We've also added full custom depth stencil support for landscape spline.

  • New: Primitives that write to a Runtime Virtual Texture but are hidden in the main pass are now shown in the Editor when selected. To support this we've added a Show Flag that makes all such primitives visible in Editor mode even when non-selected. They remain hidden in game mode.

  • New: UE will now show a progress bar when reimporting tiled Landscape.

  • New: The transform for a Runtime Virtual Texture volume is now based around a corner of the bounding volume instead of around the center. This makes it more consistent with other actor types and simplifies any transform maths. Legacy data is fixed up on load.

  • New: World Composition layer creation menu now creates the layer on Enter keypress.

  • New: Exposed blueprint function on RuntiveVirtualTextureComponent to invalidate VT pages within given world bounds.

  • New: Sped up landscape tessellation PIE load.

  • New: Landscape edit layers are now supported when importing/reimporting a World Composition Landscape.

  • New: Added Texture LOD Group setting to Runtime Virtual Texture assets. We;ve also added a Virtual Texture Tile Size Bias and Tile Count Bias to the Texture LOD settings. This allows us to apply Tile settings per platform and use smaller tile sizes on platforms with less processing power.

  • New: World Composition: Added Fit View to Selection command bound to F key.

  • New: Added a new material expression for landscape that outputs a physical material. This can optionally be used to generate the dominant physical material for each point on a landscape. When setup in a landscape material it overrides the standard layer based physical materials. The aim is to allow greater logical control over physical material placement on the landscape.

  • New: Made Landscape actors not placeable.

  • New: Made BP brushes use their actor factory upon spawning, if applicable. Default-named the spawned BP actor according to the landscape they're added to.

  • New: Exposed Material Overrides to Grass Variety.

  • New: Made GetAllParameterInfo virtual, so UMaterialExpressionLandscapeLayerBlend can be subclassed.

  • New: ALandscape::LandscapeLayers is no longer 'TextExportTransient'.

  • Improvement: Made Landscape actors not placeable.

  • Improvement: Fixed invalid foliage instance tooltip incorrect spelling.

  • Improvement: Made GetAllParameterInfo virtual, so UMaterialExpressionLandscapeLayerBlend can be subclassed.

  • Improvement: Released an update to not reset the landscape actor locked status when it's selected.

  • Improvement: Improved support for Runtime Virtual Texture components in PIE. This fixes issues where Runtime Virtual Texture did not respond to streamed in changes in PIE.

  • Deprecated: Removed redundant bEnable flag on runtime virtual texture assets. A better alternative is to use the visibility of the associated runtime virtual texture volume.

Material Editor

  • Bug Fix: The material editor no longer crashes when attempting to select a curve row parameter from a curve atlas when the atlas references invalid curves.

  • Bug Fix: Fixed Virtual Texture warning messages.

  • Bug Fix: Resolved a bad reference to structure variables.

  • Bug Fix: Fixed various items concerning opening material layers created by prior engine versions. Also released fixes for linking derived material layers to parent layers.

  • Bug Fix: Addressed key transient material parameter overrides on the MPI, rather than parameter index. This fixes material parameters getting scrambled while editing material.

  • Bug Fix: Updated virtual textures on any relevant material parameter value change while in the material editor.

  • Bug Fix: Fixed a crash on undo/redo when the preview material source instance is null.

  • Bug Fix: Updated UE to not perform project setting based validation on engine visualization materials during DDC warming.

  • Bug Fix: Fixed unnecessary recompilation of shaders when changing texture compression.

  • Bug Fix: Fixed a problem where material could display incorrect parameter values when parameters are added/removed in the material editor.

  • Bug Fix: Fixed material baking cache not invalidating cached material when changes are made to instance constants.

  • New: Added SmoothStep, Step, and InverseLerp material expressions.

  • New: Added function to material editing library to get a list of textures used by a material

  • New: Added editor scripting functions for iterating through expressions in a material.

  • New: Shader compile log messages now appear during shader compile instead of after all shaders compiled.

  • New: Added thresholdWithRange Material Function. This allows the artist to define a threshold value and a range value to falloff linearly towards. There is a bool to do a one sided falloff or to falloff on both sides.

  • New: You can now sort Material Parameter Collection entries alphabetically: material editor + blueprint node.

  • New: UE will now ensure that overridden material parameter values are preserved, when override is disabled.

  • New: Custom HLSL nodes now support outputs of type FMaterialAttributes, and multiple outputs.

  • New: Engine functions: Added simple functions to convert between km and cm for sky work.

  • New: Engine Functions: Added Material functions to convert between degrees/radians.

  • Improvement: Made MID asset editor read-only.

Media Framework

  • Bug Fix: Released a fix to compute pipeline use by PS5MediaPlayer to improve performance. Also improved stability when using more then one player at once.

  • New: Added APIs to check on current aspect ratio and image orientation of UMediaTexture.

  • New: Added media player timing mode that simply displays the latest video frame without any timing.

  • New: Added AVEncoder module's documentation (in code).

Scripting

  • Bug Fix: Fixed Python int/long -> float/double conversion forcing unsigned.

  • Bug Fix: Fixed potential null pointer access during Python shutdown.

  • Bug Fix: Instructed UE to Invoke sys.excepthook when generating Python errors in UE4.

  • Bug Fix: Fixed documentation link for editor python scripting plugin.

  • Bug Fix: Fixed the automated FBX re-import to show the dialog under certain situations.

  • Bug Fix: Fixed Python defined UFunctions with a return type failing to pass data for some arguments.

  • New: Added a call_method method to unreal.Object to let you call functions via Unreal reflection.

    • This can be useful to let you call functions that haven't had Python glue generated for them, such as functions defined with a Blueprint class.

  • New: Added unreal.new_object as a way to create an object instance from a UClass* in Python without having access to its glue type.

  • New: Exposed source control sync functionality for files and directories.

  • New: Added support for showing Python files in the Content Browser.

    • This is disabled by default, and can be enabled by setting "Enable Content Browser Integration" to true in your Editor Python plugin preferences.

    • When enabled, this will show Python files in the Content Browser, and add an option to let you run them (either via the context menu, or by pressing "space" on an item).

  • New: Added debugpy_unreal.py utility to help debug the embedded Python interpreter using VS Code.

  • Improvement: Switched to Python 3.7.7 by default. If you need to continue to use Python 2.7.14, then you'll have to use a source build of UE4 and either:

    • Edit PythonScriptPlugin.Build.cs and PythonScriptPluginPreload.Build.cs to use "Python" rather than "Python3" in their dependency lists.

    • Set your UE_PYTHON_DIR environment variable to point to a custom Python installation.

  • Improvement: Exposed UEditorLevelUtils::AddLevelToWorld to scripting.

  • Improvement: Exposed ReloadPackages to editor scripting.

  • Improvement: Changed Python objects to being transactional by default.

Sequencer

  • Bug Fix: Movie Pipeline: Fixed a bug causing cinematic shot section restore to not work properly when multiple segments map to the same shot section.

  • Bug Fix: Fixed a bug causing auto-easing computation of blending camera cuts when sections are completely underlapped.

  • Bug Fix: UE no longer notifies the game of camera cuts when using camera cut blending and there's no actual cut.

  • Bug Fix: Updated Sequencer to only autoscrub if in scrubbing state to fix double evaluations when autoscroll is enabled during playing.

  • Bug Fix: Performed an update to use camera component directly (if possible) to compute from/to transform when previewing camera cut blends.

  • Bug Fix: Fixed a bug to stop performing camera cut blending when the blend is finished. This fixes some interpolation problems that create jitter during cinematics with fast-moving cameras.

  • Bug Fix: Fixed renaming of MoviePipeline Master Config not correctly updating name.

  • Bug Fix: Sequencer no longer counts the root node when counting the number of items to be displayed in the tree.

  • Bug Fix: UE will now highlight the default filter option when opening the filter dialog in CurveEditor.

  • Bug Fix: Fixed several bugs related muting/soling tracks which have been renamed or moved.

  • Bug Fix: Fixed default MoviePipeline presets not being visible in Preset Importer.

  • Bug Fix: UE will no longer set viewports to realtime if they're already running PIE.

  • Bug Fix: Fixed exported audio cutting out if movie rendering window loses focus.

  • Bug Fix: When rendering a movie, UE will now detect if there is no more disk space.

  • Bug Fix: UE will now skip processing of render passes in MoviePipeline that are not enabled.

  • Bug Fix: Added duration/wave support for dialogue player so that a sound cue with dialogue is added with the correct duration.

  • Bug Fix: Live Link will now discard recording samples if outside of the section start frame.

  • Bug Fix: In Take Recorder, renamed NewTake to ClearPendingTake.

  • Bug Fix: Fixed FCPXML Import/Export so that it uses the in frame as the start frame offset if the original start frame offset doesn't exist in the lognote.

  • Bug Fix: Fixed FCPXML Import/Export so that it supports same named shots and retrieves the lognote correctly from the logging info node given the master clip id.

  • Bug Fix: Will now focus on endpoint when creating a new binding or setting the event endpoint.

  • Bug Fix: When importing FCPXML, if the corresponding level sequence isn't found, UE will now skip past it. It will then set the correct in/out frames, and continue importing the rest of the sequence.

  • Bug Fix: The local time is now set to loop so the evaluation is automatically set to Play To, rather than Jump To when autoscrolling. This enables a swepts evaluation when autoscrolling.

  • Bug Fix: Fixed last tick game time seconds from being set to 0 which ends up stopping sequence playback immediately.

  • Bug Fix: Fixed subframe end playback range conditions so that playback that ends on a subframe will now fire events that lie between the last whole frame and playback end. Previously, the last valid time would be based on DurationFrames, which is display rate and would get rounded to a frame number in SetFrameRate(). The fix is introduced in DurationSubFrames which contains the subframe.

  • Removed: Removed unnecessary cast to ULevelSequence in selection synchronization. This allows derived classes to participate in the synchronization of selection in the editor with the Sequencer tree.

  • Bug Fix: Fixed issues with sequencer style definitions in SlateEditorStyle.

  • Bug Fix: Fixed missing blend-out handle on camera cut track when there's only one section.

  • Bug Fix: Made filters menu more consistent. Enable/Disable All operates on all level filters and group node filters as well. Now it doesn't close menu after clicking on group filter submenus

  • Bug Fix: Sequencer now only shows easing handles for sections that actually support manual easing.

  • Bug Fix: Fixed a crash in curve editor when widgets inexplicably disappear.

  • Bug Fix: Fixed an issue with modifying sequences when opening. OnNodePathChanged does not need to mark the sequence dirty.

  • Bug Fix: Fixed camera cut track giving control to the incorrect camera in some hierarchical use-cases.

  • Bug Fix: Renderpass is now inserted before the shot frame in file format string to fix import of image sequences exported by MoviePipeline.

  • Bug Fix: Fixed bugs with starting/stopping controlled shake source shakes.

  • Bug Fix: UE no longer displays thumbnails over blending areas of the camera cut track.

  • Bug Fix: UE no longer lets silent mode computations linger around after silent mode has ended.

  • Removed: Removed auto-exposure and shutter angle overrides from Movie Render Queue. The active camera is now respected in both cases.

  • Bug Fix: Warm-up frames can now optionally be rendered in the Movie Render Queue. This allows gpu particles to warm up correctly.

  • Bug Fix: Fixed large values in the console variable setting not applying correctly when the target cvar type was an int.

  • Bug Fix: Fixed an issue where jobs would not use the latest values from a preset if the preset had been modified after the job was created.

  • Bug Fix: Fixed a dependency with MovieSceneTracks.build.cs editor.

  • Bug Fix: Fixed an issue with the invalid key handles state after calling FRichCurve::SetKeys.

  • Bug Fix: MoviePipeline: If a movie render is interrupted, UE will now log it as an error as the render did not complete.

  • Bug Fix: Fixed a crash when copying a geometry cache track.

  • Bug Fix: Fixed a crash unregistering camera shake previewing view modifiers when there's no editor.

  • Bug Fix: UE will no longer make cyclic inclusions with template sequences. This fixes a possible loop with template sequence track editor.

  • Bug Fix: Fixed a bug where template sequences aren't correctly run on object bindings.

  • Bug Fix: Camera cut track blending is now handled by a parent sequence's camera cut track, and support blend times dilated by sub-sequence play-rates.

  • Bug Fix: Fixed a crash where creating a level sequence could spawn an actor in a world that's being torn-down.

  • Bug Fix: Fixed an issue where calling Set Playback End on a sequence resulted in an incorrect bounds type.

  • Bug Fix: Fixed an issue with Fade track rendering in MoviePipeline.

  • Bug Fix: When exiting a camera cut, UE will now only go back to the previous editor location for blending cuts.

  • Bug Fix: Fixed undo/redo adding a spawnable by setting the spawn flag to transactional.

  • Bug Fix: Control Rig: Fixed a crash when re-compiling BP and removing a transform control that's also open in sequencer.

  • Bug Fix: Movie Pipeline: Mode the restore fixed time step to OnPIEEnded. This was done to fix an issue where the editor plays back faster after rendering.

  • Bug Fix: Added options to selectively save transforms and curves when doing animation sequence baking from Sequencer.

  • Bug Fix: Extended the working range if trying to type in the time outside of it.

  • Bug Fix: Refactored making a unique spawnable name so it can be used when creating a spawnable camera in various places. This ensures that cameras are created with consistent names, Cine Camera Actor (1), Cine Camera Actor (2), Cine Camera Actor (3), etc. Otherwise some names are "CineCamerActor", "Cine Camera Actor", and they aren't numbered in order.

  • Bug Fix: Fixed a crash when trimming animation if length is 0.

  • Bug Fix: Movie Pipeline: Fixed an issue where unconventional aspect ratios would render with the wrong fov.

  • Bug Fix: Fixed subfolders getting muted when their parent folder is muted.

  • Bug Fix: Released a fix for null object binding with control rig when dragging in a control rig to a level sequence that isn't loaded.

  • Bug Fix: If there's multiple transform tracks affecting a given actor, UE will now export with interrogation. Previously, interrogation would only happen for multiple sections on a single transform track.

  • Bug Fix: Fixed Blending Sections in Control Rig.

  • Bug Fix: Fixed bake so that it doesn't attach to the previous parent's parent. The previous idea was flawed because the parent attachment could be animated, so it's more straightforward to just unparent to the root.

  • Bug Fix: Released a fix for importing broken tangents, FBX.

  • Bug Fix: UE will now clear transient flags on spawnable template components. This fixes a bug where adding components to an empty actor would not save those components.

  • Bug Fix: Curve Editor: Fixed an issue with filter window not opening for standalone curves since the tab manager may not exist.

  • Bug Fix: Released a fix changing blending type so that the object is restored to its pre animated state before applying relative/additive. This fixes an object flying away when changing the blend type to relative/additive since it would have been relative/additive to the current animated state.

  • Bug Fix: Expand the section when adding keys through the enter key, otherwise newly created keys wouldn't evaluate.

  • Bug Fix: Fixed sequencer curve editor 'selected node' filter continually expanding.

  • Bug Fix: Control Rig: Provided a fix for Control Rig in Sequencer breaking when Control Rig is compiled in it's Editor.

  • Bug Fix: Fixed default tracks not being added properly for some properties (ie. OuterConeAngle on SpotLights) because the object to be keyed should be the property owner, and not the actor.

  • Bug Fix: Fixed an issue when converting a possessable to spawnable failing when selection changes during the conversion.

  • Bug Fix: Fixed bake transform when the camera is an additive camera offset.

  • Bug Fix: Transform origins no longer apply to components and actors that are attached to other components or actors.

  • Bug Fix: Curve Editor: Fixed a crash when undoing inserting keys. The panel's edit box's CurveIDToKeyProxies becomes stale on undo. Invalidate the curve model ID and relevant key handles on undo.

  • Bug Fix: Sequencer will now set AlwaysTickAndRefreshBones on child skelmesh components when Skeletal Meshes are added to Sequencer.

  • Bug Fix: Fixed copy/paste of spawnables by forcing it to be spawned so that its possessable components can be bound.

  • Bug Fix: Changed GetPlaybackRange so that it returns values in display rate, similar to GetPlaybackStart and GetPlaybackEnd.

  • Bug Fix: When recording an anim sequence live link section, it's source can start at any time during the recording. Because of this UE will now always force tick and check for new sources every frame.

  • Bug Fix: Fixed event endpoints being lost when renaming or duplicating a Level Sequence.

  • Bug Fix: Fixed duplicate object bindings not pasting to original folder.

  • Bug Fix: Cine Camera: Moved the upgrade path to Serialize() so that newly created blueprint cameras don't have their filmbacks incorrectly upgraded.

  • Bug Fix: Control Rig: Selecting Parent Control will now select single channel child control allowing for thing's like S to key as expected.

  • Bug Fix: CurveEditor: Scaling with Transform Tool no longer reverts on mouse up.

  • Bug Fix: Control Rig will now frame on selected controls. Note if any control is selected UE will focus on them, then if not UE will do actors.

  • Bug Fix: Curve Editor: Fixed the set curve attributes menu (ie. pre and post infinity) to operate on all curves rather than just the selection.

  • Bug Fix: Fixed fbx import through scripting not creating bindings for components. The bug here is that it's not able to import the focal length property because it doesn't create a camera component binding first.

  • Bug Fix: Fixed curve editor tree items not showing up when switching sub sequences.

  • New: Added TakeTrack and TakeSection which contains timecode tracks and a slate property. Take recorder records timecodes for each tick and adds them to the actor's take track section.

  • New: Added Python scripting support for the Movie Render Queue. Added example Python scripting support for rendering movies both in-editor and from the command line. See \Engine\Plugins\MovieScene\MovieRenderPipeline\Content\Python for more details.

  • New: The "-MoviePipeline=" argument has been changed to "-LevelSequence=" to clarify what gets used for (as it only attempts to load a ULevelSequence). See MovieRenderPipelineCommandLine.cpp for examples.

  • New: Added the option to disable TDR (graphic driver timeout) when burning out sequences with MoviePipeline, defaults to on.

  • New: Exposed SetName to set the name of a track binding.

  • New: Added Create Group to the context menu in the group manager. Fixed undo issues not refreshing the groups manager.

  • New: Added RefreshCurrentLevelSequence() which refreshes the UI for the currently loaded level sequence.

  • New: Concerning MoviePipeline, we've blended post processing volume settings to motion blur amount.

  • New: Made calls to OnSectionMoved consistent in dragging operations, calling it for sections being moved and resized, both during interactive dragging and at the end of the operation.

  • New: Added support for toggling markers in a subsequence to be globally visible in other subsequences.

  • New: Added a Timecode clock which sets the sequencer clock to the timecode provider. Renamed the existing Timecode clock to Relative Timecode.

  • New: Added the ability to create bindings in root or local space. Camera cut bindings in a subsequence should be created in local space so that they can resolve when opened on its own. Updated the master sequence example to create a binding in local space.

  • New: Added support for AvidDNx and AppleProRes video codecs. Does not support compositing burn-in data on top of video output.

  • New: Movie Render Queue's Burn-In setting now allows the burn-in to not be composited onto the final image.

  • New: Added access to sequencer selection. GetSelectedSections, SelectSection GetSelectedTracks, SelectTrack GetSelectedFolders, SelectFolder GetSelectedObject, SelectObject EmptySelection.

  • New: You can now use a non-realtime audio mixer to allow generating deterministic audio when rendering movies in PIE.

  • New: Added a warning via Message Log when levels are set to Blueprint Streaming for Movie Renders.

  • New: Added option (shift modifier) to append sections as they are dropped as opposed to stacking them on subsequent rows.

  • New: Exporting fbx through python now spawns spawnables if necessary on export.

  • New: Added ability to create an event repeater section through scripting

  • New: We've exposed Set/GetClockSource and Set/GetEvaluationType.

  • New: Added the ability to record camera cuts/switching.

  • New: We've exposed GetBoundObjects from FSequencer to retrieve the objects bound to the level sequence editor.

  • New: Added numeric type interface to pad take number digits.

  • New: Added veryverbose log for ingested live link frame times. You can enable this by using the console command: log LogLiveLinkSequencer.

  • New: Added the ability for sequences to opt in/out of certain track types. Each track editor can now call Sequence->IsTrackSupported to determine whether it should opt in/out or continue with its default implementation.

  • New: For converting existing track editors in a plugin to be compatible with LevelSequence, implement: virtual bool SupportsSequence(UMovieSceneSequence* InSequence) const override and return true if a sequence is a ULevelSequence.

  • New: Added display showing number of tracks and how many are hidden by filters.

  • New: Added get/set selected channels. Channel selection is defined as a FSequencerChannelProxy which is a section pointer and a channel FName.

  • New: Can now show marked frames in the cinematic viewport.

  • New: Take Recorder: Added option to exclude all properties for a component. For example, you can now do this in BaseEditorSettings.ini to exclude the light component properties from being recorded: (MatchingActorClass=/Script/Engine.Light,ExcludePropertyTracks=((ComponentPath="LightComponent0", PropertyPath="")).

  • New: Concerning Fbx, added import/export integer and string channels.

  • New: Added config to HierarchicalBias. For example, you can set this in EditorPerProjectUserSettings to set the default hierarchical bias for sections to -100: [/Script/MovieScene.MovieSceneSubSection] Parameters=(HierarchicalBias=-100)

  • New: Added options to cancel movie rendering via the movie pipeline executor from blueprint/python scripting.

  • New: Take Recorder: Added option on actor source to toggle whether the parent hierarchy is automatically added for recording if it isn't already. When disabled and recording to possessable, the child will be recorded in local space since it will retain its parent in the level. When disabled and recording to spawnable, the child will be recorded in global space.

  • New: UE now allows opening and navigating curve editor for locked sequences.

  • New: Added the ability to export custom attributes when exporting a skeletal animation track (mapped from an anim sequence).

  • New: Added Node Groups feature, which allows creating groups of sequencer nodes for selection, filtering, and editing.

  • New: UE will now warn users when we automatically insert the {render_pass} tag for them as it will cause the output filename to change names unexpectedly.

  • New: Sequencer Scripting: SetTickResolution now also migrates frame times to the target tick resolution. Added SetTickResolutionDirectly which does not migrate the frame times. Refactor MigrateFrameTime to MovieSceneTimeHelpers

  • New: Added movie pipeline queue subsystem for runtime.

  • New: Added an option to lock previous camera in a blending camera cut.

  • New: UE will no longer unlock cameras when going from a sub-sequence to a parent sequence. This lets artists and designers working in a sub-sequence use the camera from a "sibling" animation sub-sequence.

  • New: Added a new "additive from base" blend type, where values are animated relative to the first value of a section. This is mostly useful for camera animations and camera shakes.

  • New: Added support for hierarchical easing, where an entire sub-sequence can be eased in and out at the beginning and end, as if every single track inside had the same ease-in/out curves.

  • New: Added two tracks for starting and previewing camera shakes on a camera shake source component/actor: a "controlled" track where sections control when the shake starts and stops, and a "trigger" track which is a "fire-and-forget" way to trigger shakes. These cinematic camera shakes can be previewed directly in the editor by playing the sequence.

  • New: Added the ability to match animation sections in Sequencer by specified bones and visualize skeletons on sections to help with matching.

  • New: Movie Pipeline: Implemented the exporting of FCPXML project files, and added metadata tracking for the files output.

  • New: Added a motion trail editor mode for transform tracks, skeletons and control rigs.

  • New: Made ULevelSequenceBurnIn::GetSettingsClass_Implementation() overridable.

  • New: Added a reduce keys tolerance to specify how much keys should be reduced by after recording. Keys tolerance and key interpolation were also added to the section menu.

  • New: Ctrl-Drag dilate will now work with skel anim tracks, geometry cache tracks and geometry collection tracks. In all three we now scale the playrate to do time warping.

  • New: Added Control Rig Created FK Rig that replaces Additive Control Rig and allows one to override or add to existing transforms and curves(morph targets).

  • New: Added Sequence hierarchy navigation. There's now a new picker to show the sequence hierarchy which allows you to pick any subsequence to dive into directly. There's also forward and backwards navigation buttons, and subsequences are now always shown.

  • New: Control Rig: Added the ability to import FBX into a Control Rig, with options for matching, insert/replace, etc.

  • New: Cloth (Chaos) will now update in Editor if the Update Cloth In Editor flag is toggled on a Skel Mesh Component.

  • New: Added an option to disable sections when baking as opposed to deleting.

  • New: Added the ability to copy the contents of a track to another track.

  • New: Movie Pipeline: Added the ability to toggle the selected shots. If the shot being toggled is not selected, only that shot will be toggled.

  • New: Added meta DeterminesOutputType to UFUNCTIONs to eliminate the need to cast the return type in blueprints.

  • New: Take Recorder: Added support for recording animated attachments.

  • New: Cine Camera: Updated 16:9 Digital Film SensorWidth and SensorHeight to 23.76 x 13.365 to match Arri Alexa.

  • New: Added support for animating properties on decal component materials.

  • New: Control Rig: Added 'default animating rig' to SkeletalMesh, which if specified will create a track with that Control Rig when a Skeletal Mesh Component with that Skeletal Mesh is added to Sequencer.

  • New: Movie Pipeline: Sequencer will now report errors/warnings to the FMessageLog.

  • New: Added support for toggling markers in a subsequence to be globally visible in other subsequences.

  • New: Movie Pipeline: Added warnings when camera cuts start on subframes.

  • New: Movie Pipeline: Renamed friendly name to "Movie Render Queue."

  • New: Sequencer is now more responsive when viewing large data sets.

  • New: Live Link / Rich Curve: Improved save times for take recorder by setting all times and values at once and not auto tangent each key.

  • New: Curve Editor: Changed mode hotkeys to have a modifier. Transform - Ctrl-T, Retime - Ctrl-E, Multi - Ctrl-M. This removes conflicts with w,e,r which are reserved for the viewport transform gizmo. Ctrl-W is used for weighted tangents.

  • New: Added a color gradient for color tracks (material parameter and material tracks). Added a color picker for color keys on double click. A key is added to all channels if it doesn't exist when the color is edited.

  • New: Control Rig: Added bidirectional links using asset user data between sequencer skeletal tracks and anim sequences. Users can now create and open these links either from Sequencer or via Animation Editor via asset and toolbar extenders.

  • New: Take Recorder / Animation: Improved logging by adding time for creating animation asset and saving sequences. With LogAnimation Log and LogTakesCore Log.

  • New: Control Rig: Now supports Baking Animation Onto Control Rigs.

  • New: You can now zoom to fit selected sections and keys. Hotkey 'f'.

  • New: Control Rig: Added Sequencer Support for Int/Enum Control types.

  • Improvement: Movie Render Queue now supports a 'stencil' based layering system to better support unrendered objects.

  • Improvement: Improved usability of dragging and snapping keys in CurveEditor.

  • Improvement: Cine Camera: Updated 16:9 Film SensorWidth and SensorHeight to 24.00 x 13.5.

Static Mesh Editor

  • Bug Fix: The Toolbar is now shown in the Static Mesh Editor Viewport.

  • Bug Fix: Fixed Selection Highlighting in Static Mesh Editor.

  • Bug Fix: Fixed an incorrect calculation of LOD in editor static mesh wireframe and LOD coloration views.

  • Bug Fix: Fixed the "Additional Data" button in the Static Mesh editor, so that the changes are propagated to individual viewports.

  • Bug Fix: Fixed an issue that could cause a large difference in the binary output when saving a mesh multiple times in the editor.

VR-Editor

  • Bug Fix: Added a check to make sure legacy mesh paint mode is enabled before going into VR Mode.

  • Bug Fix: Fixed being unable to exit the VR Editor when using Valve Index controllers.

  • Bug Fix: No longer need to remove one element from the menu due to search element changes.

  • Bug Fix: Fixed VR Editor using invalid Valve Index bindings.

World Browser

  • Bug Fix: Fixed an issue where level browser would lose folder information when switching streaming type.

  • Bug Fix: Fixed an issue where expansion state was not being properly retained in trees with >500 items.

  • Bug Fix: World Composition - Fixed a crash when importing a heightmap using the Import Tiled Landscape feature. If the heightmap filename contained invalid characters, the level package would not be created

  • Bug Fix: Released various fixes to WorldBrowser and scripted streaming level creation to avoid crashing when setting an invalid level name. We've also repaired world streaming levels when they point to an invalid level package.

  • Bug Fix: Fixed an issue with Level Details not using all of its panel's space.

  • New: Level Browser now scrolls to current level when using MakeActorLevelCurrent.

Gameplay Framework

  • Crash Fix: Prevented a crash when spawning an Actor into a Sublevel that is not Loaded/Visible.

  • Crash Fix: Fixed a crash when harvesting a subset of components from an actor such that a harvested component is attached to a component that is not being harvested or already exists in the blueprint.

  • Crash Fix: Fixed a crash when adding a gameplay tag without a valid tag source selection.

  • Crash Fix: Added the path string arg to a message to fix a crash in UGameplayCueManager::VerifyNotifyAssetIsInValidPath.

  • Crash Fix: Fixed an access violation crash in AbilitySystemComponent_Abilities when using a ptr without checking it.

  • Bug Fix: Changed FComponentTypeRegistryData to only clear the 'needs to refresh' flag when a refresh actually happens.

  • Bug Fix: Fixed undo/redo of attached components when attached to an Actor which overrides DefaultAttachComponent.

  • Bug Fix: Fixed players standing on an object with static mobility teleporting when the object gains movable mobility.

  • Bug Fix: Fixed a UPawnMovementComponent::SetUpdatedComponent bug causing PawnOwner to potentially mismatch UpdatedComponent when component is pending kill.

  • Bug Fix: Fixed rotating movement component from not working in standalone.

  • Bug Fix: Child Actors created by nested Child Actor Components now inherit transience if an outer Actor is an editor-only Actor.

  • Bug Fix: Cameras now properly detect when shakes with duration end, and mark them as stopped in the preview panel.

  • Bug Fix: Components that are being harvested to create a new blueprint will no longer perform collision checks as they are temporarily moved as part of the harvesting process.

  • Bug Fix: Fixed horizontal walking velocity calculation when bMaintainHorizontalVelocity is disabled and we call StepUp.

  • Bug Fix: Fixed Camera aspect ratio bug when computing view matrices.

  • Bug Fix: Fixed JumpCurrentCount discrepancy when JumpMaxCount is greater than 1 and there is a correction in the air.

  • Bug Fix: Fixed memory leak with infinite camera shakes staying around even after their blend out time expired.

  • Bug Fix: Implemented better protection against invalid values in lens and filmback settings.

  • Bug Fix: Fixed incorrect Spline Component comments.

  • Bug Fix: Fixed duplicating and copy/pasting of a root component which would result in an unexpected transform. Fixed pasting a component to the root component of an actor attached to another actor attempting to attach to the root of that other actor instead of its own.

  • Bug Fix: Fixed an issue where MaterialParameterName cache was not marked dirty when applying a UMaterialInstanceConstant.

  • Bug Fix: Added logging message of velocity in projectile when it detects that a bounce has failed because the object is stuck in penetration.

  • Bug Fix: Reset physics state when teleporting a player to their initial location causing large physics velocity and collision along the old path to the new location.

  • Bug Fix: Fixed Regression caused by actor overlaps not properly triggering during initial level load even if bGenerateOverlapEventsDuringLevelStreaming was enabled.

  • Fixed incorrect comments in the header file.

  • Bug Fix: Moved an overlap initialization used within AActor::DispatchBeginPlay to its own function for clarity and for any possible future adjustments.

  • Bug Fix: Added client character movement bit sent to server to indicate that we shouldn't perform a dual move inside a FScopedMovementUpdate.

  • Bug Fix: Disabled the filmback preset dropdown widget on CineCameraActors if the sensor size isn't editable.

  • Bug Fix: Fixed a bug where FieldPathProperties did not clear the old field path info before adding the new info.

  • Bug Fix: Fixed a bug where stacking GEs that did not reset the duration on additional instances of the effect being applied.

  • Bug Fix: Fixed an issue that caused CancelAllAbilities to only cancel non-instanced abilities.

  • Bug Fix: Reverted the DeferredRemove where it was before changes in the TickTaskManager.

  • New: Added OnDataTableChanged callback to FTableRowBase to handle changes to rows that aren't imported, this allows doing game-specific fixups to table rows that are edited by the Data Table editor.

  • New: Added a SetRelativeTransform_Direct helper function to USceneComponent.

  • New: Prevented users from setting single-instance shakes on shake source actors.

  • New: Added a templated version of GetOwner.

  • New: Added optional tag parameters to gameplay ability commit functions.

  • New: Fixed subsystems to work similar to blueprint libraries in the editor and correctly guess whether they are run from a client or server context in the editor. This is accomplished by using new GetGlobalFunctionCallspace and GetCurrentPlayWorld functions that can be used by any class wanting similar logic.

  • New: Added StartTimeSeconds to PlayMontageAndWait ability task and improved comments.

  • New: Exported GameFramework log categories using ENGINE_API.

  • New: Enhanced Input experimental release - A highly configurable replacement input handler supporting collections of dynamically enabled prioritized button mapping contexts and complex customizable input trigger rules.

  • New: Prevented OnUnpossessed from being called multiple times. Blueprint events ReceivePossess/ReceiveUnPossess will only be called when the pawn was successfully possessed or unpossessed. OnNewPawn delegate is only broadcasted when a new pawn has been successfully possessed and when unpossessing a non null pawn. Calling Possess with a null pawn will unpossess any current one.

  • New: Added some utility functions like CallOrRegister_OnCompletedInitialScan to UAssetManager that allow other systems/plugins to depend on asset manager initialization.

  • New: Fixed FCollisionProfileName detail customization to have a reset to defaults button.

  • New: Added tag container "DynamicAbilityTags" to FGameplayAbilitySpec. These are optional ability tags that are replicated with the spec. They are also captured as source tags by applied gameplay effects.

  • New: GameplayAbility IsLocallyControlled and HasAuthority functions are now callable from Blueprint.

  • New: Moved AGameMode::HasMatchEnded up to AGameModeBase.

  • New: Added New methods for ending camera shakes of a given type that originate from a given source.

  • New: Added a multicast delegate to GameInstance that gets triggered when a pawn gets it's controller assigned.

  • New: Added support for PlayScale, PlaySpace, and UserSpaceRotation for camera shake source components.

  • New: Reverted code to set a parent component that was accidentally removed for runtime builds.

  • New: Visual logger will now only collect and store info about instant GEs if we're currently recording visual logging data.

  • New: Added support for redirectors on gameplay attribute pins in blueprint nodes.

  • New: Added new functionality for when root motion movement related ability tasks end they will return the movement component's movement mode to the movement mode it was in before the task started.

  • New: A new base class for camera shake, called UCameraShakeBase, has been created. It offers a few basic pieces of logic (managing time, blending, play space, and scaling of shake) to make writing sub-classes easier. All the core engine APIs now take and return this base class. The old camera shake class is now renamed UMatineeCameraShake, since it contains a Matinee camera animation. It will make it easy to deprecate Matinee later. Some backwards compatible core engine APIs have been added that take and return the Matinee shake. This makes it possible to have core redirectors in place and not break existing content.

  • Improvement: AFunctionTest now passes messages around by const FString& instead of copying them.

  • Improvement: Improved many source code comments and cvar messages for commonly used gameplay config options to better explain their functionality.

  • Improvement: CurveTables now strip redundant keys at cook time to optimize loading at runtime.

  • Improvement: Consolidated client-server character movement RPCs to a simple function signature using a new extensible struct, to more easily support custom data in RPC parameters without having to change engine source. This allows for customized serialization that can more efficiently pack the data over the wire, and solves some previous ordering issues with ServerMoveOld being sent as a separate RPC function. See the feature docs for more details.

  • Deprecated: Deprecated UWorld::BeginTearingDownEvent in favor of FWorldDelegates::OnWorldBeginTearDown.

Learning Resources

Code Examples

  • New: We have set up a folder, instructions, and documentation for GitHub community members to contribute code snippets .

Localization

  • Crash Fix: Fixed a crash in LocalizationCommandletExecution caused by closing the process read and write pipes too early.

  • Bug Fix: Published a fix to stop watching a String Table CSV file when the String Table that loaded it is unregistered.

  • Bug Fix: Updated the localization source code gatherer so that it now reports warnings for localization macros that span multiple lines.

    • Previously the source code gatherer would not collect these since it runs line-by-line and would often ignore them.

  • Bug Fix: Fixed an issue where localization meta-data values with new lines would break the PO file.

  • Bug Fix: Enabled non-EDL archives to load Enabled String Table asset references when EDL is active.

  • Bug Fix: Added support for C++11 raw strings to the localization source code gatherer.

  • New: Added an alternative PO export mode that allows key stabilization to work correctly with Crowdin.

    • This uses the X-Crowdin-SourceKey tag to let Crowdin correctly track a piece of text over time. Crowdin is great for this as it uses a combination of msgctxt and msgid to find the text. The mode then puts the msgctxt into the msgid field and tells Crowdin to use msgstr as the source string.

    • The downside of this is that PO files no longer know which source string UE used to make a specific translation. Because of this UE4 is no longer able to tell whether a particular translation is "stale" when importing it from a PO file.

  • New: Added a way to get the language and locale, that the text localization manager will be requesting during initialization.

  • New: Added a data validator to ensure that localized assets conform to the rules needed to use them at runtime.

  • New: Enabled the AddToolbarExtender for use with StringTableEditor…

  • Improvement: Improved FText::IdenticalTo so it can now perform a deep comparison of the text history (comparing generated texts, like a format result). It can also now perform a lexical comparison of invariant text instances as well. This allows it to quickly compare two cases that would have previously failed the same check due to having different text data instances.

Networking

  • Bug Fix: Addressed an issue affecting level visibility changes received during seamless travel. These are now queued up and executed when the server has completed the travel to avoid issues with clients loading faster than the server.

  • Bug Fix: Fixed a crash where UE would not check NextIndex if valid in APlayerController::GetNextViewablePlayer.

  • Bug Fix: Fixed crash when cleaning up the world on seamless travel.

  • Bug Fix: SceneComponent - Fixed bug where UE might remove locally attached from AttachedChildren array if replicated AttachedChildren are not at once resolvable. This would call OnRep_AttachedChildren multiple times without receiving the array from the server.

  • Bug Fix: Added a check to prevent Actors pending kill from sending RPCs.

  • Bug Fix: Fixed an issue that would snap the Replicated Relative Location to zero. This was happening when UE attached the Component using snap-to-location and it changed the transform before replicating the attachment.

  • Bug Fix: Fixed an issue that caused initial lag statistics to be incorrect.

  • Bug Fix: Fixed a divide-by-zero compile error in ReadFixedCompressedFloat which occurred when instantiated with certain template parameters.

  • Bug Fix: Fixed replication bug causing re-used channels to permanently fail replication by moving closing of acknowledged channel closures to the end of ReceivedPacket. This restores the old behavior allowing channels to process incoming bunches before closing the channel.

    • The new behavior is closer to how it worked when we were sending explicit ack-bunches.

  • Bug Fix: Removed the ApplyStackingLogicPostApplyAsSource function from FActiveGameplayEffectsContainer because the system never called it. We also made the destructor of FActiveGameplayEffectsContainer non-virtual, since adding a VTABLE to a struct if not present in the base breaks reflection.

  • Bug Fix: Prevented calling PreReplicate and comparing properties multiple times for actors during multicast RPCs.

  • Bug Fix: Added a sanity check to prevent child net connections from creating channels.

  • Bug Fix: Fixed a potential underflow crash in the DTLS packet handler.

  • Bug Fix: Made sure we track property changes in Push Model due to mapping or unmapping network objects. This is only necessary for Client-Side Demo Recording.

  • Bug Fix: Prioritized FObjectKey in PushModel tracking instead of just UniqueId. This will guarantee uniqueness across Garbage Collections to prevent potential collisions.

  • Bug Fix: Fixed an issue where if UE added a replicated subobject to an actor that has already had its spawn acked, UE would prevent the actor from ever going dormant.

  • Bug Fix: Stopped NetSerializeStructs from using Property Identical checks on shadow state. Shadow State is not GC safe and this can cause crashes in rare circumstances.

  • Bug Fix: Fixed up a wrongly formatted log message in FObjectReplicator::StartReplicating and made it more descriptive.

  • Bug Fix: If SetReplicates is called on an already replicating Actor, we force property comparisons to capture the role change.

  • Bug Fix: Fixed "attempted to use an out of date NetDriver" log spam that could occur when a client attempted to connect to a new server.

  • Bug Fix: Fixed a regression in UEnum Net Serialization for max values.

  • New: In Networking Insights, specifying -NetTrace=[Verbosity] on the command line now implicitly enables the "net"-trace channel.

  • New: Added CSV Profiler events that can track when a Connection's Actor (or its Pawn) are stuck on network loads for a long time.

  • New: Added the choice to use the control channel for replicating destroyed static actors, rather than having each create its own channel.

  • New: Prioritized RemoveSwap over Remove when removing actors from actor rep lists in the Replication Graph to slightly improve speed.

  • New: Added a way to set certificate lifetime in the DTLS packet handler.

  • New: Made StatelessHandshakeComponent ENGINE_API.

  • New: Changed Fast Array Limits to configurable CVar. Added a log on the server when we know we have exceeded these limits.

  • Improvement: Exposed network dormancy types to Blueprint.

  • Improvement: Increased the default NetDriver bandwidth limit to roughly 100 KB/second. This will help alleviate latency users would experience when reaching the old limit. This new limit is still well within the ability of modern internet connections.

  • Improvement: Added a more explicit warning when UE replicates channel names as full strings and that causes overflows in bunch headers.

  • Improvement: The NotifyStreamingLevelUnload log from net drivers is now in the verbose category, reducing spam when LogNet is set to "log" verbosity.

Replays

  • Bug Fix: Fixed a rare crash when restoring startup actors during replay scrubbing where the actor's level was invalid.

  • Bug Fix: Fixed local replay streamer error on scrub if data did not decrypt properly.

  • Bug Fix: Changed how UE adds some actors to the network object list in replays to reduce the overall size of the list during recording.

  • Bug Fix: Fixed a rare replay bug where dynamic arrays would not be resized properly during playback.

  • Bug Fix: Fixed local replay streamer not raising an error properly when not decompressing or decrypt a chunk of streaming data.

  • Bug Fix: Fixed level script actor names in streaming levels that UE incorrectly mapped to the wrong game instance when using Play-In-Editor replays.

  • Bug Fix: Added better logging for replay header flags during playback. Fixed delta checkpoint loads skipping the last packet in each checkpoint.

  • Bug Fix: Modified serialization of class net cache exports in replays to be properly unique when two classes share a name but have different paths.

  • Bug Fix: Fixed a rare replay crash that could occur if two net export classes had the same name but different paths.

  • New: Added the ability for the replication graphs to record without using a demo net driver. We also added a replay subsystem as an interface for both recording methods. We've also added support for when a dormant channel closes when recording. Lastly, we deprecated most public variables of UDemoNetDriver.

Replication Graph

  • New: Added a call to ShouldReplicateActor in the replication graph when adding a new actor to mirror the functionality of the network object list.

  • Deprecated: Deprecated the GraphConnection's ConnectionId and renamed it to ConnectionOrderNum. We did this to prevent users from thinking the ID persists across the lifetime of the object. In fact, it's only unique during a single tick of the RepGraph and will change during a session as clients join and disconnect.

Socket Subsystem

  • New: Added option to TcpListener that allows to make the socket non-reusable.

Online

  • Bug Fix: Fixed a crash when destroying an online session on iOS.

  • Bug Fix: Fixed a bug preventing UE from adding secondary players to platform sessions.

  • Bug Fix: Fixed a bug preventing platform sessions from clearing in Social Party's replicated data that have no members when we are promoted.

  • Bug Fix: Modified Party Platform Session Monitor to only do a FindSessionById and to not retry on failed session finds. This fixes repeated failed session finds happening on a timer.

  • New: Added optional iOS 13+ support to the WebAuth plugin, which adds the required protocols to handle view support.

  • New: Added directive to force account picker on login in defined platforms.

  • New: Updated IVoiceChatUser instances created with the IVoiceChat::CreateUser API so they are now released with the IVoiceChat::ReleaseUser API. These were previously released by calling "delete" on them.

  • New: Added ::Exec() function to SocialToolkit. SocialManager now attempts to call Exec on all its SocialToolkit instances (after attempting SocialDebug instances)

  • Improvement: Upgraded Android BillingApiV2 to version 3.0.0 to better support in-app purchases.

  • Improvement: Leaderboards now test interface refactor to admit more parameters when querying leaderboards.

  • Improvement: Improved NvEnc and Amf in the AVEncoder module so that they now use the unwrapped DX Device. This fixes pixelstreaming/highlight recording for both NvEnc and Amf when used in together with the EOS SDK. This is necessary because the EOS SDK hijacks the D3D11CreateDevice.

  • Deprecated: IOnlineStore is deprecated, please use IOnlineStoreV2 and IOnlinePurchase instead.

  • Deprecated: Removed deprecated iOS 11 SDK calls from WebAuth, as UE supports iOS 12+ by default.

  • Deprecated: The IVoiceChat interface (and therefore the VivoxVoiceChat implementation plugin) has migrated from using human readable display names as the device selector, to using unique device ids. This fixes issues where a user with multiple, identically named devices could not differentiate between them. New "Get" methods return a structure containing both the human readable display name, and the unique id, and new "Set" methods take the unique id.

Deprecated methods, and the relevant new method to use instead: GetAvailableInputDevices -> GetAvailableInputDeviceInfos GetAvailableOutputDevices -> GetAvailableOutputDeviceInfos SetInputDevice -> SetInputDeviceId SetOutputDevice -> SetOutputDeviceId GetInputDevice -> GetInputDeviceInfo GetOutputDevice -> GetOutputDeviceInfo GetDefaultInputDevice -> GetDefaultInputDeviceInfo GetDefaultOutputDevice -> GetDefaultOutputDeviceInfo

Deprecated APIs have been replaced with helper methods that adhere to the old contract, to aid migration.

  • Deprecated: Removed unused dead code from the PixelStreaming plugin

  • Deprecated: Changed OSS iOS instances of playerID to use gamePlayerID for iOS 12.4+. This is important because Apple no longer supports playerID in GameKit and for certain iOS revisions this may fail to give a result if used. The replacement gamePlayerID will not give you an id based on the older global playerID but an entirely new value. Be aware that if you have data that relies on the old playerID system you will need to track and migrate this data to the new gamePlayerID upon first successful login.

HTTP

  • Bug Fix: Updated IHttpRequest to use a thread safe shared pointer. This should help fix crashes caused by the system creating requests on threads other than the game thread.

  • Bug Fix: Added a http check in curlhttpRequest to avoid Download Image BP to fail when using a local file instead of a web URL.

  • Bug Fix: JsonSerializer now properly serializes an array of json values instead of treating it as a json object.

  • New: Added move-aware SetContent API to IHttpRequest to avoid copying the payload. This is especially helpful when passing large payloads to the HTTP system.

  • New: Added support for path parameters to the HTTP Server. You can now add routes with path parameters by providing them in the path like so: "/route/object/:objectid"

  • Deprecated: Changed instances of SecTrustEvaluate (which Apple deprecated) to instead use SecTrustEvaluateError when building for iOS 12+, tvOS 12+, and macOS 10.14+.

Online Subsystem

  • Bug Fix: The ToString function now reports the correct version number in all localizations.

  • Bug Fix: Fixed some race conditions and instances of not getting marked as complete in Online Subsystem GDK's async tasks.

  • New: Added Operations Support System (OSS) to support "Sign in with Apple" on iOS.

  • New: Provided a way to pass an obfuscated user id when purchasing using OnlineSubsystemGooglePlay. Google uses this as part of their anti-fraud efforts.

  • New: Added MaxSpectators session setting.

  • New: Moved parsing logic of ReadOnlineSubsystemConfigPairs into a public function ParseOnlineSubsystemConfigPairs.

  • New: Implemented FindSessionById in TestSessionInterface.

  • New: Added IOnlineSession::StartMatchmaking with per-user settings. Not implemented on most platforms.

  • New: OnlineSubsytemGDK has been added to help support new Microsoft GDK platforms.

  • Improvement: Changed iOS instances of playerID to use teamPlayerID instead for iOS 12.4+. This should make it easier to find the right players.

  • Improvement: Moved MAX_LOCAL_PLAYERS definitions to platform extensions to OnlineSubsystem.

  • Improvement: Modified FOnlineEventParms to use FString instead of FName.

  • Improvement: Added new implementation of QueryPresence that takes multiple ids.

WebSockets

  • New: Added error message handling to Matchmaking websocket clients for both client and Dedicated Servers.

  • New: Added flag from client settings to mcp ticket to signify legacy controls were forced to be changed to new control mappings.

XMPP

  • Bug Fix: Added a Tick function in XmppModule to call ProcessPendingRemovals to clean closed xmpp connections.

Paper2D

  • Bug Fix: Hosted mode toolkits can now display in the level editor for modes which are not part of the toolbar, such as Paper2D.

  • Bug Fix: Fixed a bug that caused old assets not to appear in the SpriteEditor if they were unloaded.

  • New: Exposed the GetSpriteColor function for UPaperFlipbookComponent.

Physics

  • Crash Fix: Attempting to generate a levelset from an empty triangle mesh no long causes Editor to crash.

  • Crash Fix: Updating shape bounds with invalid geometry no longer crashes Editor.

  • Crash Fix: Running scene queries against clustered objects no longer crashes Editor.

  • Crash Fix: Converting a static mesh with null materials into a Geometry Collection no longer causes Editor to crash.

  • Crash Fix: Chaos Niagara interface binding to events for non-active editor solvers no longer causes Editor to crash.

  • Bug Fix: Unculled fields no longer incorrectly apply dynamic parameters to inactive geometry collection particles.

  • Bug Fix: Holes are now properly supported in Chaos landscapes and navigation meshes.

  • Bug Fix: Geometry collection collision filters now correctly filter down from the component settings.

  • Bug Fix: GC scene proxy initialization for RHIs that do not support no-overwrite locking now function properly.

  • Bug Fix: Skipping navigation generation for geometry collection components when they have no available rest collection now works properly.

  • Bug Fix: Disabled particles now function correctly. They no longer get pushed into spatial acceleration structures, fixed cluster particles, and global objects or skip collision resolution while slowing down other queries.

  • Bug Fix: Geometry Collection non-threadsafe collection on DDC cook now functions correctly.

  • Bug Fix: Cluster implicits and initial cluster transforms now function correctly.

  • Bug Fix: Underlying Cull Field now correctly reports the type so the operator nodes can work properly with culled data sets.

  • Bug Fix: Resolved several LiDAR-related line tracing issues.

  • Bug Fix: External strains no longer incorrectly always trigger breaks in geometry collections.

  • Bug Fix: Geometry Collection non-threadsafe code in connectivity graph generation now functions correctly.

  • Bug Fix: Update Body Scale now correctly handles tri-meshes that were created from an externally owned mesh.

  • Bug Fix: Geometry Collection cluster transforms are now correct after changing leaf node transformations for fractured pieces.

  • Removed: Collision particles for Chaos unions and re-enabling child collisions for unions passing through the child simplicials.

  • Bug Fix: Cluster unions are no longer incorrectly filtered out of collision detection due to internally created clusters not having valid collision filter data.

  • Bug Fix: Phantom collisions in Chaos now function correctly. They no longer remove dynamic particles from a disabled active particle list and no longer force a dirty state on every Geometry Collection particle during Physics State Push.

  • Bug Fix: Material face remapping now works correctly when cleaning Chaos triangle meshes.

  • Improvement: Physics Material is now part of the Physics Core module so you can use it outside of the Engine.

  • New: Using physical materials now requires Physics Core as a module dependency.

  • New: Geometry collection now uses Unreal physical materials rather than the obsolete Chaos physical materials.

  • New: Landscapes that are re-topologized now have a new Chaos mesh collider.

  • New: Added an Experimental Chaos Caching plugin to manage and record and playback physical simulations. Currently implemented for static mesh and geometry collection components.

  • New: Heightfields in Chaos level-set collisions now can use the PhiWithNormal setting.

  • New: Reimplemented analytic solver floor for custom Chaos solver actors.

  • New: Implemented basic network replication for geometry conditions to correct the client. The replication can cause differing results with stacked objects since the client can run simulations between updates without prediction.

  • New: Chaos Solver Actor is now refactored and solver properties are now their own object. Additionally, the enable/disable is now replaced with the ability to "pause" a solver. A paused solver ticks at Dt=0 and still runs through the advance to update other systems, such as spatial acceleration.

  • New: Implemented Levelset sweep and overlap functionality.

  • New: Added Levelset overlap implementation

  • Improvement: Optimized Collision Detection through replacing expensive thread-safe queues with a pre-allocated cache that does not require synchronization and improved collision detection and gather to be move-aware and avoid repeated copies of contact data.

  • Improvement: Contact graph generation in Chaos is now optimized.

  • Improvement: Chaos field command types now use reduced evaluated sample sets.

  • Improvement: Scene queries for children of internal clusters are now enabled in Chaos.

  • Improvement: Volume levelset approximations are now closer to the actual value; however, it is not completely accurate at this time.

  • Improvement: Geometry collection collisions now default to implicit-implicit to match the default collision Box type.

  • Improvement: Union group generation in Chaos clustering no longer submits breaking events when releasing from a static cluster when building internal clusters.

  • Improvement: Added pre-skinned bounds for Geometry Collection render proxies.

  • Deprecated: The APEX Destruction plugin is now deprecated.

Clothing

  • Crash Fix: Restoring the cloth LOD index after undoing Remove Cloth to prevent simulation no longer crashes Editor.

  • Bug Fix: Resolved an error that occurred when deleting a duplicated SimpleCloth asset.

  • Bug Fix: Resolved an error when loading 4.24 cloth assets that displayed the message, "Attempting to replace an object that hasn't been fully loaded: ClothConfigNv object."

  • Bug Fix: Fixed an empty cloth configuration migration issue when reloading 4.24 assets that were caused by a deprecated config property having its UObject name recycled.

  • Bug Fix: Changing buffer buckets now size correctly when using 65k cloth.

  • New: The Clothing Simulation Factory property in the Skeletal Mesh Component will automatically change at run time to the first available factory that is compatible with the included cloth assets. This allows to run Chaos Cloth simulation on levels setup with the ClothingSimulationNv when PhysX is disabled, and vice-versa.

  • New: A warning message now appears in the Mesh Editor viewport when the Chaos Cloth simulation lost impulses due to running slow or being teleported

  • New: Cloth diagnostic and profiling functions are now part of the Clothing Simulation Interactor in Chaos Cloth, which means they can be called in blueprints. This feature is not compatible with PhysX.

  • Improvement: Mesh-to-mesh skinning now supports multiple influence triangles. This change allows the use of multiple low-res/sim triangles to influence a high-res mesh vertex, and you no longer need to bind mesh vertices with barycentric weighting.

  • Deprecated: Removed the uninitialized member bEnableClothLOD_DEPRECATED from the Skeletal Mesh section serialization.

Collision Detection

  • Bug Fix: In the Details panel, the "Reset to Default" buttons on the mesh collision preset "Object Response" channel now functions correctly.

  • Bug Fix: The Reset to Defaults button now works correctly on "Object Response" channel rows in the collision property details.

  • Crash Fix: On Create Physics State function of the Landscape Heightfield Collision Component no longer causes Editor to crash.

  • Improvement: Updated an asset warning for the Cook Collision Data function in the Landscape Heightfield Collision Component.

  • Improvement: Clustering contact rejection now considers the velocity along with the collision rather than the impulse of the collision.

Linux

  • Bug Fix: Resolved an issue with Linux with the SegFault in source filtering and notification manager when closing QAGame Clear Regional Lists at the pre-exit instead of during the global dtor.

  • New: Building with a -gbd-index with Clang v9 or above now cuts symbol loading time by more than half (45 seconds to 17 seconds).

  • New: Added the No Relative Mouse Mode command-line option to support remote VNC.

  • New: Lld linker is now supported with Clang v9 and above.

Rigid Bodies

  • New: You can now Reset Geometry Collections to empty (pre-fracture state) through the Reset button on the Fracture Mode toolbar. Reset only works with assets that are generated from the Geometry Collection.

Platforms

  • Bug Fix: Check if the platform's ini name is valid (not empty) before trying to load the target platform module. If the platform's ini name is empty and it drops down to using [IniName]+TargetPlatform it will try to recursively load TargetPlatform. This can happen in cases where the AllDesktopTargetPlatform module is not available.

  • Bug Fix: When using the HLSL Cross Compiler, the Shader Compiler Workers (SCW) no longer use more memory than was available on the PC. SCWs are now recycled after each job. You can also now enable the ability to restrict the SCW count based on the memory on non-build machines.

  • Bug Fix: Fixed an uninitialized variable in FShaderPipelineCache that was causing stable cache load failures on some computers.

  • Bug Fix: Released a fix for a console command not properly allocating the right amount for the string. This resolves a potential buffer overrun crash.

  • Bug Fix: Added a fix for PSO Cache not properly setting the mask when no cache is present but game mask usage is enabled.

  • Bug Fix: Fixed an issue concerning invalid PSO masks when the GameMask is disabled by default.

  • Bug Fix: Fixed the + issue on AdditionalRestrictedFolders in DataDrivenPlatformInfo.ini once and for all.

  • New: If an appropriately named platform directory exists under Platforms, it is assumed the project supports the named platform.

  • New: The ISPC compiler was updated to version 1.13.

  • New: CountLeadingZeros and FloorLog2 were optimized.

  • New: Editor Preview Rendering Level platforms are now extensible using DataDrivenPlatform.ini.

  • New: Made the per-platform properties evaluate to the current Preview Rendering Level in the editor.

  • New: Added platform extensions support for installed builds BuildGraph changes:

    • now accepts a semicolon-delimited list of includes to process.

    • This allows a list of includes to be determined dynamically.

    • Pass DataDrivenPlatformInfo names to BuildGraph scripts.

  • New: Made modifications to allow support for multiple build distribution backends. From now on, adding support for a new build distribution backend like XGE can be done by writing a new plugin. To support this we also renamed all classes/structs involved in generic tasks to remove XGE from the name, and we wrapped XGEControllerModule into a plugin. Additionally we exposed methods in Shader Core to figure out the real path from virtual paths for shaders, and added a method so each target platform can define their compiler dependencies.

  • New: Optimized the Expand command of ShaderPipelineCacheTools commandlet so that it takes less time to finish and uses less memory.

  • New: Added support for data sets larger than 2 GB to the ShaderPipelineCacheTools commandlet.

  • New: Enabled all categories in persistent storage manager and set all quota to unlimited. Access to containers in persistent storage manager is not thread-safe. This makes sure all files can still be written to persistent storage without any extra restriction, but analytics will still be able to collect usage information for each category.

  • New: Added a CVar per console to allow gamepad control of the cursor without requiring a mouse. These include: GSonyAllowGamepadControlOfCursor, GSwitchAllowGamepadControlOfCursor, and GXboxOneAllowGamepadControlOfCursor.

  • New: Changed the verbosity of detailed material info printed to the login ShaderPipelineCacheTools commandlet to not spam the log unnecessarily.

  • New: Improved platform extension plugin name error to indicate the proper fix depending on what is wrong.

  • New: UE no longer scans for .uplugin files for platform extensions where there is no support for the platform compiled into the editor. This helps with build machines that don't have NDAd platform support that makes precompiled binaries, but users sync those platforms so they have the .uplugin locally. We've also added a FDataDrivenPlatformInfoRegistry::HasCompiledSupportForPlatform() function that can be used in other places to detect if a platform has been compiled or not.

  • Improvement: Platform extension changes:

    • This restores original command line args to existing platforms.

    • Test that platform is enabled in each of the macros defined so that the base script doesn't need knowledge of what platforms are enabled.

  • Improvement: Performed a big code reorganization for PlatformExtensions (Engine/Platforms/…) and Restricted (for instance, Engine/Restricted/NotForLicensees/… and Engine/Restricted/NotForLIcensees/Platforms/…). This is to prepare a cleaner p4 permissions structure in UE5. Projects can also have a Platforms directory to put platform specific files into, but it is not required you re-layout your directories to match.

  • Deprecated: Removed deprecated GetUniqueDeviceId() from UE4. GetDeviceId() now returns an empty string on un-implemented platforms, instead of falling back to GetUniqueDeviceId(). This would end up returning a constant MD5 hash of an empty string on platforms that don't implement GetMacAddress(). GetHashedMacAddressString() will now return an empty string if the MAC address is not implemented on the platform.

  • Removed: Deleted fake XXX platform extension.

All Mobile

  • Bug Fix: Changed IntelISPCTexComp to use 6x6 for ASTC normalmap compression.

Android

  • Bug Fix: Fix to create video track info if unable to run media extractor (usually network streams),

  • Bug Fix: Corrected calculation of OBB per file cost.

  • Bug Fix: Fixed a crash in AndroidMovieStreamer if no PAK files to search. We also fixed the same issue in AndroidMediaPlayer.

  • Bug Fix: Addressed a handle exception that can occur when attempting to clear keyboard focus after having used autocomplete.

  • Bug Fix: Disabled --gc-sections on link if not compiling with -ffunction-sections and -fdata-sections for Android.

  • Bug Fix: Ensured android java restarts only happen from the UIThread. Fixes possible race conditions in which startActivity could create the new activity in the same process as the outgoing activity and then exiting process.

  • Bug Fix: Fixed a bug when GameThread will be displayed as Thread-2 and UI Thread will be displayed as "MainThread-UE4" in Android Studio.

  • Bug Fix: Added support for Android SDK Cmake for building PhysX for Android.

  • Bug Fix: Fixed incorrectly configured GL shader programs when an evicted binary program is restored from the BSS cache.

  • Bug Fix: Disabled autofill manager in GameActivity to prevent Android 10 crash.

  • Bug Fix: Performed an update to correctly track OpenGL resources in ELLTracker::Platform.

  • Bug Fix: Disabled WRITE_EXTERNAL_STORAGE permission if not needed (shipping and externalfilesdir enabled).

  • Bug Fix: Linking a compute shader will now print an error message only in Debug Android builds.

  • Bug Fix: Fixed random memory corruption when using BP arrays on Android armv7 platform.

  • Bug Fix: Enabled universal APK by default for Android. Bundles still need to be enabled for this to take effect.

  • Bug Fix: Fixed an issue where enabling Vulkan validation layers would cause a crash on Android devices

  • Bug Fix: Fixed an app crash when exporting a texture through 'Export to Disk' BP node on Android.

  • Bug Fix: Fixed inverted scene captures with Android GLES RHI. The "Disable Flip Copy GLES" option added in 4.25 introduced this regression as the flag was being treated opposite to what was intended. The 4.26 behavior is now the same as 4.24.

  • Bug Fix: Fixed crash that could occur when invalid memory is encountered during stack walk.

  • Bug Fix: Released a fix for an Android build issue where gradle was being run even if the apk was up to date due to some incorrect file paths.

  • Bug Fix: Changed android physical memory usage reporting on Android 10+ to use VmRSS. This is due to getProcessMemoryInfo only updating once every five minutes with Android 10.

  • New: UE will now report an error if x64 or x86 is the only platform and in binary build.

  • New: Added Android Vulkan frame pacer to support switching native display refresh rates.

  • New: Added the a.SupportNonVSyncMultipleFrameRates console variable to support CPU-based frame pacing to target frame rates that are not a multiple of any available vsync rates.

  • New: Added Android Platform support to query available screen refresh rates, and to set the current screen refresh rate.

  • New: Updated Network Changed Manager to provide network connection type. The Network Changed Manager is the best place to know what kind of connection type we have. This change introduces a Network Transport Type enum provided in the On Network Available callback of the Network Connectivity Client. The callback is called any time the transport type changes.

  • New: Added more UPL plugin injection points for Android Activity and Application.

  • New: Exposed memory warning state received from Google's MemoryAdvice library to CSV profiler as an integer value. This graph can be found under Android Memory section in your CSV report. This library might not be reliable on certain devices and it's output should be used as a guideline, not a hard rule. The warning state integer can have 3 states:

    • 0 (OK)

    • 1 (Approaching memory limit)

    • 2 (Critical, application can be OOM killed any time).

  • New: Added support for Texture2D arrays in OpenGL.

  • New: Exposed Android CPU Temperature (STAT_CPUTemp) and Thermal Status (STAT_CPU_ThermalStatus) to Unreal Insight and CSV profiler. In Unreal Insights these stats can be found under STATGROUP_AndroidCPU. In CSV reports these stats can be found under "Android Thermals".

  • New: Cleaned up OpenGL ES implementation and based it on ES3.1 spec. NDK minimum version is set to 21 (link against libGLESv3.so ).

  • New: Added option for up to 2 overflow OBB files if Patch OBB enabled.

  • New: Added GL RHI support for creating VB/IBs WithoutNativeResources and switching of VB/IB underlying resources. Required for mesh lod streaming support.

  • Improvement: LibPNG has been updated to version 1.6.37.

  • Improvement: FreeType 2 for Android has been updated to version 2.10.4.

  • Improvement: libsndfile has been updated to version 0.1.9.

  • Improvement: Shader models that are not compatible with Mobile feature levels will now fallback to a default shader model and display a warning in the console log. In the Defaults for your material, you can set the Shading Model to From Material Expression to add a Shading Model pin to the output node. You can then use a Feature Level switch to control the Shading Model.

iOS

  • Bug Fix: Fixed a crash in FIOSInputInterface::SendControllerEvents due to a call to UIInterfaceOrientation from the game thread

  • Bug Fix: Removed FullHDR as a reflection capture format on iOS. This prevented full hdr data from being stored in cooked data then discarded after load, which was causing memory spikes on load.

  • Bug Fix: Adjusted compression on iOS to fallback to a supported format instead of leaving texture uncompressed when compression is set to a BC7 format.

  • Bug Fix: Fixed an iOS GPU crash when PostProcess material uses a custom stencil while project sets r.CustomDepth=1.

  • Bug Fix: Fixed an issue where AnimSequence assets in DLC packages could not be correctly loaded on iOS.

  • Bug Fix: Fixed an iOS GPU crash when doing scene captures with MSAA enabled.

  • Bug Fix: Fixed a number of minor issues to enable the use of the Address Sanitizer with iOS.

  • Bug Fix: Added a fix for UObject invocation on non-game thread which could cause a race condition or crash.

  • Bug Fix: Added a device profile for TVOS that inherits AppleTV settings.

  • Bug Fix: [IOS] Added a check if the bundle exists before trying to copy manifests. This prevents an error being displayed in the log before staging.

  • New: Added a batch file in Engine\Extras\iTunes that will set the required file permissions to allow Unreal Engine to communicate with iTunes installed from the Windows Store.

  • New: Added code to hide the white bar indicating where to swipe the Home gesture on iPhone X and later devices.

  • New: Added Multi User support on tvOS.

  • New: Removed iOS 6 to 11 references, made iOS 12 minimum support iOS version, and added iOS14.

  • New: Removed ios 11 support and set ios 12 as default in webauth.

  • New: Fixed deprecated behavior of Menu button on iOS and tvOS.

  • New: Modified how provisioning profiles are selected for signing of IPAs on iOS. Newer profiles are now checked first by sorting the complete profile list into descending order based on creation date. This addresses the issue where people can recreate a profile (for example, by adding a new device or changing entitlements), reimport it, and still have the old profile be selected because the older file was returned first by EnumerateFiles.

  • New: Added device profile detection support for iPhone 12, iPad Air 4 and iPad 8 devices. Mapping of the iOS hardware string (such as "iPhone13,4") to a specific device profile is now performed using regular expressions in the [IOSDeviceMappings] section of BaseDeviceProfiles.ini for easier updating.

  • New: Added a setting to the ARKit plugin that allows projects to choose whether they may only be installed on ARKit-compatible devices. The setting is True by default (requiring AR capable devices) which is the existing behavior, and because apps can remove hardware requirements like this in updates but not add them.

  • New: Removed arm64 references as they're now the only supported architecture on iOS

  • New: Added support for the Metal Compiler Tools for Windows, and modified the hash key to be based on the compiler version instead of the Xcode version.

  • New: Attempting to bind a memoryless texture is now a hard failure.

  • New: We've moved all code into the .text segment on ARM.

  • New: Changed the memory statistics to use the OS jetsam values for determining total memory available.

  • New: Removed internal argument buffer emulation. This saves about 1.7MB on average under heavy load.

  • New: We now triple-buffer dynamic and volatile allocations. This pushes all transfer buffers (for platforms that use a staging buffer to blit into private buffers) into a short-lived frame allocator pool.

  • New: Memory usage is now obtained via usage of IOS 13 API, os_proc_available_memory(). This provides more accurate accounting of the memory left until being jetsamed.

  • New: Addied iPad Pro 2020 device profiles (12.9 and 11).

  • New: We now allow the use of presentAfterMinimumDuration Metal API to smooth out the framerate on IOS.

  • New: [IOS] We've rebuilt IPhonePackager with new code to support Apple Development and Distribution certificates.

  • New: [IOS] Added support for Apple Development and Distribution certificates.

  • Improvement: Performed code cleaning and an overall refactor of ios14 and tvos14 input interface requirements (glyphs and current controller feature).

  • Removed: The Apsalar plugin has been removed. It had been relying on a deprecated SDK and APIs and had been non-functional for some time.

Linux

  • Bug Fix: Implemented GetWindowUnderCursor for Unix Platform.

  • Bug Fix: Updated README.md for Linux build.

  • Bug Fix: Fixed SegFault in source filtering and notification manager when closing QAGame Clear RegionalLists at pre-exit instead of during global dtor when many objects / modules have been freed. Call RemoveAll on FilterCollection->GetSourceFilters updated in PreExit instead of global dtor when many objects / modules have been shut down.

  • Bug Fix: For Unix, fixed FUnixPlatformMemory::GetStats() that always returned 0 when memory was over 10.24gigs.

  • Bug Fix: UE no longer hard codes c14 in LinuxToolchain as the default c standard.

  • Bug Fix: Added SP_OPENGL_SM4_REMOVED to IsDeprecatedShaderPlatform(). This fixes assert when getting shader stats (called from FShaderCookerStats::Initialize).

  • Bug Fix: Added error messagebox when vkGetPhysicalDeviceSurfaceSupportKHR fails (no present support).

  • Bug Fix: For Linux Vulkan, fixed amdgpu mesa crash where drawinstance call is outside render pass enabling shader complexity view.

  • Bug Fix: Update translucent rendering fix to use BeginRenderingTranslucency.

  • Bug Fix: Honor UE4's Mono-build environment using Build.sh .

  • Bug Fix: Fixed BC6H/BC7 texture formats not being available for Linux.

  • Bug Fix: Fixed submenus closing causing main context to close.

  • Bug Fix: Fixed focus issue where Windows with never activate policy were being set to active.

  • New: Updated Linux SDL2.0.10 to SDL2-2.0.13-13784. Also we removed Epic opengl and emscriptem changes. Source snapshot for SDL 2.0 (Updated Wed Apr 29, 2020) https://www.libsdl.org/hg.php .

  • New: Enabled ssse3 by default for Linux x86.

  • New: Build ShaderConductor for Linux Script now uses v16 Clang 9.0.1, and works around incorrect llvm-tblgen location. This also adds declspec guid -fms-extensions for build error.

  • New: Updated Linux SDL2.0.10 build files to SDL2-2.0.13-13784.

  • New: Added support for multithreading in forked processes. Use -PostForkThreading when SupportsMultithreading() is false to allow multithreading in forked processes. Forked processes do not inherit threads from the master, so this keeps the master process in single thread mode but transforms the RunnableThreads into real threads on the forked version. Use FForkProcessHelper::CreateForkableThread to use this feature. ForkableThreads will behave correctly according to the environment they are called in (singlethread, multi thread, forkable). SyncEvents created in -PostForkThreading environments are real events on the master process (Win, Unix platform only).

  • New: Added TaskGraph.ForkedProcessMaxWorkerThreads cvar to directly control the number of worker threads spawned on forked processes that enable multithreading.

  • New: TaskGraph can now be multithreaded on a forked server with -PostForkThreading. To do this the TaskGraph needs to be shut down and recreated entirely by the forked process for the switch to occur. The functionality can be disabled via "TaskGraph.EnableForkedMultithreading 0" if needed.

  • New: Linux AArch64 libs for FreeType2 v2.10.0, ICU 64.1, and HarfBuzz 2.4.0 now include BuildForLinuxAArch64.sh cross compilation scripts. This also adds LinuxAArch64 back to installed engine builds.

  • New: Added bGdbIndexSection bool to LinuxToolChain.

  • New: Changed default linux directory permissions to 775 from 755 to make working with them easier.

  • New: You can now use msbuild in mono for Linux when using an installed copy and mono >= 5.0.

  • New: Linux directory watcher optimizations and fixes for cases where we're running with "virtual" layers in the platform file (i.e. pak files).

  • New: Added a skip linux UE4_DO_ROOT_PRIVILEGE_CHECK check for programs.

  • New: Updated to new LLVM V17 Clang 10.0.1 toolchain.

  • New: Moved to using llvm-objcopy for objcopy and strip.

  • New: Installed Linux builds now assume a bundled toolchain.

Mac

  • Bug Fix: Fixed build for Xcode 12.1.

  • Bug Fix: Updated Mac Chromium Framework binary with a version that fixes a crash on macOS 10.15 Catalina. This was caused due to CEF's use of TSM API outside of the main thread.

  • Bug Fix: Fixed flickering decals in mobile preview.

  • Bug Fix: Changed Mac toolchain to use relative paths where possible when linking. This solves the "Argument list too long" error during linking.

  • Bug Fix: Released a fix for a Metal validation failure. In MetalStateCache, make sure that the color attachment's slice is always set to 0 for 3D textures, as they don't support rendering to multiple slices.

  • New: Updated third party binaries required to support the majority of Mac client targets targeting Apple Silicon.

    • Remember that Steam SDK does not have an ARM64 slice and will not link to an ARM64 or fat target.

  • New: The minimum macOS version required has been rolled forward to Mojave 10.14.

  • New: Removed internal argument buffer emulation.

  • New: Updated FMacPlatformProcess::GetDllHandle() to accommodate macOS 11 Big Sur.

  • New: Enabled Metal RHI runtime virtual texture support.

  • New: Fixed an error adding Android tools to path in the SetupAndroid.command shell script.

  • New: Added support on Mac and Linux for user-defined .unrealrc files that allow developers to specify environment variables for UBT and UAT scripts. .unrealrc files in the home and the workspace directory will be applied before the editor, UnrealBuildTool, UnrealAutomation tool, etc are run.

  • New: -Wno-range-loop-analysis is now set when building iOS / Mac with Clang 12.0.0 or higher (Xcode 12.00). This should prevent warnings when ranged loops use copies and not references. Note that all instances have been fixed up, the warning is disabled as these issues are easily introduced but only Clang on Apple platforms currently warns about them.

  • New: Removed VR support for Mac. No longer supported and not compatible with current/future Mac updates.

  • New: Improved the GPUBenchmark accuracy on Mac.

  • New: Enabled MacClient target platform on windows.

Steam OS

  • Bug Fix: Changed the desc status for hidden in the Steam achievements query.

VR

  • Bug Fix: Fixed a bug where Windows Mixed Reality hand joint transforms were always returning an invalid radius.

  • Bug Fix: Fixed a bug where the VR Mode Vive touchpad was not scrolling smoothly.

Windows

  • Bug Fix: Fixed FWindowsPlatformProcess::GetPerFrameProcessorUsage to work with more logical cores.

  • Bug Fix: Fixed handling of UNC paths on Windows.

  • Bug Fix: Fixed a bug in ShaderPipelineCache commandlet that was making it generate too many PSO permutations on D3D12

  • New: Clang builds on Windows now build with the -mssse3 flag to match Visual Studio 2019 SSE support.

  • New: Made FD3D12GPUFence available externally.

  • New: Changed the File|Package menu for Windows to only show 32 or 64-bit options, based on the bTarget32Bit Windows project setting. It now won't cook with Win64 but run with Win32.

  • New: Made ProjectLauncher/UnrealFrontend/LaunchOn respect the Target32Bit windows project setting.

Rendering

  • Crash Fix: Fixed a crash that occurred when resizing a UTextureRenderTarget2D with autogenerate mips enabled.

  • Crash Fix: Corrected a startup crash that occurred when -disable-platform-chunk-install was enabled

  • Crash Fix: Implemented a fix for a rare crash, which happens for users with multiple adapters, where not all of them support ALLOW_TEARING.

  • Crash Fix: Vulkan: Fixed the handling of FRHITextureReference. This corrected a crash which occurred when importing UDIM textures.

  • Crash Fix: Corrected a crash that would occur if a game started up in a specific mode, and clicked in another window. This would cause DXGI_ERROR_INVALID_CALL, which would cause the engine to halt.

  • Crash Fix: Fixed a crash on certain platforms when running with "-onethread" caused by incorrect reference counting in FSlate3DRendering.

  • Crash Fix: Fixed a crash in the Hierarchical Instanced Static Mesh of Mesh with MinLOD set to 1 or higher.

  • Crash Fix: Fixed a potential crash in Sky Light when attempting to dispatch CDF compute shaders before the shader map was ready.

  • Crash Fix: 64bit math is now used for calculations when building large streaming virtual textures, which prevents crashes from 32 bit overflow errors when building the textures; out of memory errors during texture compression for 64K textures remain possible.

  • Crash Fix: Fixed a crash that occurred during ClearUAV in OpenGL ES due to the UnrealFormat being set incorrectly in the constructor of the FOpenGLStructuredBufferUnorderedAccessView.

  • Crash Fix: Fixed a crash on macOS when setting the budget too high.

  • Crash Fix: Fixed a crash when a texture was not null but the internal referenced texture was. This was handled individually by some RHIs but now it is managed at a high level.

  • Crash Fix: There will no longer be an attempt to add shader virtual paths if shader compilation was disabled on the command line. This avoids some crashes in editor builds that don't have a shader source.

  • Bug Fix: Fixed cloud interaction with opaques being biased by back and forth deviceZ/linear depth transform. Also unified the code and tested translucent rendering and intersection when using Translucent.ScreenPercentage < 100.

  • Bug Fix: Now uses the same reflection environment shader permutation for deferred reflections as for SSR. Fixes deferred reflections on clear coat materials.

  • Bug Fix: Fixed leaking frametempmemory in Vulkan.

  • Bug Fix: For the Pixel Streaming Signaling Web Server, add an error code for the disconnect player event.

  • Bug Fix: The DeviceRemovedReason is now logged to verify the device has not been hung.

  • Bug Fix: Vulkan textures created with TexCreate_CPUReadback are now created as buffers. This allows for support for mip levels on hardware that does not expose this feature. Added basic Transitions to LandscapeEditoLayers, so it passes validation.

  • Bug Fix: Fixed an issue with resource barriers being nonsense. Corrects an issue with subsurface scattering not working correctly on AMD.

  • Bug Fix: Added fixes to RendererScene.cpp.

    • Fixed sublevel loading.

    • Fixed a crash bug in the shadow generation code.

    • Added a missing FMemMark in FAsyncCreateLightPrimitiveInteractionsTask.

  • Bug Fix: Fixed deferred reflection reflection capture compositing on ray miss.

  • Bug Fix: Fixed an issue in DX11 RenderTarget binding. When Pixel Shaders write to a variable number of render targets within a pass and use UAVs, they end up overwriting bound RTVs. This caused issues with Objects -not- writing in the subsurface gbuffer, but binding a UAV for Virtual Texture feedback. This would leave the subsurface gbuffer unbound.

  • Bug Fix: Fixed the mGPU visibility mask when initializing FD3D12ResourceAllocator and FD3D12FastAllocator.

  • Bug Fix: Vulkan: fixed Uniform buffer allocations being released too early during the first few frames.

  • Bug Fix: Vulkan: Fixed leaking Pipeline and RenderPass objects, which occurred when multiple threads were creating objects with the same hash. Corrects a Vulkan validation error VUID-vkDestroyDevice-device-00378. The Renderpass fix was reapplied to work post barrier refactor.

  • Bug Fix: Fixed a bug with HDR UI composition where the render target was not being cleared if there were no slate render batches, leaving stale data when there are no UI elements on screen. This caused a black screen in ShooterGame.

  • Bug Fix: Vulkan UAVs now all get identity swizzle, as this is the only thing supported. This fixes a validation error.

  • Bug Fix: Fixed per-vertex lighting in forward shading when separate ratio is not 100.

  • Bug Fix: Fixed the issue causing the PVS-Studio Warning: CanvasRenderTarget Pointer Utilization Before Being Verified Against NullPtr.

  • Bug Fix: Added a dummy back buffer texture which is used to bind the current back buffer on the RenderThread.

    • On the RHI thread the actual current back buffer texture is retrieved from the viewport.

    • Removed the independent RenderThread and RHIThread back buffer index which might not be incremented in sync causing DXGI errors and lost device issues.

    • The expected back buffer index is still used to inform the mGPU what GPU will be used for the present, this is kept in sync when the present will be skipped.

  • Bug Fix: Re-enabled the GetDynamicMeshElements path in FInstancedStaticMeshSceneProxy for test and submission builds which was previously incorrectly disabled. This fixes a bug which prevented instanced Static Meshes with dynamic relevance from rendering.

  • Bug Fix: Fixed an issue with the D3D12 Query heap with a dangling resource on outstanding queries after a heap resize, and fixed the outstanding open query count to track if it's from the current active heap.

  • Bug Fix: Rendering editor selection for mesh batches without a PrimitiveSceneProxy is now prevented.

  • Bug Fix: Fixed a potential race condition when trying to render data that was not ready yet.

  • Bug Fix: Added an EndFrame and BeginFrame when performing garbage collection on slow running tasks (using the increment frame fence value which can currently be used to track internal resource lifetime). This corrects the out of memory error on D3D12 when exporting animations and other long running tasks.

  • Bug Fix: Fixed Vector Field debug visualizations.

  • Bug Fix: Fixed painted vertex loading in the Editor's -game mode.

  • Bug Fix: Fixed buffer visualization for the Overview rendering mode.

  • Bug Fix: Fixed an issue with transparent/translucent materials when forward shading is enabled and r.SeparateTranslucencyScreenPercentage is not 100.

  • Bug Fix: Fixed arrow perspective scaling when its origin is behind the view camera.

  • Bug Fix: Updated the RenderDoc plugin to support executables from RenderDoc 1.0 or higher.

  • Bug Fix: DirectX RHIs now fully supports MSAA textures.

  • Bug Fix: Fixed the UStreamableRenderAsset::IsTextureFullyStreamed not taking into account LOD Bias

  • Bug Fix: The loading of resolutions added by Dynamic Super Resolution now operates correctly.

  • Bug Fix: Pre-exposure for debug visualization modes now works correctly…

  • Bug Fix: Fixed issues with ByteAddressBuffers not calculating the correct offsets and sizes.

  • Bug Fix: Fixed MSAA on Vulkan.

  • Bug Fix: The overlay menu button will now transition on click from + to x when the menu is opened / closed.

  • Bug Fix: Fixed potential race condition when trying to render data that was not ready yet.

  • Bug Fix: Corrected a malfunction caused by Pixel Streaming always assuming a physical mouse would be attached, even when running on a cloud machine or in Windows session 0 with no physical mouse. The bPixelStreamerMouseAlwaysAttached setting can override this behavior.

  • Bug Fix: Fixed pre-exposure for convolution bloom in scenes with physical light ranges.

  • Bug Fix: Fixed the pipeline cache file GUID reporting in OpenPipelineFileCache.

  • Bug Fix: Fixed CleanUpWorld to release resources when closing an editor window. This prevents leaking of two things: RenderTargets, which are referenced in uniform buffers, and particle buffers from FXSystems.

  • Bug Fix: Delayed deletion of all buffer objects. This fixes a rare GPU corruption issue that occurred when buffer memory was reused.

  • Bug Fix: GeometryCacheSceneProxy now correctly marks lighting channel view relevance.

  • Bug Fix: Fixed the HLSLcc shader compilation by correcting ensure logic in ir_visitor_status visit_enter. Previously, the ensure logic may have triggered incorrectly, this has been remedied.

  • Bug Fix: Fixed the stat drawcount command for D3D12.

  • Bug Fix: Fixed a typo, the initial layout transition wasn't actually using the intended layout type

  • Bug Fix: Removed a redundant editor primitives mesh pass.

  • Bug Fix: Fixed an issue where custom depth meshes were using stale GPUScene data.

  • Bug Fix: Fixed issues with the clear coat shading model, in order of severity:

    • Removed energy normalization on the diffuse contribution.

    • Removed dependence on negative NoL and NoV when computing transmission.

    • Modified SphereSinAlpha to account for top-coat and bottom-coat roughness when using spherical area lights.

    • Eliminated the glossy contribution of bottom-coat for clear coat dielectric materials (noting that IOR ratio (Eta) approaches 1.0).

  • Bug Fix: Fixed an issue with indexbuffer and vertexbuffer views being created incorrectly when using WHOLE_SIZE.

  • Bug Fix: Corrected a Vulkan validation error when the VkBufferViewCreateInfo range does not equal VK_WHOLE_SIZE.

  • Bug Fix: The CommandBuffer reset now happens on reallocation instead of on-demand when updating fence. This fixes an issue where the VkCommandBufferPool was accessed from two threads.

  • Bug Fix: Fixed issues with sampler initialization for a Texture2DArray assets.

  • Bug Fix: Added missing Vulkan pixel formats.

  • Bug Fix: Fixed two validation issues in Vulkan caused by the Track Editor Thumbnail.

  • Bug Fix: Added a heuristic PSO cache sanitization (based on hardcoded knowledge).

  • Bug Fix: Fixed an issue with InOutMask for vertex shaders missing bits when there are arrays in Vertex Input semantics. Fixes the following validation error: UNASSIGNED-CoreValidation-Shader-InputNotProduced: Vertex shader consumes input at location 6 but not provided #review-14610138

  • Bug Fix: Fixed Vulkan command buffers being freed without waiting for them to finish first.

  • Bug Fix: Fixed an issue with automatic resource transition based on bindings, but binding to several slots.

  • Bug Fix: Fixed a Vulkan validation error for depth attachments (which can't have swizzling).

  • Bug Fix: Fixed an issue with bloom application in splitscreen. PostProcessTonemap.usf now properly accounts for a restricted ViewRect on the bloom input texture.

  • Bug Fix: Fixed out-of-bounds access in CalcSkyLightPdf and PdfSkyLightOcclusionRay due to both sides of the ternary operator always being evaluated in HLSL.

  • Bug Fix: Changed the PSO cache file to be smaller and easier to patch by removing redundant GUIDs.

  • Bug Fix: Fixed a GPU memory corruption in D3D12 that could happen when a FD3D12FastAllocatorPage is used from the RHI thread but then recycled from FD3D12FastAllocator::Allocate on the Render thread. The wrong fence value could end up being used to detect when it's safe to re-use the page. Occasionally this could result in pending vertex or index buffer uploads being overwritten by the CPU before they are consumed by the GPU, leading to severe visual artifacts.

  • Bug Fix: Fixed broken occlusion for planar reflections.

  • Bug Fix: Made sure the parent directory is created for the PSO cache file.

  • New: Made PSO hashes consistent across sessions so the specific PSO from a crash log can be identified for debugging.

  • New: The -d3ddebug status is now always indicated in the log.

  • New: Dumping shader debug info only on compilation errors or warnings is now supported. Valid settings for r.DumpShaderDebugInfo are now 0-3

    • 0 - Don't dump (unchanged).

    • 1 - Always dump (unchanged).

    • 2 - Dump on error (i.e. compilation failure).

    • 3 - Dump on generated errors or warnings.

  • New: Added two-sided foliage material to the path tracer, and applied energy conservation to the throughput. Currently, this uses diffuse transmission instead of rough transmission.

  • New: Added a reflection pass switch node. This is useful to tweak visuals for less volumetric clouds details according to the sample count in reflection capture, for instance for the sake of performance.

  • New: The barrier command list build and execute command list are now performed via a task to offload the RHI Thread:

    • Use a special fence which has a pending fence value while the task is running which can be used to get the 'correct' future fence value used for resource deletion and such.

    • Multiple places in the code now need to force the execute task to wait in order to make sure that the execute command list has happened on the device.

  • New: Refactored Global view heap code to use a global heap from which blocks can be allocated at fixed block sizes.

    • Block size can be controlled via D3D12.GlobalViewHeapBlockSize console variable (2000 default).

    • The fallback to the threadlocal heap is now really a very rare case and should be considered invalid (still supported as is, no changes done for that heap).

  • New: New pools depending on creation flags can now be created on the fly.

  • New: Added support for single-state resources (can be any state - even UAV and internal tracking is disabled for those resources).

  • New: Apply pow 2.2 on Roughness (the same as done by the BufferVisualization/Roughness engine material graph).

  • New: Added support for Intel hardware with non-local memory.

  • New: Added DX11 support for EnumAdapterByGpuPreference; this allows for OS-assisted selection of GPU use preferences.

    • Use -gpupreference=1 to set a preference for minimum power use

    • Use -gpupreference=2 to set a preference for highest performance.

    • The default value is 2.

    • Any other value causes the feature to fallback to the older code.

    • Also upgraded DXGI to the latest version.

  • New: Now allows optional per-vertex offset pre/post skinning to be applied to Skeletal Meshes. This is a temporary solution for applying correctives to animations.

  • New: Added tracking code to help debug memory leaks from Vulkan objects. Disabled by default. Use r.vulkan.dumpmemory to dump when enabled.

  • New: Refactored the scene texture uniform buffer to use RDG resources.

  • New: Added the -noexceptionhandler command line parameter. This allows the use of JIT debugging.

  • New: Applied D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX to the index buffer and texture.

  • New: Added support for VK_KHR_image_format_list, VK_KHR_shader_atomic_int64 and VK_KHR_driver_properties support for Linux; added gpu crash extension support on Linux for AMD and NVIDIA.

  • New: Moved GPixelFormats from the RenderCore to RHI module.

  • New: Replaced the compile time GD3DCheckForTypedUAVs toggle in D3DShaderCompiler.cpp with a console variable (r.D3D.CheckedForTypedUAVs) so the restriction on using typed UAV loads can be lifted if a project's minimum spec. is higher than the Windows 7 D3D11.0 feature level.

  • New: Added the PreExposure value to HDR visualization.

  • New: Added support for ATI1 texture format being interpreted as BC4

  • New: Optimization of excluding Separate Translucency Pass when no translucent objects are rendered.

  • New: For Pixel Streaming, the -PixelStreamingHideCursor command line option will make the cursor invisible in UE4. This should be used when you want the cursor to be shown only by the web-browser.

  • New: Added support for NV Aftermath on Vulkan via -gpucrashdebugging, and corrected AMD_buffer_marker not being enabled.

  • New: Updated Vulkan headers to 1.2.141.2.

  • New: Text3D: Added support for Arabic cursive writing.

  • New: Swapped the Bcrypt node module to the native .js version, and added npm console commands to ease usage.

  • New: Added support for BUF_Shared on D3D11

  • New: Ported custom depth/stencil rendering to RDG.

  • New: Ported Screen Space Ambient Occlusion and Ground Truth Ambient Occlusion to Render Graph.

  • New: Added the '-ForceAsyncCompute' command line option to force the D3D12 RHI to think the GPU is optimal for Async Compute.

  • New: Implemented DRED 1.2 support. Changed the DRED log to only show command lists that were partially completed (partial log up to the last completed command).

  • New: PixelStreaming: Added the MinBitrate console variable, that makes PixelStreaming ignore the video encoder bitrate recommended by WebRTC if it drops below the MinBitrate value. Can be useful to sacrifice interactivity for better video quality on low-bitrate connections. Disabled by default.

  • New: Added RDG_CSV_STAT_EXCLUSIVE_SCOPE / RDG_CSV_STAT_EXCLUSIVE_SCOPE_CONDITIONAL and cleaned up exclusive CSV tags in the deferred renderer. Added the 'r.RDG.VerboseCSVStats' console variable which toggles verbose CSV stats for the different phases of RDG itself. This restores CSV timings back to their original domains instead of being absorbed into the monolithic RDGBuilder_Execute tag.

  • New: Merged GPU skinning vertex factories for 4 and 8 bone influences into a single factory with branches inside a vertex shader. This reduces the total number of shaders generated for Skeletal Mesh materials.

  • New: Implemented a templated version of IMPLEMENT_VERTEX_FACTORY_TYPE_EX for templated Vertex Factories.

  • New: Updated Vulkan sdk to 1.2.148.2.

  • New: Implemented draw call counters into RDG stat scopes. This fixes missing RHI draw calls for mesh passes in the CSV profiler.

  • New: Integrate AMD QueryVideoMemoryInfo, this time with a fix for pre-GCN hardware.

    • This fix was implemented because when true, IsRHIDeviceAMD can indicate either integrated graphics or a discrete GPU.

    • The budget calculation comes from the OS via IDXGIAdapter3, falling back to the original calculation method if the interface for IDXGIAdapter3 does not exist (e.g. on Win7).

    • This update also includes a fix for old, pre-GCN cards used on Win10.

    • The QueryVideoMemoryInfo call can fail even though the QueryInterface for IDXGIAdapter3 succeeded, in which case, the system also falls back to the original calculation method.

  • New: Changed DX11 RT/UAV hazard detection to use UAV bind information instead of RTV bind information.

  • New: Added support for static samplers for D3D12 shaders compiled with DXC for PC (such as ray tracing shaders).

  • New: Text3D: Added support for creating outline text.

  • New: FRenderQueryPoolRHIRef is no longer used for fencing because it's not thread safe - one query is allocated and freed at a time.

  • New: Added defragging in the Vulkan memory subsystem:

    • Performed a partial defrag in an attempt to free up pages to release.

    • Free Pages are now kept in the Memory Manager, and the actual suballocators are no longer kept around; they are now freed after a while.

    • Added a bucket system for allocations, which covers the bucket system previously used on Android; Desktop platforms now also use buckets of less than two megabytes and less than sixty-four megabytes.

  • New: Reintegrated the new NvAftermath version which supports GPU Crash minidumps which now contains DXGI loading fixes for Win7 support.

  • New: The Global Shader Cook Commandlet now allows you to cook an override shader file that can be hot reloaded while the target is running.

  • Improvement: Cleaned up the Vulkan Memory System:

    • CallStackHandling has been rewritten; the new code defers symbolization (making it much faster), and it is now possible to enable it using a runtime parameter since it's now always enabled in the callstack code.

    • Vulkan memory classes have been merged.

    • All Vulkan allocations now have a meta tag.

    • The command "vulkanmemory stat" shows allocations per meta tag.

    • The command "vulkanmemoryraw stat" shows stats for heaps.

    • The memory dump output now gives a better overview over where memory is being used.

    • Vulkan memory allocations are now defer-deleted by default. Subsystems that don't need this can opt out (Uniform Buffers).

    • All Vulkan allocations now go through FVulkanAllocation. This class is intentionally not reference counted.

    • Some options that used to be hidden in definitions are now console variables so that they can be used and tested on all platforms.

    • The Vulkan memory system now supports an experimental automatic eviction of textures when running low on memory. Only non ray-traced, non UAV textures can be evicted. Currently, once evicted, textures are never promoted back to host.

    • The frame delay for freeing resources is now unified for all platforms (at 3, and no longer 10 for Desktop).

    • The fake memory limit is now controlled using a console variable that can be changed at runtime (in non-shipping builds). It now properly counts only memory on the primary host heap.

    • Corrected an issue with FXSystems which would leak when opening and closing the Material Editor.

  • Improvement: Improved logging when processing and loading the shader pipeline cache.

  • Improvement: Replaced check with a verbose error message in ExpandPSOSC.

  • Improvement: The Vulkan LLM now tracks spare and render target memory.

  • Improvement: Overlapping of draws or dispatches on D3D11 is now enabled by default, and UAV transitions determine when the next draw or dispatch shouldn't overlap the previous due to a UAV hazard (other types of hazards are still handled automatically by the driver in D3D11).

    • The BeginUAVOverlap /EndUAVOverlap functions now only affect the RHI validation layer. UAV validation is disabled between calls to these functions, so they should be used sparingly.

    • New overloads which take a UAV pointer (or array of UAV pointers) can inform the validator that specific UAVs are safe to access concurrently and don't need a transition. These overloads should be used whenever possible to allow the validation layer to still warn about missing transitions on any other UAVs used by the shader.

  • Improvement: Refactored the buddy allocator system for dynamic pool count.

  • Improvement: 2 frames of FrameLag are used before deleting unused buffer allocated pages.

  • Improvement: Removed some log spam for when virtual texture page allocation fails, and added a stat counter to keep track of failure occurrences.

  • Improvement: Corrected the range on the low clamp for basic eye adaptation to account for pre-exposure.

  • Improvement: Optimized the ISM culling structure to avoid transforming them at each frame, and replaced a linked list structure with a more efficient AOS.

  • Improvement: Improved the error message in the shader compiler if a shader uses typed UAV loads but they are disallowed.

  • Improvement: Renamed dxcompiler_sc.dll to dxcompiler.dll, added its .pdb file to help debugging, and ShaderConductor is now built using VS 2019.

  • Improvement: Refactored the DX12 buffer, unifying the buffer core to a single class.

  • Improvement: FReadBuffer now follows the FRWBuffer style and allows data initialization in "Initialize" as well.

  • Improvement: Updates from NVIDIA to the Ansel plugin.

  • Improvement: Performing culling and lighting is now iterated in batches of 32 lights (the previous implementation was limited to 64 lights and lacked a loop to cover the entire light list).

  • Improvement: Improved PSO init management.

  • Deprecated: Tessellation is now Deprecated.

  • Deprecated: Extend Default Luminance Range is now Deprecated

  • Deprecated: Deprecated TexCreate_DisableAutoDefrag as it's no longer used.

  • Deprecated: OpenGL is no longer supported for desktop rendering. If the -opengl command line option is used, an error message will be displayed, and Unreal will fall back to the default RHI for the platform.

Cascade

  • Crash Fix: Fixed a crash that would occur when adding LODs to a Cascade System while running Play In Editor (PIE).

  • Crash Fix: Fixed a crash in Cascade that would occur when refreshing a dynamic parameter module for a material with no dynamic parameter nodes.

  • Crash Fix: Fixed a crash that could occur when using spawn events with ribbons in Cascade.

  • Bug Fix: Fixed an issue with world time in the Cascade Preview window. This could cause odd issues with some culling features.

  • Bug Fix: Corrected an issue in Cascade SetTemplate calls on running systems.

  • Bug Fix: Fixed an issue where Cascade's High Quality lights would not respect the Spawn Fraction setting of the light module.

  • Bug Fix: Cascade GPU systems no longer submit simulation draw calls when inactive or culled by LOD.

Lighting

  • Bug Fix: Fixed an issue with a stale view uniform buffer. If "r.DoInitViewsLightingAfterPrepass 1" was enabled then UpdateGlobalDistanceFieldVolume would be called after view UB was created and cached. UpdateGlobalDistanceFieldVolume will modify view UB parameters, but previously there was no code which would re-cache view UB.

  • Bug Fix: Fixed an issue when rendering both Capsule Indirect Shadows and SSAO in the Forward renderer. Previously the SSAO would overwrite the results of the capsule shadows.

  • Bug Fix: Excluded billboards and shapes from light attachment groups.

  • Bug Fix: Fixed the temporal reprojection of the denoiser when using dynamic resolution.

  • Bug Fix: Fixed shading bugs in the path tracer for point and spot lights.

  • Bug Fix: Stopped the shadow fade-out transition at the end of CSM shadows for directional lights when there is static shadowing taking over (as blending is then done in the lighting shader).

  • Bug Fix: Fixed a bug where Spot Lights were treated as Point Lights in the Tiled Deferred shader if Specular Scale was 0.

  • Bug Fix: Fixed incorrect SSR when TemporalAA is turned off. The fix is to ensure the history buffer has the ViewportRect and ReferenceBufferSize filled in when TAA is turned off.

  • Bug Fix: Disabled the anisotropy pass for forward shading in a deferred shading class.

  • New: SunSky Actor Blueprint changes:

    • Activated Realtime capture on the SkyLight component.

    • Removed BP calls to force update SkyLight.

    • Removed an unnecessary call to the parent constructor script (the parent is "actor").

    • Removed the now-unused "UpdateSky" function.

  • New: Added r.SSS.Burley.BilateralFilterKernelFunctionType to the control screen space subsurface bilateral filtering.

  • New: Switched Burley screen space subsurface sampling sequence from Fibonacci to R2 in order to decrease noise.

  • New: Made the last cascade extend to include the near plane if r.SkyAtmosphere.SampleLightShadowmap is set and light is supporting shadows in the atmosphere or on clouds.

  • New: Changed the behaviour of ShadowResolutionScale = 0. For whole scene shadows, it disables the shadow maps and makes it possible to have contact-shadow only.

  • New: Relaxed the clamping of directional light depth ranges for cascaded shadow maps. This extends shadow ranges in large cascades, removing arbitrary shadow clipping, which is required to support shadows in atmosphere.

  • Improvement: Removed the anisotropy project setting and introduced an anisotropy pass if any object uses an anisotropic material.

  • Improvement: Contact shadows improvements.

    • Replaced the ad hoc transmission lightening for contact shadows with a subsurface falloff similar to the shadow maps path. Note that it will not match exactly since with contact shadows the occluder closest to the light is often not known, but the new logic will avoid over-shadowing subsurface transmission.

    • Added a new mesh flag for "cast contact shadows". Previously contact shadows would indiscriminately apply to all objects in the depth buffer. Now they will respect the new flag as much as possible given the information in the GBuffer.

  • Deprecated: Light Propagation Volumes have been deprecated and will be removed in a future release.

  • Deprecated: Atmospheric Fog has been deprecated. Sky Atmosphere should be used in its place.

Materials

  • Crash Fix: Fixed a crash that occurred when updating a material function used by a MID currently being edited.

  • Crash Fix: Prevent a crash if UMaterialInterface::GetParameterInfo is given a null LayerFunction, this can happen with a user-created BP.

  • Bug Fix: Fixed cook output stats to properly show savings due to sharing the material code.

  • Bug Fix: Corrected the automatic view bias not being applied to Runtime Virtual Texture samples in a material. This fixes slight blurriness for Runtime Virtual Textures in certain Temporal AA modes.

  • Bug Fix: Fixed an issue with materials not resolving Runtime Virtual Texture material parameters correctly.

  • Bug Fix: Forced UDIM textures to be built with the CLAMP address mode, to avoid seams between UDIM blocks.

  • Bug Fix: Adjusted the layout of UDIM tiles to account for the inverted V-axis when mesh data is imported into UE4.

  • Bug Fix: Virtual textures are now updated whenever a Material Instance parameter changes.

  • Bug Fix: When the r.SeparateTranslucencyScreenPercentage is not equal to 100, it will no longer cause separate translucency to be nearest upscaled instead of bilinearly upscaled.

  • Bug Fix: The Material Pow function now properly handles a Base value of 0. It will in this case return 0.

  • Bug Fix: For API, fixed the PositiveClampedPow to properly work with Base==0. This removes the max instruction but adds a conditional select instead.

  • Bug Fix: Fixed SSS specular when the checkerboard is off.

  • Bug Fix: Corrected the velocity buffer material expression when sampling geometry that is not drawing geometry.

  • Bug Fix: Fixed layer parameters being inherited from one MIC to another MIC.

  • Bug Fix: Fixed the external texture material parameters, used for media textures.

  • Bug Fix: Fixed issues caused by using Property Coloration and Level Coloration on materials with tessellation or world position offsets.

  • Bug Fix: FHashedName converts strings to upper-case before hashing, otherwise the hash depends on what particular case of a given string is first seen.

  • Bug Fix: Change order expressions are now visited while updating cached material expression data, which fixes a problem with getting correct values from parameters duplicated in multiple functions.

  • Bug Fix: Fixed a bug with FHashedName when using FNames with UTF32 TCHARs.

  • Bug Fix: Fixed a material tracking nested function dependency.

  • Bug Fix: Fixed recompileshaders command running on a target with COTF server.

  • Bug Fix: Removed canceled shader map compiled from the ShaderMapsBeingCompiled array, otherwise it was possible for a future compile request to be merged into the now-canceled compile job.

  • Bug Fix: It is no longer assumed that there are as many parent material layers as there are layers for the child.

  • Bug Fix: Introduced FMaterial::MaterialUsesAnisotropy to the MaterialCompilationOutput. This boolean is populated after compilation and saved in the compilation output (cooked & editor builds), and checked by the runtime to decide if anisotropy is used. DDC Key / Deciding whether to compile still uses the more permissive / conservative API HasAnisotropy, which returns true for MaterialAttribute nodes just in case anisotropy is actually used. This ensures all relevant shader variants are actually compiled.

  • New: Changes made to layers in a base material are now propagated to derived MIs.

  • New: Material Layers system is now enabled by default. The Project Setting has been removed.

  • New: Added an optional WorldPosition input to the Runtime Virtual Texture Sample node, allowing manipulation of sample coordinates.

  • New: Added a blueprint API for setting layer parameters on MID.

  • New: Added a Time input to TimeWithSpeedVariable with the fallback of using the regular Time material expression to make it backwards-compatible.

  • New: Added a runtime virtual texture max mip level to view properties exposed to the material graph. This can be used along with the virtual texture mip level property for mip specific virtual texture generation.

  • New: Added the choice of WRAP or CLAMP texture address modes to the Runtime Virtual Texture Sample material node.

  • New: Added the ability to exempt certain materials from sharing code (to support chunked builds).

  • New: Added blueprint API for setting layer parameters on dynamic material instances.

  • New: For TextureVariation, submitted a new material function to create texture UVs with variation applied to break up the tiling.

  • New: Replaced FHashedMaterialParameterInfo with FMemoryImageMaterialParameterInfo, which uses FScriptName rather than FHashedName. Names will be patched on load, but thus avoids frequent string hashing at runtime.

  • New: Fixed issues causing material DDC values to be non-deterministic.

    • Shader code within resources is now sorted by hash

    • Debug source code values are now sorted by type, also a mechanism was added to serialize any MemoryLayout described type to string.

    • This makes it easier to inspect material data to find sources of non-determinism.

  • New: Added a new material function for vector based refraction.

  • New: Added blueprint setters for default custom primitive data.

  • Deprecated: Deprecated the RuntimeVirtualTexture material domain, and added code to auto convert materials with this domain to use an RVT output node.

Mobile Rendering

  • Crash Fix: Fixed a crash in the mobile renderer when the Sky Light cubemap resolution is less than 64.

  • Crash Fix: Fixed a crash related to reflection capture when running DirectX mobile emulation.

  • Bug Fix: Fixed brightness flickering on mobile related to eye adaptation.

  • Bug Fix: Set RGBA8 as a default backbuffer format on mobile devices. This avoids selecting HDR backbuffer formats when the device reports support for it.

  • Bug Fix: Fixed broken MobileSceneCapture when requesting HDR format.

  • Bug Fix: Fix a bug that caused the screen to be brighter on mobile compared to PC if there is a PP material whose blendable location is before tonemapping.

  • Bug Fix: Fixed shader compilation errors for materials that use certain particle properties (ParticleToWorld transform) on mobile.

  • Bug Fix: Fixed an issue where the Indirect Lighting Cache does not work correctly with multiple lighting scenarios on mobile.

  • Bug Fix: PostProcess materials will now correctly handle cases where viewport size does not match render target size on mobile.

  • Bug Fix: iOS and Android will now always use ETC compression for all Virtual Textures, ignoring project texture compression settings. This is done to avoid fragmentation of VT formats.

  • Bug Fix: Added fixes for the desktop renderer on iOS

    • Fixed inf in SingleLayerWaterComposite.

    • Added a flag to check for VertexFetch in Cloth.

    • Fixed tonemapping to use the correct color space on iOS.

  • Bug Fix: Opaque geometry will write 1.0 to the alpha channel when rendering directly to the backbuffer on mobile. This will make it easier to mask out opaque geometry in the final image.

  • Bug Fix: Fixed an issue causing black sky reflections on mobile if the scene has a non-static Sky Light actor.

  • Bug Fix: Fixed cases where toggling sub-levels visibility could lead to an incorrect precomputed Indirect Lighting in the mobile preview.

  • Bug Fix: Fixed a sRGB/Linear space mismatch for Runtime and Streaming virtual textures in the Editor mobile preview.

  • Bug Fix: Added a fix for some mobile GPUs when using Depth Read - Stencil Write.

  • Bug Fix: PostProcess materials with a blendable location set to BeforeTonemapping will now run after separate translucency on mobile.

  • Bug Fix: Fixed a bug causing rendering a black background on Tegra devices (Nexus 9).

  • Bug Fix: Removed the clamping of the light range for the receiver matrix and made it the same as the 'SubjectAndReceiverMatrix'. This fixes a shadow culling bug for mobile.

  • Bug Fix: Removed a flag "D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS" which is not necessary for feature level es31.

  • Bug Fix: Fixed handling of MobileUseHWsRGBEncoding so it is correct in all cases.

  • Bug Fix: Corrected the issue of missing PreIntegratedGF textures in translucency passes

  • Bug Fix: Fixed a RGBM bug where it would not be calculated after the first buildReflectionCaptures

  • Bug Fix: Fixed the Editor GPUScene

  • Bug Fix: Corrected Niagara GPU for A10 and earlier devices.

  • Bug Fix: Corrected a GpuFence bug where RT would delete the Fence object while the RHIT was still using it.

  • Bug Fix: Reflection Capture change, fixed a check when postloading for console.

  • Bug Fix: Fixed the Encoded ReflectionCube when using old MapBuildData. The default is 16 RGBM.

  • Bug Fix: Corrected theEncoded ReflectionCube when old MapBuildData is present. It now defaults to 16 RGBM.

  • Bug Fix: Added a missing flattened material property enum that was overlooked when anisotropy was added.

  • Bug Fix: Made AO decals respect meshes that disable receiving decals.

  • Bug Fix: Handled RT bindings for decals that write or read to the normal Gbuffer.

  • Bug Fix: Corrected the blend state when the normal Gbuffer is not used during decal blending.

  • New: Added support for RHIClearUAVUint and RHIClearUAVFloat to work for TextureUAV on the OpenGL platform.

  • New: Added a '_centroid' parameter for tangentworld interpolation to have better quality and be consistent with PC.

  • New: Ported mobile postprocess to the RDG.

  • New: Implemented using a separate uniform buffer for each dynamic point light so the mesh draw commands can be cached.

  • New: Added support for alpha to coverage for masked material.

  • New: Added support for dynamic spotlight shadows for mobile

  • New: Pixel projected reflection is now supported on the mobile platform forward renderer.

  • New: Added support for Ground Truth Ambient Occlusion (GTAO) on mobile.

  • New: Added support for UMG background blur on the Android OpenGL platform.

  • New: Mali Offline Compiler is now supported for vulkan spir-v.

  • New: Reflection Compression - Android now will use ETC2 by default. The RGBM MaxValue is set to max M value from the cubemap, unless the value is set in the component. HQ Reflection cubemaps are now also compressed.

  • New: Allows depth sampling in the Compute shader on Mobile.

  • New: Added ETC compression support for a Runtime Virtual Textures on mobile (iOS, Android).

  • New: Removed a mobile-specific InverseOpacity shader permutation for translucent materials. This change reduces the total number of shaders generated for mobile platforms.

  • New: Added support for UMG background blur on Android.

  • New: Now no longer show the deprecation message when running Windows OpenGL in mobile emulation (-featureleveles31).

  • New: Added deferred shading path to a mobile renderer (to enable r.Mobile.ShadingPath=1). Only supported on iOS and Android Vulkan, it will fallback to forward shading on Android GL. This is an experimental implementation as some of the mobile rendering features are not supported yet. The deferred shading path allows efficient rendering of multiple dynamic local lights, high quality reflections, and lit decals.

  • New: Added support for static lighting in mobile deferred.

  • New: Added support for Qualcomm Transform in Vulkan.

  • New: Added limited support of Mesh Decals on mobile. Decals are unlit and support only modes that write to SceneColor

  • Improvement: Clamped the roughness to 0.015625 instead of 0.12, in order to improve the specular quality.

  • Improvement: Cleaned up the code of HQReflection and enabled it to work properly with the mobile clear coat. Added support for cube reflection to HQReflection.

  • Improvement: Improved performance for mobile eye adaptation.

  • Improvement: Reductions to LightGridSizeZ and MaxCulledLightsPerCell for Android as a workaround for the 64k texel limit

  • Improvement: Niagara GpuReadback OpenGL optimization.

  • Improvement: Reflection Capture change, the TextureCube is no longer cooked for non mobile rendering platforms.

  • Removed: Removed the mobile legacy shading model.

  • Removed: Removed remaining references to ES2 and AEP.

  • Removed: Removed mobile's separate CSM shader permutations. Shader side CSM calculation is now conditionally performed according to a parameter within the mobile base pass's uniform buffer. This should dramatically reduce the number of PSOs required when shadows are enabled.

Niagara

  • Crash Fix: Removed an incorrect call to GetSkinWeights that is not required and can potentially crash.

  • Crash Fix: Fix a crash when GetEmitterViewModel returns nullptr.

  • Crash Fix: Corrected a crash in the GPU ticks if the Interface has been garbage collected.

  • Crash Fix: Fixed a crash with Static Mesh streaming where GT would send too few materials to the RT; the GT was reading CurrentFirstLODIdx which is modified on the RT leading to a mismatch on a frame in which they are streamed.

  • Crash Fix: Fixed a crash in GetFilteredSocketTransform that occurred when there were no elements in the array.

  • Crash Fix: Corrected a crash due to no objects being modified in the property notification when fixing CPU access on a NPC.

  • Crash Fix: Fixed a crash that could occur when resetting a function input to its default value.

  • Crash Fix: Fixed a rare crash that would occur if a Niagara System auto-destroys when activated (for instance, from being culled by Scalability options).

  • Crash Fix: Fixed a crash in Niagara that could occur when calling SetAsset on a running component.

  • Crash Fix: Fixed a crash that could occur when deleting a Niagara Event Handler from a running system.

  • Crash Fix: Fixed a bug that could lead to a crash when a variable default value was not initialized.

  • Crash Fix: Fixed a crash that occurred when events spawn particles beyond the CPU max limit.

  • Crash Fix: Fixed a bug where a missing Data Interface implementation caused assets using that Data Interface to crash on load.

  • Crash Fix: Fixed a crash that could occur in Niagara with Mesh Renderers when force reloading the Static Mesh asset from the Content Browser context menu and then changing properties of the Static Mesh in its editor.

  • Crash Fix: Fixed crashes that can occur in some Niagara Blueprint Library functions when passing invalid (nullptr) components.

  • Crash Fix: Fixed an editor crash that would occur when applying vertex painting to a Static Mesh that was being used by a Mesh Renderer in an active Niagara editor.

  • Crash Fix: Adding multiple location events to a script stage will now result in a script compilation error instead of crashing.

  • Crash Fix: Fixed a crash which could occur when resetting a data interface user parameter to default in the details panel when the data interface pointer was null.

  • Crash Fix: Fixed a crash which could occur when merging changes from parent emitters when a simulation stage was added in a child emitter.

  • Crash Fix: Fixed a crash loading into WeapGun_Impacts in Shooter game.

  • Bug Fix: Fixed the DDC getting polluted with NiagaraScript results when rapidly generating compile requests. Ensures that the data cached is associated with the source request rather than the current CompileId of the UNiagaraScript.

  • Bug Fix: Corrected a subtle bug in the "Apply rotation vector" function that occurred when applying rotations which were far off axis. This stabilizes and improves quality on "Mesh Rotation Force" as well as the "Rotation" input on "Initial Mesh Orientation".

  • Bug Fix: Added fixes to the MeshParticleSpace material transform node for Niagara.

  • Bug Fix: Fixed two issues with activation with the Niagara component system life cycle track.

    • When handling the beginning of the section, first deactivate and reset if the system is already active. This is necessary to have the correct reset behavior when the life cycle section starts on the first frame of the sequence and it was already active, or when the sequence is looping.

    • The default behavior of the section evaluation will now activate if it is inactive instead of being 'none.'

  • Bug Fix: Fixed VectorCeil and VectorFloor and added a unit test for them.

  • Bug Fix: Fixed M_AddForce and BP_PaintClouds so that the alpha channel can be correctly painted along with the RGB channels.

  • Bug Fix: Fixed Niagara vector field resources being accessed on the game thread without it being necessarily initialized.

  • Bug Fix: Fixed a bug with Niagara NDC cooking by adding the system name into the hash to prevent collisions between identical systems.

  • Bug Fix: Exposed an attractor position override to Point Attraction Force. This improves the stability of the optional particle killing feature on the point attractor which accounts for fast moving particles in the kill radius check, which better prevents overshoot when the kill radius option is exposed.

  • Bug Fix: Comment boxes can now be edited in the stack overview graph.

  • Bug Fix: Parameter data will now not be reallocated when it is assigned during initialization.

  • Bug Fix: During VectorVM compilation, all rvalues are now evaluated for potential replacements, not just those that are in assignments.

  • Bug Fix: GPU shaders are now included when evaluating the auto compilation in the Niagara editor as changes are made to systems / emitters.

  • Bug Fix: Fixed the following issues with user parameter animation in sequencer. Parameter section boundaries are now infinite by default. User parameters which are animated by Sequencer now show their animated value in the selected actor details view. When adding a new user parameter track, it will default to the current parameter value instead of resetting to 0.

  • Bug Fix: Fixed an issue where emitter initialization would not have system bounds set in time resulting in unnecessary work creating bounds helpers.

  • Bug Fix: Systems with dynamic bounds can now be culled by the property "Max Time Without Render."

  • Bug Fix: Added a fix for a system's MaxDeltaTime not properly getting reset from the values of it's child emitters.

  • Bug Fix: Corrected an issue with VectorVM compilation mishandling the expression: MyVec3.yz = float2(1.0f, 2.0f);

  • Bug Fix: All Niagara engine parameters will now be correctly updated after a component transform change.

  • Bug Fix: Renderers will now always be stripped from cooked builds if their parent emitters aren't valid.

  • Bug Fix: Fixed an issue with RapidIterationParameters being out of date when they are being baked out by the cooker. The generation of the correct values was moved to the pre-compile so that when the translation is triggered the correct values are used.

  • Bug Fix: Added validation (at runtime and at cook time) to ensure there is no mismatch in bindings between RapidIterationParameters and ScriptExecutionParameters.

  • Bug Fix: Make / Break X dynamic inputs have been renamed to more accurately match their actual behavior.

  • Bug Fix: Fixed Sphere location to properly factor component scale and nonuniform scale into its Sphere Normal output.

  • Bug Fix: Fixed an issue with Spawn Per Unit not respecting emitter delay.

  • Bug Fix: Fixed an issue where a parameter couldn't be renamed through the parameters panel if it was created in a "Set Parameters" module.

  • Bug Fix: Fixed an issue with the handling of user override parameters on a component and how it handles booleans.

  • Bug Fix: Fixed a bug where new data interface inputs were always displayed as "invalid" until reset.

  • Bug Fix: Prevented the spawning of Niagara on dedicated servers.

  • Bug Fix: Fixed an issue with world time in some editor viewports. This could cause odd behavior with some culling features.

  • Bug Fix: Fixed PSC deactivating on launch due to LastRenderTime not being up to date.

  • Bug Fix: Fixed the attribute spreadsheet capture to handle Disabled / GPU sims.

  • Bug Fix: When autowiring, all possible pins will now be searched through for the first possible real match rather than just assuming the first pin matching direction will work and failing.

  • Bug Fix: Added a fix for the Niagara matrix multiplication node; make it actually a mul function rather than per-component scaling.

  • Bug Fix: Fixed instance override parameters getting confused when dealing with variables with / without the User prefix. It now uses the UserRedirectionParameterStore to disambiguate User. and when it comes to the InstanceParameterOverrides.

  • Bug Fix: Niagara will no longer block the shader compilation when running -game.

  • Bug Fix: Generate Location Event now caps event send rate at 60fps by default, this is user overridable but should provide stable counts and visuals across platforms now and be less framerate dependent.

  • Bug Fix: Fixed hitches that happen in the UI when editing some emitter and system properties that don't require a system reset.

  • Bug Fix: Made UNiagaraDataInterfaceSpline threadsafe with respect to the Spline data.

  • Bug Fix: NiagaraSystems are now guarded against system update and spawn scripts being mismatched (they need to agree upon the attributes in the dataset). Systems will warn / stay disabled on a mismatch and will force a full rebuild of the shaders in an attempt to fix the shaders.

  • Bug Fix: Fixed an issue with resetting GPU particle counts; particle systems which should allow their particles to finish out their lifetime can now survive the component being deactivated.

  • Bug Fix: Changed the fallback texture used by the VolumeTeture Data Interface to be a volume texture.

  • Bug Fix: Updated the EmitterChangeState module to fix an issue where emitters would only go from Inactive to Complete if the first emitter did too.

  • Bug Fix: Added a fix for NDC with parameters and static switches. This ensures the state of the StaticSwitch node is fully reset when there is no constant resolver so that the state can't leak across compiles / parses.

  • Bug Fix: VectorVM compilation - ir_propagate_non_expression_visitor now properly handles self assignment.

  • Bug Fix: Fixed an issue with emitter inheritance where inherited modules and inputs would not correctly show they were inherited.

  • Bug Fix: Fixed an issue with emitter inheritance where inputs with numeric values which matched the default wouldn't receive updates when the parent values were changed.

  • Bug Fix: Fixed an issue handling Niagara bone sampling when no bones are present.

  • Bug Fix: Added fixes to NiagaraLightRenderer

    • The generation of dynamic data is now skipped if deferred shading is not used.

    • Made it draw relevant so that they will actually render without relying on other renderers.

  • Bug Fix: Fixed ComputeMaxUsedComponents to properly handle different typed attributes in the dataset.

  • Bug Fix: Niagara will now only block for the shader compilation when spawning systems during the automated tests.

  • Bug Fix: Corrected a subtle bug with Jitter Position related to choosing new positions when delay was used.

  • Bug Fix: Fixed Niagara to not block on shader compilation during OnPreGC (happens on editor load).

  • Bug Fix: Fixed an issue with getting random bones on the GPU (Filter Socket / Bone was incorrect)

  • Bug Fix: Fixed the path where direct reads do not write data out to the VM which can lead to NaNs / invalid simulations.

  • Bug Fix: Fixed an uninitialized field in FNiagaraEventGeneratorProperties::MaxEventsPerFrame which was causing non-determinism.

  • Bug Fix: Corrected an issue caused by incorrectly using the first GPU script only to determine whether viewing the uniform buffer was needed or not.

  • Bug Fix: Fixed a dependency issue when sampling Skeletal Mesh data in solo mode; the tick group must be calculated in the same way Niagara does otherwise the Skeletal Mesh data will not be ready for the solo components' tick.

  • Bug Fix: Fixed the component pool.

  • Bug Fix: Fixed an edge condition with GPU emitters and going inactive on the first frame.

  • Bug Fix: Fixed a couple of issues with scaled transforms and bone sampling.

  • Bug Fix: Handled an edge case on world cleanup where ComponentPool has been destroyed before a component that can be returned to the pool.

  • Bug Fix: Handled an edge case where BeginDestroy is called before OnComponentDestroyed which will call DestroyInstance potentially returning to the pool incorrectly.

  • Bug Fix: Fixed a missing increment inside FNCPool::RemoveComponent.

  • Bug Fix: Now use advanced preview settings for background color.

  • Bug Fix: Removed early out as it skipped PostTick which will not clear events resulting in continual spawning.

  • Bug Fix: Fixed an issue with not clearing out LocalFunctionTable when data interfaces are dirty; this fixes an issue where Skeletal Mesh rebinding due to data changes did not choose the correct function since it was picking the old one from the table.

  • Bug Fix: Changed InverseFast -> Inverse to handle zero scaled Skeletal Meshes.

  • Bug Fix: Use of GetSystem is now prevented as it can race with the component; ArrayView is used rather than the constant TArray&.

  • Bug Fix: Handled an issue with incorrect area weighted sampled data when used with GPU systems, this will now result in a warning and uniform sampling being disabled.

  • Bug Fix: Fixed a bug when attempting to read from GPU buffers on the CPU with nullptr access.

  • Bug Fix: Fixed a read-early issue with Skeletal Mesh components that have identical start and end tick groups.

  • Bug Fix: Fixed a tick group ordering issue with physics enabled Skeletal Mesh components as they will have physics results interjecting during TG_EndPhysics.

  • Bug Fix: All emitters are now taken into account, not just those that are running, when working out whether view uniform buffer is required; this fixes an issue where multiple ticks in a single frame could jump between tick groups.

  • Bug Fix: Fixed mesh renderer stats so they don't increment per section.

  • Bug Fix: Fixed having a RenderTarget still bound that will be used as an SRV during Niagara's compute pass.

  • Bug Fix: Fixed races in Volume / Texture data interfaces due to reading from the data set by the RT when determining if the texture was valid.

  • Bug Fix: Fixed an issue that occurred if a GPU emitter was disabled on the first frame and never ticked.

  • Bug Fix: The velocity vector to quat function now correctly rotates meshes along the z axis. This will rotate existing particles that used the initial mesh orientation module's rotate feature.

  • Bug Fix: Fixed an issue with incorrect transform application (and reading from component) in GetFilteredSocketTransform -

  • Bug Fix: Removed the stub GPU implementation of GetFilteredSocketTransform which caused a stack error; the new functions should be used instead

  • Bug Fix: Corrected not applying the rotation on the GPU for gathering bone transforms.

  • Bug Fix: Fixed an issue with Niagara post work where the simulation is marked as dead but there is post work.

  • Bug Fix: Fixed stomping over override parameter data when they are set inside a constructor script.

  • Bug Fix: Corrected Niagara texture references when referencing things like MovieTexture / RenderTargets, etc. where the underlying RHI reference may be swapped out. The TextureReference will be used instead, rather than the TextureRHI.

  • Bug Fix: Fixed the occurrence of NaN/uninitialized values in Niagara GPU sort info.

  • Bug Fix: When setting a texture object, the editor will not stomp over the data if the system is duplicated because the component will be informed that it was overridden.

  • Bug Fix: The last render time will now be updated to the default value when a pooled component is reused.

  • Bug Fix: Fixed an issue where while waiting on the system simulation task, the finalize is executed which completes and removes the instance while attempting to remove the instance

  • Bug Fix: The system will now wait for all simulation to complete before performing a tick group update to avoid potentially accessing simulation data that is still running concurrently.

  • Bug Fix: Fixed dynamic material parameter names so that material function-defined dynamic parameters are also good.

  • Bug Fix: Fixed an issue with FName with case sensitivity in stack overview name changes.

  • Bug Fix: Fixed the UI alignment of the "Socket Name" property.

  • Bug Fix: Improved the "script usage" static switch to work as expected and across GPU scripts.

  • Bug Fix: Reading from CurrentData is now guarded to get the particle count if a fence has not been passed which guarantees that the tick has been processed on the render thread. This fixes an issue where we could deactivate a GPU emitter because the CurrentData is set to 0 instances as the tick was not yet processed.

  • Bug Fix: Fixed a bug where user parameters could not be assigned to Data Interfaces in the stack UI.

  • Bug Fix: Fixed a bug where if two modules use the same Data Interface function on two different Data Interfaces, they would both use the same data interface.

  • Bug Fix: Fixed the stack UI to correctly evaluate the usage constants for static switches.

  • Bug Fix: Fixed a bug where bound default parameters in Niagara modules would not behave correctly.

  • Bug Fix: Fixed graph pin default values being editable even when set to read-only.

  • Bug Fix: SetAsset calls on currently active Niagara Systems will now correctly reset the system with the new asset.

  • Bug Fix: Corrected a bug where local-space, velocity-facing meshes would not be correctly oriented.

  • Bug Fix: Attempting to sample a Volume Texture in a Niagara CPU script now results in a compiler error.

  • Bug Fix: Fixed a bug with local-space Niagara Emitters where Simple Lights would render with a frame old transform.

  • Bug Fix: Fixed an issue with the particle read Data Interface return value when an invalid attribute is used.

  • Bug Fix: Fixed a bug where multiple renderer feedback issues clashed in the stack UI because they were assigned the same unique ID.

  • Bug Fix: Fixed a bug where a Skeletal Mesh Component user variable in a Niagara System set from Blueprint wouldn't get reset on pooled reuse.

  • Bug Fix: Fixed an issue in which pooled Niagara components being invisible.

  • Bug Fix: Fixed a bug where renaming a parameter lost all its metadata.

  • Bug Fix: Fixed the rename tooltip.

  • Bug Fix: Fixed a bug where pasting or resetting a user parameter Data Interface did not propagate to running systems.

  • Bug Fix: Fixed a bug where some Niagara engine parameters were not correctly updated after a component transform change.

  • Bug Fix: Fixed a bug in the Grid2D Data Interface that would allow an attempt to copy to an incompatible format, causing errors.

  • Bug Fix: Fixed a Niagara compile error that would occur when adding a new custom expression to an input in Niagara's module stack.

  • Bug Fix: Fixed a bug that could trigger an ensure when copying a stack value with a data interface in it.

  • Bug Fix: Fixed a bug where non-uniform scaled Niagara meshes would render with different normals than regular Static Meshes with the same scale would, causing them to be lit differently.

  • Bug Fix: Fixed an issue where emitters would enter a state unable to spawn if they ever exceeded their max allocation count.

  • Bug Fix: Fix errors with cooking volume textures that were not created from a 2D initial texture

  • Bug Fix: Fixed a scale bug with the Skeletal Mesh Location module when the Skeletal Mesh Component is scaled.

  • Bug Fix: Fixed a bug where default values of attributes behind static switches could not be set.

  • Bug Fix: Fixed an issue with FX not reactivating when changing scalability settings at runtime.

  • Bug Fix: Fixed an issue with the Vector VM Assembly view in Niagara's Generated Code window.

  • Bug Fix: Fix various bugs and visual issues in Niagara with Instanced Stereo VR enabled.

  • Bug Fix: Added a missing GPU flag to a function signature.

  • New: Added automatic partial write detection code that is enabled by default, which currently looks for InputData methods and ParticleReads on the same emitter; added a separate boolean to disable this in the advanced view for debugging purposes in case other edge cases are found.

  • New: Auto-detect if a simulation stage iterates over particles but does not modify the particle attributes, in which case the particle data will not be written out, saving performance. Added an option to enable partial particle writes on particle simulation stages, for example if a stage only modifies position (does not kill / add particles), data will read / write to the same buffer improving performance.

  • New: Added optional shader permutations generated when using simulation stages, enabled by default this will generate a unique permutation per stage to significantly increase GPU performance.

  • New: Material Instance Dynamic is now created on demand if the Material Parameter Bindings array is set.

  • New: Data Interfaces can define child variables that can be used to bind to these Material Parameter Bindings, like the render target from the DataInterfaceRenderTarget2D.

  • New: Material Parameters can also be bound to the System, Emitter, and User variables. Data Interface function signatures can now specify a usage mask and whether or not they need an exec pin if the function has side effects. This makes it easier to have functions that don't actually return results but write to a data interface internally.

  • New: The GPU simulation has been reworked so that they no longer get bindings from particle scripts, but instead get them from the same source that particle scripts got their data from since GPU scripts are a superset of particle script capabilities.

  • New: Added the ability to drive emitter activation from console variables for finer control than just specifying a platform.

  • New: Optimized SetUserParametersToDefaultValues to prevent creating unnecessary additional data interfaces.

  • New: You can now create a Texture Object variable type to add a texture to a Niagara System for use in simulation or rendering.

  • New: Added functionality to the Skeletal and Static Mesh Data Interfaces to enable explicit specification for how they should source the mesh component, preventing them from falling back to an undesired mesh.

  • New: Added a component renderer that enables you to drive individual components (such as lights and meshes) in the level using Niagara for CPU particles.

  • New: Added curve binding to enable the creation of curves inside Niagara that get baked to a texture to use in Material using the Material Attribute Binding user interface.

  • New: Added a new SubUV Animation module that includes four modes: Linear, Curve, Random, or Infinite. Infinite improves upon the Cascade "SubUV movie" mode with a start frame, end frame, play rate, and a start time offset.

  • New: A marked list can now optionally be used for PostActorWork, which can reduce overhead in certain cases.

    • Use the console variable 'fx.Niagara.WorldManager.UsePostActorMark 0' to disable using the marked list.

  • New: Added a Volume and Render target Data Interfaces and allowed Niagara to push Grid3D data into it.

  • New: Added a new preliminary plugin to convert Cascade Particle Systems to Niagara Assets. It is an experimental plugin that can be enabled and will be improved in later releases.

  • New: Added a Data Interface to play audio from within Niagara for CPU emitters.

  • New: Added a Data Interface to export particles, which works on both CPU and GPU.

  • New: Added a Niagara commandlet to find assets with warmup time / lights / GPU emitters.

  • New: Changed the attribute spreadsheet readback to use a readback manager; this is more reliable as the system is not required to tick in order to execute the readback.

  • New: Added RandomFilteredSocketOrBone functionality.

  • New: Added BP methods to create volume / array textures.

  • New: Now use the Enum string rather than the number in warning messages, makes it clearer to the end user on why the warning is visible.

  • New: Marked FNiagaraUserParameterBinding as NIAGARA_API so it can be used in other modules.

  • New: Niagara is now allowed to spawn new systems async and earlier if the TG has been processed already; this is enabled by default, use the console variable "fx.Niagara.WorldManager.SpawnPerTickGroup 0" to disable this function.

  • New: Added a performance option to allow event-based spawning to be combined into a single spawn. This results in a single execution from 0 to the number of particles rather than several when using the ExecIndex function, which is not recommended to do this.

  • New: Added support for Static Mesh socket sampling.

  • New: Added FNDIInputParam as an easy method to wrap complex data types, and cleaned up some data interfaces to use the new input / output wrappers.

  • New: Added a method to modify which sampling regions are used by the Skeletal Mesh data interface.

  • New: The max number of instances required across all sim passes is now calculated ahead of time. This reduces memory pressure when Sequencer is scrubbing the timeline and forcing many simulation ticks at once as buffers will not grow progressively but instead grow all at once up front.

  • New: Niagara tick behavior is now exposed to Blueprints

  • New: The collision module now supports simulation stages.

  • New: Implemented an export data interface for GPU systems

  • Added a GPU readback manager to allow enqueuing a readback that is not depending on a system tick.

  • New: Added the ability to go beyond a single dispatch dimension.

  • New: Added the ability for dynamic inputs to display custom text when being collapsed, using their child inputs in the format text.

  • New: Added an optional display to show emitter execution order, helpful for debugging dependency issues with events or particle reads.

  • New: The Niagara System no longer waits if it is not deactivating immediately; it won't wait for Activate Reset calls if running asynchronously, allowing them to defer until Finalize instead, which avoids stalling the GameThread.

  • New: Niagara arrays are now allowed to have data modified when running on the CPU; the functions added are Reset / SetNum / SetValue / PushValue / PopValue.

  • New: Added support for upgrading data interface function calls.

  • New: Added support for Skeletal Mesh IsValidBone and BoneCount on the GPU.

  • New: The collision module no longer requires users to specify whether it's a GPU or CPU system.

  • New: - Added fx.Niagara.SetOverridePlatformName as a way to quickly change between which platform Niagara is using; the caveat is that on cooked platforms only the device profiles that are contained within the cook are available.

  • New: Added a Data Interface that enables you to define a platform set and query whether it's currently active.

  • New: Stats on memory usage from data interfaces are now collected.

  • New: Added the option to change the grid format from 32-bit to 16-bit float.

  • New: The collision module's CPU trace channel is now exposed.

  • New: Added optimizations to reduce the cost of system and emitter creation and activation

    • Modified data set accessors into two separate structures so they can be cached on the System / Emitter to avoid map searching each instance, removing the need for various allocated arrays since there is one copy in memory rather than per instance.

    • Enqueuing multiple commands to initialize DataSets for GPU simulations is now avoided, this can be slow when waking task threads.

    • DebugSimName is now cached once in PostLoad to avoid per-instance memory usage / performance costs.

    • Removed various stat markers as they were measuring chunks small enough to introduce confusion / variance in profiling.

    • MaxInstanceCount is now cached inside the UNiagaraEmitter rather than generated with each instance created.

  • New: A number of distance field nodes have been added to allow artists to easily find the global distance field isosurface, its normal, to sphere cast through it, etc.

  • New: Added a function to get simulation stage iteration information, i.e. iteration index, max iterations, normalized iteration index.

  • New: Added minor tweaks to allow cleaner inheritance from NiagaraComponent if necessary:

    • Exported FNiagaraSceneProxy under NIAGARA_API.

    • Made GetViewRelevance public to match the primitive scene proxy API.

    • Removed the final keyword from FNiagaraSceneProxy's inheritance.

  • New: Changed the Niagara SetBoolByFloatComparison to use Static Switches for optimization reasons.

  • New: Extended the comparison operators to include greater than / less than / equal to for both inputs.

  • New: Added a new translator constant that is unique each time the node is translated. This can be used to calculate repeatable randoms.

  • New: Adding a new warning to Particle Attribute Reader Data Interfaces to notify end users when persistent IDs must be set in order to function properly.

  • New: An error message will now show if users attempt to reference the global distance field without it being enabled in the project.

  • New: Added the ability for the Sprite Renderer to be particle-less, if needed.

  • New: Added the ability for Data Interfaces to say they need execution pins and ensure that those functions don't get compiled out. This should clean up any write-only Data Interface functions that had to have a single parameter wired into the map previously, even if it wasn't really used.

  • New: Added a collapsed state text to dynamic input scripts. This formatted text is displayed in the stack UI when the node is collapsed. The text supports formatting placeholders for the function inputs, for example "myfunc({0}, {1})" will be converted to "myfunc(1.23, Particles.Position)".

  • New: Removed "Is It Optimized Out" warnings in data interfaces as they are often benign and not necessary.

  • New: Added the Stack Context namespace to allow more reusable modules across different stacks. This also enables Data Interfaces to be used as iteration sources in Sim Stages to act like particles namespace and created named attributes on GridCollection2D

  • New: Added support for the Previous namespace modifier, which stores off the values from the previous script execution for use in a simulation.

  • New: Changed script visibility to an enum to allow for soft deprecation of assets.

  • New: Added two styles to the particle count display to reflect the different emitter states (normal, isolated, disabled). Also enabled showing particle count by default.

  • New: Sorted Niagara function input menus and added submenus for more clarity.

  • New: Niagara systems can now be spawned from pools to reduce CPU overhead of spawning and activation. These pools can now be optionally "primed" with a set number of initial instances. This prevents slow spawning and activation times when first spawning these systems and instead transfers this cost to load time.

  • New: Changed the color of the vector field visualization from white to red.

  • New: Added a shader compile error if using sim stages with the CPU.

  • New: Added a shader compile error if using events with the GPU.

  • New: It is now possible for Systems and Data Interfaces to ignore their dependencies, allowing them to potentially tick earlier in the frame, using the bRequireCurrentFrameData flag. When this option is disabled, the previous frame's data is used and the simulation is issued early. This greatly reduces overhead and allows the game thread to run faster, but comes at a tradeoff if the dependencies might leave gaps or other visual artifacts.

  • New: Niagara particles will now properly support custom depth writes, lighting channels, disabling rendering in the main pass, and volumetric translucent shadows.

  • New: Added a new static switch constant for the script context (system, emitter, particle).

  • New: Added a couple of new features to Niagara's Mesh Renderer:

    • "Locked Axis" enables combining the various facing modes with locking an axis to a specific direction.

    • "Camera Offset Binding" allows mesh particles to be pushed toward or away from the camera.

  • New: Added support for dragging Niagara assets into blueprint graphs.

  • New: Added an option to switch between relative and absolute scale in Anim Notifys.

  • New: Niagara Emitters will no longer complete if no valid Static Mesh can be resolved. Instead, sampling the Static Mesh will result in sampling the Niagara System's location.

  • New: Changed the light renderer enabled binding to not be guarded behind a checkbox but always be evaluated (similar to other light values like radius or exponent).

  • New: Added a few new features to Niagara's Mesh Renderer:

    • The "Renderer Visibility" option allows particles to exclude themselves from certain Mesh Renderers.

    • "Distance Culling" disables rendering of meshes at a given distance from the camera.

    • "Enable Frustum Culling" culls individual sprites and mesh particles from rendering when they are not in view for performance optimization.

  • New: Added copy/paste support for stack entries in the user parameter default panel.

  • New: The Static Mesh Data Interface is now allowed to use the physics velocity rather than calculating it via the component transform.

  • New: GPU Simulation setup is now off to worker threads.

  • New: Local space mesh particle systems now support camera offset.

  • New: It is now indicated to the user when using the Camera Query Data Interface in a CPU emitter.

  • New: Changed the visibility of the ribbon renderer bindings to no longer be advanced.

  • New: Niagara Emitters will no longer complete if no valid Skeletal Mesh can be resolved. Instead, sampling the Skeletal Mesh will result in sampling the Niagara System's location.

  • New: Add a "Pivot Offset" feature to Niagara's Mesh Renderer and an ability to choose which space the offset should be in (Mesh, Local, or World).

  • New: Fixed the thumbnail generator to correctly crop the image to a quadratic size before scaling it down.

  • New: Extended the "copy metadata" action to static switches.

  • New: Niagara Renderers can now be optionally enabled / disabled for specific platforms.

  • New: Altering how default effect types are handled as existing behavior was confusing to users. Previously, Systems with no Effect Type set would use the project default Effect Type automatically. Now, setting no Effect Type does what you'd expect but new Systems are given the project default Effect Type on creation.

  • New: Hide the appended numbers after dynamic inputs to reduce stack visual noise.

  • New: Added a new Data Interface allowing Niagara modules to query the current platform.

  • New: A new Dynamic Input which returns one of the component axes of your mesh orientation as a vector.

  • New: Added a "Preview Mesh" fallback option to Static Mesh Data Interfaces in Niagara that will not be included in cooked builds for viewing in the editor. This saves memory over using the "Default Mesh" if it will never be used in game.

  • New: ParticleToWorld and WorldToParticle can now be initialized (using the local matrix) for the local vertex factory, allowing better debug visualization.

  • New: "Solve Forces and Velocity" and "Calculate Accurate Velocity" now use the new Particles.Previous.Position paradigm instead of the manual cached off attributes, as .Previous is now an intrinsic characteristic of attributes when accessing a previous frame value.

  • New: Added support for copying and pasting parameter metadata in Niagara script editors.

  • New: Tweaked the HLSL shader generation for GPU particle simulations to reduce the burden on the HLSL compiler, and added preprocessor directives to limit the scope of FSimulationContext for simulations using shader stages. This reduced compilation time by 20x for serial compilation, and by about 10x for regular usage in the editor.

  • New: Added a new property called "Apply Owner Scale to Attributes". This allows users to decide which attributes to scale via the owner scale of the Niagara actor placed in the world.

  • New: Changed FNiagaraVariableBase to include an index to a type definition (in the type registry) instead of the definition itself. Reduces the size of FNiagaraVariableBase from 24 to 12 bytes (cuts about 5% of the memory cost of UNiagaraScripts), and significantly reduces the number of object references that gets processed by garbage collection.

  • New: A new Initialize Particle module has been implemented into all default templates. Common behaviors such as randomness, uniform vs nonuniform sprite / mesh size, mass initialization, sprite UV flipping, and more, are now in plain english dropdowns to reduce clicks and simplify setting defaults for common behaviors. A "direct set" mode is included on all attributes so the previous behaviors are always easily accessible if desired.

  • New: Refactored ribbon texture UV options to be easier to use and added options to override the U and V range values per particle. However, you may find some instances that need additional adjustments after these changes.

  • New: Performance improvements for the creation of uniform buffers for GPU compute scripts (different buffers are shared between the emitters and stages)

  • New: Added the ability to drag and drop parameters from the system editor parameters panel into a scratch pad script graph or script asset graph.

  • New: Refactored how significance is handled. It is now handled by helper classes called Significance Handlers. The effect type can select which handler to use from the list of any available ones. Currently, the selectable options are Distance, Age, and None.

  • New: "Calculate Kinetic And Potential Energy" now has a remapping option when outputting the total energy. This sets a max cap on the energy amount and then outputs a normalized total energy. This is useful for driving 0-1 attribute values based on energy in physical behaviors.

  • New: The Particle Attribute Reader now has two official modules, "Spawn Particles From Other Emitter" and "Sample Particles From Other Emitter". The spawn module replaces existing spawn modules in the child emitter, and the sampling module initializes sampled attributes in the spawn script. Together these allow for GPU-based lead / follow emitters where one emitter provides attributes to another emitter for sampling, and there is an example of these in action in the new "Niagara_Advanced" hallway in the Content Examples.

  • New: Added Set Mode for accurate value painting.

  • New: Since it is impossible to set a reference to a world within the system editor, made all the properties referencing AActors or UActorComponent derived classes disabled in the system editor.

  • New: Added a new metadata field to a Niagara type to indicate it is internal, and shouldn't really be visible to users (currently, this is limited to the half precision floats).

  • New: Changed the code generation for GPUComputeShaders to pull out the simulation code so that it's no longer duplicated in the spawn and update branches. This causes both compile times and instruction counts to drop significantly (about 50% savings in both cases).

  • New: Added a new module to cull individual emitters based on their significance. It enables you to have an expensive emitter on only the number of most significant instances of a System in the scene. It can also be used to set up a lower quality fallback emitter for all other instances. It works using a new engine constant passed in and named "Engine.System.SignificanceIndex."

  • New: The Niagara datasets are now trimmed, removing attributes that are never read by the VM (or special data interfaces). This reduces VM operations and should reduce memory consumption and work.

    • Trimming is disabled by default but can be enabled on the system level with an advanced flag.

    • Individual attributes can be added in an emitter's advanced properties for forced preservation.

    • ParticleRead and Export data interfaces will force an emitter to not trim their attributes.

    • Custom HLSL nodes / expressions are parsed for attributes to keep.

  • New: Made it possible to disable emitters from a console variable.

  • New: The internal structs of particle scripts are now prevented from being defined in system scripts, which dramatically improves compile times (2x faster).

  • New: Added a new dynamic input to return individual worldspace mesh orientation axis vectors from the Particles.MeshOrientation quat.

  • New: Removed the constraint on allowing access to engine.deltatime and engine.invdeltatime in particle spawn scripts.

  • New: Removed NiagaraEmitters and NiagaraScripts from dedicated servers. NiagaraSystems remain, but are light weight, and allow a consistent interface for blueprints.

  • New: Added a "Scale UVs by Center" function when working with texture samplers

  • New: Added a "World Position to Screen UV" function when working with the new Gbuffer data interface.

  • New: Added the ability to add parameters to a "Set Parameters" module by dragging and dropping from the parameters panel directly into the module in the system overview.

  • New: Added an optional property to NiagaraParameterCollections to allow a MaterialParameterCollection to drive values in Niagara. Parameters will get automatically created when a MPC is assigned, and the backing parameter store will be updated as changes are made to the MPC.

  • New: The "Normalized Exec Index" functions and dynamic inputs now have a boolean input which makes the normalized result inclusive or exclusive. Exclusive does not return 1 and is useful when driving a periodic function such as sine.

  • New: Added Array data interfaces, which have two new dynamic inputs for "Select float/vector from array". There are now three array sampling modes: direct, random, and interpolate. Interpolate will interpolate through the entries in the array based on an interpolation factor, and has an optional input to normalize the interpolation.

  • New: Added an Official Module for the "Export Particle Data" Data Interface. This allows particles to export their data to blueprint or gameplay code.The functions work on both CPU and GPU. The GPU is done via a readback and can be up to 3 frames latent depending on the platform.

  • New: Return Particle ID attributes now have an optional input to extract info from another Niagara ID, such as RibbonID.

  • New: You can now access generic GBuffer frames within Niagara using a Data Interface.

  • Improvement: On the Skeletal Mesh Data Interface, the array element name for "Specific Bones" and "Specific Sockets" have been renamed to "Filtered Bones" and "Filtered Sockets."

  • Improvement: Cleaned up parameters being passed to various RT Data Interface calls, i.e. Pre / Post Stage, to ensure that all parameters are set correctly to the functions that are called.

  • Improvement: Moved NiagaraComponentSettings into its own file.

  • Improvement: Extended NiagaraComponentSettings to allow forcing which systems use the component pool.

  • Improvement: We've standardized how data is pushed to the render thread for GPU simulations, you may need to make some modifications to match it.

  • Improvement: Improved performance and compilation speed in Sim Stages.

  • Improvement: Made batching of System instances more common by reducing the need to go solo if using data interfaces as user variables.

  • Improvement: Preview meshes will now only show inside editor / preview windows, not inside PIE as it can be confusing when it is not visible inside a cooked build.

  • Improvement: Improved messaging for missing bones / sockets, sent in a single line to improve reception by various toolings.

  • Improvement: Renamed RandomFilteredSocketBone to RandomFilteredSocket.

  • Improvement: Optimized FNiagaraParameterStoreToDataSetBinding::Init by avoiding double map lookups in some cases.

  • Improvement: Moved the emitter dependency order calculation to the system from per system instance; now calculated on PostLoad, it may be possible to serialize for cooked platforms.

  • Improvement: Reorganized the Niagara sim stages RasterizeParticlesGrid2D minor module input to aid ease of use.

  • Improvement: Updated the Niagara SetBoolByFloatComparison module to use static switches for optimization reasons.

  • Improvement: Improved the stack UI to include parent/child relationships.

  • Improvement: Significant optimization for Niagara Systems that use Data Interfaces in particular ways.

  • Improvement: Improved CPU collision traces by skipping traces if collision is disabled for a particle.

  • Improvement: Added CPU optimizations for Niagara GPU emitters.

  • Improvement: Added minor CPU optimizations for Niagara Systems using Events.

  • Improvement: Updated the Niagara RasterizeParticlesGrid2D metadata for clarity from an artist's point of view.

  • Improvement: Added optimizations for CPU implementation of Niagara's Particle Attribute Reader Data Interface.

  • Improvement: Added some CPU performance gains when spawning Niagara Systems that are pooled.

  • Improvement: Added a minor optimization for CPU systems using the Skeletal Mesh Data Interface.

  • Improvement: Added updates for static VectorField Data Interface. 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 Data Interface for sampling. For supported platforms it reduces memory cost (16 bpp -> 6 bpp) and improves sampling time (2x speed increase).

  • Improvement: Updated the sequencer particle trigger track to support triggering Niagara systems.

  • Deprecated: Added a "IsValidField" output to the distance field query function.

  • Deprecated: Removed old, unused collision Data Interface functions.

  • Deprecated: Deprecated data interface export function without exec pin.

  • Deprecated: Updated default values for the torus location module.

  • Deprecated: All "Uniform Ranged X" dynamic inputs have been soft-deprecated and replaced by the new "Random Range X" functions. These are more optimal from an optimization standpoint, and more critically, they now include two modes when used in an update script like Particle Update, "Spawn Only" or "Every Frame."

    • Spawn Only enables a random number to be calculated directly in an update script only once, instead of requiring a random variable to be initialized in spawn and then linked in an update, which is a significant workflow improvement.

    • Every Frame causes random dynamic inputs to revert to their original behavior of being recalculated every frame.

    • When used in Emitter Update, these functions also expose a new option to "Recalculate Each Loop", which returns new random numbers only on loop boundaries.

Optimizations

  • Bug Fix: Fixed the half resolution SSR rendering path.

  • Bug Fix: Reenabled and fixed dedicated memory allocations (used by NVIDIA cards). Allocations can never be reused as they are tied to the image.

  • Bug Fix: Fixed ref counting in FRenderTargetPool::FreeUnusedResource so that it frees resources correctly.

  • New: Sorted reflection material gather rays now use RAY_FLAG_FORCE_OPAQUE.

  • New: Added DEFINE_GPU_DRAWCALL_STAT to get the draw call count per specific category; DEFINE_GPU_DRAWCALL_STAT macro is now used instead of DEFINE_GPU_STAT to also get the draw call count in CSV for a specific pass. SCOPED_GPU_STAT will then output the CSV time for the GPU pass and the number of draw calls of this GPU pass in the CSV Draw Call category.

  • New: Added a batched RT material gather pipeline using batched / parallelized API. This saves ~50% of the RHI thread critical path time.

  • New: Symbols from RT PSOs are no longer exported. This slightly improves large PSO linking performance by avoiding some of the string deduplication cost in d3d12.dll.

  • New: Enabled r.Streaming.UseAsyncRequestsForDDC by default. This enables async DDC requests by default to prevent stalling the editor when the shared DDC network is slow.

  • New: Shader creation during drawing has been multi-threaded for the RHIs where this is thread-safe. This can be controlled with r.MeshDrawCommands.AllowOnDemandShaderCreation.

  • New: Redundant resource residency management is now skipped when the same SBT or RT scenes are used on the same command list repeatedly.

  • Improvement: Optimization of CREATE_NOT_ZEROED to reduce hitches on Windows 10 build 2004 and later.

  • Removed: Removed unused vertex input streams in c++ that should already have been removed.

Post Processing

  • Bug Fix: Fixed TAAU for DOF sampling outside the input viewport

  • Bug Fix: Corrected SignFastInt in FastMath.ush

  • Bug Fix: Fixed DOF sampling outside the viewport when using TAAU and SP > 100.

  • Bug Fix: Reduced DOF tiling artifacts when fast gathering foreground on foreground transition coc range by computing output opacity based on kernel size.

  • Bug Fix: Fixed the IF_PP handling of BloomMethod.

  • Bug Fix: Fixed bug due to incorrect subrects in Basic Eye Adaptation Compute Shader.

  • Bug Fix: Corrected white light appearing on cubes when disabling post processing.

  • Bug Fix: There is now a check that there must be correct viewport information after processing a frame while not in 'real time'.

  • New: Added information about the depth velocity in the velocity buffer.

  • New: Color Correct Regions. A new plugin module that allows users to add color correction to regions in 3D Scenes. Based on the concept of Color Correct Volumes and optimized to support many Regions in one level.

  • New: Added a new step in the pipeline for view extensions to be able to access the rendering stages before Postprocessing. Users can subscribe to different stages of Postprocessing via the ISceneViewExtension. This adds more flexibility to postprocessing including giving an ability to do color correction before a tone map is applied.

  • New: Added interfaces to enable Temporal Anti-Aliasing GPU passes to be replaced by a plugin. No backward compatibility on this interface is guaranteed between major releases.

  • New: The Filmic Tone Curve portion of the tonemapper can now be individually disabled via ShowFlag.ToneCurve or by setting the ToneCurveAmount (in PostProcess->ColorGrading->Misc) to zero. NOTE: Typical use cases that require the tone curve to be disabled may also require ExpandGamut to be set to zero (the default is 1.0).

  • New: Added more flexibility to Post Processing via Scene View Extensions. This is required to support OCIO conversion after the tone map.

  • New: Added a Context that a Scene View Extension (SVE) can use to determine if it should be active or not, in addition to the FViewport pointer, for use when there is no FViewport, or when applying a SVE on a particular view that shares a FViewport. This provides a way to have an arbitrary Context that corresponds to the rendering entity, and a mechanism to provide the SVE lambdas that can find and parse the custom context. The SVE can then decide if it should be active for the current frame and context, or simply use default normal behavior. This does not change the normal behavior, and only adds an option for renderers to provide a context.

  • New: Added more flexibility to Post Processing via Scene View Extensions. This is required to support OCIO conversion after the tone map.

  • New: Added a new step in the pipeline for view extensions to be able to access rendering stages before PostProcessing.

  • New: Major Updates to Ground Truth Ambient Occlusion code.

    • Added the ability to set more than 1 angle per pixel. Having 1 angle is problematic due to the projection of the per pixel normals on the view direction.

    • Improved the fall off function to band less

    • Changed the dither pattern to be based on Interleaved gradient noise. This also reduces banding.

    • Added a PPV value to control the temporal blending rate.

    • Fixed a bug regarding running at full resolution.

  • New: Added support for Open Color IO (OCIO) in the Viewport and Movie Render Pipeline.

    • OCIO in the Viewport enables users to modify the Viewport's color output and add OCIO color conversion after the tone map, which disables the tone curve and gamma. To do this, create a new Open Color IO Settings Asset and assign it to the viewport using the OCIO Configuration menu in the View. Once assigned, you should select a source colorspace to convert from and a target colorspace to convert to.

    • OCIO in the Movie Render Pipeline enables users to add a custom color configuration to the Movie Render Pipeline. It allows for control over tone curve and OCIO color conversion settings. Similarly to the Viewport OCIO Configuration menu, you need to add a new OCIO Configuration Asset and then select a source colorspace and target color space.

Ray Tracing

  • Crash Fix: Corrected a crash in ray tracing when the value of the skin cache is null.

  • Crash Fix: Fixed a crash caused when ray tracing shadows is the only active ray tracing effect and r.RayTracing.Shadows is set to 0 while leaving GRayTracingShadows set to 1, resulting in the RenderRayTracingShadow function being called when it should not.

  • Crash Fix: Fixed a crash when turning off all ray tracing effects during run-time.

  • Crash Fix: Fixed a crash calling SetupRayTracingCullClusters when RT was disabled.

  • Crash Fix: Fixed a crash that occurred when enabling r.RayTracing.ExcludeDecals because ray tracing instances are skipped but VisibleRayTracingMeshCommands have already been registered.

  • CrashFix: Fixed a crash caused by RT Niagara ribbons with zero polygons.

  • Crash Fix: Fixed a crash that occurred when initializing foliage structures with RT enabled.

  • Crash Fix: Fixed a crash on startup when attempting to load a RT shader while run-time RT support is compiled out.

  • Bug Fix: Fixed a possible deadlock in RTPSO compilation tasks on machines with low CPU core counts. RTPSO 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 get to run on other task threads.

  • Bug Fix: GPU copies are now used to fill the ray tracing IES light profile texture atlas. This corrects the handling of pre-tiled source profile textures.

  • Bug Fix: Fixed a potential assert when rendering ISM with ray tracing enabled if the ISM proxy had no instances.

  • Bug Fix: Added a UAV barrier at the end of each BLAS build batch. This fixes a GPU bug when running with ray tracing due to build and update commands overlapping on the GPU and corrupting memory.

  • Bug Fix: Landscape grass is now visible in ray tracing. Grass does not have per instance indices so previously it was filtered out.

  • Bug Fix: Fixed a potential race condition accessing data that is being destroyed from another thread when ray tracing Skeletal Meshes.

  • Bug Fix: Fixed Ray Tracing Post Process Volume settings cannot be edited/interpolated by Sequencer.

  • Bug Fix: Fixed GRayTracingPlaformMask initialization, which could be incorrectly enabled in editor builds and lead to unwanted ray tracing shader compilation. The console variable r.RayTracing is checked in TTargetPlatformBase and it should always be taken into account, regardless of per-platform settings.

  • Bug Fix: Fixed missing transition barriers for ray tracing resources that are bound directly and not through uniform buffers.

  • Bug Fix: Added an explicit shader parameter to differentiate direct vs indirect dispatch in RayTracingDynamicGeometryConverterCS. Fixed the handling of MinVertexIndex.

  • Bug Fix: Fixed raytraced Niagara Meshes on the GPU with multiple sections.

  • New: Added ray-traced reflections to single-layer water.

  • New: Added ray-traced transmission support for subsurface material.

  • New: Ray tracing reflection rays are not traced from pixels that have an unlit shader model.

  • New: Added a console variable to disable WPO evaluation for Static Meshes in ray tracing

  • New: Rendering reflections is now skipped in ray tracing debug or path tracing view modes.

  • New: Ray Tracing Final Gather GI improvements:

    • Added optional neighbor sample stealing (and consistent stratification within the filtering neighborhood): r.RayTracing.GlobalIllumination.FinalGather.FilterWidth (default = 0)

    • Added optional gather point multi-sampling to improve per-frame convergence: r.RayTracing.GlobalIllumination.FinalGather.Iterations (default = 1)

    • Now uses reprojection on the temporal gather point history.

  • New: Added LightingChannelMask support to path tracing and ray tracing global illumination passes.

  • New: Added options to turn off the compilation of ray tracing material closest-hit shaders or any-hit shaders. The values are read-only and must match between cook-time and run-time. New console variables added:

    • r.RayTracing.CompileMaterialCHS (default 1)

    • r.RayTracing.CompileMaterialAHS (default 1)

  • New: Created large fixed-sized ray tracing view descriptor heaps instead of creating worst-case heaps for the current frame.

    • The initial heap size is set by r.D3D12.RayTracingViewDescriptorHeapSize (default = 250k).

    • This avoids the pathological performance issue when new meshes are progressively added to a large ray tracing scene. The previous allocation scheme resulted in ever-larger heaps being created as the scene grew, which caused significant CPU spikes (200-300 ms). The new scheme reuses the same heaps that are pre-sized to be large enough.

    • If an overflow is detected, the heap size will be doubled for the next frame, but the current frame will have some number of placeholder shaders bound to the ray tracing scene and will not be rendered correctly as a result.

  • New: Added support for parallel AddMeshBatch processes for DynamicRT meshes.

  • New: Shadow rays in RTGI are shortened by default to avoid hitting the sky sphere, which makes it possible to get desired sky reflections without affecting GI.

  • New: Ray tracing debug visualization modes are now consistent with GBuffer visualizations.

  • New: The RT debug show flags are now hidden in the editor menu, since the corresponding functionality is exposed via the view modes menu instead.

  • New: Ray tracing global illumination is now enabled on two-sided foliage.

  • New: Optimized the command list generation for the dynamic geometry RT update.

    • A shared vertex buffer is now used for the compute output (managed by the collector); the vertex buffer offset is now required in the compute shader and the acceleration segment data.

    • Commands are now sorted by shader and then by vertex buffer to reduce command list creation overhead.

    • The FShaderBindingState is used to reduce incidence of binding the same uniform buffers repeatedly.

    • The loose parameter data is now stored in the FMeshPassProcessorRenderState instead of setting it twice.

  • New: Added solid-angle sampling to RT spherical lights.

  • New: The Indirect Lighting Intensity factor is now respected when computing RT global illumination.

  • New: Added a console variable to control if RT BLAS compaction should be automatically performed after build

    • r.D3D12.RayTracing.AllowCompaction 0 / 1 (default)

    • Compaction is still enabled by default, but the console variable can be used to easily A/B test memory usage, GPU time, etc.

    • The value is read-only at runtime, as it requires all acceleration structures to be re-created.

  • 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.

  • New: Implemented the DXR 1.1 PSO addition API. Ray tracingPSOs can now be grown/extended through AddToStateObject on a supported Windows version and driver. A compatible base pipeline is automatically selected from the pipeline cache based on how recently and frequently it was used, unless it is explicitly provided by the user.

  • New: Implemented a roughness bias for experimental ray-traced reflections. 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.

    • The drawback of this technique is that it is not physically based and can produce surprising / inconsistent visual results and so it must be used with care.

    • The feature can be enabled using r.RayTracing.Reflections.ExperimentalDeferred.SmoothBias (default = 0). Only surface roughness below this value will be biased towards zero.

  • New: Added transmission to the RT global illumination pass. This feature does not yet have a global override control to systemically disable the effect.

  • New: Added console variables to globally control RT 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 console variables are intended for global easy overrides, allowing fine grained control over quality vs performance in games, without content changes. New console variables:

    • r.RayTracing.Shadows.Lights.Directional

    • r.RayTracing.Shadows.Lights.Point

    • r.RayTracing.Shadows.Lights.Spot

    • r.RayTracing.Shadows.Lights.Rect

  • New: 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. The density of this volume is proportional to the shading model's opacity.

  • New: Implemented a roughness threshold for skipping any-hit shader invocation in the experimental RT reflection shader.

  • New: 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.

  • New: The cloth shading mode is now supportedl in the ray-traced reflections pass.

  • New: Implemented basic support for masked materials in the experimental ray-traced reflection shader.

  • New: Moved ray tracing vertex and index buffer tracking from SBT to the scene. This saves 2/3 of the time spent in FD3D12RayTracingScene::FindOrCreateShaderTable.

  • New: FD3D12CommandContext::RHISetRayTracingHitGroups is now able to internally parallelize the work to improve RHI thread critical path time. The maximum number of worker threads is limited to 5 (RHIT + 4 task threads). Each thread gets a dedicated descriptor cache as well as separate referenced resource tracking sets to avoid contention.

  • Improvement: A single-state resource is now used in Ray Tracing buffer allocation to speed up allocation time.

  • Improvement: Only allow tone mapping on radiance, indirect irradiance, and primary rays debug ray tracing view modes.

  • Removed: Translucent objects no longer cast ray traced shadows, which more closely matches the default behavior of dynamic shadows.

Water

  • Bug Fix: Fixed artifacts that occurred when computing underwater ray tracing reflections.

  • New: Added ColorScaleBehindWaterInput to the SingleLayerWater Shading Model. This can be used to add custom colorization effects such as caustics or custom surface shadows to the scene behind the SingleLayerWater surface.

  • New: The Water Plugin has been released as Experimental.

Tools

  • Bug Fix: MoviePipeline: Fixed an issue where having multiple shots pointed to the same inner movie scene would restore incorrectly, causing the inner Playback Range to slip further and further with each successive use of the sequence within a single render.

  • Bug Fix: Update source control helpers to properly resolve file paths for RevertFiles and RevertUnchangedFiles

  • Bug Fix: Fixed a crash in UATHelperModule where pointers for old notifications could potentially be invalid.

  • Bug Fix: Fixed a LevelStreaming issue that occurred when exchanging the desired level with an already loaded level between request and completion. The pending unload was never processed and the state machine remained in the LoadedNotVisible state indefinitely.

  • Bug Fix: Fixed FWorldTileCollectionModel::GenerateLODLevels not releasing generated assets.

  • Bug Fix: Fixed a crash when a map fails to load from the recently opened levels list.

  • Bug Fix: Fixed LevelStreaming when changing the desired level to an already loaded level between request and completion. The pending unload was never processed and the state machine remained in the LoadedNotVisible state indefinitely.

  • Bug Fix: Removed the clamp in USplineMeshComponent::SetEndTangent

  • Bug Fix: Returned previously renamed public members/methods in FWorldTileModel and UWorldComposition and deprecated them.

  • Bug Fix: The PIE window now correctly adjusts its window position if DPI scaling is in use.

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

  • Bug Fix: Fixed a bug that would prevent the user from restoring an imported SkeletalMesh LOD after applying a reduction to it.

  • Bug Fix: Material slot names are no longer lost when merging multiple SkeletalMeshes together.

  • Bug Fix: Reimporting an FBX mesh no longer destroys custom collision meshes added in Unreal.

  • Bug Fix: Fix a bug in the MeshEditing toolbar where material assignments were not preserving shadow and collision settings when creating a new material section.

  • Bug Fix: Fixed an assert that could be fired regarding bad progression values when importing FBX files.

  • Bug Fix: Fixed a bug in FBX import where element names would not be properly parsed as UTF-8.

  • Bug Fix: FBX Import - Fixed a bug when reimporting a SkeletalMesh that would reset all the LOD settings.

  • Bug Fix: Fixed the SkeletalMesh "Bake Out Materials" option overriding Slot Names and Imported Material Names.

  • Bug Fix: Fixed a bug that would prevent a collision mesh from being generated during import if the collision data in the FBX file is invalid.

  • Bug Fix: Fixed the python import option ResetToFbxOnMaterialConflict introduced last release. Now, when enabled the FBX import will properly use the "ResetToFbx" behavior on material conflict.

  • Bug Fix: Fixed a bug that would open a new content browser window when cancelling FBX import with the existing browser window locked.

  • Bug Fix: Fixed an issue with bad texture assignment during FBX import when importing textures with names conflicting with material names.

  • New: Added BuildCMakeLib UAT automation script for building third party libraries that use CMake.

  • New: NetworkInsights/NetTrace - Improved tracing of bunches to capture open / close / sequencenumbers and channelid

  • New: Added FVisualLogExtensionInterface::OnScrubPositionChanged to make it easier to tie the visual logger to other debug systems. Contributed by The Coalition.

  • New: Enabled verbose output for SN-DBS code builds - supported platforms compile cleanly, so verbose output is now enabled by default so any issues will be caught as they arise.

  • New: The materials assigned to UStaticMesh and USkeletalMesh assets are now accessible in Python. The "StaticMaterials" and "Materials" properties are now respectively exposed.

  • New: The FBX SDK used has been updated to the latest 2020.1.1 version.

  • Improvement: Clarified function and parameter names in FWorldTileModel and UWorldComposition.

  • Improvement: Removed (or moved to a runtime toggle) some high-frequency/low-value engine performance counters. This improves performance and stability in some profilers.

  • Improvement: In the FBX Import dialog box, renamed "Auto Generate Collision" to "Generate Missing Collision" for clarity.

UI

  • New: Implemented a new Letter Spacing property for UMG/slate widgets with font attributes (text-based widgets). Due to limitations with the HarfBuzz library and issues with letter spacing for cursive text (e.g., Arabic), Discretionary or complex ligatures are not affected by the letter spacing, such as Arabic and Thai.

  • Improvement: Duplicating or copy/pasting widgets in UMG now behaves similarly with other comparable software applications that use layer and object hierarchies, such as Photoshop and Unity. Duplicated widgets now insert the duplication directly above the selected widget, and duplicated widgets are selected by default. When pasting a panel widget, the widget will appear as a child at the top of the draw order or replace the existing panel if you cannot have more than one panel for that particular widget.

Slate

  • Crash Fix: Editor no longer crashes when the Viewport size is set bigger than the maximum texture size allowed.

  • Crash Fix: Editor no longer crashes when rendering Slate from another thread.

  • Crash Fix: Changing to Fullscreen State or resizing the window no longer causes Editor to crash. This was required to support the new flip model, described here: https://devblogs.microsoft.com/directx/dxgi-flip-model/

  • Bug Fix: The Searchable Combo Box no longer incorrectly closes instantly when selecting the box.

  • Bug Fix: The timer handle now sets correctly in the List View Base.

  • Bug Fix: The retainer box no longer incorrectly applies animation render transforms twice.

  • Bug Fix: Memory no longer leaks when using font outlines.

  • Bug Fix: Calls are no longer incorrectly made to Slate Application when in headless mode.

  • Bug Fix: The mouse no longer incorrectly deselects on mouse release when using the Single Toggle selection.

  • Bug Fix: Tooltips now work correctly when receiving OnOpening and OnVisualizeTooltip callbacks.

  • Bug Fix: When right-clicking while dragging a gradient stop, a transaction no longer is incorrectly left open on the SColorGradientEditor.

  • Bug Fix: Rich text blocks now filter data tables correctly by allowed row type.

  • Bug Fix: Multi-select mode now correctly allows multiple selections in the widget tree view.

  • Bug Fix: Resolved an issue where the first item in a list view is skipped by navigation.

  • Bug Fix: Resolved an issue with the Rich TextBlock's Set Text Style by adding a null check.

  • Bug Fix: Register Commander no longer incorrectly attempts to register an unhandled key down event handler on dedicated services. This is because Slate is not initialized.

  • Bug Fix: Using inline text boxes in edit mode now work properly during a drag/drop.

  • Bug Fix: After receiving an element request with no gamma correction, the Slate opengl and d3d references now restore gamma correction values correctly.

  • Bug Fix: When rendering text, frame updates now occur on the game thread. This resolves a potential issue where the font cache is destroyed.

  • Bug Fix: The Invalidation Root now properly handles cases when Process Invalidation is called 2 times in a single frame.

  • Bug Fix: Slate RHI Resource Manager now locks mtex before GC to prevent multithread access to a UObject while processing rendering commands in the loading screen.

  • Bug Fix: Resolved an issue where the Retainer did not properly return the correct Layer ID.

  • Bug Fix: Changed paint calculations in the Retainer Widget to resolve an issue.

  • Bug Fix: We've made a correction to the Slate Global Invalidation mode concerning volatile flags on SWidgets. Previously, flags under an invisible parent that have just been made visible were sometimes ignored in the updating process.

  • Bug Fix: Resolved threading issues with PreLoad Screen.

  • Bug Fix: The Invalidation Panel now updates correctly when used in another panel.

  • Bug Fix: Removed invalid widgets from the fast path. When the FastPathGenerationNumber is incremented on the same frame as when the widget is removed, then the widget would hold a pointer to the invalidation root. That pointer may then because invalid. We've added code to detect that case and added WITH_SLATE_FIND_WIDGET_METADATA to help find the widget.

  • Bug Fix: Resolved an issue with the Slate Debugging Input Event parameter error.

  • Bug Fix: Resolved an issue with the Slate Invalidation Root by adding a test handler to check if the root is destroyed before the persistent Widget data is cleared. If so, the handler fixes the bad memory when the global invalidation flag changes.

  • Bug Fix: To fix a bug, UE will now delay the construction of ConsoleSlateDebugger and move the text construction from ConsoleSlateDebugger to the defined structure that holds the information. To support this we've also added a filter and more info to SWidgetEventLog.

  • Bug Fix: Implicit conversion warnings for Slate Enable Global Invalidation now function correctly.

  • Bug Fix: Made a correction to resize cursor blinking when trying to resize a Window making it very difficult to resize.

  • Bug Fix: We've released a fix to make sure the Retainer uses a valid InvalidationRoot. This should also fix issues in the fast path where the retainer was not updated when invalidated.

  • Bug Fix: Slate Tick is now correctly separated from replicated objects when using ClientRecordAsyncEndOfFrame1to replay recordings. This divides up the initial call to just Platform and Input ticking, which performs message pumping as well as some additional added Slate input tasks.

  • Bug Fix: Released a fix to invalidate the user widget canvas when its slot properties change.

  • Bug Fix: UE will now warn the user when the SRetainerWidget render target size is too big or 0.

  • Bug Fix: When reflowing the UI based on Right To Left, we now also mirror the pivot point about the middle, since everything is going to swap sides.

  • Bug Fix: Addressed a crash occurring when the widget loses focus and UE tries to open a submenu. The issue only occured on Mac because of how the message loop is handled.

  • Bug Fix: Menu anchors should now correctly create the popup window for dropdowns in a World space Widget Component.

  • Bug Fix: When the RHI texture resource is not ready, to keep the texture, transparent black now shows correctly, instead of rendering a white rectangle for a frame or two (which causes the UI to "flash").

  • New: The asset picker now includes Required Asset Tags so you can specify the required key/value pairs necessary to display an asset.

  • New: Added the SLayerImage widget to draw an arbitrary number of images on top of each other.

  • New: VCamCore now has an accessor for the protected Scene Viewport variable in the SEditor Viewport class.

  • New: You can now double-click to disable words in multiline text boxes, such as the Editable Text and Text Box.

  • New: SpinBox now supports double and int64.

  • New: The new Header Row now allows you to select the header you want to generate.

  • New: There are several new updates to the Widget Reflector:

    • Overall widget layout update

    • Ability to save your settings

    • Ability to toggle your column visibility in the menu

    • Widget Snapshot Visualizer includes a clipping zone

    • Added filters for other UMG widgets in the widget tree

  • New: Added the Console Slate Debugger Update, which enables you to determine which widgets have update flags. Other widgets can be updated as a side effect of the updated widgets.

  • New: Added debugging tool for a navigation event in the Widget Reflector.

  • New: Added debugging tool to support drawing debug information on top of Slate Widgets.

  • New: You can now use a Visualizer key input in Demo Mode through the commands Slate.DemoMode.KeyEvent or Slate.DemoMode.MouseEvent. This input is now separate from Widget Reflector.

  • New: Mouse Capture is now compatible with Widget Reflector events.

  • New: Added the Slate Navigation Event Simulator so when offline, the event simulates a navigation event as it would occur in game. The OnNavigation function and other callbacks are not executed. If the widget has special needs for simulation, the Simulated Navigation MetaData can be added to the widget.

  • New: Introduced a way to prevent IO hitches in font loading. You can now use the CVar, Slate.Font.AsyncLazyLoad 1, to force fonts marked as LazyLoad to be loaded on a background thread. Until these fonts show up you'll see your error glyph like, until the font finishes loading, once it does we'll invalidate font layouts forcing recalculation.

  • New: Exposed ListView's EntrySpacing to Blueprints.

  • New: Added the console command SlateDebugger.InvalidationRoot. We've also enabled the option to display how the invalidation roots are updated.

  • New: Added the console command SlateDebugger.Invalidate. We've also enabled the option to display how the widget gets invalidated.

  • New: Added a debug tool to see which widgets are painted. It's useful in a fast path, and can be activated from the console with 'SlateDebugger.Paint.Start'.

  • New: Added Slate.CheckUObjectRenderResources to find UObject resources that are not valid but used by Slate RHI.

  • New: Added a log to record how input events are routed in Slate. This log uses the ConsoleSlateDebugger with the option "InputRoutingModeEnable" enabled.

  • New: Added entry size getters to Tile View.

  • Improvement: The checkbox widget now treats key down events similarly to events and carries over any settings for click/touch/press methods. The touch/press methods are now part of the SCheckbox and are all exposed to the UWidget.

  • Improvement: The Collapse Menu On Parent Focus setting now appears on the SComboBox node, in addition to the SComboButton.

  • Improvement: The MultiLine Editable Text Box now clears focus when pressing the Escape key. This is now consistent with the Editable Text Box behavior.

  • Improvement: You can now use Undo in any editable text field.

  • Improvement: The Rich TextBlock decorator class now uses the overridden default style, when provided.

  • Improvement: The Input Preprocessor mouse movement event call is now part of the Process Mouse Move Event, and is removed from OnMouseMove/OnRawMouseMove. This ensures touch events are always routed through the Input Preprocessor and can be handled appropriately.

  • Improvement: Several major improvements were made to RDP behavior with Editor.

  • Improvement: The Input Event only translates when needed.

  • Improvement: The Universal Search binding is now added to the Widget Blueprint Indexer.

  • Improvement: Changed FWidgetProxy::MarkProxyUpdatedThisFrame from static to class function.

  • Improvement: Added a tint option to the draw quad.

  • Improvement: In Slate, you can now use the window as a dangling pointer with the Pre Load Slate Widget Renderer.

  • Improvement: Fixed some instances of the deprecated EInvalidateWidget to EInvalidateWidgetReason. Moved EWidgetUpdateFlags into its own file. Changed FWidgetProxy::MarkProxyUpdatedThisFrame from static to class function.

  • Improvement: You can now use the Input Routing Mode Enabled to log how input events are routed in Slate.

  • Deprecated: The 'Slate.InvalidationDebugging' console command is not deprecated. Use 'SlateDebugger.Invalidate.Enable' instead.

  • Deprecated: Renamed TranslateMouseCoordinateFor3DChild to TranslateMouseCoordinateForCustomHitTestChild, to more accurately reflect its purpose.

UMG

  • Crash Fix: Editor no longer crashes when Widget Renderer's status is nullptr.

  • Crash Fix: Editor no longer crashes when dragging and dropping a named slot element.

  • Crash Fix: Added a null check to the Widget Blueprint Has Latent Actions to prevent Editor from crashing when pasting widget blueprints from other projects that reference a blueprint library.

  • Crash Fix: UMG slots now have a check for InSlot>Content to validate the property. This prevents an issue that caused Editor to crash.

  • Bug Fix: WidgetComponent now correctly supports Component only using SWidget.

  • Bug Fix: Widgets now clip correctly.

  • Bug Fix: Widget components with render targets that change colors now re-initialize correctly.

  • Bug Fix: Editor utility widgets no longer incorrectly dirty the level when reinstancing.

  • Bug Fix: When a Widget is renamed, you can now search for any previous variable "get" nodes and adjust the orphan pins correctly.

  • Bug Fix: Widget Components now correctly support using only SWidgets.

  • Bug Fix: Widget Components now re-initialize render target color changes correctly.

  • Bug Fix: UMG slot Details category no longer incorrectly changes position when multiple widgets are selected.

  • Bug Fix: When verifying if the BindWidget properties are bound to the correct Widget, UE will now test on the Widget owner when the Widget is part of a Named Slot. The Widget will appear 2 times because the ForEach is recursive. Also, an inner UserWidget may have a NamedSlot that contains the BindWidget. Keep in mind that BindWidget is part of the inner UserWidget tree but not part of the inner UserWidget class. To help support this, the CompileAllBlueprint commandlet has been changed to only compile a certain type of blueprint.

  • Bug Fix: The UMG Designer Class Viewer now correctly populates the class tree when a parent blueprint is loaded without the child blueprint.

  • Bug Fix: Concerning Slate, added missing UPROPERTY tag on UMG widget.

  • Bug Fix: When renaming, we've added a reason for when the BindWidget is not of the right type.

  • Bug Fix: Abstract & deprecated widgets are now hidden in the UMG Widget palette.

  • Bug Fix: We've changed the Pointer Index to an integer.

  • Bug Fix: Implemented a correction in UMG Designer to prevent a crash due to drag/drop of the named slot element.

  • Bug Fix: Released a fix to prevent a crash in AsyncTaskDowloadImage when using nullrhi.

  • Bug Fix: Released a fix for when Background Blur in UMG is filled with black when UI.CompositeMode is used in HDR.

  • Bug Fix: WidgetInteractionComponent's implementation of OnComponentCreated now calls the parent class' implementation.

  • Bug Fix: Fixed "Replace Binding" incorrectly removing all bindings when all requested widgets are already bound to other tracks.

  • New: You can now use a scaling ruler when using ScaleToFit.

  • New: You can now use Set Animation Current Time to set the current time of the animation without changing the game state (playing, pausing, ect.)

  • New: UMG now has a new navigation simulation and debugging input.

  • New: Added Scale To Fit to the scaling ruler.

  • New: You can now add an unique UMG Designer Extension externally from the designer module.

  • New: The TickMode option on Widget Components improves widget performance by preventing the widget from ticking when the widget is not visible or not set.

  • Bug Fix: You can now correctly select which variable to delete with the "Delete unused variables" command.

  • New: Added a generic Check Box List to display a list of checkboxes with labels associated with your variables.

  • New: Added dialog to confirm that the user wants to delete a widget, when it's used in the graph.

  • New: Exposed WidgetInteractionComponent debug line thickness.

  • New: Added default Widget Blueprint parent class to Project Settings.

  • New: Added events for when interpolation starts and when it updates on the numeric textblock to allow for synchronized sounds or other stuff.

  • New: Added draw function to show the result of the Navigation simulation. UE now displays the result for selected widget or all the widgets if there is no selection.

  • Improvement: The Property Binding now hides by default in the preview widget.

  • Improvement: You can now use a culling rectangle for the appended grid. The owner of the grid may have a different culling rectangle than when it got created.

  • Improvement: Redesigned how templates (archetypes) are generated for widgets, resulting in large memory savings (approximately 60% of total template memory can now be recouped).

  • Deprecated: On Get Menu Content Event is now deprecated. Use the On Get User Menu Content Event instead.

Virtual Production

  • Crash Fix: Fixed a crash when r.D3D11.UseAllowTearing was changed after viewport creation and then was Resized. This was happening when using Multi-User with -ConcertAutoConnect and Oculus VR plugin was enabled, because auto connection created a notification window, then Oculus VR cleared r.D3D11.UseAllowTearing.

  • Crash Fix: Corrected a crash that occurred when r.D3D11.UseAllowTearing was changed after viewport creation and then got resized. This was happening when using Multi-User with -ConcertAutoConnect and Oculus VR plugin was enabled because auto connection would create a notification window and then Oculus VR would clear r.D3D11.UseAllowTearing.

  • Crash Fix: Fixed an AudioCaptureTimecodeProvider crash due to stack overflow when calling GetFrameRate().

  • Crash Fix: Fixed the editor crashing when stopping the WebControl server.

  • Crash Fix: Fixed a crash in nDisplay when DisplayClusterRootActor sits in the sublevel and this sublevel is not last in the list.

  • Crash Fix: Fixed a crash for when nDisplay was used with instanced stereo enabled.

  • Crash Fix: Fix crash when in VR and Multi-User, where other machines may crash when one starts VR Mode. This was happening because success of GetTransformAndForwardVector was not being checked, hence uninitialized location values were being sent in the Multi-User/Concert event to the other clients, and eventually cause NaN values in the bounds of laser spline mesh components of the VR presence actor.

  • Crash Fix: Fixed a crash when hot reloading level in -game by correctly resolving the world package.

  • Crash Fix: Fixed a possible crash where frame rate is bad in timecode synchronizer.

  • Crash Fix: MoviePipeline now skips null shots in the Executor Job to avoid crashing when trying to check if they match our target shot.

  • Crash Fix: Fixed an nDisplay crash that occurred when it was launched in windowed mode with a window size larger than the main display size.

  • Crash Fix: Fixed a crash that was preventing sequences to be saved at nDisplay cluster nodes via StartRecording/StopRecording Blueprint commands.

  • Crash Fix: Fixed a crash on nDisplay when adding VR Scouting Actors.

  • Crash Fix: Fixed some nDisplay crashes while working with Multi-User:

    • Crash on LoadLevel

    • Crash on root actor manipulations

  • Crash Fix: Fixed a crash when cluster events are sent to the second PIE session.

  • Crash Fix: Fixed a crash when nDisplay was used with instanced stereo enabled.

  • Crash Fix: Fixed an nDisplay crash when camera component was missing at Pawn in the in-camera VFX workflow.

  • Crash Fix: Fixed an editor crash when an nDisplay cluster event is emitted in PIE.

  • Crash Fix: Fixed various nDisplay crashes that were happening when Multi-User was used.

  • Bug Fix: Fixed a gamma issue in VPFullScreenUserWidget - PostProcess mode (UMG was rendered too dark).

  • Bug Fix: Fixed a missed frame warning that was missing when using genlock from the ref pin.

  • Bug Fix: Fixed a bug to prevent sending negative color values to OpenColorIO transforms.

  • Bug Fix: Fixed a jitter and periodic glitch for nDisplay when requesting screen percentage below 0.5. TAA Upsampling were only working well up to 2x, so if larger ratios are requested it now clamps the primary screen percentage to 0.5 and the secondary screen percentage does the remaining upscaling.

  • Bug Fix: Fixed three of functions in LiveLinkBlueprintLibrary to be static so that they are accessible from Blueprints.

  • Bug Fix: Teleport to bookmark now takes headset offset into account.

  • Bug Fix: Fixed a bug for Multi-GPU in DoCrossGPUTransfers, where it was using view rects without their offsets within the render target.

  • Bug Fix: CCRs: Made sure that Color Correct Regions appear during the search.

  • Bug Fix: AJA has improved format detection to include HDMI, and suggest progressive/interlaced based on request. Also fixed the sync rate calculation based on PsF. Tested using KONA 5, using PsF, interlaced and progressive inputs, with and without WaitForFrame flag, which currently has no effect.

  • Bug Fix: Fixed an issue with CCRs not getting Scene Textures for post processing.

  • Bug Fix: Fixed nDisplay's multi viewports functionality for DX12.

  • Bug Fix: Provided a fix for KONA 5/IO4k sub 30fps 4k issues.

  • Bug Fix: Fixed 3D audio in VR mode, where it was not taking the HMD rotation into account when setting the transform of the audio listener.

  • Bug Fix: Fixed incorrect settings in the RemoteSessionFrameBufferChannel.

  • Bug Fix: : Fixed a missing CloseProc in Switchboard.

  • Bug Fix: Composure preview window will now Suspend when in Simulate.

  • Bug Fix: Fixed the AppleProRes Media Encoder in MoviePipeline using a removed variable.

  • Bug Fix: Fixed queues in MoviePipeline that were losing their ShotInfo when the editor was restarted.

  • Bug Fix: Snapping functionality now automatically turns off when going into VR with the VR scouting plugin enabled, then turns back on when exiting VR. This avoids an issue of not being able to grab items.

  • Bug Fix: Delayed start (and device enumeration) in LiveLinkXR to OnEndFrame so that UpdatePoses can happen beforehand. Without this workaround, default LiveLink presets using LiveLinkXR would not work because it enumerates the devices before the first call to FSteamVRHMD::UpdatePoses() happens (since default presets are set in OnFEngineLoopInitComplete), and without a valid pose the tracker is not enumerated.

  • Bug Fix: Add missing UpdateResidency() calls in ConditionalCompactAccelerationStructure().

  • Bug Fix: Allow AppleARKit and AppleARKitFaceSupport plugins to package in Win64 (in addition to iOS). Without this, users are not able to stream from Live Link Face app into a packaged game in Windows.

  • Bug Fix: Fixed 3D audio in VR mode, where it wasn't taking the HMD rotation into account when setting the transform of the audio listener.

  • Bug Fix: TDM: Genlock status is now set to Synchronizing when the genlock signal is not valid in AJA card.

  • Bug Fix: Fixed zombie UE instances in Switchboard:

    • List of running programs can now detect multiple instances of the same program running on the listener, and so can send the command to kill them and avoid zombies.

    • Resolved cstat_project exception. The issue was that multiple instances of the cstat_project command were being issued, but only the last ID was remembered in the program_name to program_id dict.

    • Improved socket management and disconnect detection.

  • Bug Fix: Removed the dependency of VPCCR on D3D12 RHI because it was breaking compilations on platforms that do not support it.

  • Bug Fix: Fixed a Switchboard bug related to Monitor UI not populating when there are no initial devices. Can now take nDisplay config paths with double quotes. Also ensured config save flag is restored even when exceptions happen.

  • Bug Fix: Allows the Remote Control API to be used in shipping.

  • Bug Fix: Apply Multicast TimeToLive (TTL) to the Unicast socket, which is the one used to send the multicast packets. This does not affect unicast TTL.

  • Bug Fix: nDisplay now avoids a crash in Root Actor PostLoad when there is no World yet. PostLoad is being called without a World, and InitalizeRootActor was crashing. It now checks for the World and returns immediately without initializing. Since PostLoad is being called later when there is a World, initialization is performed then. This was happening in one of the test projects when nDisplay is in a sublevel, even with Always Loaded checked.

  • Bug Fix: Fixed PFM preview Blueprints.

  • Bug Fix: Color Correct Regions were fixed to handle an issue due to the fact that lower Scalability settings for the rendering pipeline were dropping the Alpha channel completely. Therefore, sampling Scene Texture for the Alpha channel was returning 0. Since we are pre-multiplying the output color by alpha, it was giving black color in a region area as a result. Since there was no Alpha channel in Scene texture or in color-correct region render-target texture, the blending pass was producing a black box.

  • Bug Fix: Moved LiveLinkXRSourceFactory out of LiveLinkXREditor so it would work in Runtime.

  • Bug Fix: Fixed high CPU usage due to spinning reading a pipe.

  • Bug Fix: Applied Multicast TimeToLive (TTL) to the Unicast socket, which is the one used to send the multicast packets. This does not affect Unicast TTL.

  • Bug Fix: Fixed rgb-to-yuv conversion shaders for mediacapture (mostly apparent in 720p).

  • Bug Fix: MoviePipeline has a fixed scenario where if one camera cut section in a moviescene was disabled, all subsequent camera cuts in that shot would get disabled.

  • Bug Fix: CCR: Fixed the issue related to how subsurface objects and other types of Materials are propagated further down the post processing pipeline, and processed by CCR incorrectly. In High Effects settings, scene color stored in RGBA texture and shaders can sample alpha correctly. In Lower Effects settings Shaders have to sample a special GBuffer texture containing opacity. Since these materials are processed properly much later in pipeline, Opacity looks more like a stencil than anything.

  • Bug Fix: Fixed a LiveLinkXR bug where OnEndFrame could call a destroyed object.

  • Bug Fix: Vcam was updated to prevent users from recording with a slate that has a space in it.

  • Bug Fix: Fix for VR Scouting ensured that Gaffer Light Level is propagated to Multi-User Clients.

  • Bug Fix: For Vcam, the following have been fixed: map indicators, screenshot info, stats readers, and focus/interact panel bugs.

  • Bug Fix: Fixed the GetAttributeNode pins.

  • Bug Fix: Fixed VProd Measure Tool not updating motion controller texture in context menu on construct.

  • Bug Fix: For Vcam, it now properly views clips recorded from the currently open LevelSequence.

  • Bug Fix: VR Scouting bookmarks are now spawned in the direction of the controller.

  • Bug Fix: Fixed a KONA HDMI RGB input issue.

  • Bug Fix: Fixed an issue where the Stop PIE button was not available after any error during nDisplay initialization.

  • Bug Fix: Updated protocols unit tests.

  • Bug Fix: Fixed the treads and sockets issue for sACN:

    • Removed the thread for each universe.

    • The socket now opens only when the universe is using it.

    • Sockets are cleaned if there are no listeners.

    • The sACN thread listener has been removed.

    • It is now using a gameplay tick for listening changes on the sockets.

  • Bug Fix: Fixed a custom origin component set for PICP and PICP-MPCDI projection policies.

  • Bug Fix: Fixed byte swapping for sACN.

  • Bug Fix: Implemented a fix for VR scouting tools that would not work after closing the VR menu if Undo/Redo was pressed.

  • Bug Fix: The Gaffer Actor is now transacted when modified via the Gaffer tool in VR Scouting

  • Bug Fix: Fixed an issue where nDisplay root actor could not be found if it was located in a sub-level.

  • Bug Fix: The sACN Universe not ticking when slate UI not in focus has been fixed. It now gets replace with core delegate. It blocks the ticking in ThrottleManager

  • Bug Fix: In VR Scouting, the Second Controller was unusable with First Controller submenu. This has been fixed.

  • Bug Fix: Fixed replication of all nDisplay internal real numbers to prevent precision loss.

  • Bug Fix: Switchboard had issues fixed relating to Settings:

    • Plugin Settings now properly clear between config loads and do not contaminate each other.

    • Fixed issues where instance settings variables were sometimes being used instead of class settings variables.

    • All settings are now in collections instead of independent attributes, simplifying parts of the code.

    • Cleaned the settings code, clearly separating plugin from instance-only settings.

    • Removed redundant cascade of resaving of settings every time a setting changes while the Settings Dialog is open.

    • Config paths now accept double quotes (as returned by Windows "Copy As Path").

  • Bug Fix: Switchboard has an improved project build command. Previously, it was not building the project cpp modules.

  • Bug Fix: An issue with Switchboard has been fixed where it was not able to build a non-Perforce project due to a hidden button. This also handles an error message from Perforce cstat instead of showing only the last word in the message.

  • Bug Fix: Fixed a bug in Switchboard where each listener_client could use up to 100% of a core.

  • Bug Fix: In Switchboard, fixed zombie PresentMon:

    • The Flip monitors are now being killed explicitly, not relying on their functionality to terminate when their watched process terminates.

    • Killing processes now send a close signal and allow 2 seconds for the process to close before forcing the termination, giving it an opportunity for proper cleanup.

    • To keep listener responsiveness given the new 2 second timeout, killing processes is now an async task.

  • Bug Fix: Switchboard was not updating the launch button when launch failed. This has been fixed.

  • Bug Fix: Switchboard miscellaneous fixes:

    • Added a CONCERTRETRYAUTOCONNECTONERROR command line option when launching MU.

    • Improved handling of cstat response.

    • Renamed the Workspace Name field to clarify that it is a name and not a path.

    • Fixed device removal notifications, where you can choose whether or not to update the config or not.

    • Added NoVerifyGC as a fixed option when launching nDisplay render nodes.

  • Bug Fix: Switchboard can now distinguish between multiple instances of Unreal opened by the same listener upon reconnection, by matching a caller field with the device.

    • Fixed mishandling of a program start failed delegate.

    • Parses the fullscreen parameter in nDisplay config file and uses it to properly construct the launching command line.

    • Added noxrstereo to nDisplay launch command to avoid conflicts with VR devices (such as Vive Tracker).

    • Added a way to specify ExecCmds.

    • Added DisableAllScreenMessages when launching the nodes to avoid sync issues due to notifications.

    • Re-parses config file before launch to update parameters that are exclusively controlled by it. Otherwise you could, for example, change screen resolution and it would not be updated unless the config file is re-added, losing all overrides and customizations of the nDisplay set of devices.

    • Added a way for Device instance settings to opt out from getting a UI in the Settings Dialog—for example, when these settings are controlled by the config file and not manually by the user.

    • Last column in nDisplay Monitor does not stretch anymore. It is more pleasing this way.

  • New: Switchboard now handles full screen nDisplay window configuration when launching the render nodes.

  • New: For Switchboard:

    • Added support for Maps to nDisplay launches.

    • Added a Default Map option to avoid forcing the map in the command line and instead use project defaults.

    • Moved map setting to configuration, since this is a per-project setting.

    • Map list now updates when map path is changed.

  • New: For Switchboard:

    • Added overrides for cmd line and execcmds for nDisplay nodes.

    • Separated cmd line and execcmds between "unreal" and "ndisplay" devices.

  • New: Miscellaneous improvements for Switchboard:

    • Added -forceres to the nDisplay launch command line when in windowed mode.

  • New: Switchboard can now choose which commands are echoed in the output log of the listener. This is meant to avoid a spam of periodic messages.

  • New: For Switchboard:

    • Added device icons.

    • Improved handling of missing icons.

    • Renamed a specific mobile device to LiveLinkFace.

  • New: Switchboard status now includes the NVIDIA driver version.

  • New: Switchboard now has a taskbar monitoring autohide flag. Also removed one of the build flags that could prevent engine rebuild.

  • New: Switchboard now injects class overrides to avoid needing WindowsEngine.ini in Perforce. It also includes the bUseBorderlessWindow option in DefaultGame.ini.

  • New: Switchboard: Added the ability to read and report NVIDIA Sync Status and the Flip Mode of a process started by Switchboard (i.e. UE) Listener:

    • The task is performed asynchronously.

    • Added a mechanism to run tasks asynchronously based on Async and TFuture.

    • Fixed a bug related to the listener's main loop fps.

    • Added a mechanism to identify equivalent requested tasks so that they can be optionally rejected.

    • Used said mechanism so that repeated get sync status requests can be safely rejected if an equivalent task is already in progress.

    • Python App:

      • Added a mechanism for plugins to add their own UIs into the main window, namely the main toolbar and new plugin tab manager.

      • Using this mechanism, added a custom tab to monitor nDisplay nodes.

      • Added an nDisplay Monitor class to query and parse the new get sync status command and populate the model used by the tableview in the custom tab.

  • New: Switchboard now has detection of compatibility flags in UE4Editor executable. In particular, the Disable Fullscreen Optimization flag is of interest because it can cause tearing in LED walls. Also fixed the missing if PLATFORM_WINDOWS.

  • New: Switchboard Listener now reports its state, namely its running processes, to the Switchboard app upon connection. This is particularly useful when the Switchboard app gets restarted and needs to reconnect.

  • New: VCamCore is a new framework for creating, customizing, and using virtual cameras in Unreal Engine. It can be used in Editor, Play In Editor (PIE), and standalone game modes. It is fully customizable and does not require any special game modes, controllers, or maps. To create a Virtual Camera, add a CineCameraActor to your scene and attach a VCamComponent to it. Add various Modifiers and Output Providers to customize, and for added flexibility, the Composure compositing system can also be integrated.

  • New: Updated the Aja TimecodeProvider and internal library to support reading from a dedicated LTC pin.

  • New: Added a new type of asset—Remote Control Preset—that makes it possible to expose object properties and functions to remote control. It also allows grouping properties from different objects under a single panel.

  • New: For TextureShare, a plugin was added that can be used to share textures and buffers between Unreal Engine and third-party applications.

  • New: Added a LiveLink subject rebroadcast option to rebroadcast any LiveLink subject over a separate LiveLink provider. This allows the subject to be shared with other editors receiving the LiveLink data.

  • New: Added a Composure output option to VPFullScreenUserWidget that allows the widget to render the UMG into a separate render target instead of directly to a viewport. This is intended to primarily be used with the Composure system for compositing UMG layers with other layers.

  • New: For beam rendering:

    • Added more samples for high quality

    • Changed "set initial state" behavior to use defaults and "snap" first DMX packets

    • Tweaked zoom (beam and light)

    • Added support for "Intensity Scale" in PIE

    • Fixed warning from dynamic materials when packaging matrix fixture

    • Tweaked beam culling

    • All lights fixtures are now moveable by default

    • Updated pan/tilt rotation range based on MF feedback

  • New: Added Blueprint and C++ accessors for various parts of the Composure pipeline. Also added a sample Editor Utility Widget Blueprint in the VirtualProduction/VCamCore plugin that uses the new functionality to setup a simple "A over B" composure stack with a single click.

  • New: Sample Blueprints and Assets for VCamCore are now available.

  • New: A new engine plugin is now available under VirtualProduction/LiveLinkXR. This plugin allows you to track any SteamVR-compatible devices and send the transform data out over LiveLink. Supports HMDs, controllers, Vive Trackers, and any other trackable device.

  • New: Removed the timecode frame rate requirement from a Live Link subject.

  • New: Added a smooth-latest mode to the timecode evaluation for Live Link subjects.

  • New: Updated Live Link to support loop playback by using received order dropouts. Also added verbose logs to help debug live streams.

  • New: Added a new StageMonitoring plugin to manage stage machine logging and monitoring.

  • New: Updated the clock offset estimation to be continuous so as to have a more accurate difference on each Live Link sample. That way, EngineTime evaluation mode can be seen as a smooth latest mode.

  • New: Added settings to RemoteControl plugin to auto start web servers on boot.

  • New: The Virtual Camera has been implemented, and GameMode/PlayerController has been deprecated. Please use the new SimpleVirtualCamera and VirtualCamera2 Classes.

  • New: For Concert: A command line option, -CONCERTISHEADLESS, was added to disable notification windows as these windows can interfere with nDisplay sync.

  • New: Added functionality to VPFullScreenUserWidget to optionally specify a viewport instead of always assuming currently selected viewport.

  • New: For nDisplay: Config paths with spaces are now supported. This requires a small change in the command line, where you need a '-' prefix, such as -dc_cfg="path\with spaces\config.cfg" iInstead of: dc_cfg="path\nospaces\config.cfg" If it cannot parse the new form, it will try the old one, so that old custom launchers can still work. The same thing was done with -dc_node and -dc_gpu for consistency.

  • New: Composure can now be included in packaged game builds.

  • New: PresentMon binary and associated license file was added to Switchboard.

  • New: : Added to Switchboard support for the new JSON-based nDisplay config file format.

  • New: LiveLink: Added a flag to disable the LiveLinkComponentController when inside a Sequencer spawnable. This avoids LiveLink interfering with Sequencer when playing back spawnables. Also added a way to explicitly pause the controller from evaluating LiveLink.

  • New: On Cine Camera, there is a change to depth-of-field method from None to Do Not Override to describe what it is actually doing, as it is not overriding post process settings. Also added a new method of Disable, which disables depth of field entirely by overriding post process settings.

  • New: Added native delegates to the OSC server to pass address and port to callbacks.

  • New: ComposureWizard is an example Editor Utility Widget for use with VCamCore that shows how to create a simple composure stack and hook it up to a virtual camera automatically using Blueprints. Starting from an empty map, you can click a couple of buttons and instantly connect via the UnrealRemote 2 app from iOS.

  • New: In OCIO BP wrappers of the Scene View Extensions were added that can be assigned OCIO config and associated with a rendering context.

  • New: Added support for fractional timecode to ARKit face protocol.

  • New: Added WebSocket support to the Web Remote Control API.

  • New: MoviePipeline EXRs now write multiple render passes to a single EXR file instead of separate EXR files.

  • New: MoviePipeline now has metadata support for multi-layered EXR files. Implementation adds metadata for: Camera Focal Length, Focal Distance, FStop, Sensor Height/Width, camera position/rotation, previous camera position/rotation, frame rate, level sequence name, level name, and job date/time (UTC). Additional metadata can be added by implementing additional setting classes.

  • New: In MoviePipeline, added a {version} format string which can be either specifically versioned or can auto-detect the version number. Auto detection looks for the first {version} tag in the output directory, then searches all sibling files and folders for version tags before picking the highest one and incrementing that by one.

  • New: MoviePipeline has refactored the UMoviePipelineDeferredPassBase into a more common base class to allow additional rendering passes.

  • New: TDM has an added way to detect if the Genlock signal is present.

  • New: Added a command line option to tell XRSystem to not override GEngine->StereoRenderingDevice. This is useful when XR-tracking features are desired, but GEngine->StereoRenderingDevice should be implemented by a different system (such as nDisplay). In the absence of this cmd line parameter, everything works as usual.

  • New: Movie Pipeline has initial refactoring to simplify the setup of custom render passes.

  • New: In MoviePipeline, Path Tracer and select other Viewport Lit modes are now supported as output passes for the render pipeline.

  • New: Added Static and Unicast Endpoint configuration to MotionBuilder LiveLink plugin.

  • New: Added support for fractional timecodes to ARKit face protocol.

  • New: UDP Messaging: Fixed UDP Messaging static endpoints that were not properly sent to when the unicast endpoint was forced to a specific interface. Modified the Multi-User Server launching to bind a different port on the unicast endpoint port of the editor. This is set when it transfers its settings to it. Updated the UDP messaging settings tooltip as well as a multi-user launch server button. Now exposes Server Port settings for the Multi-User server unicast endpoint over the passed UDP messaging settings when booting the server from the Editor.

  • New: Exposed settings of UDP Messaging module

  • New: Switchboard has an added -ConcertIsHeadless command line option when launching nodes to avoid notification windows from interfering with nDisplay sync. Also disabled nDisplay logs that were on by default.

  • New: MoviePipeline now has the ability for passes to override show flags based on user settings such as disabling Depth of Field or Motion Blur.

  • New: Letterboxing support was added to Movie Render Queue.

  • New: In MoviePipeline, the separation between Engine Pass and Render Pass was removed. The abstraction layer was providing no benefits in practice, and complicating implementation of additional passes.

  • New: Timecode has converted the BlackMagic Timecode Provider and Custom Timesteps to genlocked versions. This allows the Blackmagic timecode to use genlock to count.

  • New: OCIO viewport display look now has a hook in the viewport View menu to configure a display look. Also added an OCIO display view extension to apply color conversion to viewport being rendered.

  • New: Timecode has an improved robustness for the LinearTimecodeDecoder, in particular, for AudioCaptureTimecodeProvider:

    • Checks for a pattern at end and beginning.

    • Checks for valid timecode value ranges.

    • Checks for valid bit time durations when provided. Also converted to GenlockedTimecodeProvider since LTC is typically genlocked to a master clock or video signal.

  • New: Timed Data Monitor now supports multi-format and timecode counts from Genlock Sync if the timecode provider allows it. Added an abstract class GenlockedTimecodeProvider and GenlockedCustomTimeStep to support this functionality. Added a function that more explicitly fetches the timecode, and can be used to encapsulate certain behavior (like checking genlock). The getters are now meant to not fetch from HW and instead return a cached value—this should not affect existing timecode providers. Also, AJA now defaults to trying to enable multiformat.

  • New: Added a MediaUtils.StartupProfile CVar that can be used to load the specified Media Profile at startup. Because this is usually a hardware-dependent setting (such as per PC), this allows the user to specify it in the -SystemSettings section when launching the project. An example would be in DefaultEngine.ini: [SystemSettingsNode0] MediaUtils.StartupProfile=/Game/MP_Test.MP_Test. You would pass -SystemSettings=SystemSettingsNode0 in the command line.

  • New: Added a Switchboard application that provides a way to control remote machines on a Virtual Production set. It can be used to sync and build Unreal projects on those machines, as well as launch nDisplay nodes.

  • To make launching Switchboard easier, an editor plugin named Switchboard was also added. This plugin can be used to:

    • install Switchboard's dependencies on first launch

    • launch Switchboard

    • launch the Switchboard listener

    • (un)install the Switchboard listener for windows autostart

  • It also adds several project settings that can be used to change how Switchboard and its listener are started. This then offers the opportunity to use a different Python interpreter than the one installed by default.

  • A UE4 program named SwitchboardListener was added to communicate with remote clients. It relays various information and commands between Switchboard and the remote machine. It is meant to be started on the remote host that the user wants to control via Switchboard. The SwitchboardListener can:

    • Start arbitrary applications and track their process

    • (Soft) kill previously started applications and send back their output

    • Send and receive arbitrary files

    • Report GPU sync state

  • New: Updates DXM fixtures assets.

  • New: Implemented a node for casting a fixture patch to a specified fixture type.

  • New: Added a new plugin that allows an exchange of any textures between UE4 and third-party applications; sample projects are provided as well. Also added integrated textures exchange functionality into nDisplay, and multi-GPU render support for nDisplay viewports.

  • New: Initial implementation of nDisplay configuration in-editor preview has been added. This is an early preview, limited by simple and MPCDI projection policies only. It will be finished in the next release.

  • New: Two new fixture types have been added: The first adds key inputs for Delete, Duplicate, Copy, and Paste for Functions and Modes The second adds attribute names next to the function name.

  • New: Users can now upload or download their created fixtures into the GDTF database as GDTF files.

  • New: The in-camera VFX workflow now supports Multi-User editing functionality. Modifying IncameraSettings and IncameraStageSettings no longer crashes the nDisplay cluster.

  • New: A new nDisplay projection policy was added to allow utilization of VIOSO SDK for multi-display setups (DX11, DX12).

  • New: A texture preview interface for Output Graph in "DisplayClusterConfigurator" has been implemented.

  • New: RemoteControlWebInterface provides a web control interface to remote control UE preset.

  • New: nDisplayListener properly sets a working directory for every nDisplay UE4 instance on launch.

  • New: nDisplay now syncs objects that are replicated on TG_PostPhysics tick group.

  • New: GameVice is now integrated with panning and teleport to home for Vcam.

  • New: Duplicated entities (when using Ctrl+W or the Context Menu command) are now added immediately after their original counterparts.

  • New: Vcam VirtualJoystick has been integrated with flight mode animations.

  • New: A master node of a preview config is used automatically by default for nDisplay PIE sessions.

  • New: Added a mode dropdown with the options Multicast, Broadcast, and Unicast.

  • New: Integration of modifier delegates into VCam2UI has been added.

  • New: Switchboard added a -MaxGPUCount setting to support mGPU.

  • New: Added a RenderSync log category to the nDisplayLauncher Log tab and nDisplay core synchronization logic.

  • New: In Switchboard, build progress for each device is now shown:

    • Sync progress also has an indication of progress in the form of stdout line count.

    • Build step is in the tooltip for build percentage.

    • Any program start request from Switchboard can now include a flag to get stdout updates as they happen.

    • Fixed an issue with keep alive while building.

    • Replaced TAtomic with std::atomic due to deprecation warning in source.

    • Fixed an issue when building a path to VPRoles.ini file where double quotes were incorrectly included.

    • Fixed getting the CL for the project instead of the Engine.

  • New: Added support for making Virtual Subjects in Blueprint. Blueprint Virtual Subjects can be created through the Create Advanced Asset dialog under Live Link > Blueprint Virtual Subject.

  • New: Replaced VRPN analog data serialization to text hex format to avoid precision loss.

  • New: In Switchboard, missing command line options for Stage Monitor to work properly with nDisplay have been added: VPRole, StageFriendlyName, and SessionId. It also now has an improved handling of writing strings on int fields in the settings dialog.

  • New: Updated focal length and aperture slider value labels now support GameVice integration.

  • New: Vcam has added MotionAdjustment stabilization delegates.

  • New: You can now use the nDisplay root node as an origin for a simple projection screen when its parent is missing in a config file.

  • New: Two-finger pinch-to-zoom and panning now implemented into VCam Map.

  • Deprecated: The OnProtocolReceived event has a deprecated.

XR

  • Crash Fix: Fixed a crash in Magic Leap when launching project via editor with -game and ZI is enabled and running.

  • Crash Fix: Fixed a crash in the Unreal test framework for HoloLens 2.

  • Crash Fix: Fixed a Vulkan editor crash on dual GPU machines. The lifetime of the strings given to UE via ml_remote.h were maintained by the VkExtensionProperties object sent to UE instead of providing a string view. When a second GPU queried GetVulkanDeviceExtensionsRequired, the original strings were cleared. The first GPU would then receive garbage data when acting upon the char*s it was given. This change allows dual GPU systems to launch the editor with ZI enabled.

  • Crash Fix: VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT support was added for pipeline stage and access mask. This fixes a potential crash on Quest/Quest2 with Vulkan.

  • Crash Fix: Added new texture aliasing APIs for OpenGL. The missing implementation was causing an assertion failure and crash when initializing mobile VR devices using OpenGL.

  • Crash Fix: Fixed an OpenXR crash when entering VR Preview a second time.

  • Crash Fix: Fixed a potential crash caused by null pointer access when cooking ARCore candidate images.

  • Bug Fix: Fixed an HMD-tracked query so it will ignore extra PIE worlds. This fixes problems with local multiplayer PIE and VR. The first player's camera will be VR. Others will not.

  • Bug Fix: Fixed a hologram jitter when not using multiview.

  • Bug Fix: Cleared MRMesh blocks when the world scale is changed.

  • Bug Fix: The USE_LOGGING_IN_SHIPPING macro now works as expected on Lumin.

  • Bug Fix: For HoloLens Remoting, addressed an issue where the first VR Preview against a remoting connection would only show a still image of the scene.

  • Bug Fix: Fixed a critical performance issue—CustomPresent now returns a correct value for the WMR plugin when presenting natively on a device.

  • Bug Fix: HoloLens: Visual Studio 2019 + new forwarders for the interop; updated Nuget libraries - including fix of remoting from game.

  • Bug Fix: Start/Stop QRCode detection from HoloLensARFunctionLibrary now works. Previously, QR would always start, with an unexpected webcam permission dialog at startup.

  • Bug Fix: GetTrackingQuality bugs fixed, and implemented TrackingQualityReason.

  • Bug Fix: Various fixes made for choppy audio, no audio, or random noise when the Magic Leap device went into or came back from standby mode.

  • Bug Fix: Fixed to use single speech recognition when remoting on HoloLens.

  • Bug Fix: HoloLens now uses correct cleanup of MeshUpdateObserver.

  • Bug Fix: The HoloLens third cam is now allocated for the HoloLens device only.

  • Bug Fix: Fixed a bug where apps did not launch on HoloLens devices that were not using developer mode.

  • Bug Fix: Magic Leap no longer exits early if another HMD hijacks the Vulkan initialization. This caused extensions required by MLRemote to never be queried.

  • Bug Fix: Added a debug for HoloLens x64 APEX binaries for use with debug CRT.

  • Bug Fix: HoloLens now explicitly uses only x64 remoting dependency binaries for x64 builds.

  • Bug Fix: Modified Avatar SDK mesh/bone conversion to align with FBX imported files and other SDKs.

  • Bug Fix: Added the functionality required for the Oculus Keyboard Overlay to work.

  • Bug Fix: Fixed the screenshot code to ensure that it grabs a screenshot from the correct window. Previously, it would just try to screenshot the first window to update after F9 was pressed, which, in preview, could have been any editor UI window.

  • Bug Fix: Oculus now ignores the app command APP_CMD_PAUSE if it occurs before APP_CMD_INIT_WINDOW.

  • Bug Fix: Fixed an issue where PokeAHole material was not loading on Android successfully.

  • Bug Fix: Oculus support added for device color specifications and hand tracking.

  • Bug Fix: Fixed the preview window clipping error that was introduced by a fix to backbuffer scaling/window resize handling in Slate. The preferred window size is now used in the UpdateFullscreenState call in the stereo rendering mode.

  • Bug Fix: Fixed an assert on Quest with HISM and mobile multi-view.

  • Bug Fix: Changed to RGBA format to avoid a Universal Bandwidth Compression (UBWC) bug with BGRA formats on mobile stereo devices (which fixes a potentially serious performance regression on these devices).

  • Bug Fix: Because the Microsoft Store requires a unique version number for each update for easier tracking, an auto increment project version has been added for each build. You can opt in to this feature in the HoloLens project settings under Packaging/Auto Increment Version.

  • Bug Fix: Fixed the FRHICustomPresent override where it gave an incorrect return value that caused a critical performance issue on the HoloLens 2 native.

  • Bug Fix: Updated the default minimum Win10 SDK for HoloLens packaging to correct an issue where the SDK < 17763 would fail to package if one of these SDKs were installed (for example, < 16299) on the build machine.

  • Bug Fix: Fixed issues in AugmentedReality implementation for MagicLeap:

    • Reset the worker thread setup for image tracking so it restarts on consecutive VRPreviews.

    • Handled UpdateTrackedGeometry in LuminARTrackedPointResource::UpdateGeometryData so that it would update even if there was not a valid position and orientation to update to. This would sometimes happen after a level transition, and if UpdateTrackedGeometry was not used, the Point might not have a valid ARSystem pointer, which could crash if certain Blueprint functions (GetLocalToWorldTransform, for example) were called at that time.

    • Removed GetTrackableHandleMap from the ARTrackingSystem interface. Instead, a new function, RemoveHandleIf, is now used to set the StoppedTracking state and remove the handle. RemoveHandleIf now takes in a higher-order function that is applied to every stored handle if the geometry type matches. When the applied function returns true, the tracked handle stops tracking and is removed internally. Users of the tracking system can perform additional removal behavior as they see fit via the input function.

  • Bug Fix: Fixed a memory overwrite issue in ARCore.

  • Bug Fix: Corrected volumetric particles that were drawn twice in left eye with instanced stereo.

  • Bug Fix: Fixed a bug where the fragment density map in Vulkan (if you use Vulkan Foveation) is added in the renderpass, but not in the renderpass attached to the graphics pipeline.

  • Bug Fix: The HoloLens world mesh has been fixed to prevent bricks from vanishing and reappearing. The bricks were actually being moved around whenever an update came through that did not change the mesh.

  • Bug Fix: Added an Android Dynamic RHI string for OpenXR render bridge.

  • Bug Fix: This fix forces the backbuffer to 1x1 for standalone VR mobile devices to save memory.

  • Bug Fix: Fixed a black screen issue if using the Mobile Preview when Mobile Multi-View is enabled.

  • Bug Fix: Fixed OpenXR occlusion masks and enabled them on supported runtimes.

  • Bug Fix: Improved frame pipelining in the OpenXR plugin to eliminate hitches.

  • Bug Fix: Headsets going into idle in the OpenXR plugin are now properly handled.

  • Bug Fix: There is now support for Texture2D Arrays with multi-view and MSAA.

  • Bug Fix: Fixed an assertion with certain materials on Magic Leap.

  • Bug Fix: Packaging fix for HoloLens was implemented to make sure to save the manifests for each architecture with unique names so they don't get overwritten. This fixes packaging issues when building from binary engine releases, where the build produces a manifest for the plugin for ARM64, which then would get overwritten by the manifest for x64. This, in turn, would cause another error during packaging, where the plugin was referencing a manifest for the wrong architecture.

  • Bug Fix: Added a delegate to allow external code to get notified when the brick data in UMRMeshComponent is updated. This fixed the problem that there's no easy way to expose the vertex data from UMRMeshComponent in a CPU readable format.

  • Bug Fix: HoloLens now has both x64 and Arm64 targets available.

  • Bug Fix: Fixed a bug where the ARCore camera feed was vertically inverted when mobile HDR was disabled.

  • Bug Fix: Enabled occlusion rendering for ARCore.

  • Bug Fix: Fixed the ARCore/ARKit camera passthrough material. MOBILE_STENCIL_COMPARE_FUNCTION was introduced in the shader code without a sensible default value. Its value was only set by FPostProcessMaterialPS but there were other native codes that also used the same shader code (FGoogleARCoreCameraOverlayPS, TARKitCameraOverlayPS). Now the default value for MOBILE_STENCIL_COMPARE_FUNCTION is set to MOBILE_STENCIL_COMPARE_NEVER, making it backward compatible.

  • Bug Fix: Fixed UARBlueprintLibrary::IsARSupported so that it returns a meaningful value.

  • Bug Fix: HoloLens and Windows Mixed Reality support for Windows Server 2019.

  • Bug Fix: Workaround fix for MRMesh flickering on Vulkan desktop renderer. To fix this, at least for now, enable mesh occlusion when the MRMesh is connected to the MagicLeapTrackerComponent. Since this happens after the MRMeshProxy is created, modify SetEnableMeshOcclusion so that it updates the proxy's value as well.

  • Bug Fix: The MagicLeap ImageTracking now works on consecutive VRPreview launches, and Light estimation works when ARSession is restarted on the device.

  • Bug Fix: No longer attempts to update the depth texture unless scene depth is enabled for ARCore.

  • Bug Fix: Fixed AR overlay occlusion rendering. All the AR passthrough material has POST_PROCESS_MATERIAL defined, but they're actually rendered at the end of the base pass. Since we cannot access SceneColor.A during the base pass, this change added an additional check against POST_PROCESS_AR_PASSTHROUGH when trying to access it.

  • Bug Fix: Add x64 architecture for HoloLens to fix packaging.

  • Bug Fix: No longer renders the depth target to MLGraphics in Zero Iteration. Only reallocate depth target if requested size matches the expected one. This workaround is required because this depth allocation function can receive requests for targets other than the one for eye stereo render (like when using a SceneCaptureComponent).

  • Bug Fix: Fixed a bug where the AR component visualization did not work when the ARActor was spawned locally on the client in a networked session. It is not necessary to set ARActor's owner to the player controller to get its RPC and replication working. In fact, setting the owner as the player controller confuses the networking logic when ARActor is spawned locally on the client. In particular, ServerUpdatePayload_Implementation is no longer triggered on the authoritative client, which breaks the callstack used for triggering visualization update.

  • Bug Fix: Call TriggerOnTrackableAddedDelegates until the AR component is first updated. This ensures that the UMRMeshComponent is created when the user code is triggered by the delegate.

  • Bug Fix: Changed ARKit to use the material-based method for camera image color space conversion and rendering. The material-based code path is enabled by MATERIAL_CAMERAIMAGE_CONVERSION=1 in the Build.cs file. The CIContext based method can still be enabled with MATERIAL_CAMERAIMAGE_CONVERSION=0, but it is mostly kept for testing purposes.

  • Bug Fix: Fixed a Vulkan validation layer error for missed layout transition on Magic Leap.

  • Bug Fix: Converted the ARKit camera texture to the correct rotation:

    • The color space conversion code now also takes the device rotation into account and corrects the output texture rotation automatically. This makes it a lot easier to consume the converted texture in other places of the engine.

    • As a result, you now only need two vertex buffers for rendering the camera overlay, instead of four. The need to rotate the camera image in the Remote Session plugin is also removed.

    • Bonus: fixed a bug in the AppleImageUtils plugin regarding Metal texture image rotation.

  • Bug Fix: Internal GC object is now used to make all the UObject used by FGoogleARCoreDevice GC aware.

  • Bug Fix: Fixed planes not working on consecutive VRPreview runs when using the AugmentedReality interface.

  • Bug Fix: Fixed the compilation on VS2019 without VS2017, and Azure Spatial Anchors on the emulator.

  • Bug Fix: Moved the Azure Spatial Anchors plugin code to a new directory. The Microsoft directory caused build problems for Android, so these plugins moved up into the AR directory. Their names are unchanged.

  • Bug Fix: Azure Spatial Anchors now calls SubmitManifest instead of UpdateManifest.

  • Bug Fix: Issues with OpenXR motion controllers were resolved:

    • If no profiles are bound, aim/grip will bind to the Khronos Simple Controller profile.

    • The SimpleController OpenXRExtensionPlugin replaced by the HandTracking and EyeTracking OpenXR Extension Plugins.

  • New: Azure Spatial Anchor support for ARKit on IOS is now available.

  • New: Azure Spatial Anchor support for ARCore on Android is now available.

  • New: OpenXR Hand Tracking support now available for both motion controller left/right and getting joint transforms via Blueprint.

  • New: Added the spatial anchor ARPins to the OpenXR plugin. This added an interface where an AR anchor implementation can be provided as OpenXRExtensionPlugin. It also makes OpenXRHMD an IARSystemSupport.

  • New: Support was added for selecting between grip and aim poses for controllers in the OpenXR plugin. New motion sources for grip and aim were also added. The default left and right are the same as the grip, with either hand able to use either grip.

  • New: The default OpenXR loader was updated to 1.0.9 to ensure that it works with all prerelease extensions.

  • New: Support was added for querying pose and velocity at time of an action trigger with OpenXR:

    • A custom event can now be bound to receive an OpenXR input action event, along with a timestamp. In the future, the core input system would likely provide a 64-bit timestamp that could be used for this purpose.

    • A HeadMountedDisplayFunctionLibrary function and IMotionController function were also added to get the controller pose and velocity data at a specific time. For some platforms this defaults to a cached value, but when possible it returns more information.

  • New: QR code tracking was added for OpenXR:

    • Interfaces were added for using QR code AR-tracked geometries in OpenXR. This does not add QR support out of the box; Microsoft has a plugin that implements an OpenXR extension, and uses this interface to implement the feature. The user needs that plugin or a similar plugin for the feature to be active.

    • Fixed std:c++17 and other build settings for HoloLens (used in Microsoft's OpenXR plugin).

  • New: Implemented the XR_MSFT_hand_interaction OpenXR extension in a plugin using the Microsoft extension, which allows hand tracking to act like a motion controller, providing grip and aim poses and two gesture-based, button-like inputs, Select and Grip.

  • New: OpenXR now has Eye Tracking support for XR_EXT_eye_gaze_interaction OpenXR extension:

    • This was hooked up for worldscale and trackingtoworldtransform.

    • A few additions to the IOpenXRExtensionPlugin were made to enable extensions that need to set up and consume XrActions.

  • New: OpenXR AR anchor persistence support:

    • Added an interface to IOpenXRExtensionPlugin for ARPin Local Store support.

    • An extension plugin can be created to provide support for storing a pin/anchor to device-supported storage, such as the device or user account.

    • This change does not provide an implementation.

  • New: The HoloLensAR module was moved from the HoloLensAR plugin to the WindowsMixedReality plugin:

    • The module provides AR feature support via Windows Mixed Reality APIs.

    • This removed the dependency of WindowsMixedRealityPlugin on the HoloLensAR plugin, as it was no longer needed.

    • HoloLens Remoting now works with only the WindowsMixedReality plugin enabled. The HoloLensAR plugin is required for HoloLens device packaging with either WindowsMixedReality or OpenXR, but WindowsMixedReality HMDs do not require the HoloLensAR plugin.

    • UE4 code operates mainly at the module level, not the plugin level, so this change is unlikely to require code changes, but it might leave third-party plugins with unnecessary dependencies on the HoloLensAR plugin.

  • New: Adds support for ARTrackedGeometry to OpenXR. This infrastructure supports other OpenXR extension features.

  • New: Support for selecting between grip and aim poses for motion controllers now provides a way to hook up aim and grip to the legacy left EControllerHand so that these motion sources will work even on old content or code.

  • New: Image-tracking integration was refactored to fix a number of issues, and to allow users to select an image target orientation format:

    • FMagicLeapImageTrackerTarget was split into FMagicLeapImageTargetSettings and FMagicLeapImageTargetState.

    • The module/runnable integration was made into an on-request polling API for the image target state and transform. This means that it no longer queries the target state on its own in a tick, but provides a func for someone else to poll (in this case the ImageTrackerComponent). Because of this, the module/runnable also does not fire the target found/lost events. This is now the responsibility of the component itself, so it can manage the sequence of transform updates and delegate broadcasts. This design now fixes the bug where the target found event was fired before the transform of the component was updated.

    • The mutex locks were limited to the minimum possible scope, which fixed some bugs with potential nested mutex lock calls.

    • Some Blueprint function library getters have been marked as BlueprintPure.

    • The MagicLeapAR integration for image tracking was updated in accordance with the rework of the MagicLeapImageTracker module.

    • All image tracker-related code was moved (adding candidate images) into FLuminARImageTracker.

    • Unreliable pose updates in FLuminARImageTracker have been accounted for and corrected.

    • Tracker creation is now delayed until the first candidate image is added when using MagicLeapAR.

    • Fixed a bug in MagicLeapRunnable that caused CompletedTasks to never be reported on non-Lumin platforms. This was causing OnSetImageTarget delegates to never be called, and subsequently, the MagicLeapAR integration to never work for image tracking.

    • The AugmentedReality interface reports orientation for images tracked via ARKit and ARCore with Up (Z) axis as the normal, whereas on Lumin we report the Forward (X) axis as the normal. Added the option for devs to choose which orientation they want their image target transforms to be reported in.

  • New: Content bindings (friendly name and MagicLeapARPin ID combo) are saved and a callback is fired when MagicLeapARPins are found. Save and load game operations are now async in the MagicLeapARPin implementations. Added missing files from previous changelist.

  • New: Added support for ARSession mesh config properties in MagicLeapAR.

  • New: Updated Magic Leap SDK to 0.24.

  • New: Implemented MagicLeapARPin To/From string parsing helpers, which implement how the conversion is expected by the platform.

  • New: Implemented MagicLeapARPin query filters, exposed pin types, fixed actor restoration when using the MagicLeapARPinComponent, and defined functional use cases in the API.

  • New: Added an account for the listen server in MagicLeapSharedWorldGameMode. In a listen server, one of the clients was also the server; that client returned true for IsLocalController(), causing the condition in MagicLeapSharedWorldGameMode::Tick() to fail, which then caused the client to never contribute any PCFs. Since a PlayerController only exists for clients, local or remote, and the GameMode instance only exists on the server, we now do not need to check for anything—authority, role, remote role, or net mode. If it is a PlayerController, we expect PCFs from it.

  • New: Provides the ability to run code analysis on HoloLens builds.

  • New: HoloLens Media Player plugin support is now available.

  • New: Added new privilege types available with Magic Leap SDK 0.24.

  • New: Added a HoloLens Remoting option to listen on a known port for connections.

  • New: Added D3D12 support for HoloLens 2 via OpenXR.

  • New: HoloLens will now only go immersive if bStartInVR is enabled.

  • New: Added a show-and-hide HoloLens system keyboard.

  • New: Added Dynamic Fixed Foveated Rendering on Quest.

  • New: Added Quest 2 support for adding Quest2 device type and manifest generation.

  • New: Updated OVRPlugin to version 1.49.

  • New: Added an interaction profile support to the upcoming HP Reverb G2 controllers for developers who wish to natively target the new button and axis mappings (a,b,x,y buttons/analog grip).

  • New: The Oculus Widget update included disabling mobile shader options to reduce shader permutations, and iteration through ULightComponentBase objects instead of ULightComponent so skylights will also be recommended to be set as static.

  • New: Updated the OVRPlugin to v19 (1.51).

  • New: Upgraded the Oculus plugin to 1.47. This also deprecates some old APIs (deprecated ZED camera device was removed, and Touchpad input was deprecated).

  • New: Updated the Oculus Platform Tools panel.

  • New: Unreal Insights has been enabled for HoloLens.

  • New: Support for OpenXR AR webcam capture support was added.

  • New: Depth composition on HoloLens when using OpenXR is now enabled.

  • New: Updated the HP Motion Controller and SteamVR so they would work with each other: Squeeze Action was renamed to Grip to work with SteamVR mappings, HP Controller was added to the list of devices looking for an x and y button, and the plugin was renamed HPMotionController.

  • New: The AR Pin/Anchor local store was refactored to create a cross platform-compatible API for Anchor Local Store in ARBlueprintLibrary. On the supported platform (currently Windows Mixed Reality and HoloLens) you can save an anchor to the Local Store or load them from it by a string key. This supersedes the old Named Pin system, which saved anchors to the store by pin name, because not all platforms have pin names. Some of the Blueprint API is being automatically transformed by redirect. Other functions that need more content work were deprecated.

  • New: Scene Understanding support in OpenXR AR makes DirectX12 the default for HoloLens OpenXR rendering Expose OnLineTraceTrackedObjects to OpenXRExtensionPlugins.

  • New: Added an OpenXR Hand Tracking extension plugin.

  • New: Added support for Instanced Stereo Rendering to Niagara VFX.

  • New: The OpenXR plugin can now be extended using Extension plugins.

  • New: There is now a unified code path for rendering the passthrough camera on handheld AR platforms:

    • The engine lacked a generic and unified code path for rendering the passthrough camera background, or onto occlusion mesh that users could add to the level. Previously each AR platform had its own way of rendering the passthrough camera, which usually involved different UV setups and custom materials.

    • We have now unified the pattern by using several standard materials in the ARUtilities plugin. These materials reply on the Map AR Passthrough Camera UVs node to map from normalized UV to a suitable one for a particular view/texture size combination.

    • Most of the custom materials from the ARKit, ARCore and remote session plugins have been removed due to the use of standard materials. The custom material expressions are also flagged as deprecated.

    • For rendering the passthrough camera onto a user defined occlusion mesh, there is a helper—UPassthroughMaterialUpdateComponent—that makes things easier. It handles picking the correct passthrough material based on the camera texture type, as well as updating the texture parameter in the tick, both of which are required for ARCore.

  • New: Added support for HoloLens 2 to the OpenXR plugin.

  • New: Integrated the Depth API for ARCore 1.18:

    • The new Depth API can be enabled by using EARSessionTrackingFeature::SceneDepth on the AR Session Config object.

    • The user can query if the feature is supported via IsSessionTrackingFeatureSupported.

    • If supported and enabled, the engine will create a R32F texture, holding the depth map data from ARCore.

    • The data in this texture is the depth of the environment with regard to the camera, in millimeters.

  • New: There's a CVAR controlling debug rendering of the depth map:

    • arcore.DebugOverlayMode=1: shows the raw value of the depth map, in meters.

    • arcore.DebugOverlayMode=2: shows a coloration of the value in the depth map.

    • To access the depth map, users can use GetARTexture from UARBlueprintLibrary.

    • Currently, occlusion rendering is disabled for ARCore as there is a bug about accessing the scene depth in the occlusion material; hopefully this can be fixed in a later change.

  • New: Removed beta tags on WindowsMixedReality and HoloLens plugins; both plugins are now production ready.

  • New: Added support for the hand pointer pose in input simulation

  • New: Basic stats pass for ARCore's frame update code path.

  • New: Replaced custom APIs in the ARCore plugin with a generic interface class for AR dependency and permission handling. Users should now call UARDependencyHandler::GetARDependencyHandler() to get a handler object, with which they can perform several tasks related to dependency and permission management. On platforms that don't support explicit dependency management, a nullptr will be returned.

  • New: Added support for the standard onboarding UX from ARKit 3.0. This feature is enabled by bUseStandardOnboardingUX from the session config object. For devices supporting ARKit 3.0 and above, the ARKit plugin will create a FARKitCoachingOverlay object managing the ARCoachingOverlayView, which is added to the root view of the application. Note that it is not easy for the overlay to show up, and there is no way to configure its sensitivity. The easiest way is to start the session with the camera covered and wait for ~10s.

  • New: Fixed a bug in Windows Mixed Reality when using a SpatialStageFrameOfReference where camera height decreases when tracking is lost. Context: The stage frame of reference is at the floor—used by VR. The stationary frame of reference is at eye-level—used by HoloLens The attached frame of reference is also at eye-level—used for 3DOF fallback. When falling back to 3DOF, the expected transform to use was the last known transform between the tracking coordinate system and the attached coordinate system. However, we were accidentally creating new variables with the same name in a different scope, so an identity transform was being used instead. Since the stationary and attached frames of reference are both at the same height, HoloLens was not affected by this bug, but VR devices with valid stages were.

  • Bug Fixes: Various fixes for Magic Leap hand meshing:

    • Removed explicit caching and resending of the current mesh data. This is not required because MRMesh keeps a local cache of the current data to be rendered. We only need to send new data when we want to update the mesh.

    • Fixed flickering caused by garbage data being used for the bounds in a frustum/bounds visibility check. The data was garbage because it was never supplied. A box is now supplied based on the HMD position and orientation.

    • Fixed the vertex normal calculation for Magic Leap hand meshing (using incorrect normals was crashing on low poly meshes). Generates normals by adding the normal of each triangle that a vertex is part of, then normalizes the result (this is done during tangent generation to remove the need to add a separate iteration over the mesh just to do normalization). If triangle weights should be used for this, multiply the normal by the area of the triangle first. Add a Blueprint callable to set whether to use triangle weights when calculating the vertex normals. False by default, as this is slightly more expensive and doesn't have a huge impact.

    • Note: The order of the cross product in FMagicLeapMeshTracker::GetResult has been intentionally swapped to account for the left handed coordinate system of Unreal. One-sided materials should work on the hands now (a previous change to the hand mesh winding only seemed to work because the normals were not correct at that time).

  • New: Added support for multiple tracked faces with ARKit 3.0:

    • Use UARBlueprintLibrary::GetNumberOfTrackedFacesSupported to query the number of supported tracked faces on the device.

    • Use UARSessionConfig::MaxNumberOfTrackedFaces to specify the number of tracked faces to request. Right now no device supports more than three tracked faces.

    • If multiple faces are tracked, each one will be assigned an unique Live Link subject name, based on UAppleARKitSettings:

      • DefaultFaceTrackingLiveLinkSubjectName: #1:

      • DefaultFaceTrackingLiveLinkSubjectName #2:

      • DefaultFaceTrackingLiveLinkSubjectName-1 #3:

      • DefaultFaceTrackingLiveLinkSubjectName-2

  • New: Support was added for the smoothed scene depth data introduced in iOS 14 beta 5.

  • Deprecated: HoloLens 1 Remoting is now deprecated, and will be removed entirely in UE5.

  • Deprecated: Deleted the deprecated MagicLeapScreens plugin.

  • Deprecated: Deprecated the HoloLens 2 virtual keyboard show/hide methods; these were replaced by some virtual keyboard functionality improvements.

  • Deprecated: GearVR has been deprecated.

  • Deprecated: Oculus Go and 3DoF have been deprecated.

  • Deprecated: Mobile Multi-View Direct is now the default multi-view mode.

  • Deprecated: Deprecated UGoogleARCoreFaceMeshComponent:

    • Improved the implementation of UARFaceComponent so that it has all the functionality of UGoogleARCoreFaceMeshComponent, and deprecated the latter.

    • Fixed a problem where the ARKit face tracking integration did not upload the UV info to UARFaceGeometry.

    • Allowed additional vertex data to be uploaded to UMRMeshComponent via the UpdateMesh API, which is now used for uploading the vertex normal for the face mesh from ARKit/ARCore.

  • Deprecated: Deprecated individual GetAllTrackedXXX APIs in favor of a generic API: GetAllGeometriesByClass.

  • Deprecated: GetUpdatedAugmentedFaces was deprecated in favor of GetAllGeometriesByClass.

  • Deprecated: Removed the BlueprintSpawnableComponent flag from the deprecated ARCore actor components so that they can no longer be used in Blueprints.

VR

  • Crash Fix: Fixed out-of-order destruction crashes with the Oculus Avatar plugin.

  • Bug Fix: Fixed warnings when exiting VR mode.

  • Bug Fix: Added SteamVR Input JSON manifests as part of packaging. This fixes manifests not being packaged on Blueprint-only projects.

  • Bug Fix: Fixed an issue in Oculus for a VAO overwrite issue causing black screen on Quest in OpenGL.

  • Bug Fix: Fixed an out-of-date view uniform buffer for selection rendering post-process (broken selection highlights in VRMode).

  • Bug Fix: Disabled the selection outline for VRMode to avoid rendering artifacts.

  • Bug Fix: Fixed an initial button repeat delay being ignored on the Oculus Touch. Fixed cross and triangle buttons being swapped on PS Move controllers.

  • Bug Fix: More optimal handling of scene capture and reflection capture when in VR Mode (using Grow rather than resize in cases where it makes sense).

  • Bug Fix: Changed the OVRPlugin library linking to explicit from implicit, so the module is not loaded on platforms that do not use it. This avoids linking errors on various versions on Android, as well as some runtime errors—but still works on Quest and desktop.

  • Bug Fix: Removed invalid Valve Index Grip Click and Trackpad Click controller keys.

  • Bug Fix: Fixed incorrect base pose caching in SteamVR Input module.

  • Bug Fix: VR devices are no longer initialized when the project launcher is opened if a project is not loaded.

  • Bug Fix: Warnings have been made more friendly for missing OVR DLLs.

  • Bug Fix: The selected Oculus audio DeviceId now passes to XAudio2. This fixes the case where it passed null, forcing the application to use the Windows default device, which would disable the functionality of allowing a VR headset to choose its preferred audio device.

  • Bug Fix: Fixed a bug in Vulkan Multiview: there was a case where a texture array would get the Depth attribute copied under NumLayers where depth should be 1, and numLayers 2 (for a multiview texture for example).

  • Bug Fix: Fixed SingleEyeLetterboxed mode in Spectator Screen for Oculus. The issue was that Oculus was setting the viewport with RHICmdList.SetViewport(DstRect.Min.X, DstRect.Min.Y, 0.0f, MipViewportWidth, MipViewportHeight, 1.0f); this was incorrect since the 4th and 5th parameters are supposed to be max X and Y (not width and height). This worked in most modes since Min.X and Min.Y are usually 0. In this mode, Min.X was non-zero which exposed the bug.

  • Bug Fix: Fixed the long timeout hitch when calling Enable/Disable HMD for Oculus headsets.

  • Bug Fix: Vulkan Submit for HMDs (which do not use swapchains) was causing assert on negative array index. This has been fixed.

  • Removed: The Oculus Avatars plugin has been removed.

  • New: Added Mobile Multi-View support for Hololens using instancing.

  • New: Added Oculus Quest platform support to OpenXR.

DMX

  • Crash Fix: Fixed a crash from the FDMXBuffer shared pointer getting destroyed when used among different threads.

  • Bug Fix: Fixed a double channel component in DMX Fixtures, and added a gobo spin component.

  • Bug Fix: For DMX Fixtures:

    • Resolved an initial state issue

    • Added strobe burst and sine wave effects

    • Matrix beam is now proportional to the matrix

    • Fixed Moving Mirror tilt rotation to always look down

  • Bug Fix: Fixed DMX Fixtures to ensure that texture resource is not null.

  • Bug Fix: DMX: Fixed reimport conflict.

  • Bug Fix: Fixed water fountain BP logic in DMXFixtures.

  • Bug Fix: The DMXFixtures lens is now modulated by intensity and color to avoid "glow in the dark", fixed the color disk to avoid desaturation, recompiled fireworks emitters and PS, set new default attributes for FW/pyro/water/laser, inverted zoom values, fixed color inconsistency between beam and light, and updated disk bake tool to output textures with needed settings

  • Bug Fix: DMXFixtures has had fireworks debug prints removed, and max light distance for beam mesh fixed.

  • Bug Fix: Fixed a DMXFixtures issue with lens effect and black color.

  • Bug Fix: DMXFixtures has a fixed beam scaling issue.

  • Bug Fix: DMXFixtures no longer have interpolation divergence between PIE and standalone.

  • Bug Fix: Upgraded the SendDMX subsystem function with arguments instead of functions.

  • Bug Fix: A DMX fix was made for references to Entities in a duplicated library so that they are no longer lost after restarting the editor.

  • Bug Fix: DMXFixtures has a fix for dynamic occlusion and a tweaked zoom component.

  • Bug Fix: DMX fixtures now return to their default state after Play in Editor.

  • Bug Fix: Fixed building issues with the collision in DMXFixtures, and added a check to make sure dynamic materials exist at init time.

  • Bug Fix: Added beam visibility options on all light fixtures in DMXFixtures, and tweaked the WashLED fixture (the lens is back and disabled pointlight).

  • Bug Fix: Tweaked lens materials in DMXFixtures to get a shiny look. This now supports a normal map. Disable light and beam visibility when lights are off.

  • Bug Fix: Get All Fixtures of Type node now has dropdowns for selecting a DMX Library asset and its Fixture Types. This replaces a previous custom node that was deleted.

  • Bug Fix: A DMX fix handled an issue where Fixture Patches copied into a different library asset with several Parent Types will no longer be pasted with the same Parent Type.

  • Bug Fix: DMX fixes for Controller updates to valid universes when created. Patches on default Universe 1 now display as assigned.

  • Bug Fix: DMX Bug Fix: SNameListPicker selected value on the dropdown menu is no longer incorrect after changing the property it represents through means other than the dropdown itself.

  • Bug Fix: Renamed SendDMX and SendDMXRaw map parameters to clarify their intent.

  • New: For DMX Fixtures, added Laser with DMX, changed the format of few Gobo textures, fixed the format of lavender texture, and resaved all assets.

  • New: Upgraded visuals and optimized performance in DMX Fixtures.

  • New: Streamlined pyro/water/fireworks Blueprints and FX in DMX Fixtures.

  • New: Fixed the matrix Blueprints for DMX Fixtures, and updated the matrix beam.

  • New: For DMX Fixtures:

    • Switched fixtures materials to metallic, updated strobe mesh

    • Set the default intensity of light fixtures to 2000cd (approximately 25000 lumens)

    • Fixed beam falloff since it was too strong

  • New: Updated water fountain for DMX Fixtures, and added a few new components.

  • New: For DMX Fixtures, switched pyro sim to the CPU for now so they show up, updated light intensity in materials, and updated the function category in matrix fixtures.

  • New: Added DMX Fixture Assets.

  • New: DMX now has a custom Sequencer Track for animating Fixture Patch function values.

  • New: DMXEngine, DMXFixtures, DMXProtocol are no longer experimental!

  • New: A DMX Fixture Patch Editor now visualizes its Fixture Patches, and allows for drag and drop for patches.

  • New: You can now use live render target texture data to drive DMX fixtures or low resolution LED panels and devices. Each pixel represents a DMX fixture.

  • New: Refresh Rate for incoming and outcoming DMX has been implemented.

  • New: Added an AddOrCreateUniverse into the IDMXProtocol API.

  • New: DMX now has a DMX Library Take Recorder Source.

  • New: DMX now supports Take Recorder and Sequencer for the new Attribute System.

  • New: FDMXProtocolName and FDMXFixtureCategory Name properties are now exposed to Blueprints.

  • New: The DMX Library asset now has its own category in the Asset Creation menu.

  • New: In the DMX attribute system, a search box was added on SNameListPicker for when the list has more than 15 values.

  • New: For DMX GDTF file import, a function's address span is computed from the actual addresses described on the Offset values of the imported functions. The functions' initial address are kept by computing their address offsets when needed.

  • New: DMX Libraries are now available without loading them explicitly.

  • New: DMX has experimental support for ETC consoles.

  • New: DMX has an initial implementation of the Attribute system for Fixture Functions names that can be easily referenced on Blueprints and other related systems.

  • New: Store DMX Input monitor console Protocol and Universe ID on .ini files.

  • New: There are new tools for collecting data about DMX for profiling and debugging, similar to other stat tools in Unreal Engine such as STAT FPS. These are console commands that display debug information or allow a user to query the currently connected fixtures and controllers.

  • New: DMX now has the correct naming of duplicated and copy-pasted Fixture Patches.

  • New: The DMX Attribute system now has Blueprint nodes that access DMX values through Attributes.

Programming Notes

  • Bug Fix: The AutoDestroy Subsystem will now tick only if the outer object exists and is not marked for destruction.

  • Bug Fix: Fixed usage of SCOPED_NAMED_EVENT and TRACE_CPUPROFILER_EVENT_SCOPE in various places. It avoids scope event names to get additional quotes. Also avoids the overhead of using macros with dynamic string as scope name where not necessary.

  • Bug Fix: Fixed usage of TRACE_CPUPROFILER_EVENT_SCOPE macro (to avoid adding extra quotes to named events).

  • Bug Fix: Fixed a crash due to uninitialized UVChannelData which could occur when adding a new material on a static mesh at runtime.

  • New: Added a Viewport Status subsystem which supports a more extensible API for displaying messages like "LIGHTING NEEDS TO BE REBUILT".

  • New: Added the third-party tool Cruncher Sharp to Engine/Extras/ThirdPartyNotUE.

  • New: Added horizontal drag and drop support for STableRow.

  • New: UHT now supports int64 properties marked as ExposeOnSpawn.

  • New: Implemented a GetDistanceAlongSplineAtSplineInputKey function on the Spline Component.

  • Improvement: Optimized TSet::Empty to avoid the pathological case where the hash size is large but there are not many elements in the hash. This is mainly used when marking and unmarking objects, such as during package saving and other archives tagging objects, but also in several cases all over the engine.

  • Improvement: UWorldSubsystem::GetWorld is now marked as final.

  • Improvement: Decreased the time it takes to discover game projects in the coding environment.

  • Deprecated: In MeshDescription, when accessing mesh attributes, TMeshAttributesView<> has now been deprecated. TMeshAttributesRef<> should be used instead.

Upgrade Notes

Blueprints

  • API Change: Renamed core FBlueprintExceptionTracker to FBlueprintContextTracker, moved it to Script.h, and added access protection for members. Deprecated global core delegate OnScriptExecutionEnd; moved it and entered a new context callback into FBlueprintContextTracker.

Core

  • Upgrade Notes: FMath::Clamp now has UE_NODISCARD; its return value must be used.

Editor

Sequencer
  • API Change: Decoupled the timing element of the PlayTo, ScrubTo, and JumpTo families of functions from their core operations. Now, users call SetPlaybackPosition to establish the time (in frames, seconds, or marked frames) at which operations should take place. The user then calls the new PlayTo, ScrubTo, or JumpTo function to perform the appropriate operation.

  • API Change: The UMovieSceneTrack::OnSectionMoved method has gained a parameter struct, which gives information about the section movement.

Networking

  • Upgrade Notes: NetworkDriver.cpp has been renamed to NetDriver.cpp to be consistent with class name and coding standards. Any custom code changes to NetworkDriver.cpp must also be moved or merged into NetDriver.cpp.

Online

  • Upgrade Notes: Following a Social Platform Descriptions refactor in FUserPlatform, any user extension of FUserPlatform needs to be updated.

  • Upgrade Notes: Code releasing IVoiceChatUser instances with the delete keyword should instead call IVoiceChat::ReleaseUser.

HTTP
  • New: HTTP Server Improvements

    • Listeners can be configured on a per-port basis via [HTTPServer.Listeners] config section

    • Fixed issue where HTTPListener::Tick() could be called after the underlying connection has been closed

    • Fixed unnecessary HTTPListener warning re: send buffer size

  • Upgrade Notes: HTTPListener instances now default bind to the loopback ethernet interface; users who wish to listen via an external ethernet interface must explicitly do so via the newly available configuration section [HTTPServer.Listeners]

  • Upgrade Notes: Any code that uses TSharedRef and TSharedPtr will need to be updated to use TSharedRef and TSharedPtr or FHttpRequestRef and FHttpRequestPtr.

Physics

Clothing
  • Upgrade Notes: If the results of a cloth simulation on a SkeletalMeshComponent are used on the game thread for any purpose, you must now set bWaitForParallelClothTask on the USkeletalMeshComponent.

Platforms

Android
  • Upgrade Notes:Any implementation of NetworkConnectivityClient.Listener will need to update the onNetworkAvailable callback to include the NetworkTransportType, a new Enum added to the NetworkConnectivityClient. Network transport types can be one of the following:

    • Wifi

    • Vpn

    • Ethernet

    • Cellular

    • Bluetooth

    • Unknown (other)

  • Upgrade Notes: The "Disable Flip Copy GLES" flag has reversed its meaning since the previous release due to a bug fix.

Rendering

Lighting
  • Upgrade Notes: The new "cast contact shadow" flag defaults to true, so behavior should match previous versions in any cases where meshes have the "cast shadows" flag enabled. If the old behavior where contact shadows are cast for all objects (even if either flag is set to false) is desired, set the CVar "r.ContactShadows.NonShadowCastingIntensity" to 1.

Materials
  • Upgrade Notes: The default of r.ViewTextureMipBias.Min is now -2.0 for texture quality when temporally upscaling with a ScreenPercentage greater than 50%. To maintain backward compatibility, projects that use temporal upsampling (r.TemporalAA.Upsampling=1) without overriding this cvar that might affect should set r.ViewTextureMipBias.Min=-1 in DefaultEngine.ini.

XR

  • Upgrade Notes: Blueprints will warn that ConfigSession is deprecated and should be replaced by ConfigSession2.

  • Upgrade Notes: Removed XR's MRMesh hard reference to WireframeMaterial.uexp, which prevents it being pulled into packaged projects that don't use it. Users of MRMesh should set a wireframe material if they want one. We fall back to UMaterial::GetDefaultMaterial(MD_Surface) if nothing sets one.

  • Upgrade Notes: Renamed CreateCloudAnchor to ConstructCloudAnchor to better fit microsoft docs. A redirector will fix up existing content.

알려진 이슈

언리얼 엔진 4.26에 영향을 주는 알려진 이슈 전체 목록은 Unreal Engine Public Issue Tracker (영문) 를 확인하세요.

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

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

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

Post Feedback