새로운 기능
언리얼 엔진 5.5에서는 UE5 툴세트가 크게 향상되었습니다. 애니메이션, 렌더링, 버추얼 프로덕션, 모션 디자인 등 다양한 영역에서 향상된 기능을 제공합니다.
이 출시 버전에는 GitHub의 언리얼 엔진 디벨로퍼 커뮤니티에서 제공한 향상된 사항도 포함됩니다. 언리얼 엔진 5.5에 기여해 주신 모든 분들께 감사드립니다. a-canary, aharvi, Akymbo-Humanoid, AlbinBernhardssonARM, aliemci, alikomurcu, ALiwoto, Almax27, Ambrosiussen, arkadiusz-filip, batlam987, ben-mkiv, BenjaminHill, BenVlodgi, BlenderSleuth, bmwhitley, brorbw, bunnylacey, Caffiendish, chriszuko, colonelsalt, Corey-Downing, David-Vodhanel, dgiannetti-riot, dorgonman, DoubleDeez, DPons97, drandall-microsoft, Duroxxigar, duyaokun, dwdamien, dyanikoglu, dzeligman, Ebrahim-Mottaghi-Rezaei, Edstub207, efokschaner, erebel55, ersenal, ersh1, exxello, foobit, Frigerius, gamethread, GaoYuanBob, Garashka, gnu-enjoyer, GracesGames, grafikrobot, Gusten, hozuki, HSeo, hui211314dd, ilkeraktug, IvayloH, jashking, jdperos, Jernias, jerobarraco, jinsongh2, jorgenpt, jppiiroinen-h13, jpritchard1010, just-bank, KaosSpectrum, kdada, kdbn, KeithMorning, KeithRare, KirillAlekseeenko, klukule, kronok, laycnc, ligazetom, lightbringer, lijenicol, liuhao0620, LizardThief, Losdrew, lxcug, MagForceSeven, MarcusSvensson92, MaximeRobinot, Maxmystere, maxon887, Meidozuki, MinusKube, mr0ptimist, mrobitaille-riot, najmm01, nickdarnell, nicoell-threedy, nikitakrutoy, ohmaya, pasotee, PetterVMC, PFGschen, phantom10111, PhDittmann, PICO-XR, ppchavan001, pramanc, projectgheist, pzychotic, r-vaillant, ramiroagis, rdunnington, reapazor, RiotAlam, rmobbs-ml, sadunkit, sheepandriy, Sigma-Erebus, Skylonxe, sleeptightAnsiC, slonopotamus, Sluggernot, SRombauts, StalkMen, stanley1108, StefanZimecki-Sharkmob, sunwtGitHub, supuo, TechNXGEN, teddemunnik, tgraupmann, Th3Fanbus, TheLumbee, tigerjang, tntnkn, TroutZhang, Tt-Wes, TwentyPast4, uextm, Urkaz, user37337, Vaei, Vesros, vgpechenkin, vorixo, Voulz, Wellwick, whalefood, xeru98, zachlute, zeaf
캐릭터 및 애니메이션
시퀀서 사용성

언리얼 엔진 5.5에서는 시퀀서의 사용성이 향상되어 시네마틱 아티스트가 시퀀스 내에서 콘텐츠가 표시되는 방식을 제어하고, 프로퍼티에 더 쉽게 액세스하고, 시퀀스 콘텐츠에 따라 뷰포트를 필터링할 수 있습니다. 이와 같이 향상된 사용성은 더욱 제어 가능한 인터페이스를 제공하여 워크플로에서의 반복적인 작업을 줄이고, 사용자가 더 빠르게 결과물을 생성할 수 있게 해줍니다.
-
커스터마이징 가능한 필터링
-
선택된 바인딩, 트랙 및 채널 단독 표시 또는 숨김
-
숨김, 단독 표시 및 모두 표시 단축키 지원
-
바인딩, 트랙, 섹션, 채널 및 키의 프로퍼티에 대한 오버레이 창 제공
-
뷰포트에서 선택된 시퀀스 콘텐츠를 필터링할 수 있는 토글 기능 지원
-
테이크 레코더에서 녹화된 카메라를 기반으로 섬네일 생성
다이내믹 시퀀서

다이내믹 시퀀서(Dynamic Sequencer)를 사용하면 데이터의 운영을 보다 효과적으로 정의하여 인터랙티브 시네마틱 경험을 강화할 수 있습니다.
코어 기능:
-
새로운 디폴트 바인딩 타입 - 런타임에서 동적으로 다른 오브젝트로 바인딩할 수 있는 리플레이서블 바인딩 타입
-
커스텀 바인딩 타입 생성 - 시퀀서에서 오브젝트를 바인딩하는 방법을 세부적으로 제어할 수 있음
-
트랙 행 또는 섹션의 활성 상태에 대한 조건부 제어
-
직접 제작한 커브를 통해 시퀀스, 서브시퀀스 또는 스켈레탈 애니메이션에 대한 재생속도 조절 적용
-
시퀀스 또는 샷의 트랜스폼 원점 오버라이드 또는 애니메이션 적용이 가능
애니메이션 모드: 애니메이션 레이어

애니메이션 레이어를 사용하면 언제든 원래의 데이터로 돌아갈 수 있는 레이어에서 모션을 생성하여 제어 능력과 유연성을 향상할 수 있습니다. 이 기능은 시퀀서의 섹션 워크플로에 활용되어 보다 단순하고 간소화된 인터페이스를 통해 섹션/레이어를 관리할 수 있을 뿐 아니라 다양한 측면에서 사용성을 높여줍니다.
코어 기능:
-
선택 항목에서 레이어 생성
-
멀티 오브젝트 레이어
-
선택된 레이어 병합
-
애디티브 및 오버라이드
-
비활성, 잠금, 선택
-
애니메이션 가능한 가중치
-
이름변경, 복제, 삭제
모듈형 컨트롤 릭(베타)

모듈형 컨트롤 릭(Modular Control Rig)이 베타 단계로 전환되었으며, 릭을 더 빠르게 만들 수 있도록 많은 부분에서 기능을 개선하고 유저 인터페이스를 다듬었습니다.
-
모듈 베리언트 를 통한 손쉬운 모듈 업데이트 지원
-
도식화된 오버레이 UX 향상
-
모듈 계층구조 단순화
-
새 모듈:
-
4족 모듈
-
비히클 모듈
-
-
기본 제공되는 2족 모듈이 이제 Vicon, Mixamo, mGear, HumanIK, Motive, XSens, Advanced Skeleton 등에서 사용되는 일반 스켈레톤 타입 을 지원
릭 베리언트(실험단계)

릭 베리언트(Rig Variant)는 컨트롤 릭 모듈과 함수를 업그레이드하고 교체할 수 있게 해주는 실험단계 툴로, 애니메이터가 원본을 영구적으로 변경하지 않고도 서로 다른 베리언트로 전환할 수 있으므로 역방향 솔브 및 정방향 솔브에서 문제 없이 서로 다른 베리언트로 전환할 수 있습니다.
- 컨트롤 릭 모듈 및 함수를 새로운 베리언트로 업그레이드 및 교체 가능
뮤터블 캐릭터 및 메시 커스터마이징(베타)

뮤터블(Mutable) 은 런타임에서 캐릭터 커스터마이징 시스템과 다이내믹 콘텐츠를 만드는데 필요한 스켈레탈 메시, 머티리얼 및 텍스처를 동적으로 생성할 수 있습니다.
-
가려진 표면을 제거하여 z파이팅을 방지하고 오브젝트 레이어링 및 인터랙션을 구현합니다. 예: 베이스 바디 위에 셔츠를 입히고 그 위에 재킷을 다시 입힌 경우
-
메시 및 텍스처 병합을 통해 드로 콜 최소화
-
모프 베이킹을 통한 GPU 로드 최소화
-
레이어링 및 데칼 투영과 같은 베이킹된 텍스처 효과로 GPU 로드 최소화
-
그래프 기반 에디터
스켈레탈 에디터(정식 버전)

이제 스켈레탈 에디터가 정식 버전으로 제공됩니다. 스켈레탈 에디터 내에서 캐릭터 메시 작업에 도움이 될 전반적인 향상과 시각적인 피드백 업데이트가 이뤄졌습니다. 이를 통해 스켈레탈 메시에서 웨이트 값을 페인팅하고 편집할 때 워크플로가 더 빠르고 간단해 집니다.
-
메시 단독 표시
-
강력한 웨이트 전송 툴
-
Grow/Shrink/Flood를 지원하는 에지 및 페이스 선택
-
LOD 및 대체 스킨 웨이트 프로파일 편집
-
향상된 뷰포트 와이어프레임 및 본 표시
-
향상된 컴포넌트 에디터
-
올가미 선택
-
쿼드 메시 편집(실험단계)
-
본 범위 선택 및 다중 편집
애니메이션 디포머

이제 컨트롤 릭 내에서 커스텀 디포머를 스폰하는 새로운 기능을 통해 접촉 디포메이션이나 더 나은 카툰 스타일의 스쿼시 앤 스트레치와 같은 보다 사실적인 애니메이션 효과를 제작할 수 있으며, 클릭 한 번으로 시퀀서에서 캐릭터에 손쉽게 적용할 수 있습니다.
또한 애니메이터 키트(Animator Kit) 플러그인에는 애니메이션을 제작하거나 자신만의 릭으로 구동되는 디포머를 제작하는 데 사용할 수 있는 래티스, 카메라 스페이스 래티스, 스컬프트 등의 내장 디포머를 갖춘 사전 제작 컨트롤 릭 컬렉션이 포함되어 있습니다.
머신 러닝 디포머

ML 디포머(ML Deformer)는 머신 러닝을 활용하여 고퀄리티 오프라인 메시 디포메이션을 실시간으로 구현할 수 있게 해줍니다. 그 예로 근육과 유사 스태틱 클로스 시뮬레이션을 들 수 있습니다. 언리얼 엔진 5.5의 ML 디포머에는 런타임 디포메이션을 향상하는 몇 가지 기능이 추가되었습니다.
5.4에서 5.5로 넘어오면서 변경된 사항
-
ML 디포머 에디터의 뷰포트에서 직접 마스크를 페인팅할 수 있는 지원 기능이 추가되었습니다.
-
트레이닝 애니메이션/지오메트리 캐시 입력별 마스크를 제공하여 트레이닝 데이터를 특정 영역으로 제한할 수 있게 되었습니다.
-
ML 디포머용 Maya 플러그인에 트레이닝 데이터를 향상하는 데 사용할 수 있는 포즈 믹서 툴이 추가되었습니다.
-
내부 및 외부 팀의 피드백을 기반으로 워크플로 문제를 해결했습니다.
피직스 컨트롤

피직스 컨트롤(Physics Control) 플러그인은 컴포넌트를 사용하는 블루프린트나 애니메이션 그래프 노드를 사용하는 캐릭터에 단순하고, 직관적이고, 강력한 물리 기반 컨트롤을 추가할 수 있게 해줍니다. 따라서 스태틱 메시 및 스켈레탈 메시의 새로운 물리 모션을 활용하는 동시에 예술적인 컨트롤과 게임플레이 컨트롤을 유지할 수 있습니다.
-
피직스 컨트롤 컴포넌트 또는 Rigid Body With Control 애니메이션 그래프 노드에 적용할 수 있는 향상된 컨트롤 프로파일 API입니다.
-
컨트롤 프로파일 에셋 에디터 향상
-
컨트롤 프로파일 생성 간소화
선택기

5.5에서는 선택기(Chooser)가 정식 버전으로 제공됩니다. 선택기는 다양한 추가 기능과 디버깅 기능이 포함된 강력한 게임 컨텍스트 에셋 선택기 역할을 합니다. 처음에는 애니메이션용으로 개발되었지만, 이제 거의 모든 타입의 에셋을 선택할 수 있습니다. 단순한 랜덤 선택기부터 수천 개의 애니메이션을 관리하는 데이터베이스 기반 로직에 이르기까지 다양한 레벨의 복잡성을 처리할 수 있습니다.
메타휴먼 애니메이터를 위한 오디오 기반 애니메이션

메타휴먼 애니메이터를 사용하면 오디오를 기반으로 고퀄리티 페이셜 애니메이션을 생성하여 오디오와 일치하는 얼굴 연기를 빠르게 제공할 수 있습니다.
-
메타휴먼 애니메이터에서 오디오 에셋을 사용하여 페이셜 애니메이션을 생성할 수 있습니다.
-
얼굴의 상단 부분의 표정 추론을 포함하여 모든 메타휴먼 메타휴먼 페이셜의 모든 컨트롤에 적용 가능한 애니메이션을 빠르게 제작할 수 있습니다.
-
다양한 보이스 및 언어를 지원합니다.
-
오디오 배치 프로세싱에 최적화된 완벽한 로컬 오프라인 솔루션입니다.
오디오 기반 애니메이션에 대한 자세한 내용은 메타휴먼을 위한 오디오 기반 애니메이션 문서를 참고하세요.
언리얼 엔진에서 최적화된 메타휴먼

5.5 출시 버전에서는 메타휴먼을 UEFN에 적용하는 데 큰 성공을 거두었던 최적화 접근 방식을 언리얼 엔진의 메타휴먼에도 동일하게 적용했습니다. 이제 사용자는 메타휴먼을 익스포트할 때 다음 중 하나를 요청할 수 있습니다.
-
시네마틱(최상)(Cinematic (Complete)) - 원본 해상도의 에셋을 갖춘 기존과 같은 완전한 상태의 메타휴먼입니다.
-
높음, 중간 및 낮음 (최적화됨) - 텍스처를 베이킹하고 복잡성을 줄여 최적화된 메타휴먼입니다.
이를 통해 시네마틱 메타휴먼의 평균 크기를 800MB에서 60MB로 줄일 수 있으며, '높음'(최적화됨) 옵션을 선택하면 퀄리티 저하가 미미합니다.
이 기능에는 메타휴먼의 중요한 환경설정 옵션을 통합하는 메타휴먼 컴포넌트도 도입되었습니다. 이 기능은 통합 인터페이스를 통해 사용자가 특정 LOD에서 캐릭터 애니메이션 기능을 켜거나 꺼서 메타휴먼을 추가적으로 환경설정할 수 있게 함으로써 퍼포먼스와 퀄리티 간에 균형을 맞출 수 있게 해줍니다.
최적화된 메타휴먼에 대한 자세한 내용은 언리얼 엔진의 최적화된 메타휴먼 문서를 참고하세요.
렌더링
메가라이트(실험단계)

메가라이트는 아티스트가 씬에 다이내믹 섀도를 드리우는 수백 개의 라이트를 추가할 수 있게 해주는 새로운 실험단계 기능입니다. 이제는 특정 제한이나 퍼포먼스에 대한 영향 없이 아티스트가 창의적으로 씬에 라이트를 적용할 수 있습니다. 라이팅 아티스트는 이제 메가라이트를 통해 소프트 섀도를 만들고, 라이팅 기능을 적용하고, 미디어 텍스처를 재생하고, 콘솔 및 PC에서 볼류메트릭 섀도를 생성하는 텍스처가 적용된 에어리어 라이트를 사용할 수 있습니다.
자세한 내용은 메가라이트를 참조하세요.
루멘 개선

5.5 출시 버전에는 콘솔에서 60hz로 루멘을 제공하는 데 중점을 두고 루멘의 하드웨어 레이 트레이싱(Hardware Ray Tracing, HWRT) 퍼포먼스를 개선하는 다양한 기능이 포함되어 있습니다. 또한 루멘 글로벌 일루미네이션(Global Illumination, GI) 및 리플렉션의 퀄리티를 높여주는 몇 가지 주목할 만한 개선점도 포함되어 있습니다. 이제 루멘은 GI에 히트 라이팅을 지원하며, 이를 통해 비용은 좀 더 비싸지만 GI를 보다 정확하게 계산할 수 있습니다. 이는 루멘을 스태틱 메시와 함께 사용할 때 발생할 수 있는 몇 가지 제약을 방지할 수 있습니다. 또 다른 중요한 개선점은 낮은 러프니스 리플렉션의 선명도를 크게 향상하는 새로운 리플렉션 디노이저와 리플렉션 시 굴절이 되는 반투명을 새롭게 지원한다는 것입니다.
하드웨어 레이 트레이싱

5.5 출시 버전에서는 외부용 HWRT 카테고리로 분류되는 기본 시스템에 대한 다양한 향상이 이뤄졌습니다. 이러한 로우 레벨 시스템은 루멘, 패스 트레이싱 및 라이트 베이킹의 퍼포먼스와 기능에 상당한 영향을 미칩니다. 여기에서 향상이 이뤄진 부분은 레이 트레이싱 코드의 비동기 평가, 캐싱 방법 및 가속 구조의 관리 효율성입니다. 이러한 변경사항으로 지원되는 하드웨어 플랫폼에서 더 높은 주사율로 HWRT를 사용할 수 있게 되었습니다.
자세한 내용은 하드웨어 레이 트레이싱을 참조하세요.
패스 트레이서

5.5 출시 버전에서 이제 패스 트레이서가 정식 버전으로 제공됩니다. 즉, 패스 트레이서의 모든 기능이 완전히 지원되며, 애트머스피어 및 볼류메트릭 클라우드에 대한 레퍼런스로 사용할 수 있습니다. 또한 Linux 지원과 함께 무비 렌더 큐 및 무비 렌더 그래프를 통한 오프라인 렌더링을 위해 새로운 공간-시간 디노이저가 포함되어 있습니다.
하지만 정식 버전으로 전환되었더라도 개발 또는 실험단계의 일부 기능은 패스 트레이서와 호환되지 않을 수 있습니다.
자세한 내용은 패스 트레이서를 참조하세요.
패스 트레이서 볼류메트릭

5.5 출시 버전에서 제공되는 패스 트레이서(Path Tracer)는 이제 스카이 애트머스피어와 볼류메트릭 클라우드의 레퍼런스 퀄리티 렌더링을 지원하므로, 완벽한 기능을 갖춘 레퍼런스나 비교 기준이 되는 이미지를 생성할 수 있습니다.
인터랙션을 유지하기 위해 레이 마칭 기법을 최적화할 경우 시각적 아티팩트가 발생할 수 있으며, 밀도가 매우 높은 클라우드 레이어는 신중하게 조정해야 할 수 있습니다.
NFOR - 스파시오 템포럴 디노이저(실험단계)

'비선형 가중치 적용 1차 회귀(Nonlinearly Weighted First Order Regression)' 또는 '스파시오 템포럴 디노이저'라고도 부르는 NFOR 디노이저는 시간 및 공간 관점에서 주변 패치를 기반으로 각 픽셀을 디노이징하여 오프라인 패스 트레이싱 렌더링에 시간이 경과함에 따라 안정적인 디노이징을 제공하도록 디자인된 플러그인입니다.
이 기능은 매우 낮은 샘플 수나 빠르게 이동하는 오브젝트를 대상으로 하지 않으며, 고퀄리티 출력을 생성하는 것을 목표로 합니다.
자세한 내용은 NFOR 스파시오 템포럴 디노이저를 참조하세요.
Vulkan 레이 트레이싱(베타)

5.5 출시 버전에서 이제 Vulkan 레이 트레이싱이 기본적으로 활성화됩니다.
Vulkan 레이 트레이싱 기능은 이제 Linux 플랫폼을 포함하여 DX12와 동등한 수준으로 제공됩니다. 이를 통해 루멘의 히트 라이팅 모드와 패스 트레이싱을 포함한 모든 레이 트레이싱 기능을 사용할 수 있게 되었습니다.
이 기능을 사용할 때는 최신 드라이버를 사용하는 것이 권장됩니다(Windows: Nvidia 560 이상, Linux: 550 이상).
렌더 패스 향상

5.5 출시 버전에서 이제 템포럴 AA 지터 및 스크린 퍼센티지를 포함하여 메인 뷰 카메라 및 해상도를 자동으로 미러링하는 씬 캡처 및 커스텀 렌더 패스를 제작할 수 있습니다. 이를 통해 컴포지팅 레이어가 픽셀에 완벽하게 적용되므로 일반적으로 컴포지팅 시 스크린 퍼센티지를 활용하여 더 나은 퍼포먼스를 발휘할 수 있습니다.
또한 'UserSceneTexture'라고 하는 사용자 정의 중간 텍스처를 포스트 프로세스 머티리얼로 순차적으로 쓰고 읽을 수 있습니다. 즉, 언리얼 엔진이 분리 가능한 필터 또는 블러와 같은 멀티 패스 포스트 프로세스 이펙트를 보다 효율적인 방식으로 지원할 수 있습니다.
메시 텍스처 컬러 페인팅

5.5 출시 버전에서는 퍼포먼스 및 메모리 오버헤드에 대한 영향을 최소화하여 나나이트 메시 인스턴스에서 메시 페인팅을 지원합니다. 5.5 이전에는 나나이트 사용 시 이러한 일반적인 메시 페인팅 워크플로가 지원되지 않아 동일한 지오메트리 인스턴스 표현에 대한 로컬 베리에이션이 허용되지 않았습니다.
5.5에서는 메시 페인트 툴이 확장되어 메시 컴포넌트에 저장된 버추얼 텍스처에 페인팅하는 새로운 텍스처 컬러 페인팅 모드가 추가되었습니다. 이 모드는 버텍스 페인팅과 유사한 워크플로를 지원하지만, 버텍스 수 대신 텍스처 해상도에 따라 스케일 조절되므로 나나이트 메시에서 보다 효과적입니다. 또한 버텍스와 텍스처 컬러 페인팅 간의 복사에 대한 지원이 추가되었으며, 페인팅하는 동안 텍스처 컬러를 버텍스 컬러로 자동 전파할 수 있는 옵션도 제공됩니다.
자세한 내용은 메시 페인팅을 참조하세요.
직교 렌더링

직교 렌더링(Orthographic Rendering)은 건축 및 엔지니어링 산업에서 일반적으로 사용되는 방법으로, 게임플레이에서도 독특한 스타일을 제공하기 위해 활용됩니다. 아이소메트릭 뷰와 마찬가지로, 이 기법에서는 모든 오브젝트가 동일한 스케일을 유지하고 평행선을 유지하며 크기가 드로잉/이미지에서 일관되게 표현되어 상대적인 크기를 보다 쉽게 판단할 수 있습니다.
5.5 출시 버전에서 직교 렌더링은 원근 렌더링과 시각적으로 동등한 수준의 퀄리티를 제공하며, 래스터 및 패스 트레이서에서 사용할 수 있는 대부분의 렌더링 기능을 지원합니다.
자세한 내용은 직교 카메라를 참조하세요.
렌더 병렬화

5.5에서는 병렬 변환이 향상되었으며, 렌더 하드웨어 인터페이스(Render Hardware Interface, RHI)가 RHI 커맨드 리스트를 플랫폼 커맨드 리스트로 변환할 수 있습니다. 이와 같은 변경사항으로 인해 스톨 수가 감소되어 최대 2배로 퍼포먼스가 향상(일부 플랫폼에서는 7밀리초 감소)되고 드로콜이 소폭 감소하는 것은 물론, 플랫폼 동적 해상도와 렌더링 스레드 시간에도 일부 향상이 이뤄졌습니다.
또한 5.5 출시 버전에서는 비동기 렌더 종속성 그래프(Render Dependency Graph, RDG) 실행 작업에 대한 향상이 포함되어 크리티컬 패스 렌더링 스레드 시간이 약 0.4밀리초 감소되었고 슬레이트 렌더링 작업의 약 절반을 비동기 방식으로 실행할 수 있습니다.
데이 시퀀스(실험단계)

데이 시퀀스(Day Sequence)는 24시간 하루 주기를 자동으로 생성하는 실험단계의 플러그인입니다. 아티스트는 이를 통해 시퀀서 툴 내에서 태양, 달, 별, 대기, 구름을 직접 정교하게 제어하여 라이팅을 손쉽게 생성할 수 있습니다.
게임에서 기본적인 낮/밤 주기를 구현하는 프로세스를 간소화하는 것 외에도 데이 시퀀스는 즉시 사용 가능한 멀티플레이어 지원을 위한 네트워크 동기화를 처리하고, 볼륨 오버라이드를 사용하여 POI를 생성하고, 프로시저럴 시퀀스를 생성하여 라이팅에 대한 데이터 기반 접근 방식을 강화할 수 있습니다.
바인드리스 렌더링

바인드리스 리소스는 DX12, Vulkan, Metal과 같은 최신 RHI의 텍스처 및 기타 타입의 데이터 버퍼 관리와 관련된 로우 레벨 기능입니다. 바인드리스 리소스에 대한 지원을 추가하면 렌더러 내에서 보다 유연한 GPU 프로그래밍 패러다임과 추가 기능을 사용할 수 있으며, 이는 Vulkan의 레이 트레이싱을 완벽하게 지원하기 위한 요구 사항이기도 합니다.
언리얼 엔진 5.5에서는 바인드리스 리소스를 사용할 수 있는 플랫폼의 수가 늘어났습니다.
일인칭 렌더링(실험단계)

5.5에서는 일인칭 렌더링에 대한 초기 지원이 추가되었습니다. 이를 통해 플레이어의 손/무기가 월드 내 오브젝트에 클리핑되는 것을 방지하고 개발자가 일인칭 에셋에 대해 나머지 월드와 다르게 FOV를 지정할 수 있습니다.
일인칭 렌더링 기능은 나나이트 지오메트리와 함께 불투명, 반투명, 나이아가라 파티클 시스템과 같은 주요 프리미티브 타입 및 머티리얼에서 작동합니다. 또한 월드와 일인칭 공간 간의 트랜스폼을 위해 새로운 블루프린트 기능이 추가되었습니다.
로컬 포그 볼륨

로컬 포그 볼륨(Local Fog Volume)은 손쉽게 배치하여 빠르고 간단하게 로컬 포그 베리에이션을 생성할 수 있는 액터입니다. 로컬 포그 볼륨은 볼류메트릭 포그와 달리 모든 플랫폼 및 엔진 퀄리티에서 작동하므로 저사양 및 고사양 플랫폼 모두 적합할 뿐 아니라 다른 포그 및 라이팅 시스템에서 일관된 비주얼을 제공합니다.
로컬 포그 볼륨은 언리얼 엔진 5.5에서 정식 버전으로 제공됩니다.
자세한 내용은 로컬 포그 볼륨을 참조하세요.
라이트 함수 아틀라스

새로운 라이트 함수 아틀라스(Light Function Atlas)는 라이트 함수 머티리얼을 각 라이트에 인라인하여 재계산하는 대신 라이트 함수를 텍스처로 베이킹한 다음 씬에 투영하는 방식으로 라이트 함수를 사용함으로써 다양한 패스의 렌더링 속도를 높여줍니다. 이로 인해 GPU 시간이 크게 절약됩니다. 이 방식에도 몇 가지 제한이 있기는 하지만, 컬러 라이트 함수뿐만 아니라 메가라이트와 함께 라이트 함수를 사용할 수 있다는 장점이 있습니다.
자세한 내용은 라이트 함수를 참조하세요.
서브스트레이트(베타)

서브스트레이트 머티리얼이 5.5 출시 버전부터 베타 상태로 전환되었습니다. 아직 대규모 프로덕션에서 테스트되지는 않았지만 레거시 머티리얼의 모든 기능을 지원하며, 언리얼 엔진이 디플로이되는 모든 플랫폼을 지원합니다. 머티리얼의 쿠킹 시간과 메모리 사용량 향상은 아직 진행 중이며, 서브스트레이트가 완전한 정식 버전으로 전환될 때까지 계속될 예정입니다.
불균질 볼륨(베타)
나이아가라에서는 불균질 볼륨(Heterogeneous Volume, HV)을 통해 VDB 볼륨을 스파스 볼륨 텍스처로 임포트하여 렌더링에 사용할 수 있습니다. 언리얼 엔진 5.5에서는 다음과 같이 HV에 여러 향상점이 도입되었습니다.
- 9세대 콘솔 퍼포먼스를 위한 엔진 퀄리티 제어
- 다중 오버랩 HV 렌더 기능
- 간접광 사용 시 HV의 자체 섀도잉 사용
- 패스 트레이싱을 포함하여 무비 렌더 그래프의 홀드아웃 지원
볼류메트릭 클라우드 머티리얼 업데이트
새로운 볼류메트릭 클라우드(Volumetric Cloud) 머티리얼은 이전에 엔진 콘텐츠와 함께 제공되었던 머티리얼을 발전시킨 것입니다. 5.5 출시 버전에서 이 머티리얼은 다양한 타입 및 셰이프의 클라우드에 원하는 외관을 보다 단순하고 명확하며 간단하게 구현할 수 있게 환경설정할 수 있도록 수정되었습니다.

이 머티리얼은 원래 버전을 완전히 대체하므로 오리지널 볼류메트릭 클라우드 머티리얼을 사용하는 템플릿과 프로젝트는 모두 5.5 버전에서 자동으로 업데이트될 것입니다. 이로 인해 일부 프로젝트의 룩이 달라지거나 올바른 리소스를 찾는 데 다소 어려움이 있을 수 있습니다. 프로젝트가 이전 머티리얼에 의존하는 경우, 가장 간단한 해결 방법은 5.4 이전 버전에서 5.5 버전으로 이주하는 것입니다.
자세한 내용은 볼류메트릭 클라우드 머티리얼을 참조하세요.
버추얼 프로덕션
버추얼 스카우팅

언리얼 엔진 5.4에서 새롭게 도입되었던 버추얼 스카우팅(Virtual Scouting) 툴은 VR 콘텐츠 브라우저, 블루프린트로 커스터마이징이 가능한 기즈모의 추가, 그리고 툴세트 전체의 커스터마이징 기능을 높인 마무리 작업을 통해 한층 향상되었습니다.
이러한 향상을 통해 언리얼 엔진 5.5에서는 버추얼 스카우팅이 정식 버전 으로 제공됩니다.
사용자는 이제 OpenXR 호환 HMD(Oculus와 Valve Index는 기본적으로 지원됨)를 통해 이 강력한 경험에 즉시 액세스할 수 있으며, 개발 팀은 커스텀 툴과 UX 빌드를 위한 광범위한 API 를 갖추게 되었습니다.
레거시 버추얼 스카우팅 툴은 언리얼 엔진 5.5에서는 지원되지만 언리얼 엔진 5.6에서는 제거될 예정입니다.
라이브 링크 허브(베타)

언리얼 엔진 5.5에서 라이브 링크 허브(Live Link Hub) 가 베타 버전으로 전환됩니다. 이번 출시 버전에서는 전문가를 위한 기능에 초점을 맞추면서도 UEFN에 중점을 둔 초기 버전의 사용 편의성을 유지했습니다.
-
서드파티 플러그인 - 이제 라이브 링크 허브에서 언리얼 에디터 라이브 링크 플러그인을 로드하여 라이브 링크 데이터 소스의 전체 서드파티 생태계를 활용할 수 있습니다.
-
데이터 리타이밍 - 이제 라이브 링크 허브는 단일 서브젝트를 타임코드 소스로 선택하고 다른 모든 서브젝트의 동기화를 지원하여 사용자가 모든 서브젝트를 공통 프레임 레이트로 설정할 수 있게 해줍니다. 덕분에 테이크 레코더에서 라이브 링크 데이터를 녹화할 때 일관성을 유지할 수 있으며, 라이브 링크 컨트롤러 입력 및 XR 소스와 같은 기본적으로 타이밍 데이터가 없는 서브젝트에 타이밍 데이터를 추가할 수 있습니다.
-
타임코드 지원 - 라이브 링크 허브는 어태치된 모든 클라이언트에 대한 타임코드 제공자 역할을 할 수 있습니다. 따라서 SDI 하드웨어 없이도 모든 엔진 세션을 동기화하는 프로세스를 간소화할 수 있습니다.
-
버추얼 서브젝트 - 이제 라이브 링크 허브에서 버추얼 서브젝트가 지원됩니다. 여러 애니메이션과 기본 역할 서브젝트를 단일 서브젝트에 병합하여 엔진 내에서 한층 간편하게 사용할 수 있습니다.
-
스켈레탈 어태치먼트 - 이제 버추얼 서브젝트가 스켈레탈 어태치먼트를 지원합니다. 모캡 글러브 데이터와 바디 데이터를 하나의 라이브 링크 서브젝트에 병합할 수 있습니다.
-
녹화 - RAW데이터를 녹화하여 나중에 재생할 수 있게 해줍니다. 녹화는 비동기 방식으로 기록되며 녹화가 완료되는 즉시 액세스할 수 있습니다.
라이브 링크 OpenVR

라이브 링크 XR 사용자 피드백을 반영하여 버추얼 프로덕션 워크플로에 대응하는 라이브 링크 OpenVR(LiveLinkOpenVR) 을 제작했습니다. 라이브 링크 OpenVR은 동일한 UI와 UX를 갖추고 있지만 SteamVR 트래커 -> 라이브 링크 워크플로를 위해 특별히 제작되었습니다. 라이브 링크 OpenVR 은 라이브 링크 허브 와 언리얼 엔진 내 라이브 링크 에서 사용할 수 있습니다. 명령줄 실행인자는 필요하지 않으며, VR 렌더링은 여전히 액세스할 수 있습니다.
퍼포먼스 캡처를 위한 타임코드 향상

-
시퀀서 TC - 이제 Stat SequenceTimecode 명령을 통해 뷰포트에서 시퀀서 타임코드를 볼 수 있습니다. 또한 시퀀스 타임코드와 테이크 레코더 타임코드도 볼 수 있습니다.
-
애니메이션 에셋 에디터 타임코드 - 애니메이션 시퀀스의 애니메이션 에셋 에디터에 타임코드가 커스텀 어트리뷰트로 임포트되었거나 테이크 레코더를 통해 루트 본에 플롯된 경우 이 타임코드가 표시됩니다.
-
라이브 링크 테이크 레코딩 - 라이브 링크 서브젝트 테이크 레코딩은 이제 일반 액터 레코딩과 동일한 타임코드 트랙을 수신하여 QA 타이밍 및 동기화를 수행할 수 있습니다.
-
ProRes 미디어 TC 지원 - 타임코드가 임베딩된 ProRes 파일을 사용하는 미디어 에셋에는 이제 타임코드 메타데이터가 포함됩니다. 따라서 시퀀서에서 자동으로 동기화할 수 있고, 애님 시퀀스 및 사운드웨이브 에셋과 동등한 수준의 기능을 제공합니다. 시퀀서 미디어 트랙 섹션은 이제 임포트된 동영상 파일에 TC가 있으면 올바른 TC를 수신합니다.
-
이미지 기반 미디어 TC 지원 - 이미지 미디어 파일에는 사용자가 시퀀서 타임라인에서 편집하여 자동 동기화를 지원할 수 있는 TC 메타데이터가 포함됩니다.
-
테이크 레코더 에서 서브프레임 지원 - 서브프레임은 이제 테이크 레코딩에서 플롯된 플로트 값으로 표시됩니다.
카메라 캘리브레이션 정확도 향상

이제 카메라 캘리브레이션 솔버는 캘리브레이터 트래킹 정보를 활용하여 렌즈 및 카메라 파라미터 추정 정확도가 대폭 향상되었으며, 트래킹 디바이스를 최대한 정밀하게 마운팅해야 원하는 결과를 얻을 수 있었던 불편함이 크게 줄어들었습니다. 또한 이 시스템은 렌즈 디스토션과 노달 오프셋을 동시에 해결하여 오퍼레이터의 전반적인 프로세스 속도를 높일 수 있습니다.
또한 이제 오버스캔 사용 시 어댑티브 해상도를 사용할 수 있으며, TSR을 사용하여 렌즈 디스토션을 적용할 수도 있으므로 시각적 퀄리티를 향상할 수 있습니다.
라이트 카드별 오버/언더 내부 프러스텀 제어

현재 라이트 카드가 내부 프러스텀 위에 있거나 아래에 있도록 하는 옵션이 제공되고 있기는 하지만, 이 세팅은 씬 내 모든 라이트 카드에 글로벌로 적용됩니다. 라이트 카드별로 제어할 수 있는 기능은 지금까지 많은 요청을 받았으며, 그 이유는 라이트 카드가 내부 프러스텀에 인접해 있어야 하지만 샷에 따라서는 선택적으로 오버 또는 언더해야 하는 상황이 자주 발생하기 때문이었습니다.
레벨 비저빌리티 제어

서브 레벨 토글은 스테이지 오퍼레이터의 일반적인 워크플로이며, 여러 사용자와 함께 이 작업을 수행하려면 에디터의 '비저빌리티(Visibility)' 체크박스 대신 '게임에서 숨김(Hidden in Game)' 체크박스를 사용해야 합니다. '레벨(Levels)' 창에는 에디터의 '비저빌리티' 옵션만 표시되므로 현재의 워크플로에서는 체크박스 두 개를 동기화하고 여러 사용자에게 트랜잭션을 시도하는 CVar를 선택해야 합니다. 이 과정은 취약하고 오류가 발생하기 쉬우며, 스테이지 오퍼레이터가 동기화되지 않은 경우 문제를 쉽게 해결할 수 있는 방법도 없습니다. 따라서 투명성과 단순성을 확보하기 위해서는 '레벨' 창에 두 체크박스가 모두 표시되어야 합니다.
컬러 그레이딩 패널

ICVFX 에디터의 향상된 컬러 그레이딩 UX는 포스트 프로세스 볼륨 및 색 보정 영역에서 컬러 그레이딩 작업을 수행하는 모든 언리얼 엔진 아티스트에게 적용할 수 있으며, 프로젝트에 nDisplay가 포함되어 있지 않더라도 적용할 수 있습니다. 따라서 이 패널은 일반 에디터용으로 전환되어 모든 아티스트가 사용할 수 있게 될 것입니다.
ICVFX용 SMPTE 2110 정식 버전

프로덕션이 SMPTE 2110 기반으로 전환하기 시작함에 따라, 언리얼 엔진은 실제 인카메라 VFX 프로젝트의 요구 사항을 충족할 수 있도록 IP 비디오 신호 플로를 향상하는 데 우선순위를 두고 지속적인 노력을 기울여 나갈 것입니다. 포괄적인 워크플로에 대한 초기 지원은 언리얼 엔진 5.3에서 도입되었고, 언리얼 엔진 5.5의 SMPTE 2110 정식 버전은 다음과 같은 기능을 제공합니다.
-
언리얼 엔진의 코어 SMPTE 2110 지원에 대한 다양한 안정성 향상
-
시스템에서 프레임록 손실을 자동으로 감지 및 복구하여 지속적인 동기화 유지
-
타임코드 제공자로 PTP 사용
-
타임코드 정렬 2110 외부 미디어 입력
-
2110 미디어 소스에 대한 OpenColorIO 지원
시네카메라 및 MRQ에 대한 오버스캔

CineCameraActor 는 이제 오버스캔 배수 를 지원합니다. 따라서 프레임의 가장자리에 추가 픽셀을 렌더링하여 스크린 스페이스 포스트 프로세싱 정확도를 높이거나, 포스트에서 카메라 셰이크를 추가하거나, 렌즈 디스토션 을 통해 이미지를 정확하게 왜곡할 수 있습니다.
오버스캔 은 CineCameraActor와 무비 렌더 큐 에서 지원됩니다.
버추얼 카메라 - 포스트 스무딩
버추얼 카메라의 이동을 디바이스에서 변경사항이 유지되는 방식으로 직접 부드럽게 처리할 수 있습니다. 원본 이동은 항상 보존되므로 데이터 손실이 발생하지 않습니다!
버추얼 카메라 - 사진 및 북마크 브라우저

이제 버추얼 카메라로 사진을 찍으면 프로젝트의 저장 폴더에 바로 드롭되어 손쉽게 검토하고 공유할 수 있습니다.
또한 사진을 스냅하면 북마크가 생성되어 새로운 북마크 브라우저(Bookmark Browser)에서 확인한 후 빠르게 다시 돌아올 수 있습니다. 북마크 브라우저로는 시각적 인터페이스를 통해 북마크를 검색하고, 정렬하고, 즐겨찾기를 추가하고, 이름을 변경할 수 있습니다.
버추얼 카메라 - 테이크 캐러셀

새로운 테이크 캐러셀(Take Carousel)을 사용하여 녹화를 손쉽게 검토하고 앞뒤로 검색할 수 있습니다! 캐러셀을 스와이프하여 녹화를 미리 보고 빠르게 로드하여 검토해 보세요.
버추얼 카메라의 메인 화면에서 이전 녹화 프리뷰 섬네일을 통해 캐러셀을 액세스할 수 있습니다.
멀티 유저 리플리케이션(베타)

멀티 유저 리플리케이션(Multi User Replication)은 일련의 UX 및 기술 향상 작업을 거친 끝에 공식적으로 베타 버전으로 전환되었습니다. 사용자는 멀티 유저 리플리케이션을 통해 프로퍼티와 액터를 지정하여 멀티 유저 세션의 다른 클라이언트에 실시간으로 리플리케이트할 수 있으며, 리플리케이션이 자주 필요한 경우에도 트랜잭션에 변경사항을 래핑하고 실행 취소 버퍼가 넘치는 것을 방지할 수 있습니다. 또한 프리셋 저장 및 로드를 통해 리플리케이션 구성을 한층 더 빠르게 관리할 수 있습니다.
개발자 반복작업
젠 서버 - 빠른 빌드 팜 쿠킹을 위한 스냅샷(실험 단계)

쿠킹을 수행하려면 동일한 데이터를 다시 쿠킹하지 않도록 빌드 에이전트에서 일관된 상태를 유지해야 합니다. 이는 다음에 쿠킹 작업을 수행할 때 정확하게 동일한 에이전트가 할당된다고 보장할 수 없기 때문입니다.
젠 서버 스냅샷이 쿠킹 작업의 상태를 저장하므로 이 스냅샷을 빠르게 복원하여 다른 빌드 에이전트의 새 작업에 재사용할 수 있어 빌드 팜 전체에서 점진적으로 쿠킹 속도가 빨라집니다.
젠 서버 - 타깃 플랫폼에 스트리밍(실험단계)

젠 서버 는 언리얼 엔진에서 사용하는 파생 데이터 캐시(Derived Data Cache, DDC)의 로컬/공유 데이터를 위한 새로운 아키텍처입니다. 출력을 디스크에 느슨한 파일로 저장하지 않아도 되므로 데이터 조건 설정 및 읽기/쓰기 퍼포먼스가 향상됩니다.
전체 사본을 디플로이할 경우 많은 시간이 소요되므로 서버 컴포넌트는 쿠킹된 데이터를 로컬 네트워크를 통해 타깃 플랫폼에 직접 스트리밍함으로써 게임 클라이언트와 게임 서버 모두에서 '타깃에서 플레이' 반복작업 속도를 높여줍니다.
언리얼 젠을 공유 DDC로 사용

언리얼 엔진 5.5에서는 이제 Windows 호스트 시스템에서 젠 서버를 공유 DDC로 디플로이하는 기능이 정식 버전으로 제공됩니다.
DDC 스토리지를 통한 네트워크 파일 공유가 새로운 언리얼 젠 스토리지 서버 아키텍처로 대체됩니다. 젠 서버는 지연시간을 더 잘 처리할 수 있도록 네트워크 커뮤니케이션에 최적화되었으며, DDC 스토리지 레벨에서 동기화된 IO를 수행하지 않고도 원격 컴퓨터를 대상으로 데이터를 읽고 쓸 수 있습니다.
Linux 플랫폼에서의 젠 공유 DDC는 아직 베타 단계입니다.
UBA C++ 및 셰이더 컴파일

언리얼 엔진 5.5 출시 버전에서는 언리얼 빌드 액셀러레이터(Unreal Build Accelerator, UBA)가 Windows 호스트 빌드 시스템에서 정식 버전으로 제공됩니다. UBA는 C++ 및 셰이더 컴파일용 로컬 및 분산형 컴파일 솔루션으로, 언리얼 빌드 툴(Unreal Build Tool, UBT) 및/또는 호드의 원격 빌드(컴퓨트 작업) 시스템과 함께 연동하여 사용됩니다. 언리얼 호드는 작업 풀 코디네이터 역할을 수행하며, 빌드 팜 리소스에 UBA 에이전트 헬퍼 리소스를 할당합니다. UBA는 로컬 데이터를 전송하고 원격 작업을 실행한 후 결과를 반환합니다.
macOS 및 Linux 호스트 빌드 시스템에서는 C++ 컴파일이 안정적이고 프로덕션 용도로 사용할 수 있지만 이러한 플랫폼에서 셰이더 컴파일은 아직 베타 단계입니다.
쿠킹 결과물로 젠 사용(베타)

이전에는 쿠킹 결과물 데이터가 디스크에 느슨한 파일로 저장되어 파일 시스템 프로세스 오버헤드를 유발했습니다. 이제는 프로젝트 세팅에서 활성화된 경우 플랫폼에서 쿠킹된 데이터가 언리얼 젠 스토리지 서버에서 로컬 또는 원격으로 저장되어, 로컬 및 네트워크 I/O 퍼포먼스를 위한 데이터 관리를 강화합니다.
언리얼 호드 CI 및 원격 실행

언리얼 호드 지속적 통합 및 원격 실행은 언리얼 엔진 5.5에서 공식적으로 정식 버전으로 제공됩니다.
호드(Horde)는 모든 언리얼 엔진 개발 팀을 위해 디자인된 '즉시 사용 가능한' 지속적 통합 솔루션입니다. 호드는 Perforce를 활용한, 수평 확장 가능한 분산형 지속적 통합 및 빌드 플랫폼 시스템으로, 언리얼 엔진 개발자 반복작업 툴 및 워크플로와 긴밀하게 통합되어 있습니다.
에디터에서 기본적으로 젠 로더 활성화
새로운 젠 로딩 아키텍처는 언리얼 엔진 5.5에서 정식 버전으로 제공되며, 기본적으로 활성화됩니다. 젠 로더는 오버헤드를 줄여주고 에셋 로딩 경로를 최적화하여 에디터 시작, 맵 로딩, 에디터에서 플레이(Play In Editor, PIE)에 로딩은 물론 다양한 쿠킹 프로세스에 이르기까지 퍼포먼스를 향상합니다.
모션 디자인
클로너 및 이펙터 UX 향상

최신 출시 버전의 클로너 및 이펙터는 강력한 새 기능이 추가되어 창작 워크플로를 크게 향상합니다. 이펙터에는 이제 매끄럽게 오브젝트를 분산하기 위한 밀어내기, 동적으로 비주얼을 제어하기 위한 파티클 컬러, 조작의 유연성을 높이기 위한 볼륨 반전 이 포함됩니다. 이 외에도 토러스 및 방사형 과 같은 새로운 셰이프가 제공되어 디자인의 가능성이 확장되었습니다. 또한 클로너는 고급 파티클 이미터 워크플로를 지원하여 사실적인 인터랙션을 위해 포인트 기반 다이내믹과 함께 파티클을 효과적으로 스폰 및 관리할 수 있게 해줍니다. 다양성을 더해주는 인스턴스와 스태틱 메시를 생성하는 기능은 효율성과 정밀함을 추구하는 아티스트에게 없어서는 안 될 필수 업데이트가 될 것입니다.
클로너 및 이펙터 근접성 이펙트

이펙터 시스템은 클로너 파티클에 컬러를 입히는 강력한 솔루션을 제공하며, 클로너와 머티리얼 시스템 모두와 원활하게 통합됩니다. 이펙터와 클로너 시스템 간에 데이터를 전송하여 광범위한 클론 세트에 걸쳐 파티클 컬러를 직관적으로 적용하고 제어할 수 있습니다. 이 시스템은 동적이고 응답성이 뛰어난 컬러 이펙트를 보장하므로 수작업을 통한 조정 없이 복잡한 시각적 결과를 손쉽게 달성할 수 있게 해줍니다.
클로너 및 이펙터 파라미터
- 이펙터 수
- 랜덤
- 메시 인덱스
- 정규화된 수명
- 인덱스
- 수
- 컬러
- 이펙터 가중치
- 진행률
- 메시 수
- 위치
- 속도
- 정규화된 속도
클로너 및 이펙터 콜리전

클로너와 이펙터는 이제 강력한 파티클 및 메시 콜리전 기능을 통해 복잡한 프로시저럴 이펙트와 다이내믹 인터랙션을 지원합니다. 클론들은 서로 효과적으로 충돌하여 원치 않는 교차를 방지할 수 있으며 동시에 환경 내에 있는 다른 메시와도 인터랙션할 수 있습니다. 이렇게 추가된 콜리전 기능은 보다 현실감이 넘치고 세부적으로 제어할 수 있으므로 복잡한 시뮬레이션과 향상된 비주얼 이펙트를 실현할 수 있게 해줍니다.
밀어내기 이펙터

밀어내기 이펙터(Push Apart Effector)는 클로너를 이펙터의 중심점으로부터 밀어내도록 디자인된 강력한 툴입니다. 포스 필드와 유사한 이펙트를 생성하는 데 이상적인 이 이펙터는 오브젝트들을 보다 세부적으로 제어하고 동적인 공간 인터랙션을 적용할 수 있게 해주므로 프로젝트의 유연성과 정밀도를 향상시킬 수 있습니다.
머티리얼 디자이너 PBR 워크플로

머티리얼 디자이너는 이제 완전한 PBR 워크플로우를 지원하여, 아티스트가 복잡한 머티리얼을 손쉽게 제작할 수 있는 방법을 제공합니다. . 각 채널은 스태킹 시스템을 갖추고 있어 사용자가 여러 이미지, 컬러, 노이즈 패턴을 레이어링하여 정교한 머티리얼 디자인을 구현할 수 있습니다. 이 워크플로에는 또한 멀티 텍스처 드래그 앤 드롭 기능이 포함되어 있으므로 머티리얼 생성 프로세스를 빠르고 효율적으로 수행할 수 있습니다.
머티리얼 디자이너 텍스처 세트

머티리얼 디자이너가 이제 텍스처 세트에 대한 드래그 앤 드롭 기능을 완벽하게 지원하므로 머티리얼 생성 프로세스를 간소화할 수 있게 되었습니다. 아티스트는 각 슬롯에 대한 이름 매칭과 ORM 과 같은 특정 채널을 식별하기 위한 채널 패킹을 통해 머티리얼을 빠르고 효율적으로 제작할 수 있습니다. 이러한 기능을 활용하면 워크플로를 가속화할 수 있어 머티리얼 개발을 보다 빠르고 직관적으로 만들어 줍니다.
머티리얼 디자이너 이펙트

머티리얼 디자이너는 이제 색 보정, 디스토션, 제너레이터 및 블러 같은 다양한 머티리얼 이펙트를 제공하므로 복잡한 머티리얼을 보다 빠르고 직관적으로 생성할 수 있습니다. 아티스트는 이러한 이펙트를 손쉽게 적용하고 프로시저럴하게 토글할 수 있습니다. 또한 시퀀서에서 모든 이펙트를 애니메이팅할 수 있으므로 복잡하고 다이내믹한 비주얼을 개발할 수 있습니다.
텍스트 애니메이터

변경사항이 유지되는 프로시저럴 방식의 기능이 제공되므로 이제는 애니메이터가 언리얼 엔진에서 텍스트 애니메이션을 손쉽게 생성할 수 있습니다. 이러한 툴을 사용하면 개별 문자를 정확하게 타기팅하여 역동적이고 흥미로운 텍스트 이펙트를 구현할 수 있습니다. 변경사항이 유지되므로 수월하게 조정할 수 있고 크리에이티브 프로세스 전반에 걸쳐 아티스트의 제어 능력과 유연성을 강화할 수 있습니다.
프로퍼티 애니메이터

애니메이터는 언리얼 엔진에서 프로시저럴 애니메이션을 통해 몇 번의 클릭만으로 위치, 스케일, 회전, 비저빌리티 등 대부분의 프로퍼티를 제어할 수 있는 강력한 기능을 제공합니다. 최신 출시 버전에서는 팝업 스타일 이펙트에 적합한 부드러운 전환 및 루핑 애니메이션을 위해 새로운 커브 애니메이터가 도입되었습니다. 향상된 시퀀서 지원을 통해 이제 애니메이터를 트랙으로 추가할 수 있으므로 모든 프로시저럴 애니메이션을 보존하면서 드래그 앤 드롭으로 타이밍을 손쉽게 조절할 수 있습니다. 추가 기능으로는 페이드 인/아웃 트랙과 함께 효율적인 워크플로우를 위한 복사, 붙여넣기, 완전한 프리셋 지원이 포함됩니다.
트랜지션 로직

생방송에서는 화면상의 여러 엘리먼트를 끊김없이 표현하고 이들 간의 부드러운 전환이 무엇보다 중요합니다. 트랜지션 로직(Transition Logic)은 다양한 온스크린 엘리먼트를 '레이어'에 할당하여 생방송 중 엘리먼트가 들어오고 나가는 것을 정밀하게 제어하는 데 핵심적인 역할을 합니다. 디자이너는 이 기능을 통해 그래픽 시스템을 지능적으로 구성하고, 각 엘리먼트가 화면에 의도한 대로 정확하게 나타나고 사라지도록 하여 임팩트 있는 라이브 브로드캐스트에 필수적인 수준의 정밀도를 제공할 수 있습니다.
트랜지션 로직 기능:
-
트랜지션을 결정하는 트랜지션 트리
-
레이어에 여러 엘리먼트 추가
-
단일 레벨에서 엘리먼트에 태그를 지정하면 단일 그래픽을 여러 부분으로 분할할 필요 없이 동적으로 트랜지션할 수 있습니다.
-
트랜지션 스테이트 트리를 사용하면 간소화된 사전 구성의 이점을 살리면서도 선택적으로 복잡한 작업도 원활하게 수행할 수 있습니다.
시뮬레이션 및 VFX
카오스 데이터플로 에디터(실험단계)

5.5 출시 버전에서 실험단계로 제공되는 데이터플로 에디터 그래프를 사용하면 노드 기반 환경 내에서 에셋을 프로시저럴 방식으로 생성할 수 있습니다. 그래프 구현은 풀 기반 평가를 활용하여, 그래프의 노드가 입력의 평가에 따라 캐시된 출력 상태를 생성합니다. 데이터플로 에셋은 시뮬레이션 시스템의 프로시저럴 방식의 제작 및 구성을 지원하는 데 사용됩니다. 예를 들어 카오스 클로스 시스템은 데이터플로를 사용하여 Marvelous Designer에서 의상을 임포트하고 구성합니다.
5.5에서 업데이트된 사항은 다음과 같습니다.
-
Reroute 노드
-
복사 및 붙여넣기
-
더 나은 실행 취소 지원
-
지원 중단 지원
-
다이내믹 입력
-
핀 표시/숨기기
-
코멘트 컬러 지정 기능
-
비활성화된 노드 회색 표시
-
노드 버전 관리(개발자용)
-
모든 타입 지원
카오스 데이터플로 에디터에 대한 자세한 내용은 데이터플로 그래프 문서를 참고하세요.
카오스 플레시(실험단계)

언리얼 엔진 5.5에서 실험단계인 카오스 플레시(Chaos Flesh)는 애니메이팅된 간단한 단일 머슬, 단순한 ML 예시, 전체 머슬 시뮬레이션을 완성하는 데 중점을 두었습니다. 현재 팻 레이어 시뮬레이션을 작업하고 있으며, 남은 과제로는 동일한 그래프에서 머슬과 팻 사이의 스태틱 컨스트레인트 세팅, 제어된 스켈레탈 메시의 외관 유효성 검사, 지오메트리 캐시에서 스켈레탈 메시의 ML 모델 트레이닝 등이 있습니다.
카오스 비주얼 디버거(베타)

언리얼 엔진 5.4에서 베타 버전으로 출시된 카오스 비주얼 디버거(Chaos Visual Debugger)는 피직스 시뮬레이션(인에디터 또는 패키징된 빌드)의 상태를 기록할 수 있는 툴로, 시간대를 스크럽하며 시각화하거나 오브젝트 레벨별로 기록된 데이터를 확인할 수도 있습니다.
카오스 비주얼 디버거는 언리얼 엔진 5.5에서 아직 베타 단계이지만, 몇 가지 새로운 기능과 향상점이 추가되었습니다.
새로운 기능
-
씬 쿼리 브라우저(Scene Query Browser): 이제 특정 프레임에서 생성된 모든 씬 쿼리를 확인하고 새로운 전용 씬 아웃라이너 창에서 태그 이름, 타입 등으로 검색할 수 있습니다.
-
기록된 출력 로그: CVD는 이제 언리얼 인사이트에서와 유사하게 기록된 출력 로그를 표시할 수 있습니다. CVD 내에서 원하는 프레임으로 스크럽하면 올바른 로그 라인이 선택되고 시각화됩니다. 또한 아무 로그 라인이나 선택하면 해당하는 프레임이 시각화됩니다.
-
네트워크 틱 동기화 모드: PIE 세션에서 CVD는 이미 서버 및 클라이언트 데이터를 기록할 수 있었지만 동기화에는 타임스탬프가 사용되었습니다. 5.5에서는 새로운 '네트워크 틱(Network Tick)' 동기화 모드가 도입되어 클라이언트 측 예측을 고려하여 시각화를 예상되는 상태로 표시하는 데 필요한 오프셋을 계산하고 적용합니다. 이 모드에서는 서버와 클라이언트 간에 차이가 발생할 경우 네트워크 동기화가 해제되었음을 나타냅니다.
-
콜리전 지오메트리 인스펙터(Collision Geometry Inspector): 새로운 디테일 패널을 통해 전체 파티클/리지드 바디뿐만 아니라 콜리전 지오메트리별로 기록된 데이터를 볼 수 있게 되었습니다. 이 패널은 모든 카오스 데이터를 처리하고 언리얼 에디터에서 사용되는 세팅으로 다시 디코딩합니다. 예를 들어 셰이프가 쿼리 전용인지, 쿼리 및 피직스인지, 콜리전 채널 및 콜리전 채널 응답 행렬인지 표시합니다.
-
최근 파일: 이제 CVD에서 마지막으로 열었던 파일 5개까지가 기억되며, 파일 메뉴를 통해 평가할 수 있습니다.
-
가속 구조체: CVD는 이제 씬 쿼리 시스템에 의해 사용되는 가속 구조체를 기록 및 시각화합니다.
-
캐릭터 지면 컨스트레인트: 캐릭터 지면 컨스트레인트 데이터를 기록하고 시각화하는 기능이 추가되었습니다. 이는 물리 기반 캐릭터 무브먼트 시스템에서 사용되는 컨스트레인트 타입입니다.
-
일반 디버그 드로: 이제 C++의 매크로 또는 블루프린트의 전용 블루프린트 노드를 사용하여 스피어, 박스, 라인 등의 간단한 셰이프를 기록한 다음 나머지 시뮬레이션을 CVD에서 시각화할 수 있습니다.
향상점
-
퍼포먼스: 즉석 지오메트리 생성의 경우, 건너뛸 수 있는 작업은 제거하고 나머지 작업도 작업 스레드로 더 많이 이동하는 방식으로 향상이 이루어졌습니다. 향후 출시 버전에서도 이 영역은 계속 향상될 예정입니다.
-
메뉴 표시: 5.5에서는 메뉴 표시를 적절한 UE 툴 메뉴로 재구성하고 저장 지원을 추가했습니다. 이제 사용 가능한 모든 시각화 플래그가 하위 메뉴와 섹션으로 구성됩니다. 또한 시각화 플래그를 변경하면 새 세팅이 자동으로 저장됩니다(필요한 경우 디폴트로 되돌릴 수 있음).
-
파티클 컬러 지정: UE 5.4에서는 카오스 디버그 드로에서 사용되는 컬러 스킴을 사용하고 있습니다. 이 컬러 세트는 와이어프레임을 표현하기에는 적합하지만 솔리드에는 적합하지 않습니다. UE 5.5에서는 이제 보다 부드러운 컬러 스킴을 사용하며, 필요한 경우 변경할 수도 있습니다.
-
씬 쿼리: 이제 씬 쿼리 인스펙터가 콜리전 쿼리 응답 플래그를 디코딩하여 콜리전 채널 응답 행렬을 표시합니다.
카오스 디스트럭션

5.5의 카오스 디스트럭션 기능에서는 다음과 같은 향상이 이루어졌습니다.
언리얼 에디터 향상
-
지오메트리 컬렉션은 이제 다음과 같은 콜리전 모드를 사용할 때 콜리전을 올바르게 표시합니다.
-
플레이어 콜리전
-
비저빌리티 콜리전
-
메모리 향상
- 5.5에서는 지오메트리 컬렉션 컴포넌트와 해당 피직스 프록시의 메모리 풋프린트가 감소하면서 확장성이 향상되었습니다.
루트 프록시 전용 커스텀 렌더러
- 새로운 커스텀 렌더러가 추가되어 인스턴스드 스태틱 메시를 사용하여 루트 프록시 메시를 렌더링할 수 있습니다. 하지만 손상된 상태를 렌더링 할 때는 일반 렌더러를 사용합니다. 새 렌더러는 GeometryCollectionRootProxyRenderer 입니다.
데이터플로
-
지오메트리 컬렉션용 데이터플로 에디터에 시뮬레이션 뷰가 추가되었습니다. 이를 통해 그래프에서 생성된 최종 지오메트리 컬렉션을 확인할 수 있고, 선택된 노드의 결과를 표시하는 디버그 뷰도 제공합니다.
-
또한 에디터 프랙처 모드에서 사용할 수 있는 툴과 거의 일치하도록 몇 가지 새로운 노드가 도입 또는 향상되었습니다.
-
기존 프랙처 노드가 프랙처 에디터 툴의 파라미터와 더 잘 일치하도록 향상되었습니다.
-
새로운 Radial Point Distribution 노드
-
새로운 Mesh Cutter 노드
-
새로운 FixTinyGeo 노드
-
새로운 Recompute Normal 노드
-
새로운 Validate 노드
캐싱
- 이제 캐시 컬렉션에 디폴트 보간 모드의 한계를 해결하는 새로운 보간 모드가 추가되었습니다. 디폴트 보간 모드의 경우, 대규모 타임 스텝을 사용하거나 슬로우 모션으로 재생할 때 충분하지 않은 경우가 있습니다.
따라서 사용자가 다른 보간 메서드를 선택할 수 있도록 옵션을 추가했습니다.
-
쿼트 보간:
-
표준 쿼터니언 보간과 함께 일반적인 FTransform 블렌드 메서드를 사용합니다.
-
타임 스텝이 크거나 매우 작은 경우 제한이 있습니다(슬로 모션).
-
-
오일러 보간: 오일러 각도 공간에서 회전이 보간됩니다.
- 최단 경로를 따라 보간이 되지 않을 수 있습니다.
-
듀얼 쿼터니언 보간: 더블 쿼터니언 메서드를 사용하여 회전을 보간합니다.
-
극한 상황에서 가장 정확한 메서드입니다.
-
하지만 평가 속도가 약간 느릴 수 있습니다.
-

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

언리얼 엔진 5.5에서 실험단계인 모듈형 비히클 시스템은 실시간으로 비히클을 생성하고 파괴할 수 있는 비히클 시뮬레이션 플러그인으로, 컴포넌트를 동적으로 추가하거나 제거할 수 있습니다.
5.4에서 5.5로 넘어오면서 변경된 사항
고정된 스켈레탈 메시 토폴로지를 사용하는 기존 카오스 비히클 플러그인과 달리, 모듈형 시스템은 한층 뛰어난 유연성 덕분에 커스텀 시뮬레이션 모듈과 리와인드 리시뮬레이션을 통한 클라이언트 예측 및 서버 권한 피직스를 지원합니다. 비히클은 여러 GeometryCollection 액터로 빌드되며, 클러스터 유니언 액터 내에서 결합되어 스태틱 메시를 지원할 계획입니다. 시뮬레이션은 모듈형 방식을 지원하므로 시뮬레이션 트리에 컴포넌트를 할당해서기존 비히클과 새로운 비히클을 모두 생성할 수 있습니다.
모듈형 비히클에 대한 자세한 내용은 카오스 모듈형 비히클 문서를 참고하세요.
나이아가라 경량형 이미터(베타)
새로운 경량형 이미터(Lightweight Emitter)는 프레임마다 어떤 상태도 저장하지 않으며, 표시 가능한 프록시에 대해서만 계산된 데이터를 갖게 됩니다. 따라서 이미터 수를 대폭 늘릴 수 있으며, 제한적이지만 빠른 기능 세트를 통해 생산성을 높이고 단순한 행동에 대한 런타임 비용과 컴파일 시간을 크게 줄입니다.
경량형 이미터는 언리얼 엔진 5.4에서 실험단계 기능으로 도입되었으며, 언리얼 엔진 5.5에서는 이제 베타 버전으로 제공됩니다.
나이아가라 경량형 이미터에 대한 자세한 내용은 나이아가라 경량형 이미터 문서를 참고하세요.
나이아가라 데이터 채널
나이아가라 데이터 채널(Niagara Data Channel, NDC)을 사용하면 나이아가라 시스템 간에, 그리고 나이아가라와 언리얼 엔진의 다른 부분 간에 데이터를 전달할 수 있습니다. 한 가지 중요한 사용 사례는 NDC를 사용하여 대규모 공유 나이아가라 시스템에 이벤트를 주입하여 임팩트 FX 등의 퍼포먼스를 향상하는 것입니다.
NDC는 이제 언리얼 엔진 5.5에서 향상된 사용자 경험과 런타임 기능을 갖추고 정식 버전으로 제공됩니다.
데이터 채널에 대한 자세한 내용은 나이아가라 데이터 채널 문서를 참고하세요.
월드 제작
외부 데이터 레이어

이제 외부 데이터 레이어를 사용하여 월드 파티션 레벨 내의 액터를 특정 게임 피처 플러그인에 연결할 수 있습니다. 또한 데이터 레이어를 외부 데이터 레이어의 부모로 설정할 수도 있습니다. 이러한 연결로 생성되는 스트리밍 레벨은 런타임에서 설정할 수 있는 플러그인 활성화 시에만 주입됩니다.
데이터 레이어 에디터를 사용하여 외부 데이터 레이어에 액터를 할당, 이동 또는 제거할 수 있습니다. 잘못된 조합을 방지하기 위해 플러그인 종속성에 대한 유효성 검사가 추가로 수행됩니다.
외부 데이터 레이어를 사용하면 베이스 게임 콘텐츠에 영향을 미치지 않고도 여러 게임 피처 플러그인이 레벨에 액터를 추가할 수 있으므로 DLC 및 라이브 게임을 운영하는 데 이상적입니다.
월드 파티션 외부 데이터 레이어를 에디터 개인설정에서 활성화하고 Game Features 플러그인을 활성화해야 합니다.
스태틱 라이팅(실험단계)
월드 파티션 레벨 및 레벨 인스턴스에 스태틱 라이팅(Static Lighting)에 대한 실험단계 지원이 추가되었습니다. 라이트맵과 볼류메트릭 라이트맵 기법은 모두 CPU 라이트매스를 사용하여 지원됩니다.
월드 파티션 레벨에서 라이트맵 데이터는 액터 스트리밍 세팅에 따라 스트리밍하도록 그리드 셀별로 패키징됩니다. 볼류메트릭 라이트맵은 '월드 세팅(World Settings)' - '라이트매스(Lightmass)'에서 조정할 수 있는 독립적인 셀 크기 및 디스턴스를 사용합니다.
새로운 월드 파티션 스태틱 라이팅 커맨드릿 빌더가 제공되며, 월드 파티션 레벨에서 스태틱 라이팅을 로드하고 베이킹하는 데 권장됩니다.
이를 위해서는 프로젝트 세팅에서 스태틱 라이팅 허용을 활성화하고 DefaultEngine.ini
환경설정 파일에 r.AllowStaticLightingInWorldPartitionMaps=1
을 추가해야 합니다.
커맨드릿 예시:
-run=WorldPartitionBuilderCommandlet -AllowCommandletRendering -Builder=WorldPartitionStaticLightingBuilder -Build -LogCmds="WorldPartitionStaticLightingBuilder "
프로시저럴 콘텐츠 생성
GPU 연산(실험단계)

PCG 프레임워크에서 GPU 연산(GPU Compute) 지원이 추가되었습니다.
PCG GPU 연산을 사용하면 GPU 하드웨어의 일부 퍼포먼스를 병렬 및 연산 중심 프로세스에 활용할 수 있습니다. 내부적으로 PCG는 커널 그래프를 컴파일하여 GPU에서 연산을 수행합니다.
데이터는 CPU와 GPU 간에 원활하게 변환됩니다.
또한 GPU 씬에 직접 쓸 수 있으므로 퍼포먼스에 영향을 미치지 않으면서 대량의 스태틱 메시 인스턴스를 빠르고 효율적으로 스폰할 수 있습니다. 하지만 GPU 씬에 직접 쓸 경우 발생하는 충돌 및 간접광 지원 등의 제한은 고려해야 합니다.
첫 번째 실험단계 버전에는 다음이 포함됩니다.
-
커스텀 HLSL GPU 커널 노드: Point Processor, Point Generator, Custom HLSL 을 통해 사용자가 자신의 입력/출력 데이터와 스레드의 수를 정의할 수 있습니다.
-
포인트, 어트리뷰트, 텍스처 및 랜드스케이프 데이터에 대한 액세스
-
읽기, 쓰기 또는 출력을 위한 기본 함수 가 제공되고, 커널별로 커스텀 사용자 함수를 추가 할 수 있습니다.
-
오류 보고 및 구문 하이라이트를 지원하는 HLSL 에디터
-
업데이트된 포인트 복사 연산자 및 선택적 GPU 연산 지원
-
프로시저럴 인스턴스드 스태틱 메시 컴포넌트를 통해 GPU에서 직접 스태틱 메시 스폰 가능
-
체인으로 연결된 GPU 커널 이 단일 연산 으로 컴파일 및 실행됨
다음 버전에는 현재 라이브러리에서 더 많은 PCG 노드를 GPU에서 선택적으로 실행하도록 변환하고, 분기 지원을 추가하고, 헤드리스 서버 지원을 위한 CPU VM이 포함될 예정입니다.
그래머

프로시저럴 콘텐츠 생성 컨텍스트에서 '그래머(Grammar)'는 콘텐츠의 생성 또는 구성 방법을 정의하는 정형화된 규칙 시스템을 의미합니다. 이러한 규칙은 기호 또는 단어와 같은 간단한 표현을 사용하여 벽이나 기둥, 패널과 같은 작은 요소를 조합 또는 결합하여 울타리 또는 건물과 같은 더 복잡한 구조를 형성하는 방법을 기술합니다.
5.5에서는 PCG 프레임워크를 통해 그래머 사용을 지원할 수 있도록 몇 가지 새로운 노드가 도입되었습니다. 이러한 노드들을 사용하여 제공된 그래머에 따라 셰이프를 정의하고 분할할 수 있습니다.
노드
-
Select Grammar
-
Print Grammar
-
Clean Spline
-
Reverse Spline
-
Primitive Cross-Section
-
Spline to Segment
-
Duplicate Cross-Sections
-
Subdivide Segment
-
Subdivide Spline
그래머 구문
토큰:
리터럴: 공백을 제외한 모든 스트링
시퀀스: [a, b, c] 확률적 선택: { a, b, c } 우선순위 선택:
반복(디폴트: 1) 고정된 숫자: [a, b, c]3
0 이상: a*
1 이상: {a, b, c}+
확률적 선택의 가중치(디폴트: 1) 가중치 지정자: {a**:3**, [b, c]*:2, {d, e}+:1}
예시
[A, B*, C] [Entrance, {Corridor, Doors}*, Exit]
[Entrance, {Corridor+:2, Doors*}, Exit]
{[Entrance, Corridor, Exit], [Entrance, [Corridor, Doors]*, Exit]}
그래프 실행기 v2

새로운 버전의 PCG 그래프 실행기(Graph Executor) 는 멀티스레딩 애플리케이션에서 보다 효율적으로 작동하며 엔진 프레임 시간과 관계없이 PCG 작업을 실행할 수 있습니다.
이를 통해 응답성 및 프레임레이트에 대한 PCG 영향을 최소화하면서 에디터와 런타임 사용 사례 모두에서 실행 시간을 크게 향상할 수 있습니다.
또한 다음 CVar를 사용하여 에디터 및 런타임 모두에 대해 별도로 적용되는 실행 프레임 시간을 설정할 수 있습니다.
pcg.EditorFrameTime
pcg.FrameTime
지오메트리 처리

UE 다이내믹 메시 타입을 통해 PCG 내에서 직접 메시를 모델링, 수정, 조합 및 출력할 수 있습니다. 또한 단일 컨텍스트 내에서 여러 다른 사용 사례에 대해 모델링과 인스턴싱을 혼합할 수 있습니다.
예시: PCG 빌딩 제너레이터는 그래머를 사용하여 모델 인스턴스로 건물 측면을 채우는 동시에 옥상과 바닥에 고유 지오메트리를 생성할 수 있습니다. 생성된 옥상 지오메트리를 다시 샘플링하여 상단에 에셋을 스폰할 수 있습니다. 또한 Primitive Cross-Section 연산을 사용할 때 그래머를 적용할 자체 셰이프 모델을 생성할 수도 있습니다.
이와 더불어, 메시에서 연산을 수행할 때 PCG는 각 연산 간에 리소스를 스틸링하여 메모리 및 퍼포먼스의 효율성을 높일 수 있으므로 가능한 경우 높은 비용을 들여 데이터의 사본을 생성할 필요성을 줄여줍니다.
첫 번째 구현에는 다음이 포함됩니다.
-
다이내믹 메시 데이터 타입
-
리소스 스틸링
-
스태틱 메시에서 다이내믹 메시로 변환
-
비어 있는 다이내믹 메시 생성
-
다이내믹 메시 구하기
-
트랜스폼
-
병합
-
포인트에서 메시 덧붙이기
-
다이내믹 메시 스폰
-
디버그 노드 지원
-
스태틱 메시에 익스포트 및 에셋에 다이내믹 메시 저장
-
기존 메시 샘플러 연산자에서 다이내믹 메시 입력 지원
-
지오메트리 스크립트 함수를 사용하여 PCG 블루프린트 엘리먼트로 함수 기능을 확장할 수 있도록 완벽한 호환성 보장
스플라인 메시

PCG에서 메시를 스플라인에 쉽게 할당하기 위해 Create Spline Mesh 노드가 추가되어 스플라인 메시 액터를 생성하는 프로세스가 상당히 쉬워졌습니다.
데이터 레이어 지원

투명 데이터 레이어 할당에 대한 지원이 추가되어 외부 데이터 레이어를 포함하여 특정 데이터 레이어 가 할당된 PCG 컴포넌트에서 스폰된 콘텐츠는 생성된 아티팩트에 동일한 프로퍼티를 올바르게 할당합니다.
World Raycast 노드

PCG에서 레이 캐스팅 기능을 활용하기 위해 World Raycast 노드가 추가되었습니다.
무한, 스케일 조절된 벡터, 시작 포인트/끝 포인트가 정의된 세그먼트 기반 옵션을 포함하여 다양한 레이 캐스팅 모드가 제공됩니다. $Rotation.Up 같은 어트리뷰트를 사용하여 레이 방향을 오버라이드할 수 있으므로 원점 입력 포인트의 업 벡터를 활용하여 보다 세밀하게 제어할 수 있습니다.
측지, 푸아송, 각도 기반 분포와 같은 다양한 옵션을 갖춘 새로운 Create Points Sphere 노드가 추가되어 레이캐스트 로직을 단순화하는 데 도움이 됩니다.
또한 이제 모든 레이 캐스트 관련 노드(World Raycast, World Ray Hit Query 등)에서 UV, 임팩트 노멀, 렌더 머티리얼 같은 레이 히트 결과에서 더 많은 어트리뷰트를 검색 할 수 있습니다.
Pathfinding 노드

Pathfinding 노드는 포인트 데이터에서 A* 경로 탐색 검색 알고리즘에 대한 지원을 추가합니다.
탐색을 위해 포인트 데이터가 제공된 경우 Pathfinding 노드는 지정된 검색 반경 내에서 포인트를 검색하고, 가능하면 A* 검색 알고리즘을 활용하여 시작 위치부터 목표 위치까지 완전하고 최적화된 경로를 찾습니다. 휴리스틱(예측) 기법을 사용하여 경로를 따라 다음 포인트를 예측하고 이를 수정하여 퍼포먼스를 향상할 수 있지만, 이 경우 경로의 최적성이 더는 보장되지 않을 수 있습니다.
최종 경로가 존재할 경우 스플라인 데이터 또는 경로를 나타내는 정렬된 포인트 세트를 포함하는 포인트 데이터로 출력됩니다. 최종 경로를 설정할 수 없으면 대신 부분 경로를 출력하는 옵션이 제공됩니다.
각 단계 간에 선택적 레이캐스트 테스트를 수행하여 경로가 물리적 장애물을 통과하지 않도록 방지할 수 있으며, 어트리뷰트 기반 경로 선택 가중치를 사용하여 가파른 경사보다 평평한 표면 같은 특정 표면을 선호하도록 검색 알고리즘에 영향을 미칠 수 있습니다.
Elevation Isoline 노드

랜드스케이프와 같은 표면 데이터에서 등치선을 효율적으로 빌드할 수 있는 Elevation Isoline 추출 노드가 추가되었습니다. 이 기능은 특히 돌출부 근처와 경사면을 따라 에셋을 정확하게 배치하는 데 유용합니다.
생성된 출력은 최소 및 최대 높이, 증분 및 해상도를 설정하는 제어 기능을 통해 각 등치선에 대한 포인트 또는 스플라인 데이터가 될 수 있습니다.
Write to Niagara Data Channels 노드(실험단계)

PCG에 새로운 Write to Niagara Data Channel 노드 가 추가되어 나이아가라 시스템에 데이터를 직접 전송할 수 있습니다.
연결된 나이아가라 시스템은 나이아가라 데이터 채널(Niagara Data Channel, NDC)에 PCG 어트리뷰트를 써서 이미터를 스폰하거나 이 데이터를 시스템 자체의 입력으로 사용할 수 있습니다. 이를 사용하면 스폰된 특정 에셋 아래에 이미터를 배치하거나, 월드 앰비언스 시스템을 생성하거나, PCG 런타임 계층 생성 및 NDC 아일랜드를 사용하여 단일 시스템에 이미터를 즉시 추가하는 등 PCG 로직에 기반하여 런타임에서 컨텍스트별로 스폰할 수 있습니다.
이 기능을 사용하려면 Procedural Content Generation (PCG) Niagara Interop 플러그인 을 활성화해야 합니다.
나이아가라 데이터 채널에 대한 자세한 내용 여기에서 확인할 수 있습니다.
Save to PCG Data Assets 노드

Save to PCG Data Assets 노드를 사용하면 배치된 PCG 그래프 실행에서 직접 입력 데이터 컬렉션을 PCG 데이터 에셋에 저장할 수 있습니다. 이 노드는 대화창을 열거나 미리 정해진 위치에 저장할 수 있습니다.
이 노드는 그래프가 다시 실행될 때마다 다시 실행되지만 입력이 동일하면 실행되지 않습니다. 설명과 컬러도 지정할 수 있습니다.
이 기능은 다른 그래프에서 PCG 데이터 에셋으로 사용할 수 있도록 오프라인 정보를 수집하는 그래프를 빌드하는 데 유용합니다.
또한 이제는 PCG 에디터의 '어트리뷰트 목록 뷰(Attribute List View)' 창 내에서 직접 각 데이터 또는 전체 데이터 컬렉션을 익스포트할 수 있습니다. 디버깅을 위해 즉시 익스포트를 수행하거나 그래프 실행 컨텍스트 외부에서 나란히 데이터를 비교하는 데 도움이 됩니다.
빌더 세팅 및 빌드 메뉴

이전의 5.4 출시 버전에서는 PCG 컴포넌트를 하나의 레벨에서 생성하고 결과를 저장할 수 있는 월드 파티션 빌더가 제공되었습니다.
5.5에서는 매번 월드 파티션 빌더에 긴 실행인자 목록을 전달할 필요 없이 빌더 세팅을 지정할 수 있게 해주는 새로운 PCG 빌더 세팅 에셋이 도입되었습니다. PCG 빌더 세팅 에셋은 에디터의 PCG 콘텐츠 브라우저 메뉴에서 직접 생성하고 필요에 맞게 커스터마이징할 수 있습니다.
이 에셋은 다음과 같이 사용할 수 있습니다.
-
-PCGBuilderSettings=/PathToAsset
스위치를 사용하여 빌더 실행인자로 전달할 수 있습니다. -
글로벌 프로젝트 세팅으로 설정할 수 있습니다.
-
에디터에서 직접 새로운 빌드의 PCG 메뉴를 사용하여 현재 로드된 레벨에 대해 PCG 빌드를 트리거할 때 정의할 수 있습니다.
추가 노드 및 연산자

Custom HLSL, 그래머, 스플라인 및 세그먼트 조작, 지오메트리, 레이캐스트, Elevation Isoline, Pathfinding, 스플라인 메시, Save to PCG Data Assets, Write to Niagara Data Channel 연산자와 같은 새로운 기능과 함께 5.5에는 다음과 같은 여러 네이티브 PCG 엘리먼트가 도입되었습니다.
-
Attract: 가중치 값과 끌어당기기 거리를 기준으로 소스 데이터의 포인트 및 어트리뷰트를 타깃 데이터에 보간합니다. 포인트를 다시 그룹화하거나 근처의 끌어당기기 중앙으로 스케일 조절 또는 회전하는 어트리뷰트를 보간하는 데 유용합니다.
-
Collapse: 반복적인 검색 거리 한계치에 따라 포인트 및 어트리뷰트를 병합합니다. 인접 포인트를 조합하는 데 유용하며, Attract 노드와 함께 사용할 수 있습니다.
-
Blur: 지정된 거리 내에서 지정된 어트리뷰트에 공간 블러를 적용합니다.
-
Cluster: 기존 클러스터링 알고리즘을 사용하는 Cluster 노드는 월드 스페이스에서 '중심'에 대한 근접 위치를 공유하는 포인트 데이터에서 포인트 그룹을 식별합니다.
-
Random Choice: 비율 또는 고정된 엔트리 수를 기준으로 포인트 또는 어트리뷰트 세트 엔트리를 랜덤으로 선택합니다.
-
Create Points Sphere: 스피어 생성 모드(측지, 각도, 세그먼트, 랜덤, 푸아송)를 기반으로 포인트 스피어를 생성합니다.
-
Add Component: 템플릿 컴포넌트에서 또는 어트리뷰트에 저장된 클래스에서 지정된 액터에 입력 포인트별 컴포넌트를 추가합니다. 이를 위해 '타깃 액터' 데이터의 어트리뷰트를 사용하거나 기본적으로 PCG 컴포넌트의 오너를 사용합니다.
-
Get Attribute List: 어트리뷰트당 하나의 엔트리를 포함하는 입력 데이터별로 어트리뷰트 목록을 반환합니다. 또한 내부 타입 및 디폴트 값(스트링)을 출력하는 옵션이 제공됩니다.
-
Bounds from Mesh: 어트리뷰트에 제공된 스태틱 메시의 바운드를 기반으로 입력 데이터의 포인트 바운드를 업데이트합니다.
-
Create Collision Data: 모든 포인트가 콜리전을 갖춘 스태틱 메시인 것처럼 작동하는 데이터를 생성할 수 있습니다. 출력 데이터는 볼륨 샘플러와 호환되는 프리미티브 데이터 타입이며, 더 큰 정밀도를 위해 다른 노드의 '차이' 부분으로 사용할 수 있습니다.
-
Spawn Spline Component: 입력으로 제공된 스플라인 데이터별로 스플라인 컴포넌트를 스폰합니다.
-
Wait Until Landscape Ready: 랜드스케이프의 변경이 완료될 때까지 대기합니다. 랜드스케이프 업데이트를 무시하는 그래프/PCG 컴포넌트에서 사용할 수 있는 옵션(예: 랜드스케이프 트래킹 무시 옵션)과 함께 이 노드를 사용하면 루프를 생성하지 않고도 랜드스케이프 패치를 사용하여 액터를 배치하는 등 랜드스케이프에 영향을 미치는 그래프를 빌드할 수 있습니다.
-
Attribute Remove Duplicate: 어트리뷰트 값이 동일한 포인트 또는 어트리뷰트 세트 엔트리를 제거합니다.
-
Get Tags: 선택적으로 값(스트링)과 함께 태그당 하나의 엔트리를 포함하는 입력 데이터별로 어트리뷰트 목록을 반환합니다.
-
Data Tags to Attribute Set: 입력 데이터당 단일 엔트리가 포함된 어트리뷰트 세트를 반환합니다.
-
Sort Data by Tag Value:
Tag:Value
형식의 태그가 있는 경우와 같이 태그 값에 따라 오름차순 또는 내림차순으로 입력 데이터를 정렬합니다. -
Filter Elements By Index: 포인트 또는 어트리뷰트 세트를 필터링하여 지정된 인덱스만 포함된 새로운 데이터를 구합니다.
-
Parse String: 스트링을 어트리뷰트로 파싱하고 호환되는 PCG 타입으로 변환합니다.
-
Octree spatial queries: 블루프린트의 포인트 데이터 옥트리에서 공간 쿼리를 수행하는 새 함수를 추가합니다.
플랫폼
에디터 프리뷰

아티스트는 에디터 플랫폼 프리뷰를 통해 UE 에디터에서 머티리얼과 VFX 같은 콘텐츠를 반복작업하거나 디바이스에서 볼 수 있는 비주얼을 미리 볼 수 있습니다. 언리얼 엔진 5.5에서는 모바일 게임의 콘텐츠 개발에 도움이 될 수 있는 여러 부분이 향상되었습니다.
-
연결된 Android 디바이스 프로파일 캡처를 통해 특정 디바이스를 미리 볼 수 있습니다.
-
half16 플로트 정밀도 셰이더 에뮬레이션 지원(필요한 머티리얼의 경우)
모바일 렌더러

언리얼 엔진 5.5에서는 모바일 렌더러와 관련된 다양한 새로운 기능이 추가되었습니다.
-
포워드 모드는 이제 D-버퍼 데칼, 렉트 라이트, 캡슐 섀도 및 포인트 라이트 섀도를 지원합니다.
-
런타임 자동 PSO 프리캐싱 및 수동 PSO 수집 워크플로를 제공합니다.
-
스크린 스페이스 리플렉션을 지원합니다.
XR 해상도 스케일링
XR에서의 해상도 스케일링이 엔진의 나머지 부분과 더 잘 조화되도록 업데이트되었으며, OpenXR 컴포저 내에서의 업스케일링을 수행하는 새로운 업스케일링 모드를 사용할 수 있습니다(행동은 OpenXR 런타임에 따라 다를 수 있음).
-
vr.PixelDensity
의 이름이xr.SecondaryScreenPercentage.HMDRenderTarget
으로 변경되었으며, 이는 공간 업스케일링에만 사용할 수 있고 런타임에서 자주 변경하면 안 된다는 점을 반영하기 위한 것입니다. 데스크탑에서의r.SecondaryScreenPercentage.GameViewport
와 유사합니다. XR에서 데스크톱 CVar는 비활성화되며, 대신xr.SecondaryScreenPercentage.HMDRenderTarget
을 사용해야 합니다. 또한 이제 HMD의 이상적인 렌더 해상도에 대응하는 표준 값은 '1.0f'가 아닌 '100'입니다.xr.SecondaryScreenPercentage.HMDRenderTarget
은 최종 렌더링 타깃의 크기를 변경하고 해당 결과물을 OpenXR 컴포지터에서 공간적으로 자동 업/다운 스케일링하는 방식으로 작동합니다. 이 작업은 모바일 HDR을 끈 상태에서 모바일 렌더러를 사용할 때처럼 포스트 프로세싱을 사용할 수 없는 경우에도 수행할 수 있습니다.
-
언리얼 엔진은 이제 모바일 HDR을 끈 상태에서 모바일 렌더러를 사용할 때처럼 포스트 프로세싱을 사용할 수 없는 경우에도 XR에서 동적 해상도를 지원할 수 있습니다. 이 기능은 CVar
xr.MobileLDRDynamicResolution
을 사용하여 활성화할 수 있습니다. 동적 해상도를 사용하려면 일반적인 경우와 같이 이를 활성화해야 하며, 디바이스별 UE 플러그인을 통해 XR 디바이스에서 동적 해상도를 지원해야 합니다.
visionOS 2.0(실험단계)
visionOS 2.0 및 혼합 몰입 모드의 실험단계 지원으로 Metal을 통한 패스스루가 가능해졌습니다.
자세한 내용은 Apple Vision Pro 퀵 스타트 가이드를 참고하세요.
모바일 포워드 및 데스크톱 포워드 기능 동등성 확보
모바일 포워드(Mobile Forward) 렌더러 기능 업데이트 및 퍼포먼스 향상의 목표는 레거시 데스크톱 포워드(Desktop Forward) 렌더러와 기능적으로 동등한 수준에 도달하여 PC VR에서도 권장할 수 있는 렌더러로 자리를 잡는 것입니다. 5.5에서는 다음과 같은 기능에 대한 지원을 구현했습니다.
-
무버블 포인트/스포트라이트 IES 텍스처
-
캡슐 다이렉트 섀도
-
데칼
-
렉트 라이트
-
볼류메트릭 포그
-
나이아가라 파티클 라이트
-
무버블 포인트 라이트 섀도(d3d만 지원되며 Vulkan은 지원 안 함)
오디오
오디오 인사이트

오디오 인사이트(Audio Insights)는 오디오 프로파일링 및 디버깅을 위한 메인 툴입니다. 이번 출시 버전에서는 다음과 같은 독립형 모드와 추가적인 비주얼 디버깅 향상 기능을 제공합니다.
-
원격 연결을 위한 독립형 오디오 인사이트 모드
-
고주파 플로터 데이터
-
탭 레이아웃 저장
오디오 위젯

오디오 산업에서 오디오 위젯의 중요성이 점점 더 커지고 있습니다. 커스터마이징되고 시각적으로 매력적이고 잘 설계된 UI는 이제 산업 전반에서 채택되는 표준으로 자리잡고 있습니다. 언리얼 엔진은 뛰어난 시각적 표현을 갖춘 커스텀 오디오 위젯을 생성할 수 있는 시스템을 제공하여 손쉽게 커스터마이징할 수 있도록 현재 위젯 시스템을 향상하고 있습니다.
-
UMaterial을 기반으로 확장 가능한 위젯을 생성하여 디자이너가 일반 위젯을 위한 커스텀 UMaterial을 개발할 수 있도록 지원합니다.
-
UMaterial의 기본 구현을 제공합니다.
고려 사항
-
머티리얼 퍼포먼스가 UI 퍼포먼스에 미치는 영향
-
메타사운드에 대한 적절한 통합
메타사운드 사용성

이번 출시 버전에서는 메타사운드 와 오디오 모듈레이션 에 편의성과 관련된 다양한 향상이 이뤄졌습니다.
-
새로운 콘솔 명령
-
스페이스바로 그래프를 재생하기 전에 캔버스를 클릭할 필요가 없음
-
Get Last Index 헬퍼 노드
-
프리셋 워크플로에서의 변환 향상
-
드롭다운 메뉴에서 화살표 키 지원
-
사운드 프리뷰에 재생/정지 버튼 추가
-
빠른 입력 프로모션
-
단순 뷰 옵션
-
미연결 핀 숨김
-
우클릭으로 CB에서 MS 소스 생성
-
미사용 입력 지우기
-
웨이브 에셋에 GetName 추가
-
딜레이 라인 오디오 지우기
-
레퍼런스에서 찾기 지원
-
이외 다수
메타사운드 페이지

플랫폼 타깃에 따라 메타사운드 그래프 또는 디폴트 프로퍼티를 교체할 수 있습니다.
-
프리셋 지원
-
플랫폼별 입력, 프로퍼티를 커스터마이징할 수 있음
-
페이지 및 에디터 내 페이지 예비 스킴 프리뷰
-
게임플레이를 변경하지 않고도 저사양 플랫폼에서 한층 단순하고 비용이 낮은 그래프를 생성할 수 있음
메타사운드 상대 렌더 비용

메타사운드를 여러 개 또는 비교적 큰 규모의 메타사운드를 재생하면 상당한 CPU 시간이 필요할 수 있습니다. 제한된 플랫폼에서는 메타사운드가 CPU 예산을 많이 사용할 경우 CPU 병목 현상으로 인해 다른 게임 시스템에 영향을 미칠 수 있습니다. 메타사운드 상대 렌더 비용(MetaSound Relative Render Cost) 은 동적인 보이스 수를 사용하여 메타사운드의 유효한 '보이스 수'가 메타사운드의 실제 렌더링 비용을 보다 정확하게 반영할 수 있게 해줍니다. 제한된 플랫폼에서는 대규모 메타사운드가 여러 보이스를 계산하고 한 번에 디코딩되는 동시 웨이브의 수를 효과적으로 줄여줍니다.
-
직관적인 퍼포먼스 메트릭 제공
-
한층 뛰어난 CPU 예산 제한
-
플랫폼/CPU 독립적 메트릭
참고
다음을 통한 보이스 제한 지원:
-
CVAR au.EnableRelativeRenderCostVoiceLimit 1
-
메타사운드 소스가 재생되면 메타사운드 에디터의 왼쪽 하단에 상대 렌더링 비용이 표시됩니다.
-
au.debug.soundwaves 1
의 디버그 HUD에는 CPU 사용량 옆에 상대 렌더링 비용(Relative Render Cost, RRC)이 표시됩니다.
모델링
모델링 툴(베타)

언리얼 엔진 5.5의 모델링 툴에서는 다음과 같은 향상이 이뤄졌습니다.
-
Weld 및 Collapse
-
결합(Weld) 툴을 사용하면 이제 중간지점에서 결합됩니다. 새로운 'Weld To' 툴은 마지막 선택에 결합됩니다.
-
단일 트라이앵글 구멍을 막는 것과 같이 에지 병합이 적용되는 경우가 더 많아졌습니다.
-
결합(Weld) 툴과 연결(Bridge) 툴은 이제 두 그룹으로 나눠져만 있다면 각각의 그룹이 여러개의 에지로 구성되더라도 실행할 수 있습니다.
-
결합(Weld), 연결(Bridge) 및 병합(Collapse) 툴은 이제 적절한 에지 선택으로 변환할 수 있는 경우 버텍스를 선택한 상태에서도 작동할 수 있습니다.
-
또한 결합(Weld) 툴은 이제 한 쌍의 버텍스도 결합할 수 있으며 페이스를 선택한 상태에서도 작동할 수 있습니다.
-
-
Transform 및 Align: 이제 메시 타입뿐만 아니라 어떤 프리미티브 컴포넌트에서도 작동합니다.
-
Edit Pivot Point: 피벗 편집(Edit Pivot) 툴이 지오메트리가 선택된 상태에서 실행된 경우, 이제 피벗 위치가 선택된 대상에 맞춰 초기화됩니다(위치만 해당하며 디폴트 방향은 유지됨). 또한 이제 방향만 스냅 드래그(Snap Drag)하는 기능도 지원됩니다.
-
Sculpt: 스타일러스 및 태블릿 플러그인이 활성화되어 있는 경우 버텍스 및 다이내믹 스컬프팅 브러시가 필압을 지원합니다.
-
Split 툴: 이제 분할(Split) 툴을 사용할 때 메시가 어떻게 분할되는지 미리 볼 수 있고 폴리그룹, 머티리얼 ID 또는 버텍스 거리 허용치로 분할하는 새 옵션이 추가되었습니다. 버텍스 거리 허용치를 이용하면 서로 분리되어 있는 메시라도 분할되지 않게 할 수 있습니다.
-
MeshToCollision: MeshToCollision 툴 UI에 이제 별도의 Convex Decompositions 옵션이 추가(이전에는 Convex Hulls 하위 세팅으로 숨겨져 있었음)되었으며, 새로운 내비게이션 기반 알고리즘을 디폴트로 사용합니다(이전 메서드로 전환할 수 있고 직접 헐의 개수를 지정할 수 있음).
-
PolyCut: PolyCut에 'Cut Outside' 옵션이 새로 제공됩니다.
-
프리미티브: 실린더 단면이 몇 개의 면으로 분할될지를 변경할 수 있는 새로운 캡슐(Capsule) 툴이 추가되었습니다.
이제 익스트루드 폴리곤, 익스트루드 패스 및 리볼브 패스는 선택된 지오메트리 엘리먼트(유효한 경우)를 포함한 사용자가 선택한 항목을 기반으로 그려지는 축을 초기화하므로, 선택한 버텍스/에지/페이스에 정렬된 상태로 새 셰이프를 그리기 시작할 수 있습니다.
- CubeGrid: 엘리먼트가 선택된 상태에서 실행된 경우, 피벗 위치에서 초기화됩니다(피벗 편집(Edit pivot) 툴과 동일하게 디폴트 방향은 유지됨).
이 에디터 모드에 대한 자세한 내용은 모델링 모드 개요를 참고하세요.
모델링 워크플로(베타)

선택 변환: 메시 엘리먼트 선택 변환이 모든 경우에 적용되므로 이제 선택 타입이 변경된 경우 선택이 일관되게 유지/변환됩니다.
메시 엘리먼트 선택 컬러: 메시 엘리먼트 컬러가 업데이트되었습니다. 컬러 세팅은 이제 프로젝트 세팅에서 커스터마이징할 수 있습니다.
자세한 내용은 메시 엘리먼트 선택 문서를 참고하세요.
UV 툴(베타)

-
브러시/페인트 UV 선택 툴: 2D 및 3D 뷰포트에서 모두 작동하며, 아일랜드를 선택하는 옵션도 제공됩니다.
-
''아일랜드 만들기' 작업: 선택 영역을 가지고 별도의 아일랜드로 만듭니다. 즉, 선택 영역 내부의 모든 심(Seam)을 제거하고 대상의 외곽을 따라 심(Seam)을 만듭니다. 브러시 툴과 함께 사용하면 잘못된 토폴로지로 인해 심(Seam)을 그리기가 매우 어려운 경우에도 아일랜드를 만들 수 있습니다.
-
Transfer UV 툴: 모델링 툴의 UV 섹션에서 찾을 수 있습니다. '기존 위치' 메서드를 사용하여 단순화된 메시의 UV 값을 원본 메시로 전송하며, 이를 통해 단순화된 메시에서 UV 레이아웃 작업을 완료한 다음 고해상도 원본 메시로 다시 반영할 수 있습니다.
-
새 레이아웃 옵션: 아일랜드를 리패킹할 때 스케일 또는 회전을 유지하는 새로운 옵션이 추가되었습니다.
-
UV 스냅샷 익스포트: 이제 UV 에디터와 베이크 툴에서 UV 스냅샷을 베이크할 수 있습니다. 이를 통해 사용자가 지정한 와이어프레임 표시 컬러가 적용된 이미지를 익스포트할 수 있습니다.
자세한 내용은 UV 에디터 문서를 참고하세요.
텍스처링 툴(실험단계)

-
새 노드
-
Histogram Scan
-
Histogram Range
-
Edge Detect
-
Warp
-
Texture Path
-
-
3D 프리뷰에서 디폴트 머티리얼 향상: 새로운 머티리얼은 베이스 컬러, 러프니스, 노멀, 스페큘러 및 메탈릭과 같은 표준 머티리얼 채널에 연결할 수 있는 슬롯을 제공합니다.
-
새로운 익스포트 모드: 새 '텍스처 그래프 익스포트(Export Texture Graph)' 모드를 사용하면 전체 그래프를 볼 필요 없이 입출력 파라미터만 노출된 반복작업에 유용한 방식으로 텍스처 그래프를 사용할 수 있습니다.
자세한 내용은 텍스처 그래프 시작하기 강좌를 참고하세요.
지오메트리 스크립팅

다이내믹 메시 컴포넌트 는 이제 렌더링 옵션을 통해서 스태틱 드로 패스 및 디스턴스 필드도 지원하며, 루멘 메시 카드가 스태틱 메시보다 단순하지만 루멘과 함께 사용할 수 있습니다.
지오메트리 스크립팅 라이브러리에는 십여 개의 기능 카테고리에 50개가 넘는 새로운 지오메트리 노드가 추가되었습니다. 예를 들어 이번 출시 버전에서는 모프 타깃, 스킨 메시 프로파일, 본 웨이트 함수, LOD를 포함한 스켈레탈 메시와의 추가적인 상호운용성을 제공합니다. 또한 메시의 콜리전 오브젝트와 컨벡스 헐 분해에 도움이 되는 새로운 함수가 몇 가지 추가되었습니다. 또한 메시 선택, 메시 복구, 메시 UV 패킹에 이르기까지 다양한 메시 관련 기능이 추가되었습니다. 마지막으로, 풀링된 임시 다이내믹 메시 작업을 간소화하기 위해 메시를 요청 및 해제하는 새로운 매크로가 추가되었습니다.
자세한 내용은 지오메트리 스크립팅 사용자 가이드를 참고하세요.
콘텐츠 파이프라인
임포트 인터체인지 프레임워크

인터체인지 프레임워크는 사용자가 임포트/리임포트 워크플로를 손쉽게 생성, 확장 및 파라미터화할 수 있게 해줍니다. 그리고곧 익스포트 워크플로도 지원할 예정입니다.
언리얼 엔진 5.5에서는 레벨 임포트 기능 및 일부 UI 업데이트 작업이 완료되었고, 이제 인터체인지는 에셋 임포트에서 정식 버전 으로 제공되며 레벨 임포트에서는 베타 버전 으로 제공됩니다. 레벨 임포트는 에셋을 생성하고 모델의 계층구조를 레벨에 스폰합니다.
이번 작업의 주안점은 다음과 같습니다.
-
레벨 임포트 파이프라인, 특히 FBX 파일 포맷 관련 파이프라인 완성. 이제 콘텐츠 크리에이터는 인터체인지 프레임워크를 사용하여 FBX 파이프라인을 완전히 커스터마이징할 수 있습니다.
-
레벨 임포트의 출력에는 레벨 인스턴스 액터 를 생성할 수 있는 새로운 옵션이 제공됩니다.
-
콜리전 UI와 행동을 재작업했으며, 특히 리임포트를 중심으로 향상이 이뤄졌습니다.
-
임포트 대화창에 외관과 관련된 일부 변경사항이 적용되었습니다.
인터체인지 워크플로 향상

인터체인지 프레임워크는 사용자가 임포트/리임포트 워크플로를 손쉽게 생성, 확장 및 파라미터화할 수 있게 해주며, 곧 익스포트 워크플로도 지원할 예정입니다.
인터체인지 기능 확장:
-
커스텀 파이프라인에서 에디터 기능에 액세스할 수 있는 에디터 전용 블루프린트 파이프라인이 추가되었습니다.
-
스켈레탈 메시에서 애니메이션 및 모프 타깃 작업을 수행할 수 있습니다.
-
MaterialX 임포트에 부울 및 커스텀 입력 지원이 추가되었습니다.
-
glTF 임포트에 애니소트로피 확장 및 추가 기능 지원이 추가되었습니다.
-
노드 관련 메타데이터는 이제 액터에 저장됩니다.
인터체인지를 사용한 USD 에셋 임포트 커스터마이징(실험단계)

USD는 3D 산업 전반에 걸쳐 채택률이 증가하고 있는 다용도 씬 디스크립션 포맷입니다.
USD가 인터체인지 프레임워크에서 지원하는 파일 포맷 목록에 추가되었습니다. 따라서 콘텐츠 크리에이터는 임포트 프로세스를 보다 효과적으로 제어할 수 있으며, FBX와 같은 다른 포맷에 이미 사용 가능한 인터체인지 기능과 유사하게 USD 파일의 에셋 임포트에 커스텀 처리 단계를 추가할 수 있게 되었습니다.
인터체인지를 통한 USD 지원은 아직 실험단계로 간주되며, 에셋 임포트로만 제한됩니다. 지원되는 에셋 타입은 다음과 같습니다.
-
텍스처
-
머티리얼
-
머티리얼 인스턴스
-
스태틱 메시
-
스켈레탈 메시
-
애님 시퀀스
USD 서포트 지원 및 퍼포먼스
USD는 3D 산업 전반에 걸쳐 채택률이 증가하고 있는 다용도 씬 디스크립션 포맷입니다. 콘텐츠 크리에이터와 아티스트가 DCC 간에 3D 콘텐츠, 특히 씬 디스크립션을 전송할 때 사용합니다. 이 포맷은 원래 미디어 엔터테인먼트 산업에서 사용되었지만 현재는 게임 산업과 자동차, 건축 등 다른 산업까지 점차 그 사용 범위가 넓어지고 있습니다.
5.5 출시 버전에서는 주로 초대규모 스테이지, 특히 인스턴싱 가능 항목 을 대량으로 사용하는 경우에 임포트/로드 시간 과 메모리 풋프린트 를 최소화하는 방향에 초점을 맞춰 향상이 이루어졌습니다. 이 점은 일반 임포트뿐만 아니라 로드/리로드 스테이지 액터의 사용에서도 확인할 수 있습니다. 이를 통해 씬의 반복작업 속도를 높이고, 메모리 용량이 적은 머신에서도 스테이지를 광범위한 머신에 로드할 수 있어 편의성이 향상됩니다.
병합 API로는 UE에서 로딩/임포트할 때 어떤 요소를 병합할지 세밀하게 제어할 수 있습니다.
프레임워크
스테이트 트리 UX 및 이벤트

이번 출시 버전에서는 스테이트 트리 에디터에 대대적인 UX 개편이 이루어지면서 가시성이 향상된 컬러, 아이콘 및 UI 접근성 옵션이 도입되었습니다. 또한 새로운 아웃라이너 창을 추가하여 대규모의 트리를 보다 빠르게 탐색할 수 있게 되었습니다.

조건에 대한 이벤트 지원을 향상하고 페이로드 구조체에 대한 옵션이 추가되었습니다. 예를 들어 발생한 대미지 타입과 양 또는 노이즈 이벤트의 음량 및 위치 등에 사용할 수 있습니다.
스테이트 트리 런타임

한층 다양한 상태 선택을 위해 새로운 상태 셀렉터가 2개 추가되었습니다.
-
유틸리티 상태 셀렉터(스코어 기반 선택)
-
랜덤 상태 셀렉터(균등 및 가중치 적용).
또한 메인 트리와 서브 트리의 병렬 실행 기능을 제공하여 병렬 작업을 실행할 수 있도록 해주는 지원이 추가되었습니다.
마지막으로, 프로퍼티 바인딩 함수가 추가되여 사용자가 프로퍼티에 전송되는 값을 계산할 수 있게 되었습니다. 이 기능을 사용하면 다른 파라미터 또는 외부 레퍼런스를 결합하여 계산을 수행할 수 있습니다.

스테이트 트리 셀렉터에 대한 자세한 내용은 스테이트 트리 셀렉터 개요 문서를 참고하세요.
스테이트 트리 비교 툴

여러 명으로 구성된 대규모 팀이 협업을 통해 복잡한 AI 시스템을 제작하는데 모듈형 스테이트 트리 기능을 사용하고 있는 만큼, 사용자들의 공유 데이터 활용 효율성을 높일 수 있도록 스테이트 트리의 비교 정보를 한층 명확하게 시각화할 수 있는 방법이 필요해졌습니다. 따라서 이미 출시된 블루프린트 비교 툴과 마찬가지로 이번에 새롭게 추가된 스테이트 트리 비교 툴은 작업을 검토하고 추가/수정/제거된 콘텐츠를 손쉽게 식별하여 팀의 검토 및 디버깅 워크플로 속도를 높여줍니다.
게임플레이 카메라

언리얼 엔진에서 카메라를 조정하는 작업이 한층 쉬워졌습니다. 목표는 시스템을 논리적으로 구성된 파일 여러 개로 분할하여 멀티 유저 카메라 검사를 수행하는 툴과 데이터 에셋을 통해 새로운 워크플로를 제공하는 것입니다. 사용자는 팀 단위로 새 모듈형 카메라를 손쉽게 제작할 수 있어야 하고, 매우 유연하고 능률적으로 다양한 설정 간에 전환할 수 있게 시스템에 통합해야 합니다. 시스템과 디버깅 툴은 리와인드 디버거와도 호환되도록 만들 예정이므로, 카메라 디버깅이 한층 더 쉬워질 것입니다.
게임플레이 카메라 시스템에 대한 자세한 내용은 게임플레이 카메라 시스템 문서를 참고하세요.
구조체 유틸
구조체 유틸(Struct Utils) 플러그인은 언리얼 엔진 5.0에서 도입되었습니다. 지금까지 꾸준히 편의성 향상이 이루어진 결과, 이제 정식 버전으로 간주되며 향후 완전히 지원될 예정입니다. 구조체 유틸리티도 엔진 모듈로 이전되어 더는 별도의 플러그인으로 작동하지 않습니다.
인스턴스드 액터

인스턴스드 액터는 게임 월드에 액터가 너무 많은 경우 발생하는 오버헤드를 줄이기 위해 디자인된 새로운 기능입니다. 이 기능은 액터를 매스 엔티티로 대체하고 액터와 엔티티 간에 즉시 변환(하이드레이션/디하이드레이션) 오버헤드를 줄임으로써 높은 밀도로 채워진 오픈 월드 환경에서 한층 더 뛰어난 퍼포먼스를 제공합니다. 변환은 뷰어와의 거리 로직을 통해 매스 LOD 시스템에 의해 제어되며, 피직스 트레이스도 하이드레이션을 트리거하는 데 사용할 수 있습니다.
이 기능은 대규모 환경의 바위와 나무와 같이 동일한 메시를 사용하는 액터가 많은 경우에 가장 효과적입니다.
자동 네비게이션 링크 생성

**언리얼 엔진 5.5에서는 단거리 네비게이션 링크 자동 생성 기능을 제공합니다.
-
이 기능을 활성화하면 네비게이션 콜리전 데이터를 재사용하여 내비메시 타일 생성 프로세스의 일부로 내비링크가 생성됩니다.
-
내비링크 궤적은 지정된 길이, 높이 및 기타 파라미터를 준수하도록 환경설정됩니다.
-
또한 궤적은 에이전트 반경을 준수하면서 콜리전이 없도록 그 유효성이 검증됩니다.
-
생성된 내비링크는 커스텀 링크와 유사한 방식으로 경로를 찾는 동안
UGeneratedNavLinksProxy
클래스를 사용하여 발견 및 처리할 수 있습니다.
디버그:
-
디버그 표시 옵션은 내비링크 궤적 및 궤적 유효성 검사를 표시할 수 있습니다.
-
필터링된 링크를 표시할 수 있는 옵션이 제공됩니다.
-
특정 에지를 검사할 수 있으며, 이를 통해 생성에서 사용된 단계를 확인할 수 있습니다.
-
생성된 링크는 다른 내비링크와 함께 표시하되 더 굵은 선을 사용합니다.
-
내비링크 빌드 시간은 다른 내비메시 빌드 시간 통계와 함께 표시됩니다.
자동 내비게이션 링크 생성에 대한 자세한 내용은 자동 내비게이션 링크 생성 문서를 참고하세요.
무버 플러그인 - 애니메이션 지원

새로운 버전의 캐릭터 무버(Character Mover)를 지속적으로 개발하고 향상하면서 모션 워핑, 향상된 애니메이션 루트 모션 지원, 모션 매칭을 위한 궤적 쿼리 등 업계를 선도하는 최신 UE5 애니메이션 기술에 발맞추기 위한 노력을 이어나가고 있습니다.
학습 에이전트

학습 에이전트(Learning Agents)는 게임 개발자가 강화 학습과 모방 학습을 통해 언리얼 엔진에서 봇을 트레이닝 및/또는 디플로이할 수 있도록 지원하는 UE 플러그인입니다.
5.4에서 5.5로 넘어오면서 변경된 사항
ML 트레이닝 코드 아키텍처 재설계
-
네트워킹 프로토콜과 ML 트레이닝 알고리즘에 대한 사용자 제어권이 더 커지도록 ML 학습 코드 재작성
-
BYOTA 지원 측면에서 다양한 수의 네트워크 및 데이터 버퍼를 수용하는 데 필요한 네트워킹 프로토콜 지원
추가 네트워킹 프로토콜 지원
-
이제 학습 에이전트는 다양한 네트워킹 프로토콜을 지원할 수 있는 유연성을 갖춤
-
TCP 소켓 - 로컬 영역 네트워크(Local Area Network, LAN)을 통한 통신에 적합
-
공유 메모리 - 로컬 머신에서의 빠른 커뮤니케이션에 이상적
-
-
최종 사용자는 자체 외부 트레이너 프로토콜을 추가하여 LA의 네트워킹을 확장할 수 있음
BYO 트레이닝 알고리즘 (Bring Your Own Training Algorithm, BYOTA)
-
사용자가 규격화된 ML 트레이닝 알고리즘이나 커스텀 Python 트레이닝 코드를 더 손쉽게 통합할 수 있도록 학습 에이전트의 Python 측 재작성
-
이제 사용자는 학습 에이전트의 코드베이스를 수정할 필요 없이 프로젝트 워크스페이스에서 직접 이러한 변경을 수행할 수 있음
Mac 및 Linux 트레이닝 추가
-
이제 Mac과 Linux에서도 트레이닝 가능!
-
Linux는 현재 공유 메모리와 소켓 네트워킹 프로토콜을 모두 지원하며, Mac은 현재 소켓만 지원합니다.
에디터
향상된 UMG 텍스트 렌더링

이 작업은 다음과 같은 텍스트 렌더링 기능을 통해 폰트의 시각적 퀄리티와 렌더링 퍼포먼스를 모두 향상하는 것을 목표로 합니다.
-
이제 폰트는 스케일을 조정해도 선명도가 저하되지 않습니다. 즉, 텍스트가 다양한 크기에서도 선명하게 표시됩니다.
-
머티리얼에서는 디스턴스 필드를 사용하여 외곽선과 드롭 섀도 같은 고퀄리티 이펙트를 구현합니다.
-
런타임에서 메모리 사용량이 감소되었습니다.
스크립터블 툴

-
모듈형 행동: 언리얼 엔진 5.4의 클릭 앤 클릭 드래그 베이스 툴을 대체하는 새로운 모듈형 행동 베이스 툴을 추가했습니다.
-
툴 빌더: 툴 타깃과 커스텀 툴 빌더를 모두 지원하는 툴 빌더 지원이 추가되었습니다.
-
필터 및 컬렉션: 대규모 툴 컬렉션을 관리할 수 있는 툴 그룹 필터 지원이 추가되었습니다.
-
포인트/라인/트라이앵글 세트: 포인트/라인/트라이앵글 세트에 대한 지원이 추가되어, 렌더 이벤트의 레거시 프리미티브 드로잉 지원에 비해 반복적으로 그려진 오브젝트를 사용할 수 있습니다.
-
위젯: 블루프린트 스크립트 뷰포트 위젯에 대한 지원이 추가되어 툴의 UI를 보다 세부적으로 커스터마이징할 수 있습니다.
-
마우스 행동: 모듈형 행동 툴의 베이스 내에서 멀티클릭, 싱글클릭, 더블클릭, 클릭 드래그, 클릭 또는 드래그, 마우스 호버, 마우스 휠 ITF 행동에 대한 지원이 추가되었습니다.
-
입력 행동: 행동 ITF에 싱글/멀티 키 입력 행동에 대한 지원을 추가하고 스크립터블 툴에도 지원을 노출했습니다.
자세한 내용은 스크립터블 툴 시스템 문서를 참고하세요.
추가 플러그인 디렉터리
사용자는 이제 엔진 및 프로젝트 외부의 디렉터리를 지정하고 플러그인 브라우저에서 직접 플러그인을 파싱할 수 있습니다! 이 폴더의 플러그인은 다른 폴더와 마찬가지로 브라우저에 표시됩니다. 이 기능을 사용하면 다이내믹 툴 라이브러리를 하나만 유지하면서 중앙의 한 곳에서 업데이트하고 모든 프로젝트에서 레퍼런스할 수 있습니다.
배치 이름변경 툴

이 플러그인은 원래 5.4에서 '고급 이름변경 툴(Advanced Renamer)'로 출시되었으며, 5.5에서 '배치 이름변경 툴(Batch Renamer)'로 재출시되어 UE 에디터 핵심 경험의 일부가 될 것입니다. 사용자는 이 플러그인을 통해 여러 에셋 및 액터의 이름을 변경할 수 있으며, 접두사/접미사를 동시에 추가할 수 있습니다. 5.5에서는 배치 이름변경 툴의 UI가 UE5의 스타일링과 일관성 있게 보이도록 약간의 업데이트가 이루어졌습니다.
레퍼런스 뷰어 UX 향상

이제 사용자는 레퍼런스된 노드를 우클릭하고 '레퍼런싱 프로퍼티 리졸브(Resolve Referencing Properties)' 작업을 선택하여 레퍼런스 중인 노드에서 해당 노드를 레퍼런스하는 프로퍼티를 시각화할 수 있습니다. 이 옵션은 현재 노드 에셋을 레퍼런스/값 모두 또는 타입으로 사용하는 경우 프로퍼티를 얻습니다.
향후에는 텍스처를 레퍼런스하는 머티리얼 파라미터의 이름 등 특정 타입(머티리얼, 폰트 등)에 대한 정보도 표시할 예정입니다.
레퍼런스 뷰어에는 다음과 같이 콘텐츠 리팩터링 환경을 개선하는 사용성과 관련한 향상점도 몇 가지 적용되었습니다.
-
이제 접힌 노드는 화면이 축소되어 있어도 보다 손쉽게 찾을 수 있으며, 레퍼런스가 1개만 있는 경우에는 접히지 않습니다.
-
이제 에디터 개인설정의 세팅도 고려됩니다.
-
크기가 큰 그래프를 로드해도 에디터에 더는 스톨 현상이 발생하지 않습니다.
StylusInput 플러그인
펜 및 태블릿 입력을 지원하는 StylusInput 플러그인이 다시 작성되었습니다. 새로운 API는 다음과 같이 보다 명확하고 강력해졌으며 퍼포먼스 또한 향상되었습니다.
-
태블릿 입력 컨텍스트는 개별 창에 대해 명시적으로 요청되어야 합니다. 이를 통해 태블릿 데이터가 실제로 필요한 경우에만 생성되고, 애플리케이션/플러그인이 필요한 태블릿 데이터만 수신할 수 있습니다.
-
태블릿 디바이스 데이터는 패킷 스트림으로 직접 전달되며, 모든 상태 관리는 클라이언트 코드에서 담당합니다. 그 결과, 이전 플러그인 구현에서처럼 태블릿 데이터가 틱 중에만 평가되어 전체 애플리케이션에 로드가 걸렸을 때 패킷이 드롭되거나 퍼포먼스가 저하되는 문제를 방지할 수 있습니다.
-
이 플러그인의 사용자는 이제 새로운 태블릿 데이터에 대한 콜백이 게임 스레드에서 수행될지 또는 비동기 스레드에서 수행될지 선택할 수 있습니다. 게임 스레드에서 데이터를 구하면 대부분의 사용 사례에서 스레드 동기화를 수행하지 않아도 되지만, 비동기 호출을 수행할 경우 잠재적으로 보다 뛰어난 퍼포먼스를 얻거나 최종 사용자의 지연시간을 단축할 수 있습니다.
StylusInput 플러그인은 현재 Windows Ink가 지원되는 Windows 플랫폼용 태블릿 데이터만 제공합니다. 향후 출시 버전에서는 Linux 및 Mac에 대한 지원도 계획되어 있습니다. 또한 이 플러그인은 마우스 입력도 전달하지만, 마찬가지로 Windows Ink가 지원되는 Windows 플랫폼에서만 사용할 수 있습니다. 모든 플랫폼에서의 마우스 입력 전용 예비 전환은 UE 5.6에서 계획되어 있습니다.
UStylusInputSubsystem
중심의 이전 API는 지원이 중단되었으며, 향후 출시 버전에서는 제거될 예정입니다. 에디터에서 이전 API를 계속 사용하려면 CVar stylusinput.EnableLegacySubsystem
을 활성화하세요.
미디어
비디오 및 이미시브 머티리얼을 위한 미디어 IO 홀드아웃 컴포짓

이전 출시 버전에서는 미디어 플레이트 액터에 오버레이 컴포짓 머티리얼이라는 컨텍스트 메뉴를 추가하여 TSR 번짐 아티팩트를 해결할 수 있도록 했었습니다. 이제 이를 더 이상 사용하지 않고, 대신 홀드아웃 컴포짓(Holdout Composite)이라는 새로운 플러그인 및 컴포넌트를 출시 하여 다음과 같은 개선 사항들을 제공합니다.
-
비디오/미디어 플레이트의 TSR 및 톤 커브 우회: 모션 벡터 부족과 일부의 경우 원치 않는 컬러 변환으로 인한 번짐 아티팩트를 방지합니다.
-
이전 구현과는 달리 앞에 반투명 오브젝트가 있는 경우에도 정상적으로 작동합니다.
-
옵트인/아웃 노출 보정으로 비디오 콘텐츠가 리얼타임 시각 적응(Eye Adaptation)의 영향을 받거나 받지 않을 수 있습니다.
컨스트레인트
-
언릿 머티리얼 전용입니다.
-
알파 출력(Alpha Output) 및 프리미티브 알파 홀드아웃 지원(Support Primitive Alpha Holdout) 프로젝트 세팅이 필요합니다.
-
반투명 비디오는 아직 지원되지 않습니다.
미디어 IO 타임코드 트랙 지원

ImageMediaSource 및 FileMediaSource 비디오 에셋에 타임코드 지원을 추가 하여 이제 시퀀서에서 적절하게 배치하고 사용할 수 있습니다. 타임코드 메타데이터는 이미지 시퀀스에 대한 수동 필드를 통해 설정할 수 있으며, 표준 비디오 파일의 경우에는 MOV 컨테이너를 통해 파싱할 수 있습니다.
-
타임코드 트랙에 대한 지원을 추가하고 시퀀서에 노출합니다.
-
다음과 같은 타임코드 지원을 추가합니다.
-
ImgMediaSource(편집 가능 필드)
-
FileMediaSource(MOV 컨테이너 패널)
-
프로덕션 렌더링 파이프라인
무비 렌더 그래프(베타)

실험단계 기능인 무비 렌더 그래프(Movie Render Graph) 가 언리얼 엔진 5.4에서 성공적으로 출시된 이후 새로운 그래프 기반 환경설정 워크플로는 계속해서 중요한 우선 과제가 되었습니다. 그래프 환경설정을 통한 새 워크플로 향상, 초기 사용자 피드백을 기반으로 한 향상, 기존 프리셋 구성의 호환성 향상 등 새로운 개발 작업이 진행되고 있습니다. 언리얼 엔진 5.5에 포함된 기능은 다음과 같습니다.
-
컬렉션에서의 스포너블
- 트랜션트 액터를 이름을 기준으로 레퍼런스할 수 있기 때문에 스포너블이 있는 씬에서 별도의 구성 오버헤드가 발생하지 않습니다.
-
콘솔 변수 관리가 향상되었습니다.
- 그래프를 다시 열지 않고도 '큐(Queue)' 창에서 오버라이드를 구성할 수 있습니다.
-
콘솔 명령 의 시작/끝을 설정합니다.
- 렌더링 관련 로직을 블루프린트 등에서 트리거합니다.
-
32비트 포스트 프로세스 머티리얼 지원이 향상되었습니다.
-
스크립트 태그 를 통해 파이프라인 툴과 스크립트의 효율성을 높여줍니다.
- 스크립트는 그래프를 파싱하여 액세스/수정 등이 필요할 수 있는 특정 노드를 보다 손쉽게 찾을 수 있습니다.
-
레퍼런스 모션 블러(Reference Motion Blur) 는 이제 Path Traced Renderer 노드에서도 사용할 수 있습니다.
-
모든 카메라 렌더링(Render All Cameras) 을 Camera Settings 노드에서 사용할 수 있습니다.
모든 에셋 유형에 대한 렌더 레이어 지원

무비 렌더 그래프의 실험단계 기능 출시에서는 일부 중요한 액터 타입이 홀드아웃 이나 모디파이어 의 일부 또는 모든 옵션 등을 사용할 수 없었습니다. 언리얼 엔진 5.5에서는 다음과 같은 모든 액터 유형을 기본으로 제공합니다.
-
반투명 오브젝트
-
나이아가라 FX
- 반투명 오브젝트를 통해 지원
-
불균질 볼륨
-
랜드스케이프
-
스카이 스피어가 없는 스카이 애트머스피어
- 렌더 레이어는 원래 스카이 스피어가 있는 스카이 애트머스피어만 지원했지만 이제 더는 필요하지 않습니다.
커스텀 EXR 메타데이터

언리얼 엔진 5.5에서 새로운 Set Metadata Attributes 렌더 레이어 노드를 사용하면 해당 출력 타입으로 렌더링 할 때 EXR 메타데이터로 쓰여지는 커스텀 어트리뷰트를 구성할 수 있게 되었습니다. 메타데이터 어트리뷰트는 디폴트 메타데이터(예: GPU, 드라이버, 메모리 사용량 등)에서 확장되는 사용자 기반 키/값 쌍으로, 렌더 시간에서 제공됩니다. 사용자는 슬래시를 사용하여 메타데이터의 구조를 체계화하고 파일 이름 형식 토큰을 사용하여 동적 메타데이터를 생성할 수 있습니다.
또한 이 노드는 스크립트를 통해 조작할 수 있고 파이프라인은 Python을 통해 노드를 추가하여 메타데이터를 생성하는 작업을 자동화할 수 있으므로 EXR을 쓴 후 메타데이터를 삽입할 때 커스텀 툴을 사용해야 하는 필요성을 줄여줍니다.
그래프에서 Avid DNxHR/Apple ProRes 사용 가능
이제 무비 렌더 그래프 의 Output Type 노드에서 Apple ProRes Movie 및 Avid DNxHR Movie 를 사용할 수 있게 되었습니다. 이러한 두 노드는 그래프에서의 기능이 향상되면서 새로운 퀄리티(Quality) 프로퍼티를 통해 아티스트에게 각 코덱에 대한 표준 옵션 세트를 제공합니다. 기존 프리셋 시스템에서 이 퀄리티는 사용자가 수정할 수 없는 특정 값으로 하드코딩되어 있었습니다.
이제 두 포맷 모두에 대해 시퀀서에서 타임코드가 적절히 임베딩되므로 편집 시 상호운용성이 향상됩니다.
그래프에서 크립토매트/오브젝트 ID 사용 가능

언리얼 엔진 5.5의 무비 렌더 그래프 내 렌더러 노드에서 ObjectID 를 사용할 수 있게 되었습니다.
프로토콜
DMX

플러그인 코어에서의 GDTF 및 MVR 통합과 함께 DMX 기술 스택(컨트롤 콘솔, 픽셀 매핑, 컨플릭트 모니터링 포함)은 이제 라이브 쇼 디자이너와 버추얼 프로덕션 오퍼레이터 등 리얼타임 프리뷰를 통해 에디터 내에서 엘리먼트를 제어하기 위해 DMX를 사용하려는 모든 사용자에게 정식 버전으로 제공됩니다.
컨트롤 콘솔 큐 및 UX
-
사용자가 여러 컨트롤 콘솔 환경설정을 저장하고 로드할 수 있도록 큐 가 제공됩니다.
-
에디터 도킹 을 통해 향상된 UI 통합을 지원합니다.
-
페이더에 세 번째 옵션 으로 디폴트 및 물리적 페이더 값을 읽기 위한 GDTF 지원 및 통합 기능이 제공됩니다.
-
DMX
-
정규화됨
-
피지컬
-
픽셀 매핑 컬러 정확도
출력 컬러 스페이스 세팅에 따른 전송 함수(선형, sRGB, 커스텀 2.2/2.4 감마 커브) 지원 추가
데이터 컨플릭트 모니터링
-
상충을 유발하지 않는 경우에도 DMX를 전송하는 오브젝트 표시
-
DMX를 전송하는 오브젝트를 탐색하기 위한 옵션
-
DMX를 전송하는 오브젝트를 실행하기 위한 옵션
-
네트워크로 전송되는 대량의 DMX 데이터 관련 퍼포먼스 통계
원격 제어 DMX 패칭 시스템 통합

원격 제어에 시그니처 추가. DMX 픽스처 타입과 유사하게 시그니처는 노출된 프로퍼티의 컬렉션으로, 사용자가 많은 양의 액터에 대한 프로세스를 빠르게 반복할 수 있게 해줍니다. 이전에는 사용자가 모든 프로퍼티에 대해 유니버스 및 패치 ID를 수동으로 정의해야 했지만, 시그니처를 생성한 다음 액터 프로퍼티를 노출하면 추가적인 제어를 위해 패치를 적용하고 DMX 라이브러리에 저장하는 것도 가능합니다.
원격 제어 DMX 패칭 시스템 통합(Remote Control DMX Patching System Integration) 은 현재의 DMX 기술 스택과 자연스럽고 일관된 메커니즘을 제공하며, 원격 제어를 통해 임의의 UE 액터를 DMX로 제어할 수 있게 해줍니다.
이 기능은 버추얼 프로덕션, 라이브 이벤트 또는 DMX를 사용하여 언리얼 엔진에서 임의의 액터를 제어하려는 사용자 모두를 위한 것입니다.
시그니처는 DMX에서 영감을 받았지만, 이 개념은 다른 프로토콜에도 사용하여 원격 제어에 프로퍼티를 노출하는 데 걸리는 시간을 향상시킬 수도 있습니다.
-
시그니처를 통해 액터에 유사한 노출 프로퍼티 세트를 빠르게 적용 가능
-
DMX 라이브러리를 통해 패치 및 GDTF/MVR 익스포트 지원
-
DMX 워크플로뿐만 아니라 사용 편의성 향상을 위해 UX 개편
-
대규모 프로퍼티 세트 제어 시 퍼포먼스 향상
플랫폼 SDK 업그레이드

-
Windows
-
Visual Studio 2022 v17.10 이상
-
Windows SDK 10.0.22621.0 이상
-
LLVM Clang
-
최소 버전: 18.1.3
-
선호 버전: 18.1.8
-
-
.NET 4.6.2 Targeting Pack
-
.NET 8.0
-
-
빌드 팜 컴파일 IDE 버전
-
Visual Studio 2022 17.8 14.38.33130 툴체인 및 Windows 10 SDK(10.0.22621.0)
-
Xcode 15.4
-
-
GDK
-
최소 Windows SDK: 10.0.22000.0
-
GDK: June 2024 Update 2
-
최신 복구 버전
-
지원 IDE: Visual Studio 2022
-
-
Linux
-
네이티브 Linux 개발
-
추천 OS: Ubuntu 22.04, Rocky Linux 8 이상, Redhat Linux 8 이상
-
컴파일러: Clang 18.1.0
-
-
크로스 컴파일 툴체인: v23 clang-18.1.0 기반
-
-
MacOS/iOS/tvOS/iPadOS
-
권장 OS/Xcode
-
최신 macOS 14 Sonoma
-
Xcode 15.4 이상
-
-
최소 OS/Xcode
-
macOS 13.5 Ventura
-
Xcode 15.2
-
-
베타 OS/Xcode(아래 기타 참고 사항 확인 필요)
- macOS 15 Sequoia
-
지원되는 타깃 SDK 버전:
-
iOS SDK 버전: 15
-
macOS SDK 버전: 13
-
visionOS SDK 버전: 1
-
-
iOS 그래픽 API: Metal 2.4~3.1
-
기타 참고 사항
- 셰이더 모델 6(SM6)에는 macOS 15가 필요합니다. 이 지원은 베타 단계이며, 현재는 정식 버전으로 사용하는 것을 권장하지 않습니다.
-
-
Android
-
Android Studio Koala 2024.1.2 August 29, 2024
-
Android NDK r25b
-
Android SDK
-
권장 버전: SDK 34
-
UE 컴파일 최소 버전: SDK 34
-
출시용 디폴트 타깃 SDK: SDK 34
-
최소 설치 SDK 레벨: SDK 26
-
AGDE 디버깅을 사용하고 있는 경우 AGDE v23.2.91+가 권장되며, 이는 이 버전에 SIGBUS 오류 수정이 포함되어 있기 때문입니다.
-
-
빌드 툴: 34.0.0
- 35.0.0을 사용하려고 시도하면 Windows에서 aidl을 사용할 때 문제가 발생할 수 있습니다.
-
Java 런타임:
-
openjdk 21.0.3 2024-04-16
-
OpenJDK Runtime Environment(빌드 21.0.3+-12282718-b509.11)
-
OpenJDK 64-Bit Server VM(빌드 21.0.3+-12282718-b509.11, 혼합 모드)
-
-
기타 참고 사항
-
언리얼 엔진은 Gradle 8.7을 사용하도록 업데이트되었으며, Android Gradle Plugin(AGP)은 8.5.2 버전으로 업데이트되었습니다. 디버깅에 Android Studio를 사용하고 있는 경우 Android Studio Koala를 사용하는 것을 권장합니다. Ladybug도 작동은 하지만 Gradle 또는 AGP를 위 버전에서 업데이트 하지 마세요.
-
NDK 레벨을 선택할 때는 Android 8.0+를 지원하는 android-26을 타깃으로 해야 합니다.
-
-
-
EOSSDK
- 1.16.4-36651368
-
Steam
- 1.57
-
Switch
-
SDK 18.3.1
-
최소 펌웨어 버전: 19.0.0-2.0
-
Nintendo Dev Interface 2.6.0
-
지원 IDE: Visual Studio 2022
-
-
PS4
-
Orbis SDK 12.008.011
-
시스템 소프트웨어 12.008.011
-
지원 IDE: Visual Studio 2022
-
-
PS5
*Prospero SDK 10.00.00.40
-
시스템 소프트웨어 10.01.00.00
-
지원 IDE: Visual Studio 2022
-
-
ARCore
- 1.37
-
ARKit
- 4.0
-
OpenXR
- 1.0.27
출시 노트
Animation
API Change:
- ILODSyncInterface's SetSyncLOD and GetCurrentSyncLOD functions have been deprecated in favor of functions that allow separate control over the LOD requested for streaming and the LOD used for rendering.
New:
-
Added preview scene controller to animate character in any animation viewport using pose from any other running instance of the same skeletal mesh.
-
Multiple skin weight profiles can now be activated at the same time and layered on top of each other. This is currently limited to two layers and the active profiles cannot have overlapping weights, on the same vertex, that differ from the base.
-
The skeleton tree now has an option to show the internal bone indices.
-
[AnimationCore] Expose EEulerRotationOrder as blueprint type, which should be the enum to use when it comes to rotation order across animtion systems, including control rig.
Bug Fix:
- Fixed an issue where an actor using the LOD Sync Component, such as a MetaHuman, would only ever use the lowest LOD if the project had LOD streaming enabled.
Deprecated:
- USkeletalMesh::GetHasBeenSimplified and USkeletalMesh::SetHasBeenSimplified have been deprecated and should no longer be used. This information is already stored per LOD and can be accessed with FSkeletalMeshLODInfo::bHasBeenSimplified.
Animating in Engine
New:
-
Sequencer: Anim details: Shift does range select, and use new method to get display names to fix modular rig bugs with details panel
-
Sequencer: Control Rig: Add option to have non-grouped channels still get sorted when other groups are present. This is needed for a request to get the Control Rig WeightChannel first in the outliner when active, otherwise to hard to find.
-
Sequencer & Control Rig - Changed the default behavior when adding new control rig track: rigs added later now are evaluated after existing rig tracks by default, instead of before. The evaluation order can still be changed by right clicking on the Control Rig track and changing the order number.
-
Animator Kit plugin - when Animator Kit plugin is enabled, it also enables the "New TRS Gizmo"(Gizmo Framework) plugin, which allow you to enable the new TRS Gizmo via "Editor Preferences - General - New TRS Gizmo - Enable New Gizmos"
-
Sequencer: Anim Details: Add support for interactions and driven controls
-
Sequencer: Add bake settings to load animation into section for control rig so you can do proper key reduce and keep controls
-
Animator Kit Plugin - Added Sculpt Deformer Control Rig & Deformer Graph. Its implementation can be found in /Plugins/AnimatorKit/DeformerRigs/
-
Sequencer & Control Rig - Control Rig asset picker no longer shows rig modules as they are not intended for sequencer usage
-
Sequencer & Control Rig - Updated UI for the control rig asset picker when adding new Control Rig tracks. Also added asset filters based on ControlRigBlueprint Variant Tags. New tags can be created in Project Settings - RigVM Project Settings - Variant Tags. And these tags can be assigned to ControlRigBlueprints via Class Settings - Variant - Asset Variant.
-
Sequencer: Anim Details: Show anim details for sequencer selected objects/components not editor selected, per animator feedback
-
Sequencer: Add Force Evaluate BP/Python function to make sure we evaluate immediately, this is needed for example with control rig's since they get setup lazily on evaluation.
-
Sequencer: Anim detail fixes: Added support for bool,integers, floats and doubles
-
Sequencer Control Rig picker - It now shows rigs that can work with any skeleton, in addition to rigs created specifically for the active skeletal mesh when "filter by skeleton" is turned on
-
Animator Kit Plugin - Added CameraSpaceLatticeDeformer Control Rig & Deformer Graph. It can be used to deform a skeletal mesh from the viewpoint of the "Camera Handle" control. This control can be constrained to a cine camera to allow for deformation control from the perspective of the cine camera. Its implementation can be found in /Plugins/AnimatorKit/DeformerRigs/
-
Sequencer: Change default behavior so Control Rig Section to Keys are set based upon what section is selected in the outliner
-
Sequencer: Linked Anim Sequences. Allow ability to specify custom range when saving out custom time range, includes BP/Python functions.
-
Animator Kit Plugin - Added Lattice Deformer Control Rig & Deformer Graph. Its implementation can be found in /Plugins/AnimatorKit/DeformerRigs/
-
Sequencer: Constraints working with snapper tool
-
Sequencer: Fix overshoot for Smart and Auto tangents
-
Sequencer: Control Rig:Can now run PIE and animate a Control Rig in editor window at the same time.
-
Sequencer: Anim Details: Attributes are now shared per animators request, instead of just showing the first one.
-
Sequencer: Fix so User/Broken tangents get set to curve slope automatically wherever added in Curve Editor or Sequencer. Need to make sure we only do this when within the keys, if a key is added outside it stays flat.
-
Constraints: Space Switches: Add buttons to compensate key or all for spaces like we can for constraints.
-
Sequencer: Anim Details: Per animator feedback we only select curves on the section to key section when there are multiple sections.
-
Sequencer: Control Rig: New Smart Baking algorithm added as a curve filter, make new filter default for reducing control rig keys when baking, add bp/python support.
Bug Fix:
-
Sequencer: Animation Baking in subsequences would get the incorrect time range.
-
Sequencer: Anim Details: Fix Rotators not working with anim details and selection not working with actors.
-
Sequencer: Tween tools: Fix divide by zero crash with new Push Pull tween and change blend to ease function based on animators feedback
-
Sequencer: Control Rig: When collapsing, recording animation keys use preferred rotators.
-
Sequencer: Anim Details: Group keying properties in anim details to one undo.
-
Sequencer: Control Rig Make sure to tick the mode manager so pending deactivated modes are really deleted before enabling a new control rig edit mode.
-
Sequencer: Control Rig: Fix crash after undo add rig then add again, need to remove the stale control rig node from the layer instance proxy
-
Sequencer and Control Rig only reconstruct in the game thread #changelist validated #virtualized
-
Sequencer: anim Details panel add support for constraints.
-
Sequencer: Anim Detail Fixes, reset to default and vector3d working #changelist validated #virtualized
-
Sequencer: Control Rig: Make sure when collapsing by key the key is in section range
-
Sequencer : Anim Details: Make sure to set sequencer on edit mode and pass that through to tabs to avoid crashers
-
Sequencer: Control Rig: Restore selection state when refreshing tree view and make sure to clear sequencer when selecting in viewport/outliner
-
Sequencer: Control Rig: Fix collapsing sections when there are no absolute sections.
-
Sequencer: Anim details: Fix slow selection due to details panel getting recreated too many times, use timer handle now to make sure we only tick next once.
-
Sequencer: Anim Details: Use Relative values directly to avoid quat/rot conversions.
-
Sequencer: Anim Details: Fixed anim details showing multiple curves with multiple actors
-
Sequencer: Constraints: Only recreate channels if there is a valid world on the Control Rig.
-
Sequencer: Control Rig: Disable control rig not letting other objects to key with 'S'
-
Sequencer: Control Rig: Change the control mask from index based to be a set of names of masked out controls. Indices aren't reliable since the number of controls for rigs now changes for most rigs based upon how it is getting set up, e.g IK for FK settings now change the number of controls.
-
Sequencer: Control Rig: Don't refresh bones transforms if post evaluating when restoring state.
-
Sequencer: Control Rig outliner, speculative crash fix, reset delegate handles directly and check for null hierarchies
-
Sequencer : Anim Details: Move updating values when we are dirtied to only happen on next tick so we only do it once instead of possibly thousands of times.
-
Sequencer: Control Rig: Keep selection on IK/FK controls if selected and they lose visibility
-
Sequencer: Control Rig: Don't reset the mask if we have zero available controls
-
Sequencer: Constraints: Make sure to evaluate all constraints when baking
-
Sequencer: Anim Details: Don't update if compensating
-
Sequencer: Control Rig: When getting object replaced delegate don't force sequencer to rerun if the track is muted
-
Control Rig: Rotation Orders: Fix various issues with rotation orders.
-
FK Control Rigs: Fix channels keys not showing up on creation or load do to the track/section models not getting recreated. Need to mark as changed and wrap the change in a transaction for the view model to make the change. This will probably also fix some load time issues with AnimDataModels.
-
Control Rig: Snapper: We had an optimization to not re-evaluate a snap if we are on the current Sequencer frame but that will break do to how we gather frames (we could have gathered the last frame most recently). So just remove that check.
Gameplay
New:
-
Add experimental prediction to orientation warping
-
Improved PoseSearchDatabase indexing performances that was causing stutters in databases with lots of assets
-
[Motion Matching] Added sync groups support for the motion matching.
-
[Sync Groups] Added flag to stomp previous leader info (bOverwriteLeaderPosition).
-
[Sync Groups] Added a new role (ExclusiveLeader) which will make a tick record tick as ungrouped if it fails to be a leader.
-
-
Expanded Motion Warping plugin to support non-Character actors using adapters, and added warping support to Mover plugin #virtualized
-
[Motion Matching] Made PoseSearchDatabase items with an incompatible Skeleton have a red tint on their name to warn users.
-
Added UPoseSearchLibrary::IsAnimationAssetLooping to gather animation asset looping state in a thread safe manner
-
[Motion Matching] Added warnings for an empty PoseSearchDatabase item and an asset with an incompatible skeleton.
-
[Motion Matching] PoseSearchDatabase item's asset picker now filters based on if the asset is compatible with the PoseSearchDatabase's schema.
-
Improve debugging on OrientationWarp - Save prediction info so prediction can be analyzed during pauses
-
Added UPoseSearchLibrary::GetDatabaseTags to gather PoseSearchDatabase Tags in a thread safe manner
-
[Motion Matching] Able to perform all of the PoseSearchDatabase item's options via the right click context menu.
-
Changed display name for UAnimNotifyState_PoseSearchBlockTransition from "Pose Search: Block Transition" to "Pose Search: Block Transition In"
-
Made USkeleton::GetBlendProfile BlueprintThreadSafe
-
Fixed blend profiles support in BlendStack anim node
-
Improvements for motion matching debug lines rendering
-
Introduced normalization groups to motion matching schema channels to be able to normalize them together
-
Small performance improvements for motion matching
-
Added PoseSearchDebugger support to scrub RewindDebugger recordings after PIE has been stopped
-
Exposed PoseSearchAssetSampler to blue print via PoseSearchAssetSamplerLibrary
-
Added initial motion matching support for AnimNext
Bug Fix:
-
Fixed curves not being normalized from range 0 to 1 in FootAnimEventsModifier.
-
Fix Orientation Warping Counter Compensate undoing root motion rotation.
-
[Motion Matching] Fixed issue where selecting a BlendSpace, AnimMontage or AnimComposite for an item in a PoseSearchDatabase fails.
-
Add a strong interp to Counter Compensate to address stuttering when correcting between two samples between the same frames
-
Prevent Foot Placement running when an actor is dropped into the level viewport
-
Fixed montage segment details ticking the scene in the widget instead of via the viewport client. This was prone to crashes when force ticking slate widgets.
-
Fix to prevent Offset Root Bone anim node overwiting scale
-
[Motion Matching] Asset browser refreshes its asset list when the target PoseSearchDatabase's Schema changes
-
Fix Orientation Warping jittering with counter compensate - Don't update root motion direction based on prediction. - Remove threshholds / checks needed for contunity due to innapropriate root motion direction setting [REVIEW] [at]samuele.rigamonti, [at]jose.villarroel, [at]keith.yerex, [at]roland.munguia
-
Fixed editor freeze when deleting a BlendSpace from a PoseSearchDatabase
-
Fix Crash ChooserTableEditor due to 'SelectedColumn' not added to GC. - Add SelectedColumn to Root like 'SLevelEditor' does for 'SelectedElements' [REVIEW] [at]jose.villarroel, [at]daren.cheng, [at]keith.yerex, [at]roland.munguia
-
[Motion Matching] Added content browser to the PoseSearchDatabase Editor.
-
keeping numerical errors in check in FAnimNode_OffsetRootBone::Evaluate_AnyThread
-
Fix for UPoseSearchDatabase::CachedAssetMap garbage collection
-
Fix for crash in UBlendSpace::ResetBlendSamples when adding a blend space into a pose search database
-
Fix for BlendSpace playback in BlendStack when repurposing an anim player previously playing a sequence
-
Fix for PoseSearch and Cook determinism by removing unneeded UPoseSearchSchema::PreSave
-
Fixed motion matching trajectory generation when gravity and collisions are applied
-
Fix for compatible skeletons support in pose history
-
Fix for crash during blue print compilation containing FAnimNode_PoseSearchHistoryCollector_Base with bInitializeWithRefPose set to true
-
Fixed ConditionalPostLoad dependency to UMirrorDataTable for motion matching
Deprecated:
-
Deprecated UPoseSearchDatabase::GetAnimationAssets
-
Deprecating FMotionMatchingState properties ComponentDeltaYaw, ComponentWorldYaw, AnimationDeltaYaw
Movie Render Queue
New:
-
New: Added the ability specify cvars at the job/shot level for graph-based configurations. These cvars will override any cvars set within the graph.
-
New: Added the "Is Spawnable" query to graph collections.
-
MovieGraph: Added support for 32-bit output on additional post-process materials.
-
New: Added the ability to frame nodes within the graph, or zoom out to show the entire graph (included in the View menu).
-
New: Added drag/drop capability for most collection queries in the graph.
-
MRG: Reference Motion blur should enable Reference DOF Post-processed Depth-of-Field does not work well if the input is already motion blurred. When using the reference motion blur mode, automatically turn on reference DOF.
-
New: Added the ability to re-order graph variables (drag/drop) and assign them to categories. The categories themselves are also re-orderable. The variable order/categorization is reflected in the job variables in the queue UI.
-
New: Added the "Avid DNxHR Movie" node to the graph. Note that this requires the "Avid DNxHR/DNxMXF Media" plugin to be enabled.
-
New: Added two new timecode properties to the Global Output Settings node ("Custom Timecode Start" and "Use DF Timecode if 29.97 FPS"). These properties affect the timecode that's included in the output from the Avid DNxHR Movie and Apple ProRes Movie nodes, and also the burn in that's displayed in the default burn-in widget with the Burn In node.
-
New: Added the "Apple ProRes Movie" node to the graph. Note that this requires the "Apple ProRes Media" plugin to be enabled.
-
New: Added support for the Object ID pass (aka Cryptomatte) to the graph via a new "Object ID" node.
-
New: Added the "Set Start/End Console Commands" node to the graph.
-
New: Added a "Set Metadata Attributes" node to the graph, which adds metadata to graph output files (currently, only EXRs will pick up the metadata).
-
New: Added the ability to duplicate a condition group condition in the graph.
-
New: Updated the "Actor Name" condition in the Collection node to match spawnable actors. This is a side-effect of an update to spawnables in general to give them a more readable name when being spawned.
-
New: Updated the picker for the Actor collection query in the graph to include a checkbox selection mode.
-
New: Updated pinned property promotion to set the new variable's default value to the current value of the property.
-
New: Added the "Actor Layer" query to graph collections.
-
Added the "Data Layer" query to graph collections.
-
New: Updated the Set Console Variable node to make promoting the Value property more streamlined. The "Value" in the context menu includes the name of the cvar -- eg, "Value (r.SomeCVar)". Also, when promoting the "Value" property, the new variable is given the name of the cvar.
-
New: Added a new "Script Tags" property to nodes in the graph to allow for easy identification within scripts.
-
New: Updated the Post Process Materials property to include an additional "Name" field (optional) that will be used as the pass name in file name formatting (the {renderer_sub_name} token in the graph, and the {render_pass} token in legacy MRQ). If a custom Name is not provided, the entire PPM's name name will be used.
-
New: Updated the "Apply Console Variable Preset" node to allow per-cvar pin promotions (so individual cvars within the preset can be overridden easily).
-
New: Added the ability to drag a pin to the Inputs/Outputs nodes in the graph and have the input/output created automatically (rather than creating the input/output manually, then doing the connection).
-
New: Added the ability to enable/disable individual collections within a "Modifier" node in the graph.
-
New: Added tooltips throughout the graph that specify a variable's description (in the Members panel, the variable node and variable node pin, and the queue UI).
-
New: Added "Duplicate" for variables in the graph.
Bug Fix:
-
Bug Fix: Fixed a freeze that could occur when using the Command Line Encoder node with a sequence that is playing audio.
-
MovieRenderPipeline: Fix broken EXR channel names on linux
-
Bug Fix: Fixed a crash that could occur if the queue has contents removed while a render is occurring. Removing queue contents is now blocked during a render.
-
MRQ: Fix tiling logic to allocate history per tile. The code could result in excessive memory allocations in this case.
-
Bug Fix: Fixed an issue that caused undo to reset the selection in the graph.
-
Bug Fix: Fixed an issue that caused the sublevel picker in the Collection node to load all sublevel assets, causing lengthy freezes in large projects. The picker will no longer trigger asset loads.
-
Bug Fix: Removed support for the "Buffer Visualization" view mode on the deferred renderer node in the graph because it could cause a crash.
-
MovieGraph: Removed reliance on cvars for the (deferred renderer) 32bit setting on additional post-process materials, allowing per-layer support.
-
Bug Fix: Updated the graph's preview window to hide burn-in and widget render layers.
-
The Command Line Encoder node no longer requires the executable (specified in Project Settings) to be part of the project if the path isn't absolute (PATH will be searched).
-
The Command Line Encoder node no longer generates incorrect warnings about missing {shot_name} and {sequence_name} tokens.
-
The Command Line Encoder node now handles sequence-level encodes correctly (ie, the file name format excludes {shot_name}).
-
Bug Fix: Updated the "Editor Folder" collection query in the graph to traverse into subfolders.
-
Bug Fix: The autowire context menu in the graph is now restricted to nodes that can only be connected on that branch type or pin type.
-
Bug Fix: Fixed a crash that could occur when Save As'ing over an existing graph that's already open.
-
Bug Fix: Fixed a bug where the C++ add-node API (UMovieGraphConfig::CreateNodeByClass()) didn't work properly when called from Python.
-
Bug Fix: Fixed several quirks in the file name format autocomplete widget.
-
Bug Fix: Fixed the detail lighting mode (via View Mode Index) not properly working on the Deferred Renderer node.
-
Bug Fix: Updated the lighting components on the path tracer node to work properly. Previously they were exposed under Show Flags which did not work properly. A dedicated Lighting Components section was added, which instead affects the post processing volume's path tracing Lighting Components properties.
-
Bug Fix: Updated the "Write All Samples (Debug)" feature to work for the deferred and path traced renderers in the graph.
Mutable
New:
- Added a new modifier, 'Transform Mesh In Mesh', that uses a secondary mesh as a region to specify a volume in which to transform vertices, using the given transform input.
Rigging
New:
-
Improved component editing in skin paint tool
-
[Deformer Graph] Added "TwoLayerLinearBlendSkin" deformer function, which serves as an usage example for the new layer skinning option added to the "Skeleton" Data Interface. It allows you to use two skin weight profiles to skin your character. The primary skin weight profile may only contain weights for primary bones like arms and legs, while the second skin weight profile only have to specify weights for tweaker bones (with the exception of the root bone) that are parented to those primary bones.
-
Expose TriangleEdit in skeletal mesh editor.
-
Improved retargeter debug drawing.
-
[Deformer Graph] Added a new version of the "Skeleton" data interface that supports additional features such as
-
Access data from any skin weight profile,
-
Access per-bone animation attributes as bone buffers, similar to the existing bone matrix buffer
-
Enable layered skinning that allows for layering of multiple skinning kernels using multiple skin weight profiles, which may be helpful if you want to separate skin weights for primary bones and tweaker bone into two different skin weight profiles. See new deformer function DG_Function_TwoLayerLinearBlendSkin for example usage.
-
-
Deformer Graph - exposed attribute name as a input property pin on the "SkinnedMeshVertexAttribute" data interface, which can then be driven by a Deformer Graph variable from Blueprint or ControlRig
-
A new function, FSkeletalMeshOperations::GetPosedMesh, was added to get a posed copy of a skeletal mesh's FMeshDescription. This function allows specifying either a full set of component space transforms, or a named set of bone space transforms, keyed to specific bones. It also supports activation of morph targets and selecting specific skin profiles to use for posing the mesh.
-
Deformer Graph - Added support for a variable node to connect to a constant node to override its value. This may be useful for providing pin default values to input pins on deformer functions/sub-graphs. Users of these functions can override these values using additional variable/constant nodes connected to those input pins. This is a temporary solution before pin default values are implemented for Deformer Graph.
-
Deformer Graph - Added a new deformer function "ComputeNormalsTangentsAndKeepImportedNormal" that first computes the rotational offset between the imported normal and the recomputed normals derived from the rest pose vertex positions, and then reapplies this offset to the recomputed normals derived from deformed vertex positions, in a attempt to construct deformed normals that retain the characteristics of imported normals.
-
Deformer Graph & Control Rig - Added "AddDeformer" Node in Control Rig, which allows any Control Rig to dynamically add deformation effect to the bound skeletal mesh using a deformer graph during forward solve. Deformer Graphs used in this context can use the new "ReadSkinnedMesh" data interface to read the output vertex buffers from a previous deformer if there are multiple "AddDeformer" nodes present. When right clicking on the "AddDeformer" node, click on "Refresh Variables" to make Deformer Graph variables appear as input pins on the node. See various Deformer Rigs shipped with the "AnimatorKit" plugin for example usage.
-
Added "Hammer" weights operation to skin weight tool.
-
Deformer Graph - Added a compilation error when there are kernels with no valid execution domain present in the graph
-
Deformer Graph - Show "Outdated" on data interface node title if there is a newer version of the data interface.
-
Deformer Graph - Added error messages when compiling/running a deformer graph that contains a debug draw data interface with unsupported platform project settings, which should help diagnose why certain deformer graphs are failing silently if it contains this data interface.
-
Added ability to Copy/Paste skin weights between selections of vertices.
-
Deformer Graph - Added "Skin Weights as Vertex Mask" Data Interface, which combines the skin weights of multiple bones into a single per-vertex weight map. Useful for limiting deformation effects to certain body parts of a character using existing skin weights, instead of having to paint another vertex attribute weight map.
-
Deformer Graph - Added support for using Deformer Graph variables/constants to set properties values on data interfaces. See "Skinned Mesh Vertex Attribute", "Skeleton" and "Skin Weights as Vertex Mask" data interfaces for example usage.
-
ControlRig - Added a new flag "AllowMultipleInstances" under "Sequencer" category in ControlRigBlueprint class settings that allows multiple instances of the rig to be added to the same character in sequencer. It may be useful for Deformer rigs like the lattice control rig shipped with the "AnimatorKit" plugin, where users can add multiple lattice deformer to the same character.
-
Deformer Graph - Added API support for changing the pins shown on a data interface node based on data interface property. See the new UOptimusAdvancedSkeletonDataInterface data interface class for example usage if your custom data interface has such needs.
-
Deformer Graph - Added support for array-type variable, which can be driven from ControlRig via "AddDeformer" node by right clicking on the node and click "Refresh Variables", or from Blueprint via "Set Variable" API on a OptimusDeformerInstance, just like normal deformer graph variables.
-
When converting a static mesh to a skeletal mesh, using the asset browser, the converter now gives a choice of setting the target path for the skeletal mesh; removing and adding prefixes and suffixes; and allows specifying the root bone location, if not using an existing skeleton.
-
Determinism pass on RigVM hashing
-
Added isolated selection support to the skin weight editing tool.
-
Deformer Graph - Deformer Graph should now also support Mac platform
-
Added ability to edit skin weights while previewing the pose from a running PIE session.
Bug Fix:
-
Fixes issue in skin paint tool where user could not paint with relax brush unless bone was selected
-
Fixe a crash in Control Rig when undocking the hiearchy and closing one editor while multiple editors are open
-
Fixes issue where editing skeletal mesh with non-manifold geometry scrambles material assignment.
-
Fixed bug where skin weight editor would load non-normalized weights.
-
Auto-retargeter window no longer slow in large projects with many animation assets.
-
ControlRig - Fixed a dead lock issue that can happen during Control Rig post load, when calling FRigVMTemplate::Resolve.
-
Fixes static mesh to skeletal mesh conversion losing multiple UV channels
-
Deformer Graph - Fix crash when collapsing a link between a component source pin and a group pin into a sub graph.
-
Fixed RigVMEdGraph generating invalid model node paths for EdGraph subgraphs, when a function that contains a collapsed graph is renamed.
-
Prevent control rig debug draw displaying in game view mode when high resolution screenshots are taken
-
Added some safety checks to compute graph/optimus to prevent crashes on nullptr.
-
Fixed an editor shutdown crash due to shared pointer cross dependency at ControlRigModeTools
-
Deformer Graph - Fix an out of bound access with Duplicate Vertices Data Interface. It should not use the section vertex index offset because the content of Its data buffers are only meaningful when the kernels are dispatched per material section instead of per mesh.
-
Allowed UScriptStructs to be pre-registered for use with FRigVMRegistry
-
Deformer Graph Editor - Fix debug draw/shader print provided by the "Debug Draw" data interface not showing up in deformer graph editor viewport
-
Deformer Graph - Fixed unconnected "Color" pin on "WriteSkinnedMesh" data interface can lead incorrect/random vertex color values for skeletal meshes using the Deformer Graph.
-
Fix issues importing RigVM pin default values for structs with native ImportTextItem implementations
-
Switched to using FLazyName for control rig built in types to avoid static init order issues in PGO builds
-
Deformer Graph & Skeletal Mesh Editor - Change Skeletal Mesh asset details to show new vertex attribute weight maps under "LODInfo - Vertex Attributes" immediately after weight map layer creation, allowing users to enable new vertex attributes for Deformer Graph usage without having to reopen the skeletal mesh editor.
-
Deformer Graph - Fixed Trigger Graph cannot be triggered from blueprint using EnqueueTriggerGraph API
-
Deformer Graph - Fixed bad motion vectors when skeletal mesh using a mesh deformer changes LOD
-
ControlRig - fixed name related nodes having different behaviors in editor vs in packaged. Nodes like replace/concat now use IgnoreCase.
Deprecated:
- Deformer Graph - Deprecating lattice deformer function shipped with the Deformer Graph plugin. Use the new lattice deformer rigs shipped with the Animator Kit plugin.
Runtime
New:
-
Anim notify and sync marker workflow changes
-
Skeletons are no longer dirtied when adding notifies and sync markers from animation timelines.
-
Skeletons can still hold sync markers and notifies, but they are not mandatory and they can all be held in animation assets if required.
-
'Find References' for notifies and sync markers now launches the find/replace dialog when selected from the animation timeline.
-
Removing notifies and sync markers from the skeleton now does only that. To remove from animations, use the find/replace tab.
-
-
New: Make PhysicsControl work with PrimitiveComponent, not just meshes.
-
New: PhysicsControl adds a function that can be used to zero the implied velocities when moving a character.
-
Update warning message in UAnimationAsset::ReplaceSkeleton for clarity
-
Added Root Motion Attribute handling to Inertialization and DeadBlending nodes.
-
ControlRig AnimNode - Added support for using Enums as input pins on the ControlRig AnimNode.
-
Disable 'Add Socket' action in skeleton tree when a bone is not selected
-
New: Better help text relating to animation syncing.
-
New: Adds an editor-only option to enable/disable each BlendSpace sample in "analyse all"
-
ModifyCurve anim node now generates debug data
-
Updated LLM reporting for Animation Graph to more accurately reflect actual usage.
-
Expose functions on the various cached anim state machine types to blueprint
-
New: Rename PhysicsControlProfilesAsset to PhysicsControlAsset - no functional changes, and the redirector should fix up any existing assets. Note that this is still an experimental feature.
-
[AnimRuntime] Added an optional interpolation override when sampling animations. This makes it possible to force sampling animations in Step interpolation mode even though the Anim Sequence assets are set to Linear.
-
New: PhysicsControl supports the body modifier "default" movement type, so it doesn't force a change to the movement.
-
Bug Fix: PhysicsControl/RigidBodyWithControl fixes problems initialising physics assets that have kinematic bodies.
-
Bug Fix: PhysicsControl/RigidBodyWithControl makes sure that when controls are disabled, the constraints are removed and the RigidBodyWithControl reverts node back to its uncontrolled state.
-
-
Added a flag to allow skeletal mesh component's animation to be completely disabled
-
Added support for blend mode in Montage Inertialization when used in conjunction with DeadBlending node.
-
Added a log at additive retarget bone transform function, to detect bone size differences between the retarget transforms array and the skeleton required bones.
-
Add editor option to hide long list of enum blueprint actions in the ABP editor. The bound enum can now me set in the node's property window.
-
The RigidBodyWithControl animation node has a viewer (previously called "editor") that lets users see lists of controls, modifiers, sets etc. However, this does not always function as expected, so until it is improved it has been hidden behind the CVar p.RigidBodyWithControl.EnableControlSetViewer which is disabled by default.
-
Use UToolMenu for AnimNotifyTrack ContextMenu. This allows users to customize the menu and apply permissions.
-
New: Improve help text for BlendSpace evaluator, which doesn't always behave as expected regarding the time input.
-
Added option to disable animation ticking when a skeletal mesh is directly occlusion/frustum culled
-
Skeletal mesh global scale animation now has a minimum value of zero
-
Clamp montage playback when stopping at end of section
-
Skeletal mesh editor now uses the required bones to display the skeleton tree, so the bones stays in sync with the preview scene. This will make clear which bones are excluded or not, as the required bones might have some bones that can not be removed from the LOD due to physics or other various needs.
-
Improved blueprint navigation speed when several assets are open and we double click to jump to other asset or element, like a state machine state
-
Morph target maximum blend wheight is now configurable at render settings. Value can be also controled using a cvar r.MorphTarget.MaxBlendWeight
-
New: BlendSpace analysis provides an alternative orientation calculation method which avoids problems when the pointing bone is not restricted to an "upright" orientation
-
Added support for mirroring root motion
Bug Fix:
-
Fixed a rare crash when running initial pre-evaluate GT anim instance tick
-
Fix montages not being marked dirty when (e.g.) adding curve comments or changing curve colors
-
Fix issues with selection in the montage editor selection. Marquee selection now requires Alt key.
-
Revert changes to AnimGetter nodes that led to invalid data and added a compile time error to check for these broken nodes and instructions to replace them.
-
Bug Fix: Makes the action buttons in the BlendSpace details appear when searching
-
Fixed crash in blend profiles when skeleton mapping is incomplete.
-
Changed 'missing bones' ensure to be a logged error
-
Fix notifies not being displayed in context menus under certain circumstances
-
Fix for crash when validating auto rule based transitions. Also reinstated some warnings as info
-
RandomPlayer anim graph node now calls PreloadRequiredAssets.
-
Allowed post process Animation Blueprints to be applied based on a LOD threshold per-component
-
Fix budgeted skeletal meshes that are placed in levels not getting registered when playing as client
-
Fix for issue where looping level sequences could get stuck on the final frame
-
Optimized the opening of notifies/sync marker widget
-
Fix edge cases around re-importing meshes with bones inserted into the hierarchy
-
Add missing fast path icons for blend space nodes
-
Add missing nullptr check on animation blueprint editor preview instance
-
Fix to set transient Skeletal Mesh Asset property when value is changed on an actor in level viewport
-
Fix viewport cursor style in animation editors when hovering mesh info text
-
Fixed issues copying and pasting notify states in montages
-
Fixed an issue where the animation notify copy / paste menu items stopped working
-
Bug Fix: Ensure the RigidBodyWithControl pose cache is big enough, allowing it to work even when the skeleton is updated whilst the node is operating.
-
Fix anim getter node title not updating on state rename.
-
Make automatic transition rule account for transit durations smaller than delta time value
-
Exposed a native way to get the 'main' anim instance in a thread safe way
-
Deprecated USkeletalMeshComponent::SetAnimClass function
-
Fix Lyra PIE property access issues caused by use of 'most up to date' classes
-
Fix pose watch not drawing correctly for debug skeletons larger than preview.
-
Fix copy-pasting shared transition rules not behaving correctly.
-
Fixed BlendSpace log spam in TickAssetPlayer function by setting the log as Verbose
-
Fix crash in 'call function from anim graph' node BP menu population
-
Fix for animation blueprints incorrectly showing animation graphs using animation layers default shared group in my blueprint.
-
Removed double-call to RemapTracksToNewSkeleton for 'this' sequence when remapping skeleton
-
Fix montage network compatibility between editor and non-editor builds
-
Fixed recording of anim notify states in looping montage sections
-
Fixed an issue where the experimental AnimNext plugins accidentally showed the beta tag
-
Fix bone names being drawn for bones when they're not visible
-
Fix crash with setting bone name in skeletal mesh region bone filter.
-
Fix an issue where closing a stand-alone viewport resulted in a crash.
-
Fix for an issue where WheelController anim node wasn't updating upstream nodes in the anim graph
-
Fix FAnimMontageInstance::GetNextSection to return next section of instance rather than the montage default next section.
-
Fixed TSAN race condition around bForceRefPose flag
-
Fix for aim offset anim node to account for socket offset when calculating pivot location
-
Fixed crash when reverting Skeletal Mesh unsaved change while the asset is opened in the editor
-
Changed PersonaToolkit raw object pointers to weak object pointers, so validity can be checked
-
Account for possible invalid section when montage is force moved
-
Fixed OnlyTickMontagesAndRefreshBonesWhenPlayingMontages option updating the anim instance multiple times
-
Exposed bShouldStopAllMontages pin in latent Play Montage node
-
Fixed anim sequence cooking indeterminism issue with curve names and added some checks to help detect some cases
-
Fixed animation budget allocator debug rendering sometimes getting removed
-
Fix animation editors selecting the incorrect bone for non-mesh bones leading to array out-of-bounds
-
Fixed function renames not applying to property access nodes and compilation crashes post-rename
-
URO now ignores non-visible mesh components to prevent invalid LOD params being set
-
Fixed problems editing various property types in anim notifies (e.g. FGameplayTagQuery and FRuntimeFloatCurve)
-
Fix for cook warning related to skeletal mesh component instance data introduced by 35191113
-
Fix issue with byte properties containing enums where default pin values weren't being set
-
Fix pose watches not being drawn in PIE
-
Fix pose watches using multicolor bones
-
Fixed Regenerate LOD button not getting enabled in the Skeletal Mesh Editor under some circumstances
-
Fix crash when destroying nodes that have no outer animation blueprint
-
Fix crashes when using ref pose overrides when using skeletons with virtual bones
-
Fix anim BP node orphan pins not getting removed on disconnection
-
Updated icons for animation asset find/replace tab
-
Notify list are now refreshed after Undo / Redo on animation sequences, to avoid crashes caused by active tooltips
-
Fixed crash setting a preview animation blueprint
-
Fix pasted 'anim getter' nodes introducing hidden references to their source animation blueprint
-
Fix native bitfield-bool properties writing to incorrect memory when exposed as pins on linked anim graphs
-
Fix unfixable warnings when variables referenced in in anim graph node pin bindings are removed
-
Fixed a crash at the asset editor module manager due to bad dependency with the preview scene
-
Fix animation attribute registration issues with attributes defined as user-defined structs
-
Fixed memory leak when switching skeletal meshes and setting animation mode during montages
-
Fix for issue where anim streamable couldn't be created directly from anim sequence asset #changelist validated #virtualized
-
Breakpoints in Animation Blueprints can now get hit when not debugging a specific object
-
Editor fix for transient values being reset at SkeletalMeshComponent for Blueprint created components at PostEditChange
Sequencer
Bug Fix:
- Remove support for weighted blendables in camera animations/shakes. This wasn't really needed, and caused problem with weights animated by gameplay code which would get stomped by Sequencer.
Synthesis
New:
-
[MLDeformer] - Enable tests for the editor framework, updated all tests to latest API etc. - Cooking improvements, where stripped data is recovered after cook. - Ability to select a training device. This allows you to pick a specific GPU to train on, or choose CPU. - Added some extra Cuda related logging, to help debugging issues. - Added checks to validate training data, checks for NaN and Inf etc in NMM. - Add another return code from the training, and improve error logging in NMM (show call stack etc). - Some other small typo fixes etc.
-
[MLDeformer] Copy over all shared settings when switching between model types.
-
[MLDeformer] Removed the delta cutoff threshold property and filtered out bad deltas. This also fixes the problem where the delta cutoff length was removing deltas in post-skinning space in the viewport, while removing them with the same length in pre-skinning space. This would possibly cause deltas removed during training that shouldn't have been removed.
-
New: Improvements to the Physics Control Asset Editor. Note that the feature remains experimental.
-
[MLDeformer] Changed some default settings to see higher quality result on first training. This makes it easier for new users. More advanced users can tweak the values to reduce memory usage and increase performance at runtime. The values changed are: - Compression level, which was 20 before, but now 1.0 - Delta Zero Threshold, which was 0.0025 before, and now 0.001.
-
The File Cache options have been hidden from the UI in the Nearest Neighbor MLDeformer Model with a cvar "MLDeformer.NearestNeighbor.ShowFileCacheCategory". File caching only works in very specific circumstances, and is not recommended except within the same training session, and even still it may not work correctly.
-
[MLDeformer] Automatically create two hidden layers when creating a new Nearest Neighbor model. And automatically create a section as well.
-
[MLDeformer] Show an error when the deformer can produce visual shading artifacts. This can happen when no deformer graph is used while skin cache is disabled and the materials don't have 'Use with morph targets' enabled.
Bug Fix:
-
[MLDeformer] Fixed a bug where the heatmap in ground truth mode would flicker. Playback in ground truth mode is now disabled for now as this causes issues due to differences in geom cache and anim sequence sampling. Scrubbing works as we can force things to be at the right frame.
-
[MLDeformer] Fixed a bug where the heatmap could get in a wrong state when toggling it on and off while playing, and while in ground truth mode while playing, and then scrubbing.
-
[MLDeformer] Fixed a crash when switching between NMM and NN and back to NMM models.
-
[MLDeformer] Fix a crash when saving a level after creating a character blueprint with Vertex Delta Model in it and a compute graph component.
-
[MLDeformer] Improved handling of delegate bindings, which could prevent crashes.
-
[MLDeformer] Fixed an issue where ground truth heatmaps were incorrect on some frames. Disabled showing ground truth heatmaps while playing the animation as well as that just doesn't work well due to frame differences. Directly added some extra error handling in the Neural Morph Model and logging some info about the Cuda hardware used.
-
[MLDeformer] Fixed the timeline from breaking when switching models. This was because some delegates were still pointing to the old editor model which got destroyed after switching models.Directly fixed a few small errors in the comments.
-
[MLDeformer] Fixed a crash when having an ML Deformer asset open, with HeatMap enabled, while untrained in testing mode and reloading the skeletal mesh it uses through "Asset Actions -> Reload".
-
[MLDeformer] Fixed a bug in the Finalize Morph Targets button where the memory usage wasn't reported correctly. Also fixed an issue where the editor uncooked asset didn't include the compressed morph targets. And fixed a typo in the button's tooltip and added a bit more information. Also made the Finalize Morph Targets button disabled when there is nothing to finalize.
-
[MLDeformer] Fixed a crash when there are no input sample animations, and the NMM is set to local mode, and you click a bone.
-
[MLDeformer] Fixed a crash when switching models and then clicking the LOD "Auto" button.
-
[MLDeformer] Fixed some pytorch deprecation warnings and fixed an issue when switching from global to local mode after having trained in global mode. This had to resample data.
-
[MLDeformer] Fixed a crash when packaging a project with a blueprint that has a VertexDeltaModel based ML Deformer inside it.
-
Fixed an issue where the Editor may crash on exit after training the Nearest Neighbor Model.
-
Fixed an issue where the Nearest Neighbor Model would underestimate the available GPU memory when training, causing it to allocate more than was available.
-
Fixed python crashes when training the Nearest Neighbor Model on machines without CUDA.
-
[MLDeformer] Fixed a little bug when switching model types. It didn't auto select the correct input anim in the timeline.
-
Fixed an upgrade issue when opening existing old Nearest Neighbor Model assets, which would cause some training tools such as the Key Pose Extractor to fail to open.
-
[MLDeformer] Fix some crash when pressing Undo in a specific case.
-
[MLDeformer] Bug fix when switching back and forth between ML models and then train again. Also some small tweaks to the python training code to move a tensor to the gpu when using gpu. And moved some display logging to verbose while sampling frames.
-
[MLDeformer] - Fixed a crash when deleting bones from the bone list in local mode. - Make sure the ML Deformer component gets reinitialized after training and after updating its trained input info object. - Handle the case when the deformer is not compatible with the current skeletal mesh.
-
[MLDeformer] Vertex delta model was still using the NNE RDG instead of ORT, which caused it to not be able to run the model properly.
-
[MLDeformer] Add an extra improvement to the handling of bindings in the ML Deformer Component. Also removed the quality level from the ML Deformer component as that isn't used anymore since we added LOD.
-
[MLDeformer] Fixed a crash in the Nearest Neighbor Model where the GetNumBaseMeshVerts() is 0, which can be caused by the imported model data not to be present.
-
[MLDeformer] Fixed a crash and potentially incorrect behavior when switching from Local mode to Global mode in the Neural Morph Model.
DMX
New:
-
Conflict monitor now shows a list of objects actively sending DMX even when no conflicts are detected.
-
Add progress bars when loading a large DMX library into control console or pixel mapping.
-
Control Console - Implement highlight selected patches in the fixture patch list when in custom layout.
-
Rework Blueprint Nodes and Runtime API to reset and clear DMX buffers
-
DMX Subsystem now has a Blueprint Node to clear DMX Buffers.
-
Fixture Patch now offers Blueprint Nodes to send default and zero values.
-
Monitors now update when DMX Buffers were cleared.
-
Changing port settings in the DMX Library now clears DMX Buffers.
-
-
Add a compact editor for Control Console that offers a minimal view and can be docked to the level editor.
-
The default quality of Pixel Mapping cells is now high instead of low..
-
Control Console - Add drag and drop operation in the cue list.
-
Add an auto-grouping checkbox for the default layout in Control Console.
-
Add shortcut to reload Control Console asset from disk.
-
Add a combo box to display and select a cue in the Control Console main and compact views.
-
Control Console - Implement ask user to confirm "Store" option when storing a Cue.
-
Add physical units and physical value ranges to Fixture Type Functions (editor only). Physical units and ranges export to MVR.
-
Control Console - Implement select every similar fader in your custom layout across all fixtures by double-clicking.
-
Add "group" and "add" options in the fixture patch list of the Control Console.
-
The DMXEditorModule now offers a public method to export DMX Libraries as MVR files.
-
Remove the beta version flag from the Control Console plugin.
-
The Fixture Type editor no has an option to only display the latest revision of GDTF modes.
-
Add controllers exposing editor color property and implementing search bar collapse/expand state in Control Console.
-
Add "physical unit" as a value type display option to the Control Console.
-
Add renaming Control Console UI options.
Bug Fix:
-
Control Console - Fix fader group controller combo box doesn't show the controller name.
-
Control Console - Fix prevent double-click from switching from compact/full UI modes.
-
Pixel Mapping and Control Console now send DMX values depending on their Stop Mode when their respective editor is closed.
-
Fix a bug where the Patch Tool does not show newly created DMX Libraries, fixed a bug where UDMXSubsystem::GetDMXLibraries did not return newly created DMX Libraries.
-
Control Console - Fix deleting layout 0 automatically switches back to Auto layout.
-
Control Console - Fix Custom Layout Rename button doesn't work.
-
Fix Control Console asset dirties on first opening
-
Control Console - Fix matrix fixtures can't be removed using the DEL key.
-
Fix issues where undo did not work after deleting an Input Source in Pixel Mapping.
-
Improve positioning of cells when adding selected patches to pixel mapping, fix cells stop resizing by mouse when either side is 1px.
-
Control Console - Fix Fader UI is not updated correctly when switching between custom to auto layout when oscillator class is involved.
-
Modes can now be edited in the Details View when multi-selecting Fixture Patches
-
Auto-assign now keeps valid stacks of patches instead of aligning them one after another.
-
Control Console - Fix various issues related to DMX Editor settings using a custom config instead of EditorPerProjectUserSettings.
-
Control Console - Fix user can add all patches or an empty group in custom layout if a filter is set.
-
Control Console - Fix faders not updating properly when creating new cues.
-
Fix Control Console does not preserve the grid layout when toggling off the Auto-group patches mode.
-
Fix Attributes defaulted to the first entry of Attributes in project settings, leading to changed defaults if the first entry changed.
-
Control Console - Fix renaming controller causes crash with matrix Fader Groups.
-
Control Console - Fix the add patch menu in custom layouts.
-
Control Console - Fix engine crashes when the Control Console is upgraded from a legacy Output Console.
-
Fixed an issue where OSX did not render DMX Pixel Mappings correctly and sent zero instead of color values.
-
Control Console - Fix Control Console UI widgets for controllers.
-
Modes can now be selected from the Add Fixture Patch menu as expected.
-
Control Console - Fix reset to default option is not performed correctly.
-
Fix Compact DMX Control Console window remains open when returning to Control Console.
-
Control Console - Fix controllers values automatically synching on grouping.
-
Control Console - Fix engine stalls when recalling a cue from a large DMX Library with limited fixture exposure.
-
Control Console - Fix matrix controllers don't get ungrouped when auto-grouping.
-
Control Console - Fix DMX streaming will stop if DMX library is reloaded.
-
Control Console - Fix resetting to Default Values doesn't mark Cue as modified, preventing users from saving changes.
-
Control Console - Fix rename muted/unmuted state for Fader Groups/Faders.
-
DMXEntityFixtureType::CreateFixtureTypeInDMXLibrary now correctly updates the Channel Span for its DMX Modes.
-
Control Console - Fix UI fails to update slider for grouped patches.
-
Control Console - Fix add Fader Group/Fader UI buttons.
Deprecated:
- The DMX Screen Component is now fully deprecated in favor of a purely Fixture Patch based workflow.
Editor
New:
-
Added the rendered object's name as metadata to the RenderThumbnail CPU trace, in order to quickly diagnose the costliest thumbnail renders
-
Move some USD classes and utilities (including access to the USD SDK) to a new USDCore plugin.
-
Added support to export CameraRig_Rail animation to USD.
-
Groom Bindings are now compiled asynchronously by default in the editor
-
Added a setting to control whether warnings logged during validation are promoted to errors
-
FValidateAssetsSettings::bCaptureWarningsDuringValidationAsErrors controls this behavior, and defaults to true to preserve the existing behavior.
-
Note: FDataValidationModule::OnValidateSourcePackageDuringCook now keeps them as warnings, as this is only used by UE::Cook::FDelegates::ValidateSourcePackage and cannot accept a FValidateAssetsSettings argument.
-
-
Group the PreviewPlatforms into submenus organized by PlatformName
-
Input of the '-PackageFolder' arg when running ResavePackagesCommandlet is now properly sanitized and the commandlet will warn the user if the provided path did not result in any package files being found.
-
Updated SunPosition plugin to add VolumetricCloud component with an updated version of the Hillside clouds material.
-
Json Preview Platform for Editor - New menu options for preview platforms to generate/preview devices from json files - Currently only enabled for Android preview platform
-
ImageCore::ResizeImage with fast high quality image resizing is now used for Texture Downscale and MaxTextureResolution. More filters added as well as the option to do alpha-weighted resizing.
-
Added DoubleClickBehavior to the InteractiveToolsFramework.
-
New: Added an additional fallback so we can spawn the Slow Task widget if we are a Program that compiles against the editor, but we don't use the mainframe module.
-
New: Skipping Asset Data Updates in the source control module when a actor label is changed if its package is transient. Some tools like the Chaos Visual Debugger need to spawn a large number of transient actors, which will result in actor label creations, which becomes expensive due to that asset data update attempt. Transient packages cannot be saved, therefore we can safely skip the update in the source control module for them.
-
Added JsonObjectGraphFunctionLibrary, a set of edit time functions for stringifying objects and persisting those strings to temporary files. Includes two new console commands snapshotblueprints
-
Add r.Editor.NeverStartInPreviewMode Disable Preview Platform automatically if Preview crashed
-
Add fixer to illegal reference data validation errors
-
Added IAssetReferenceFixer (following the pattern used for IAssetReferenceFilter), which allows UAssetValidator_AssetReferenceRestrictions to add a fixer token to any illegal references it finds.
-
New config option TextureImportSettings AutoLimitDimension to resize textures at import time to limit texture source sizes.
-
TextureAssetActions that modify texture source data can now convert 16 bit per channel source data to 8 bit, eg. TSF G16 to G8. This makes the uasset source content files smaller.
-
Removed duplicate Volumetric Cloud assets in SunPosition plugin to use EngineSky assets instead.
-
Added UMaterial and UMaterialInstance asset validators to help troubleshoot material compilation issues earlier on. They are disabled by default, see data validation setting "material validation platforms" field.
-
Added experimental support to import some USD assets (the same asset types supported by FBX) through Interchange.
-
Texture UEDelta filter provides much faster loading of uasset texture files.
-
Added option to export skeletal animation as geometry cache to USD.
-
Added new OverflowPolicy for text (Middle Ellipsis) can be used also in UMG widgets, there are currently some limitation to it displayed in the ToolTip.
-
Batch Renamer release, tool for renaming multiple Assets and Actors at once.
-
New: [Plugin Browser] "External" plugins (such as from .uproject AdditionalPluginDirectories, -PLUGIN= command line argument, or UE_ADDITIONAL_PLUGIN_PATHS environment variable) are now displayed in a separate category.
-
Added support for new check function for hover capture in Interactive Tools Framework behaviors, similar to the check function for mouse capture in behaviors.
Bug Fix:
-
Fix issue where temporary WorldPartition maps generated at cook time could be assigned Primary Asset Ids that would confuse the Asset Manager system
-
[Plugin Manager] Target receipt selection now prioritizes editor targets whose Launch executable matches the currently running executable. Previously, the first (arbitrary) editor target receipt with a matching configuration was chosen. This was necessary to disambiguate a second receipt for an editor target in the engine binaries directory, and matches existing logic used to determine the correct receipt in FEngineLoop::AppInit.
-
Disable breakpoints during tab restore to prevent editor freeze / infinite loop
-
Add PlatformName to FDataDrivenShaderPlatformInfo. In Editor, when using -game we now also load the TPS module of the preview platform if we are using OverrideSP command
-
Fix memory leak when the level editor viewport is set to realtime but it's not visible.
-
Added support for custom reset to default widgets to IDetailPropertyRow/FDetailWidgetRow
-
Allow single property views to hide their reset to default button
-
Fixed issue when using Preserve Aspect Ratio on an SWindow where the window would change aspect ratio the first time it was resized if it didn't have an OS border/titlebar
-
Re-enable VK SM5 preview for D3D Force SM6 for preview VK SM5, Mac SM5 Enable Lumen Support for Preview VK SM5, Mac SM5 Modifying FeatureLevelSwitch to respect the parent ShaderPlatform FeatureLevel and not the one set by preview in order to have consistent material logic with the Shader Platform we are trying to preview
-
Fixed crash when diffing class objects with sparse data
-
Fix for crash when adding a component in the level editor after its scene root has been deleted
-
Use the Runtime Value of bSupportsInlineRayTracing and bSupportsRayTracingShaders for preview platforms This avoids getting in a bad state where the Preview platform has bSupportsRayTracing=true, but bSupportsRayTracingShaders=bSupportsInlineRayTracing=false while Runtime RHI globals like GRHISupportsRayTracing is true, leading to crashes because of missing shaders. Like Android VK SM5 Preview in D3D Editor
-
Bug Fix: Fixed an issue where the OnTabClosed delegate was not triggerd when the Tabs were closed during the Mainframe reinitialization process.
-
Fixed material editor crash when trying to restore previously open shader code tab before shader instances are populated.
-
Fix property viewer not displaying correctly when setting a UScriptStruct as a container
-
Fix some cook nondeterminism bugs involving UWaterBodyMeshComponent and UAtmosphericFogComponent
-
Bug Fix: Added a missing null check on FActorTreeItem::OnVisibilityChanged. Some tools like the Chaos Visual Debugger can perform GC on their own, so if a visibility changed event in the outliner is processed while that is happening, we can end up with an invalid actor ptr which will result in a crash
-
Fixed crash when diffing assets in inactive plugins
-
Always scroll the initially selected item into view for class pickers
-
Diffing umap assets now provides a more useful text representation of the map, rather than an empty T3D object
-
Fix 100% repro crash on right click for Text Render / Dynamic mesh actors in outliner. Add check class valid AnimationAsset.
-
Hide Preview Platform indicator when we hide viewport UI
-
Updated clipboard operations in WindowsPlatformApplicationMisc to report an error instead of asserting if clipboard ownership is stolen before CloseClipboard is called
-
Make RenderUtils read from TargetPlatformSettings. Fixes the crashes/wrong rendering preview had when the sdk was not installed for the previewed platform
-
Added support for importing RootUV attribute from Blender groom Alembic.
-
Fixed UEditorValidatorSubsystem::ValidateAssetsWithSettings taking its settings as an out-param rather than an in-param
-
Fix a rare crash on editor shutdown caused by incorrect usage of EditorModeManager. Avoid interacting with EditorModeManager singleton during editor shutdown, as it's destroyed in AppPreExit, which is before ShutdownModule is called during editor shutdown (AppExit)
-
Fix thumbnails of transparent textures.
-
Fixed cases where Color Grading hue, saturation, and value sliders could fail to update when changed in another panel
-
Plugin Reference Viewer - Fixed a crash when plugins reference other plugins that have have not been discovered
-
Fixed a bug where Asset Guidelines failed to update ini files when the Enable Missing button was clicked.
-
Fix ShaderComplexity View crash in ES31 in Editor when SecondayUpscale is active
-
Asset Registry tag values are now updated when an asset is moved on disk
-
Fix unintended copy of FSelectedActorInfo in MakeTransformDetails Since of the operand in the ternary statement was a temporary object, we held a const reference to a temporary copy rather than a reference to the object pointed by SelectedActorInfoPtr
-
Replace Actor will now properly preserve scale and mobility for scene components coming from blueprint classes.
-
Fixed Curve Editor Crashes in array remove/clear and undo/redo
-
Editor: make viewport FOV computation consistent with the game
Datasmith
New:
-
Added the "bExportStaticMeshSourceData" export option when exporting static meshes to USD, which can be used in order to export the source mesh data as opposed to the current render data of the static mesh.
-
Added an explicit option to regenerate the LevelSequence that is created for AUsdStageActors when they open a stage. That option can be found on the USD Stage Editor, under the Options menu. In addition, many issues were fixed related to inherited visibilities in USD, and how those map to non-inherited visibilities in Unreal.
-
Optimized the opening and import of USD stages that use USD instanceable static meshes.
-
Fixed some performance bottlenecks on USD Stage Editor, especially for when opening very large USD stages.
-
Implemented support for removing and reloading referenced USD layers and payloads, by selecting the prim with the reference or payload, and right-clicking the target reference or payload on the references panel to the right of it.
-
Allow setting USD-related Unreal project settings via Python/Utility Blueprints: Just use unreal.UsdProjectSettings.get_default_object() to retrieve the settings object, and set/get the desired settings via get_editor_property/set_editor_property.
-
Exporting skeletal and transform animations to USD will now cover more cases, including components with AnimBlueprints and attach sockets.
-
Added an option to the USD LevelSequence exporter called "bExportSeparatePrimsPerSpawnableInstance" to control whether the export should spawn additional prims for each subsection spawnable instance or not
-
Implemented a new USD schema to allow explicitly controlling whether prim hierarchies are collapsed or not, when opened or imported in Unreal. Check the schema directly at "Engine\Plugins\Runtime\USDCore\Resources\UsdResources\Win64\plugins\unreal\resources\unreal"
-
Implemented a new option called "Use prim kinds for collapsing" (visible on the Options menu of the USD Stage Editor, as a property on the AUsdStageActor and as an import option when importing stages) that controls whether the import process should even use prim kinds for collapsing at all. When disabling this option, prims will not be collapsed by default.
-
Added the "USD.LevelSequenceExport.SkipConstantValues" cvar (enabled by default) that controls, for LevelSequence exports to USD, whether we should automatically skip exporting a timeSample value if the previous exported value for that property was identical and the new value is not needed.
-
Exporting geometry caches, static and skeletal meshes to USD will now also emit values for the extent attribute
-
Allow exporting static meshes with the Nanite override attribute and multiple LODs and at the same time.
-
Added support for opening and importing stages with the UsdMediaSpatialAudio schema via USoundWave assets, UAudioComponent and AAmbientSound.
-
Implemented support for opening USD stages and authoring new material overrides directly on the generated staticmesh/skeletalmesh/geometrycache components, even if those referenced prims were inside USD instanceables. This is done by the usage of USD collection-based material assignments.
-
[SketchUp] Fixed incorrecly exported geometry by baking transform into meshes with SketchUp transform that is not supported by Unreal(like 'shear' or parent scaled non-uniformly with a rotated child component).
-
Replaced the usage of Sequencer Dynamic Bindings with Sequencer Universal Object Locators in order to allow creating bindings, on external LevelSequences, to actors and components that are spawned when USD stages are opened via the AUsdStageActor. These bindings automatically repair themselves when the stage is reopened/reloaded.
-
The Selection Sync option of the USD Stage Editor is now enabled by default.
-
[Solidworks] Added support for Datasmith exporter of Solidworks 2024
-
Implemented a new version of the USD Asset Cache (UUsdAssetCache3). This version exposes the cached assets directly on the content browser, which should consume less memory and be more useful, safer to use, and easier to maintain.
-
Implement support for muting and reloading USD sublayers by right-clicking on them, on the bottom panel of the USD Stage Editor window.
-
Added a new Unreal project setting option called "Log Usd Sdk Errors" that enables or disables the reporting of USD SDK errors onto the Output Log.
-
Added a new option on the USD Stage Editor: "File -> Export -> Flattened layer stack", which flattens the opened USD stage's local layer stack into a single layer, but retains reference and payload arcs.
-
Add basic support for opening USD stages using UsdLuxShadowAPI (just the shadow:enable attribute for now).
-
Renamed 'bReuseIdenticalAssets' to 'bShareAssetsForIdenticalPrims' on the USD import options dialog.
-
Improved the USD.DiscardUndoBufferOnStageOpenClose cvar to have it prevent serialization of assets/components after opening, closing and reloading USD stages. This cvar is disabled by default, but can be used in order to gain some performance when opening very large USD stages, in case undo/redoing past the stage opening/closing operation itself is not needed.
-
[Solidworks] Metadata export - component, document, generic, summary, custom properties, config properties, comments, BoM table
-
Optimized the process of reloading USD stages via the USD Stage Editor (File -> Reload option), especially for very large USD stages.
-
Optimized the handling of update notices emitted by the USD SDK when a stage opened via AUsdStageActor is modified.
-
[Solidworks] Used PersistentIds for face identifications which fixes issues with face-material connection in the exported data
-
[Solidworks] Improved export times
-
[Solidworks] Animation is now exported from solidworks using Direct Link Sync
-
OpenUSD version was upgraded to v24.05
-
Optimized the process of opening and importing USD stages, especially for large stages.
-
When exporting LevelSequences to USD, the current level will now also be exported by default, unless another level is provided.
Bug Fix:
-
[Solidworks] FIxed exported parts not being updated when changing configs with DirectLink Sync
-
Fixed an issue when opening USD stages with non-primitive-shape Gprims within a prim hierarchy would cause the generated, collapsed, static mesh to be invalid and empty.
-
Fixed the export of LevelSequences to USD, when the LevelSequence animated blueprints set to rerun their construction scripts continuously in the Sequencer.
-
Fixed incorrect transforms when exporting LevelSequences to USD in some scenarios related to attachment tracks, especially if those were on top-level actors.
-
Fix ensure being triggered when adding/manipulating animation tracks of unsupported types on the LevelSequence generated by an AUsdStageActor when it opens a USD stage.
-
Fix LevelSequence spawnable tracks exported to USD (as visibility timeSamples) never being able to actually hide the objects.
-
[SketchUp] Fixed Layer/Tag visibility to take into account Default(Untagged) layer visibility overrides from parents.
-
[Datamith exporters] Datasmith exporters correctly inform about plugin upgrade when installing a newer version over the old one
-
Fixed how some scenarios would end up generating too many materials when opening or importing USD stages (e.g. if the mesh was doubleSided, the material required different primvars, etc.).
-
[Rhino] Fixed failing sync/export when internal texture has no path
-
[Rhino] Fixed export of visibility in certain cases, taking parent visibility into account
-
Fixed some name collision issues when exporting LevelSequences with spawnable tracks to USD, for those sequences with multiple spawnables that have identical names.
-
Fix a race condition when cooking games and applications that use the USD importer plugin using multiple cooker processes.
-
[3dsMax] Fixed Arnold light export SkyPortalLight only when the light is a SkyDome in Max
-
[3dsMax] Fixed Disk shape type to export as proper area light
-
BugFix: [Archicad exporter] Fixed crash exporting Morph elements
-
BugFix: [Archicad exporter] Fixed mirrored Morph elements export which caused exported elements to be misplaced before
-
[Archicad] Fixel export of Window/Area light orientation
-
[SketchUp] Fixed export of geometry normals which causing lighting issues when geometry is transformed within group
-
[Solidworks] Fixed mesh actor visibility when exploded view has parts different in different configs
-
Fixed many issues related to visibility and visibility tracks, when opening and importing USD stages.
-
[Navisworks] Fixex crash exporting high poly density terrain geometry
-
Fixed the behavior of AUsdStageActors converted into Spawnables when it comes to loading and unloading the stage, especially when in PIE or being rendered via MovieRenderQueue.
-
[CAD] Fixed importing non-manifold geometry hanging the editor
-
Fixed a crash when interacting with the LevelSequences generated by the AUsdStageActor after going into and out of PIE, in some scenarios.
Framework
New:
-
Engine (map and set add item); Implementing a way to have the map and set fill in with the next available enum value instead of always doing the default value. -- Code -- PropertyHandleImpl: FPropertyHandleMap::AddItem() - Added a HasKey() lambda. We're then checking if the map property's key is an enum property, if so, we'll loop the enum values to see if the map doesn't already have that enum value as a key. When we find one that isn't in the map, we're adding a child node and then setting the child's key node to be the enum value that is not in the map yet. If the map property's key is not enum then we do the old check for if the default key isn't there. FPropertyHandleSet::AddItem() - Added a HasElement() lambda. We're then checking if the set property's element is an enum property, if so, we'll loop the enum values to see if the set doesn't already have the enum value as an element. When we find one that isn't in the set, we're adding a child node and then setting the child node to be the enum value that is not in the set yet. If the set property's element is not enum then we do the old check for if the default key isn't there. UnrealTypes: FSetProperty::GetElementProperty() - Added this getter to return the ElementProp property.
-
Curve Table Filtering; Improving the curve table uasset filtering so we get more specific matches to the text queries. For example, typing "location" will filter all text with location in it but then typing "location.x" used to filter everything with location and x in it, now it'll filter things with location.x in it. So instead of filtering strings with x in it like "max", it now keeps both of the terms in consideration by finding x and then searching the hierarchy for location as well. -- Code -- CurveTableEditor: FCurveTableEditorItem::PassesFilter() - Updating the string search to not just be a Match() but to find each token in the string's hierarchy. Written by Andrew Rodham.
-
Engine (FScriptSetHelper); Adding FindLogicalIndex() to the set helper so we can get the logical index from the internal index. The internal index can have invalid entry indices kept in a continuous list for faster adding after an entry have been removed, while the logical index is all of the valid entry indices. -- Code -- UnrealType: FScriptSetHelper::FindLogicalIndex() - Added this function so we can get the logical index by passing in the internal index.
-
Remove CoreMinimal.h includes from plugin template headers
-
Adding new cvar to EditorIterationTests named project.iteration.pie.testiterations which specifies the number of times we start/run/stop PIE during the test. Default is 1 to match previous behavior.
-
The 'Revision Control Login' dialog will now immediately save settings changes to disk when either 'accept' or 'disable' buttons are selected where as before the changes would only be made permanent when the editor was shutdown.
-
Added a data validator that checks for corruption in package files. It will check for truncated files that were not fully saved to disk, invalid package summary info at the front of the package file and that the unstructured data stored in the package trailer is valid.
-
AggregateGeom (shape arrays); Adding the metadata specifier TitleProperty so we know what the name of the shapes are in the shape arrays. -- Code -- AggregateGeom: FKAggregateGeom - Added TitleProperty = "Name" to the shape array properties.
-
Exports to a .csv file the list of asset references that exist between the plugin and one of it's plugin dependencies
-
Utility console command to trace a plugin dependency chain and output the found paths
-
Add a RunCommandlet console command. Allows for faster iteration when debugging commandlets in the editor (e.g via hot reload)
-
ExportDirectory command added what will export to csv all cross plugin asset references for all plugins found under the specified directory.
-
Enabling GauntletModule to support multiple entries/exits from PIE without re-creating its controllers.
-
Plugin reference viewer utility suite. Plugin reference graphs can be exported to .csv to detail the number of reference types to each of the plugin dependencies
Bug Fix:
-
Updated the Asset Reference Restrictions asset validator to also ignore Verse packages when checking soft dependencies. Previously it only ignored script packages.
-
USkinnedMeshComponent (min LOD validation); Adding a validation step to the SetMinLOD(), OverrideMinLOD(), and ComputeMinLOD() function calls so we aren't setting to a value that doesn't have render data. This was seen on lower end platforms where the mesh would be invisible because there was no render data for the min LOD value being set. -- Code -- SkinnedMeshComponent: GetValidMinLOD() - Validate the min LOD value of the mesh component by iterating over render data to make sure we get something usable. SetMinLOD() - Calling GetValidMinLOD(). OverrideMinLOD() - Calling GetValidMinLOD(). ComputeMinLOD() - Calling GetValidMinLOD().
-
Fixed an issue where the perforce source control module was not returning the correct workspace root after a user had changed the currently used workspace via the editor ui.
-
Fixed a potential shutdown crash in the uncontrolled changelist module.
-
Engine (array, map, and set add item); Fixing an issue with the previous TMap and TSet auto increment implementaiton, where if you remove an element in the middle of the array then adding a new entry would incorrectly grab the last index of the container to adjust it. When adding an entry into a container, it will use the first free index (head of the linked list) instead of just adding to the end. Now we'll return the added logical index (meaning, the valid element index and not the internal index) into the container so calling code can get the correct entry if needed. NOTE: There is still a side effect of how we use the first free index of the container, which is really the last removed element of the container. This means that if we then add an element from an enum, it could be in a position that isn't sequential visually. For example, you add all entries with an enum key from 0-5, those keys will match the container index [0] [1] [2] [3] [4] [5]. You remove index 2 and 4 from the container [0] [1] [3] [5]. Now when you add, it'll add the new element to index 4 but the enum would be 2 [0] [1] [3] [2] [5]. -- Code -- PropertyHandleImpl: FPropertyValueImpl::AddChild() - Added an int32 return type so we can return the logical index of the added child. FPropertyHandleSet::AddItem() - Using the child index from AddChild() instead of grabbing the last element on the container. FPropertyHandleMap::AddItem() - Using the child index from AddChild() instead of grabbing the last element on the container.
-
Fixed an issue where attempting to use a workspaces with a root set to a volume root would fail.
-
USkinnedMeshComponent (min LOD validation); Removing the log because it can get spammed when render data isn't ready. -- Code -- SkinnedMeshComponent: GetValidMinLOD() - Deleted the logging.
-
PR #10616: Fix not being able to edit Gameplay Tag Queries from modal windows
-
Fixed crash that occurred when creating an FAdvancedPreviewScene with bDefaultLight set to false
-
Fixed ensure when editing CDO properties in FDataLayersBroadcast::OnObjectPostEditChange.
Interchange
New:
-
It is now possible to save and load Interchange translator settings via Python and Editor Utility Blueprints (e.g. via the save_settings() and load_settings() functions) in order to "apply" property changes to translator settings.
-
Removing PCX importing/exporting.
Bug Fix:
-
Deformer settings are now retained when a skeletal mesh is re-imported.
-
Fix for FBX exporter not exporting control rig track data when there is no equivalent animation track
Landscape
API Change:
- Deprecated CreateLayerFrom, since it's a duplicate from DuplicateLayerAndMoveBrushes, but missed the brush reassignment, and was unused anyway.
New:
-
Removed editor-only data from landscape/water classes in order to avoid issues with missing data in cooked editor. Note that the associated textures have been changed to lazy-load on use (i.e. in the editor only, when the landscape brushes run) so that this doesn't affect the data loaded at runtime
-
Adjustments to actionable (landscape) messages UX:
-
Added tooltip when the widget is collapsed to help the user understand what it's about without having to expand it
-
Show the number of affected landscape actors even in the "dirty actors" case to help the user assess how much "out-of-date" the overall landscape is
-
Dirty actors are now handled part of out-of-date landscape proxy flags
-
Optimized update by gathering all out-of-date flags at once (~33% of what it used to cost)
-
-
Various UX improvements for landscape "Select" tool :
-
Don't display target layers, edit layers or BP brushes when using the Select tool, since it makes no sense there
-
Display the Select tool in the Paint panel since it applies there too
-
Refresh the landscape mode details panel when clearing the selection in order to hide the Select tool options immediately
-
Moved the Select tool-specific options into a "Select Mask" category
-
Moved the Select button to the end of the tool list for both Sculpt and Paint panel, since this is not really an editing tool and acts in both modes
-
-
Added system to invalidate VSM pages when using (non-Nanite) landscape, to hide shadow artifacts induced by the vertex morphing system of standard landscape : Relies on pre-computing max height delas from mip-to-mip for every landscape component Invalidation occurs when the evaluated max delta between the heights at the LOD value that was active when VSM was last cached is different enough from the heights at the current LOD value (for a given persistent view), based on a height threshold that is tweakable per landscape and overridable per landscape proxy Invalidation doesn't occur when Nanite landscape is used The invalidation rate is decreased as the LOD value goes up, controlled by a screen size parameter in the landscape actor (overridable per proxy), under which no invalidation will occur. This avoids over-invalidating VSM on higher LOD values, since they tend to occupy less real estate and therefore don't need to have perfect shadows
-
Added per landscape (overridable per-proxy) shadow map bias to help with this problem too
-
Added 3 non-shipping CVars to help tweak those 3 parameters in-game (landscape.OverrideNonNaniteVirtualShadowMapConstantDepthBiasOverride, landscape.OverrideNonNaniteVirtualShadowMapInvalidationHeightErrorThreshold, landscape.OverrideNonNaniteVirtualShadowMapInvalidationScreenSizeLimit)
-
The whole invalidation system can be enabled/disabled via CVar landscape.AllowNonNaniteVirtualShadowMapInvalidation
-
Added another CVar (landscape.NonNaniteVirtualShadowMapInvalidationLODAttenuationExponent) to tweak the screen-size-dependent invalidation rate curve shape
-
-
Fixed landscape.DumpLODs command : now works without parameter and can be used several times
-
Changed CachedSectionLODValues system for landscape to be usable both for ViewState-less views (one-shot renders like water info custom render passes) and "persistent" views (those that have FViewStateInterface associated). This allows to keep track of the previous frame's CachedSectionLODValues for a given persistent view and removes the previous hacky method
-
Prevented landscape render systems to have their LOD section values cleared when a render is made on another scene (e.g. any time a thumbnail renders in editor or when custom render passes execute) : now only the render systems that pertain to the scene being rendered get udpated
-
Landscape UX fixes
-
Fixed some landscape CVars which were not render-thread safe
-
Removed redundant calls to SupportsLandscapeEditing when ticking landscape proxies for grass. This is to avoid O(N^2) complexity when iterating on landscape proxies for ticking grass.
-
The Resize and Move tools are now disabled instead of hidden when unavailable, and the tooltip mentions why they are not available.
-
Optimizations for landscape flatten/smooth tool
-
Added info message when there are no target layers in landscape mode, to help the user understand the workflow now requires him to add layers either using the "Add" or the "Populate from materials" button
-
Added AllowedDensityRange to landscape Grass Variety. This can be used to prevent a variety from ever spawning on a given range of grass density (specified as an interval between 0 and 1)
-
Made landscape collision settings overridable per-proxy
-
Added tooltips to Landscape Dirtying Mode settings and made "In Landscape Mode And User Triggered Changes" the default
-
Water: Implemented the ability to tag arbitrary actors as "ground" by adding a WaterTerrainComponent. This will cause them to render into the water info texture terrain heightmap and affect wave attenuation, water rendering, etc.
-
Improvements to landscape flatten UX:
-
The flatten target value and terrace interval properties are defined in absolute world-space so we now bound their min and max slider values to what that the landscape can actually reach, so that the interval is always valid, regardless of the landscape scale
-
Adjust the preview grid in realtime when the target value is changed via the slider, to make it much easier to eye-ball it
-
Prevent the flatten target value eye dropper tool to validate the change when clicking anywhere outside the viewport or when leaving landscape mode
-
Save the value of preview grid in the user settings
-
-
Landscape mode paint panel :
-
Added filter to target layers list (helps when too many layers are being used)
-
Minor UX improvements
-
-
Landscape: Expose additional rendering properties on Landscape and Grass actors
-
Adds SActionableMessageViewportWidget in Viewport's toolbar. This widget will host warnings or messages with the ability to automate actions for the user. Current actionable messages: Invalid Landscape grassmaps, with associated rebuild action Invalid Landscape physical materials, with associated rebuild action Invalid Landscape nanite meshes with associated rebuild action Invalid grassmaps, physical materials, nanite meshes will be agregated to only one message if multiple rebuild are necessary * Landscape proxy packages needs to be updated, with associated mark dirty action
-
Added multiple views (split screen) support to SingleLayerWater by using a different slice of WaterInfoTexture and a different water quadtree per view. #changelist validated #virtualized
-
Landscape: Make the new layer creation dialog be optional, controlled by the ShowDialogForAutomaticLayerCreation landscape editor setting.
-
Disable Retopologize tool button when unsupported (due to edit layers) or when CVar "landscape.EnableRetopologizeTool" is false (default is false).
-
Fixed landscape target layers UX refresh issues
-
Added info message to explain to the user that all the landscape's target layers are hidden (either by the "Hide unused layers" filter of by the filter text box)
-
Used a standard show/hide icon button to the "Hide unused layers" toggle button" in order to help the user understand the status of that filter
-
Allowed drag and dropping target layers even when the "Hide unused layers" filter is active
Bug Fix:
-
Fixed missing transaction when overriding landscape properties
-
Fixed rivers rendering in the water brush : the scene capture component that's used internally was rendering Fog somehow
-
Fixed landscape flatten eye dropper tool canceling when clicking on the landscape while keeping the mouse still.
-
Fixed editor crash from importing heightmap image files with invalid tile coordinates.
-
Fixed crash in landscape alpha brush thumbnails which wrongly assumed that the texture's resource was loaded. Now the thumbnail viewport will keep on being invalidated until it can render the texture
-
Fixed crash when resizing landscape
-
Drastically reduced severe hang (minutes-> seconds) when clicking on an actor with "Show hidden properties while playing" enabled after a material compiles
-
Fixed rare crash when deleting edit layers
-
Re-select the affected landscape after using the resize tool in landscape mode
-
Moved landscape visibility layer info asset to from EditorLandscapeResources to EngineResources so that it doesn't get stripped on cook when "Exclude editor content when cooking" is used #virtualized
-
Prevent landscape target layers from being renamed to a layer name that's already in use
-
Fixed crash when landscape fixed grid vertex factory is not created : we would still create mesh batches regardless
-
Several fixes with landscape brushes Misc changes :
-
Added landscape.VisualLog.ShowBrushPhysics (0 by default) to avoid polluting the visual logger whenever we move the mouse when landscape sculpting/painting, since that is only relevant to debug the landscape brush
-
Added visual logs when extending the landscape data cache when using the landscape brush + fixed those logs to extend by (-0.5, +0.5) beyond the cached region, in order to properly show the vertices that were sampled (i.e. that allows to show what was cached when the cached region contains a single landscape vertex in either the X or Y direction)
-
-
Fixed landscape Select tool
-
Fixed assert when resizing landscape
-
Fixed crash when unloading a map while landscape mode is active
-
Fixed incorrect ensure triggering when loading old landscape levels that have landscape edit layers textures with more than a single mip. This ensure is only valid if CVar landscape.StripLayerMipsOnLoad is active (it's currently not)
-
Don't display landscape on-screen warnings while the landscape is being edited to avoid flickering of the message while stuff get updated in the background
-
Fixed landscape material property assignments not being properly undone when using edit layers : in that case, even if the landscape layers update runs properly, if no change was detected on weightmaps, the component material instances wouldn't get updated and the material changes wouldn't get applied
-
Fixed Water brush manager not properly reacting to landscape resolution changes
-
Fixed landscape.ShowDirty/TrackDirty, which was iterating over vertices without taking into account (subsection) duplicate vertices
-
Fix for crash when trying to make a landscape proxy "modified" on PostLoad when the main landscape actor has not registered to its ULandscapeInfo yet
-
Prevent user from accidently using a landscape target layer named after the reserved weightmap name for visibility
-
Landscape : fixed FBodyInstance being improperly detected as not synced with parent landscape when the content of the collision responses is similar but out-of-order
-
Prevented weightmap textures generated by turning edit layers on on a landscape that has it off to have a mip chain, which causes an assert later down the line
-
Fix wrong warning when importing landscape weightmap from 8bit source image.
-
Fixed rare asserts when using landscape brushes
-
Water: fixed GetWaterTimeSeconds so that it can be called outside of the game thread.
-
Fix for subtractive blend when using local merge
-
Fixed / improved landscape texture diff CVar utilities :
-
One texture / diff report is dumped per landscape paint layer (it used to be one per weightmap, which was incorrect if multiple layers from a given weightmap texture changed, as the last layer would override the other ones
-
Misc minor improvements in the diff report
-
-
Fixed LandscapeInherited properties (from a custom category, like Nanite) that failed to be made disabled and to have their tooltip customized to indicate they are inherited
-
Landscape batched merge fixes:
-
Fixed landscape edit layer renderers being renderered in all batches instead of just the ones they intersect with
-
Fixed OOBBox landscape edit layer render item debug display and misc visual logger improvements
-
-
Fixed UWaterBodyComponent::UpdateComponentVisibility updating the water info texture whenever it was called.
-
Fixed "Update Water Mesh During Interactive Changes" (Water Editor) setting that has been ineffective for a while now
-
Fix crash when building static lighting with a Landscape using WPO by waiting for the async readback to be complete before fetching the results.
-
Fix the index that the last row of verts in the collision mesh uses for their color.
Deprecated:
- Removed deprecated code in landscape and water (anything prior to, and including, 5.3)
Scripting
New:
-
New: Added Tool Menu Widget for use in Editor Utility Widgets. This widget gives Editor Utility Widgets the ability to create their own menus and toolbars by leveraging the ToolMenus system.
-
Expose realtime toggle to level editor subsystem This allows utilities to disable realtime for better performance during intenstive tasks
-
Added IsEditorPropertyOverridden to compare a named object property against its archetype value
-
Moved FEditorPythonExecuter to PythonScriptPlugin so that it can understand Python directly
-
It will now log an error if the Python script fails execution (to match the commandlet behavior). This error can be made fatal by passing -ScriptErrorsAreFatal on the command line.
-
It will now use a standard async task notification, rather than its own custom UI.
-
It will now defer starting script execution until IPythonScriptPlugin::OnPythonInitialized has run.
-
-
Remove the restriction that Unreal types generated from Python scripts must have globally unique names
-
There are two strategies used internally for achieving this:
-
If the Python script lives under the project or engine root (and ideally under a content mount point), then a package is created to host any types generated by that Python script.
-
If the Python script lives outside of any known portable path, then we take its absolute filename (normalized and lowercase) and append it to the generated type name as a hash.
-
-
These strategies allows a.py and b.py to both define an unreal.uthing() called "Foo" without those two generated types having a conflicting Unreal type name.
-
Note: For backwards compatibility, we leave a redirector from the old-style name to the most recent modular/hashed type name.
-
-
Editor Utility Widget blueprint -Added an option to spawn an Editor Utility Widget as a nomad tab so it can be docked as both major and minor tab.
-
Added GetPackageForObject, a function for editor scripts to get the package, principal use is to reload packages
-
Exposed AssetViewUtils::GetPackageLengthForCooking to scripting
-
This is available via UEditorAssetSubsystem as GetAssetFilenameLengthForCooking or GetLoadedAssetFilenameLengthForCooking
-
Added support for modifying spline points within blueprint graphs outside of the construction script via a new 'Set Override Construction Script' method.
Bug Fix:
-
Allow Blueprints to add UserDefinedStruct DataTable rows via UDataTableFunctionLibrary::AddDataTableRow
-
Don't crash when passing None as the class type to unreal.ObjectIterator
-
Instead gracefully handle it and emit a type error: 'type' cannot be 'None'
Deprecated:
-
Deprecated creating an instance of a BlueprintFunctionLibrary from Python
- These types only contain state functions and no state, and so you should just call their classmethods directly on the class from Python
UI
API Change:
- Deprecated SColorGradingWheel, SColorGradingPicker, and related types in the AppFramework and Slate modules. Updated classes with the same names can now be found in the AdvancedWidgets module.
New:
-
Revision Control: Add option to copy remote paths
-
String UPROPERTY types can now specify a validator UFUNCTION, on the same object, that will validate a user input and show a validation error on the string input, as needed. The function should be static, and takes as input a single FString reference, and returns an FText object. If validation passes, the function should return an empty FText object, otherwise the value of the FText object is displayed as the validation error.
-
Make content browser tooltips for 2D and cube texture arrays show array size
-
Two utility classes for use with the Details View class FDetailsViewCategoryHiderCustomization - Used to hide entire categories of a Details View. FDetailsViewWarningOrErrorCustomization - Used to insert an SWarningOrErrorBox into a Details View at the top of a specified category.
-
Kismet: Added slate argument to SKismetInspector to specify if the section selector should be shown.
-
[PropertyEditor] Moved CallInEditor functionality to shared location. You can now replictate this functionality, previously hard coded within ObjectDetails.
- See FObjectDetails::AddCallInEditorMethods for usage.
-
Added SActionButton to the ToolWidgets module, and exposed the icon color. This is a less specialized version of SPositive/NegativeActionButton that doesn't imply intent.
-
Tweaked formatting of project badge in editor to avoid unnecessary spaces
-
New: Added the experimental ImageWidgets plugin containing generic Slate widgets for displaying and interacting with images and image-like content. The currently provided widgets are SImageViewport for displaying and interacting with images and image-like content, and SImageCatalog for listing and interacting with a set of images.
-
The texture editor now shows relevant information, warnings, or errors for the current texture in the texture viewport.
-
The editor can now decode and view textures encoded for other platforms - notably, ASTC encoded textures for mobile platforms can be viewed in editor for quality reference.
-
Added tooltip with help text to console suggestions
-
ToolMenus: Added reusable UToolMenuWidgetCollectionContext class. Allows adding/finding widgets in a generic way, which should reduce the need to create custom context classes.
-
Added Select All/None button for column view right click context menu in the Content Browser
-
Folders can now be added to Favorites by simply dragging them in.
-
Changed color grading wheels to a clean, modern style that scales nicely to large monitor sizes.
-
Added supports for profiles for the ContentBrowser.AssetViewOptions menu The activated profile can be specified using the FAssetPickerConfig struct
-
Added new default animation editor preview profiles for editing purposes with grey background and nicer wireframe rendering.
-
Reorganized the Details panel for Color Correct Regions and Color Correct Windows for more convenient access to important properties.
-
Add an EditorPerProjectUserSettings override for Texture import PNG infill setting. This is so UI artists can set that to "always" for UI work without affecting other users.
-
Added customization support to properties added as external objects at propertyy editor
-
Revamped the place actors panel UI and added a Favorites category.
Bug Fix:
-
Fixed a problem with tooltip force fields, where if the force field would push the tooltip towards an invalid position (e.g. when forced down but the tooltip ends up outside the screen), the force field would end up being ineffective. With the fix, we're still trying to push the tooltip in the best direction, but if that fails, we're trying the other direction
-
Fixed crash when reloading texture being used as an atlas while it's sprite is visible
-
Fix VolumeTexturePreview using incorrect SizeZ calculation
-
The config-file value "ProjectBadgeBackgroundColor" is now respected again.
-
Fix for ThumbnailManager singleton shutdown crash, due to the thumbnail pool trying to access the singleton in the destructor
-
Account for LOD bias when determining volume depth slice count in texture editor
-
Fix 1-frame glitch in texture editor when changing mip level
-
Fixed issues with Nanite object highlights and selection outlines while editing a packed level actor in the Level Editor.
-
Fixed an issue that could cause the text alignment on an SPrimaryButton to be incorrect.
-
Fixed panning of the texture atlas visualizer
-
Fixed a rare crash when interacting with an Asset Editor with the Viewport tab closed.
-
Fix an issue where the level editor "Favorite Levels" main menu would be hidden if there are no recent levels.
-
Fixed issue where the PIE window would grow over time when launching PIE in a new editor window
UX
API Change:
- New API is disabled by default, to enable set CVAR Editor.EnableITFCursorOverrideSupport > 1
New:
-
Added Lit Wireframe viewmode, which combines MeshEdges with the Lit viewmode
-
Added categories for custom notify class properties in the details panel. All properties on the notify class will now show in their appropriate categories in the detail panel when selecting an animation notify in the animation editor. The categories will be placed as subgroups of the "Anim Notify" group. Any properties without a category will be placed directly under the "Anim Notify" group. Properties that explicitly specify a category of "AnimNotify" will be added to the "Anim Notify" category directly as if they did not have the "AnimNotify" prefix to prevent showing an extra nested category.
-
Added new options for loading presets in the Console Variables Editor, allowing you to either replace or add to the existing settings.
-
The Play-in-Editor toolbar now shows a Simulate button front and center. It's now easier than ever to jump straight into a Simulation without first playing or navigating a menu.
-
Added button to open selected data registry asset for FDataRegistryType detail customization
-
Added the Color Grading window, which provides a convenient interface for creating and controlling color grading objects, and which scales nicely on large monitors.
-
Added console command tooltips when displaying the history Also, for the console command text box, there is now a tooltip for the command currently being typed (if it's valid), which also displays the current value for CVars (to avoid typing the variable without parameter, switch to the log window to peak at the current value and back to the console command to enter a new value) Also added tooltips forcefields for both the edit text box and the suggestion list view
-
Polished the Console Variables Editor's interface, bringing it in line with Unreal Engine 5 style.
-
Added the ability to disable or delete multiple selected items in the Console Variables Editor.
-
Added right-click menu option to open underlying asset (data table, curve table) from data registry editor. Made right-click on data registry row highlight the row.
-
Provide new API for controlling mouse cursor styling during tool operations and prevent excessive hit proxy testing when the Interactive Tools Context has mouse capture active.
-
Changed RebuildModeToolBar and ShouldShowModeToolbar methods to be virtual, allowing derived toolkits more flexibility over constructing and managing the mode toolbar.
Bug Fix:
-
Fix an issue where menu search fields didn't respect the "Menu Search Field Visibility Threshold" setting.
-
Improved editor performance when moving Light Cards using the Unreal Stage app.
-
Fix a bug where the hotkey for "Open Level" (Ctrl+O on Windows and Cmd+O on Mac) didn't work after clicking on a tab.
-
Use cached transforms for Pilot transactions to allow for other transactions to occur while piloting.
-
Fixed Place Actor menu for Custom Actors (e.g. Runtime Virtual Texture Volume)
Foundation
New:
-
Add EAutomatinTestFlags::ProgramContext flag to filter tests for Program target.
-
Add StaticLoadAsset, LoadAssetAsync, and FSoftObjectPath::LoadAsync functions to make it easier to asynchronously load objects from C++. Also improve the comments to note which loading options are actually deprecated
-
StudioTelemetry's log analytics is now disabled by default.
-
Optional property support for StructSerializer & StructDeserializer.
Bug Fix:
-
Maps that use redirectors for sublevels can sometimes hang the editor. (Partial fix) In rare cases, moving maps with streaming levels could end up serializing PackageNameToLoad. This could happen if a map was moved and the asset registry hadn't updated its soft path redirect table before ULevelStreaming::Serialize was called. As a result, PackageNameToLoad would be saved to disk with the updated path. However, if the map were moved again, there would be a discrepancy between PackageNameToLoad and WorldAsset. This would eventually create a corrupt UPackage where the name and file path don't match. Eventually, the editor would hang as it failed to load the streaming level and repeatedly re-attempt. For now, we'll just clear out PackageNameToLoad during these scenarios. At some point, we'll need to phase out PackageNameToLoad completely in favor of WorldAsset. Having two fields attempt represent a package path is a bit clumsy and error prone.
-
CborStructSerialalizerBackend fixes for FSoftClassProperty. Serialize it like FSoftObjectProperty, where the path can be valid even if the object reference isn't.
-
Fixed an issue where Studio Telemetry could cause extreme performance issues in the editor when run on certain hardware configurations
Build
New:
-
Intel® Implicit SPMD Program Compiler has been updated to version 1.24.0.
-
Added
DeprecatedEngineVersion
to plugin descriptor to be able to warn when a plugin is deprecated and will be removed in future engine versions. -
Calling the CustomCopyHandler during CreatePakResponseFileFromStagingManifest
-
Adding support to the BuildGraph system to allow properties first declared inside a macro to be flagged as CreateInParentScope causing them to be created in the scope containing the macro invocation. This allows macros to be used to define collections of properties. This pattern is now used in EditorPerf.xml inside the SetupPerfProject macro.
Bug Fix:
-
Fixed FastBuild failing to distribute .hlsli files.
-
Nastepfilters re-added back into Visual Studio project file generation.
-
Fix data race in UBT DataDrivenPlatformInfoIniIsPresent
-
Adding UE_DEPRECATED_FORGAME and UE_DEPRECATED_FORENGINE to known optional tokens parsable by UHT. E.g. usable for enum entries.
-
ModifyConfig action in buildgraph is not preserving quotations on original value.
-
SN-DBS: Fixed the problem of distributed builds leaving ghost jobs running in the background after failing a build under certain conditions.
-
Fix an issue with making chunked builds due to incorrect quoting of path
-
bEnableNoInlinedWarnings=true causes crash under specific module fileset
-
SN-DBS: Fixed possible issues with distributed builds not handling the cl-filter tool correctly.
-
SN-DBS: Fixed incorrectly set timeout which could lead to spurious fails of long running jobs in distributed builds e.g. when building shaders on some platforms.
Core
API Change:
-
Change storage container from TSet to TArray for passing into UAssetManager::GetPrimaryAssetLoadList, ensure no duplicate assets were added to that list later on a higher level or use TArray::AddUnique().
-
As part of the fix to TSoftObjectPtr's API, some expressions may now fail to compile, like comparing TSoftObjectPtr with a TObjectPtr. This should be fixed by disambiguating the conversion by calling .Get() on the TObjectPtr to convert it to a UObject*.
New:
-
The 32 byte FIoChunkHash used by UnrealPak and iostore has been deprecated and replaced with the 20 byte FIoHash, and at the same time the command line argument -verifyhashdatabase was renamed to -validatechunkhashes and the IIoStoreWriterHashDatabase interface was removed.
-
UTexture::ForceRebuildPlatformData will now build Final when passed an encode speed of FinalIfAvailable, rather than always falling back to Fast. This fixes an issue where failed fetches for FinalIfAvailable would enqueue deferred force rebuilds of textures that will be rebuilt as Fast encoding. Subsequent runs of the editor will still miss on the same texture using Final encoding, and again kick off a rebuild for the already built Fast texture never populating the cache with Final texture data through normal editor usage.
-
Added UE_REQUIRES_FRIEND and UE_REQUIRES_DEFINITION to allow forward declarations and friend declarations with constraints.
-
[TextKey] Make TextKey SlabSize configurable with UE_TEXTKEY_SLAB_ALLOCATOR_SLAB_SIZE and bump the default size to 32k (64kb when using widechar). In tests this has saved up to 20Mb of memory. [RN] TextKey SlabSize is now configurable with UE_TEXTKEY_SLAB_ALLOCATOR_SLAB_SIZE
-
Added FMath::FloorLog2NonZero to enable optimizing callers where the value is known to be non-zero
-
Added support for TUniquePtr
and restored support for TSharedPtr . -
Changes the zenloader interpretation of the flag
RF_WasLoaded
to match the -nozenloader meaning by setting the RF_WasLoaded flag on the linker root object once the package load is complete. Before zenloader would set this flag during creation of the package but before any loading had occurred. Any code guarding access to an partially loaded object will now be correct if guarding against objects missing RF_WasLoaded. However this change does means code looking for partially loaded objects will now need to look for RF_WillBeLoaded specifically. -
Added detection and reporting of Cancel() and Wait() deadlocks in the DDC FRequestOwner
-
Added Algo::Mismatch.
-
Changed mip streaming to use query DDC with
GetValue
rather thanGetChunks
so that data fetching can propagate between the caching layers. Previously if data didn't exist locally, but did remotely, we would consistently miss every time locally, and have to pull data from the remote. This removes thousands of cache misses that can happen every time you load the editor with a local cache less populated than the remote cache. -
Moved Color Management logic & classes into the Core module.
-
Fix const range-based for loops over TBitArray<>
-
Added TArrayView support to TSet's constructor, fixed TArrayView deduction in its Append overload, and added CTAD support for constructing TSet from a range.
-
UObject::Rename will no longer call ResetLoaders implicitly as this frequently would break recursive loads by resetting the loader while still in use. Instead, ResetLoaders will be called when UObject::Rename would be moving an object to a new package with a different loader since using the loader after renaming would very likely be unintended and result in errors. If you do want a mismatched loader after renaming, provide the REN_AllowPackageLinkerMismatch flag when renaming.
-
DDC - Added ability to override OAuthIdentifier for Cloud DDC layer with env variables or command line arguments
-
Reduce the sleeping done in AsyncCompilationHelper::FinishCompilation and corrected all engine implementations of ICompilable to properly signal their completion rather than internally polling and sleeping dragging out slow tasks completion times.
-
FTopLevelAssetPath: Add support for appending to FUtf8StringBuilderBase. Add support for writing FTopLevelAssetPath to FCbWriter. Add support for loading a FTopLevelAssetPath from FCbFieldView. These changes allow FTopLevelAssetPath to be output via structured log.
-
Added TDelegateRegistration and TMulticastDelegateRegistration classes, which can be returned from OnX() functions to allow users to bind or unbind from owned delegates but not invoke them, a bit like C# events.
-
Added FObjectPropertyBase::SetObjectPropertyValueUnchecked variants of the existing functions which don't guard against invalid operations, like setting nullptr to a non-nullable property.
-
Added FindLastFrom to TBitArray
-
Improvements to TIntVector2, TIntVector3 and TIntVector4 to bring them closer to parity with the functionality available in the corresponding TVector classes.
-
Added TSharedFromThis::AsSharedSubobject(&Subobject) and TSharedFromThis::AsWeakSubobject(&Subobject) to allow easy access to the aliasing constructor.
-
Add TArray/TArrayView/FStringView::NumBytes() and FString::NumBytesWith[out]Null()
-
[Rider] Expose additional project properties from UBT to Rider
-
Made TVariant trivially destructible if all the types are trivially destructible.
-
[Rider] Fixed missing system include paths on macOS
-
Added FMath::WrapExclusive which gives more expected results for integral types. Deprecated FMath::Wrap for integers.
-
Add a thread-safe ref-counting mechanism to UObjects. Make TStrongObjectPtr more light-weight and usable on any thread by using ref-count instead of FGCObject. Add a pinning API to WeakObjectPtr so they can be converted safely to StrongObjectPtr from any thread. Make delegate broadcast thread-safe when used with UObjects by pinning during broadcast for non game-thread.
-
Added tracking and storage of unknown enum names and impersonation of enum types
-
TMulticastScriptDelegate archive stream operator is now slightly more conservative about what types of access rights are required based on the type of archive being processed. An archive marked IsSaving will now only require read access. Made a corresponding change in FArchiveGatherExternalActorRefs to ensure that it reports as IsSaving and thus only needs read access. This enables use during concurrent save.
-
The old task graph API now uses the new task system under the hood to improve scheduling behavior.
-
Added intrusive unset optional states to TSharedPtr and TWeakPtr.
-
FConfigFile can now be put in a mode where it will parse the ini file as python configparser does.
-
Added UEnum::IsValidEnumValueOrBitfield() for checking if an enum value allows a combination of flags.
-
Provide better API for AssetManager and StreamableManager to allow additional performance optimizations. Let the user pass TArray instead of the TSet into GetPrimaryAssetLoadList which let them avoid creating of unnecessary array copy when passing the list to AsyncLoading.
-
Add support for compressed binary PackageStoreRequest
-
Add PlatformMemory::KernelAddressBit to enable an extra high-bit for pointer tagging
-
Option to disable anaylzing engine modules or generated code
-
[PVS-Studio] Added a new format of the analyzer report #contrib 11565
-
Added multithreaded data processing support for Asset Registry. In case of problems, this can be disabled with -dpcvars=AssetRegistry.TickGatherOnGTOnly=1
-
Changes the trace marker used for denoting GameThread async flushes to now clarify if a flush of all in-flight async loads is being performed or if the game thread is flushing only a subset of all loads. The "Flush All Async Loads GT" marker makes it easier to detect and fix bad behaviour since, except for a few special cases, we should never wait for all loads and instead should be specifying a subset.
-
Added cvar CoreUObject.NonNullableBehavior to control if non-nullable properties produce an error, a warning or a default object when failing to resolve an object reference. Default objects will not be created if the class is abstract.
-
Made UE_STATIC_ASSERT_COMPLETE_TYPE take an optional message, like regular static_assert does.
-
Defaulted - via T() = default; - many class constructors that also have a EForceInit constructor so that value-init works and we get better compiler warnings when they're uninitialized. Includes TBox2, TBoxSphereBounds, FLinearColor, FColor, FInterpCurvePoint, TMatrix, TPlane, TQuat, TRotator, TVector2, FVector_NetQuantize, FVector_NetQuantize10 and FVector_NetQuantizeNormal.
-
Added a UE_DEFINE_PRIVATE_MEMBER_PTR macro that allows access to private members of classes without explicit permission (friendship) from the class.
-
Replaced persistent auxilary memory with a new Persistent Linear Allocator. Some persistent UObject allocations were moved to it to save memory
-
Added CSV scope markers for ResetAsyncTraceTickTime and WorldPreActorTick to reduce the amount of unknown time going into WorldTickMisc [RN] Added CSV profiling markers for ResetAsyncTrace and WorldPreActorTick
-
Added UEnum::GetValueOrBitfieldFromString() for parsing a bar-separated string (but not bar-separated integers) into a flag-based UEnum. Added UEnum::GetValueOrBitfieldAsAuthoredNameString() and UEnum::GetValueOrBitfieldAsDisplayNameText() to match UEnum::GetValueOrBitfieldAsString(), for authored names and display names respectively. Added support for serialising enum flags and converting to/from text.
-
String: Added string case conversion functions under UE::String.
-
Update minimum MSVC to 14.38.33130 & minimum Visual Studio 2022 to 17.8
-
FCoreRedirects is now thread safe.
-
Improve performance of inserting elements into the asset preload list if the uniqueness is guaranteed by the caller.
-
Added MakeConstArrayView.
-
Expose GC time interval parameters inside UEngine. Allow override GC frame budget.
-
IncrementalCook: Add UE::Cook::IDeterminismHelper to write diagnostics for cook indeterminism and false positive iterative skips.
-
Added multi-process support to the saving of derived data cache replays
-
AssetRegistry: Turn on async scan and use of cache in editor -game and editor -server modes; the AssetRegistry is used in all game modes during startup and needs to be cached in all game modes. Delete all code for the non-monolithic cache; the monolithic cache now handles all cases.
-
Introduced _CONDITIONAL variants to TRACE_CPUPROFILER and UE_TRACE macros.
-
- Added FAutoConsoleVariableDeprecated (and FAutoConsoleVariableShadow), which can be used to change the name of a cvar but leave a shadow cvar behind with the old name, so old ini files are not broken, and can control if the user gets warnings, asserts, etc when used - Added support for skipping over Shadow cvars when all CVars are iterated over programmatically, so they are only used directly (like when one is in a .ini file)
-
Changed
UWorld::BlockTillLevelStreamingCompleted
implementation to no longer flush all in-flight async loads globally and instead only flush outstanding streaming level async requests. In large projects this can save significant amounts of time entering PIE. Specifically,-
ULevelStreaming now provides a protected member AsyncRequestIDs to keep track of async loads issues when loading a level. During OnLoadingFinished AsyncRequestIDs will be cleared.
-
If a child class of
ULevelStreaming
has not recorded any async loads in AsyncRequestIDs, we fallback to flushing all async loads as before since we can't know if implementers are relying on the past behaviour of a forced flush of all async loads. -
CVar
s.World.ForceFlushAllAsyncLoadsDuringLevelStreaming
has been added allowing one to revert back to old flushing behaviour temporarily while work to track necessary loads can be done.
-
-
Replace busy wait APIs with oversubscription to fix common deadlocks and reduce CPU usage.
-
r.ShaderCompiler.JobCacheDDCEnableRemotePolicy
is set to true by default now. Individual shader jobs will be cached to remote/shared DDC instances in all operation modes rather than only to the local machine. -
Added UE_REQUIRES_EXPR for wrapping up C++20 requires expressions.
-
Eliminated most blocking during requests in the DDC ZenCacheStore
-
Add a new commandlet '-run="VirtualizationEditor.GenerateMountPointPayloadManifestCommandlet"' that generates a report on editor bulkdata payload usage grouped by mountpoint.
-
Fix commas in unit test expressions in LowLevelTestAdapter for FAutomationTestFramework
-
Added UE_DEPRECATED_HEADER which acts like UE_DEPRECATED and should be placed in headers that should no longer be included.
-
Added [[nodiscard]] to more of the Compact Binary API
-
Added UHT support for FAnsiString and FUtf8String.
-
UnrealMathSSE cleanups enabled by having SSE4.2 min spec; also some UnrealMathNEON cleanups.
-
Add support for studio telemetry. Requires connection info to be defined in a BaseEngine.ini config, as well as opting into those providers via a BuildConfiguration.xml setting
-
Added moves to RelocateConstructItems.
-
MPCook And CookPackageSplitter: Allow each splitter class to opt out of the new behavor allowing generated packages to be retracted. Some splitters need to run BeginCacheForCookedPlatformData before they can decide which packages to generate.
-
Improved performance of FMallocBinned2 and FMallocBinned3
-
Eliminated most blocking during get requests in the DDC HttpCacheStore
-
Moved the reference-counted TSharedString from DDC into Core
-
Improving asset leak reporting when unloading plugins by ignoring the effects of the RF_Standalone flag.
-
Added a check to MakeShareable to ensure that you're not trying to call it on an already-shared TSharedFromThis object, as this will result in a double delete.
-
The existing UnrealPak feature -compressionEnableDDC for iostore compression has been optimized by implementing the newer DDC2 and Tasks APIs. It makes up to 128 inflight get requests and 128 inflight put requests up to a memory limit of roughly 2 GiB and uses batches of up to 8 items with a soft 16 MiB cutoff limit. Shaders, umaps and io chunks smaller than PackageCompressionMinBytesSaved or PackageCompressionMinSizeToConsiderDDC are currently excluded from DDC to reduce the cache churn.
-
Added a DDC FCacheKeyBuilder to support creation of cache keys
-
[Rider] Fixed missing toolchain include paths on Linux
-
Fix -execcmd parsing to allow multiple instances
-
De-inlined complex MemoryOps functions and coerced TFunction and TUniqueFunction bindings into function pointers if possible, to reduce the number of template instantiations.
-
Added InitFromString function to FIntPoint / FIntVector to mirror their ToString function * Added unit tests for InitFromString for FColor, FLinearColor, FVector, FVector2D, FVector4, FQuat, FRotator
-
Added intrusive unset states to various containers. Modified TOptional's move/copy constructors to avoid moving/copying an element type in an intrusive unset optional state, in case the element type doesn't or can't support them.
-
IterativeCooker: ConfigAccessTracking: Replace the limited tracking present in AccessDetection::ConfigIni with a more detailed version that calls arbitrary callbacks on each ConfigValue read.
-
Added UE_DEPRECATED_FORENGINE deprecation warnings for engine modules.
-
UPackage::SavedHash: Add the API that replaces UPackage->Guid. FIoHash SavedHash (or PackageSavedHash ) is now used instead on UPackage, FPackageSummary, and FAssetPackageData. UPackage->Guid is now deprecated; we will remove it in 5.5. This replacement only applies to the editor; in the cooked game we are removing UPackage->Guid with no replacment because it is unnecessary and costs memory.
-
Added a -setby= option to DumpCVars, to filter on how they were set, like "DumpCVars r. -setby=DeviceProfile" will show all rendering (r. prefix) that were last set by a DeviceProfile #changelist validated #virtualized
-
Added .natvis for TraceServices::TPagedArray.
-
Optimized memory footprint of FMallocBinned2 and FMallocBinned3
-
Disable Studio Telemetry in Shipping builds
-
Add cvars VeryLargePageAllocator.MaxCommittedPageCountDefault and VeryLargePageAllocator.MaxCommittedPageCountSmallPool to limit the number of large pages committed for each pool. Since VLPA very rarely releases pages, this avoids the situation where VLPA permanently holds too much memory, leaving less for other large allocations or rendering etc.
-
Added DispatchDynamicLogRecord for advanced log dispatching use cases
-
Added a TString
alias to map a char type to its corresponding string container type. -
FConfigBranch - Big refactor of how FConfigCachelni and FConfigFiles are read in, stored, and modified at runtime
-
FConfigBranch maintains the data of the hierarchy of layers (ie files) that make up the final resulting config values that are queried at runtime (editor keeps full data, non-editor defaults to collapsing all static config layers, for memory reasons)
-
Adding dynamic layers (plugins, hotfix, etc) is now a reversible operation, by having the state of the layers still around
-
When a dynamic layer is removed or added, in-memory changes are remembered (via a diff operation), the list of layers is updated, the combining logic for dynamic layers is run again, and the in-memory diff is patched back on top, then callbacks are fired to update cars, device profiles, object properties, etc
Additional memory saving functionality has also been introduced:
-
SafeUnloadBranch - you can unload a branch from memory, and with the known hierarchy in the branch, any access to that branch will cause the system to quickly reload the data into memory. It can be a small hitch, but if you know you likely don't need a branch again, it can be safely unloaded
-
Optionally, SafeUnloadBranch can be called after N seconds have passed with the branch not being read from.
-
This is car controlled, and is recommended only for very low memory situations
-
-
UnrealBuildTool: Intel ICX 2024.2 integration
-
Setting to control print level of PVS-Studio analyzer warnings (-StaticAnalyzerPVSPrintLevel)
-
Decoupled StudioTelemetryEditor from StudioTelemetry and moved it into its own Plugin EditorTelemetry This makes StudioTelemetry lighter weight and no longer dependant on the Engine and Editor leaving more useful for applying to other systems or applications outside of the Editor or Client Added OnStartSession, OnEndSession and OnRecordEvent delegates that are used by EditorTelemetry to Start/Stop its own session at the time StudioTelemetry starts and stops.
-
[RN] Encapsulated the property data argument of PropertyVisitor callbacks to an object that also includes the parent struct data.
-
Added an API to FRedirectCollector to provide read access to the global list of discovered asset redirects.
-
Added new UE_ preprocessor metaprogramming macros to replace the PREPROCESSOR_ macros to aid readability and discoverability: UE_STRINGIZE, UE_JOIN, UE_JOIN_FIRST, UE_IF, UE_COMMA_SEPARATED, UE_VA_ARG_COUNT, UE_APPEND_VA_ARG_COUNT, UE_EMPTY, UE_EMPTY_FUNCTION, UE_REMOVE_OPTIONAL_PARENS
-
[PVS-Studio] Add new PVS-Studio.exe silent exit code mode.
-
Accelerated CreateLinkerExports during loading in Editor by dramatically reducing memory traffic for assets with many exports. When loading a real-world UMap with 2M exports, we now take 25 seconds compared to 44 minutes.
-
Moved UserDefinedStruct to CoreUObject
-
Added RemoveAt*(Index, AllowShrinking) overloads to FString, FAnsiString, FUtf8String, TObservableArray, TIndirectArray and FPreviewAssetAttachContainer to match TArray.
-
Support adding additional debug visualizer files to be linked when a module is referenced with ModuleRules.PublicDebugVisualizerPaths
-
Add overload of IPlatformFile::OpenRead that can return error messages and takes it's parameters in the form of a bitfield enum.
-
Added missing GetLongPackageFName functions to SoftObjectPtr variations. The underlying FSoftObjectPath has a GetLongPackageFName, which is sometimes useful to call via the owning soft pointer.
-
Added an option for users to premit/restrict sending of User data and Hardware data. Adedd ability to turn off Telemetry capture altogether. Telemetry is ON by default User data is OFF by default Hardware data is ON by default Added commandline options for user to control what is sent by Telemetry: ST_SendTelemetry=true ST_SendUserData=false ST_SendHardwareData=true
-
Added optimized single element TArray Remove* overloads which don't take a count.
-
Introduced a new type of FCoreRedirect, Type_Asset. This can be used to implement behavior in cooked builds similar to what is provided by UObjectRedirector in uncooked builds.
-
Added FValueId::MakeIndexed to the DDC API to more easily support arrays of values
-
Added FPaths::IsStaged() which can be used to determine if you are running while staged. Since staging can remap directory structures, it can be important to know if staged (especially for staged programs)
-
Upgrade bundled dotnet to 8.0.300
-
Added UE_LIFETIMEBOUND attributes to TArray functions which return element references. Added MSVC support to UE_LIFETIMEBOUND.
-
Added TSet::FindArbitraryElement, TMap::FindArbitraryElement and TSortedMap::FindArbitraryElement.
-
Improves DoesPackageExistEx by enabling it to use the AssetRegistry when available, avoiding costly OS calls.
-
Added explicit configuration of the DDC file system cache as local or remote, with a fallback on Windows to detect a remote cache automatically
-
Added a custom import function to JsonObjectConverter methods to match the existing custom export callback.
-
Support for joining tuples, using a new set of
UE::Strings::JoinTuple*
functions. -
Added -DDC-ForceMemoryCache to allow the editor to boot when the cache is misconfigured
-
UStruct::IsChildOf
: Support classes which provide StaticStruct, in addition to those which provide StaticClass. -
Allow projects to opt out reporting loaded plugins in crash reports. This helps reduce the size of crash reports for project with many plugins.
-
UnrealBuildTool: Handle Ctrl-C to gracefully cancel running action queues
-
Added FUtf8StrProperty and FAnsiStrProperty.
- PerPlatformProperties can now be declared for data types outside of Engine, for example enums declared in game or plugin code.
Bug Fix:
-
Fixed many placement new calls in many Core containers to ensure that they still work with types which haven't overloaded operator new.
-
Fixed moving arrays of const TArray elements into array of non-const TArray elements (a const-incorrect operation).
-
Fixing static analysis warning related to auto& on a TCHAR constant.
-
Correctly add project source dir to include path when building a generic target (UnrealEditor, UnrealGame) with a -Project
-
Fixed TOptional::Emplace constructing over an already-constructed inner object when it's in the intrusive unset state.
-
Add list of subrules files to generated Rider project files.
-
Fixed issue where negative legacy could be accumulated in DDC request statistics skewing efficiency numbers.
-
UnrealBuildTool: Set -fno-delete-null-pointer-checks when compiling ms platforms with clang
-
Address cases where it was possible to see objects still being loaded when searching for them from a postload function.
-
Removed auto-creation of non-nullable properties.
-
Fix for FString::ParseIntoArray when string to parse has a length of 0, but still has backing memory
-
Fixed usage of FString::Printf without format arguments in Math header files.
-
Fixed constraints in TFieldPath and TWeakFieldPtr to allow normal pointer assignment semantics.
-
Fixed an issue where making a 0 byte length bulkdata streaming request would work correctly with IoStore but assert when IoStore is disabled.
-
Fix potential deadlock and reduce latency spikes in the task system
-
Ensure internal index is valid before resolving an FPackedObjectRef value from an object reference.
-
Prevented TSharedFromThis from being placed on a UObject.
-
Fixed some unexpected copies caused by trying to move a TArray into another with an incompatible allocator.
-
Fixed conversions in enum serialization when the enum associated with an enum property has changed
-
Fixed a visual bug in the debug console where the cursor position did not match up with the cursor indicator, due to different font sizes being used to calculate each.
-
Fixed the comment of MakeShared about the use of non-public constructors when using emplacement functions, which conflicts with advice given elsewhere in the engine.
-
Fix for AutomaticOptionalInclusion of a BP that depends on a native engine class resulting in a fatal cook error. We now explicitly check if the missing import is to a native type and suppress the error "Attempt to map an object during save that was not listed as a dependency".
-
Use integrated terminal for VSCode
-
Fixed remapping of lazy object ptr in PIE : now a default FGuid is remapped to default FGuid
-
Fix GenerateClangDatabase
-
Fixed static asserts in Cast which prevent casts of UObjectBase and UObjectBaseUtility.
-
Fixing the way that we parse ini config overrides on the command line. This should now properly handle quoted values so long as they are not mixed with commas. Instead, it is recommended that each key/value pair be specified via its own -ini argument.
-
Fixed dynamic delegate hashing of uninitialized padding in its GetTypeHash overload.
-
Moved FConsoleManager to be actually private, just by moving the class decl into the .cpp. There were a lot of uses of #include "HAL/ConsoleManager.h" instead of IConsoleManager.h (and unknown number of licensee uses), so I left that file there and it just includes IConsoleManager.h now. - Fixed up a couple of uses of FConsoleManager when IConsoleManager is the correct usage
-
Fixed constraints on TSharedPtr<>::operator() and TUniquePtr<>::operator(), which would fail to compile for types which overloaded the comma operator.
-
Fixed GFPs failing to build their package localization cache when loading their asset registry data async
-
Fixing a bug where we could try to reinstance CDOs asynchronously as part of live coding. This change ensures we finish all asset compilation before trying to gather the CDO references.
-
Fixed a potential shutdown crash in the bulkdata registry.
-
Makefile generator is now platform agnostic
-
Project Generator for VS Workspace support
-
Improved compiler error messages when using MemoryOps.h functions with incomplete types, e.g. when trying to instantiate the destructor of TArray
. -
Move additional target compile args to after the file type specific args, so any previous arguments will be overwritten if desired, or if they need to be added after other args, such as args that depend on the cppstd version
-
Fixed a lot of mismatched printf format arguments.
-
Support ISPC multiple architectures in a single build
-
Fixed an uninitialized invocation list lock count when move-constructing a TMulticastDelegate.
-
Fixed the StdMalloc wrappers not being defined when FORCE_ANSI_ALLOCATOR is defined.
-
Fixed TScriptBitArray breaking the ClearPartialSlackBits invariant
-
Fix a use-after-free in the task system
-
Fix crash when crash report upload response was null.
-
PVS-Studio - SN-DBS integration fix
-
Fixed TSoftObjectPtr being constructible/assignable from any UObject pointer type, not just convertible ones.
-
Fixed cache policy merging for batched chunk requests in the DDC HttpCacheStore
-
Fix missing ref counting in the runtime loader that could cause use-after-free.
-
Fixed Clang complaining about deprecated enums when used with a TEnumRange.
-
UnrealVS: Prefix encrypted Perforce server port address with "ssl:"
-
Add missing memory barrier when pipe tasks finishes
-
Fixed TNonRelocatableInlineAllocator::ForElementType::MoveToEmpty to leave the moved-from allocator pointing to the inline storage (like after a default construction) rather than unallocated heap storage.
-
Fixed TUniqueFunction compile error when constructing one with an lvalue.
-
Reduced delegate codegen by reimplementing TDelegateBase::CreateDelegateInstance as an operator new overload.
-
Added TIsContiguousContainer specialization for TInlineComponentArray, so it can bind to TArrayView.
-
Fix multiple race conditions that could lead to deadlocks in the task scheduler.
-
Ensured that a non-const source argument in provided to RelocateConstructItems.
-
[Rider] Fix IntelliSense by adding include order deprecation defines
-
Fixed TWeakFieldPtr not supporting "const T" template parameters.
-
\Fix
bool ExecuteDBProxyCommand()
-
Fixed FDateTime and FTimespan not serializing via StructSerializer.
-
Fixed a compile error in TDeque when using an allocator with NeedsElementType == false.
-
Properties that are EditorOnly and marked as part of a config are no longer skipped when not in Editor so standalone mode (-game) will be consistent with Editor and PIE.
-
Fixed an issue objects loaded from a package would be marked as invalid for loading when garbage collected. This meant that until the entire package was collected, it was not possible to fully load a partially loaded package when using ZenLoader in Editor.
-
Prevented Cast from being used on FFields.
-
Disallowed boolean inputs to interp functions.
-
Fix memory leak when waiting repeatedly on a task with a timeout.
-
Fix potential deadlock in IoDispatcher at runtime on low core count systems
-
Fixed inconsistency between EmptyString.ParseIntoArray(Array, DelimiterArray, 1, true) and EmptyString.ParseIntoArray(Array, DelimiterArray[0], true).
-
Fixed a bug where UnrealVirtualizationTool invoking a child process would fail if the engine root path or the target project path has spaces in it.
-
Make delegates in stat system thread safe .
-
Fixed broken TMulticastDelegate move functions.
-
Added missing FObjectPropertyBase::GetObjectPtrPropertyValue_InContainer overloads.
-
AssetRegistry now properly removes redirects from GRedirectCollector when object redirector assets are removed. Added additional conditional timing scopes to registry to help identify stalls.
-
OidcToken - Updated documentation with info regarding lack of support for Google based authentication and some suggested workarounds.
-
Fixed the wrong object being validated in FObjectProperty::PostSerializeObjectItem.
-
Adds missing GetId() member from TSet::TBaseKeyIterator. Without this implementation, it's not possible to use GetId() on TMap::TKeyIterators/TConstKeyIterators This missing implementation is specifically helpful for cases where you'd like to find the KV Pair ElementType for a given KeyArgumentType in cases where you may have collisions between keys and the actual KeyArgumentType value is important. Example case is when dealing with FNames in Editor since they compare on case-insensitive CompareIds but have unique DisplayIds for different casing. If you want to know the casing used when inserted into a map, you can now do the following: TMap
>::TConstKeyIterator It = CachedPackageData.CreateConstKeyIterator(PackageFNameOfAnyCase); FSetElementId Id = It.GetId(); if (!Id.IsValidId()) { return nullptr; } const TPair > KVPair = CachedPackageData.Get(Id); FName PackageNameWithCasingUsedUponInsertion = KVPair.Key; return KVPair.Value; -
Made FUtf8String::Printf's and Appendf's formatting strings be ANSI, because there's no printf which takes a char8_t formatting string. UTF-8-formatted string arguments are still possible via %s.
-
Fix TInstancedStruct assignment so Base = Derived assignments work
-
Improved the robustness of bulk data streaming, and fixed an issue where zero size bulk data was not serialized correctly when loading
-
Multiple fixes in pipe tasks when pushing tasks with prerequisites.
-
Removed rehashing from key iteration, and mutability from TSet members, making TSet thread-safe for concurrent reads.
-
Fixed FThreadSafeCounter64::GetValue() thread safety.
-
Fix broken AnyTaskCompleted that didn't actually wait on any of the tasks
-
Add architecture info to Rider project files
-
Optimized TQuat::Slerp_NotNormalized(). Added startup tests to validate more completely.
-
Fixed constness of FProperty* in TPropertyValueIterator.
-
Completed the FObjectPropertyBase::SetObjectPtr overload set, which was only partially implemented before.
-
Update NoExportTypes.h to add missing units, and to correct the order of units that were already there. This was breaking serialization of entries missing from the mirrored enum in NoExportTypes.h.
-
Fixed EAutomationTestFlags to be an enum class of pure flags, so the flags are visible in the debugger.
-
Allow Json object helpers to work with UClasses as well as UScriptStructs
-
Fix: clang coroutine support when building with C++17
-
Fix for buffer underrun in the Span and Region name generation
-
Stopped TArray::RemoveAt() being called with a non-integral size argument, including EAllowShrinking.
-
Fixed TIsValidVariadicFunctionArg failing to catch disallowed types in Printf-style functions accepting types which were convertible to allowed types but which weren't themselves allowed.
-
Add the ability to add properties and their values in one operation to an FInstancedPropertyBag
-
Fixed LiveCoding not detecting changes when working from vanilla editor
-
Make FDoubleProperty and FFloatProperty use Verse's extensional float equality semantics, and support value hashing. This should only affect comparison of NaNs: the previous behavior was for them to treat NaNs as equal to all other values; the new behavior is to treat all NaNs as equal to each other, and unequal to all other values.
-
Fix UScriptStruct::Serialize clobbering the saved struct flags on load for structs that don't have a matching CppStructOps.
-
Fixed TStrongObjectPtr's comparison operators to follow normal pointer semantics.
-
Fix incorrect call to AddStableReference on a stack variable
-
Added bitfield text import and export support to FByteProperty with an enum, and fixed a bug where a getter wouldn't be used.
-
Fixed a race in the legacy DDC API CachedDataProbablyExistsBatch
-
Restore the Windows dll directory cache startup optimization that has been broken and was inactive in the previous release.
-
Fixes for Rider project file generator
-
Fixed TWeakInterfacePtr
and TScriptInterface . -
Fixed class template argument deduction for TWeakObjectPtr.
-
Added missing OutFailReason parameters to FJsonObjectConverter::JsonObjectStringToUStruct, FJsonObjectConverter::JsonArrayStringToUStruct and FJsonObjectConverter::sonArrayToUStruct.
-
Fix wasting one cycle when starting GC async purge.
-
Added REQUIRE_CHECK_SLOW to low-level test macros, that validates that checkSlow, checkfSlow... are called on configurations where they're effective
-
Fixed property conversion to and from enums with bitfields.
-
Push array inner property to current archiver state when serializing "replacement" array item value overrides on load.
Deprecated:
-
Deprecated TEMPLATE_REQUIRES. UE_REQUIRES should be used instead, though the syntax is slightly different - see the comments.
-
FCompression interface now has 64 compression interfaces that should be preferred over the 32 bit ones, which will eventually be deprecated. Note that the return value meaning has changed to allow for returning whether the compression failed independent of whether the output was actually compressed.
-
Deprecated TIsTriviallyDestructible.
-
PostLoadAssetRegistryTags has been deprecated. Custom implementations should be changed to be thread safe and implemented as ThreadedPostLoadAssetRegistryTagsOverride. This was necessary in order to support multithreading of the asset gatherer tick to improve editor launch performance.
-
Added UHT support for
UE_DEPRECATED(all, "...")
macro, which is already used in the engine and will serve as a way to leave the UE_DEPRECATED mark on code that has been deprecated for more than 2 engine versions but has to stay in the codebase "forever" because it's reflected (UPROPERTY, UFUNCTION, UCLASS, USTRUCT).-
Use case :
// Let's say we've deprecated the following code in UE5.1 UE_DEPRECATED(5.1, "Use the other thing instead...") UPROPERTY(meta = (DeprecatedProperty, DeprecationMessage = "Use the other thing instead")) float SomeUProperty_DEPRECATED = 1.0f; UE_DEPRECATED(5.1, "Use the other thing instead...") UFUNCTION(meta = (DeprecatedFunction, DeprecationMessage = "Use the other thing instead...")) void FooBar(int32 X); // Then when shipping UE5.4, we would turn that into: UE_DEPRECATED(all, "Use the other thing instead...") UPROPERTY(meta = (DeprecatedProperty, DeprecationMessage = "Use the other thing instead")) float SomeUProperty_DEPRECATED = 1.0f; UE_DEPRECATED(all, "Use the other thing instead...") UFUNCTION(meta = (DeprecatedFunction, DeprecationMessage = "Use the other thing instead...")) void FooBar(int32 X);
-
Therefore, the act of deprecating code that is more than 2 engine versions old consists in a simple text-search for "UE_DEPRECATED" in your code and for the occurrences that are not tagged as "all" and more than 2 versions old. Then:
-
If the code is reflected, turn them into UE_DEPRECATED(all, ...)
-
Otherwise, remove the code altogether
-
-
-
Deprecated calling AddSaveOverride on the context given to UObject::PreSave
- You should override UObject::CollectSaveOverrides and call AddSaveOverride on its context instead
Dev Tools
New:
-
[UnrealBuildTool] Added a
bGenerateProgramProject
flag toTargetRules
, which forces a target to be treated as a program during project file generation. -
CSV Profiler: add support for aggregated task stats. This can be enabled via the cvar csv.AggregateTaskWorkerStats, which defaults to on. When enabled, stats recorded on task worker threads are aggregated instead of outputting a single stat per thread. This reduces CSV size when there are large numbers of worker threads, and makes stat data more intelligible. The stats appear with an AllWorkers prefix instead of the individual thread name.
-
Add support for the OptimizationLevel param for Clang-CL (so -Oz is used for OptimizeForSize etc). This includes optimal flags for PGO, since -Os tends to be the fastest option there (in addition to being smaller)
-
Updated the logging for mismatched build settings that require UniqueBuildEnvironment to show the values that don't match
-
Added more metadata information into UnrealInsights trace scopes:
-
Package name in AsyncLoading (for LoadTime channel)
-
Statemachine name during GameFeaturePlugin transitions.
-
Marked GC region
-
-
Added ability to read plugins into a config hierarchy, controlled by passing optional IncludePluginsForTargetType param to ConfigCache.ReadHierarchy(), with a TargetType (like Game or Editor). - Use this in CopyBuildToStagingDIrectory when reading the Packaging settings when staging. This allows plugins to add files/directories to stage without needing to modify every project. - Added a ConfigTester Turnkey command that can help test C# inis programmatically. Currently need to pass in these 3 params on commandline, it doesn't ask for them: -Branch=Engine -Section=SomeSection -Key=SomeKey
-
Allow for -ActionTypeFilter to BuildMode, which will make only certain action types to run
-
[UnrealBuildTool] Added a
bAllowEnginePluginsEnabledByDefault
field toTargetRules
, which is analogous to (the inverse of) the "DisableEnginePluginsByDefault" field in uproject descriptors. -
CsvProfiler - Report explicit event wait names as trace scopes.
-
Added a shared GetEditorForProject() function which should be used in UAT to get the path to the binary to run, becasue UnrealEditor-Cmd.exe is not always correct (if the editor is a Unique build environment, the editor to use to cook etc is the project editor, not UnrealEditor)
-
Passing in "null" for a lot of UnrealExe params, instead of "UnrealEditor-Cmd", to allow GetEditorForProject to be called (we must still allow for a true override, so we can't get rid of the param)
-
Added FileSystemReference.Exists
-
-
Added source location tracking for async load requests that do not have debug name specified
-
Added support to OutputLog to only have the TargetDevice functionality if DeveloperTools are included in the target (so programs can use it without needing to pull in the whole mess that is TargetPlatform)
-
Added a method for Shared build environment builds to have certain modules marked as caring about SDK version overrides for some platforms - if any of those platforms are overridden, the DLL will be written to the project Binaries dir instead of Engine (set bAllowSDKOverrideModulesWithSharedEnvironment = true in a Target.cs) - Added ability to optionally skip SDK validation when making a Target instance even if we don't want to skip Target validation (used when we make the base UnrealEditor target to compare to project's Editor target - we don't need to manage SDK for that temporary UnrealEditor target). - ShaderCompileWorker is now BuildEnvironment.UniqueIfNeeded, which will build into the project binaries dir if needed (based on per-project SDK override) - UnrealPak is marked as not caring about an SDK versions so it can be built along with SCW that does care - Added $(BinaryDir) variable to UEBuildTarget, etc, for the location of the first Binary in the output binaries
-
Allow to disable _callstack trace _channel and not pay for backtrace overhead, which can be very costly on some platforms.
-
Added ListShaderLibraries _and _ListShaderMaps commands that let you analyze the memory footprint of those structures. Requires r.TrackShaderMaps cvar to be enabled and for build target _bTrackRHIResourceInfo _set.
-
Set all *TargetPlatform.Build.cs's to set the new SDKVersionRelevantPlatforms list so that per-project SDK version overrides will compile unique versions of those modules when that platform's SDK version of overridden
-
Expose memreport metadata generation to the UEngine interface.
- Also expose DoGameSpecificBugItLog in CheatManager
-
Added client-side stat for IRIS active replicated object count
-
Experimental release of Automated Perf Testing Plugin v0.1, providing Gauntlet Test Controllers, UAT Test Nodes, and BuildGraph macros for adding common automated performance tests to a project's automated build and test.
- Currently supports static camera, sequencer, and full-screen quad material tests, with options to output via Insights, CSV Profiler, and FPS Charts.
-
Disable hitchdetector when LLM is enabled unless -_DetectHitchesWithLLM _command line parameter is specified. It is expected that LLM capture adds CPU overhead during captures, hang/hitch detection made things just worse by spamming logs with unhelpful info.
-
[UnrealBuildTool] Added a
bExplicitTargetForType
flag toTargetRules
, enabling targets to opt out of being considered byGetTargetNameByType
. This enables the introduction of new, narrowly-scopedTargetType.Editor
targets, without introducing an ambiguity around existing-TargetType=Editor
invocations of UBT. -
PerfReportTool: Add support for stat type qualifiers in summary tables so we can identify stats by their type to avoid ambiguity, e.g [meta]deviceprofile. Prefixes are : [metric] [csv] [meta] [toolmeta]
-
CSVToSVG 3.61
-
Add -startEvent and -endEvent params to start and stop graphing at a particular event
-
The params -startEventOffset and -endEventOffset allow you to offset the start/end by a particular number of frames
-
-
PerfReportTool v4.236.0 - Added Wildcard Stat support to BoundedStatSummary. This allows ReportTypes.xml to specify '' for generated columns in a summary table. The tool will now attempt to match that wildcard to all possible stats, generating new columns for each. Wildcard symbol needs to be provided in the column name, summaryState name and stat name, or it will skip that stat name. Supports otherStat as well so can be used with the Ratio formula. [RN] PerfReportTool v4.236.0 Added Wildcard Stat support to BoundedStatSummary. This allows ReportTypes.xml to specify '' for generated columns in a summary table
-
[AutomationTool]
MakeCookedEditor
now allows subclasses to overrideProjectParams
construction. -
CsvToSvg - Improvements to event formatting in graphs
-
Adding a macro called "AdditionalTestNodes" to BuildAndTestProject which can be extended via a file include "AdditionalTestNodesExtendFile" in order to inject additional test nodes attached to the existing per-platform/per-configuration test agent.
-
CSV Profiler - Add ProgramSizeMB metadata so we can capture this even when LLM isn't running
Bug Fix:
-
Scope filesystem callbacks to shader code into Shader LLM, added more asset tags
-
Restore behavior of MemReport -full by duplicating the list of commands from default profile.
-
UHT will now generate valid code if the header file had multiple '.'s in the file name.
-
Fixed UHT code generation to support enums with no enumerators
-
Fix issue where a TInstancedStructs property wasn't setting the meta data in the correct place when used with a container such as TArray.
-
Fixed typo in the centimeters per second units in UHT.
-
Fail gracefully if we fail to allocate TLS data for the CSV profiler
-
Remove FName block allocations and TextureManager construction from contributing to the MemQuery/Memtrace asset memory cost readings
-
Live Coding should no longer crash when patching headless editor instances
-
Fixed UnrealVS hanging on start-up due to unexpected load order with initialization.
-
Mark more SceneRender reallocations with correct LLM tag instead of EngineMisc and other random tags
-
CSV Profiler : Fix a crash related to SetWait
-
UHT will generate an error if an IInterface is improperly used.
Horde
New:
-
Horde: Add missing documentation for windowSize parameter
-
Horde: Separate out log event warnings and errors into a separate fingerprint when we exceed the 25 event limit in the Hashed Issue Handler.
- This means that any newly introduced errors will not be merged into an existing issue if it only comprises of warnings.
Bug Fix:
- Horde: Make horde chunk boundary calculation consistent with unsync, add unit tests to validate determinism
Insights
New:
-
Add command line override for sponsor mode for UnrealTraceServer.
-
Rearrange TraceLog message types and emit fatal error for OOM.
-
[Insights] Add TimingInsights.ExportTimerCallees command to export the callee tree of the provided timers.
-
Extended the Timing Regions Trace API to allow closing regions by ID. This allows multiple timing regions with the same name to overlap and be uniquely identified.
-
Adds a control layer for Trace (TraceService) and a controller (TraceController) integrated into SessionServices module. This allows remote control of tracing over messge bus.
-
Improved "Export memory snapshot". - Added Package, _AllocThreadName _and _FreeThreadName _columns to the exported table - Use filtered table result instead of all nodes as a datasource
-
Output TraceLog control port in log When running multiple instances on one the same machine TraceLog searches for an open port to listen to control commands, but there was no way for the user to know which port each process ended up using. Add log entries that print the final listening port.
-
Allow Unreal Insights to connect to non-standard control ports When running multiple instances on the same machine, TraceLog listening port will be different for each process. Allow the Unreal Insights connect UI to use non-standard ports by specifying "ip:port" format.
-
Add Trace Pause/Resume menu entry to the Trace Editor Widget.
-
Preset for "light" memory tracing. In certain scenarios it can be useful to trace detailed allocations, but without paying the cost of recording callstacks and instead rely on tags for analysis. Enable light memory tracing by starting the process with
-trace=memory_light
. -
Add option in UnrealTraceServer to detach from current console. Automatically apply this option when launching a forked server to avoid stopping the process when terminal window closes.
-
Add more descriptive tooltips to the channels and to the Screenshot,Bookmark and Region menu entries in the Insights Status Bar Widget.
-
Added Unreal Insights support for tracing memory page swap events
-
Added Branch and Version columns to session browser
-
NetworkInsights - Detected lost packets are now marked on incoming data - Changed how we display lost data to make it easier to spot.
-
Adding controls to the Insights status bar for to beginning/ending a trace region in the editor
-
Trace autostart for Mac/Linux. Applications can now automatically start tracing whenever Unreal Insights application is running. The behaviour can be controlled using the UI in Insights session browser or by starting the application with
-traceautostart=x
. -
Adding Trace Screenshot BP node to the Trace Utilities plugin
-
When using "-tracehost" command line argument without specifying a hostname, default host will be 'localhost'. This is analog to how the "-tracefile" arguments work.
-
Added Trace.RegionBegin command
-
Added Trace.RegionEnd command
-
These commands allow developers to manually tag regions of insights traces with custom names.
-
UnrealInsights - Add 'Copy Name To Clipboard' context menu option.
-
Improved SessionBrowser selection and expansion. Added text about the need to run with (-messaging) for sessions to be shown in SessionBrowser. Changed SessionBrowser row colouring and alignment. Disable auto selection of current session in Unreal Insights Frontend. Widened the channel list columns.
-
Added the ability for Unreal Insights to resolve symbols for iOS using psym files
Bug Fix:
-
[Insights] Fixed timing regions emitted from SlowTask to use unique ids. Matching by name was not reliable when multiple slow tasks with same name are active at the same time.
-
Fix for trace snapshots on platforms that use internal send buffers. When a trace was active and a snapshot was triggered the send buffer could be flushed while writing the snapshot, making the ongoing trace miss events.
-
Renamed the "LoadObject" named event (defined by SCOPED_NAMED_EVENT) as "StaticLoadObjectInternal" (measures time in StaticLoadObjectInternal() function) because there is another "LoadObject" cpu scope (defined using the UE_TRACE_LOG_SCOPED_T macro; the one with metadata) which measures same function.
-
Fix crashes in UnrealInsights when cache size grew too large.
-
Fix crash when UnrealTraceServer on Linux was looking for user home directory.
-
Do not reset bytes traced statistics on new connection
-
Correct how we now can return the original allocator from MemoryTrace_CreateInternal. This fixes incorrectly trying to hook virtual memory allocators on Windows when memory tracing is disabled.
-
Remove screenshot options from Insights status bar when feature is disabled.
-
Fix bug in UnrealTraceServer on Windows when launched by a process with elevated privileges and used as sponsor process. UTS was not able to open a handle to the sponsor which resulted in immediate exit.
-
GpuProfiler: Support gpu trace events named with the
_N pattern, where N is some integer. Before this fix, Gpu trace events with said naming pattern would all appear with the same name, which would correspond to the first one. e.g. VP_0, VP_1, VP_2 would all appear as VP_0 in Unreal Insights. This is because the event is being sent as a uint32 corresponding to the ComparisonIndex of FName, which is the same for the above naming pattern - the N ends up encoded in the Number of the FName, corresponding to the instance number. -
Fix narrowing of store directory string. At one point it was assumed that store directory would only ever be limited to ANSI. The selected directory string was narrowed before being sent to UnrealTraceServer.
-
Emit error message if TraceLogs redirect buffer is full.
Deprecated:
- Marked all the Profiler* modules (Profiler, ProfilerClient, ProfilerMessages, ProfilerService) as deprecated. If another module depends on one of these modules a warning message will be triggered by UBT. The old Profiler is actually deprecated since UE 5.0, superseded by Trace/UnrealInsights.
Unreal Build Accelerator
New:
- Added User and Build UBT/UBA Metrics to Horde Analytics
Framework
New:
-
Improved error messages when we skip loading a package during import because the plugin wasn't mounted. The plugin manager and the GameFeatureSubsystem now have an opportunity to provide additional information to the user about why the plugin wasn't loaded or the package wasn't found. This information is provided in the Message Log and output log.
-
Fixed potential recursive out-of-memory/corruption crash due to memory allocations in the crash handler.
-
Added ability to Gauntlet's Heartbeat system to track all client apps
-
Added thread manager interface for retrieving callstacks without incurring additional allocations (which will be used to avoid failing to allocate memory while crashing out of memory).
-
PR #11073: Factor FGameFeaturePluginTemplateDescription into it's own file #contrib 11073
-
UBT will now write out the BuildPlugins names to correctly ignore optional plugins in the editor
-
Plugin templates can provide an optional default plugin name to use when selecting the template in the plugin wizard
-
Removing IniCacheSet usage in plugin manager; the set doesn't actually get propagated in the ParallelFor below where it is currently used (and doesn't save much in normal circumstances either).
Bug Fix:
-
Follow-up fix to a linker error from CL 27595673 that was reported by a licensee.
- If you created a custom class derived from ALight, there would be a linker error reporting a missing definition of ALight::PostLoad. The vtable of a derived class needs to call PostLoad, which requires that the symbol has been exported.
-
Improved ZipArchiveWritter ZIP64 handling of header output so that is outputs valid zip headers which prevents issues with some zip extration tools
-
Fixed linear extrapolation in SplineMeshComponent by using the positions at MinT and MaxT instead of the Spline StartPos and EndPos respectively
AI
New:
-
[NNE] Extended NNERuntimeORTDml to implement NPU runtime interface.
-
PR #11456: Add ability to search for blackboard keys and gameplay tags in the behavior tree editor #contrib 11456
-
Prevent move or copy of FWorldConditionContext and FWorldConditionContextData
-
NNERuntimeORT upgrade ONNX Runtime to version 1.17.1 and its required dependency DirectML to version 1.13.1.
-
Create BlackboardKeyType_Struct and associated ValueOrBBKey_Struct
-
Create StateTreeMoveToTask wrapping a UAITask_MoveTo allowing state tree to move AI using the same framework as BehaviorTree Create the FStateTreeAITaskBase & FStateTreeAIActionTaskBase state tree task namespace for AI focused ST task
-
Our plugin NNERuntimeORT already includes a DirectML runtime that implements the GPU interface for neural network inference outside the rendering of a frame. We implement the necessary infrastructure to let this backend also implement the RDG interface for in-frame inference, providing a fast and powerful execution provider on DX12 based desktop systems.
-
Create BTTask_RunStateTree and BTTask_RunDynamicStateTree that allows the execution of state tree in a behavior tree
-
Introduce FValueOrBBKey_X, a Default Value/Blackboard Key pair for BTNodes with a custom view to make picking key easier FValueOrKey are created of each of the engine blackboard key types.
-
Added an editor accessor for the FullNodeMap
-
NNEDenoiser: Upgrade OIDN models to version 2.3.0.
-
NNEDenoiser uses NNERuntimeORTDml on RDG as default.
Bug Fix:
- [Learning Agents] Fixed MaxAgentNum bug with manager component not working on spatially loaded actors
Deprecated:
- Removed NNERuntimeRDGDml, please use NNERuntimeORTDml (on RDG) instead.
AI Behavior Trees
New:
-
PR #11526: Stop BT in UGameplayBehavior_BehaviorTree on abort PR #11582: Clean up GameplayBehavior_BehaviorTree on ctrl teardown A cancelled behavior now explicitly stops the tree to not let it run until another different BT is pushed. It also solved the issue with repeated execution requests of the same BT asset that will fail as the component would think it's already running it. Listen to possessed Pawn changes to prevent leaving the behavior running which could cause a resource leak and an ensure in OnTimerTick.
-
Blackboard now uses DuplicateObject instead of NewObject when instantiating a key so all default values are properly copied.
-
Composite BT node memory lifecycle methods are now exported as part of the API
Bug Fix:
-
Updated TimeLimit Decorator to not get get ticked again in case it is still active after requesting execution (e.g. latent abort)
-
remove any scheduled updates when the tree is stopped
AI Debugging
New:
-
Rewind Debugger: Add support to specify trace filename or host in RewindDebugger.StartRecording
-
VisualLogger
-
Removed ensure on the Editor world when getting timestamp since it might be called while it's getting garbage collected
-
Added GWorld as a fallback in GetWorldForVisualLogger
-
-
Added option "Slot Details" to be able to reduce the amount of replicated data for worlds with large amount of SmartObjects.
-
This option is required to display annotations (i.e. turning it off will disable annotations and turning on Annotations will turn this one on)
-
When turned off, a single shape will represent the SmartObject in the world
-
-
Prevent Visual logger rendering actor from being selectable and showing up in the scene outliner
Bug Fix:
-
Fixing up a regression in the Visual Logger where Actors failed to have unique names with bForceUniqueLogNames set.
-
If the Gameplay Debugger is active while quitting, then restore the temporarily disabled GAreScreenMessagesEnabled flag (which allows messages to log to the screen). Previously, quitting the game (e.g. ending PIE) while the Gameplay Debugger was active would prevent further messages from being logged to the screen in subsequent plays.
-
Wrong definition of macro UE_CVLOG_CIRCLE_THICK Visual Logger
-
Improving ListenServer mode support for GameplayDebugger.
Deprecated:
- Deprecating old FVisualLogger::GetEntryToWrite in favor of a new, static FVisualLogger::GetEntryToWrite for consistent Engine Timestamps in Editor.
AI EQS
Bug Fix:
-
Allow EnvQuery TraceByProfile to set the shape of the trace used.
-
Fix EQSEditorModule custom Toolbar Extenders not being applied
AI Navigation
API Change:
- SetConfig should now store the properties supplied for registering the navdata in the NavAgentProperties. NavAgentProperties will be used as the agent mapped to the navdata for registering/unregistering with the navigation system.
New:
-
[Navigation] Added a query to ANavigationTestingActor to display if navigation data is ready (if it has been generated) within a given radius.
-
Addition of a Boolean to track if a navmesh has been loaded without it's tiles and update the display so it shows as needs to be rebuilt (can occur when undoing a navmesh).
-
Addition of a "Navmesh needs to be rebuilt" message to the navigation display since the stat display is not always enabled.
-
[Navmesh] Added more information when reporting the error message related to the TileNumberHardLimit.
-
[Navmesh] Added more information when reporting the warning message related to the tile pool size.
-
[Navlink] Added custom link owner's name to the link ID warning to allow identifying the problematic actor.
-
[Navigation] Improved AStar log readability and added details when filtering nodes.
-
[NavInvokers] Optimization: avoid reserving local containers every frame.
-
[NavInvokers] Added a profiler tag for more precise tracking.
-
GetEdgesForPathCorridorImpl is no longer inlined so that derived classes of ARecastNavMesh can call the function.
-
[Navmesh] Added display of heightfield layers to the tile debug display.
-
[Navigation] Clarified UAITask_MoveTo params.
-
Change NavLinkProxy to update navigation data in PostEditChangeProperty similar to what is done in other navigation code.
-
[Navmesh] PR #12062: exposed GetPolyWallSegments to game code via ARecastNavMesh #contrib 12062
-
Replaced custom NavLink static registration queue by a new world subsystem that will also store NavRelevantObject that are not AActor/UActorComponent based. This change allow new NavigationSystem created after initial map load (e.g. ANavSystemConfigOverride) to properly recreate its custom nav link mappings and octree.
-
[NavInvokers] Optimization: now using a map instead of an array to avoid high cost as invoker usage scale up.
-
No longer add AI and Navigation systems when creating inactive world with physics
-
[Navmesh] Added a NaN check to dirty area bounds.
-
Added early warning for invalid bounds when creating FNavigationDirtyArea.
-
[Navmesh Generation] Removed MaxVerticalMergeError and instead prevent point merging when adding raw contour points if simplificationElevationRatio is being used.
-
Updated some NavigationSystem method display names to be consistent with other BP exposed functions
-
[Navmesh Generation] Fix contour simplification to be symmetrical when using SimplificationElevationRatio.
-
Exposed RequireNavigableEndLocation to MoveToLocationOrActor BP function.
-
[Navmesh] Optimization to simplifyContour.
-
[Navmesh] Removed deprecated FRecastNavMeshGenerationProperties.
Bug Fix:
-
[Navmesh] Refactor to keep solidHF and compactHF for the lifetime of FRecastTileGenerator.
-
[Navmesh] Changed ARecastNavMesh "Draw Failed NavLinks" debug name to "Draw Failed and Valid Links".
-
[Navigation] Fixed Recast AStar log name.
-
[Navmesh Generation] Fixed issue where polygon would wrongly connect to a different height, resulting in a broken navmesh surface.
-
[Navmesh] Fixed IntCastChecked assert caused by invalid location, tiny tiles or giant invoker radius.
-
[Navmesh Generation] While adding raw contour points, use the height from the highest connected corner cell.
-
PR #11558: Fixed RecastNavMeshGenerator to use TotalNavBounds when IsValid is 'true
-
Fix security issue:
-
Memory Corruption in SimpleCellGrid::Serialize() Due to Missing Bounds Check and Integer Overflow.
-
Make sure DataBytesCount is computed from width and height and prevent width*height from overflowing.
-
-
Fixed missing NavigationData cleanup when cleaning up the whole system. When a NavigationData is either EndPlay or Destroyed it unregisters itself from the NavigationSystem and perform its cleanup. Problem was that when the whole system is doing a cleanup in response to
OnWorldBeginTearDown
it was only unregistering without performing the cleanup. -
[Navmesh Generation] Fixed:
-
When removing poly, make sure that the totality of the replacement poly is copied.
-
When looping to see if vertex have been flagged for removal, stop the loop to prevent the flag from being reset.
-
-
Bug Fix: Fixed an issue where navmesh won't be updated if the user manually calls SetStaticMesh() function on a collision-disabled StaticMeshComponent
-
Fix crash when generating navmesh tiles if DirtyLayers has not been initialized.
-
[Navmesh] Fixed tile portals not connecting caused by picking opposite portal direction (on an edge above or below) when building mesh adjacency. This fixes issues seen in stairs where the stair corridor can be blocked by a hard edges when edges between layers do not match perfectly.
-
[Navlink] Avoid registering link proxy with invalid id.
-
Bug Fix: Fix issues that Navmesh Generation for Brush actor isn't correctly updated after some operations.
-
New: Added a console variable brush.ForceNavmeshGenerationOnStaticBrush to enable/disable the effects of Navmesh Generation relevant flags on Brush Actor.
-
[Navmesh] Fixed crash in ARecastNavMesh::FindPath when NavData is missing from the query.
-
[Navmesh] Fixed cylinder collision wrongly offset when used as navcollision on dynamic obstacle.
-
Fix issue where AgentToNavDataMap entries were not cleaned up properly due to ARecastNavMesh updating its config to have a valid agent step height if the step height was not overridden.
-
NavigationTestingActor: Don't reset ShowStepIndex for every request and allow to save it's value (not transient anymore).
-
[Navmesh] dtBuildTileCachePolyMesh fix: while removing vertices, fix addition of an extra point to the contour since it can break the triangulation and result in missing polygons.
-
[Navmesh] Fix crash in ARecastNavMesh::FindEdges when RecastNavMeshImpl is not valid.
-
Bug Fix: Fixed an issue where navmesh generation for HierarchicalStaticMeshComponent won't be updated correctly on certain operations.
-
New: Deprecated some APIs in HierarchicalStaticMeshComponent
-
[InstancedStaticMesh] Fixed partial navigation update for Editor manipulations
-
added partial update on component registration/unregistration
-
skip updates when adding/removing instances when component is not registered
-
added list of dirty areas to pending dirty element so they could be applied when udpate info is successfully processed
-
added some missing updates when not using partial updates
-
-
[WP Navmesh] Fix and simplify WorldPartitionNavigationDataBuilder clean packages process and removing dead code.
- Issues could occur with wrongly generated packages, now the chunks will be deleted regardless of their spatialization.
-
Bug Fix: Fixed an issue where InstanceStaticMeshComponent with odd numbers of negative scale axis didn't correctly generate navmesh
-
[Navmesh] Tiles are not saved during undo redo operations anymore.
-
OnNavigationBoundsUpdated, make a removal request if the bounds are invalid.
- This avoids having invalid RegisteredNavBounds when undoing the addtion of a NavMeshBoundVolume.
-
Fix possible crash for an invalid navmesh in AdjustLocationWithFilter.
-
[Navmesh] Fixed crash occurring when undoing removal of ARecastNavmesh.
-
Fixed crash in NavLocalGridManager when invalid parameters are provided
-
[Navmesh] Fixed crash when changing TileSizeUU value.
-
[Navmesh] Fixed debug display issue in duDebugDrawHeightfieldLayer
-
[Navmesh] Added ensure for TileSize != 0 and for the range of the tile coordinates.
AI Perception
Bug Fix:
- PR #12186: Fix Crash in UAISense_Sight::Update
AI Smart Objects
New:
-
Definition asset can no be longer be changed when component is bound to the simulation.
-
Cached variation is now reset when changing the asset definition
-
GameplayInteractions Plugin - UAITask_UseGameplayInteraction task success is now based on StateTree end result.
-
Adding support for SmartObjects on instanced actors using tag and fragments to create/destroy smart objects for mass entities
-
Owner actor is now provided to FindSmartObject in EQS query generator
-
Allow smart object creation from definition, transform and owner descriptor struct that will use dynamic IDs
-
Replaced registration type
WithCollection
byBindToExistingInstance
in USmartObjectComponent since it can also be used for objects not tied to a component lifetime created from CreateSmartObject -
Allow subsystem component accessor to force hydrate the actor associated to a smart object
-
Use sweeps instead of line traces to detect ground on exit. This prevents line traces from missing geometry when objects are perfectly aligned
Bug Fix:
-
Change BP function library's Mark Slot as Occupied to return the result of the subsystem's Mark Slot As Occupied when it is called.
-
Clear cached asset variation when the base asset gets saved
AI State Tree
New:
-
enabled debugger on all desktop platforms
-
New: Add buttons for creating new state tree nodes blueprint classes
-
New: Added Random Selection Behavior for State Tree
-
Create state tree task Run Parallel tree allowing a state to run a subtree while child state can still to be selected and entered.
-
New: Added Browse to Blueprint and Open Blueprint buttons for State Tree Nodes
-
New: Added Utility-based Selection Behaviors in State Tree.
-
New: Added Weight variable and a new type of State Tree Node named Considerations used by the aforementioned Selection Behaviors.
-
New: Added relevant UX features.
-
Extend FStateTreePropertyRef to be able to bind to multiple property types
-
StateTreeDebugger buffered data now handled differently if it can be reused in multiple traces during the same game session or if it needs to be reset when stopping the trace
-
Create IStateTreeSchemaProvider that allows a derived class to override the schema used by a parent property. Create StateTreeAIComponent & StateTreeAIComponentSchema derived from StateTreeComponent but guaranteed to have a AIController
-
StateTreeDebugger
-
New recording started from the debugger will be selected as the new active analysis
-
Allow multiple recordings during the same PIE session to reactive existing tracks
-
Do not apply trace selection if user reselect the current trace to avoid clearing data
-
Bug Fix:
-
Fix nullptr error for invalid StateTreeRef
-
Bug Fix: Hid "IsTrue" option for operator on State Tree Conditions because it's not applicable
-
Fixed debugger timelines reused for the same instances through multiple traces taken during the same game session
API
New:
- GameFeatures API: Add the OnGameFeatureActivated callback to trigger only once a Game Feature Plugin is completely active; For when some observing system relies on a plugin being fully active and not in the process of activating.
Audio
New:
-
Added two new Modulation functions on the Audio Component: Add Modulators and Remove Modulators.
-
Added experimental Control Bus Dashboard to Audio Insights. To view it, set the console variable au.Modulation.AudioInsightsTab to 1.
- This tab is a work in progress, but the implementation serves as an example if you want to build dashboards for your own tools.
-
Asynchronous loading added to Soundscape Palettes
-
Added a new CVar to force Spatialization Plugin Submix to send directly to main submix instead of the user set Default Submix: au.IgnoreUserResonanceSubmix
- This CVar is part of a fix for a very specific edge case involving Audio Modulation, Submixes, and External Spatialization plugins (eg. Resonance), which sometimes resulted in submixes' Volume Modulation being applied twice.
-
Remove tick from UMetaSoundOutputSubsystem, only drain queues when there is new data.
-
Newly created Control Buses now default to using the Volume Parameter.
-
Make subdivision trigger and pulse generator work the same way.
-
Added a CVar to Enable/Disable Audio Modulation: au.EnableAudioModulation
- Setting this CVar at runtime freezes the state of the entire Modulation System. Launching with this CVar means that no modulation assets will ever be created or updated.
-
Added highpass filter to Audio Component.
-
This performance improvements vastly increases the allowable size of a live auditioning MetaSound Source before clients experience audio dropouts.
-
Added Shared State Behavior input to MetaSound Array Random Get node for control over how random state is shared between nodes
-
Relative Render Cost estimates the instantaneous cost to rendering a MetaSound in a cross platform way.
Bug Fix:
-
We have fixed a minor bug in the Ogg Vorbis audio compression implementation that meant a single data frame of data was lost at the end of the stream. This bug presented mainly for highly compressed low bitrate single channel audio where a single data frame could contain multiple seconds of audio.
-
Added Audio Component ID to spatialization plugin data when using external Spatializer
-
Fixed an editor crash in City Sample related to audio.
-
Fixed a bug where IsControlBusMixActive sometimes returned true after the bus mix was deactivated.
-
[Harmonix] MIDI Note Trigger node: set note number only on note on. This will avoid issues with downstream patching that might behave badly when a note is transposed on the way in, but not on the way out. Step Sequence Player node: don't worry about setting a transposed note number on note off messages. The voice id of the message will be enough for downstream code to respond appropriately. #virtualized
-
Fixed a bug where Wet and Dry Submix Modulation incorrectly used Output Volume Modulation Settings, causing blueprint setters to not work properly.
-
Fixed crash when applying Modulation to a Source Effect's parameters at runtime.
-
Duplicated audio data when reading from memory mapped files
-
Improved thread safety of Audio Modulation's internal ID generation.
-
Fixed a bug where Modulation LFO Generators occasionally did not Activate
-
Allow MetaSound member default literal values and certain member fields to be copy/pasted in the details panel
-
Fix frequency clamp and interpolation in MetaSound Low Pass Filter node
-
Fix MetaSound trigger parameters being retriggered on realizing virtualized sounds and unneeded parameter updates being cached while virtualized
-
Enable pasting objects and object arrays from the content browser and Blueprint into MetaSound default values
-
Fix namespace being lost when select click renaming MetaSound graph members
-
Fix MetaSound Array Random Get node causing unintended repeats in some cases with shared state
Blueprint
API Change:
- Use FunctionReference.GetMemberParentClass() to query characteristics of the underlying function used by the node.
New:
-
Make FKismetCompilerUtilities::GenerateAssignmentNodes callable from other sources The logic of GenerateAssignmentNodes does not require a Call Function node, only that the input has a "then" pin which is not required by all Call Function nodes. Making this less restrictive makes it easier to write new custom K2 nodes based on or similar in functionality to CreateObjectFromClass without requiring a Call Function node is the source of the object. #contrib 12255
-
Extend the K2Node_Event API to include a GetDelegatePin function
-
UK2Node_ConvertAsset improvement Adds two functions to the UK2Node_ConvertAsset implementation that act as accessors to the pins created by that node.
-
Add the ability to set DeprecatedFunction="Note" (and DeprecatedVariable) metadata in a class header to lower the severity of a blueprint deprecation message. This can be used for "soft" deprecations where the function still works but should not be used in new blueprints.
-
Native support for UK2Node_AsyncAction Adds function to UK2Node_AsyncAction so that its members (really protected members of UK2Node_BaseAsyncTask) can be initialized properly from native. We can also do this via node spawners, but they tend to be clumsy when spawning async action nodes as intermediates.
-
Editor scripts can now add variables to blueprint assets using AddMemberVariable
-
Remove unused line in
EdGraphSchema_K2.cpp
-
Deprecated redundant fields in UK2Node_CallFunction. Both bIsConstFunc and bIsInterfaceCall are unnecessary since we can simply query the underlying UFunction/UClass (via FunctionReference) to determine if we're dealing with a const function or an interface class. Additional changes:
-
A check for CLASS_Interface was added to UK2Node_Message. While the chances of hitting this are very low, it wouldn't make sense to reference a non-interface class when expanding this node. It should really error out in that case.
-
CreatePinsForFunctionCall had an unusual check for hiding the self pin if the pure function was non-const. This appears to be really old and no longer relevant.
-
Bug Fix:
-
Blueprint MemberReference now also looks for DeprecatedProperty meta
-
Ensure that function parameter names can't be renamed to any local variables. We already have a check that prevents renaming local variables to parameters, but we don't have the opposite check. Since renames first test the pin rename with RenameUserDefinedPin, we need an implementation in the function entry node that ensures that the new name doesn't collide with the local variable names.
-
Fixed reachable garbage issue involving UInheritableComponentHandler::UnnecessaryComponents
-
Fix crashes when reconstructing blueprint instances while using less common patterns of level loading
-
Fixed an editor crash that could result during propagation of a PostEditChange() event after modifying a nested struct member field on an archetype.
-
Fix data loss bug where changes to placed and inherited blueprint components could be lost if they override the parent actor class but used the same values as the component blueprint class.
-
ExposeOnSpawn Class properties now respect "none" value inputs on "Construct object from class" nodes
-
Blueprint Add Custom Event unable to resolve delegate signature inside a split struct The pin splitting logic didn't propagate the underlying member reference for the function signature of a delegate. CreatePin doesn't handle this automatically, so we need to copy over the information manually.
-
Fix several bugs when using ClassWithin on blueprint classes. It now properly updates blueprints when the native class changes and errors will no longer crash the editor
-
Make sure we clean up constructed components when using the Actor replacement workflow.
-
Comment Node doesn't update in the Bookmarks tab after being renamed in the Event Graph Anytime a node's title is changed, we need to refresh the bookmarks tab.
-
Fix it so ExposeOnSpawn parameters set on a create/spawn blueprint node are correctly compared against the class's default values. It will only override values that could possibly be different from the defaults (including all values that could change at runtime due to pin connections).
-
Derived struct data is not copied to base struct. We made Generic_SetStructurePropertyByName a bit too strict by only allowing structs that matched exactly for copying properties. Prior to the change, this function was incredibly lax by allowing completely unrelated structures to be copied. The appropriate middleground allows derived structs. While this may lead to object slicing in some instances, this is permissable. Additionally, removed the public-facing Generic_SetStructurePropertyByName function since it was deprecated.
-
Update TryFreeCDOName() to check the renamed default object name and not the current default object name. The PR fixes TryFreeCDOName, but this change includes some additional cosmetic changes to RenameGeneratedClasses (inconsistent whitespace, missing consts, etc).
-
Adjust FKismetCompilerUtilities::GenerateAssignmentNodes to ignore output pins GenerateAssignmentNodes gets confused by the existence of a pin who name matches a property name but cannot be connected to an assignment node input.
-
Fix data loss bug where changes to placed components of inherited blueprints could be lost if the child blueprint did not modify that component in any way
Blueprint Compiler
New:
- Blueprint macros can now infer more than one type of pin, especially useful for TMap related macros
Bug Fix:
-
Fixed cause of Blueprint Macro Library Macro Graphs remaining in the Blueprint asset after said graph was deleted by the user
-
Fixed updating of objects that only reference a blueprint or its instances via weak references
-
Fixed underlying cause of "Content is missing from cook" error when cooking deep blueprint hierarchies with components
-
Fixed one cause of phantom blueprint compilation errors after duplicating a blueprint graph
-
Dependent blueprints are automatically included in the compilation set when they are out of date, this fixes some obscure crashes during blueprint compilation
-
Allow structs in the error state to be contained in other structs in order to prevent cascading errors
-
Empty event graphs are now more aggressively pruned, can be disabled via [Blueprints] bDisableLateEventGraphPruning
-
Blueprint 'Switch' nodes now raise an error when their enum disappears
Blueprint Editor
New:
-
Reference parameters in blueprint functions can now be tagged as const, preventing mutation within the function's graph
-
Further optimized the Blueprint Editor's graph context menu, used to place nodes into blueprint graphs
-
Removing the usage of "Friendly Names" from the Functions and (Event Graphs/Overrides Menu). The reasoning is that there is a long-term goal of removing Friendly Names entirely from the Editor. It interferes with the users being able to properly name their Functions/Events and have that name consistent through the interface. We have kept the Friendly Names when calling a function in Blueprints as well as the Blueprints Action list. The reasoning behind that is the nodes are very hard to decipher when zoomed out on the graph unless there are spaces between the names.
-
Added UPARAM AllowedClasses and ShowDisplayNames metadata specifiers for UClass/TSubclassOf type parameters. These work like their UPROPERTY metadata specifier counterparts of the same name.
-
Reroute nodes can now display compiler notes, warnings, and errors
-
Added CreateBlueprintAssetWithParent editor function, for creating blueprint assets with a specific parent class
Bug Fix:
-
Fixed potential for deadlock when terminating a global Find-in-Blueprint query in projects that may index references to StringTable assets.
-
Fixed a crash when reloading a blueprint when the diff window is open
-
Edits to sparse class data now propagate properly to child classes
-
Changing categories of macros in libraries does not update in search menu of other BPs When changing a macro category, we need to actively update the action database with the change. While SetBlueprintFunctionOrMacroCategory does call MarkBlueprintAsModified, this won't trigger the Blueprint's OnChanged callback, which the database normally relies on for changes.
-
The Details Panel's "Create New Blueprint" button now works correctly with Soft Class Properties
-
Searching for references to an event function via the My Blueprints context menu no longer inadvertantly double quotes the event name
-
Fixed cause of errors being raised after reparenting a blueprint
-
Removed long broken shortcut for creating an Array Get item at Index node in blueprints
-
Fix ensure when trying to update 'object being debugged' and we were previously debugging an object that is no longer valid, but still exists
-
Fix blueprint editor crash where creating a Soft Object reference to a Component or UserWidget would incorrectly show the inline subobject UI and crash when you tried to use it. You normally want to use Soft Class references to blueprintable assets like these.
-
Fixed bug that would cause clicking an entry in the blueprint context menu to spawn the incorrect node
-
The tooltip associated with the config variable checkbox in the blueprint editor no longer erroneously mentions SKEL_ classes
-
Fix a potential race condition during Blueprint asset search data indexing.
-
Editor Crash when adding components to a Editor Only BP Actor Iteration over child nodes didn't have sufficient safeguards for any entry removal. After calling FactoryCreateInheritedBpSubobject, we need to ensure that the iteration index is still within bounds.
Blueprint Runtime
Bug Fix:
-
Fixed broken logic related to construction script deferral due to static mesh compilation
-
Fixed crash when the BPVM calls SetArrayPropertyByName with a null object. Most of the functions in KismetArrayLibrary.h check for a null property address and set bArrayContextFailed to true, which induces a runtime failure. However, SetArrayPropertyByName was overlooked, and would cause a crash due to a null dereference.
-
Optimized UUserDefinedStruct::InitializeStruct in non editor builds
Gameplay
API Change:
-
UAbilitySystemComponent::InternalTryActivateAbilityFailureTags should be set correctly to both the failure reason and which tags caused that reason to happen.
-
The big projects that use a lot of gameplay tags may want to limit the tags they use to identify gameplay ability events. Adding a gameplay tag filter allows such a project to use tag category remapping to adjust all filtering to their gameplay tag structure.
- To enable this feature, use the Category Remapping settings to remap "GameplayEventTagsCategory" under "Project Settings / GameplayTags".
-
C++ code stays the same in this case, but the DisplayNames are altered in Blueprints to help designers. Properly renaming the functions in C++ was out of scope.
-
Some data that used to reside in FMoverDefaultSyncState, such as MovementMode and the Layered Moves Group, is now accessible through FMoverSyncState instead.
-
Prefer to use the Gameplay Abilities Developer Settings class directly rather than AbilitySystemGlobals when querying settings variables. Prefer AbilitySystemGlobals for global override functions.
-
Note: a NavMoverComponent will have to be added in addition to a MoverComponent to get pathfinding working properly. This was done in an effort to have some separation for nav specific data and functionality.
-
Blackboard access should be through the movement component if needed.
-
When querying for current abilities (such as through FindAbilitySpecFromHandle) there is an EConsiderPending to specify how to handle pending abilities (abilities about-to-be-added or removed).
-
Deprecated FTickableObjectBase::IsAllowedToTick because it was slow and redundant with the existing IsTickable function. The new SetTickableTickType function is a more efficient and safer way to dynamically disable tick
-
Previously, removing a GameplayCue would cause a single EGameplayTagEventType::AnyCountChange callback with its Tag and Count, even though all equivalent Cues would receive an OnRemove. So previously: 15 GC Tags would be a single callback and now it will be 15 callbacks. This will change behavior if you're using something like AbilityTask_WaitGameplayTagCountChanged on the GameplayCue Tag (that callback would fire 15x now, and just once previously).
- The CVar to toggle this functionality is GameplayCue.Fix.UseEqualTagCountAndRemovalCallbacks (it is now defaulted to true)
-
Through the discovery of this bug, it's been reasoned that it is never safe to ClearInvalidTags. Thus all functionality which allows one to do that has been deprecated and/or removed.
-
The (Blueprint) GameplayTagInterface::GetOwnedGameplayTags member function has been redirected to BlueprintGameplayTagLibrary::GetOwnedGameplayTags. The implementation ensures that the results you get are always a newly initialized tag container, thus ensuring you do not accidentally reuse and append old results.
-
GetLedgeMove() and CheckLedgeDirection() had their "GravDir" parameter removed (in favor of using the CharacterMovement gravity direction), while adding the previous valid floor as a param.
-
This would have had very subtle bugs in the past, where a server-initiated prediction key would "catch-up" client keys, possibly before (or after) rejecting them. The new FPredictionKey handling makes these bugs more apparent.
-
Otherwise, it's possible to leak FPredictionKeys as some could be generated and never acknowledged because the batch chooses only a single key to be sent (when it can be acknowledging as many as three different events). By making the keys dependent, just a single acknowledgement will acknowledge all of those events.
-
p.NetServerMaxMoveDeltaTimeScalar adds a scalar on the server, clamped to >= 1
-
GAS - UGameplayEffectComponent::OnGameplayEffectChanged has been changed to non-const to allow the proper flow of updating its values on Post Blueprint Compilation. This allows us to update the inheritance values on Blueprint compilation which will happen after serialization (which could stomp PostInitProperties values).
-
As part of the performance improvements to world ticking, static level collections will no longer be created by default. These were only used by the disabled client world duplication feature (but they can be created by setting s.World.CreateStaticLevelCollection)
-
This behavior can be disabled with the "Input.bAutoReconcilePressedEventsOnFirstRepeat" Cvar.
-
In case this somehow causes issues unforeseen issues with split screen games, it can be disabled with the cvar 'input.bRemapDeviceIdForOffsetPlayerGamepadIds'.
New:
-
GAS - When an ability is blocked by a tag, we should report which tag caused the block. Added a generic tag for when the native or blueprint CanActivateAbility function blocks activation.
-
Mover: Adding BlueprintInternalUseOnly to LayeredMove, InstantEffect and MovmentModifier base structs to disallow making and queueing the base structs in BP. Also making error message for not implementing Clone function clearer and more helpful.
-
Added a new GameplayTags function to move tags between ini files
-
GAS - Adding GameplayTagFilter to API that works with gameplay tag events (see Programmer Notes)
-
Mover: adding a stance movement modifier meant to handle different stance changes such as crouch #virtualized
-
Added a new CharacterMovementComponent flag that allows jump logic to only apply jump velocity at the start of the jump, not continuously throughout the entire jump hold time, which remains the default behavior
-
Deprecated old CharacterMovementComponent::DoJump and made it to call the new DoJump function, which now allows caller to pass in DeltaTime. Existing code will continue to call the old DoJump, and the new behavior can be opted into via a cvar.
-
Add IsDataValid to FTableRowBase which can be used to enable data validation for data tables
-
Mover: changed montage-based anim root motion behavior to end itself once the mesh is no longer playing the montage, allowing smooth transition back to controlled movement without loss of momentum
-
Mover 2.0 adding Flying gameplay tag and adding some state checking functions to CharacterMoverComponent
-
GAS - Gameplay Cue Notify Actor (Looping) Function names have been renamed to give users a better understanding of when they trigger. An asset validation warning has been added in the case where a user implements OnActive and OnRemove, but not WhileActive. These have now been named to OnBurst, OnCeaseRelevant, and OnBecomeRelevant respectively.
-
Mover: stood up initial version of a standalone backend liaison for non-networked games
-
Trace Targeting Selection / Engineering: Added option to use Single trace instead of Multi trace. This allows for ensuring only one hit result is given, avoiding the case where an initial overlap hit is given along with the first hit past the initial overlap.
-
Mover 2.0: Adding Movement Modifier system - a system that is used to apply changes that indirectly influence the movement simulation, without proposing or executing any movement, but still in sync with the sim.
-
Added optional acceleration to RepMovement, in support of allowing Characters replicating it to sim proxies.
-
Mover 2.0 removing OnImpact delegate since as it was unneeded and could potentially affect performance
-
Mover: Adding ProcessGeneratedMovement delegate for mode-agnostic modification of proposed movement after it has been generated.
-
Disable concurrent actor/component tick queuing by default as it is slower in most cases and also causes reliability issues, it can be re-enabled with tick.AllowConcurrentTickQueue. This was disabled in code on platforms like windows, but now all platforms work the same by default
-
Mover: Adding Instant Movement Effects. A new Mover system that allows for direct modification of sync state for one frame. This essentially replaces any instantaneous layered moves like teleport or launch.
-
Mover: Converting Movement modes to use new instant movement effects for jumping and teleporting. This change also moves jumping out to the character movement component rather than specific modes (Modes can still handle jumps specifically if desired)
-
Mover: adding velocity to the mover debugger
-
GAS - Add OnMontageBlendedIn support for PlayMontageAndWait ability task
-
Mover: added data validation and runtime checks for transitions
-
GAS - Introducing FScopedDiscardPredictions which will allow users to write code that assumes predictions happen or not. For instance, cases where we want to the Ability System Component to do things that are unreliable / optional and this allows us to do that safely.
-
Mover: adding API for directly reading/writing to the simulation sync state that is yet to be committed/sent. This is to help support advanced mechanics that may break out of Network Prediction's rigid simulation window in order to interoperate with other gameplay or physics-simulated objects.
-
GAS - Adding Debug support for GameplayAbilityTargetActor_Radius
-
Mover Examples: Renaming Dashing pawn to AnimatedMannyPawnExtended and moving it out of the variants folder to the pawns folder #virtualized
-
Mover: Removing teleport layered move as it's functionality now lives in the teleport instant movement effect. This allows us to get rid of some data in FProposedMove.
-
Mover Examples: Adjusting example content to use instant effects where appropriate and adding a instant effect map #virtualized
-
Mover: removed unnecessary base pawn class
-
Mover Examples: Fleshing out dashing/extended pawn to have animations for all of its extra functionality including, Flying, Multi-jump, Ziplining and Dashing. This also splits off a separate animation blueprint for the extended examples pawn that contains functionality for all of these animations. #virtualized
-
Added a new flag to Targeting Sort Tasks that preserves the relative ordering of targets with equal scores, at the cost of slightly worse performance.
-
Mover: added templated convenience function to access the typed MoverComponent from the movement mode
-
Physics Mover - Add networked input struct for max speed and acceleration to avoid desyncs when changing these dynamically
-
Mover - Support multiple settings classes
-
Mover: Adding NavWalkingMode to support more efficient walking movement for actors using a navmesh
-
Mover Tests: Adjusting automated test plugins and adding automated test map for instant movement effects
-
Mover: moved required properties out of the sync state collection and onto the core sync state
-
Mover: added optional data validation for backend liaison classes
-
GAS - When Clearing an FScalableFloat Property field (using the UI), the RowName doesn't get reset. This can cause warnings/errors later when the scalable float is being evaluated because it has a RowName but no CurveTable.
-
Mover: added BP-callable function to manually set primary visual component
-
Mover: Added a bool to Falling Mode to customize landing - actors can now land and cancel vertical velocity or have the vertical velocity redirected based off the surface they landed on.
-
Mover: Adding gameplay tag query functions to support querying gameplay tags across different mover systems
-
GAS - Gameplay Debugger now reconciles Server vs. Client state for Gameplay Effects, similar to how Tags and Attributes work. Recolored the Gameplay Debugger to prefer Yellow (the common color) for properly networked attributes/effects. Aligned some text better. Small refactor for the Attributes.
-
Mover: improved data validation to prevent a variety of bad setup issues
-
Mover - Add gameplay tags to movement modes to indicate state
-
Mover: added planar movement constraints which are respected in the default character movement modes
-
Physics Mover - Support non-async physics update
-
GAS - PGameplay Abilities Developer Settings. Introducing the option to configure the AbilitySystemGlobals through an easier to understand user interface found in the Editor's Project Settings. Backwards compatibility is maintained with the old data.
-
Optimize UGameplayTagsManager::GameplayTagsMatchDepth to remove excess allocations.
-
Added a way to temporarily override how the GameplayTagsManager handles unloading of GameplayTags.
-
GAS - Add On GameplayEffect Inhibition Changed delegate
-
Added a way to temporarily defer rebuilds of the GameplayTag tree managed by the GameplayTagsManager.
-
Mover: export common movement mode gameplay tags, so external modules can use them directly
-
Add UWorld::EndPlay which properly calls RouteEndPlay and change the existing world shutdown code to use the new function. This must be called for any worlds that have a game mode and actually started play. Add a FTestWorldWrapper struct (used by new test System.Engine.Tick.PerfTest) which handles all of the logic required to create and destroy a gameplay world for automated tests. Fix several other issues with creating and destroying worlds during automated tests and improve warnings when things are done incorrectly.
-
Mover: Adding a Movement Mixer class that helps mixing layered moves and proposed moves and makes it more extensible.
-
Mover - Add mode activate and deactivate functions
-
Mover: Added more debug info to the Gameplay Debugger Tool readout
-
Mover: Layered move preferred moves only set the mode the first time they tick to avoid a mover system constantly setting movement mode
-
Mover plugin: added support for Mover trajectory prediction for use with motion-matching animation tech in PoseSearch
-
GAS - Exposing Gameplay Effect's GetAssetTags / GetGrantedTags to Blueprints
-
GAS - Exposing Gameplay Ability IsActive to Blueprints.
-
Mover: expanded transitions supported so they can always be actively evaluated, no longer limited to individual modes
-
Added public native function for setting the user description of a FGameplayTagQuery
-
Adjusting some comments in NetworkPredictionConfig so options in projects settings have correct/helpful tooltips
-
GAS - Changed the friendly DisplayNames of the GameplayEffectComponents to make them easier to comprehend.
-
MoverExamples: added ziplining mechanic example
-
GAS - Adding "ShowDebug AbilitySystem" to the console auto-complete list
-
GAS - Create GetExplicitTagCoung util for FGameplayTagCountContainer
-
GAS - Optional parameter to GameplayTagCountContainer::Reset allows a user to empty the container while keeping all of the registered tag count change callbacks.
-
Add GetPossibleDataRegistryIdList to the DataRegistrySubsystem to allow iterating registries from blueprint. Deprecate GetCachedItemFromLookupBP in favor of new "Find Data Registry Item From Lookup" that uses multiple output pins. Clean up the comments and names of the BP functions to remove experimental tag.
-
Targeting System / Sort By Distance: Added option for more accurate distance calculation based off of nearest collision surface instead of actor location.
-
Mover: Adding functions to allow users to poll mover component for active layered moves by type.
-
Add a new Tick Batching system for actors and components which can be enabled by setting the tick.AllowBatchedTicks cvar. When enabled, this will group together the execution of similar actor and component ticks which improves game thread performance. Also added options like ForEachNestedTick to TickFunction to better support manual tick batching (which can be faster than the new automated batching)
-
[GAS] Adding some debug information to track down warnings for potentially invalid use of GetOwnedGameplayTags() and related functions on Gameplay Effects.
-
[CharacterMovementComponent] Option to base the character on the attachment root of the objedt that the character is standing on. UCharacterMovementComponent::bBaseOnAttachmentRoot.
-
Mover: added initial support for taking root motion from a mesh attribute
-
[GAS] Added invalid data warning when BlockAbilityTags is used with Instant GE
-
GAS - Improving the GAS Debug Facilities. Attributes can now be debugged in the Gameplay Debugger. Layout of the GameplayDebugger is better formatted.
-
Mover: Adding Pathfollowing and NavMovement support. Also adding some example content to show/test the feature. #virtualized
-
[GAS] Giving a warning to users during validation that an FScalableFloat RowName could be invisibly set to a value (which would cause warnings at cook/runtime).
-
GAS - Adding
meta=(DeterminesOutputType)
toGetAttributeSet
ofAbilitySystemComponent
-
GAS - Adding the Gameplay Ability System README.md. We accept pull requests for better documentation!
-
Added new CVars that allow CSV Tracking for the following Movement related stats:
-
CVar: p.ClientRecordMovePackedRpcStatsToCsv
-
CVar: p.ClientRecordNetCorrectionDistanceToCsv
-
Correction Distance: whether the client received a correction from the server and how big it was.
-
Num movement RPCs the client sends to the server per frame
-
Num movement RPCs the client receives from the server per frame
-
Size of the sent Movement RPCs
-
Size of the received Movement RPCs
These stats will be recorded to the new CharacterMovementDetailed CSV Category
-
-
Mover: Removing movement mode GetBlackboard functions.
-
GAS - Introduce LogGameplayCues category which initially shows nothing, unless you set it to Verbose.
-
Mover Tets: Updating LayeredMove Automated test map to reflect new layered moves #virtualized
-
SplineComponent::GetSplinePointAt() now returns full FSplinePoint data. Previously it was missing the spline's Type property.
-
Fixes CharacterMovementComponent applying an anim montage's root motion with incorrect scale on last tick when the montage is triggered by AbilityTask_PlayMontageAndWait and the skel mesh is not recently rendered.
-
Fire the OnInputHardwareDeviceChanged event whenever the hardware device id changes from the last known platform user id map, not the input device id map. This gives us the desired behavior of firing a delegate any time the Platform User changes their "most recently used" input device, instead of only ever firing when an input device is connected.
-
Add a Kismet Math library function to access the value of a FRuntimeFloatCurve.
-
Mover: updated readme based on recent development
Bug Fix:
-
Fixing APlayerController::PostProcessWorldToScreen() not applying to ProjectWorldLocationToScreenWithDistance() #9917
-
GAS - Fixes for issues where Gameplay Effects & PredictionKeys. Solidifying rules around the client/server communication. It includes:
-
GE's could be without communicating a prediction key if it went through SendGameplayEventToActor.
-
GE's could be removed without being the authority through certain paths.
-
Server Initiated PredictionKeys were being sent down to the client, but it takes a spot in a circular buffer and thus it's possible it stomps an actual client FPredictionKey.
-
Extra logging and ensures to clarify these rules.
-
Changes to the Abilities Gameplay Debugger to catch these issues (previously multiple applications of a GE could go undetected).
-
Blueprint function MakeSpecHandle has been deprecated in favor of MakeSpecHandleByClass since you need the CDO instance.
-
-
Network Prediction plugin: fixed issue where client and server would desync on the number of inputs shared, causing ensures and continuous reconciliations
-
Mover: fixed crash that could occur for Mover actor instances outside of a game world, such as an in-editor thumbnail renderer
-
Mover: fixed bug where a layered move could work with old state data if sim tick is split into multiple substeps
-
GAS - Use CurrentValue instead of BaseValue when dispatching AttributeChangeDelegates in replication case. This solves a case where you can listen for the AttributeValueChangeDelegate on a Simulated Proxy and receive the Base value rather than properly aggregated value.
-
Fixed inconsistency between how FInputAxisBinding and FInputAxisKeyBinding determine their axis value when the input key has been previously consumed
-
Mover: fixed issue with inconsistency in auto-finding a primary visual component between cooked and non-cooked assets.
-
Fixed issue where a Character sliding down an unwalkable surface get hung up without sliding all the way down to a walkable surface
-
GAS ActivationOwnedTags now correctly replicate the tags to clients just once (not twice like previously).
-
MoverExamples: fixed bug where users could attempt to instantiate a MoverExamplesCharacter, which is intended as an abstract type
-
GAS - Added context menu to Gameplay Attribute widget (Editor)
-
Mover: Fixing timing issue with layered move preferred mode not getting applied
-
GAS - Fix for UGameplayAbility::GetSourceObject not returning a valid object when it is in the pending list.
-
MoverExamples: fixed shadow rendering artifact issues on various pawn assets
-
GAS - Properly dirtying the ActiveGampelayEffects array when granting a new Gameplay Ability Spec Handle. Adding some visual logging to help track down these complex issues.
-
Fix several crashes when trying to tick partially destroyed world objects. TickableWorldSubsystem and other world objects that use FTickableGameObject now disable their tick by calling the new function SetTickableTickType during unregistration. This uses a new SetTickableTickType function that can dynamically enable or disable ticking
-
GAS - Gameplay Cue Notify Actors are now removed properly on Listen Server instances. Previously when Gameplay Effects were removed, the Gameplay Cue Tags would still be present on the listen server. AbilitySystem.GameplayCueNotifyTagCheckOnRemove would then refuse to issue the Gameplay Cue Removal event since that Tag was still present. The removal code has been rewritten to account for this.
-
UCharacterMovementComponent::RoundAcceleration() changed to match the same rounding and clamping that is used by replication of FVector_NetQuantize10.
-
GAS - Removing PackageMap assumptions from the Gameplay Debugger (it's not valid in Replay and could therefore crash when using during Replay)
-
Fix bug where gameplay tags used in plugin config files would be lost if plugins were loaded in a different order
-
Fix crashes when modifying the types of currently registered DataRegistry assets
-
Mover: fixing issue with layered move mixing and preferred movement modes where Override velocity mix mode would override Preferred mode from OverrideAll
-
CharacterMovementComponent: fixed cases where mid-tick changes in movement mode could continue movement with the old mode's Phys function. This could occur in a customized project when root motion causes lift-off into a mode other than MOVE_Falling.
-
GAS - Console Command "AbilitySystem.Effect.Apply" return value has been fixed to account for Instant Effects.
-
Mover: Fixing issue with control rotation pitch and walking/falling mode causing actor to stop moving
-
GAS - Gameplay Effects could previously hold on to old GameplayTags.
-
Fixed root motion replication to proxies when finishing root motion to ensure the replicated shadowed state is correct on the frame that root motion finishes.
-
GAS - Fixing up some user-facing descriptions of FInheritableTagContainer.
-
GAS - Fixed bugs caused by gameplay cue getting removed after OnRemove is sent to the cue
-
Made FSoftObjectPath::LoadAsync const
-
Fixed issue where readme files for Mover and Network Prediction plugins were excluded from distributed builds
-
GAS - Reference to GameplayTag wasn't resolved correctly if the blueprint is loaded before the GameplayTag is registered. This could happen if a Blueprint is loaded early which contains a Native Gameplay Tag, but that Native Gameplay Tag is in a different plug-in.
-
Mover tests: Removing some old unused mannequin assets and modifying some of animations used to remove some unused notifies #virtualized
-
Mover: Initializing mover component start state on initialize and updating starting sync state on begin play if location has changed to avoid a warning about desynced positions. Also, downgrading an ensure to a warning to avoid pausing the editor for an issue that could potentially fix itself
-
When Undoing Apply Instance Changes into a Blueprint class the actor instance now gets replaced with a new/updated version of the BP class that was updated. Fixes an issue with transaction buffer losing reference to the actor and deleting it.
-
Mover: fixed bug where a turning rate that was a multiple of 360 degrees/second could prevent rotation in the default character movement modes
-
Fixed a few different crashes that were a result of a replicated LevelSequenceActor being recreated on client, but using a SequencePlayer from a previous, destroyed copy of that actor that hadn't been garbage-collected yet.
-
Mover: Fixing issue where falling mode wouldn't respect terminal velocity and apply gravity after clamping to terminal velocity
-
GAS - GetOwnedGameplayTags Fix For Reusing old tag container in blueprint event graphs.
-
Enhanced Input: Fixing issue with combo triggers not firing completed event when first and last combo action are the same action
-
Fixing reinstancing issue with nested subobjects and transaction buffer not collecting all subobject info
-
Mover: Fixing mixing issue where cumulative move didn't get correct mixing mode from mixing layered moves
-
Mover: fixed crash that could occur in standalone games where an invalid scene component could be discovered during initialization
-
GAS - GameplayCues: OriginalTag is never set for GCNs.
-
Set DEFAULT_ORTHOZOOM for Paper2D editor viewports.
-
GAS - Fix FGameplayEffectQuery::IsEmpty incorrectly returning true even if a CustomDelegate is bound
-
Network Prediction: fixed issue where the FixedTickFrameRate setting was not respected for non-physics simulations
-
Improved CharacterMovementComponent ledge movement functionality. Fixed deflection attempt reapplying acceleration, often making it fail by moving off the ledge again. Now GetLedgeMove() attempts to compute the ledge normal based on the hit of the capsule with the previous valid floor, and deflects movement as if hitting an invisible barrier.
-
Mover: fixes issues with kinematic based movement latency and drifting
-
Mover: Giving teleport layered move a higher default priority so it isn't overridden by other moves by default
-
Mover Examples: Base pawn now has missing flying animation #virtualized
-
Mover: Making multijump properly assign InAirJumps left so walking off platforms still allows the actor an in air jump
-
Mover: Fixing issues with TimeStep being passed into different mover systems where SubTimeStep should have been used
-
GAS - Ensure FPredictionKeys only attempt to "catch-up" if they were locally generated. If they are Server Initiated, then ignore them for catch-up purposes.
-
Mover: GenerateMove for LayeredMoves in subStep loop should use SubstepStartData and SubTimeStep. #contrib 12296
-
Mover: Adding some data validation to physics movement modes to make sure that a physics backend class is present to avoid unwanted interactions and crashes
-
GAS - Gameplay FPredictionKey Fixes. 1. Previously, when calling a CaughtUp or Rejected callback, the FPredictionKey Replication Array could realloc while you were holding on to the reference. 2. Introduced some debug functionality that will attempt to catch these extremely hard to find cases where an FPredictionKey could be created and never acknowledged. 3. Added CVars for controlling behavior on how FPredictionKey Dependency Chains should behave.
-
Mover Examples: More polish for the Extended pawn. Adjusting aiming camera location, adding a dashing cooldown, fixing issue with vaulting playing flying animation after ending #virtualized
-
Mover: Adding some safety measures to AddMovementMode to avoid issues with passing in abstract classes
-
During actor reinstancing old actor components are now unregistered before spawning their replacements to avoid collision with component registration
-
GAS - FScopedServerAbilityRPCBatcher should ensure all keys generated in its batch are dependent.
-
GAS - AbilitiesGameplayEffectComponent could fail to grant and remove abilities if those abilities were granted/removed during the same scope lock (due to the PendingAdds/PendingRemoves). Making this more clear by allowing users to query the pending lists in some interfaces (EConsiderPending).
-
Mover: fixed issue where root motion in async simulations could be greatly exaggerated
-
Improved behavior to reduce character movement corrections by allowing server to run longer move time deltas than the client is allowed to send, to account for when client updates are lost or jittery and a longer time should be used. Fixed client timestamp when forcing updates, allowing client time advanced during normal updates, and stopping after duration limit exceeded.
-
Only enable AspectRatioAxisConstraint on the camera component if it is actually going to do anything
-
Change GameFeatureSubsystem::AddObserver to notify the new observer about any relevant plugins that are already enabled (PR #11329)
-
GAS - UGameplayEffectComponent::OnGameplayEffectChanged has been changed to non-const
-
Several performance improvements to world ticking, especially when using world partition
-
GAS - Skip the check for unmapped references when receiving the replicated Server Initiated Gameplay Effects. This ensures the Gameplay Cues will always fire properly.
-
Fix crashes that could happen when modifying the GameFrameworkComponentManager delegates during execution of those delegates
-
Mover: fixed issue with interpolating between states that had different movement bases, typically leading to unintentional teleportation
-
GAS -: FActiveGameplayEffectsContainer::CheckDuration will no longer remove Infinite Gameplay Effects. PR #11850:
-
GAS - Handling a case where InstancedPerExecution abilities could ensure if being Removed while in an EndAbility callstack.
-
GAS - PR #11857: Fix unbinding OnMontageBlendedInEnded delegate.
-
Mover: fixed check crash when compiling a BP that has a MoverComponent with a NetworkPhysicsLiaison backend specified
-
Cameras: fixed wrong error log message when stopping camera animations
-
Mover: Fixing a crash that occurs when attempting to fire a Queue Layered Move that's connected to a non struct node
-
Fix a bug where, if you are holding a key down during a level transition, the keystate map would incorrectly evaluate the state of the key as being released and re-pressed every frame. This meant that, for example, if you had a "Released" trigger on an Enhanced Input mapping context (or you were listening to any released event on a legacy mapping) that it would constantly fire as you hold down the key instead of only firing on release.
-
Make the InputKey property on UK2Node_InputDebugKey Visible only, not editable. This fixes a bug where you could select the unsupported "Any Key" option from the key selector.
-
Fix for bSkipAssigningGamepadToFirstPlayer in the GameViewportClient.
Deprecated:
-
GAS - Make it clear that we currently do not support replication when using InstancedPerExecution GameplayAbilities. Track issue UE-210273 if you want to see how this progresses.
-
GAS - Deprecating FGameplayAbilitySpec::ActivationInfo since it only makes sense on NonInstanced Gameplay Abilities (which have also been deprecated). If you want that functionality, grab the instance and look at GetCurrentActivationInfo().
-
GAS - Deprecating NonInstanced Gameplay Abilities. We now only support either InstancedPerActor or InstancedPerExecution. The motivation is to provide a more consistent interface of the UGameplayAbility functions.
Mass
API Change:
- MassRepresentation's functions using
int32 InstanceId
parameters have been deprecated. Use theFMassEntityHandle
directly
New:
-
Improved FMassExecutionContext's checks whether subsystems and fragments are bound and configured for read-write if accessing mutable version.
-
fixed some processor execution flags to not run in pure Editor without associated world
-
updated FMassArchetypeCompositionDescriptor::DebugOutputDescription to include shared fragments
-
added new processor execution flags 'EditorWorld' and 'AllWorldModes' that could be used for processors that need to run when associated to a world in either client, server, standalone or Editor mode
-
added function 'DetermineProcessorSupportedTickTypes' so processors executed in an Editor world can be ticked in all tick modes
-
Added missing details about ConstSharedFragments in the archetype panel of the MassDebugger
-
Added support for all owned queries for processors inheriting from UMassSignalProcessorBase
-
Changed the Mass ISM-related API's usage of cryptic int32 to identify entities (usually obtained by hashing the entity handle) in favor of using the FMassEntityHandle directly. Added benefit is that we can directly identify the entity being processed by Mass Visualization, without additional lookups.
-
Improved performance of merging Mass command buffers
-
Changes to dynamic processor dependency solving to support dependencies between instances of the same processor class - for dynamic processors we use the processor instance name rather than class name while resolving dependencies.
Bug Fix:
-
Changed how we hash ISMComponents in MassRepresentation Using object path can cause issues in WP worlds since levels being removed might get their name changed which changes the hash and causes issues when removing ISM shared data.
-
Fixed broken Mass debug FAgentDebugVisualization wire shape visualization
-
Running post spawn processors only is anything was actually spawned.
-
Fixed observers getting notified before the fragments values are set on entities created through 'CreateEntity' and 'BuildEntity'
-
Changes to make editor-available Mass processors actually execute in editor mode.
Networking
API Change:
- UNetConnection::GetConnectionId() is deprecated in favor of UNetConnection::GetConnectionHandle().
New:
-
NetBitArray - Added safer ways to access internal buffers held by a FNetBitArray and FNetBitArrayView GetWord() can be used to safely access the full 32bit value to modify 32bit entries at once. GetDataChecked(NumWordSize) can be used to access the raw array buffer but will also validate that the maximum word iteration count is within the bounds of the NetBitArray * Reset() has been deprecated in favor of ClearAllBits()
-
Networking: Added Networking_FastArray_Apply csv scope to FastArray reception codepath Allows to track regressions in FastArray user code Exposed CSV Networking category via NetCore module export
-
NetDriver Added exclusive csv cpu scope to FlushNet call to track time spent inside NetworkHandlerComponent (compression, encryption, socket send, etc.)
-
NetDriver Handshake - The NetDriver of client connections will now automatically change the ReplicationSystem from non-Iris to Iris (or vice-versa) when they receive an Upgrade control message with a NetworkRuntimeFeature incompatibility * Works in both the statelesshandshakecomponent and regular netconnection handshake
-
NetDriver Allow GameInstance's to override the Iris ReplicationSystem config
-
Change client pawn controller replication logic to properly call OnRep_Controller and NotifyControllerChanged when the controller is changed by code like ClientRestart that bypasses normal replication (this can be disabled with Controller.AlwaysNotifyClientOnControllerChange)
-
NetTokens are now serialized using separate indices per NetTokenDataStore
-
NetAnalytics
-
Added ability to add game specific attributes to the NetAnalytics framework
-
To add those game attributes, Implementations of FNetAnalyticsData must call AppendGameInstanceAttributes before calling SendAttributes.
-
Add or modify your game attributes with the NetDriver::SetNetAnalyticsAttributes function
-
NetDriver will add some default attributes (NetDriverName, NetDriverDefinition, ReplicationModel, NetMode) when net.AddNetDriverInfoToNetAnalytics is true
-
-
Added http.CurlAllowHTTP2 CVar to enable HTTP/2 for platforms using libcurl (defaults to false)
-
Added NetRefHandleManager as a protected member of NetObjectFilter for other internal filters to use and not having to create their own member.
-
Added protected GetObjectIndex function to NetObjectFilter. It returns the object index for the given NetRefHandle.
-
Added IRISCORE_API to UNetObjectGridWorldLocFilter, so that other game modules can derive from this class and extend it.
-
Added CSV Profiling Stat tracking for Average Jitter (milliseconds)
-
Added CSV Profiling Stat tracking for Packet Loss Percentage (In/Out)
-
Added "net.DisableRandomNetUpdateDelay" CVar to toggle the random delay added to actors' NextUpdateTime.
-
NetDriver * Added some functions to allow swapping a NetDriver from a ReplicationDriver (RepGraph) to a ReplicationSystem (Iris) without destroying and restarting the netdriver
-
Experimental support for NetTokens to allow exporting stable pieces data such as strings and GameplayTags only once to reduce bandwidth usage. See NetTokenStore.h for details.
-
Added CSV profiling markers to Oodle when processing incoming packets.
-
Added CSV profiling markers to Oodle when processing outgoing packets.
-
Implemented FConnectionHandle which carry both parent connection and child connection information. This can be useful for APIs where it's important to keep track of child connections as well.
-
Added console command to set nettrace verbosity at runtime - NetTrace.SetTraceVerbosity [verbositylevel]
-
Added UE::Net::FTestWorldInstance and UE::Net::FTestWorlds to enable writing synchronous test cases within the scope of one function that utilize full UWorlds and the whole networking & replication path. The worlds created are PIE worlds and only work in the editor.
-
Added cvar net.SerializeNewActorOverrideLevel that can be optionally disabled to bring back the functionality of spawning replicated, dynamic actors in the persistent level on clients, regardless of its level on the server. This was the behavior in UE 4.19 and earlier.
-
Enabled EWorldType::Game worlds to be dedicated servers if desired in the editor.
-
Add a new UFUNCTION specifier "Remote" that turns the function into a unicast RPC that can be invoked on either clients or servers and executed on the remote side of the net connection. These functions will only execute remotely and only on net-owned actors.
-
Added Iris replication support for UInstancedActorsData.
-
Added a very early, experimental MultiServerReplication plugin that exposes a peer-to-peer like interface for communicating between multiple UE instances via online beacons. The only supported method of communication is via RPCs of subclasses of AMultiServerBeaconClient. Also added a UAT script LaunchMultiServer to automate launching a multi-server setup.
-
Added limited support for dynamic, replicated actors moving between levels at runtime on servers (via changing outer with the Rename function):
-
It's recommended to spawn dynamic actors in the world's persistent level and keep them there instead of relying on this feature.
-
This does not automatically replicate the level change to clients! If using this feature, set the cvar net.SerializeNewActorOverrideLevel=0 to keep the actors in the persistent level on clients.
-
This does not support actors placed in maps or other net-addressable/stably-named actors.
-
Use with the cvar value net.CleanUpRenamedDynamicActors=1 to destroy the actors on clients if they move into a level the client doesn't have loaded.
-
If using ReplicationGraph, set the cvar net.RepGraph.HandleDynamicActorRename=1.
-
Bug Fix:
-
Crash fix for removing InstancedStruct from a replicated array and adding the same struct type again when using Iris Replication.
-
Iris - Fix for issue where replicated overridden blueprint events/functions would not call the overrriden event/function
-
Iris - Fixed issue with changes to SubObjectFilterGroups would not enforce dirtiness until subobjects was modified
-
Iris - Invalidate delta compression baselines for the entire object hierarchy if a condition change are affecting properties in sub objects too. Prior to this fix such condition changes could cause bitstream errors on the receiving end.
-
Fix to ensure that members for both object and subobjects affected by changing conditionals such as owning connection, physics and role always are marked dirty when condition is re-enabled when using Iris Replication.
-
Fixed compilation error when UE_NET_ENABLE_REPLICATIONREADER_LOG is enabled.
-
Ensure locally controlled pawns on a listen server don't have a RemoteRole of ROLE_AutonomousProxy.
-
Iris - Fixed bug where late joining clients could cause ensures when RPCs were called on sub objects of relevant to owner only and connection filtered actors.
-
Iris - Keep reliability when splitting a NetBlob. Split unreliable multicast RPCs will now also keep their normal execution order.
-
Fix NetConnection crash when receiving packets from an IP address that was previously remapped after the user's client connection was cleaned-up.
-
Fix for ASAN crash issue on shutdown where UActorReplicationBridge would read from an already cleaned up reference to PackageMap. Changing to a UPROPERTY TObjectPtr fixes the issue. [RN] Fixed a case for a potential rare crash when shutting down ActorReplicationBridgebmittool SubmitTool-Development-4.2.0.1191505988
-
Fixed bug causing packet simulation to potentially be applied more than once on the same packet.
-
Fix for ASAN crash in Iris ObjectReplicationBridge - use cached version of FilterProfile instead of dereferencing a potentially invalid pointer due to array reallocation
-
Fixed issue where UHT did not generate separate FastArraySerializer type for FastArraySerializer's derived from other FastArraySerializers resulting in overloaded methods being called on base type instead of most derived type.
-
Fixed issue where some exports was not properly exported with recorded demo frame if exported by checkpoint causing bunch errors due to not all mustbemapped exports being registered.
-
Fixed an issue with Iris replication where reliable RPCs sent right before a client is disconnected (via the server kicking them, for example) could be dropped, especially under packet loss.
-
Fixed a bug with Iris replication where replicated components of an initially-dormant actor wouldn't replicate if the actor's dormancy is flushed before BeginPlay is called.
Learning Resources
Sample Content
New:
- Updating templates that weren't setting r.AllowStaticLighting to either False or True, to r.AllowStaticLighting=False
Level Design and Art Tools
Bug Fix:
- Fixed the level viewport tool bar having a wrong width with cinematic viewport.
Geometry Core
API Change:
- A new CVar, modeling.DisableAutoUVAreaDensitySampling, can be set to return the behavior to the original algorithm, in case there are legacy reasons to maintain that behavior.
New:
-
Added a faster variant of the Orient2D exact predicate for the case where one point is at the origin.
-
Generalized the GeometryCore grid interpolation code to support float as well as double precision, added support for clamping queries to the grid bounds, and fixed the Bounds() method to return the correct bounds.
-
Added new methods to VectorUtil for uniform random sampling of positions and barycentric coordinates on triangles
-
Improved the UV generation scheme PatchBuilder via a change to the polygroup generation stage, providing area aware sampling of the mesh surface and reducing the overcompensation effects that small, disconnected regions in the mesh were having on the overall segmentation.
Bug Fix:
-
Fixed a case where Dynamic Mesh could create invalid geometry when merging an edge pair.
-
Fixed crashes in the Convex Hull and Convex Decomposition methods.
-
Fixed an issue where the local parameterization (exponential maps) algorithm generated incorrect results for meshes without vertex normals.
-
GeometryProcessing Sparse Matrix: fix a crash when solving large sparse systems. We were computing NRows * NCols which can overflow int32 on moderately large matrices (~50k by 50k).
-
Fixed an issue where mesh surface point sampling could hang on meshes with degenerate triangles.
-
The Dynamic Mesh CompactInPlace method now compacts more of the internal mesh data, fixing an issue where Convex Decomposition and some other algorithms would use an excessive amount of memory when processing large inputs.
-
Fixed an issue where the AABB tree build could crash for meshes with NaN or Inf vertices.
-
Fixed crashes and improved behavior of the Bevel algorithm on meshes that have bowtie vertices.
-
Update xatlas source files from github. Fixes a buffer overflow
-
The FitKDOP3 method now by-default adds a small thickening to its convex hulls, allowing it to create valid convex hulls for flat shapes. This thickening is exposed as a new parameter.
Geometry Script
New:
-
Added the option to set the material ID to use for hole fill triangles, for the plane cut and plane slice Geometry Script methods.
-
Made Geometry Script's Compact Material ID method optionally also remove duplicate materials
-
Moved Geometry Script out of 'Beta' status.
-
Added a new node to geometry scripting, "Prune Bone Weights", to prune a set of bones from all skin weights. This is useful when creating alternative skin weight profiles where specific bones need to be deactivated.
-
Added a new GenerateCollisionFromMesh method to Geometry Script, which fits simple collision primitives to an input dynamic mesh.
-
Added a new volume texture baking method to Geometry Script, which bakes a mesh SDF to a volume texture -- BakeSignedDistanceToVolumeTexture
-
The Geometry Script Add Primitive methods (Add Box, etc) now support requesting a material ID to be assigned to the appended mesh faces, via the FGeometryScriptPrimitiveOptions struct's Material ID member.
-
Geometry Script now has a global dynamic mesh pool, created on first access, to make it easier to use mesh pools in utility widgets.
-
Geometry Script's CopyMeshFromStaticMesh and CopyMeshToStaticMesh methods can now optionally use the 'asset' materials list rather than the 'per section' materials list, for cases where one would like the materials list not to vary per LOD and to match with the list the UI shows on the asset. Per section materials are still used by default. If you use the asset material list, be sure to specify this in both the 'copy from' and the 'copy to' calls.
-
Added a new node, "Copy Bones From Skeleton", to copy the reference skeleton of a skeleton asset to a dynamic mesh.
-
Added a new Geometry Script method to disconnect the mesh triangles along a selection of edges: ApplyMeshDisconnectFacesAlongEdges
-
Improved the capsule generator to support a cylinder-section subdivision parameter, and to make UVs consistent across different subdivision / hemisphere step amounts.
-
Geometry Script now has macros to automate the process of releasing meshes back to mesh pools after their use.
-
Geometry Script now has VectorTransformInPlace, VectorInverseTransformInPlace, and VectorPlaneProjectInPlace methods to efficient transform or project all the vectors in a FGeometryScriptVectorList. The transform methods can optionally transform the vectors as positions (i.e., applying the translation component of the transform).
-
Added new methods to manage simple collision shapes in geometry script -- CombineSimpleCollisionArray, to combine collision shapes from an array into a single FGeometryScriptSimpleCollision object, and ResetSimpleCollision to reset the shapes in a FGeometryScriptSimpleCollision object.
-
Added a new Geometry Script node to remap material IDs and construct a combined materials list, to help with workflows where you need multiple meshes to have consistent material IDs
-
The Geometry Script sweep functions now support "mitering" -- scaling the cross section at sharp turns to preserve apparent cross section width -- and have a Miter Limit parameter to control this scaling. (This is analogous to the stroke-miterlimit parameter in CSS.)
-
Added 'With Collision' variants of Geometry Script's Append Box, Sphere, and Capsule methods, which return a simple collision shape matching the appended primitive.
-
For meshes that are not the same, the IsSameMeshAs method now reports information about the difference it identified via a new FGeometryScriptMeshDifferenceInfo struct.
-
Dynamic Mesh Component's ConfigureMaterialSet method now by default will remove extra material slots on the component, so can be used to reduce the number of materials on the component. The previous behavior can be requested by passing false to bDeleteExtraSlots.
-
Added two new nodes, "Mesh Copy Bone Weights" and "Blend Bone Weights". The first one copies bone weights from one skin weight profile to another, which is useful when creating a new profile that is a simple modification to an existing profile. The second one allows blending two sets of bone weights into a single set, this is useful when implementing skin weight smoothing or proximity blending.
-
Geometry Script now has new 'With Materials' versions of the various 'Append Mesh' methods. These methods take the materials array of the target and append meshes as input, and returns a new combined materials array that the resulting mesh materials IDs reference.
-
Added bHaveValidUVs output param to GetAllUVSeamEdges.
-
Geometry Script has new methods to help specify Constrained Edges for the AppendDelaunayTriangulation2D node -- CreateConstrainedEdgesLoop and CreateConstrainedEdgesChain.
-
Added control over whether a Dynamic Mesh Component allows mesh element selection, which can be toggled via the SetAllowsGeometrySelection method. Generated Dynamic Mesh Components now default to disallowing this selection, since they will typically destroy manual selections and manual edits when they are re-generated.
-
Added a new SnapMeshOpenBoundaries method to Geometry Script, which attempts to match and snap together nearby mesh boundaries without adding or merging any vertices.
-
Dynamic Mesh Components now can optionally use the static render path, which can allow faster rendering (when mesh is not changing) and is necessary for Lumen support.
-
Added new methods to get static mesh and skeletal mesh asset materials with corresponding material slot names, and also added new methods to convert from this array-based format to the material map format used by the Create New Skeletal Mesh method.
-
Added a new geometry scripting node, "Copy Skin Weight Profile To Skeletal Mesh", that allows taking a skin weight profile from a dynamic mesh and applying it directly on a skeletal mesh asset, as long as the two mesh's topologies are identical.
-
Added a new UVShell bake type to the BakeTexture GeometryScript node.
-
There is a new Geometry Script method to set a custom complex collision mesh for a static mesh -- SetStaticMeshCustomComplexCollision
-
Added initial Lumen support for Dynamic Mesh Component
-
Added LineSetComponent as a blueprint spawnable component.
-
Added new methods to select mesh elements by material ID and by polygroup -- SelectMeshElementsByMaterialID and SelectMeshElementsByPolygroup.
-
Added more UV stats methods to Geometry Script: "Get Mesh UV Area" and "Get Num UV Islands"
-
Added a GetLODMaterialListFromSkeletalMesh method, to get the materials list used by a specific LOD of a skeletal mesh.
-
Added support for beveling meshes along a selection of edges in Geometry Script.
-
Added new Geometry Script methods to select mesh boundary edges, selection boundary edges, and 'sharp' edges (with large dihedral angles) -- SelectMeshBoundaryEdges, electSelectionBoundaryEdges and SelectMeshSharpEdges respectively.
-
Exposed GetAllUVSeamEdges and GetAllVertexPositionsAtEdges to MeshQueryFunctions.
-
Added a "navigable convex decomposition" method to geometry script collision functions
-
Geometry scripting nodes will now include the name of the calling Blueprint function when emitting warnings and errors. This makes it easier to track down the source of the message in large geometry graphs.
-
Added a new Geometry Script method to set or remove sharp normals on edge selections: SetSplitNormalsAlongSelectedEdges
-
Dynamic Mesh Component's physics mesh now supports querying UVs from hits, when the 'SupportUVFromHitResults' physics setting is enabled
-
Added edge selection support to Geometry Script.
-
Added a new Geometry Scirpt method to insert or remove UV seams along a selection of edges: SetUVSeamsAlongSelectedEdges
-
Added a new UV layout function which exposes functionality from the UV Editor Layout Tool, including multiple layout types and restrictions on scale and rotation, to geometry script.
-
Added new function to perform texel density UV scaling operations, allowing mesh UV islands to be scaled to match a consistent texel density over the whole mesh.
Bug Fix:
-
Fixed an issue where the Mesh to Collision fitting algorithm would fit an incorrectly-rotated oriented box in some cases.
-
Fixed an issue where CreateStaticMeshAsset would not set materials correctly when creating a static mesh with unnamed material slots.
-
Fixed an issue where some Geometry Script nodes required options struct pins to be connected.
-
Fixed an issue where bone data would be lost on dynamic meshes when they were serialized, causing some animation-related functionality to break in PIE or on load.
-
Fixed a crash in GetMaterialIDsOfTriangles if passed null triangle list, and changed the behavior when passed invalid triangle IDs to match that specified by the docstring comment -- a material ID of -1 is set for invalid triangles, while correct material IDs are still reported for valid triangles.
-
Added cvar geometry.DynamicMesh.MaxComplexCollisionTriCount to prevent Dynamic Mesh Components with many triangles from auto-generating complex collision, and fixed some issues with the collision preview rendering.
-
Fixed an issue where duplicate points could be added when using error-based sampling of splines with 'constant' control points.
-
Fixed issue where mesh surface point sampling would compute incorrect/inconsistent samplings for non-compact meshes
-
Fixed an issue when using "Copy Mesh To Skeletal Mesh" and the source dynamic mesh did not have the identical skeletal structure as the target skeletal mesh asset. Now the bone indices are properly remapped on the skin weights so that they match the target skeletal mesh.
-
Fixed an issue where 2D Voronoi diagrams would not be generated when the input points were collinear.
-
Added missing null checks for Geometry Script Scene Utility Functions on UDynamicMesh* inputs
-
Fixed issues in Geometry Script handling empty polygons and polygon lists -- AddPolygonVertex, AppendPolygonList not adding/appending, and AddPolygonToList crashing
-
Added a missing null check to the StaticMeshHasCustomizedCollision Geometry Script method
-
Mesh Transform methods now consistently transform normals and tangents.
-
Geometry Script options structs now more consistently expose members as editable, when they are blueprint read/writable, so that they can be edited via the properties panel when used as variables.
-
Fixed the AppendMesh nodes inconsistently handling transforms with negative scales.
-
Fixed the Geometry Script "Set Simple Collision on Static Mesh" function crashing when run with a null static mesh.
Modeling Tools
API Change:
- Previously BrushAdjusterInputBehavior was used to set a toggle that would be read during the On*Drag callbacks to differentiate between a "brush stroke" and a "brush adjustment". This was error prone for both new and old tools that derived off of BaseBrushTool as it broke or was easy to break assumptions made in the tool's drag callbacks. With this separation, OnBeginDrag/OnUpdateDrag/OnEndDrag will only be called for brush strokes as it was prior to the introduction of the BrushAdjusterInputBehavior.
New:
-
Added a 'cut outside' option to the PolyCut tool
-
The Weld Tool can now optionally split bowtie vertices, which enables it to successfully weld edges in more cases.
-
Modeling mode element selections now auto-convert selections when users change the active selection mode
-
The Edit Triangles tool can now collapse seam edges
-
There is a new option to toggle off the Cube Grid tool's grid plane visualization
-
The edit pivot tool now uses the mesh element selection (if available) as an initial pivot point.
-
New: Updated the default colors used in Mesh Element Selection. These colors can be customized in Edit >> Editor Preferences >> Plugins >> Modeling Mode >> Mesh Element Selection Mode
-
Added a configurable NormalSpace property to BentNormal bakes to support object space BentNormal bakes in the BakeTexture tool and GeometryScript node.
-
The draw polygon, draw polypath, and draw-and-revolve tools now initialize with a 'reasonable' drawing frame instead of starting at the origin. The frame is now center on the selection (if available) or the center of the view. If a mesh element is selected, the frame will also align to it.
-
The Mesh to Collision tool has improved handling of convex decomposition: - Convex decomposition is now a separate option from generating single convex hulls as a separate shape type (rather than hiding the feature under the 'max hulls' count) - There is a new pre-simplify option to make the decomposition compute faster for very large meshes - The tool is set to use better defaults for the navigable space protection algorithm - The tool does not default-enable the 'max count' collision shape option, as it can be confusing/frustrating to wait for a decomposition only to find it has random holes due to that option quietly throwing away shapes
-
The Transform tool now works on most component types, not just standard mesh types.
-
Enabled tablet support with pressure sensitivity for Modeling mode.
-
New: Added a 'Local Frame Mode' toggle in the Mesh Element Selection Toolbar Settings. Users can now use the gizmo to transform and edit a mesh based either on the selected geometry only or on the entire object.
-
Add an "Add Capsule" tool
-
Improved the "Split" tool to preview how it will split the mesh, and to give more options for splitting methods -- one can now split by mesh topology, vertex overlap (with a distance tolerance), material ID, or polygroup. Note if there is an active element selection, the tool will continue to split by the selection.
-
New: Added support for Mesh Element Selection in the Lattice Tool. By using Mesh Element Selection to select components of a mesh and entering the Lattice Tool, only the selected areas of the mesh will be affected.
-
New: Added support for Mesh Element Selection in the Split Tool. By using Mesh Element Selection to select components of a mesh and entering the Split Tool, only the selected areas of the mesh will be affected.
-
The Mesh Splines tool now has the same material and output type settings as the Revolve Spline tool.
-
Change some primitive creation tools to default to PerQuad, and make LatLong sphere PerFace not be the same as PerShape (and be same as PerQuad).
-
New: Added new settings to the UV Editor's 'Display' menu. These allow customization of the Boundary Line Thickness, Boundary Line Color, and Wireframe Thickness in the Unwrapped Viewport, along with the Selection Line Color, Line Thickness, and Point Size in the Live Preview Viewport.
-
Added a new UVShell bake type to the BakeTexture tool.
-
Added DoubleClickBehavior to the ScriptableModularBehaviorTool.
-
Add ability for CubeGrid to accept and start a new mesh without having to exit.
-
Display selection measurements in CubeGrid in the viewport.
-
Add tooltip for the status bar at the bottom of the edtior so it can be fully read.
-
Rename Absolute Grid Snapping option in the gizmo settings in modeling mode.
-
When the Cube Grid tool is started with an active Mesh Element Selection, the selection position is used as the origin of the grid.
-
In the Edit Pivot tool, the snap-dragging feature has a new option to snap just the orientation of the pivot.
-
The Vox Wrap tool now has an Apply Thicken Shells toggle and Thicken Shells slider, which can be used to capture open-boundary surfaces as shells of the specified thickness.
-
Make the Weld action in PolyEdit weld to center, and add a "Weld To" action for the previous welding behavior.
-
Added SkeletalMesh support for the Inspect tool.
-
New: Added support for converting a selection when changing between mesh element and/or topology types in Mesh Element Selection
-
New: Added a 'Snapshot' Tool in the UV Editor. This allows users to easily export a texture asset of a UV Layout, and to customize the look and resolution of the image to be exported.
-
New: Added support for Mesh Element Selection in the Smooth Tool. By using Mesh Element Selection to select components of a mesh and entering the Smooth Tool, only the selected areas of the mesh will be affected.
-
New: Added support for Mesh Element Selection in the Weld Tool. By using Mesh Element Selection to select components of a mesh and entering the Weld Tool, only the selected areas of the mesh will be affected.
-
New: Added support for Mesh Element Selection in the Displace Tool when using the 'Flat' subdivision type. By using Mesh Element Selection to select components of a mesh, entering the Split Tool, and ensuring the subdivision type is set to 'Flat', only the selected areas of the mesh will be affected.
-
Moved SDraggableBox slate widget into a new ModelingUI module, allowing it's usage in non-Editor Only contexts.
Bug Fix:
-
Bug Fix: Updated the behavior when deleting PolyGroup Edges in Mesh Element Selection. Now, upon PolyEdge deletion, the edge's adjoining groups are merged. This behavior now matches the PolyEdge deletion functionality found in the PolyGroup Edit Tool.
-
Fixed an issue where edge selections could be lost on tool accept after using the polygroup edit or triangle edit tools.
-
Bug Fix: Addressed a bug where the Level Editor scale snapping affected the UV Editor scale snapping
-
MeshModelingToolset: Update preview when toggling Shells to Solids in PolyEdit extrude activity.
-
Bug Fix: Fixed a bug in in the LOD Manager Tool when using the 'Clean Materials' feature. Previously on input meshes with multiple materials, 'Clean Materials' would remove the incorrect material.
-
Fixed the Select.InsertEdgeLoops tool initializing to the incorrect topology type. Prevent InsertEdgeLoops, InsertEdges and SimplifyByGroups tools from initializing in Triangle selection mode.
-
Fixed an issue where some primitives could be generated off-center when created with very low polygon counts.
-
Modeling tools now limit the number of background tasks that they will run simultaneously when generating preview results, especially for larger input meshes.
-
MeshModelingToolset: Add Bridge action to TriEdit
-
Bug Fix: Fixed a bug which did not allow for snapping when scaling a mesh in the XForm->Transform Tool
-
Fixed an issue where group colors were not rendering correctly in Simplify and Remesh tools.
-
MeshModelingToolset: Allow snapping to objects in scene when using DrawPolygonTool even when the camera is positioned such that the raycast does not hit the tool plane.
-
Fixed an issue with brush resizing sensitivity in the InteractiveToolsFramework BaseBrushTool when bSpecifyRadius is false.
-
Fixed an issue where some modeling mode selection operations would not work correctly for triangle edge selections.
-
Bug Fix: Improved the 'Brush Size' setting in the Group Paint Tool so that when manually adjusting the value, the new size is now reflected in viewport immediately, without having to first click in viewport to see the update.
-
Fixed material assignments being changed by the modeling tools for some assets.
-
Fixed redundant UV mesh spatial computation in modeling mode bake tools.
-
The Simplify tool's will now respect the prevent normal flips flag, and not prevent normal flips when that flag is disabled.
-
Fixed a crash that could occur in the Draw Spline tool when using a blueprint that deletes itself.
-
Fixed an issue where focus in some modeling tools did not work when there was no editor-level selection.
-
Fixed crash by preventing use of the Convert tool on cooked-for-editor geometry collections
-
The Polygroup Edit and Triangle Edit tools now auto-convert mode-level mesh element selections of mismatched topology type, rather than discarding them. Polygroup edge selections are now also properly converted, including in the case where the tool has enabled extra corner support.
-
Bug Fix: Fixed a bug in the UV Editor's Seam Tool which displayed incorrect seam placement in some cases involving multiple selected meshes or rotation.
-
Fixed an issue where box and cylinder UV projections could introduce new bowties in the UV mapping.
-
Fixed polygroup colors not rendering in the subdivide, tri select, and materials tools
-
Bug Fix: Fixed a bug that ignored scale transforms when creating new objects using mirroring.
-
MeshModelingToolset: Fix crash when hiding actors deleted by tools with Delete Inputs option.
-
Fixed Tri Select tool being called Triangle Edit in the Select tool group, so it has a consistent name and is not confused for the Triangle Edit tool in the Mesh tool group
-
Bug Fix: Addressed a bug which caused undo and redo to not behave as expected or crash when deselecting edges in Mesh Element Selection
-
Bug Fix: Disallowed Ctrl+Alt+Drag select when a tool is active which caused conflicting visuals relating to the active selection
-
Fixed a crash when using the brush resizing hotkey (b) in Modeling mode sculpt and paint tools.
-
Fixed a crash in the modeling mode's mesh element selection system that could occur when a mesh with an active element selection was deleted.
-
MeshModelingToolsetExp: Replace various usages of Tan(0.5 * FOV) with new material function MF_OthoWidth
-
We now prevent modeling tools from enabling element selection on non-editable dynamic meshes.
-
Fixed a crash in MeshMapBaker.ComputeUVCharts when operating on non-compact DynamicMesh inputs.
-
Fixed an issue where the Edit Normals tool could fail to correspondingly update tangents as needed in some cases.
-
Modeling mode now warns users when selection includes engine assets, which cannot be modified
-
Fixed an issue with modeling mode's mesh element selection where the gizmo could disappear after selection type changes.
-
Raised the default limit at which we use a faster-but-less-reliable copy-paste method for dynamic meshes from 1000 triangles to 200,000 triangles, and added an editor toast to surface when the less-reliable method fails (and what can be done about it).
-
PolyEdit's Bevel tool now refuses to start when there are no bevel-able edges in the current selection, and better handles selections with some boundary edges.
-
Bug Fix: Fixed a crash that occurred when exiting the editor while Mesh Element Selection was active
-
Fixed an issue where brush resizing using the hotkey (b) would not work when bSpecifyRadius was false.
-
The Mesh to Collision tool now supports referencing custom PolyGroup layers when multiple inputs are selected.
-
The Rotation setting in various Add Primitive (Add Box, etc) tools is now named Initial Rotation and is disabled when it is not applicable.
-
Changed flyout dialog in the New Preset window to use a list presentation instead of a tile presentation, allowing for more clarity in reading names on long preset collection labels.
Deprecated:
- Changed the default target requirements for most modeling tools and tool builders to use UDynamicMeshProvider/Committer. Only specific tools that directly get the MeshDescription in non-optional ways kept the UMeshDescriptionProvider/Committer.
Procedural
New:
-
Added a new Filter Elements by Index node that extracts the corresponding element(s), either point(s) or attribute value(s), from an index provided by an attribute on point or attribute set data.
-
Add parse string node: Allow to convert any string into a predefined type.
-
Added new Blueprint related event handlers for common PCG events.
-
OnPCGGraphStartGenerating
-
OnPCGGraphCancelled
-
OnPCGGraphGenerated
-
OnPCGGraphCleaned
-
-
Added the collapse node that does decimation and averaging.
-
Added 'In Graph Folder' and 'In Generated Folder' modes to the Create Target Actor and Spawn Actor nodes.
-
Added a new Pathfinding node that will find one or more optimal path through a cloud of points when provided with a starting and goal point/location. It will also find the shortest path to any goal, if multiple goals are provided.
-
Added the sort by tag value node which allows to sort data at the data level (useful to order data by priority, etc. in a very efficient manner).
-
Added option to quiet attribute filter on data that's missing an attribute
-
Added a "From Input" mode in the Get Actor Data nodes to allow for parsing of actors without doing a query.
-
Added some overrides in the Get Actor Data nodes.
-
Added the Attract node that allows to pair up source points with target points based on some criteria and a maximum search distance. This mapping (which can also be provided from an attribute) can then be used to do interpolation between source and target.
-
Added a new Subdivide Spline node that will place grammar modules along a full spline path.
-
Added a retrieval mode in the Get Parameter node (by name) to allow getting graph parameters from upstream or from the root without requiring to pass them down.
-
[PCG] Refactor Copy Attributes Match Copy Points API Sunset Transfer Attributes, which will be replaced by Copy Attributes
-
Added tags to the mesh descriptors used in the Static Mesh Spawner.
-
Added a mode to retrieve actor references only in the Get Actor Data node (useful to delay actor parsing or early filtering).
-
Added option in the Static Mesh Spawner to force the component choice to the user provided value.
-
Added a new Visualize Attribute node, which can be used to display attribute information in world space.
-
Add material extraction to the mesh sampler
-
Allowed more overrides on Get Actor Property and Get Property From Object path nodes.
-
Get Actor Property node now queries actor tags as well.
-
Added some flexibility to allow retrieval of multiple properties assuming the same cardinality.
-
Add a Spawn Spline Component node
-
Added an 'unordered' option in the cull points from bounds node, which is going to be more efficient when there is a significant size difference between in/out bounds.
-
Extended the C++ API to support partitioning on multiple attributes in PCGMetadataPartitionCommon.h.
-
Added a new Select Grammar node that will select a grammar module for a given key based on a selectable criteria.
-
Renamed the Apply On Actor node to Apply On Object and generalized its use to any object.
-
Geometry Script interop plugin has a new example map for V1 of Geometry Script nodes.
-
Add support for TSet extraction and in graph parameters
-
Added the Wait For Landscape Changes node, which can be used in conjunction with an option on the graph to ignore landscape changes for graphs that interact with the landscape.
-
Added the Save Data Asset node to export any input data. Added UI element to save collection/specific data being inspected to an asset.
-
Added the Add Component node that can add components to specified actor(s).
-
Changed the default spawn option in the Spawn Actor node to 'No merging'.
-
Added the option to retrieve the reflection direction in the world ray hit nodes.
-
Added component selection and filtering in the Get Data nodes.
-
Allowed include/exclude of landscape hits on the world queries
-
[PCG] V1 for Grammar support in PCG, with Shape Grammar (with Slicers) Add a Spline to Segment to convert a linear spline into points, representing the segment Add a Duplicate Cross Sections to duplicate a spline along an axis, following a grammar * Add a Subdivide Segment to slice a point into multiple points, following a grammar
-
Added the Collision Wrapper node that interprets a point data as-if it were collision. This can be used as a volume or in the 'difference' part of the Difference node, but it will not work as the source.
-
Added option to zoom on the data selected in the Attribute List View, and also added a contextual menu to zoom on selected rows (similar to the double-click).
-
Add Remove Duplicates node, that will keep only unique values for a given attribute.
-
Added a new Clustering node that will assign "clustering labels" to points based on a locational similarity, using one of the following traditional ML clustering algorithms:
-
K-Means
-
Expectation-Maximization
-
-
Added a new Clean Spline node that can remove extraneous control points from splines:
-
Fuses co-located control points.
-
Removes collinear control points.
-
-
Added steepness control on create points grid.
-
Added exponential on grid size that shifts to the next (& more) cell sizes. For example, a cell size of 400 with an exponential of 2 will make it work as-if it were a 1600 grid (400 * 2^2). This can be useful for very large distances - allows grid sizes up to ~2000km.
-
Added a collision-aware mode in the Self-Pruning node. Note that it is very expensive, and relies on good bounds. Added the Set Bounds From Mesh node to act as a preamble to the self-pruning.
-
[PCG] Replace Density Remap by Attribute Remap Node is using Metadata Operation base Deprecate old Density Remap Add preconfigured info for Density Remap, using Attribute Remap Change the Unit Test to use Attribute Remap now
-
Added replace string operation in the String operation node.
-
Normalized attribute filtering parameters in the filtering/delete attributes nodes so they are a bit more flexible (e.g. substring match, etc.)
-
Added support to the Static Mesh Spawner for "Property Overrides", which will automatically partition ISMs accordingly.
-
Grammar feature has a new example map for V1
-
Enabled the extraction of metadata from Ray Hits including:
-
Impact (T/F)
-
Impact Point
-
Impact Normal
-
Impact Distance
-
Local Impact Point
-
Physical Material
-
Render Material
-
Static Mesh
-
UV Coords
-
Element Index
-
Face Index
-
-
Added a pause button & cancel mechanism to the toolbar, which can be controlled in the project settings.
-
Added a new Create Points Sphere node with the following generation modes:
-
Geodesic
-
Angle
-
Segments
-
Random
-
Poisson
-
-
Added multiple nodes to do tag to attribute processing and improved management of Tag:Value tags.
-
[PCG] Add Elevation Isolines node * Use the Marching Squares algorithm, factorized in its own helper.
-
Added option to get components reference in the Get Actor Data nodes.
-
Added quality of life methods to simplify managed resource creation from blueprint (Add Component To Managed Resources, Add Actors To Managed Resources).
-
Added support to load multiple assets in the Load PCG Data asset node. Fixed graph compilation/culling issue when switching from/to FromInput in the get actor prop/get actor data nodes.
-
Added a new Primitive Cross-Section node that will automatically detect and output spline cross-sections from the combination one or more scene primitives.
-
Added approximate data size in megabytes in the profiling window. Note that this is an approximation and in practice there are cases where we will reuse data in more efficient ways and so on.
-
Added right-click -> copy column name in the attribute list view.
-
Added a new World Raycast node that will return the point of impact for one or more customizable line traces with the option to extract information about the hit and the target.
-
Made the texture sampler clearer with respect in how density is computed and added more options.
-
Added per-data caching in elements that loop over their required pins. Requires opt-in per element, which is done in a separate CL.
-
Added a new Print String node, which emits a log/warning/error to the log an optionally to the graph.
Bug Fix:
-
Added extra security, controlled by CVars, to alleviate out of memory asserts in Surface and Volume Samplers, often from unbounded or extreme sampling.
-
Fixed a bug causing the Volume Sampler to improperly sample the final row of X, Y, Z in certain situations.
-
Added robustness to out of memory security measures in PCG Samplers to help mitigate continued crashes
-
Fixed and issue with caching of the volume sampler results, which could be a problem in partitioned graphs.
-
Fixed a bug with ISM Body Instance Customization not displaying the correct channels when viewed in PCG nodes, such as the Static Mesh Spawner.
-
Removed unneeded data duplication in Get Actor Data.
-
Fixed times in the profiling window for tasks that went to sleep or that were executed in parallel.
-
Fixed bug where pasting an editor graph node that fails to import object properties will break the parser and crash the editor.
-
Fixed a bug preventing attributes with spaces to be filtered by the Filter Attribute node.
Texturing Tools
New:
- Texture Graph Editor: The node preview is now using the new SImageViewport widget
UV Editor
New:
-
Make the UV editor seam tool (and the modeling tools seam tool) follow paths better in certain "against the grain" situations.
-
Added functionality to the UV Layout tool to allow for preserving existing UV island's scale and orientation during layout operations.
Bug Fix:
-
Fixed issue where unwrap material was set with a depth offset multiplier that rendered mesh lines difficult to see in the unwrap view of the editor.
-
Added localization text for missing transform tool categories defined by the detail's customization for the tool.
World Building
New:
-
Add start/end/random offset to the PCG Spline Sampler
-
Added Seeding Modes to the PCG Spline Sampler, and a new mode 'Seed From Index' to get stable seeds when points change position.
-
Changed Pin/Unpin (user facing) to ForceLoad/ReleaseForceLoad in SceneOutliner
-
Add PCGDataVisualization interface and PCGDataVisualizationFactory factory to implement custom debug/visualization behavior for PCG data types.
-
[World Partition] Implemented asynchronous update streaming state. Can be turned on using wp.Runtime.UpdateStreaming.EnableAsyncUpdate true (disabled by default). This allows to run the computation of the world partition streaming cells to load/activate/unload outside of the game thread / critical path. Update of the cells underlying level streaming state and priority is still done in game thread.
-
External Data Layer V1 - Allows for plugins to inject/remove content (actors) in a partitioned world - Serves as a replacement for the experimental 'Content Bundle' feature - Added new External Data Layer (EDL) Asset - Added new Game Feature Action 'AddWorldPartitionContent' to control activation of an EDL asset - Supports Data Layers inside a plugin (child of an EDL) - Added builder to convert content bundles to EDL (UGameFeatureActionConvertContentBundleWorldPartitionBuilder) - Feature is temporarily disabled by default and can be turned on using Editor Experimental Settings 'Enable World Partition External Data Layers' flag
-
PCG Runtime Quality Branch/Select nodes. Added 'pcg.Quality' cvar ranging from 0 to 4 (Low, Medium, High, Epic, Cinematic).
-
Support for cooking PCG graphs with GPU enabled nodes.
-
Add option to compute alpha and distance along curve as attributes in PCG Spline Sampler node. Alpha is a value in [0,1] along the curve where each segment of the curve represents the same interval. For example, if the curve has three segments, points on those segments would lie in [0,0.333], [0.333, 0.666], [0.666, 1] respectively, and interpolate across those intervals using the spline's interpolation. Distance is the total cumulative distance along the spline to reach a given sample point.
-
Provide a native GPU implementation of the PCG Copy Points node, enabled by setting bExecuteOnGPU flag to true in the Copy Points node settings
-
Add command to refresh all PCG runtime gen components - 'pcg.RuntimeGeneration.Refresh'
-
Add EPCGTextureFilter for Point and Bilinear filtering on PCGTextureData
-
Add support to PCGDataVisualization interface for populating the Attribute List View window.
-
Add 'Spawn Spline Mesh' node which spawns takes a Spline Data and spawns Spline Mesh Components in the world.
-
Support attribute set data type in PCG GPU graphs
-
Update PCG Instance Data Packers to use attribute accessors
-
Add 'Create Surface From Spline' node for creating an implicit surface from a closed spline.
-
Fixed spline interior sampling not respecting the Bounding Shape input correctly
-
Allow PCG data visualizations to override double-click behavior in the Attribute List View window. Additionally, double-click on Spline Data entries focuses the relevant spline control point in viewport.
-
Add PCGWaterInterop plugin, with 'Get Water Spline Data' node.
Bug Fix:
-
[PCG] Bug Fix: Sanitize attribute names when creating from Tags to prevent spurious error messages thrown when Tags have characters not supported in PCG attribute names.
-
World Partition Editor Add ShowMouseCoordinates (World Position) in Show Menu. Used the default GrabHandClosed cursor when panning.
-
Add the ability to ignore the dirty flag when querying for external objects to save
-
[PCG] Bug Fix: Eliminated frequent blocking texture loads in editor when using the Get Texture Data node.
-
ForEachStreamingRelevantComponent now takes into account all UActorComponent when being invoked for editor.
-
Source Control Changelist View * Fix initial refresh UI not being call for all changelist type (esp. the Uncontrolled Cl) #p4v-cherrypick 33578294
-
Added redirector support to FExternalPackageHelper::LoadObjectsFromExternalPackages
-
[PCG] Bug Fix: Fixed large freezes when using runtime generation in editor when many actors are present in level.
-
Fix assertion when trying to break LevelInstanceActor when its level isn't current
-
[PCG] Bug Fix: Addressed broken actor bounds when getting a point from an actor when the actor transform has negative scales.
-
Fix Deleting Assets progress bar exceeding 100%
-
Fix "Update Redirector References" process unable to fix up redirectors of assets used in level instances
-
Add checks to make sure RepresentingWorld is valid before it's accessed.
-
Fix warnings appearing after creating a new Empty Open World Level
Localization
API Change:
- The CookedLocalizationPaths setting is now deprecated because it serves no purpose anymore.
New:
-
Centralized the logic for forcing game localization data to load in an editor
- This is now controlled by FTextLocalizationManager::ShouldForceLoadGameLocalization, which will return true for: a cooked editor, or an uncooked editor with the game localization preview enabled, or with the CVar Localization.ForceLoadGameLocalizationInEditor set to true.
-
Exposed EDateTimeStyle to Blueprint Date/Time Text functions
-
Added "Localization.AlwaysLoadNativeLocalizationDataDuringInitialization" (default: false)
- This allows games to opt-in to loading the native localization data during initialization, even if the game isn't starting in the native language. This ensures that all gathered text will load some localization data, even if not fully translated.
-
Game localization data is now always loaded in cooked editors.
-
Exposed FText::AsMemory to Blueprints
-
Ref-count the mounting of localization data for explicitly mounted plugins
- This allows different systems that need plugin localization to call MountExplicitlyLoadedPluginLocalizationData and UnmountExplicitlyLoadedPluginLocalizationData (in pairs), without needing to understand any other system that may have mounted localization for that plugin, and avoids the unmount calls from different systems fighting with each other.
Bug Fix:
-
Remove restriction that the package localization cache can only be updated on the game thread
- This restriction was added before the asset registry itself was made thread-safe, and is no longer needed
-
Disable localization chunking when cooking DLC
-
Running this code as-is causes a name conflict in the DLC output that can override the base localization data when the DLC is mounted. This can result in most of the base localization data appearing to be missing, as the DLC may have been cooked against a much smaller set of packages in each chunk.
-
While this could be supported by adding a suffix to the chunked data within the DLC, plugin localization is a better way to achieve this, and so localization chunking is now disabled when cooking a DLC plugin.
-
-
Add a Clang compiled ICU static lib for x64 to fix memory corruption issues at runtime when linking with Link-LLD.
-
Fixed issue where NativeCultureIndex wouldn't be updated when deleting a culture, causing the native culture to be modified incorrectly.
-
Validate that the requested OS locale is supported by ICU, and if not, use the requested language instead
- We have some platforms that are returning unsupported locales (eg, a locale of en-IT, with a language of it-IT), so this change hardens the default locale set-up to validate that ICU has resource data for the requested locale, and if not, we use the requested language as the locale instead.
MetaHuman
New:
-
MetaHuman component for UE improvements - Instance PP AnimBP will only be played in case the physics asset or the control rig actually differs the one set in the AnimBP of the skeletal mesh asset. This way we avoid any overhead work at instantiation time. * In case the control rig and physics asset set on the MH component match the ones set in the skel mesh assets, we still want to hook into the performance control, fixed now.
-
Added MetaData map to DNA User Asset to store MetaHuman relevant data like body type.
-
New: Added import path configuration to the project settings of the MetaHumanSDK plugin. This controls where imported MetaHumans will be added to the project.
-
Move MetaHumanRuntime plugin to MetaHumanSDK plugin and rename it to MetaHumanSDKRuntime #changelist validated
-
New: Added the experimental MetaHumanSDK plugin containing editor and runtime components supporting the use of MetaHumans in projects.
-
Moving DNAIndexMapping and SharedRigRuntimeContext to public folder
Mobile Rendering
New:
-
Add ReplaceTonemapper BlendLocation to the Mobile PostProcess
-
Support Vulkan pre-rotation on mobile. - Create an intermediate image as the BackBuffer and render normally, then copy the image to the actual BackBuffer in the low level. - Remove the QCom pre-rotation implementation.
-
Clamp number of active scene captures for mobile Deprecate calling GMaxNumReflectionCaptures and GMobileMaxNumReflectionCaptures directly to avoid errors in the future
-
Allow Debug View shaders on ES3_1 preview platforms
-
Removed SkyLight specific shader permutations. This halves total number of shader permutations in a projects with a stationary or movable SkyLights at a minor GPU cost.
-
Merged Linear64 and Gamma32 shader variants as we do not support both permutations at the same time
-
Added support for rendering debug primitives on mobile as part of the base pass when MobileHDR is disabled, as they would normally be rendered during post processing
-
PSO pre-caching is now enabled by default for iOS Metal, Android Vulkan and Android OpenGL ES
-
Added an option to not use "Pixel Local Storage" and "FrameBuffer Fetch" extensions on Android OpenGL. And instead rely on a regular texture sampling similar to immediate mode GPUs. Set r.Mobile.AllowFramebufferFetchOpenGL=0 to disable support for these extensions.
-
Removed some of the complexity in static lighting shader permutation settings r.Mobile.AllowMovableDirectionalLights option was removed. Movable lights are always allowed. CSM from movable lights will only work in a non pre-computed lighting environment or when "Combined Static and CSM" option is enabled. Removed r.Mobile.EnableNoPrecomputedLightingCSMShader. CSM shaders will be generated only when project has "Combined Static and CSM" option enabled.
-
"GPU Scene" is now enabled by default on all mobile platforms
-
Added support for SSAO in a mobile deferred shading
Bug Fix:
-
Allow modulate blend mode materials to be renderred in translucent after DOF pass on mobile.
-
Apply sky lighting with ambient occlusion on mobile deferred.
-
FSceneCapturePS has highp floats forced now to fix a driver bug FullPrecisionInPS can now be enabled on a per global shader basis and not just globally controlled by r.Mobile.FloatPrecisionMode
-
Correctly change between Mobile Forward and Mobile Deferred, taking into account r.Mobile.AllowDeferredShadingOpenGL cvar
-
Fix some issues related with CSM caching. 1. Fix an issue that the LastFrameExtraStaticShadowSubjects could be overridden when there are multiple Packets in FGatherShadowPrimitivesPacket. 2. Uses atomic add to count LastFrameExtraStaticShadowSubjects for multi-thread rendering. 3. Invalid the cached shadow map if the LastFrameExtraStaticShadowSubjects is greater than a throttle for both SDCM_MovablePrimitivesOnly and SDCM_CSMScrolling
-
Fixed crash when Building Virtual Textures with the separate mobile SVT enabled
-
Remove the DXT format support for Android OpenGL since the compressed RVT could be created with the DXT format but the compression method is ETC. ETC is aways supported on GLES 3.1.
-
Fix a crash if there are more than 8 lights cast shadow on mobile GL platform. UniformBuffer can't be created on worker thread on GL.
-
PR #9733: Fix up type of "OutColor" from "HALF4_TYPE" to "HALF_TYPE" in SunBlurPS_Mobile function ( PostProcessMobile.usf )
-
Fix a bug that the scene is much brighter with reflection capture on mobile.
-
Prevent mobile-specific SVT textures to be displayed if Virtual Textures on mobile is disabled in the project settings. If mobile support for virtual textures is to be used on certain mobile platforms only, the project settings should still be enabled (so that the editor can know that at least one mobile platform supports it) and those platforms should have r.Mobile.VirtualTextures set to 0 in the .ini files.
-
Fixed and optimized PSO pre-caching for all mobile project configurations, like projects with pre-computed lighting, dynamic lighting and/or VR projects.
-
Fixed precision issues with bloom on Android devices running OpenGL ES
-
Fixed flicker when rendering primitives with refractive materials in a mobile deferred shading mode
-
Fixed case where static actors were not rendered into a Stationary light Cascaded ShadowMaps in a project with a pre-computed lighting enabled.
Deprecated:
- Leave only immutable texture path for GL(only use glTexStorage2D), don't set GL_TEXTURE_MAX_LEVEL as it isn't needed anymore
Mobile Deferred
Bug Fix:
- Fix the GBufferA format for the mobile deferred with pixel local storage .
Mobile Forward
New:
-
Added IES Textures in Mobile Forward Renderer
-
Added movable point lights dynamic shadows in mobile forward renderer. Requires r.Mobile.EnableMovablePointLightsShadows=1 and r.Mobile.SupportGPUScene=True.
-
Added rect light support to mobile forward renderer. Requires r.Mobile.Forward.RenderRectLightsAsSpotLights=0.
-
Added capsule direct shadows to mobile forward renderer. Requires r.Mobile.EnableCapsuleShadows=1 and r.Mobile.EnableCapsuleDirectShadows=1.
Bug Fix:
- Fix depth prepass disabling MSAA.
Mobile Lighting
New:
- Force Lowerst Lod for Sky Capture on Android
Bug Fix:
- Don't do LightPrimitiveInteractions for local lights on mobile when r.Mobile.Forward.LocalLightsSinglePermutation is enabled and you don't have local light dynamic shadows enabled
Motion Design
New:
-
Added option to hide actors while waiting for the Delay Task to complete.
-
Renamed Mask Modifier Apply/set to Target/Source
-
Motion Design Outliner displays Levels as top level items
-
Added Default Transition Tree Template settings to build on new levels
Online
New:
- Change SocialChatManager in SocialToolkit to be protected instead of private
Bug Fix:
-
A constant DedicatedServerId is now used by OnlineSubsystemEOS when the game is ran as server. This fixes a bug with session search where IsValid() was returning false on sessions created by a server. There are several other minor fixes and improvements to session and lobby search in this change.
-
Added a IsValid() check on CurrentSessionSearch in StartLobbySearch to avoid potential crash
-
Fix for EOS SDK cache directory to account for system account file path. Added some checks to set cache directory to nullptr in EOS SDK platform create and empty string in config
-
Fix in RefreshConnectLogin to check Epic Games account only if EAS is used.
-
Modified FOnlineSessionEOS::FindFriendSession to call the correct completion delegate.
Crash Reporter
Bug Fix:
- Fixed an issue where the Language Code Identifier was always 0 in crash reports.
Hotfix System
New:
- Added UCurveTable modification callback deferral in OnlineHotfixManager similar to what is done for UDataTable to save performance.
HTTP
New:
- Added support to IHttpRequest to specify a Unix Socket to send the request to, supported on Windows and Linux
Bug Fix:
-
Fix a crash in the Curl HTTP implementation due to some curl state being manipulated on multiple threads under some circumstances
-
Added configurable choice of Packet Reliability Type in EOS Sockets
-
Update UAT to have the same default value for n.VerifyPeer as Unreal Engine. Fixes cacert.pem not being staged when n.VerifyPeer is not explicitly set to true in Engine.ini
Online Subsystem
New:
-
Updated OnlineSubsystemGoogle's Google SignIn implementation. Added support for silent sign in and retrieving server auth code
-
Added support to specify the type of auth in EOS external mapping queries
-
Updated EOSSDK version to EOS-SDK-35276460-v1.16.3
-
Refactor of PersistentAuth/AccountPortal login flow in UserManagerEOS. Addition of missing logic for proper EOS login flow on Switch when using NPLN.
-
Added support for EOSSDK Native Platform Integration in Xbox platforms
-
Addition of support for -epicdeploymentid and -deploymentid parameters to define EOS platform creation
-
Removed -EpicPortal parameter requirement to initialize Ecom interface in OnlineSubsystemEOS.
-
Added logic to Lyra to enable basic EOS beacon communication as part of the session creation and join flow.
-
Update OnlineSubsystemGoogle implementation for iOS to include privacy manifests (Using Google Sign In SDK 7.1.0)
-
Added implementation using CredentialManager and set it as default in OnlineSubsystemGoogle
-
Added support for EOS_Connect_AddNotifyAuthExpiration.
-
Update OnlineSubsystemFacebook on Android (updated to use Facebook SDK v17.0.0)
-
Addition of support for new result of EOS_Ecom_Checkout: EOS_Ecom_PurchaseProcessing in OSS.
-
EOSSDK binary update to version 1.16.4-36651368
-
Added new test command line option GETFRIENDDISPLAYNAME to FOnlineSubsystemImpl::HandleFriendExecCommands
-
Added support for EOS_Lobby_AddNotifyLeaveLobbyRequested, along with a new Sessions interface event and corresponding logic in CommonSessionSubsystem and CommonGameInstance reacting to it
-
Update OnlineSubsystemFacebook to include privacy manifest on iOS (updated to use Facebook SDK v17.0.3)
-
Addition of support for -NoEOS commandline parameter to stop EOS modules from loading.
-
Add entitlements and microtransaction implementation support for Steam. The important addition for Steam is entitlements, Steam apps that can purchase another Steam app through the Steam store (commonly used for expansion packs or other types of DLC) will now have an entry when calling the purchase interface's QueryReceipts functionality. There is additional support added for Steam's microtransaction API as well. There is little we can actually do in the engine, because all of the API requires calls to and from a trusted backend server. For this reason, the Steam purchasing link was added. It is simply an ease-of-use feature for coders who implement all of their purchasing support via the Online Subsystems. Simply define a server link with calls for initiate transaction and offer querying and all of your existing purchasing code will work just as it does on the other platforms.
-
Add EOS Integrated Platform support for Steam using the -CustomConfig=EOS command line option. This also includes the SteamEOS option to enable this in Lyra, but full Steam integrated platform support in Lyra is still a WIP
-
Update the CreateSession BP node to include a "Use Lobbies If Available" boolean.
-
Add sessions-based presence plugin for Lyra to enable some very simple functional testing of presence functionality in Lyra
-
[Online Services] Implement OnSessionCreated and OnSessionJoined in the SessionsOSSAdapter so that an event is fired when a session is created and joined.
Bug Fix:
-
Changed how OSS EOS Sessions responds to a EOS_ELobbyMemberStatus::EOS_LMS_CLOSED notification, destroying the related lobby instead of just removing the lobby member.
-
Disable FOnlineError from being constructable from a bool Unbind FOnlineEventDelegateHandle on move assignment
-
Fixed a bug where input did not respond while an EOS Overlay popup notification was showing.
-
Fix wrong check on GooglePlay's achievements that succeeded
-
Fix for override of the value the bUsesPresence in OSS EOS Lobbies
-
Refactored NetDriverDefinition across all platforms. Removed GameEngine re-definitions in Platform config. Moved Platform config from Engine to BaseEngine.
-
[OnlineSubsystem EOS] Fixed a crash in OnlineSubsystemEOS when accepting a friend request but the friend's list has not been populated yet.
-
Fix Steam OSSAdapter for EOS ExternalAuth
-
SteamSockets fixes SteamSocketsNetConnection has a custom handshake flow where it performs the handshake using the handler of the net driver, but this was causing problems after it was complete because the handler of the net connection did not have the data of the handshake (namely, the session and client IDs). This change synchronizes the two after the handshake is complete There were also some non-unity issues in the Steam sockets files that have been addressed.
-
Github pull- GetPlayerNickname() Steam fix - use GetFriendPersonaName with 64-bit ID Developer note: Code has been reworked, but the target issue is the same
Deprecated:
-
Deprecation of Stat/Leaderboard Interface variables and methods using FName, with new FString variants.
-
Deprecated usage of SEARCH_PRESENCE in OSS Sessions
-
Removed Online logic marked for deprecation in 5.3
-
OSS EOS Login Refactor: - Added new login methods that act in a more deterministic way. Added config variable to use new logic. - Kept old methods renamed as Legacy. They are used by default. - Changed Lyra config to stop using EOSPlus and use new login flow.
-
Deprecate IOnlinePartySystem::RejoinParty. This feature must be implemented as JoinParty.
Pixel Streaming
New:
-
Added support to the Pixel Streaming blueprint component to use the -PixelStreamingURL command line value instead of whatever is set on the component property.
-
[WebRTC] Fix: Rebuilt WebRTC with correct references to LibVpx.
-
[AVCodecs] Add: LibVpx (software VP8 and VP9) support to AVCodecs
-
[PS1] Add: FlexFec support to PixelStreaming
-
[AVCodecs] Add: VP9 profile enum
-
[PixelCapture] QOL: Update number of maximum capturers to support a larger number of concurrent streams
-
[PixelCapture] Add: New MediaIO based PixelCapturer that handles RHI -> RHI and RHI -> I420 CPU conversion
Bug Fix:
-
Fix: Pixel Streaming VR stereo images would not converge on Meta Quest 3 and Apple Vision Pro headsets. Additionally, reworked handling of XR axes, touches, and button presses in Pixel Streaming VR as they would sometimes result in no input or stuck input.
-
Fix: In Pixel Streaming VR off-center eye offsets were applied incorrectly and this caused distorted stereo rendering in Meta Quest 3 and Apple Vision Pro headsets.
-
Fix: Pixel Streaming VR controller Y-axis was inverted.
-
Fix: The number of connections returned by embedded C++ signalling server (used by editor streaming and VCam) was inaccurate if multiple streamers were started and you queried before they had finished identifying themselves.
-
[PixelCapture] Add: I010 pixel format support. NOTE: No capture pipeline exists for I010 data. This buffer exists purely to copy converted I4xx data in to.
-
[PS1] Fix: StreamerComponent not working with internal signalling server.
-
[AVCodecs] Fix: Re-add external semaphore deletion as it was accidentally removed in CL29731260
-
[AVCodecs] Fix AVCodecs NVDEC crash when video resizes larger than original size.
-
[PS1] Fix: PIE viewport streaming when there are other non-PIE game instances running (ex: Motion Design rundown)
-
[AVCodecs] Fix NVENC AVCodecs crash when video resize larger than max device resolution.
-
[AVCodecs] Fix: Update QP range for AV1 vs H.26X in NvEnc
-
[AVCodecs] Fix: Warning logs produced from running NVidia driver check on non-NVidia GPUs
-
[AVCodecs] Fix: VTCodecs hardware decoding. NOTE: There is a known memory leak with this codepath but will be addressed in a later CL
-
[PS1] Fix: Pixel Streaming blueprint components running unnecessarily even when unused in scene
Deprecated:
- Un-deprecate "kick" blueprints in Pixel Streaming 1.
Platform
API Change:
- Programmers can use FScopedFTZFloatMode wrapper struct to place on top of the scopes where they need to flush denormals to zero to avoid manual handling of said cases. It's implemented for both x64 and ARM architectures
New:
-
Replaced PLATFORM_SUPPORTS_VECTOR_ROUNDING_MODE with PLATFORM_SUPPORTS_VECTOR_CONTROL_REGISTERS, and replaced VectorSetControlRegister, VECTOR_ROUND_TOWARD_ZERO, and VECTOR_DENORMALS_FLUSH_TO_ZERO with noops when PLATFORM_SUPPORTS_VECTOR_CONTROL_REGISTERS is false
-
Make Turnkey persist UE_SDKS_ROOT to .epicrc on Mac and Linux
-
Implemented denormals flush to zero and round to zero floating unit control flags Plus fixed ARM FPU control flags API
-
Allow editor to load non-confidential platform extension DeviceProfiles.ini files - Always load the GlobalDefaults DeviceProfile object, not just when ALLOW_OTHER_PLATFORM_CONFIG is defined - Allow a couple of dp exec commands when ALLOW_OTHER_PLATFORM_CONFIG is 0
-
Moved all versions from SDK.Versions.cs files to _SDK.json files - Some static variables made it tricky, so added some support to make it simpler on users of the static variables
-
Leave only immutable texture path for GL(only use glTexStorage2D), don't set GL_TEXTURE_MAX_LEVEL as it isn't needed anymore
Bug Fix:
-
Fixed an issue where per-platform packaging settings were getting confused when project settings were changed in the editor (the per-platform ones were not getting updated).
-
Changed Hybrid project checking to always check all enabled platforms to see if any need to be hybrid. This helps address an issue where a single-platform (say IOS) plugin was causing packaging to fail because the host platform (Mac) to clean up the hybrid target files, so then packaging for IOS would fail to find the compiled hybrid targets
Desktop
New:
-
Use ITargetPlatformSettings instead of ITargetPlatform for Windows, Mac and Linux TargetSettingsDetails
-
Desktop Platforms TargetPlatform(TP) Refactor TargetPlatformControls(TPC)/TargetPlatformSettings(TPS) for Windows/Mac/Linux/WINGDK
Linux
New:
-
Fork Added cvar fork.ParentSleepDurationInSec to give ability to configure the time parent process sleeps when it has no signals to execute Added cvar fork.LogMemoryStatsWhenForking to control the memory stats log before every fork (enabled by default) * Added LogFork category used by fork related logs (previously LogHal)
-
Add support for -fsanitize-recover for ASAN which allows builds to continue on error [RN] Linux ASAN builds will now include fsanitize-recover to allow continue on error
Bug Fix:
-
Fix FUnixPlatformProcess::GetDllHandle issue when non-module shared libraries are reloaded
-
Write protecting GModuleSymbolFileMemory to better be able to identify the root cause of crash during ensure stack walking
-
Prevent GModuleSymbolFileMemory from being freed if it's size exceeds SSIZE_MAX. Cleaned up some logging and code duplication
Deprecated:
-
Linux toolchains earlier than v23 are now deprecated since they cannot properly link for Rocky Linux 8
-
Toolchain upgrade to llvm 18.1.0 - support Rocky Linux 8 as minimum supported OS - deprecate CentOS 7 support
Mac
New:
-
Metal RHI now uses Bindless when enabling SM6
-
Metal RHI Context Refactor Removed MetalContext and MetalRenderPass. Most functionality is now within MetalRHIContext and removed dependancies so that multiple MetalRHIContext's can execute in parallel.
Windows
New:
- Improving support for Windows arm64 - compilation fixes and many third party libraries compiled for arm64
XR
New:
-
IOpenXRExtensionPlugin::UpdateCompositionLayers - headers array should not be of pointer-to-const -Removed const so that extension plugins can add new chain structs via the next ptr. -Fixed passing pointer to openxr chain struct that goes out of scope. -Removed a couple 5.1 deprecated functions from IOpenXRExtensionPlugin.h
-
VisionOS: audio capture support -Add visionOS platform support
-
Add CVAR to control whether we throttle the application when HMD is not worn -xr.OpenXRPausedIdleFPS created to specify the max fps when the openxr session is idle. When set to 0 there is no max fps. 10fps is the default. Setting it to 60 or 90 is more likely to be correct than 0, because with openxr idle the 'natural' max framerate may be faster than it is in vr. -Also changed OnStartGameFrame to avoid some useless work when we are not in an OpenXR session.
-
Input Actions with the same description silently breaks OpenXR input -Detecting duplicate Action or ActionSet descriptions before we create them, issuing a warning, and then replacing them with the Action or ActionSet's FName so that the inputs will function.
-
[OpenXR] One extension plugin adds multiple interaction profiles -Adds a hook to IOpenXRExtensionPlugin to add multiple interaction profiles. Previously only one could be added. -Deprecated the single interaction profile version, and replaced all uses of it in the engine.
-
VisionOS hand tracking fix -Fixed tracked flag bit flag setting error.
-
XR RHIGetDefaultContext usage elimination -Refactored so we don't use RHIGetDefaultContext anymore, instead we pass the rhicommandcontext down from OnBeginRendering_RenderThread or from RHIEndDrawingViewport through CustomPresent. -Added a DebugLabel to the swapchains, because i have often wanted one while debugging.
-
Add Mac as a target/allow platform for the OpenXREyeTracker plugin
-
Check to see if we're in an XR Tracking Only session and update tracking devices if we ar
-
VR Template
-
Add visionOS specific .ini
-
Added support for reading VisionOS***.ini. IOS is a parent platform, so it's INIs are read as well.
-
Added VisionOSEngine.ini to vr template which disables MobileMultiview and InstancedStereoRendering, which are not currently supported.
-
Fixed build break where notification manager is used, but was not included on visionos. Perhaps it wasn't supported in an earlier version, but the types in question exist now so I just removed the ifdef removal on VisionOS.
-
Bug Fix:
-
Fixed stereo layers depth not working in PCVR. Fixed crash when using the left texture of a stereo layer.
-
Fixed shader compilation crash when enabling foveation on mobile due to CAS VRS not being supported.
-
Fixed Bloom with mobile multi view and mobile hdr.
-
Fix tonemapper being enabled in XR. Keep it enabled only in Editor windows as they need the linear to sRGB conversion that is done by the HW in the XR backbuffer case.
-
Fixed Custom Depth and Custom Stencil for mobile multi view.
-
MSAA depth working on VisionOS for both eyes
-
Fixed editor crash using Rect Light with mobile multi view
-
Fixed DBuffer decals for stereo rendering
-
XRThreadUtils ExecuteOnRHIThread_Impl goes around rhi cmd list when it should not. -Removed the IsRHIThreadRunning() check. We don't want this command being executed out of order if the rhi command list is being used, even if there isn't a dedicated rhi thread.
-
Fix crash when changing map with OpenXR foveation enabled
-
Fix decals not rendering in stereo with ISR
-
Fixed vulkan error log spam about using non multiview texture on multiview layout when depth prepass was enabled.
-
Fix deferred mobile renderer base pass only rendering to the left eye with mobile multi view.
-
Fixed volumetric fog for stereo rendering.
-
Fixed VisionOS passthrough edge artifact
- There was a race condition between acquiring a new depth swapchain texture and comitting to render into it. The result was that the depth buffer given to compositor services was occasionally one frame old. Because any 32x32 pixel block with all pixels at zero depth is dropped entirely this could result in 32x32 pixel bites taken out of the edges of rendered geometry abutting non-rendered passthrough areas of the output. This is fixed by moving the depth acquire to the same point as the color acquire. One must be running with the xr.OpenXRAcquireMode=1 for the fix to fuunction, in the other path the race condition still exists. This is now set in VisionOSEngine.ini. It is possible that this problem affected other VR devices which use depth for reprojection, but it would have been much more subtle.
-
ensure() instead of check() if OpenXRPath cannot be converted to a strin
-
Fix animated decals not rendering correctly in the right eye with mobile multi view.
-
Fixed velocity rendering for mobile multi view
Deprecated:
-
AzureSpatialAnchors deletion -Service retired November 2024, deprecated in 5.4. Time to delete it.
-
Remove deprecated BeginRendering_RenderThread and BeginRendering_GameThread -Deprecated in 4.19. -Added cvar xr.LateUpdateManager.Disable, which disables late update of attached components.
Platform Mobile
New:
-
Added HW Depth Resolve for Vulkan
-
ASTC HQ mapping from BC7 is now configurable with new config DefaultASTCQualityBySizeHQ and respects per-texture quality override.
-
Use VS2022 to build etc2comp library since its a required VS version since UE5.4 #contrib 11559
Bug Fix:
- Set proper user agent on mobile WebView browsers
Android
New:
-
Implemented FPlatformMisc::SetStoredValue, GetStoredValue and others on Android
-
Memory mapped animations and audio are now enabled on Android to save memory.
-
Add SharedPreferences accessors for Android
-
bool AndroidThunkCpp_HasSharedPreference(const FString& Group, const FString& Key)
-
void AndroidThunkCpp_SetSharedPreferenceBool(const FString& Group, const FString& Key, bool Value)
-
bool AndroidThunkCpp_GetSharedPreferenceBool(const FString& Group, const FString& Key, bool DefaultValue)
-
void AndroidThunkCpp_SetSharedPreferenceInt(const FString& Group, const FString& Key, int32 Value)
-
int32 AndroidThunkCpp_GetSharedPreferenceInt(const FString& Group, const FString& Key, int32 DefaultValue)
-
void AndroidThunkCpp_SetSharedPreferenceString(const FString& Group, const FString& Key, const FString& Value)
-
FString AndroidThunkCpp_GetSharedPreferenceString(const FString& Group, const FString& Key, const FString& DefaultValue)
-
-
Updated to AGP 8.5.2
-
Added support for HWAsan starting from NDK 26
-
Switched Android configurations to build with ISPC enabled by default.
-
Move gc.MaxObjectsInGame, Substrate and NumPreallocatedVertices settings from Android Platform ini to Base ini
-
Added support for debug keystore
-
Flavorless 'Android' target platform now defaults to ASTC flavor
-
Add device profile to support Xclipse devices running the SM5 renderer Rearranged Android SM5 device profiles to add vendor-specific defaults
Bug Fix:
-
Fixed quick launch not working on Android when using Zen Store and target device and host are on different networks
-
Do not attach network connection monitoring to PSOService processes
-
Block AFS token from inclusion in packaged ini
-
Fixed issue with UnrealAndroidFileTool packages command not including all installed apps
-
Introduce short names for both
AndroidTargetPlatformControls
andAndroidTargetPlatformSettings
, which are causing certain built targets to run afoul of theMAX_PATH
limit we impose on UBT file path lengths. -
Fixed updating device orientation in Android's onConfigurationChanged callback. This fixes the cached in-engine value for current device orientation being completely wrong in some particular situations.
-
Fixed issue with HMD initialization on Android
-
Fixed output directory issue for Blueprint APKs
-
Fixed order of arguments when using AFS to push libUnreal.so outside of .apk
-
Fix a crash when generating a patch with a pak larger than 2GB.
-
Added additional location to check for Android Studio binary
-
Fixed issue with Android environment variables not always set on Mac
-
Better handling of pread/pwrite for Android filesystem
-
Fixed vulkan PSO cache when using Zen streaming
-
Change method of ordering AndroidFileServer (AFS) startup sequence (am start -W doesn't work for older Android)
-
Only kill Java tasks started by MakeAPK on build machines
-
Fixed issue with incremental building growing the APK size when only .so files change
-
AutoSDK for Android is now on -27
-
Upgraded Swappy to code based on the latest in AOSP. We now manually load libswappy.so as a shared library built with static libstdc++ and hidden symbol visibility, isolating it from Unreal's allocator which would sometimes cause crashes during rotation or backgrounding.
-
Fixed Android_Multi builds incorrectly treating ASTC_NormalRG as ASTC_NormalLA
-
OpenGL: Correctly set 'Layered' argument in a glBindImageTexture call for a Texture2DArray resource
iOS, tvOS, and iPadOS
New:
-
Added caching of FIOSPlatformMisc::GetNetworkConnectionType result to avoid redundant checks
-
Memory mapped animations are now enabled on iOS to save memory.
-
Add MallocBinned3 to iOS
-
Refactored iOS background downloading stack
-
Added MarketplaceKit.framework wrapper
-
Change the slack growth factor from 1.25% to 1.2% IOS
-
Add IOS as supported platform for MobileFSR
-
Enabled UE_BINNEDCOMMON_ALLOW_RUNTIME_TWEAKING for IOS
-
Autosdk MetalDeveloperTools support On Win64 MetalShaderFormat module is always loaded
-
Added option to order CDN's by ping time on iOS background download
-
Implemented ScheduleLocalNotificationAtTimeOverrideId on iOS
-
Added ability to retry stale background downloads when we're in foreground on iOS
-
Added CDN re-ordering for background download to potentially improve chances of reply at the first try
-
Do not add StoreKit framework dependency for apps not distributed through the AppStore
-
Improved Commit\Decommit memory syscalls on iOS and Mac to reduce RSS
-
Optimized compiler and linker flags for iOS
-
Added "ResignApp.sh" (meant for IOS but should work for Mac apps also) that can resign a .xcarchive, .app or .ipa with another cert/provision pair, and can change bundle ID, embedded commandline, build version (like 0.1.1234) and marketing version (like 1.0)
-
Run Engine/Build/BatchFiles/Mac/ResignApp.sh with no params for help
-
An .xcarchive can resign to any type, .app and .ipa can output to each other, but cannot output to .xcarchive (because we re-use the directory structure of the input .xcarchive)
-
-
Added support to use zipped xcframeworks dependencies
-
IOS/TVOS/VisionOS TargetPlatform(TP) refactor to TargetPlatformSettings(TPS)/TargetPlatformControls(TPC)
-
Added an optional array RequiredEntitlements to [/Script/IOSRuntimeSettings.IOSRuntimeSettings] in the Engine.ini file. The app checks for these at startup and logs a fatal error if the entitlements are not found. This can help verify the app is signed with a key with the correct entitlements during development.
-
Added support for a static feature level on iOS
-
Added the UnrealAutomationTool command GeneratePsyms that can generate a .psym file for use with Unreal Insights from an iOS .dSYM file. The tool is intended to be run from the UnrealAutomationTool command line using
- _./RunUAT.sh GeneratePsyms -files=MyProject/Binaries/IOS/MyProject.dSYM _or using a SymGen node in the BuildGraph xml.
-
libimobiledevice improvements
-
idevicefs added -r option for rm, to remove recursively
-
idevicefs push/pull is an order of magnitude faster
-
idevicefs ls now shows directories and filesizes
-
removed debugging log from itcpconnect and the return code now indicates success/failure
-
Bug Fix:
-
Added support for partial file writes on iOS
-
Fixed several #ifdef 's that should be #if (caused Mac code to execute on IOS)
-
Support Web Auth to complete using an external browser
-
Update command line arguments only on when app is open with expected game schema
-
Changed handling of file write returning 0 as an error on iOS
-
Enabled ApplicationReceivedScreenOrientationChangedNotificationDelegate in engine pre-init on iOS
-
Fixed several issues with a mobile deferred shading on iOS that were causing crashes and incorrect rendering.
-
Fixed cases where drawable surface could leak
Quixel
Bug Fix:
- Fixed a crash that would occur if the user dragged an asset to the viewport after closing the quixel bridge panel.
Render Pipeline(MRQ)
New:
-
Added support for camera overscan to MRQ. MRQ now uses the camera's overscan property to set overscan, and MRQ overscan property has been changed to an override, which when enabled replaces the camera's overscan value with its own.
-
Add reference motion blur parameter to Path Traced Render node in MRG.
Rendering
API Change:
- For external users of "r.PostProcessing.PropagateAlpha", calls to FindTConsoleVariableDataInt(..) will need to be replaced with regular FindConsoleVariable(..), since the former call would silently fail on a (now) boolean console variable.
New:
-
Hair - Add project settings for hair tristrip geometry as not all project are compatible with this.
-
Hair - Split direct lighting loop for GBuffer & Hair inputs. This avoids context switching between each light and improve performance overall, and give a 5% improvement.
-
Hair - Change groom skinning to use mesh's vertex normal instead of face vertex normal. This helps smooth the groom look when the underlying mesh has rough triangulation.
-
Hair - Add hair show flags to disable hair rendering on certain view.
-
Implemented native support for rendering first person geometry with an (effectively) different FOV and a smaller scale as to minimize the chance of clipping with the scene. The feature is controlled by the FirstPersonFieldOfView and FirstPersonScale properties on the camera component (or alternatively directly on the FMinimalViewInfo). Primitives can be tagged as first person by ticking the "IsFirstPerson" checkbox on the primitive component. Should support most primitives, including Niagara systems. The different FOV and scale is achieved with a 3x3 matrix multiplication that is applied in the shader after WPO. This matrix scales the geometry towards the camera and also scales the XY components in view space to cancel out the scene FOV and to achieve the intended first person FOV. This means that the first person geometry is modified in world space before any projection, so the rest of the renderer doesn't need to deal with a separate projection matrix (and related matrices), but it also means that we're lighting fairly small and slightly deformed geometry. In practise, the morphing seems to be acceptable. The scaling appears to be mostly inconsequential for for lighting and reflections, but scene shadows cast onto the first person geometry are a bit more binary. Self-shadows and casting shadows onto the scene are problems that will be solved in separate CLs. For now it is probably best to untick "Cast Shadows" on the first person geometry.
-
Replaced the previously called "Enable alpha channel support in post processing" (r.PostProcessing.PropagateAlpha) renderer setting with an "Alpha Output" boolean located in the Default category, effectively removing the "linear-only" constrained option with value "1".
-
Hair - Improve noise on hair transmittance and shadow. Replace the jitter noise by a blue noise function which remove structural noise, and lead to more pleasing results.
-
Added ECVF_Scalability flag to r.Shadow.NaniteLODBias
-
Added tonemapper and post-process materials to visible scene capture show flags.
-
Handle multiple views when computing visibility masks for per-instance occlusion queries * Add a shader permutation to load previous visibility mask values before setting/clearing the visiblity bit for the current view
-
DirectionalLight : Add a setter for AtmosphereSunDiskColorScale on the proxy so we don't need to fully recreate the renderstate each time it changes. This avoids 20ms spikes on the render thread
-
Cleaned up and reduced tonemap shader permutations for faster compilation.
-
Hair - Allow AutoLOD bias to have negative value.
-
Added DumpMaterialInfo commandlet, which writes a CSV with properties of all matching materials to disk.
-
[LWC] Implemented invariant operators on specific platforms that have issues with fast-math and the 'precise' keyword. Platforms that have invariant instruction intrinsics use those. On some platforms the FMA intrinsic is used, where it has the same invariance effect.
-
Hair - Add group color to CV visualization, reference point / position offset, and large point visualization option.
-
Local Fog Volumes now work with per pixel fog option on materials.
-
Hair - Add experiemental screen trace for hanlding occlusion test when integrating Lumen input for hair (Enabled/disabled with r.HairStrands.SkyLighting.ScreenTraceOcclusion).
-
Hair - Add Depth of Field Use hair depth property on PostProcessVolume.
-
Hair - Save Hair Strands Textures generation options into groom strands to avoid re-entering them each time textures are generated.
-
Added new (deferred) renderer project setting for primitive alpha holdout support, separating it regular propagate alpha which now becomes runtime-toggleable (POST_PROCESS_ALPHA has been completely removed).
-
Added public custom render pass option to render scene color with/without alpha, in addition to the existing scene color with depth render mode.
-
Added a new FirstPersonOutput node which allows users to pass a FirstPersonInterpolationAlpha value to interpolate between world space and first person space on a per-vertex frequency.
-
Add support for CommandLine versioning within a run so parse results can be cached safely Cache IsHDRAllowed cmd line parse results as it is called per window per frame in slate
-
Added a project setting, r.GPUSkin.AlwaysUseDeformerForUnlimitedBoneInfluences, that allows you to enable Unlimited Bone Influences in a project without compiling extra shader permutations for GPU skinning. This saves runtime memory, disk space and shader compilation time. When the setting is enabled, any mesh LODs using Unlimited Bone Influences that don't have a deformer assigned will use the DeformerGraph plugin's default deformer. This ensures that UBI meshes are always rendered with a deformer, and therefore the GPU skinning permutations for UBI aren't needed. Also added a per-LOD setting that allows users to disable mesh deformers on a specific LOD, which could be useful for controlling performance, e.g. disabling an expensive deformer on lower LODs. Some changes to functions on USkinnedMeshComponent lay the foundations for having different deformers on different LODs as well.
-
[VSM] Added VSMTexelDitherScale to light proxy, analogous to r.Shadow.Virtual.SMRT.TexelDitherScale
-
[VSM] Added VSMResolutionLodBias to light proxy, analogous to r.Shadow.Virtual.ResolutionLodBias
-
Hair - Add VSM multiple sample support for hair strands voxel tracing, allowing to reduce noise on shadow cast by grooms.
-
Re-implemented MeshEdges showflag. This fixes issues with z-fighting, TSR ghosting, missing Nanite geometry and adds flexibility in the composition step. The wireframe overlay is now rendered as a separate pre-pass, and composited into EditorPrimitives after the main pass.
-
Added bTargetArraySlicesIndependently to UTextureRenderTarget (relevant for 2D arrays and cube or cube array) so that each slice can be individually rendered to by a pixel shader
-
Don't allow setting MSAA with deferred shading in renderer settings as this combination is not supported.
-
Hair - Fix missing control point when enabling triangle strip geometry for hair strands.
-
Improved Blue Noise textures using "FastNoise: Filter-Adapted Spatio-Temporal Sampling for Real-Time Rendering". Improves quality of various stochastic effects like Lumen, MegaLights, Hair, Volumetric Fog relying on BlueNoiseScalar and BlueNoiseVec2. #virtualized
-
Hair - Improve Groom importer warning/error reporting. Add report of invalid position.
-
[LWC] Added the LWC complexity debug viewmode, similar to the shader complexity view, which shows how much LWC function usage each material has.
Bug Fix:
-
SceneCapture: Moved scene view extension setup calls before renderer creation to match the main render path.
-
Hair - Fix scene preview profile in groom editor. Add widget in groom editor for switching scene profile.
-
Hair - Fix Deep shadow in VR.
-
Fix cooking issue with groom binding on certain platforms.
-
Hair - Fix hair view rect with stereo rendering causing RHI assert due to be out of bound.
-
Hair - Fix hair being updated despite the instance being explicit set to 'not visible'.
-
Add a small fix to update a TextureSampler Anisotropy at runtime in PIE when r.MaxAnisotropy is not 0
-
SceneCapture: Fixed missing show flag property reset and toggle behavior.
-
Hair - Fix missing tiles when rendering groom with PPLL due to incorrect tile coordinate computation.
-
hair - Fix race condition between NiagaraDataInterface and GroomComponent.
-
Hair - Fix Groom cache. Fix typo in groom cache causing groom cache's position to be overriden by groom cache's radius. Fix groom cache reimport causing max hair radius computation to be incorrect due to a memory move operation. Fix incorrect groom cache's hair radius normalization when updating interpolated hair radius.
-
Set RVT texture bounds usability improvements : Ensure the set bounds are valid in the case of a flat mesh Take into account the unloaded components bounds when the bounds align actor is a landscape
-
Fixed various missing resource transition when rendering RVT (thumbnails, SVT baking), causing RHI validation issues
-
[Shadows] Fix incorrect clamping of ShadowFactor weights in ShadowFactorsUpsample pass, used in distance field and capsule shadows, leading to screenspace blocky shadow artifacts.
-
Fix 0-byte request done by groom system on cooked build, causing crashes on loose-file/non-packaged builds.
-
Fix a validation failure when verifying uploaded instance info in GPUScene.
-
Fix Reflection capture removal causes the primitive GPU state become dirty.
-
Fixed incorrect loading of actor and object world position in mobile scene data loader/writer.
-
Hair - Fix crash in groom deformer when changing geometry type.
-
Fixed a couple of crashes and asserts related to async groom compilation
-
Hair - Improve stability of hair strands texture generation.
-
Fix groom cache interplation when triangle strip geometry is enabled.
-
Hair - Fix incorrect shadow mask for hair when using VSM & cluster shading or VSM & OnePassShadowmap
-
Hair - Change opaque shadow mask to run into a single pass when using deep shadow map (instead of one pass per macro group).
-
Hair - Fix incorrect FOV value on SceneCapture entity. This was causing the hair strands to look incorrect, due to the FOV being use for computing pixel size based on FOV.
-
Hair - Fix hair group name not being serialized after import. The group name weren't correctly transferred from the hair group description into the UGroomAsset. Thus there weren't serialized. This was causing group to not have any names once the asset was reopened.
-
Hair - Fix crash when visualizing light complexity with a groom component in view.
-
Hair - Fix hair data issuing 0-byte requests to DDC. This can cause the Zen server to cancel all batches requests, causing hair data to be missing. This fix ensures only non-0-byte requests are emitted.
-
Fixed problem when building SVT from within the RVT component's Build button, which would actually disable SVT, because the texture wasn't waited upon while recreating the RVT component's render state Prevent mobile-specific SVT textures to be displayed if Virtual Textures on mobile is disabled in the project settings Various UX adjustments to make it clear to the user what to expect when using mobile-specific SVT
-
Hair - Fix OnePass transmittance support for hair with light not casting shadow
-
Hair - Fix crash when building large RT acceleration (e.g., a lot of groom instance). The scratch buffer used for building the BLAS is limited to 2Gb which might not be enough. This CL split the acceleration building into pieces which accomodate this limitation.
-
Hair - Remove CPU path for deep shadow map and extend limit from 16 to 32 DOM slots
-
Hair - Fixed incorrect hair voxel tracing. Trace were slightly offset compare to the shading point. Also fixed incorrect scene depth injection into voxels, causing light leak.
-
Fixed an issue with Translucent After Motion Blur rendering when Viewport Scale is less than 100%.
-
Hair - Fix missing shadow casting from groom when light is too close. The RayEnd point was scaled to 75% of the light surface to aleviate shadow map issue. This is not necessary for voxel groom traversal.
-
Hair - Fix groom importing when groom contains curve with invalid position (NaN/INF).
-
Cleanup r.MinScreenRadiusForCSMDepth which is not used anymore, r.Shadow.RadiusThreshold is now used for culling shadow casters.
-
Fix missing hair shadow on instance having both 'hidden in game' and 'hidden shadow' enabled with light having RT shadow.
-
Fix Groom holdout with fog.
-
Fixed crash when rendering shadows out of a viewstate-less view
-
Hair - Remove remove screen probe noise on hair pixel from Lumen screen traces. Hair pixels are flagged as diffuse back face surface like SSS or foliage, to avoid screen traces which cause noise due to their high frequency geometry.
-
Hair - Fix race condition in hair cards builder.
-
Add the EVCF_Scalability flag to foliage.LODDistanceScale
-
Hair - Fix groom per-CV attribute to be incorrect depending of the imported content. This was due to an incorrect Log2 rounding of the CV chunk size, causing incorrect lookup at runtime.
-
Fixed a memory leak when streaming in HairStrands grooms
-
Fixed inaccurate luminance factors globally, updating the legacy NTSC luminance factors to working color space accurate ones which match the sRGB/Rec.709 definition by default. Legacy factors remain accessible by enabling a new renderer "r.LegacyLuminanceFactors" project setting.
-
Fixed crash in RVT details customization when the underlying get GCed
-
Hair - Fix overbright hair shading when roughness is close to 0. The gaussian normalization causes the BSDF Mp term to reach very high value. Clamping this normalization limits the values. This change is equivalent to have min roughness value, but only for the normalization term. So the highlight remains sharp, but the energy is kept under sensible value.
-
Hair - Fix crash when reloading groom asset. There is no longer need to reload groom resources, since this is now only done when derived data are updated.
-
Fixed scene capture show flags not updating at runtime from blueprint.
-
Hair - Fix RT groom geometry being rebuilt every frame with static groom. This was causing OOM on certain platform with tight memory budget.
-
Fixed crash when using light functions that use primitive custom data and hardware ray tracing is enabled.
-
Fixed case where overridden MinLOD on a Skinned mesh component could be higher than asset MinLOD resulting in rendering corruption
Architecture
New:
-
Change Virtual Texture conversion dialog UI. Remove "apply filter" button, and apply filter whenever we change the filter value in the drop down.Select initial filter value as min or max size according to whether we are converting to or from Virtual Texture.
-
Align virtual texture tile border sizes to multiple of two instead of power of two. This fixes an issue where the streaming mips asset for runtime virtual texture would mismatch the original runtime virtual texture.
-
Add console variable r.VT.RVT.StreamingMips.UseAlways. This forces the use of runtime virtual texture streaming mips and disables runtime generation of pages. It can be useful for debugging. Especially when combined with the recently added r.VT.RVT.StreamingMips.UseInEditor
-
Add Runtime Virtual Texture volume option for only using the streaming low mips. This only applies when the streaming low mips are already enabled and showing. It forces the use of only the streaming virtual texture with no runtime pages. This is intended for workflows that use runtime virtual texture only as a means to generate some baked world texture for sampling. Also changed "Show in Editor" to be a persistent setting, since that is what would be required for such a baked only workflow.
- To help with debug only workflows to show streaming mips in editor, added r.VT.RVT.StreamingMips.UseInEditor which when set to 0 will force streaming mips off in editor, 2 will force on in editor, and 1 will obey the runtime virtual texture volume setting.
-
Add minimum material quality as an optional filter for whether a runtime virtual texture volume is instantiated in game.
-
Add custom depth output support to geometry collection components that use nanite.
-
Rewrite of the "Paint then Apply" approach for mesh texture painting. We now immediately write brush strokes to the final texture without an additional apply step. Undo has changed so that it can be applied per brush stroke, and when painting on multiple components in a single stroke this is now a single transaction.
-
Change r.VT.AVT.AgeToFree so that a value of 0 disables automatic eviction of old adaptive virtual texture entries. Change the default setting to 0. This avoids potentially high CPU costs for remapping pages unnecessarily.
-
Add basic DX12 Work Graph support. For this first pass there is no exposed RHI functionality for directly dispatching a work graph. Instead shader bundles have been extended to support a work graph based implementation. Nanite compute materials now can use work graph shader bundles on D3D12 when r.Nanite.AllowWorkGraphMaterials and r.Nanite.Bundle.Shading are both set. Both of these default to off at the moment.
-
The Vertex Weight painting mode now supports painting to individual LODs (like the Vertex Color mode).
-
Add project renderer settings to disable specific runtime virtual texture material types. This allows us to remove shader permutations for types that we know that we don't need. When removed, material types no longer show up in selction option for the runtime virtual texture asset.
-
Added render pass flags to the AddFullscreenPass, AddFullscreenInstancedMultiViewportPass and AddRasterizeToRectsPass PS utils
-
Allowed custom render passes to specify a persistent "FSceneViewStateInterface" in order to properly create a scene view / scene view key. This allows custom render passes to eventually use persistent scene view data (e.g. temporal) Added validation that a scene view state, if used by a FViewInfo, cannot be shared by 2 different FViewInfo, since this some systems like visibility don't support (and it doesn't sound like a good idea either) Custom render passes now have an option to specify whether they are a scene capture (so that non custom render passes made for other purposes than scene captures are not considered as such)
-
Make support for virtual texture 16bit page tables configurable using the console variable "r.VT.Support16BitPageTable". Defaults to on which is the existing behavior. In some cases we might want to disable and pay a higher page table memory cost to reduce the overall pressure on the number of unique page table formats which is limited to 16.
Bug Fix:
-
Prevent USceneCaptureComponent functions ShowOnlyComponent and ShowOnlyActorComponents from adding duplicate components to the ShowOnlyComponents array. Matches existing behavior for the HideComponent and HideActorComponents functions with the HiddenComponents array.
-
Fix incorrect sRGB logic for some compression paths in the Runtime Virtual Textire format "Base Color, Normal, Roughness".
-
Fix mesh paint texture painting seam painting bug. When collecting the seam mask we were assuming that the FStaticMeshSection::MaterialIndex was the same as the section index. When that wasn't true we were using a seam mask from the wrong material section.
-
GitHub 11421 : Fix crash when mounting pak file after FRenderAssetStreamingManager was deleted. #11421 tag #contrib 11421
-
Add instance culling for decal passes so that HISM decals now work instead of only the first decal instance being visible.
-
Fix potential flicker when marking render state dirty on geometry collection components.
-
Fix issue where page table size wasn't being shown correctly in the runtime virtual texture asset details panel.
-
Fix streaming mips not baking normals for "BaseColor,Roughness,Normal" runtime virtual texture format.
-
Fixed race condition in UTexture release. Fixes some licensee reported crashes when reading texture resource from render thread after game thread release.
Lighting
New:
-
[LWC] Added lighting channels support.
-
Add Diffuse scale support on light.
-
Move hardcoded LUT into engine resources to reduce binary size. Remove about 300Kb of binary size.
-
[VSM Fixed issues with debug viewmode rendering. Label placement is now correct with DPI scaling. Overlays are now rendered below editor primitives. A grayscale view of the scene is now composited below the overlay for better visibility.
-
Don't update translucent geometry BLAS and don't add it to TLAS if there's no feature which would trace against it.
-
[VSM] Added counters to Unreal Insights tracing. Requires both VSM stats and Insights counters to be enabled. (
r.Shadow.Virtual.ShowStats 1
andtrace.enable counters
) -
[Shadows] Perform PresizeSubjectPrimitiveArrays of whole scene shadows once per task instead of redundantly per packet for improved performance. Thanks to CDPR for this contribution.
-
Add a separate cvar to control how long unreferenced VSM lights live - r.Shadow.Virtual.Cache.MaxLightAgeSinceLastRequest - separate from the per-page ages. Keeping VSM lights around too long can cause too much bloat in the page table sizes and processing, reducing performance in various page-table-related passes (clearing, etc).
-
[VSM] Adapted debug viewmodes to better show local lights. Visualization modes now show a composite of all lights by default, and change to showing individual lights when one is selected in editor or by name. With r.shadow.virtual.visualize.nextlight, you can select the next light for visualization. When VSM visualization is enabled, one pass projection is now turned off, as it is incompatible with the debug output in the projection shader.
-
Add light component setting to select MegaLights RT or VSM.
-
Remove console-specific disabling of various raytracing effects in default device profiles.
-
Rect light, light functions can now have a perspective projection instead of an orthographic projection when the new property LightFunctionConeAngle>0.
-
Run RenderDitheredLODFadingOutMask only when RT shadows are enabled. Apart from another render pass overhead, it writes to stencil interesting a sync point, which prevents the Lumen DiffuseIndirectAndAO from overlapping with Lights.
-
Use spatiotemporal blue noise for SMRT step offset and directional light ray for minor quality and performance improvements.
-
Optimization to skip/simplify VSM light grid pruning when there are no VSM local lights.
-
Add (optional) RGBA16 bit format support for rect light atlas in order to address hue shift.
-
[VSM] Fixed cache not invalidating properly on pagepool size change when AllocateViaLRU=1
Bug Fix:
-
Exclude light with contact shadow from being rendered with clustered shading, since the pass does not support this.
-
Shadows: Ray-Traced directional light penumbra size does not match the path tracer
-
Ray Tracing: Ensure that ReverseCulling does not depend on the matrix determinant and observe ReverseCulling where appropriate
-
PR #11769: Fixing Position Driven Light Functions For Path Tracing And Ray Tracing #contrib 11769
-
Add aniso support for legacy lighting with cluster shading.
-
Add IsStaticLightingAllowed check to ASkeletalMeshActor to prevent unnecessary warnings when static lighting is not enabled in the project
-
Fix skeletal meshes not getting swapped to VSM dynamic caching in some cases
-
Fix cluster shading being executed twice causing intensity discrepency on certain platforms. On platforms supporting rect primitive, the vertex shader was executed twice, due to the vertex shader assuming triangle list topology.
-
Ray Tracing: Nanite fallback mesh should not flip culling direction based on the transform
-
Fixed initialization error in LocalLightComponent.cpp
-
Fixed CSM shadow casters getting falsely culled due to test with primitive octree using an incorrect culling volume.
-
Fix edge integral math causing NaN value with rect light under coplanar setup. This fix ensures that rsqrt always get strictly positive values.
-
RayTraced Shadows: Fix incorrect shadowing for lights with non-zero source length
-
VSM: disable screen ray and normal bias on subsurface materials Can cause various artifacts with extreme opacity values
-
Fix IES Texture Thumbnails rendering
Lumen
New:
-
Enable area shadows by default for hit lighting. It's more noisy, but it's a better default for most use cases.
-
Added foliage specific cutoff for screen probe importance sampled specular. This can improve perf on consoles depending on the settings, scene and resolution.
-
Move hit velocity calculations a bit further in the shader in order to optimize number of VGPR. This improves shader occupancy % in the LumenScreenProbeHardwareRaytracing pass.
-
Reduced surface cache leaking issues by tightening depth bias to 10 units in HWRT path. This bias is now exposed as r.Lumen.HardwareRayTracing.SurfaceCacheSampling.DepthBias and represents max disprepancy between rasterized and ray traced geometry.
-
New Lumen Refection denoiser. It's sharper, faster, has less noise and has less ghosting.
-
Don't build the ray tracing light grid if it's not used by Lumen. Saves performance when HWRT is used with Lumen.
-
Don't trace shadow rays in Lumen Direct Lighting if light has disabled shadows, but requires a shadow mask due to light function usage.
-
Implement inline AHS support for Lumen on certain platforms. This speeds up AHS handling in Lumen.
-
Run AHS only for meshes with some sections casting shadows. Fully disabled shadows can be filtered out at an instance level, but GI and reflection passes still need to run AHS on those sections.
-
Reorder surface cache shadow traces for better coherency in the HWRT path.
-
Overlap Radiance Cache updates (opaque and translucent). Those two passes have low GPU utilization, so it's a pretty good optimization where translucent cache traces become almost free.
-
Optimize ray tracing performance by pulling out Surface Cache Alpha Masking code to a permutation, which saves some VGPRs in tracing passes.
-
Turn noise in Screen Probe Gather into less noticeable structured error by constraining random ray directions to a smaller subset which can be handled by a temporal accumulation.
-
Added support for the "indirect lighting intensity" property of lights for Lumen Hit-Lighting
-
Implemented alternative avoid self intersections mode, which retraces ray if the original ray hits a backface too soon. This mode is faster on plartforms which don't support AHS inlining.
Bug Fix:
-
Fixed FLumenDirectLightingTaskData race condition which could sometimes cause crashes
-
Add member initializers for FMeshCardsBuildData to avoid Bounds being serialized with NaN values if MaxLumenMeshCards is 0.
-
Fixed normals on two-sided geometry when using Hardware Ray Tracing with Lumen
-
Fxed bias in importance sampling of BRDF due to an off-center filter kernel in Lumen Screen Probe Gather. This increases changes of finding the right lighting directions, mostly visible on non Lambertian BRDFs.
-
Fixed black spots in GI when radiance cache probe atlas size is set to a non power of two, which is default on some platforms.
-
Fixed stale indirect lighting bug when switching scalability levels or switching GI quality through PPV. This was caused by radiosity reading previous frame information after radiosity settings change, which was causing it to read invalid memory.
-
Fixed reflections far away from the origin (LWC).
-
Fixed r.Lumen.ScreenProbeGather.Temporal.RejectBasedOnNormal causing artifaces due to mismatching history scene normal (overwritten by water) causing constant temporal history rejection.
-
Add streaming view support for Lumen scene. This CL adds streaming views' origins to the view family and pipes them to Lumen scene rendering so to update content prior to camera cut/jump.
-
Subsurface profile in Lumen cache is white, ignoring the surface color. Remove the influence of subsurface color on subsurface profile and eye to correct.
-
Refresh LumenScene when Lumen becomes actives if some updates were ignored due to Lumen being inactive. For example, some objects added in Wireframe view, where Lumen is disabled and then user switches to Lit view.
-
Fix missing backlight on SSS surface with Lumen.
Materials and Shaders
API Change:
-
This allows the following pattern when there are multiple shader entrypoints in a single file:
#ifdef MyEntryPointName void MyEntryPointName(...) { } #endif
- This makes it possible to completely hide code and variables that are specific to one shader type from the others, while keeping the convenience of having multiple shader definitions in a single .usf file. This pattern is completely opt-in and therefore does not disrupt any previous idioms, but can be useful to avoid warnings from unused code.
-
Removed dubious code in MaterialEditor.cpp that prevented orphaned nodes to be deleted.
- Unified calls to Material->Modify() to MaterialModify() to make sure Modify() is called on the material and its editor only data, as well as the edited material function (if any) and its editor only data.
New:
-
Efficiently generate shader hashes on more platforms.
-
Re-use shader bytecode buffers so they are allocated only once (either at the point of reading back job results from workers or DDC). These buffers are now stored as FSharedBuffer instances and the following locations now reference these shared buffers instead of reallocating/copying:
-
In-memory shader job cache
-
Shader maps
-
Pushing results to DDC
-
Shader library
-
This is a significant memory optimization particularly for cooks, as the job cache and shader library allocations remain alive for the duration of the cook until final shader library packaging.
-
-
Add compression for in-memory shader source for in flight compilation jobs, and enable this by default (Mermaid SuperFast compression). This halves the high watermark for ShaderCompiler memory usage during cooks, with minimal measurable impact to preprocessing time.
-
[Shaders] - Add LLM markers to track memory of shader compilation to help diagnose out of memory issues. - Instruments: (FShaderCompilingManager::SubmitJobs, FShaderCompilingManager::ProcessAsyncResults, GlobalBeginCompileShader, FShaderJobCache::FindOrAdd)
-
Add support for explicit DDX/DDY driven mip level mode for runtime virtual texture sample.The derivatives can be provided in world or UV space.Providing DDX/DDY of a world space node should now be preferred over using the old "Ignore Input WorldPosition" mip level mode. That mode will now no longer be shown for selection (though legacy materials using it will continue to work).
-
Change Displacement runtime virtual texture blend mode. Displacement now does opacity blend instead of Max blend.
-
Shader code will now look for ShaderCompileWorker to be in the project Binaries, and fall back to Engine/Binaries if not (this can happen when building SCW as Unique BuildEnvironment if the project overrides an SDK version)
-
Dump internal FXC compiler warnings when FXC fails to compile but DXC manages to, so that the user can know what failed and eventually correct it or at least make an informed decision about whether to bypass the error using DXC pre-compilation
-
Introduced FloatToUInt and UIntToFloat material expressions.
-
Shaders: Add a define to all shaders of the entry point name (defined as itself)
-
Material editor now only puts results to DDC after succesful translation if the DDC query finished in time, that is before the full concurrent translation finished. This is to avoid polluting the DDC with the results of small materials that will never be fetched by the DDC because they're faster to directly translate instead.
-
Noise material expression only accepts 3D vector as position input. Fix tooltip and the material translator to reflect this. - Update tooltip to just say "3D" - Change the translator function to only accept 3D position vectors. That way it results in a material translation error instead of a shader compiler error.
-
Hash environment modifications for global & material shader types and include in shadermap DDC key; the result of this is that both modifications to ShouldCompilePermutation and ModifyCompilationEnvironment functions on individual shader types now correctly invalidate shadermaps, eliminating the need for version bumps in these cases and preventing the possibility of cache pollution bugs due to individual shader cache keys already taking these types of modifications into account (since these always affect the generated preprocessed shader code)
-
Material Instance Editor now automatically disable overrides of CurveAtlas parameters when the new parameter in the new parent references a different Atlas texture (as the original curve would no longer make sense).
-
Fix tooltip on Vector Noise position input. - The input position only accepts 3 dimensional vectors and will fail material compilation if given a 2D vector. - Update the tooltip by removing the 2D vector.
-
Enforce BeforeDOF translucency pass for alpha holdout blend mode.
-
Added the "Automatically set Material usage flags in editor default" project setting to enable/disable making new Materials automatically set usage flags.
-
Update tooltip for hiding unconnected pins in materials - The name of the command and the tooltip now match the blueprint editors similar functionality
-
The grid in the material editor has been hardcoded disabled for ~12 years, but we left in the ability to toggle the grid via the UI. This UI element didn't do anything and was useless. - Remove the toggle in the UI for the grid (since it doesn't do anything). - The Material Instance Editor still had the ability to toggle the grid, so this change effectively removes this behavior to keep the editors consistent.
-
Added PeriodicWorldPosition to the TransformPosition material expression, which is similar to absolute world space, but the world origin is moved to the center of the tile the camera is in. Offers better precision for large worlds.
-
The various recent improvements to the shader compilation pipeline means that there are a number of transformations that shader code undergoes before making it to the runtime (deduplication, deadstripping, comment stripping, removal of line directives, etc.). As such it’s not always obvious when looking at a shader in a capture (RenderDoc or similar) what it is and how it was generated. To improve this a DebugHash_
comment is now added to the top of the final shader code passed to the compiler, as well as exporting a DebugHash_ .txt file alongside ShaderDebugInfo for any compiled permutation. With both of these changes it's now possible to quickly find the dumped debug info for whatever shader you are looking at in a capture by pasting the contents of the above comment into Everything (or whatever other file search mechanism you prefer). Note that this requires both symbol and debug info export to be enabled -
Added support for preview shader platforms
-
Improve startup time for CookShadersCommandlet
-
Add new Mask4 Runtime Virtual Texture format. Compresses to BC3.
-
Create the correct type of material expression when you promote the Shader Model output pin to a parameter. [RN] minor, Rendering / Materials and Shaders
-
Adds a Blueprint exposed function on mesh component to set a FLinearColor parameter on a material. - Called SetColorParameterValueOnMaterials - I opted to not change the existing function (which only sets a vec3), since the automatic BP fixup code didn't do the correct thing on existing assets (it disconnected the input and gave a BP compile error).
-
Replace logging of slow shader compilation batches with logging specifying the slow individual jobs instead; modify so that instead of a hardcoded 60s batch threshold it instead uses a cvar driven individual job threshold (defaulting to 30s). Often the full batch contains a mix of fast and slow compilations so printing details for every job in the batch along with the total batch time contains additional unhelpful noise. If debug info is enabled for the job, the job debug output path will be printed instead of the default shadertype/permutation/format string - the debug path contains all of this information anyways, and this allows quick access to the debug artifacts for slow jobs.
-
Added a local position material expression, replacing the local position material function. This new native version directly accesses local position in vertex shaders rather than transforming world position back to local space. This improves precision and performance.
-
Add MeshPaintTextureReplace material expression.This is a material graph node that can select between two inputs depending on whether there is a valid Mesh Paint Texture on the shaded primitive or not.
-
Added manual port binding to ODSC server, e.g., "-port=12345". Game clients can connect to a nonstandard port by specifying it on the command line with the host address, e.g., "-odschost=127.0.0.1:12345".
-
Update daysequence 24hr sky material to use a procedural starfield and moon. #virtualized
-
Update default volumetric clouds to give better results out of the box. #virtualized
Bug Fix:
-
Fixed various crashes caused by deleting expressions inside Material Function as well performing undo/redo operations after deletion.
-
Fix GCreateShadersOnLoad by correctly checking GRHIShaderPlatform as it was done in the initial CL 1581054
-
Fixed crash in FHLSLMaterialTranslator::InExpressionConstantValue() triggering when a non-float constant is evaluated.
-
Handle line directives in ShaderMinifier ExtractBlock()
-
Fix an infinite loop bug in the shader preprocessor caused by '[at]' being considered part of the identifier character class, but not being handled properly by copy_and_filter_macro.
-
Improvements to CookShaders commandlet
-
Fixed crash in void UMaterialInstance::AddParameterValueInternal() due to missing StaticSwitch handling case.
-
Fixed a couple of bugs with the shader preprocessor: - fix line number mismatches caused due to multiline macro arguments by keeping leading/trailing whitespaces in cases of multiple lines encountered in a single macro argument (single line macro args still have whitespace trimmed as this is needed for token pasting) - avoid early out preventing parsing of "defined" builtin macro outside of #if conditions; this allows using defined in #define directives (among other places)
-
Fix a shader compiling issue if a traslucent material enable PreIntegratedGF in the ForwardShading.
-
Fix crash in error reporting if the shader compile worker crashes.
-
Fix thin translucency does not blend in the scene color in ray tracing.
-
[Materials] - Custom Buffer visualization now works with Material Instances. - The code would always get the parent UMaterial from the UMaterialInterface and render with that. - Now we use the original material interface (which could be a material instance with different parameters) to render with. - Still query the blendable location and other material settings from the parent material.
-
[MaterialLayers] - Bug fix to get tooltips working for scalar, vector, , and static bool parameters in the layer parameters view. - This code in SMaterialLayersFunctionsInstanceTreeItem::Construct is a duplicate of the code in SMaterialParametersOverviewTreeItem::Construct, and it layer version was missing a tooltip. - Texture parameters and channel mask parameter names are still broken, but for other reasons todo: cleanup the material parameter display code to not be duplicated.
-
Updated UMaterialFunction::OnPostLoad() to mark the function as invalid when some of its expressions fail to load (e.g. due to unavailable expression types) to force the translation of materials containing active calls to it to fail. Previously, materials with calls to functions missing expressions would still compile (potentially incorrectly); now, it fails translation and reports the error.
-
Decals: Fix decals always fading in, even when FadeDuration is 0
- Avoid initializing fade parameters in BatchUpdateDecals() when FadeDuration is 0, and reset the InvFadeDuration
-
Fix for TObjectIterator iterating over garbage objects in material-related code
-
Fix crash when swapping parent material on a material instance. - When the parent property changes we need to notify the material stats manager to update its cached material resources (see FMaterialInstanceEditor::NotifyPostChange) - The SetMaterial functions in MaterialStats.cpp never took into account the parent on the material changing and therefore having to update its cached state. The FShaderPlatformSettings cached off a UMaterial pointer to base material. When switching the parent material on the instance this code wasn't updating this pointer. This meant the stats thought it was the world grid material instead of the new parent material. - I relaxed some of the conditionals in SetMaterial to always update, and only update if the base material changed.
-
Fixed OutputsTranslucentVelocity flag to use Instance override. Before this change the override of OutputsTranslucentVelocity in Material Instances was ignored and only the override set in the parent Material was considered.
-
Fixed a connection issue between certain runtime configurations and ODSC/COTF server.
-
Removed $TemplateVersion from MaterialTranslator.ush. Please instead assign a different GUID to your change's stream MaterialTranslationDDCVersion entry in FDevSystemGuids.
-
Skipping the material translation DDC when a material is not flagged as Persistent.
-
Removed spurious ensure in material code
-
Fixed incorrect motion vectors when using translated worldspace in WPO and moving the camera.
-
Added checks to ensure that all Material Parameter Collections loaded succesfully in the translation results retrieved from the DDC before using them, other wise continue translation.
-
Holdouts: Ensure masked materials always output solid alpha. Some shading models using Opacity for other purposes could cause incorrect output
-
Fix infinite recursion UMaterialGraphNode::PropagatePropertyChange. - Check to see if we've already visited this node by checking
bNeedToUpdatePreview
which is set by PropagatePropertyChange. - If so, we just early out of the function. -
Fixed an issue where certain material assets could not be saved from the Editor while ODSC server was active.
-
Fix Shader SymbolsInfo causing non-determinism and defeating deduplication in the DDC. This info is now stored in shader map in editor only data alongside platform data.
-
Fix a crash caused from automatically setting the "Used with Nanite" material flag that could occur while using the material editor and previewing static meshes simultaneously.
-
Change shader parameter metadata layout hash to use xxhash64 instead of GetTypeHash (the latter is not intended to be persisted across sessions); this fixes occasional parameter struct layout hash mismatches between cook and runtime.
-
Fixed a deadlock when losing connection to ODSC server.
-
Make FTargetPlatformManagerModule::ShaderFormatVersion thread safe
-
Added safety code that prevents Material Functions from saving expression collections with nulls in them, causing continuous material invalidations on PostLoad().
-
Materials: Fixes MaterialTextureScale generating invalid data for materials with world position offsets Disables WPO when rendering in RenderMaterialTexCoordScales. Fix wrong UV density results from alpha channel in FMaterialUtilities::ExportMaterialUVDensities() by clearing with FColor::Transparent instead of FColor::Black * Restore bNullifyWorldSpacePosition logic from CL 2955403 lost in merge commit CL 3019494 #coderview jon.cain
-
Added null check to FHLSLMaterialTranslator::GetMaterialEnvironment() to avoid crashing when a referenced Parameter Collectino fails to load (e.g. no longer exists).
-
Fixed occasional crash when trying to create the preview of a deleted expression.
-
When abandoning compilation via ShaderCompileWorker due to an unexpected termination, forcibly terminate all worker processes and delete any files which said processes have already output. All pending jobs will be re-executed locally so these outputs are not needed. This fixes a rare cause of DDC corruption whereby on re-starting the workers jobs can be associated with incorrect results.
-
Fixed crash in material editor stats, when preview material instances get GCed
-
Fix coat energy conservation in ReflectionEnvironment shader
-
Fixed regression with UMaterial::RecursiveGetExpressionChain introduced in 33967097
-
Fx crash in UMaterialEditorInstanceConstant::ClearInvalidParameterOverrides() triggered when Parent is null.
-
Fixed crash by removing debugging data that was used to printing missing expressions on material function post-load.
-
Don't display material parameters in the Instance Editor if they are marked as using custom primitive data. - CPD parameters pull their data from the primitive, not from the material so displaying these parameters for the user to edit was confusing since they wouldn't do anything. - Cache off transient state on the UDEditorParameterValue on whether or not this is a CPD parameter. - Pull that info from the parameter metadata if PrimitiveDataIndex != INDEX_NONE - Adds helper function UsesCustomPrimitiveData(UDEditorParameterValue* Parameter) that determines if the parameter uses CPD. [RN] minor, Rendering / Materials and Shaders
-
Add check for null ParameterCollections references in translation data fetched from DDC and updated DDC key generation. - When null ParameterCollections are found in material translation data fetched from the DDC, translator will run again locally to re-translate the material and push new results to the DDC. - The material translation DDC key now includes project name.
-
Added calls ConditionalPostLoad() to texture assets referenced by parameters in Material Function when it is loaded, and made sure that ConditionalPostLoad() is called on layers and blends from Material Instances when loaded even outside of the editor.
-
Bug Fix: [ShaderCompiler] Ensure that AutogenShaderHeaders.ush exists and is up-to-date in CompileGlobalShaderMap.
Deprecated:
- Deprecated UMaterialExpression::GetInputsView() in favor of making GetInput() the only way to access all inputs in a material expression. To facilitate iteration, this change introduces FExpressionInputIterator that only provides a convenience layer on top of UMaterialExpression::GetInput() This change makes code more robust and consistent and enables future further simplifications & optimizations.
Nanite
New:
-
Add "Enable Tessellation" option to materials and the ability to override it in material instance constants, making the enabling of Nanite Tessellation in a material explicit, because previous attempts to automatically determine if displacement was effectively enabled resulted in bugs/issues.
-
The Nanite streaming pool is now allocated as a reserved resources (r.Nanite.Streaming.ReservedResources) on RHIs that support it. This allows it to resize without a large memory spike from temporarily having two version of the buffer in memory.
-
Added the ability for the streaming pool size (r.Nanite.Streaming.StreamingPoolSize) to be adjusted at runtime, for instance in game graphics settings.
-
The Nanite streamer now adjusts the global quality target dynamically when the streaming pool is being overcommitted. This makes it converge to more uniform quality across the screen in those scenarios.
-
Disable async rasterization for Lumen Mesh Card pass and Nanite custom depth pass as it was causing large stalls while waiting for previously scheduled work in the async queue to finish.
-
Improved performance of Nanite tessellation patch splitter and rasterization shaders on console platforms.
-
Optimization: Added sorting of Nanite rasterizers (r.Nanite.RasterSort) to increase depth rejection rates for masked and PDO materials.
Bug Fix:
-
Fixed a bug that could cause the Nanite rasterizer to attempt to use shader permutations that were not cooked, resulting in asserts when displacement was used for Nanite materials in the project.
-
Fixed an issue that could cause triangles to disappear when rendering clusters with multiple materials and at least one of those materials using masked or pixel depth offset.
-
Fixed an issue where the Nanite builder could crash if the input mesh had no UVs
-
Fixed an issue where the material preview would show the world grid material when using Nanite custom mesh
-
Fix an issue where enabling tessellation on a Nanite material could result in compiling vertex programmable hardware rasterization shaders that could never be used.
-
Fix disabling of programmable rasterization for Nanite skinned meshes.
-
Fix an issue where toggling
r.Nanite
at run-time could cause all Nanite to render with a single material. -
Fix an issue where the "Actor Hidden in Game" option would prevent the editor selection outline for Nanite objects from rendering.
-
Fixed an issue where the GPU readback buffer for streaming requests could overflow for very demanding renders. The size of the buffer is now adjusted dynamically based on demand.
-
Fixed some issues when rendering Wireframe where Nanite objects would be incorrectly colored according to their selection status.
-
Fix a bug where the Substrate outputs would get mixed up for Nanite compute shaded materials when base pass velocity is disabled.
-
Fix a bug where the cooker would cook shader maps with the wrong DDC key if the project and platform supported Nanite but the machine running the cook didn't have support for 64-bit atomics.
-
Fix bad approximation for barycentric derivative in the nanite tessellation code path. The original code didn't take depth change into account, which could lead to bad derivatives. This was very clear for nanite landscape where the typical oblique view of landscape meant that we would often underestimate world positon derivatives.
-
Fix a bug where TexCoord1 in a Nanite material would always be 0 for Masked Opaque with no displacement or WPO.
-
Fix a bug where all Nanite will render for a view with ShowOnly primitives enabled, but has an empty list.
-
Fix custom depth rendering in right eye when Instanced Stereo is enabled with Nanite objects in view.
-
Fixed Nanite meshes disappearing when all lighting channels are disabled.
-
Setting the CVar "r.CustomDepthTemporalAAJitter" to 0 now works as expected for Nanite custom depth rendering.
-
Fix bugs with motion vectors on Nanite objects that have materials both with and without World Position Offset when the Velocity Pass is set to "Depth Pass".
-
Fixed an issue with Nanite hardware rasterization on hardware that doesn't guarantee wave size >= 32.
-
Fix a race condition bug where Nanite materials could randomly be mixed up throughout the scene.
Niagara
New:
-
Added Default Empty Emitter (DisplayName: Minimal Emitter) property to niagara editor settings. All 'Add Minimal Emitter' UI actions & menus try to use that before falling back to a fully empty emitter
-
Allow data interface inputs to be flagged as required, so they don't accept the pin default values and need to be wired to something
-
Change type of function signature output variables, as they can't have default values
-
Added a validation rule to check if a map for node is used in a cpu script (as it only works correctly on gpu at the moment)
-
Niagara Fluids: Update base emitter - Parameters toggled to only update on commit where appropriate. - Option to color the fire as well/instead of smoke added. - AO and normal output added for Baker output. - HV controls and material parameter promoted to Summary View. - Update templates to latest. - Add Colored Fire template. #virtualized
-
Added property diff tool support for some Niagara types
-
Added an export function for Niagara sim caches to save their data to disk. There is no importer, so this is a one-way trip to get the data stored within into an independent format like json.
-
Improve Slate render time for large systems by wrapping the overview graph node contents in invalidation panels
-
Reset sequencer speed when recording a cache and it's in reverse mode
-
Fixed tooltip and search keywords for lerp operation
-
Improved debug hud ux
-
Added Rename rightclick menu & shortcut to scratch pad script UI
-
Improved reference count widget in parameter panel with detailed tooltip info. It now shows reads and writes separately and on hover shows a details breakdown where each read or write occurs.
-
Improved sequencer sim caching:
-
Allow scalability override per cache track
-
Allow locking of cache tracks to prevent unintentionally overriding a cache asset
-
Display system name inside cache assets
-
Disable sequencer looping when recording
-
-
Niagara Graph wiring style is closer to Blueprint wiring style (tangents & hovering connections)
-
Added a validation rule to make sure some modules are only used once per script
-
Added a new module to play looping audio. This is similar to the existing "persistent audio" module, with the difference that there can be multiple "play looping audio" modules per emitter and only one "persistent audio" module.
-
Added support for custom module wizards that can generate scatch pad modules
-
Added wizards for data channel read and write modules
-
Renamed 'Empty' emitter template to 'Minimal' - Updated Minimal emitter description - Changed "Add empty emitter" menu entry to "Add minimal emitter", and changed the tooltip to mention that the minimal emitter is specified in Niagara settings, as well as to include the description of the selected asset. This is supposed to close the gap in understanding what's happening #changelist validated #virtualized
-
Niagara GBuffer module: Maps particle position to screen space and queries color from the opaque buffer. UVs can also be manually defined on the particle. #virtualized
-
Exposed Niagara validation rules api
-
Some improvements to the HWRT async traces within Niagara. Adds support for inline HW traces, where supported, through a compute shader (in some artificial tests it results in 50% performance improvement, but results will vary). Also fixes up collision group masking.
-
Allow enum properties to be display as segmented button widget. Any enum property that is annotated with the "SegmentedDisplay" meta tag will use this new widget instead of a combo box dropdown in the details panel.
-
Allow static variables to be linked to non-static inputs of the same underlying type
-
Effect Types support being opened in read-only mode.
-
Made new emitter assets inheritable by default
-
Improve Content Browser tooltips for Niagara asset types
-
Added integer-based equal/not equal ops for enum graph pins
-
Allow individual module inputs to opt out of the "immediate update" mode when the user is typing. This is mainly for inputs like grid size that cause a big lag spike when the whole system needs to adjust with each keystroke.
-
Remove "experimental" tag from Niagara sim caching plugin and enable by default
-
Added a wizard to spawn particles from data channel entries
-
Surface DI function descriptions as tooltips in search menu
-
Updated occlusion DI functions for better consistency when it comes to naming and tooltips
-
Added getter and setter functions for geometry collection data interface. Allows you to get and modify the transforms for all the elements in a collection. Also updated existing functionality to work with lwc coordinates.
-
Added some initial system templates for lightweight emitters. #virtualized
-
Nicer names for debug capture tabs
-
Added Quick Init widget to the Niagara NDC Write node
-
Added Read-Only support for Niagara Script assets
-
Niagara dynamic input: Add dynamic inputs for Distance to Camera and Camera Fade. #virtualized
-
Niagara: Add bias control to curl noise force #virtualized
-
Niagara Dynamic Input: Added Custom Position from Bool #virtualized
-
Niagara Module: Add Debug Draw utility module to draw lines, boxes or spheres on particles. #virtualized
-
Niagara Fluids: Minor clean up to the master 3D gas emitter including exposing the NDC parameter to the Summary. #virtualized
-
Added Deprecated & Hidden tags & View Options in the Niagara Asset Browser Hidden tag & Deprecated tag will stop an asset from showing up Deprecated tag can be used to return an error using validation.
-
Added Lightweight Asset Tag for Niagara. Available for Niagara Systems.
-
Add support for specular scale with the simple lights. Includes support for Niagara to set the attribute per light through the light renderer.
-
Add ForceCompile option to Niagara Scripts #contrib 8101
-
Made implicit type truncations explicit
-
Removed deprecated kismet math library methods
-
Fixed some bugs caused by incorrect type conversions
-
Made several properties on the cached Niagara Script data Transient. This prevents conflicts with deterministic DDC results (DDC-Verify) and reduces the size of our DDC payload substantially (about 50% smaller).
-
Niagara Module: Add AsyncGPUTrace utility. This module uses HWRT to find the first hit along a user defined ray. #virtualized
-
Made severity of invalid namespace writes in niagara scripts a plugin setting
-
Automatically add struct types of called DI functions to hlsl definition #contrib 9887
-
Added duplicate User Parameter rightclick action in User Parameters panel
-
'Divide' will now be preselected when typing '/' in Niagara Scripts
Bug Fix:
-
Implicit dependency tracking with niagara assets for iterative cooking. Core responsibility is now on the NiagaraSystem which calls into the NiagaraScript & NiagaraShader to get the necessary data hashed. Also includes the per-asset dependency tracking to handle per-platform shader platform details.
-
Fixed a bug where scratch pads didn't always enable the apply button after a change
-
Cleaned up logging when exceeding primitive counts with the NiagaraDataInterfaceRigidMeshCollisionQuery
-
Flush the ShaderFileCache when we are force compiling a niagara system when r.ShaderDevelopmentMode is enabled. Allows quick iteration of DI ush files during development.
-
Reduce calls to USoundCue::IsLooping() with the Niagara audio player DI
-
Fixed a bug where undo/redo didn't work correctly for some emitter properties
-
Fixed a bug that prevented users to edit any complex structs in user parameters (e.g. matrices)
-
Re-enable fixed error messages for unset variables being read
-
Fix for default values for variables using StackContext. Before, the variables would be left as default initialized to 0. Some modules will now have subtle behavioral differences with variables having better default values in their spawn script (quats will be 0,0,0,1 instead of 0,0,0,0), only to be assigned newer values in update; but also, the use of StackContext within update modules will have their defaults properly set.
-
Add bFilterByObjectType option to the RigidMeshCollisionQuery DI to allow people to try what seems to be a more reliable mechanism for controlling which rigid bodies get added to the query.
-
Improve GetClosestPointMeshDistanceField so that it will produce valid results when the search point is outside of the volume of the mesh distance field
-
Reflect parameter removal to AffectedScripts when stack function inputs are reset to their base
-
Small improvements to component renderer runtime to avoid string creation and static fname creation each frame
-
Fixes presizing buffer for bones and sockets when using Niagara's skel mesh DI
-
Clear out resolved data on scripts belonging to standalone emitters when they are updated from the transient system during editing. This prevents an issue where referenced objects parented to the transient system could be getting saved (incorrectly) into the standalone emitter.
-
Additional protection for guarding against crashes when compiling (with the old compilation mode) Niagara systems and they are being edited at the same time. Code was in place to catch emitters being deleted, but wouldn't catch emitters being added or reordered (which would cause crashes later in the precompile).
-
Incorporate the script path into the ddc key for the niagara gpu scripts to prevent non-deterministic DDC results
-
Limit the Water DI to no longer support querying depth related information as it requires accessing data that is unsafe from the concurrent task. Two new properties have been added to the DI bEvaluateSystemDepth & bEvaluateSystemDepthPerFrame which indicates that the depth should be sampled from the water body on the game thread using the system instance. Also, legacy behavior can be restored through the cvar fx.Niagara.Water.DepthQuerySupported.
-
Fixed a crash when checking the paused state on a recently disabled Niagara component
-
Fix for disabling an override from an NPC Instance not being reflected immediately
-
Fix for intermitent crash with NiagaraWorldManager getting out of date delegate broadcasts for system edits
-
Fixed compile error when using "draw torus" function in gpu emitters. It's still not doing anything, but at least it compiles without error.
-
Replace adhoc traversal of graph nodes with UNiagaraGraph::BuildTraversal() when deleting modules. Avoids potential combinatorial explosion leading to a hang.
-
Fixed problems with module version upgrades:
-
Fixed crash when setting bool values from python
-
Fixed old inputs creating a warning after version upgrade
-
Fixed a crash when using the quick fix version upgrade option
-
-
Fixed a crash when undoing parameter type changes
-
Provides a fallback path to the parameter map traversal to ensure that we get accurate aliased variables in the history. Without the aliases in place we can miss resetting the chunk cache in the translator which leads to variables leaking between emitters and between the emitter and the system scripts. This was typically seen using a dynamic input in both system and update scripts (Multiply Float).
-
Fixed a bug with the barycentric coordinate function
-
Added function to compare two numeric values with an error tolerance
-
Update normal extraction from (non VT) landscape with Niagara DI. Not all platforms seem to handle SampleLevel with an explicit index offset, so stole the implementation from the landscape PS using a pair of gathers instead.
-
Added a fix for inaccurate quat interpolation in spawn scripts
-
Fixed a bug where hitting undo when editing a color user parameter resulted in a crash
-
Fixed a bug where clicking during a cache recording could cause dropped frames from Slate throttling
-
Make sure that the translator collapses attributes that are going to be overlapping in script execution (same name and equivalent type)
-
Fixed a bug where recording a cache didn't work when the editor window lost focus
-
Fixed a bug where new parameter collections were only visible in Niagara systems after an editor restart
-
Fixed a bug where the context menu in module scripts would show invalid conversion operations for primitive types
-
Adjust MIC creation for niagara renderers to avoid unnecessary allocations of MIC. This restructure fixes a problem with the AsyncTask compilation mode where a previously created MIC would interfere with the cook because the unused version would be cached, and wouldn't get reprocessed after it was recreated.
-
Fixed a crash where the niagara system finalize task could be called from another object's postload method
-
Validation fix for iteration source DI writes
-
Fix for DI binding in cooked builds caused by the binding information not being serialized
-
Fixed mesh renderer thumbnails causing a crash when multiple mesh entries without any assigned mesh assets (user param bound for example) exist.
-
Small optimization to the ticking of NPC. Cache the MPC instance, if one is referenced, rather than looking for it on the world each tick
-
Fixed a bug where renaming a parameter in a module script would in some edge cases not correctly propagate to existing usages
-
Fixed missing tooltip for set attributes node when linked to a parameter definition asset
-
Fixed ui bug in param definition editor
-
Fixed a crash when using a Data Channel asset without a type set
-
Clean up dynamic string allocations when processing NPC set functions
-
Fixed an issue where inputs with BroadcastValueChangesPerKey=true would not apply entered math expressions correctly
-
Fix for user exposed curves in cooked builds not getting their LUT range copied over properly.
-
Fix for GPU emitter's still working (while complaining about compilation) when event scripts are present
-
Fixed a bug where undo wouldn't work when deleting a parameter from a module script
-
Ensure that scripts that fail to compile because of missing function implementations (like the deleted native fast path stuff) will invalidate the compile results. This avoids trying to optimize the byte code which would fail.
-
Make sure to PostLoad the RendererBindings so that they can be sorted & searchable in cooked builds. Addresses some sporadic issues where static bools used for bindings might not be found and assumed to be false.
-
Clean up handling of PerformanceMode within the niagara toolkit to behave better when toggling states which would enable/disable it (the EVVM) -toggle button is now hidden when the current system is unsupported -UI won't crash unexpectedly when you muck around with enabling/disabling things
-
Fixed a bug where adding module inputs to the emitter summary was not captured in the transaction buffer
-
Fixed crash when Undo/Redoing deleting an emitter while in Scalability Mode
-
Fixed crash when undoing creation of scratch pad
-
Fixed GridLocation learning content emitter being inheritable. Templates & Learning Content shouldn't be inheritable.
-
Made Niagara stack note header wrappable & reduced max width for note tooltip as it was just too wide
-
Readded missing rightclick option for static switch output pins to move up and down
-
Fixed emitter nodes in emitter assets not keeping their collapsed state
Deprecated:
- Deprecated vortex velocity module
Path Tracer
New:
-
Path Tracer: Add a cvar to quickly override the use of reference Depth of Field
-
Path Tracer: Optimize the handling of glass materials in the path tracer.
-
Path Tracer: Give control over background alpha
The new cvar r.PathTracing.BackgroundAlpha can be used to control the alpha value written for background pixels (including when using a skylight visible to camera). The default value is 0.0 but can be changed to 1.0 to make the background opaque.
-
Path Tracer: Add an opacity cutoff to volume tracing so that ray marching can stop as we approach full opacity.
-
Path Tracer: Add support for missing legacy shading models when using Substrate Subsurface and two-sided foliage legacy shading models were not being handled properly.
-
OpenImageDenoise: Add alpha denoising and change albedo/normal buffers to 16 bits
-
Add analytical derivate support for vertex normal in world space.
-
Path Tracer: Optimized dispatch of successive bounces
-
OpenImageDenoise: Update to v2.3.0
- When using the r.OIDN.DenoiseAuxilaryInputs cvar, use the new highest quality network weights. The default remains the balanced mode.
Bug Fix:
-
Path tracing denoiser support update: 1. Change variance output for radiance and albedo from population std to the std of the sampling distribution of mean. Change that for normal to output the std of the mean length. 2. Stop path tracing variance buffer update in editor after denoising has been applied.
-
Path Tracer: Fix inconsistency in the handling of skylight intensity between path tracer and raster
-
Path Tracer: Fix artifacts from solid angle sampling of small rectangles
-
Fix analytical derivative with PT. The clip positions were divided by .w prior to compute barycentric derivatives. This was causing barycentrics derivatives to be incorrect (i.e., constant) as w=1.
-
Path Tracer: Fix possible NaNs in specular highlights when Anisotropy is set but Tangent is not
-
Path Tracer: Fix unlit materials not being able to emit more than ~64k radiance values.
-
Path Tracer: Fix light functions on directional lights
-
Path Tracer: Fix alpha channel not accumulating to 1.0 through dense volumes in some cases.
Postprocessing
New:
-
Allow public access to new lens distortion LUT.
-
Add project setting "Enable virtual textures for Post Processing Materials". This allows virtual texture sampling in post processing materials but without any guarantees that things will work well. Note that there is no virtual texture feedback from the post processing passes so the VT will only have good resolution pages in the cache if some other system is already triggering feedback.
-
Adding ECVF_Scalability to r.LUT.Size. Default remains the same = 32.
-
Add Medium-High TAA mode (3) Equivalent filtering quality to Medium, adds anti-ghosting Slightly slower than Medium (1), much faster than High (2)
-
[Engine Content] Set bloom kernel to default to 512 px. This comes up often as a opportunity for optimization.
Bug Fix:
-
Raised the priority of propagate alpha in a non-final tonemap pass, so that subsequent operations can retain full precision and reliably use scene color alpha.
-
Fix SpiralBlure - SceneTexture has border artifacts when applied to translucent materials by clamping the min max uv by the viewport bilinear filtering min max. #virtualized
-
Fix post process ambient occlusion border filtering out of range. Clamp the sampling UV to ViewportMin/Max bounds. Mobile ignores this clamp as it does not use half resolution normals and Downsampled AO created in the setup.
-
Fixed alpha channel update with after motion blur translucency composite.
-
Fix a bug where upscaling post-motion blur translucency would use point sampling instead of bilinear filtering in the composite.
RHI
New:
-
Use normal D3D12 RHI deferred deletion queue to manage explicit descriptor heap reuse, instead of relying on frame fence * Prevents memory bloat when BeginFrame/EndFrame is not called periodically
-
Implement support for reserved textures with mip maps in D3D12 RHI. Allow reserved render targets and depth buffers.
-
Add a FGPUDebugCrashUtilsCS variant that triggers shader assert * Use
gpudebugcrash assert
console command to trigger -
Change the CHECK_METAL_COMPILER_TOOLCHAIN_SETUP define to a cvar Metal.CheckCompilerToolChainSetup
-
Deprecate FRayTracingShaderBindingsWriter and use FRHIBatchedShaderParameters instead in the high-level rendering code
-
VulkanRHI: Enable bindless and ray tracing pipelines by default in Vulkan SM6.
-
VulkanRHI: Vulkan SDK upgrade 1.3.290.0.
-
D3D12: Add mode to set stable power state on device creation instead of only during profiling This can be useful for in-editor benchmarking on PC by reducing the influence of adaptive GPU clock rate on the frame time.
-
Input latency stat computation enabled for DX11/DX12 using IDXGISwapChain::GetFrameStatistics and correlate the input reading timestamp to when the frame is handed to the display
- New command line option r.VsyncInformationInsights that will show bookmark in Unreal Insight for when the input sampling happen and when the Vsync event happen in the timeline.
-
Groundwork for using FRHIBatchedShaderParameters instead of FRayTracingShaderBindings when binding ray generation shader resources
-
Move some of the generic parts of D3D12DiagnosticBuffer into a cross-platform base in RHICore * The diagnostic buffer is now always created on startup, independently of GPU breadcrumbs
-
Added support for asynchronous pipeline state caching, which is enabled by default. It can be disabled to restore the old behavior with a console variable ("r.pso.EnableAsyncCacheConsolidation").
-
Add MetalOptimizeBySize setting for MetalShaderFormat
-
Support GPU diagnostic buffer binding when using static root signature
-
Add rhi.Metal.MaxBucketSize cvar to restrict the MaxBucket Size of the Pooled Buffer
-
Implement basic support for reserved volume textures in D3D12 RHI
-
Add RHI unit test for binding UAVs to graphics stages - Test basic UAV write from pixel shader
-
Allow UAV binding in Vertex Shaders in D3D11 and D3D12 RHIs
Bug Fix:
-
Fix Metal freeze when cooking on Windows
-
Fixed Vulkan Validation Error for SceneColorMS texture not getting VK_IMAGE_USAGE_SAMPLED_BIT because it's memoryless
-
Fix diagnostic buffer root parameter slot initialization for static root signatures
-
Defer residency update for reserved resources as their residency handles are only known on the RHI Submission Thread * Fixes crash due to race condition between parallel translation and tile mapping updates
-
Add padding to ShowFlags to fix a bug when building them for shipping
-
Read the metal windows native toolchain from the right path
-
Zero the FD3D12ResourceDesc struct to fix a memory leak in the D3D12 RHI when compiling with Clang.
-
Eagerly flush PayloadsToHandDown in FD3D12DynamicRHI::ProcessSubmissionQueue when the list grows beyond a certain threshold
-
Metal does not support ETC2_11 on 3D textures
-
Fix validation code in SetRayTracingShaderParameters() that previously did not account for padding in FRHIShaderParameterResource
Substrate
New:
-
Add support for merged light data on mobile with Substrate.
-
Improve Substrate Fuzz look when mixed with SSS material. Fuzz is now always on top of SSS surface.
-
Hide IsThin property on material instance when Substrate is disabled.
-
Improved Lumen support & stability with Substrate.
-
Improve Substrate's specular profile look with env. lighting.
-
Make ShadingModel override on material instance only visible if parent material have a SubstrateShadingModel node.
-
Add Substrate support for MegaLight.
-
Add colored refracted light support for Lumen reflection on object with non-zero transmittance.
-
Force Substrate's max closure count to 1 on SM5 platforms.
-
Add support for imported materials with Substrate (MDL, AxF, USD, ...).
-
Add raytracing debug view for visualizating Substrate's material properties.
Bug Fix:
-
Remove compilation of anisotropy shader when substrate is enabled.
-
Fix incorrect legacy SSS profile classification
-
Fix missing preexposure on ReflectionEnvomnemntPixelShader, causing indirect lighting to be too dark.
-
Fix runtime generation of energy conservation table.
-
Substrate now works with RTTranslucency similarly to the legacy path.
-
Readd energy conservation correction rough diffuse. Without this correction the diffuse value at grazing angle are too low, which is problematic when doing accurate material matching. This correction is disabled for lower platforms.
-
Fix material compilation failure with Substrate with Nanite displacement.
-
Fix hair strands tangent output when using hair attribute output in tangent space with Substrate.
-
Fix hair (voxel) shadow causing incorrect shadow.
-
Fix Substrate shader compilation issue when running -featureleveles31 with material having glints.
-
Fix incorrect dual source blending on PS4 with Substrate due to incorrect output format for the second RT.
-
Fix missing SSS on surface with precomputed lighting when Substrate is enabled.
-
Fix numerical precision causing incorrect shading results on certain platform when opaque rough refraction is enabled with Substrate.
-
Fix unlit Lumen material receiving lighting.
-
Fix LTC-based sheen integration with rect light. The LTC matrices were inverted and had a missing scaling factor.
-
Fix missing translucent in Lumen's reflection with Substrate.
-
Fix incorrect eye / hair material conversion with Substrate.
-
Fix DFAO upsampling not using the correct UV on stereo rendering with Substrate.
-
Fix missing custom tangent input when converting eye material using material attributes.
-
Fix Substrate with Nanite compute material.
-
Fix incorrect output texture format during SLW base pass with Substrate, causing SLW to be incorrect.
-
Fix Substrate shader compilation with terrain layer blend node and material attributes.
-
Fix EnergyConservation tables format not supported on certain platforms. This CLs adds RG8/R8 format support for the energy conservation tables.
-
Fix uninitialized rect light output vector causing NaN value on Substrate Glint material.
-
Fix incorrect legacy model detection causing SSS material with Fuzz to be converted into legacy wrap SSS.
-
Fix incorrect PSO precaching on Substrate classification shader with WaveOps permutation.
-
Change ThinTranslucent legacy shading conversion. The conversion is implified, and now use a simple transmittance color lerp, rather than using LAB + MFP lerp.
-
Fix dual source blending with Substrate on the mobile rendered.
-
Fix Substrate output with hair strands geometry rendering on certain platforms.
-
Fix Legacy SSS profile having incorrect roughness.
-
Fix decal material creation with Substrate. The domain and blend mode where not set correctly when introducing a ConvertToDecal node.
-
Fix decal on mobile forward rendering with Substrate.
-
Fix material conversion when the input normal is not a float3/float4.
-
Fix cluster shading with substrate when viewport is resized.
-
Fix NoL being applied twice on eye shading causing a darkerning compare to legacy shading.
-
Fix missing SSS profile on eye when using material attributes and fix incorrect shadow with VSM with SSS profile
-
Fix incorrect material's connected inputs, causing decals to select an blending mode at runtime in cook build with Substrate.
-
Fix missing diffuse albedo on SSS surface in Lumen hit lighting shaders.
-
Fix specular occlusion being applied on specular indirect lighting, while it should only be applied on the rough specular indirect lighting, during the indirect lighting composition with Substrate.
UnrealLightmass
Bug Fix:
- Bumping down an assertion in Lightmass.cpp to an ensure when adding a material with different export settings
Simulation
New:
-
[NetworkPhysicsComponent] Refactored the NetworkPhysicsComponent to run with a proper async physics flow.
-
[NetworkPhysicsSettingsComponent] Implemented the NetworkPhysicsSettingsComponent to as a way to set individual settings for networked physics per actor.
-
Added a new callback OnPostInitialize_Internal() in Chaos::ISimCallbackObject, which is only called once, on the physics-thread after the first initial input data has been marshalled from the game-thread.
-
[NetworkPhysics] Don't automatically initialize RewindData from NetworkPhysicsComponent unless it's using resimulation.
-
[NetworkPhysics] Predictive Interpolation replication mode can now perform rotational correction via transform shifting, instead of only via angular velocity.
-
[NetworkPhysics] Predictive Interpolation replication mode now apply transform shift in a way that overcome friction and the transform shift can be applied to other connected particles.
-
[NetworkPhysicsComponent] Reliable network flow in NetworkPhysicsComponent allows the user to to mark input/state data as important and have those sent reliably, works alongside the unreliable / unimportant data.
-
[NetworkPhysicsComponent] Added the virtual FNetworkPhysicsData::CompareData function that can be used to trigger resimulations if the data (input or state) was mispredicted on the client.
-
[NetworkPhysics] Implemented settings in the physics resimulation flow to further allow optimizations by disabling individual caches of data that might not be needed for certain games/projects, following changes made:
-
Deactivated FEvolutionResimCache by default, API in FPhysicsSolverBase to toggle on and off and the normal EnableRewindCapture call will enable it if the parameter for it is true.
-
Put in CVar, enabled by default, to be able to disable FPushPhysicsData dirty proxies from being cached in history: p.Resim.CachePushDataDirtyProxies
-
Put in CVar, enabled by default, to be able to disable FPushPhysicsData async inputs from being cached in history: p.Resim.CachePushDataAsyncInputs
-
Put in CVar, enabled by default, to optimize RewindData: p.Resim.RewindDataOptimization
-
-
Rely on FRewindData for stepping through non-resim objects histories if FEvolutionResimCache is not enabled.
-
[NetworkPhysics] Implemented smooth kinematic replication via the Predictive Interpolation replication mode.
-
[NetworkPhysics] Implemented logic to apply positional correction as a transform shift in the Predictive Interpolation replication mode, as opposed to the already existing flow to apply the positional correction as a velocity.
-
[NetPhysics] Improvements to the runtime correction logic in the resimulation replication mode, mainly to overcome friction while doing smaller corrections.
-
[NetworkPhysicsComponent] The NetworkPhysicsComponent can act as a local pawn by setting UNetworkPhysicsComponent::SetIsRelayingLocalInputs, which is useful for server-side AIs or non-pawn controllable actors on the client.
-
[NetworkPhysics] Refactored the physics replication cache to run a proper async flow between physics thread and game thread.
-
[NetworkPhysics] Don't perform transform shift corrections on connected particles that also replicate physics via the Predictive Interpolation or Resimulation replication modes. Allows multiple replicated physics-objects to replicate individually.
-
[NetworkPhysics] Implemented logic to trigger resimulations from desync in rotation, linear velocity and angular velocity, alongside the already implemented positional desync. Settings in Project Settings -> Physics -> Replication -> Physics Prediction -> Resimulation Replication Settings, or per actor via the NetworkPhysicsSettingsComponent.
-
[NetworkPhysics] Implemented Chaos::ISimCallback FirstPreResimStep_Internal(int32 PhysicsStep) to get called on when a resimulation start, requires ESimCallbackOptions::Rewind.
Bug Fix:
-
[NetworkPhysicsComponent] Made NetworkPhysicsComponent run properly without RewindData being initalized.
-
[NetworkPhysics] Fixed a bug with render interpolation after a physics resimulation which would result in a large visual desync.
-
Allow RewindData to run with variable tick physics.
-
[NetworkPhysics] Made physics tick offset synchronization handle when the phsics solver resets and tick numbers start again from 0. Happens when loading a new level for example.
-
[NetworkPhysicsComponents] Improved handling of client/server desync in NetworkPhysicsComponents with following changes:
-
Inputs sent from client and server are sent from latest processed frame, with redundant inputs back in time.
-
If inputs arrive late to the server and the buffer is empty, inject the input to be used for the next tick.
-
If client receives target states from the server before the client has simulated the corresponding tick, compare that state after the client has simulated the tick.
-
Deactivate logic that checks if all NetworkPhysicsComponents have inputs and states when performing a rewind, this often stopped resimulations from triggering due to not all sim-proxies having all data aligned for one single frame.
-
Allow larger time accumulation on the game thread towards fixed async physics when having physics prediction enabled.
-
Rebalance time dilation and physics tick synchronization corrections
-
-
[NetworkPhysics] Force correct state to be applied when setting a resimulation object to sleep.
-
[NetworkPhysics] Fixed a bug where applying state for particles during a resimulation via FEvolutionResimCache would not update kinematic particles.
-
[NetPhysics] Optimized memory by only creating render interpolation API for physics proxies that actively use it.
-
[NetPhysics] Fixed bug where if two physics ticks had been processed between a game tick, the error correction in render interpolation would be wrong due to not decaying the error in discrete steps, producing inconsistent render interpolation corrections after a resimulation.
-
[NetworkPhysics] Set sleeping state on all connected particles when the predictive interpolation replication wants to sleep.
Physics
New:
-
Cloth Editor: adding two ways to hide/show triangles in the paint tool: - A new HideTriangles brush mode that will hide triangles that are brushed - A new tool property that is a list of Patterns and whether each one is visible or not Limitations: - Hide/show information does not come along when switching between 2D/3D modes - Checkbox interface for selecting which patterns to show is clunky - Manually hiding triangles via brush then unchecking all patterns will clear the manually hidden triangles Also adding an optional white-red mode to visualize the weight map. Painting an all black object in 3D with a dark grey background is pretty annoying.
-
Changed the tolerance used when we calculate the normal of a triangle to 1.e-8f (it was using 1.e-4f ). During cook we are accepting triangles with a squared area less smaller than 1.e-4f. There are further improvements to make in this area
-
Cloth Remesh node: do the 2D -> 3D projection for each pattern individually to handle patterns that might overlap in 2D space
-
Gravity property can now be enabled/disabled at runtime for Geometry Collections
-
Added support for Copy On Write for Managed Array Collection
-
Cloth Editor Remesh Node: if the Cloth Collection input has proxy deformer data, remove that data from the output and warn the user that we are doing so
-
[Chaos Visual Debugger] Refactored playback logic refactor to improve stability and lay the ground work to support different sync modes.
-
[Chaos Visual Debugger] Added a new button to the solver playback controls that allows you to enable or disable its syncing with other tracks.
-
Reduced Geometry Collection Physics Proxy runtime memory footprint by about 320 bytes
-
Cloth Asset and Legacy Cloth: Added concept of Inner and Outer Lift and Drag. This allows setting different lift and drag coefficients for when air is hitting the frontface vs backface of the cloth. * Cloth Asset only: Added ability to specify WindVelocity in different spaces rather than just world space.
-
Cloth Editor: add a new "WeightMapNode" that will supersede AddWeightMapNode. Deprecate the old AddWeightMapNode. The new Node has only one set of vertex weights rather than two. The deprecated AddWeightMapNode still works in the graph but its properties cannot be edited and is no longer linked to the Weight Map Paint Tool. Users should migrate their weight map data out of the AddWeightMap nodes and into WeightMap nodes.
-
Added weight map support to Buckling Ratio on Chaos Cloth Assets.
-
New:** [Chaos Visual Debugger] Added Viewport option to go to specific locations by using a vector in string format (similar to how you can go to locations using the BugItGo console command)
-
[Chaos Visual Debugger] Added support to visualize the log output stream
-
Bug Fix:** [Chaos Visual Debugger] Made an speculative fix for a crash that can happen while playing back a recording with particles being individually destroyed before the entire solver is destroyed.
-
[Chaos Visual Debugger] Refactored the existing CVD Settings system. Now each category has its own settings object, and they can be saved independently of each other.
-
[Chaos Visual Debugger] Re-Implemented the show menu as a proper UE tool menu.
-
Added the ability to Show/Hide pins in Dataflow and set many existing Chaos Cloth Asset dataflow nodes to hide inputs by default.
-
[Chaos Visual Debugger] Added a way to start recording and auto connect as live session directly from CVD's UI, if you are in the editor and recording a PIE session.
-
[Chaos Visual Debugger] Added pop ups informing the user if an error has happened instead of silently fail (or just trigger an ensure).
-
[Chaos Visual Debugger] Added a commandline argument that can be used to start a CVD recording automatically on startup.
-
Cloth Editor: optional information in the Construction viewport - Numeric mesh stats (so far just triangle/vertex count) - Color-coded cloth patterns
-
[Chaos Visual Debugger] Initial Implementation of CVD as a standalone program. Now CVD can be built as an unreal program (in addition to being an editor tool).
-
Cloth Editor: remove secondary selection from Selection Tool. Allow importing secondary selection from input collection, to allow safe data migration.
-
ChaosFlesh: Add vertex selection set input pin into position target node for flesh asset setup
-
[Chaos Visual Debugger] Implemented a Scene Query Browser. This is a scene Outliner like window, just for scene queries with a set of features specific to browse recorded scene queries
-
The SetSimulatePhysics tooltip in PrimitiveComponent has been improved to cover all the derived classes as well, which might have slightly different behaviour(and currently tooltips can't be overridden in derived classes).
-
Dataflow Editor Tool Registry: a map from Node types to Tools that the Dataflow Editor can use. Also: - Replace UClothEditorContextObject with UDataflowContextObject in the cloth editor so that Cloth tools can be used in the Dataflow Editor - Dataflow Editor: get the input collection of the selected node and add it to the context object when a tool starts - Rename PrimarySelectedNode to SelectedNode and PrimaryRenderCollection to RenderCollection in UDataflowContextObject
-
Legacy Chaos Cloth: add FlatnessRatio to the config.
-
Dataflow: highlight "Deprecated" or "Experimental" nodes
-
Cloth Editor: disable mouse "flight controls" in the construction viewport. Only alt+mouse or WASD should move the camera.
-
Cloth Editor Preview: when reloading or changing the SkeletalMeshAsset, save and restore the animation state so that it doesn't always start playing from time zero
-
[Chaos Visual Debugger] Fixed a crash that can happen when a new solver is being loaded while scrubbing
-
Cloth paint tool changes - set default Strength to 1.0 - hook up Q/A hotkeys to cycle through brush modes - hook up W/E hotkeys to adjust Value property
-
Add additional solver stage stats to Chaos advance tasks, particularly for marshalling manager updates and rewind
-
[Chaos Visual Debugger] Added an option to override the playback framerate.
-
[Chaos Visual Debugger] Eliminated the use of material instance dynamic. CVD only needs to change the color value read by the material depending on the settings and the recorded data for any given particle, so now we store the color data as primitive data, so the material can just read it from the primitive itself.
-
[Chaos Visual Debugger] Re-implemented the CVD's mesh component pool system to be more uobject generic. Part of this work included improve how we generate unique names for the pooled components
-
[Chaos Visual Debugger] Moved more of the mesh generation process into worker threads
-
[Chaos Visual Debugger] Removed support for dynamic meshes. It has been over a year we don't use dynamic meshes in the visual debugger, and the code path as not been really tested since then. removing support now allows us to remove templatized code and make everything easier to read/maintain.
-
[Chaos Visual Debugger] Parallelized how we process the Tri mesh and Heightfield implicit object data. Now we process the vertex data in parallel when converting the data to a format we can use to create a static mesh.
-
Properties in dataflow node details are now read only when they are connected to another node
-
Dataflow: Move rendering code to Editor module
-
Add support for non-nanite fallback mesh for nanite geometry collections.
- To enable that, set EnableNaniteFallback on the geometry collection (defaults to off). Also strip geometry collection nanite render data when cooking for non-nanite platforms.
-
Exposed the Skeletal Mesh Component's ClothTeleportMode property to Sequencer and added a new HardReset mode which rebuilds the cloths.
-
[Chaos Visual Debugger] Fixed an issue where skeletal mesh bones movement are not recorded every frame .
-
Add "experimental" text to the context menu item for loading a Cloth Asset in the Dataflow Editor. This will signal to the user that the asset will be loaded in a different editor than the usual Cloth Asset Editor.
-
Enable opening Cloth Assets in the Dataflow Editor via content browser context menu
-
Dataflow Editor: - Allow changing the construction view mode while a tool is running, if the tool supports it - Make the Cloth Weight Map Paint Tool support this - If the tool does not support changing the view mode, follow the Cloth Editor behavior of shutting down and restarting the tool. (Initially the Selection Tool will have this behavior, but in a future CL we will likely enable changing view modes on the fly for this tool as well.) - If the tool requires a view mode that we are not already in, automatically change to a valid view mode before starting the tool
-
Added Geometry Collection component GetLocalRestTransform blueprint function
-
Geometry Collection using custom renderers now support the actor SetHiddenInGame flag
-
Dataflow Editor: PDI rendering callbacks for Contruction and Simulation viewports - Also implement Cloth viewport visualizations for the Dataflow Editor using this system - Fix UDataflowContextObject having a stale Selected Collection member
-
[Chaos Visual Debugger] Added a simple Recent Files menu
-
[Chaos Visual Debugger] Added the new Viewmode Lit Wireframe that was added to the normal level editor
-
Chaos:add per-body control of position/velocity/projection iterations. The iterations can be set on physics section of the detail panel. During solve of rigid bodies, an island group takes maximum of the iterations from all its particles as its iteration count.
-
Cloth Editor Weight Map Paint Tool: replace the change tracker for undo/redo. Rather than using the generic FDynamicMeshChangeTracker, we instead store changes to the weight map values as they would be stored on the Weight Map Node. This should allow the same change to be applied to different mesh configurations (Sim2D/Sim3D). This is a prerequisite for being able to change view modes while keeping the tool running and maintaining the undo history.
-
New:** [Chaos Visual Debugger] Added support to record disabled particles that are inside an active cluster particle. This allows record all updates of particles that are in a cluster union (and therefore disabled). Without this change these particles only got updated every 10 seconds which is the interval we have use between key frames. As this change is not free performance wise when a recording is active, this new data is gated it behind a new data channel that is disabled by default, and can be enabled as needed.
-
Chaos::add per-joint linear/nonlinear solver option to joints. It's available in physics editor of the constraint setting. It can be used for long thin objects when they are not solved correctly by the linear solver.
-
Make the Skeletal Mesh Component's ClothCollisionSource methods BlueprintCallable.
-
Added Dataflow Vector and Trigonometric math nodes using the general numeric type inputs
-
[Chaos Visual Debugger] Created a details panel customization to process the recorded Sim and Query filter data and present it like the collision response matrix used in the rest of the editor. This also handles conversion from Chaos formatted flags into the UE formatted flags (like the Collision Enabled enum).
-
[Chaos Visual Debugger] Created customization for the scene query collision response params to show the recorded flags array as the collision response matrix used in the rest of the editor.
-
[Chaos Visual Debugger] Created customization for the scene query object response params to show the recorded integer as a list of flags per object type
-
[Chaos Visual Debugger] Made Scene query visualization to use World priority instead of foreground by default, and exposed that as a setting on the existing visualization settings menu for scene queries.
-
[Chaos Visual Debugger] Fixed an issue where objects might incorrectly be unloaded if certain conditions are met. This is fallout of the fix for UE-214135. As part of that fix, now when a CVD file is loaded, if we get particle (or other) data outside a Solver Stage scope, we auto generate a Solver Stage entry named "In-Between" stage.
-
Cloth Mesh Selection Tool: - Add a "Clear Selection" action - Replace the Grow/Shrink/Flood actions with SelectionMechanic calls
-
Opening a dataflow graph asset directly will prompt a message to open concrete assets using such graph
-
Fixed a few Chaos ISPC per-kernel variables not having or not using the preprocessor define for the default value.
-
Chaos::add CVar for joint simd in scene simulation. Use "p.Chaos.Solver.Joint.UseSimd" to control if joint solver uses SimD. It might improve performance of the solver up to 15%.
-
[Chaos Visual Debugger] Fixed an issue where debug draw text is shown at the incorrect position if DPI scaling is greater than 1.
-
Add in-editor support for collision visualization for the Geometry Collections using nanite
-
Cloth Transfer Skin Weights Tool: add scale to transform gizmo
-
Dataflow: allow the FDataflowCollectionAddScalarVertexPropertyNode to assign weights to different vertex targets depending on the schema of the Collection passing through the node. This will require developers of different Collection types to opt in by registering their vertex types.
-
Cluster union component now exposes a way to disable damage from collision
-
[Chaos Visual Debugger] Changed default colors to be less harsh to the eyes.
-
[Chaos Visual Debugger] Reduced the Directional light from 10 to 4 Lux
-
[Chaos Visual Debugger] Added a post-processing volume to enable an ambient light cubemap. This is needed so geometry that is shaded, it is not shaded completely dark which makes it difficult to see.
-
Changed Kinematic Targets to store its rotation in single precision
-
KinematicTarget is not a template class.
-
Reduced Geometry Collection component memory footprint optimization by avoiding over allocation when creating attributes
-
Enabled rendering of root proxy meshes in editor for geometry collections when available ( Changes back to normal rendering when geometry collection is selected in the Fracture Editor )
-
Dataflow Editor: add mechanism to FDataflowToolRegistry to allow enabling/disabling commands when tools begin or end. This allows hotkeys to be used in Dataflow tools that are defined in other modules. - Also enable shortcut keys in Dataflow Editor Construction Viewport.
-
Cloth Editor: add ability to visualize surface normals in the construction viewport
-
Added new convexity-based clustering options to fracture mode and to the dataflow geometry collection auto-cluster node
-
Reduced memory footprint of the Geometry Collection component by 400 bytes by removing unnecessary data structures
-
Remesher: add an optional edge length scale function that can be used for adaptive-density remeshing
-
Added support for Array Inputs to Dataflow Nodes.
-
Cloth Editor: Enable ChaosClothAssetEditor plugin for Mac and Linux. This fixes being unable to create cloth assets on these platforms. Also fix Linux build errors.
-
Dataflow Editor: add customizable View Modes to the construction view. We provide default 3D and 2D views, but allow other modules to define their own as well. Also: - Implement rendering of FClothCollection output - Replace the default Construction View toolbar with one like the Cloth Editor
-
Cloth Editor Remesh Node: Add a Simplify option for Render mesh decimation. When enabled, this will use FSimplifyMeshOp rather than FRemeshMeshOp. The Simplifier uses QEM to prioritize removing vertices in flat areas to preserve curvature. The result is typically a lower poly count but less uniform mesh than FRemeshOp produces. Because of this, it's only enabled for the Render mesh.
-
New:** [Chaos Visual Debugger] Added support for recording and visualization of generic debug draw shapes either from C++ code using macros, or blueprints.
-
[Chaos Visual Debugger] Added Optional CVD Data Channels. This allows opt out of recording some types of data (like specific solver stages, or scene queries).
-
Added the ability to change the interpolation mode on a Cache Collection asset
- This can be used for more precise interpolation of rotation in very slow or fast replays
-
Cloth Weight Map Paint Tool/Node: allow weight map painting on Render vertices. The AddWeightMapNode now stores two sets of vertex weights: one for sim vertices and one for rendering. Changing the view mode while the paint tool is active will load the appropriate weight map from the node. There is also a drop-down selector for choosing which of the two vertex weights should be saved into the ClothCollection (or both.)
-
Added density debug draw for Chaos ( p.Chaos.Solver.DebugDrawDensity )
-
Dataflow Editor: add Analytics events for starting/stopping the Dataflow Editor
-
Added an AssignPhysicsAsset node to the skel mesh editor subsystem to handle editor scripting of modifying the physics asset for a mesh.
-
Improved collection of Dataflow fracturing nodes for Geometry Collections
-
Cloth Editor: disable mouse "flight controls" in the Preview viewport. Only alt+mouse or WASD should move the camera. Note this change was made previously for the Construction viewport, this one applies to the Preview viewport.
-
Cloth Selection Tool: add a flood fill deselect action: shift+ctrl+click will deselect all connected mesh elements
-
Chaos Cloth Asset: Added the ability to specify Velocity Scale and clamps in different simulation spaces (defaults to Reference Bone space, which was the previous behavior).
-
[Chaos Visual Debugger] Implemented a details panel customization to show Shape instance data and other Collision Geometry object data.
-
Managed Array Collections now support copy on write by being able to share attributes in memory until they are changed
-
Add grow, shrink, and flood buttons to the Selection tool
-
Added scalar math node using numeric generic inputs and outputs
-
Cloth Editor: remove references to DataflowComponent (unused in the cloth editor)
-
Move cloth editor tool headers to private. Rename ClothEditorToolBuilder to ClothEditorToolBuilders and centralize ToolBuilder classes for the cloth editor
-
Chaos Cloth: Added Velocity and Acceleration clamps. Similar to RBAN, the clamps are applied after the scaling.
-
All the constraint parameters are now set when switching profiles, and the function that is used to do this is no exposed so that it can be used more generally.
-
[Chaos Visual Debugger] Fixed an issue where the editor will tell you there are assets that need to be saved after using CVD by marking CVD Materials as transient.
-
ChaosFlesh: Add support for addition, removal and stiffness adjustment for dynamic springs. Add Gauss Seidel dynamic weak constraints. Rewrite Gauss Seidel weak constraints using new data structure. The new constraint can be setup via constraint manager actor. It's an experimental feature for now.
-
Added In editor collision visualization for Geometry collection not using nanite (Player collision & Visibility collision)
-
Add support for per-bone hit proxies to geometry collection components using nanite.
-
Fracture Mode now has an option to not split islands when fracturing meshes, to make it easier to work with meshes that are made of disconnected pieces.
-
[Chaos Visual Debugger] Changed default geometry visualization flags. By default we were not showing Query only and Complex geometry to reduce visual noise, but this could be confusing for a new user as things will appear missing. Also, it is not the best default for most projects.
-
[Chaos Visual Debugger] Implemented auto-save for CVD settings so they don't reset between sessions.
-
[Chaos Visual Debugger] Added support for Record and Visualize Joint Constraints
-
[Chaos Visual Debugger] Added Collision data recording and Joint constraints data recording support for RBAN Solvers.
-
Cloth Editor preview scene: add a toggle to enable/disable PostProcess Blueprints on the SkeletalMeshComponent
-
Chaos Cache Track compression is now enabled by default
-
Cloth Editor: when clicking on a WeightMap node to start the Paint tool, change the construction viewport view mode to the appropriate Sim/Render mode based on the node's MeshTarget value. Don't allow changing between Render and Sim modes while the tool is active (but do allow changing 2D/3D if we are in Sim mode)
-
Dataflow Editor: add the cloth preview blueprint class when opening a cloth asset via the context menu. Also move the blueprint asset from ClothAsset to ClothAssetEditor
-
Cloth Editor and Dataflow Editor: allow tools to start when PIE is running
-
Cloth Editor Remesher: better handling of open meshes in the Render mesh. Add the option to detect connected boundary vertices that are coincident with another connected set of boundary vertices on another boundary elsewhere. We can then explicitly remesh these "seams" while maintaining a vertex pairing, before then going on to remesh the interior of the mesh islands.
-
Add support for displaying icons for dataflow nodes
-
Added support for reroute nodes in Dataflow
-
Cloth Editor: roll back previous change disabling fly mode camera in both viewports. Add a Click-Drag behavior that will prevent camera movement when left-mouse dragging but allow everything else
-
[Chaos Visual Debugger] Removed the need to call SetActorLabel to update the particle debug name in the outliner as it is too expensive.
-
[Chaos Visual Debugger] Removed the need to call SetActorLabel to update the particle debug name in the outliner as it is too expensive.
-
[Chaos Visual Debugger] Updated CVD Outliner mode to know how to read the particle debug name from the recorded particle data instead of the actor label.
- Limited the number of geometry generation tasks to be launched per frame.
-
[Chaos Visual Debugger] Chaged CVD's ISMC to do RemoveSwap when an instance is removed to reduce the performance impact the operation has.
-
[Chaos Visual Debugger] Improved the object tracking mode to reduce stutter
-
[Chaos Visual Debugger] Removed the need to add the ISMC to the instanced component arrays of the pool actor. We were not using that functionality and calling AddInstanceComponents does an AddUnique internally, which becomes too expensive when we are adding a huge number of components
-
[Chaos Visual Debugger] AChosVDParticleActor now does nothing when modify is called. These actors are completely transient and Modify calls where adding cost to the actor spawning process.
-
[Chaos Visual Debugger] Made the Scene Outliner mode block updates to the hierarchy while we are playing. The scene outliner will now update itself as soon we stop or pause a recording .
-
[Chaos Visual Debugger] Added Sync by Network Tick mode
-
Dataflow editor: set node output visibility based on node selection. Set wireframe view based on toggle button on the node
-
Add basic telemetry to the Cloth Editor: editor mode enter/exit and tool start/stop information
-
Reduced Geometry Collection physics proxy runtime memory footprint by better packing data structures
-
[Chaos Visual Debugger] Added support to record and visualize game thread acceleration structures
-
[Chaos Visual Debugger] Added a way to generate a struct view that can be fed to the vanilla details panel for Solver Data structs
-
[Chaos Visual Debugger] Added a way to allow CVD's main details panel to ignore struct types (needed to ignore structs that have their own data inspector widgets).
-
Reduced Geometry Collection component runtime memory footprint by 16 bytes per bone
-
[Chaos Visual Debugger] Fixed a crash that can happen when you are loading a CVD file.
-
Expose fully decayed flag on geometry collection components
-
ChaosFlesh : Add triangle mesh simulation properties node in the dataflow for flesh assets and restrict self collision to tetmesh surface.
-
When creating a new Geometry Collection in Fracture Mode, there is a new option to specify an associated Dataflow.
-
Chaos Cloth Component simulations can now be modified from blueprints via the UChaosClothAssetInteractor.
-
New: Improved help text for functions moving actors etc, giving more info about the behaviour when teleport is/isn't used.
-
Cloth weight paint tool: draw 0.0 weight values as blue, 1.0 weight values as yellow. Make this behavior toggle-able with a checkbox in the UI.
-
Cloth weight map paint tool: make changes to the weight map node undoable
-
Made improvements to the Chaos Cloth Asset Selection Node and tool to match behavior with the Weight Map Node.
-
Implement Min LOD handling for clothing assets.
-
Chaos Cloth visualization updates. Fix cloth debug draw to display when PIE is paused. This was just a matter of switching to not draw in Foreground since the Foreground Linebatcher queue flushes every frame, even when paused. Add an option to draw in foreground or in the world via cvar (p.ChaosClothVisualization.DrawInForeground) Enable all text-based debug draw in PIE/outside of asset editors (doesn't work when paused, but it's a start). Update Draw Local Space to show the name of the reference bones.
-
Remove ClothComponentToolTarget as it is not used in the Chaos Cloth Editor
-
Cloth Editor: add option to pause Preview viewport updates while either PIE or SIE is running in the level editor
-
Added ChaosClothAsset to Cloth Total cycle stat.
-
Add DATAFLOW_NODE_RENDER_TYPE macros to a bunch of Cloth nodes so they will render in the Dataflow Editor Construction Viewport
-
Added a StaticMeshToCollection node for dataflow
-
[ChaosVD] Add Character Ground Constraint
-
Enabled debug display of bones for follower skinned asset components (e.g., typical chaos cloth asset usage).
-
Added Center of Mass (CoM) visualization and manipulation tools to the Physics Asset Editor.
-
A yellow marker and a number can be displayed in the viewport, indicating the location of the CoM of a body along with its mass. Filters can be used to determine a subset of bodies for which these markers will be displayed.
-
The CoM markers can be selected and then used to manipulate the CoM offset value directly in the viewport with a standard translation widget.
-
Buttons next to each axis of the CoM offset property in the details panel can be used to lock the CoM position in component. This allows you to move the physics body whilst leaving the CoM position unchanged.
-
The new visualization tools are inactive by default but can be activated and configured through the ‘Mass Properties’ sub-menu found in the ‘Character’ menu visible at the top of the physics asset editor viewport.
-
Bug Fix:
-
[Chaos Visual Debugger] Fixed an issue where when you scrub from a solver timeline, the other solvers and game frames data is not updated.
-
[Chaos Visual Debugger] Fixed an issue with RBAN Particle Data Visualization.
-
[Chaos Visual Debugger] Fixed an assert that happened when the solver tracks tab was closed and then re-opened.
-
[Chaos Visual Debugger] Added a missing early out on the update visibility code path. Now if the visibility has not change, we don't do the update.
-
[Chaos Visual Debugger] Fixed an issue where the query mode in CVD was reported incorrectly.
-
[Chaos Visual Debugger] Fixed an issue where the incorrect shape instance index was used when we evaluate if a geometry is for a query only shape, resulting on objects with multiple collision shapes be shown with the incorrect material.
-
[Chaos Visual Debugger] Fixed an issue with CVD's Details panel where if you try to inspect a struct after uobject was inspected, the uobject details view was not being properly cleared out and hidden.
-
Fix crash when opening brand new Cloth Asset in the Dataflow Editor
-
Initialise centre of mass on FConvex construction in paths where we could exit early to avoid non-deterministic cooks for empty or small convex hulls.
-
Dataflow and Cloth Asset Editors: make undo/redo work when changing node property values.
-
Bug Fix: Fix the error rotation in
ApplyDeltaToAllPhysicsTransforms
. This affects movement applied to the character through the character movement component. Previously the rotation was applied in the wrong space. PR #10735 -
Fixed a crash that could occur when creating a new Geometry Collection from source actors on multiple levels. Also, new Geometry Collections are now placed on the active level instead of the source actor level.
-
FSkeletalMeshSceneProxy: set view relevance dynamic if bForceWireframe is set
-
Dirty kinematic particles that move on the physics thread. This ensures the correct state is transferred back to the game thread for the query structure.
-
Fix for ClothCollection::GetUserDefinedAttributeNames not returning any names if it doesn't have the optional schemas
-
Cloth Selection Node: check that selection indices are valid for the associated group before adding to the collection
-
Cloth Selection Node: allow selection nodes to remove elements from an existing selection, rather than just add to it
-
Chaos - Fix drifting in character ground constraint
-
Chaos::Fix bug in FPBDJointUtilities::ConditionInverseMassAndInertia. It resolves possible crashes from zero inverse inertia for skeletal meshes or physics asset.
-
Fixed a crash on undo that could occur in Fracture Mode.
-
Dataflow Editor: fix crash when resetting simulation
-
Fixed crash related to momentum restoring in rigid clustering code
-
Fixed assert about CachedDensityFromPhysicsMaterialInGCm3 when saving an empty Geometry Collection asset
-
Dataflow Editor: restore "Add Weight Map" button functionality in the UI
-
Fixed some geometry collection replication issues where internal cluster information was not properly send over to the client
-
Fixed crash in Chaos Cache track compression
-
Fix crash when right clicking a comment node in DataflowGraphEditor
-
Fixed issue with inertia computation for Geometry Collection with negative scale components
-
Fixed a crash when changing a cache name in a Cache Collection asset properties
-
Ensure AnimatedNormals and normals are initialized and updated correctly when LOD switching Chaos Cloth.
-
Fix crash in Dataflow Editor when the asset doesn't have a valid Dataflow asset
-
Update Dataflow Node Details panel to handle showing multiple selected nodes.
-
Fixed crash in physics object external interface when attempting to access element zero of an empty object view.
-
Fixed a bookkeeping bug where External Collisions would not be added and removed correctly with the Chaos Cloth Asset.
-
Fix crash when closing cloth editor while selection tool is running
-
Cloth Editor: don't start the preview animation any time anything changes in the graph
-
Cloth Editor: fix crash when changing Dataflow property. We were not passing in a null DataflowEditor when reinitializing the graph editor.
-
Cloth Asset Builder: don't assert if there is not one material per render pattern in the asset, just log a warning. Even though each pattern has a material in the ClothCollection, the user can still remove materials from the asset after the graph evaluates, which can cause this assert to fire when the asset is subsequently loaded.
-
Cloth Editor Weight Map Paint Tool: Smooth brush improvements: - consider a wider neighborhood of vertices when computing average values - added a falloff function
-
Cloth Editor: focus on tool-defined selection box when user hits 'F', not the entire cloth object
-
Cloth Editor: fix crash when reloading Dataflow asset
-
Bug Fix:** [Chaos Visual Debugger] Fixed an issue where if you scrub backwards one frame, and you happen to land on a frame that is not a keyframe (but it has a generated keyframe), the generated keyframe will not be processed and the visualization will get out of sync.
-
Chaos Cloth Asset Static and Skeletal Mesh import nodes will now remove topologically degenerate triangles when using the new _v2 versions of these nodes.
-
Fixed slow down when scrubbing a ChaosCacheManager start time property while having the Sequencer using it opened
-
Cloth Editor Selection Tool: request graph evaluation when leaving selection tool
-
Fixed Geometry Collection removed pieces failing to shrink when the feature is enabled
-
Fix: Twist/swing drive max torque was previously used instead of parameters for the slerp drive.
-
Fixed Geometry collection memory reporting for GetResourceSizeEx if editor data is filtered and the cooking data options are removed.
-
Fix an issue with how Long Range Attachments were calculated in the Chaos Cloth Asset using improperly scaled Max Distance maps.
-
Fix scene query crash when rewind/resim is in use and we invoke a query on the physics thread.
-
Dataflow Construction Scene: explicitly destroy DynamicMeshComponents when they are removed from the scene. This fixes a crash in Dataflow Editor
-
Cloth Editor Remesh Node: fix crash when collection has invalid stitches
-
Dataflow Editor: fix for meshes not rendering in 2D view mode. - added a 2-sided material for meshes in the Construction view - disabled the Advanced Preview Floor in orthographic view modes to avoid overly darkening the material.
-
Converted UGeometryCollection rest collections to shared ownership as the physics proxy now relies on the rest collection for immutable data.
-
Cloth Editor: Pass nullptr as DataflowEditor argument when constructing SDataflowGraphEditor. Fixes crash on ClothEditor startup.
-
Fixed issues where Geometry Collection rendering do not properly update the velocity buffers causing issues with motion blur and antialiasing
-
Cloth Editor Preview: save and load animation state when reimporting skeletal mesh. Previously this happened only when reloading the asset, not reimporting.
-
Fixed Geometry Collection Component removal logic preventing internal clusters from crumbling into smaller pieces
-
Fix typo: OnPreReimport -> OnPostReimport. Fixes a crash when reimporting SkelMesh after the Cloth Editor is closed.
-
Cloth Editor: when nothing is selected in the preview scene, disable the numeric transform inputs
-
Cloth selection tool: fix back face material checkerboard
-
Fixed potential crash in InitializeBodiesPT method when using Geometry Collections
-
Cloth Editor paint tool: allow brush to get super small. Also fix brush circle not updating after manually setting the brush size property
-
Dataflow Editor: fix for Skeletal Mesh being cleared from the Preview scene when changing Animations, and vice-versa. Removes the Skeleton property from UDataflowSkeletalContent
-
Altered dirty particle checking to make sure we always add dirty kinematics to be processed to ensure correct velocities for kinematic bodies.
-
Fix a check that occurs when clicking a node after doing "Save As" in the Cloth Editor
-
Fixed a bug where Fictitious Angular Scale would apply a force when teleporting Cloth (both Skeletal Mesh-based cloth and new Chaos Cloth Asset panel cloth).
-
Fix material index mapping when turning multiple cloth collections into LODs for one asset
-
[Chaos Visual Debugger] Fixed random ensure caused because data was recorded outside a solver stage. In these scenario now an auto-generated solver stage will be shown in the UI, named "In-Between Stage Data"
-
Dataflow node inputs and outputs using Arrays now properly have their type set to the full templated type
-
Fixed source actors not being properly removed from level by the Fracture Mode 'new' tool
-
Fixed potential crash in Niagara Chaos Destruction Interface related to using trailing events
-
Fix use-after-free error: we were accessing the name of a property that has already been unloaded in a ShutdownModule call. ASAN preflight: 66b3a23ea82c869bf2232b71
-
Cloth Editor: fix for the mesh in the construction viewport not updating when node properties in the details panel are changed
-
Cloth Editor: when selecting a node for the first time, focus the construction viewport to capture the dynamic mesh
-
Fixed an issue with Fracture Mode where bone colors of a Geometry Collection would sometimes not update to reflect the active Fracture Level.
-
Cloth Editor: when clicking a node for the first time start any corresponding tool immediately. This change just creates the DynamicMeshComponent before trying to start the tool. Also: clear the bDynamicMeshComponentInitDeferred flag after testing it in the Tick function, not inside ReinitializeDynamicMeshComponents(), to prevent unexpected behavior calling ReinitializeDynamicMeshComponents out of sequence.
-
Cloth Editor: don't store the animation instance in the Preview scene, just allow the SkeletMeshComponent to keep track of it. This fixes a problem where the animation playback controls don't respond after reloading the SkeletalMesh asset in the preview scene. When a SkelMeshComponent is re-registered (e.g. after the asset is reloaded), it unconditionally destroys and re-creates its AnimScriptInstance, so we're guaranteed to be holding onto the wrong object in the editor if we are tracking it ourselves.
-
Fixed a crash when moving a Geometry Collection component in a blueprint editor
-
Cloth Editor and Dataflow Editor: fix for toolbar actions running in the wrong editor instance. We should register toolbar commands in the EditorToolkit, not the EditorModeToolkit
-
Fixed body instance filter calculation when its SourceObject member is unset.
-
Fixed GravityGroupIndex not being initialized for body instances
-
Fixed heightfield queries missing when they begin outside of the heightfield grid and the clipped query ends up within a single cell
-
Fixed removal timer starting at -1 and causing remove on break to be last longer by a second
-
Dataflow Editor: - when a tool is running hide wireframe rendering in the scene and disable toggling wireframe mode on graph nodes - when clicking on a node, don't update ShouldRenderNode unless the node selection actually changes
-
Fix bug where geometry collection components that use nanite did not visually rotate when rotating with the gizmo.
-
Dataflow Editor: fix for not being able to select a mesh in the construction viewport when there is no terminal node in the graph. This was caused by SetLastModifiedTimestamp being called with Invalid on every tick, which rebuilds the construction scene.
-
Fix crash when deleting selection node while selection tool is active
-
Dataflow geometry collection nodes now properly handle material instances
-
Cloth Editor: make Selection node changes via the tool undoable, similar to previous change to the Weight Map Paint tool. Also make the previously-added FWeightMapNodeChange a nested class inside FChaosClothAssetAddWeightMapNode
-
Dataflow Editor: - if p.Dataflow.Editor.ContextCaching CVAR is false, mark the UDataflowBaseContent object as transient to prevent it from setting the Dataflow asset's package dirty - when user hits the Save button, only prompt to checkout and save assets that are actuallly modified
-
Fixed Sphere-Convex trace not taking radius into account when not requesting MTD information.
-
Fix shape index resolution in collision event handling ensuring that the shapes are correctly ordered when notifying components
-
Dataflow Editor: when user presses 'F' while a tool is running, use that tool's focus box to orient the camera, if it has one defined
-
Fixed a bug where the Chaos Cloth Simulation would continue to run when EnableSimulation was set to false on the component.
-
Fixed crash when adding a Geometry Collection to a Blueprint that contains embedded geometries
-
The fracture mode and dataflow neighbor/contact selection tools/nodes now work as expected across clusters.
-
ChaosFlesh:: fix jira Clang compiler issue. Fix copy-and-paste errors from GaussSeidelWeakConstraints
-
Dataflow Editor: delay loading the editor module to PostDefault to allow other modules to register their nodes, tools, and view modes. Warn if trying to register tools and view modes after editor commands have already been set up.
-
In fracture mode, shared settings now persist across the different fracture tools
UI
New:
-
CommonTabListWidgetBase - Updated CommonTabListWidgetBase to use a widget pool for the case of recreating tabs in this widget. - It should alleviate the need to call create widget any time we're trying to build a new set of tabs. It also improves performance for that case.
-
Added branch name to Unreal Insights window title, to more easily identify branches when working on multiple ones simultaneously
-
Added branch name to Live Coding Console window title, to better differentiate instances when working on multiple branches
Bug Fix:
- Fixed a crash in WidgetComponent when widget visibility changes but the widget pointer is invalid.
Slate
New:
-
Slate: Add ability to customize details for 'edit-inline' instanced UObjects. This is locked behind 'AllowEditInlineCustomization' property metadata.
-
Updated FNotificationButtonInfo to support dynamic Text, Visibility, and IsEnabled bindings
-
Added tooltip to MultiBoxBuilder's AddToolBarWidget
-
Add support for disabling gamepad navigation scrolling in listview
-
Exposed missing delegate variants on TAttribute (SPLambda, WeakLambda)
-
Added CVar "Slate.AllowTooltipsWithHiddenCursor" to SlateUser to enable tooltips even when the cursor is hidden. This will enable tooltips when using something like the CommonUI analog cursor.
-
Asset pickers can now specify their own asset view options menu profile by name.
-
Add CSV Substats to Slate
-
Mark certain slate classes as final, in attempt to support devirtualization
-
Slate Font Atlas Visualizer: when hovering a glyph, info about it (Font, size,...) will be displayed in a tooltip.
-
Allow SMessageDialog to optionally use plain-text
- This is controlled via a new UseRichText attribute, and may be set to false when rich-text support is not required.
Bug Fix:
-
Fix Android build break on Slate RDG changes
-
SPropertyEditorInline: Fix refresh issue with editing inline/instanced properties.
-
Fixed Slate accessing a deleted FWindowsStylusInputInterface when destroying windows after UStylusInputSubsystem had already shutdown
-
Flush resources when drawing with minimized windows
-
Ensure that brushes are always loaded when needed, even for lazily loaded widgets
-
Fix Post Buffer updates not triggering with global invalidation due cached batch buffer use not being considered.
-
Remove check for unscaled view rect non negative, assumption is not correct when accounting for PIE scene view offset.
-
Disable slate postbuffers when launching multi-PIE
-
Fixed an issue with OverflowPolicy "Ellipsis" when using outline, where the outline could get clipped at a different glyph than the main text.
-
Prevent crashes if custom slate drawer is GC'd before element is added
-
PR #11449: Fix typo in log format string when a widget gets deactivated #contrib 11449
-
Fixed the ellipsis position for texts that are both left to right and wrapping. Previously, the ellipsis was displayed after the last whitespaces of a line instead of right after the last visible glyph, which could result in the ellipsis to be partially clipped.
-
Fixed a crash in data validation with abstract blueprints.
-
Add missing transtition to SRV to slate blur external
Deprecated:
- Implemented new type priority system for InputPreProcessors in SlateApplication, refactored callsites and removed re-registration hacks
UMG
New:
-
Add autocast for object types for async conversion functions.
-
Add QueueAnimation methods, which perform better when multiple animation transitions occur in one frame.
-
Add conversion functions for MVVM Material Param updates.
-
CommonUI: Adding virtual to methods that were needed to support Enhanced Input's Triggers and Modifiers in CommonUI widgets
-
Fix null pointers PR #11300: [Common UI] Add the CommonUI.ResetUIInputConfigOnActivatableTreeDeactivation console variable
-
Add designer preview entries to MVVM panel extension.
-
Fixed unsafe pointer in CommonActionWidget (CommonUI)
-
Expose ViewportScaleUI view uniform to materials (Temporarily only set in editor, since in non-editor acquring scale can permanently leave DPI with an invalid value)
-
Add verbose info to invalid conversion functions.
-
Add helper for setting an array of ftext using MVVM macros
-
Add MaterialFunction to easily access Cursor Position in UMG
-
Add ability to set default resolver to select by default in MVVM plugin settings.
-
Add Async MakeBrush & LoadTexture / LoadMaterial Nodes for MVVM
-
Expose CommonVideoPlayer functions to BP
-
Add LoadAsset & derived classes to allowlist for MVVM Make Node Bindings show display name rather than node class name
-
Experimental UI Compoment System feature for UMG This is the first submit for very basic Component implementation. It's hidden behind a CVar and there is a few features missing. Using this we can Create Components that add functionnality to any UWidget in UMG. The first Components will come in future submits.
-
Migrate cached batch post buffer usage checks to single loop
-
Added UUserWidget::NativeOnFinishedPointerInput which is called from SObjectWidget::OnFinishedPointerInput after all input events have already been processed for a widget (this callback existed for Slate widgets but not UMG)
-
Remove enum state functionality
-
UMG: In Blueprint, allow setting InText inline for URichTextBlock::SetText, this aligns with UTextBlock::SetText
Bug Fix:
-
Change World that widget previews use to fix Material Parameter Collections not updating correctly.
-
Disable adding children to panel hierarchy when it has an MVVM extension.
-
Fix Manual Arg refresh required when node added to MVVM Allowlist
-
CommonUI: Fix not being able to remove widgets from a UCommonActivatableWidgetContainerBase after slate resources have been released
-
Fixed an issue where the interface of other players was not hidden when split-screen was disabled.
-
Fix: common button styling consistently updates via SetIsInteractionEnabled
-
CommonUI: Fix CommonButtonBase not binding Pressed/Released events when using Enhanced Input
-
Fix Screen Space widgets not working in split screen
-
Fix Slate PostBuffer not working on formats other than PF_A2B10G10R10.
-
Correction to Fix to UWidget::TakeWidget to properly handle dynamically created UWidget that are not part of an asset.
-
Add option to DynamicEntryBoxBase to remove widgets while deleting slate.
-
Free widget list in ReleaseSlateResources for Activatable Containers, also clear pool and migrate widgets into inactive list so they can be reused.
-
UWidgetComponent - Added null checks when creating scene proxy.
-
Disable drag and dropping children into panel hierarchy when it has an MVVM extension.
-
[Retainer] Fixed an issue with clipping working not properly in case Stencil clipping was used on elements inside the retainer.
-
Fix bug preventing visibility of CommonActionWidget from being setable in editor.
- By default at runtime it's visibility is still generally controlled by the widget itself.
-
Fix MVVM Show Graph not working in view binding due to missing graph editor mode set
-
Fix for Shipping Build Console with Common UI Input.
-
Fix Common Bound Action Bar
-
Fixed warning about REINST widget tree objects being nullptred on compilation in complicated widget graphs
-
Fixed UWidgetComponent::GetOwnerPlayer crash when owning world has no game instance.
Virtual Production
New:
-
Camera Calibration: Added the ability to change focus and zoom values on calibrated data points, with UI to handle merging/replacing existing points, as well as editing multiple linked values at the same time
-
CameraCalibration: Improved media source selection for the lens file editor. Users can now select from any media source or media texture asset in addition to media profile sources, as well as select live media tracks in the open level sequence editor.
-
SB: Added action menu to package the cluster. The user is now able to package the game and launch it (for nDisplay devices). Toggling between packaged and -game is a matter of toggling the packaged game checkbox in nDisplay settings.
-
CameraCalibration: Added alternate curve mode to the curve editor that displays lens data tables with a focus axis instead of a zoom axis, and allows the values of those points to be edited. The curve is forced to be a linear interpolation with no tangent editing since there isn't any tangent data being stored in the data tables for the focus axis.
-
StageMonitor: Enable data reporting in packaged dev builds. This will allow packaged nDisplay nodes to report back to a Monitor their stats.
-
LiveLink: Added BP function to query subject state (invalid, disconnected, unresponsive). This should mimic the state indicated in the live link panel for a given subject. The function is blueprint callable, and is called GetLiveLinkSubjectState. The value returned is an enum, as follows: enum class ELiveLinkSubjectState : uint8 { Connected, Unresponsive, Disconnected, InvalidOrDisabled, Unknown }; It is similar to ETimedDataInputState but can report more states suitable to a higher level query.
Bug Fix:
-
Fix intermittent test failures caused by FStageProviderMessage initializing DateTime and FrameTime to TimeNow() and GetCurrentFrameTime The FAutomationTestAttemptToFindUninitializedScriptStructMembers sometime initializes the structure at different times which would fail the test. Instead of initializing FStageProviderMessage with FDateTime::Now, we are now setting the time in IStageDataProvider::SendMessage which all messages go through.
-
Fixed DC.Stats.Frame race condition for accurate timecode & frame number inspection.
-
Fixed a case where a Remote Control WebSocket message would not be sent when only a single boolean property was changed in the editor
DMX
Bug Fix:
-
Fix issues where DMX Control Console Actor did not send DMX in certain setups.
-
DMX Control Console Actor now correctly sends DMX in Standalone.
-
DMX Control Console Actor now correctly sends DMX in PIE after toggling send DMX in editor.
-
DMX Control Console Actor now correctly sends DMX in editor when auto-activate and send DMX in editor is enabled.
-
Media IO
New:
-
Update AJA SDK to 17.0.0.1
-
Reinitialize timecode and custom timestep after blueprint compile. This should allow modifying timecode providers without having to manually set them again after compiling them
-
Add option to output interlace video as progressive. ( Experimental ) Could help in cases where you have an interlace signal going through UE to keep frames as-is. Combining OutputInterlaceAsProgressive with using Deinterlacer - None on an interlace input should let the interlace frame go through Unreal untouched.
-
Added option to the LiveLink component to force all outstanding data updates to be applied before the component evaluates.
-
MediaIOCore: Update CaptureImmediate_RenderThread to return a boolean that indicates if the capture was successfully processed.
Bug Fix:
-
Add option to disable color conversion on media texture samples
-
Fix not being able to select a video format when using the blackmagic 8k pro for input.
-
Fixed 1-frame delay between LiveLink evaluation and MRQ rendering with an option on the LiveLink component to force LiveLink to immediately apply all outstanding updates for that frame.
-
Fix Rivermax YUV10Bit422ToRGBACS shader function
-
Aja - Fix 4k Output
- Fix Aja output not correctly setting card framerate when starting output on other channels than 1
-
Rmax: Changed default rate multiplier from 1.05 to 1.00, since the multiplier was upsetting the receiver, and it seems to not be needed anymore.
-
Rivermax: Fix double skipped frame due to false de-sync detection. The false de-sync detection was happening when the barriers are entered on the nodes at different times with respect to ptp vsync, such that theit latest frame presentation does not correspond to the same vsync. The barrier now carries the last to frame presentation datas, and a desync is only confirmed when the same vsync presented different frames. Otherwise it conservatively does nothing.
nDisplay
New:
-
nDisplay and Rivermax: The p-node now sends an event every 120 frames (cvar to set frequency) with a list of any detected PTP video frame mismatches. The goal is that the operator is able to detect the nodes that have PTP misconfiguration by looking at the Stage Monitor events, and also get an idea of the extent of the PTP mismatch. PTP mismatches are made with respect to the primary node, or if the primary node is not in the barrier, then the first node in alphabetical order. Use Rivermax.Sync.Ptp.UnsyncFramesPerReport to control how often to send the events (-1 to disable them). When enabled, the event is always generated, including when all nodes are in PTP sync, to give positive confirmation to the operator that the cluster is operating as expected.
-
nDisplay: The UDisplayClusterEditorEngine class has been moved to the public API.
-
nDisplay: Hide lightcard in Editor, but keep it in the nDisplay preview. This avoids the doubled up view of the lightcard which was sometimes confusing.
-
nDisplay: Show summary in asset tooltip. Also hides the illegible json from the content browser NDC asset tooltip.
-
Switchboard: Disable Python by default when launching nDisplay. This avoids about 10ms of reachability analysis which contribute to GC hitches. Also added an option (default to off) to set gc.AllowIncrementalReachability to 1. Can be re-enabled with checkbox in nDisplay section settings.
Bug Fix:
-
nDisplay: Fixed 2110 Split Frustum Tearing Currently, the incoming texture may have extra black columns on the right side due to required padding. This will fixed at the Rivermax level in the future, but this change is a workaround that trims them based on the destination texture in nDisplay. For the cases of resolutions that are different, which would not be the viewport-viewport case, a cvar was provided to control how many rightmost columns to trim:
-
nDisplay.Media.Rivermax.CropWorkaround
-
nDisplay.Media.Rivermax.ExtraPixelsThreshold
-
nDisplay.Media.Rivermax.ExtraPixelsRemove
-
-
Switchboard: Added missing vulkan sm5 and sm6 options.
-
Switchboard: Default nDisplay launches to -NoLoadingScreen to avoid blackouts when loading new maps or saving them from Multi-User. An option has been added in case the user wants to suppress this option.
-
nDisplay: Fix Distance To Wall when camera is outside the stage geometry. The distance from the camera to the wall is determined using a line trace to the stage geometry (which is always a gapless morphed isosphere). This works ok when the camera is inside the stage geometry, but when the camera is outside, it was only measuring the distance to the outside of the stage geo, which is not correct. This was happening because procedural meshes default to being double sided, so to fix this, we force it to match that of the isosphere static mesh that it is morphing.
-
nDisplay - Prevent being able to add a new viewport from the output mapping graph when no cluster node is present. The option to add a viewport is removed unless it is safe to do, fixing a crash and keeping the behavior the same as in the treeview.
-
Fix for remote controlled properties with setter through nDisplay interception.
-
Switchboard: Fix nDisplay node hitches that happen after SBL is left running for a few hours. For the regular GPU stat calls, the NvAPI calls were replaced with NVMI calls, which do not seem to be causing hitches. "Refresh Mosaics" button renamed to "Refresh Table" because it now refreshes more than just the mosaics. Now it also requests a full sync status poll. This intentional action might cause a hitch on the nodes but this is now triggered explicitly by the user, which is rarely needed anyway, instead of every second. Also fixed an issue of the nDisplay monitor table not updating its display after emitting the dataChanged signal. Fixed nDisplay Monitor not updating when the nDisplay node name or address changed. Improved nDisplay monitor to show the connection icon instead of the wider column "Connected" with yes/no values. It now doesn't use the orange warning color on certain columns that are only relevant when the node is running (e.g. present mode).
-
nDisplay - Fix deleting the NDC from a level not updating the ICVFX panel.
-
Fixed issue where root component transform properties were not added to the Transform details panel in the ICVFX drawer in the ICVFX window.
-
Fixed issue where stage geometry mesh had physics enabled, causing it to interact with physics objects.
Rendering
New:
-
Composure: Exposed new user view flag to CG Capture Comp element as an advanced property, for use in materials for per-view branches.
-
CompositePlane: Added (advanced) option to provide a static texture to the lumen scene (instead of the projected media), which can help lighting stability in certain cases with a moving camera.
Bug Fix:
-
Fixed Composure issue which incorrectly removed transform elements instead of input elements.
-
CompositePlane: Fix material & blueprint for non-external (new style output) media textures, which is now the default on newly created ones.
-
Disabled additional settings to the VP Utilities Passthrough PPV for convenience: film grain, chromatic aberration & lumen screen traces.
-
Fixed Composure issue with translucent objects and alpha: the alpha inversion was done in the middle of post-processing, breaking regular translucency compositing.
-
Fixed Composure to further disable show flags for the main (post-processing-only) render, for instance where lumen calculations were being performed and thrown away.
-
Fixed OpenColorIO 5.4 issue which prevented display-view creation/selection, without closing and re-opening the asset.
-
Fixed OpenColorIO plugin to allow negative colors through the generated transform shaders.
Tools
New:
-
VCam: Optimize TakesBrowser by using ListView
-
Added marquee selection support to the Lens File editor to let users select a sub-region of the image for checkerboard detection.
-
[Switchboard] Improved support for content plugins, including the AdditionalPluginDirectories field in the uproject descriptor. Switchboard is now aware of all plugins contained in the engine, project, and AdditionalPluginDirectories ("external" plugins), and supports selecting levels and other assets contained in their respective Content directories. All enabled project and external plugins are considered when enumerating content by default.
-
Added playback controls to Live Link Hub.
-
Added the Prompt Client For String Blueprint action, which lets you request a string input from the user of the Unreal VCam app.
-
VCam: Added carousel style take viewer
-
LiveLink - Added a user exposed Offset transform to the transform controller component. The new member applies an offset transform in the local space of the controlled scene component.
-
Remote Control - Add option to disable console command execution through the web api
-
Added a timeout to checkerboard detection in the Lens File Editor to prevent long stalls on the Game Thread.
-
LiveLinkHub - Add support for frame preprocessors and translators
-
Remote Control: Protocol Generate Transactions option is now available per Preset instead of being a global option in Project Settings, added a second option Generate Property Change Events. No transactions and no property change events is the new default.
-
Added experimental rendering mode for lens distortion that integrates more natively into the post-process rendering pipeline.
-
VCam: Added BookmarkBrowser
-
Inline material instance creation has been moved from the VirtualProductionUtilities plugin to a new InlineMaterialInstance plugin, This will be enabled by default if you enable the VirtualProductionUtilities plugin.
-
LiveLinkHub - Add subject remapper support Subject remappers allow you to remap bone and transform data that comes through a livelink subject. This should remove the need for anim blueprints that use a remap asset.
-
[Switchboard] Changelists from Perforce paths appearing in AdditionalPathsToSync are now enumerated in the project changelist selection dropdown.
-
[Switchboard] Engine/project changelist dropdowns now display the descriptions for changelists when hovering over the CL numbers.
-
LensComponent: Expose GetLensDistortionHandler to Blueprint. Replaces the functionality that used to be available via the Camera Calibration Subsystem.
-
LiveLink - Add support for virtual subject bone attachments Bone attachments allow you to combine subjects into a virtual subject by specifying the source and target bone of the attachment. In this initial verison, the bone names of the combined subjects must exist on the target skeleton.
-
LiveLink - Add LiveLinkTransformRoleToAnimation translator Add LiveLinkTransformRoleToAnimation role to translate Transform frame data to skeleton data. Remove SubjectAdded delegate from LiveLinkHub since static data broadcast is already handed elsewhere
-
Virtual Scout - Improvement to teleportation movement. Now always teleport to floor hit if there's a valid floor under the initial sphere trace.
-
LiveLink: Added basic deadband pre-processor
-
LiveLinkHub - When combining subjects, allow specifying if the location/rotation should be fetched from the parent subject, child subject or if it should be a combination of them.
-
[XR Creative Framework] Added experimental support for blueprintable custom transform gizmos, enabling users to easily construct Interactive Tools Framework gizmos from custom meshes and materials, and with blueprint logic hooks.
-
Improved accuracy of lens calibrations when using tracked calibration patterns.
-
VCam: Added post smoothing on recorded take
-
Added "Manual" evaluation mode to Lens Component to directly provide Focus and Zoom inputs to a calibrated LensFile without requiring a LiveLink subject.
-
[Switchboard] Improved handling of host key fingerprint mismatch. When encountering an unexpected fingerprint connecting to a device, a warning dialog is now shown, explaining the situation and allowing the user to proceed if desired. In order to help elucidate potential causes of key mismatch, the subject common name of the self-signed certificate now includes the OS username and computer name, and this information is surfaced in the warning dialog.
-
LiveLinkHub - Add resampling / timecode restamping support
-
WebRemoteControl: Support for jpeg thumbnails and correctly identify the mime types in header (include svg for slate brushes).
-
Show the record button even if no multi-user users have specified that they want to record. This means that the first person to click record will be the recorder.
-
Remote Control: Get Protocol Names are now returned in alphabetical order
Bug Fix:
-
LiveLinkHub - Add IP Address to connected client info
-
[XR Creative Framework / Virtual Scouting] Removed an unnecessary dependency on the Settings module, replacing its use with UDeveloperSettings. This enables successful packaging in Shipping configurations.
-
[Switchboard] Fixed an issue where Switchboard would not terminate the multi-user server process upon invoking a build, even if you clicked the corresponding button on the confirmation prompt.
-
LiveLinkHub - Fix livelinkhub not connecting to NDisplay render nodes
-
Switchboard: Added optimizations to keep the UI responsive when connected to many (e.g. 30) nDisplay nodes. Changed to standard table model that seems more optimized and manages its own internal cache of table data. Spread nDisplay node status polls in time instead of doing all at the same time. * Added indexed caches on write operations of the program queue so that multiple readers can find programs quickly.
-
LiveLinkHub - Fix display name of IP address in LiveLinkHub's connected client info struct.
-
[Switchboard] The Build.version CompatibleChangelist value stored in version control is now ignored by Switchboard, as it is typically not relevant for production workflows, and could cause Switchboard to incorrectly indicate the synced changelist had not yet been built.
-
[Switchboard] Fixed several issues with the
p4_changelist_inspection.determine_changelist_type
function, causing it to incorrectly consider any file extensions (or extensionless names) ending in the letters 'c' or 'h' to constitute code changes, while several other file extensions were incorrectly ignored. [Switchboard] Reduced the progress logging from the sync process, preventing SwitchboardListener from trying to send potentially dozens of megabytes of output at the end of a sync, which was occasionally causing disconnects. -
Fix p4 workspace discovery not working when the path had a trailing directory separator.
-
RemoteControl: Fix scrollbar is now visible for protocol bindings when a preset with existing protocol bindings is opened, allowing too edit the binding as expected.
-
Fix advanced category not expanding in objects' details added through external objects CL 26991755 added lazy refresh to FDetailCategoryImpl which introduced a regression that causes categories added through AddExtenalObjects to not get refreshed when RefreshTree is called. This is because RefreshTree adds the category node to the parent layout builder's list of nodes to tick, but DetailLayoutBuilderImpl's tick method isn't called for external objects. You could see this behavior when adding a LiveLink component to an actor and selecting a subject, then trying to expand this object's advanced category.
-
LiveLinkHub - Fix subjects being removed when renamed to another subject of the same name
-
LiveLink - Append basic frame data when combining subjects in an animation virtual subject. This will enable workflows like combining ARkit's face tracking with a body motion capture tracking subject.
-
Virtual Scouting: fix for lack of handedness implementation in the measure tool
-
Virtual Scouting: measure tool. Fix crash crash in undo redo measure lines.
-
LiveLinkHub - Fix rename to same name as other subject breaking the livelink connection
-
CameraCalibration: LiveLink controllers can now be added. Also added default even/odd materials. #virtualized
-
Remote Control: Fix issues when controlling struct properties with Remote Control Protocols, fix issues specific to controlling struct properties that support masking such as FVector or FColor
-
Remote Control Panel: Fix Function Picker crash when multiple objects of the same type are present in the scene.
-
Virtual Scouting: Viewfinder tool. Fix for squeeze factor of values other than 1 on viewfinder lens. Rebuilds monitor on each lens swap to account for mixed ratio lens sets.
-
Remove call to FPlatformProcess::Sleep from LiveLinkMessageBusDiscoveryManager and use an event instead to speed up the shutdown process.
-
LensComponent: Transact camera changes when cleaning up distortion. When apply distortion is cleared on the lens component, clear distortion is also called which clears the property that indicates that distortion is set up, which is something that clear distortion looks at before doing anything. Therefore the MU client that receives this transaction never actually cleans up the distortion. This change adds the camera component to the ongoing transaction when it distortion is cleaned up, such that the receiver gets the value as well.
-
WebRemoteControl: Fixing API inconsistency with PresetGetController and PresetSetController routes to support either the Preset Name or Id to be consistent with the other routes.
-
Remote Control: Protocol bindings now remain functional after deleting a property or binding in a Remote Control PResetand undo the change
-
Bug Fix: [SwitchboardListener] Don't warn about CRYPTO_secure_malloc_init failure on Windows; this call would always fail because we use OpenSSL binaries compiled without the required support.
Deprecated:
-
VP Utilities - Moved all Legacy VScout assets to a "DEPRECATED" folder. - Fixed up any text-based references to those assets in their new folder. [RN] Legacy Virtual Scouting toolset is marked as deprecated #virtualized
-
Legacy Virtual Scouting tools are marked as deprecated and scheduled for removal in UE5.6
업그레이드 노트
Animation
Runtime
Upgrade Notes:
-
Direct use of retarget source asset has been deprecated, setter and getter is now available at anim sequences and pose assets
-
BlendSpaces that previously had the "Axis Scaling" feature enabled, but were using animations with sync markers, wouldn't have been time-scaling the playback of those animations. Following the fix, they will, so you might find that your blend spaces are scaling the playback speed. If this happens, either the axis scaling feature can be disabled, or you could clamp the inputs to the blendspace.
New:
-
Added functionality on anim sequence and pose asset tp avoid setting transient retarget source assets.
- The change includes a console command (a.CheckRetargetSourceAssetData) to scan assets in the project and optiomally clean the retarget data if the source is missing.
Bug Fix:
-
New: BlendSpace option to sync animations. Previously, BlendSpaces would always sync animations if they had sync markers, but this allows that to be disabled (in which case, animations will be blended as if there are no sync markers).
-
Bug Fix: BlendSpace applies time scaling using the "Axis Scaling" feature whether or not animations are being synced (previously it would only time-scale if animations were not being synced)
DMX
Upgrade Notes:
-
Deprecated various types and functions in C++ that were previously deprecated in Blueprints only
-
Deprecated unused types
-
See deprecation warnings for the respective functions for instructions how to upgrade your code to 5.5.
-
New:
-
DMX Engine blueprint nodes and C++ functions clean up:
-
DMX Subsystem blueprint nodes show more descriptive comments.
-
Renamed GetAllDMXLibraries to LoadAllDMXLibrariesSynchronous.
-
Renamed GetAttributesValues to GetAttributeValues and GetNormalizedAttributesValues to GetNormalizedAttributeValues.
-
Editor
Upgrade Notes:
-
New right-click context menu option for Spline Components
-
Closed Loop - Quickly change the closed loop setting of the spline
-
Straighten To Next / Previous Point - Right-Click Spline Points and select these options to quickly set the tangent handle to point directly at the next or previous spline point. Use this to straighten out spline segments.
-
Allow Snap Tangents Updates On Snap - When performing a "Snap To" operation on a spline point, tangents will automatically reset. This behavior can now be toggled on / off.
-
-
Unassigned default hotkey bind of 'A' from Add Spline Point Here
- This would frequently add accidental spline points when attempting to move the camera using WASD and having the mouse cursor over a spline component. "Add Spline Point Here" hotkey can be manually re-assigned in Editor Preferences -> Keyboard Shortcuts
New:
- [SplineComponentVisualizer] * Added new commands: - ToggleSnapTangentAdjustments, StraightenToNext, StraightenToPrevious, ToggleClosedLoop [REVIEW] [at]Brooke.Hubert
Bug Fix:
- [SplineComponentVisualizer] * Removed default of A-Key from Add Spline Point keyboard shortcut [REVIEW] Brooke.Hubert
Foundation
Core
API Change:
- Changed TScriptDelegate to only take a read lock during execution (ProcessDelegate). This allows script delegates to call functions which may go wide and do additional reads on the running delegate. Now, the invocation list is compacted after the execution is complete rather than inline with execution.
Upgrade Notes:
-
When UnrealPak is invoked from BuildCookRun it will read project specific config files instead of the Program/Engine config files, and it will write its UnrealPak.log file to the project's Saved directory rather than to the Engine/Programs/UnrealPak directory.
-
OnGetExtraObjectTagsWithContext delegates must now be thread safe.
-
Implementations of FDerivedDataPluginInterface that return true from IsBuildThreadsafe() will now have builds run on worker threads. This will expose issues with plugins that incorrectly declared themselves to be thread-safe.
-
Reduced the strength of the lock held by TScriptDelegate from write to read to allow additional flexibility in allowed operations during execution and prevent potentially spurious multithreaded access detector errors.
New:
-
When UnrealPak is invoked from BuildCookRun it will read project specific config files instead of the Program/Engine config files, and it will write its UnrealPak.log file to the project's Saved directory rather than to the Engine/Programs/UnrealPak directory. The project directory is picked up from the existing .uproject argument that can be provided first on the command line. This change was required for UnrealPak to correctly pick up the project's DDC configuration when being run with -compressionEnableDDC, a feature that has been optimized in this engine release.
-
Converted OnGetExtraObjectTagsWithContext to be a threadsafe multicast delegate, fixed TMulticastScriptDelegate to no longer require write access when being serialized, and added locks to AssetSearchManager to ensure that it can be safely accessed from multiple threads during asset tag serialization.
-
Eliminated blocking tasks used by the legacy DDC API
Bug Fix:
- Changing TScriptDelegate to only take a read lock during execution (ProcessDelegate). This allows script delegates to call functions which may go wide and do additional reads on the running delegate. Now, the invocation list is compacted after the execution is complete rather than inline with execution. [REVIEW] [at]*steve.robb [at]dan.oconnor
Dev Tools
Upgrade Notes:
-
UhtHeaderFile is no longer part of Outer chain for types. This makes the Outer chain match the engine.
-
UhtPackages can no longer be enumerated from UhtSession.
-
UhtModule has been added which can now be enumerated from UhtSession. UhtPackages and UhtHeaderFiles can be enumerated from each module.
-
UhtHeaderFile contains a complete list of all root level types found in the header. Those types can also be enumerated from the individual UhtPackages found in the module owning the header file.
New:
- Added the ability for UHT to support multiple packages per module (limited to one /Script/ package). This change will likely require changes to any UHT exporter plugs. The UE_5_5_OR_LATER define can be used to maintain backwards compatibility with older versions of UE.
Framework
Upgrade Notes:
-
Passing ANSI strings to many functions on UCanvas has been deprecated to avoid expensive string conversions. Pass TCHAR strings to avoid deprecation warnings.
-
To opt-in to these fixes, enable the following CVars:
-
LatentActions.GuaranteeNextTickDelay
-
TimerManager.GuaranteeEngineTickDelay
-
New:
-
Updated many UCanvas functions to accept FStringView instead of const TCHAR* and const FString&.
-
Added FCanvasTextStringViewItem to support efficiently drawing strings allocated on the stack.
Bug Fix:
- Fixed cases where DelayUntilNextTick and SetTimerForNextTick wouldn't always wait until the next world tick before triggering. Requires opt-in.
AI Navigation
API Change:
- Some navigation specific properties have shifted to living in a new struct. So you may need to access some properties through the struct rather than just the NavMovementComponent. Some functions for nav movement have also changed and are defined in INavMovementInterface and implemented by the UNavMovementComponent. Most functions and properties kept the same functionality and name, they have just been shuffled around to allow other movement systems use of the pathfollowing system.
Upgrade Notes:
- Any extensions to the PathFollowingComponent will need to be reevaluated as the PathFollowingComponent no longer has a direct reference to a UNavMovementComponent. This component reference has been replaced with an INavMovementInterface that the PathFollowingComponent now uses in place of it. Any code that depends on the old movment system directly (e.g. UNavMovementComponent) will need to change or be added to the new interface. Movement properties that the PathFollowingComponent needs have also been moved out to a new FNavMovementProperties struct so they can be found and enforced across movement systems. So any additional properties that lived on UNavMovementComponent that will be used by other navigation systems (like path following) will need to be moved to this struct. Properties that are not used by a system like path following should be fine to leave on the component as is.
New:
- Added a new NavMovement interface to allow other movement components to implement and handle pathfollowing driven nav movement. Also contains necessary changes to convert existing code to use this new interface.
Gameplay
Upgrade Notes:
-
Please add EngineCameras as a plugin/module dependency if your code uses camera animations and/or camera shakes.
-
In order to upgrade your existing assets, switch any replicated variables to reliable RPC's. This will give you control over the timing of the sending/receiving with respect to activation of your Gameplay Ability. Recall that you will not receive these RPC's by the time your Activate function runs. Read the new GAS README.md for solutions to such problems.
-
Make sure that all Actor classes that override Actor::EndPlay call Super::EndPlay()
-
CVar to enable again: np2.CMC.EnableClientAuthScheduledPushForces 1
-
Make sure that all classes that override ActorComponent::EndPlay call Super::EndPlay everytime.
-
Set Project Settings -> Network Prediction -> Enable Fixed Tick Smoothing to enable the service.
- For a Mover actor, set the Smoothing Mode property to "Visual Component Offset".
-
Added a CVar "AbilitySystem.PlayMontage.FireInterruptOnAnimEndInterrupt" which can be set to false if this causes issues.
-
Playback only works when SimulatedProxyNetworkLOD = Interpolated.
-
This feature can be enabled with the bProcessArcadeStick setting in the Game Input Developer Settings.
-
This feature can be enabled with the bProcessFlightStick setting in the Game Input Developer Settings
-
This feature can be enabled with the "bool bProcessRacingWheel" setting in the game input developer settings.
New:
-
GAS - Deprecating the use of Replicated Properties in Gameplay Abilities. The reason these are deprecated is that since properties replication uses a separate channel than reliable RPC's, the ordering of variable replication with respect to all other Gameplay Ability functionality (such as activating a GA, or providing TargetData) is not guaranteed. This can lead to very subtle and unexpected bugs.
-
Actor Ensure if we detect that the EndPlay virtual functions did not end up calling AActor::EndPlay. EndPlay must always be called otherwise replicated actors and their subobjects might leak and be forever referenced by the ReplicationSystem
-
[NetworkPhysics] [CharacterMovementComponent] A kinematic CharacterMovementComponent pawn with physics interactions enabled along with physics prediction enabled has a client authoritative flow that schedules forces on the server, move this behind a CVar setting rather than being the default mode.
-
Actor - Added ensure to detect if the ActorComponent::EndPlay did not called due to an override behavior
-
Added optional fixed tick smoothing service to the Network Prediction Plugin, which can now be used to support visual component smoothing for Mover-driven actors.
-
Arcade Stick support in Game Input
-
Add flight stick processing to GameInput
-
Racing Wheel support for Game Input Windows
Bug Fix:
-
GAS - Fixed MontageTask Interrupt After BlendOut
-
Network Prediction plugin: added partial support for replays, fixing crashes and supporting authority/autonomous roles
Level Design and Art Tools
World Building
Upgrade Notes:
- This requires manual fix-up of any references to the PointCount declaration in Custom HLSL Shader Source and Shader Functions text fields.
New:
- Rename PointCount to NumPoints in PCG Custom HLSL node *
Localization
API Change:
-
API improvements for creating and finding localized FText
-
FText::FindText is deprecated as it can no longer find untranslated text. Consider FText::FindTextInLiveTable_Advanced or FText::AsLocalizable_Advanced as a replacement, depending on your use-case.
-
FInternationalization::ForUseOnlyByLocMacroAndGraphNodeTextLiterals_CreateText is deprecated in favor of FText::AsLocalizable_Advanced. Note: FText::AsLocalizable_Advanced takes its arguments in a different order!
-
-
Store the in-memory FTextKey string data as UTF-8 by default
- You can set UE_TEXTKEY_USE_UTF8=0 to restore the previous behavior of storing TCHAR data internally
Upgrade Notes:
-
API improvements for creating and finding localized FText
-
Added FText::AsLocalizable_Advanced
-
This is the replacement for FInternationalization::ForUseOnlyByLocMacroAndGraphNodeTextLiterals_CreateText within the formal FText API.
-
It is the implementation of the LOCTEXT macro, and is NOT a replacement for creating text literals in C++!
-
It is intended for advanced use-cases that were already using FInternationalization::ForUseOnlyByLocMacroAndGraphNodeTextLiterals_CreateText to create a localizable FText that was then being assigned to something like a FText property on an asset, OR as an alternative to FText::FindTextInLiveTable_Advanced for cases where the text exists, but isn't yet translated.
-
-
Added FText::FindTextInLiveTable_Advanced
-
This is the replacement for FText::FindText.
-
It has the same behavior as before, but is clearer about what it can and cannot do.
-
Existing FText::FindText usage should be audited to decide whether to continue to use FText::FindTextInLiveTable_Advanced or swap to using FText::AsLocalizable_Advanced on a case-by-case basis.
-
-
-
Store the in-memory FTextKey string data as UTF-8 by default
- This change deprecates FTextKey::GetChars(). Use FTextKey::ToString/AppendString instead.
New:
-
API improvements for creating and finding localized FText
-
Store the in-memory FTextKey string data as UTF-8 by default
- This trades some CPU cost when converting FString -> FTextKey -> FString, in exchange for halving the text key string memory (as most, if not all, text keys are actually ASCII).
Platform
XR
Upgrade Notes:
- Replace usages of GetMotionControllerData with GetMotionControllerState and/or GetHandTrackingState, as appropriate.
New:
- GetMotionControllerData Refactoring -Added new methods to get controller and hand tracking status separately rather than mushed together with ambiguous validity and tracking status. -Removed GetControllerTransformForTime which was deprecated in 5.3.
Platform Mobile
iOS, tvOS, and iPadOS
Upgrade Notes:
- See the
SLoginFlowImpl::HandleBeforePopup()
function for an example of openingtarget="_blank"
links on IOS in a default external browser.
Bug Fix:
- Fixed an issue where IOS WebBrowser could not handle links with
target="_blank"
. These are now routed to theOnBeforePopup()
event.
Rendering
Lighting
Upgrade Notes:
-
Accurate rect lights path is enabled by default since the quality is superior and the performance difference is minimal even with many rect lights. Can be disabled with r.TranslucencyLightingVolume.AccurateRectLights 0.
-
See r.Shadow.Virtual.Clipmap.WPODisableDistance.LodBias and associated notes for the difference in WPO handling in shadow passes.
New:
-
Implement a faster batched path for translucency lighting volume injection. Added a more accurate RectLight integration for translucency light volume (to both paths).
-
Refactor virtual shadow map invalidations to improve instance culling performance.
-
Changes to how WPO distance disable is handled in the virtual shadow map pass.
Materials and Shaders
Upgrade Notes:
- Updated DirectXShaderCompiler (DXC) to version release-1.8.2403.
New:
- [DXC] DXC release-1.8.2403 update This is the last CL of the DXC update including the binary files and API headers. The other CLs including all source changes are: - 32164743 SPIRV-Headers - 32166600 SPIRV-Tools - 32165724 SPIRV-Cross - 32165890 DirectXShaderCompiler - 32165937 ShaderConductor - 32165762 googletest - 32165815 cxxopts
Nanite
Upgrade Notes:
- Use the new "Tessellation" view mode to identify displaced materials instead of the "Pixel Programmable" view mode that previously included these materials for performance risk identification.
New:
- Added "Tessellation" view to the standard Nanite Visualization list of view modes. Also removed materials with displacement from the "Pixel Programmable" view. Use the new "Tessellation" view mode to identify displaced materials instead.
Niagara
Upgrade Notes:
- This might break some existing content, but whatever it compiled down to before didn't work anyway.
Bug Fix:
- Niagara now fails to compile when writing to attributes from the wrong namespace (e.g. to Emitter.Age from a particle script)
Simulation
Physics
Upgrade Notes:
-
Existing assets using the per-platform MinLod property will automatically be upgraded using the per-platform values of p.ClothAsset.MinLodQualityLevel
-
Previous LogString Dataflow nodes have been deprecated and it is recommended to replace them the new Print node instead
-
The current version node is now deprecated and any node placed in Dataflow prior to 5.5 requires replacing it with a new one
-
v2 versions of the Skeletal and Static Mesh Import nodes were added with the correct Normals import so as not to affect existing assets.
New:
-
Implemented Quality Level Min Lod for Chaos Cloth Assets, which can be enabled via the Engine.ini file. This matches how Quality Level Min Lod works for Static Meshes and Skeletal Meshes. The cvar p.ClothAsset.MinLodQualityLevel can be set in per platform ini files to manage MinLodQualityLevel on a per-platform basis.
-
Added Print Dataflow node with string compatible generic input (Also deprecated the previous LogString nodes)
Bug Fix:
-
Fixed CollectionTransformSelectCluster dataflow node that was wrongly selecting leaves instead of clusters
-
Fixed normal calculation/import when creating Chaos Cloth Assets so they're no longer flipped.
Pixel Streaming
-
Upgrade Notes: The following list includes some of the high-level changes you should be aware of when moving to Pixel Streaming 2:
-
All Blueprint nodes have a Pixel Streaming 2 version. If you are migrating your project, you must manually recreate and relink relevant nodes in your Blueprints. A redirector is not possible when the entire plugin name is changed.
-
We significantly changed the C++ API. Several files and members have been added, removed, or renamed.
-
The Pixel Streaming settings have changed. We added some new options, changed default values for some existing options, and deprecated legacy options.
-
You can now set the Pixel Streaming settings from .ini, console, or command line. The setting priority order is .ini is overridden by command line, which is overridden by console.
-
Pixel Streaming Player functionality is included with Pixel Streaming 2, rather than requiring an additional plugin. The setup steps have significantly changed so please see the official Unreal Engine Docs for detailed instructions.
-
Stream sharing has been removed as it was a hack with many issues around stuttering and freezing. Users who were relying on the stream sharing functionality to support multiple viewers per stream should instead opt to use the Selective Forwarding Unit (SFU) as a replacement for this functionality. More information on its functionality and how to use it can be found in the official Unreal Engine Docs.
-
-
API Change: PixelStreaming
-
IPixelStreamingAudioConsumer.h
*Renamed to IPixelStreaming2AudioConsumer.h. No other changes
-
IPixelStreamingAudioInput.h
- Renamed to IPixelStreaming2AudioProducer.h. No other changes
-
IPixelStreamingAudioSink.h
- Renamed to IPixelStreaming2AudioSink.h. The IPixelStreamingAudioSink has had the
bool HasAudioConsumers
method removed. Users are not required to interact with this method. They may continue to use the remainingAddAudioConsumer
andRemoveAudioConsumer
methods.
- Renamed to IPixelStreaming2AudioSink.h. The IPixelStreamingAudioSink has had the
-
IPixelStreamingModule.h
- Renamed to IPixelStreaming2Module.h
-
Additionally, the following methods were removed:
-
SetCodec
-
GetCodec
- The above methods have been removed as they were just wrapping CVar functionality. Users wishing to set the PS2 codec programmatically should use the Engine’s IConsoleManager and its relevant methods.
-
SetExternalVideoSourceFPS
-
SetExternalVideoSourceCoupleFramerate
-
SetExternalVideoSourceInput
-
CreateExternalVideoSource
-
ReleaseExternalVideoSource
-
CreateVideoEncoderFactory
- The above methods have been removed as the external video source was a hack for another plugin.
-
AddInputComponent
-
RemoveInputComponent
-
GetInputComponents
- The above methods have been removed from the module as the InputComponent C++ interface has moved internally to the module. The following methods have been added:
-
CreateVideoProducer
-
CreateAudioProducer
-
-
IPixelStreamingSignallingConnection.h
- Has been completely removed with no replacement. This class is no longer required as signaling is abstracted away from the user in the new plugin.
-
IPixelStreamingSignallingConnectionObserver.h
*Has been completely removed with no replacement. This class is no longer required as signaling is abstracted away from the user in the new plugin.
-
IPixelStreamingStats.h
- Renamed to IPixelStreaming2Stats.h. No other changes.
-
IPixelStreamingStreamer.h
*Renamed to IPixelStreaming2Streamer.h.
-
Additionally, the following methods have been removed:
-
SetTargetViewport
-
GetTargetViewport
-
SetTargetWindow
-
GetTargetWindow
-
SetTargetScreenRect
-
GetTargetScreenRect
-
Users using the above methods should instead use GetInputHandler before calling the above methods on the input handler directly.
-
-
OnInputReceived delegate has been removed. Users that were relying on this functionality should instead register a message handler with the streamer’s input handler.
-
SendPlayerMessage renamed to SendAllPlayerMessage and types changes. Type changes from uint8 to FString which represents the string based identifier for the message you wish to send e.g. "Command"
-
SendPlayerMessage is a new method (despite having the same name as a previous method) that sends a message to a particular PlayerId.
-
SetInputHandler has been removed in favor of users using the same input handler, but instead registering their own custom message handler.
-
GetSignallingConnection
-
SetSignallingConnection
-
GetSignallingConnectionObserver
- The above methods have been removed as the signalling interface is no longer exposed through the PS2 plugin.
-
SetPlayerLayerPreference has been removed in favor of a frontend setting.
-
SetInputHandlerType has been removed as it just proxied the input handler’s method. Users should get the input handler from the streamer and then call SetInputType on the handler.
-
CreateAudioInput has been removed in favor of the Module’s CreateAudioProducer.
-
RemoveAudioInput has been removed as the audio input lifecycle is automatically managed.
-
The following methods have been renamed:
-
SetVideoInput has been replaced with SetVideoProducer.
-
GetVideoInput has been replaced with GetVideoProducer.
-
-
The following methods have been added:
-
GetPeerVideoSink.
-
GetUnwatchedVideoSink.
-
-
PixelStreamingAudioComponent.h
*This header exposes two types: FWebRTCSoundGenerator and UPixelStreamingAudioComponent both are now private in C++. The purpose of this header was to make the Pixel Streaming audio component available for use in blueprint, this is still achieved with this header becoming private. If users need to access this functionality in C++ then they will have to make custom types that mimic these in their own project. However, this should be straightforward as all the required types are public.
-
PixelStreamingBufferBuilder.h
*Has been completely removed with no replacement as it was used purely by the datachannel, which has become an internal type in Pixel Streaming 2. Users who were using the buffer builder functionality can easily replicate it in their own code as all the required types are common UE types and still available for use.
-
PixelStreamingCodec.h
*Has been completely removed with no replacement and instead EVideoCodec from Plugins\Experimental\AVCodecs\AVCodecsCore\Source\AVCodecsCore\Public\Video\VideoConfig.h are used instead.PixelStreamingDataChannel.hHas been completely removed with no replacement. For users wanting to send messages, these methods have moved to SendAllPlayerMessage and SendPlayerMessage on the IPixelStreaming2Streamer. Users previously depending on the OnMessageReceived delegate should instead register a message handler with the streamer’s input handler. Users relying on OnOpen and OnClosed can use UPixelStreaming2Delegates OnDataTrack(Open/Closed) and OnDataTrack(Open/Closed)Native noting that these delegates don’t expose the track itself and are purely for tracking data track lifetime.PixelStreamingDelegates.hRenamed to PixelStreaming2Delegates.h. The following delegates have been removed
-
OnQualityControllerChangedNative as the stream sharing functionality is no longer available in PS2. For users wishing to stream to a large number of peers simultaneously, consider using the Selective Forwarding Unit (SFU) from the PixelStreamingInfra.
-
The following delegates have been replaced:
-
Fixed spelling of OnFallbackToSoftwareEncodering(/Native) to OnFallbackToSoftwareEncoding(/Native)
-
Renamed OnDataChannelOpen/Closed(/Native) to OnDataTrackOpen/Closed(/Native)
-
OnConnectedToSignallingServer modified to broadcast an FString parameter representing the ID of the streamer that connected to the signalling server
-
OnConnectedToSignallingServerNative modified to broadcast an FString parameter representing the ID of the streamer that connected to the signalling server
-
OnDisconnectedFromSignallingServer modified to broadcast an FString parameter representing the ID of the streamer that connected to the signalling server
-
OnDisconnectedFromSignallingServerNative modified to broadcast an FString parameter representing the ID of the streamer that connected to the signalling server
-
-
The following delegates have been added:
-
Added C++ delegates for when VideoTracks and AudioTracks are Open/Closed
-
Additional info:
-
Moved all delegates C++ to be thread safe
-
Static boolean bIsExiting Removed, users can track this with IsEngineExitRequested.
-
Removed CreateInstance method and renamed GetPixelStreamingDelegates to simply Get. Users can now call UPixelStreaming2Delegates::Get() to obtain the singleton pointer to the delegates object.
-
-
PixelStreamingInputComponent.h
- Has been completely removed with no replacement. This component is used to send and receive datachannel messages from blueprint. This functionality is still exposed in blueprints, however, interacting with this type in C++ has now been made internal to the plugin only. For users wanting to send and receive datachannel messages in C++ please use PixelStreamingInputHandler.h, which has been exposed for several engine versions now.
-
PixelStreamingPeerConnection.h
- Has been completely removed with no replacement as this file exclusively used WebRTC types which are no longer referenced in PS2.
-
PixelStreamingPlayerConfig.h
- Has been completely removed with no replacement. This type was previously exposed for handling signaling messages such as
PlayerConnected
. However all signaling logic has been moved to be internal in Pixel Streaming 2, therefore this header’s types are no longer required.
- Has been completely removed with no replacement. This type was previously exposed for handling signaling messages such as
-
PixelStreamingPlayerId.h
- Has been completely removed with no replacement as it was typedef of FString. You can safely substitute FString in all call sites where PixelStreamingPlayerId was previously being used.PixelStreamingSessionDescriptonObserver.hHas been completely removed with no replacement.PixelStreamingSettings.hHas been completely removed with no replacement. It contained three methods: (1) GetSimulcastParameters, (2) GetCaptureUseFence, and (3) GetVPXUseCompute. Methods (1) and (2) can be queried using CVars, ini settings, or plugin settings and (3) has been removed entirely as this codepath related to VPX compute shaders showed no meaningful improvement.PixelStreamingSignallingConnection.hHas been completely removed with no replacement.
-
PixelStreamingStatNames.h
- Renamed to PixelStreaming2StatNames.h. QualityController stat has been removed because QualityController is no longer used by PixelStreaming.
-
PixelStreamingUtils.h
- Renamed to PixelStreaming2Utils.h
-
PixelStreamingTrace.h
- Has been completely removed with no replacement. This header is only for internal use inside Pixel Streaming and its related modules. If you were using this trace definition, you should create your own trace definition using
UE_TRACE_CHANNEL_EXTERN
.
- Has been completely removed with no replacement. This header is only for internal use inside Pixel Streaming and its related modules. If you were using this trace definition, you should create your own trace definition using
-
**PixelStreamingVideoInput.h
-
PixelStreamingVideoInputBackBuffer.h
-
PixelStreamingVideoInputI420.h
-
PixelStreamingVideoInputNV12.h
-
PixelStreamingVideoInputPIEViewport.h
-
PixelStreamingVideoInputRenderTarget.h
-
PixelStreamingVideoInputRHI.h
- These have been moved to internal and replaced by IPixelStreaming2VideoProducer.h for the public API. Users can now use the Modules CreateVideoProducer method as well as the Streamers SetVideoProducer method to use their custom video producers with PixelStreaming2.
-
PixelStreamingVideoSink.h
- Has been removed and replaced with IPixelStreaming2VideoSink.h. Users must create their own class that implements IPixelStreaming2VideoConsumer from IPixelStreaming2VideoConsumer.h. Once this is done, users can obtain a video sink from the Streamers GetVideoSink method and then call AddVideoConsumer with a pointer to their custom consumer.
-
PixelStreamingWebRTCIncludes.h
- Has been completely removed with no replacement as WebRTC is no longer exposed and EpicRtc is used.
PixelStreamingEditor
-
IPixelStreamingEditorModule.h
- Renamed to IPixelStreaming2EditorModule.h. Additionally, the
bool UserExternalSignallingServer
andvoid UseExternalSignallingServer(bool bUseExternalSignallingServer)
methods have been removed and this information should instead be queried from the appropriate ini / cvars.PixelStreamingEditorUtils.hThis header has been removed. It contained three methods: (1) ToString(EStreamType), (2) ToString(EWindowType), and (3) HashWindow. All three methods provided no functionality so have been removed entirely. The EStreamType enum has moved to PixelStreaming2CoreEnums.h and renamed to EPixelStreaming2EditorStreamTypes.PixelStreamingStyle.hThis header has been moved to Internal. Its functionality was only used internally for the Editor streaming module and as such has been relocated.PixelStreamingVideoBackBufferComposited.hThis header has been moved to Internal.
- Renamed to IPixelStreaming2EditorModule.h. Additionally, the
-
PixelStreamingVideoViewport.h
- This header has been moved to Internal.
PixelStreamingHMD
-
IPixelStreamingHMDModule.h
- Renamed to IPixelStreaming2HMDModule.h. Additionally, GetPixelStreamingHMD now returns the new interface type.
-
PixelStreamingHMD.h
- This header has been replaced with IPixelStreaming2HMD.h. Users can use the two exposed functions: (1) SetTransform and (2) SetEyeViews as they were previously.
-
PixelStreamingHMDEnums.h
- Renamed to PixelStreaming2HMDEnums.h
PixelStreamingServers
-
PixelStreamingServers.h
- The following methods have been removed: (1) MakeCirrusServer and (2) MakeLegacySignallingServer. With these removals, users wishing to launch a signalling server from the application are forced to create an embedded C++ signalling server that still serves the PixelStreamingInfra frontend.EndPoint has had Signalling_Matchmaker removed.
PixelStreamingInput
-
EditorPixelStreamingSettings.h
*The purpose of this header was to expose some plugin settings that can be set via the Unreal Editor plugin UI. This functionality has now been made internal; however, you may still set these settings using the plugin UI.
-
IPixelStreamingInputHandler
-
OnSendMessage
- This member has been changed from a multicast delegate to an event as only internal Pixel Streaming code should be able to broadcast this event. However, you may still bind to this member to add custom handling to messages that input handler is sending over the datachannel (e.g. the gamepad id message and textbox entry message).IPixelStreamingInputModule
-
OnProtocolUpdated
*This member delegate has been moved into the new interface IPixelStreamingDataProtocol, which can be accessed via the IPixelStreamingInputHandler::GetFromStreamerProtocol() and IPixelStreamingInputHandler::GetToStreamerProtocol().The functionality remains the same, except now each streamer can have its own protocols (e.g. each streamer has a ToStreamer and FromStreamer protocol), and as such each protocol has its own OnProtocolUpdated delegate.
-
-
PixelStreamingInputConversion.h
- This header was only used by the PixelStreaming Input module, so it has now been made private. If you were using mappings from this header, then you can replicate those mappings in your own project by creating your own version of these maps and populating them. All the types required are public and available.
-
PixelStreamingEnums.h
- Added EPixelSreamingToStreamerMessage FStrings and EPixelSreamingFromStreamerMessage FStrings. These are effectively used as enums.
-
PixelStreamingInputMessage.h
- Has been completely removed. There is now a new header that exposes an interface for these messages in IPixelStreaming2InputMessage.h.
-
PixelStreamingInputProtocol.h
- This header has been removed. The two static protocols in this header have been replaced with IPixelStreaming2InputHandler::GetToStreamerProtocol and IPixelStreaming2InputHandler::GetFromStreamerProtocol.
-
PixelStreamingInputProtocolMap.h
- This header was previously used to add custom data channel messages and has been moved to internal. Users wishing to create and add their own Input Message should no longer use the map directly, but rather use the Add() method from IPixelStreaming2DataProtocol, which if successful, will return the newly created and added message.
PixelStreamingPlayer
-
PixelStreamingMediaTexture.h
- Has been completely removed with no replacement. This component is used to update materials with video frames received in PS2. This functionality is still exposed in blueprints, however, interacting with this type in C++ has now been made internal to the plugin only. For users wanting to display video frames received in PS2, users should implement IPixelStreaming2VideoConsumer and add it to an IPixelStreaming2VideoSink.
-
PixelStreamingPeerComponent.h
- Has been completely removed with no replacement. This component is used to receive a PixelStreaming stream in the engine. This functionality is still exposed in blueprints, however, interacting with this type in C++ has now been made internal to the plugin only. For users wanting to receive a stream in the engine, users should implement their own peer similar to how this class achieves the functionality.
-
PixelStreamingSignallingComponent.h
- Has been completely removed with no replacement. This class is no longer required as signaling is abstracted away from the user in the new plugin.
-
PixelStreamingWebRTCWrappers.h
- Has been completely removed with no replacement as WebRTC is no longer exposed and EpicRtc is used.
Settings Changes
-
-PixelStreamingSignalingKeepAliveInterval - new
-
-PixelStreamingUseMediaCapture - true now by default
-
-PixelStreamingID - can now be set by command line
-
-PixelStreamingSendPlayerIdAsInteger - removed
-
-PixelStreamingVPXUseCompute - removed
-
-PixelStreamingExperimentalAudioInput - removed and now always enabled
-
-PixelStreamingSuppressICECandidateErrors - removed as it was only useful for some flaky tests, which have since been stabilized.
-
-PixelStreamingFastPan - removed as there was no code path that has used this option for multiple UE versions now.
-
-PixelStreamingEncoderMinQuality - replaces MaxQP which sets the lower bound for encoding quality. The reason for this change was MaxQP controlling the quality lower bound was unclear to most users and the previous value range, [1-51], was only useful for H.264. The new range is [0 - 100], where 0 is the lowest quality and 100 is the highest quality, can be used across all supported Pixel Streaming codecs.
-
-PixelStreamingEncoderMaxQuality - replaces MinQP which sets the upper bound for encoding quality. The reason for this change was MinQP controlling the quality upper bound was unclear to most users and the previous value range, [1-51], was only useful for H.264. The new range is [0 - 100], where 0 is the lowest quality and 100 is the highest quality, can be used across all supported Pixel Streaming codecs..
-
-PixelStreamingEncoderPreset - Replaced with PixelStreamingEncoderQualityPreset and PixelStreamingEncoderLatencyMode
-
-PixelStreamingEncoderQualityPreset - Preset that configures several settings of an encoder and balances quality and bitrate.
-
-PixelStreamingEncoderLatencyMode - new setting that configures several aspects of an encoder and balances latency and quality. Note selecting lower latency modes with a high quality preset will likely result in lower quality than if latency is default.
-
-PixelStreamingEncoderIntraRefreshPeriodFrames - removed as its functionality was duplicated by -PixelStreamingEncoderKeyframeInterval
-
-PixelStreamingEncoderRateControl - removed
-
-PixelStreamingEnableFillerData - removed
-
-PixelStreamingEncoderMultipass - removed: low latency modes will disable mulitpass
-
-PixelStreamingEncoderIntraRefreshPeriodFrames - removed
-
-PixelStreamingEncoderIntraRefreshCountFrames - removed
-
-PixelStreamingDegradationPreference - removed and hardcoded to MAINTAIN_FRAMERATE
-
-PixelStreamingEncoderKeyframeInterval - Default is now -1 so no periodic keyframes
-
-SimulcastParameters - replaced with PixelStreamingEncoderEnableSimulcast
-
-PixelStreamingEncoderScalabilityMode - specifies the encoder scalability mode which is one of the supported modes: https://www.w3.org/TR/webrtc-svc/#scalabilitymodes*.
-
-PixelStreamingWebRTCMaxBitrate - drop default from 100mb/s to 40mb/s
-
-PixelStreamingWebRTCLowQpThreshold - removed
-
-PixelStreamingWebRTCHighQpThreshold - removed
-
-PixelStreamingWebRTCUseLegacyAudioDevice - removed and LegacyAudioDevice is deprecated
-
Virtual Production
nDisplay
Upgrade Notes:
-
SwitchboardListenerHelper is not required anymore.
-
If old projects had intentional overrides, they will now use the blueprint values.
New:
-
SBL: It can now lock the GPUs itself. SBLH is not required anymore. We are keeping SBLH around mostly so that the user doesn't need to run SBL as admin. Also fixed an issue where the open button icon of unreal devices in SB would not always update because it would update before the program queue was updated after a program ended notification came from the listener, and that program queue was checked when updating the classes.
-
nDisplay: Force media settings to use archetype values, avoiding potential mismatch in media settings between level instance and blueprint.
Tools
Upgrade Notes:
-
5.4 files are not compatible and recordings will need to be saved again.
-
XRCreative Framework is now Beta
-
Remote Control Protocol Masking UI improved to be more clear when a component is ON/OFF
New:
-
LiveLinkHub assets now support saving and loading recordings asynchronously. When loading from disk, sections are buffered into memory up to a configurable memory limit.
-
XRCreative Changed Experimental to Beta plugin designation [RN] XRCreative Framework is considered Beta
-
Remote Control: Improved Mask UI for clarity