Was gibt es Neues?
Die Veröffentlichung von Unreal Engine 5.7 führt weitere Verbesserungen für den UE5-Werkzeugsatz ein. Diese Version bietet Verbesserungen in vielen Bereichen, darunter Rendering, Charakter und Animation, Welt-Erstellung, PCG und mehr.
Diese Version umfasst Verbesserungen, die von unserer Community der Unreal-Engine-Entwickler in GitHub übermittelt wurden. Wir bedanken uns bei allen Personen, die zu Unreal Engine 5.7 beigetragen haben:
AlexanderVeselov-arm, AlexBlackfrost, Almax27, andreibazi, az6667, Bit-Rot, Brian-PD, brpendle-ti, bturner, chrysos8201, ckendal3, ColinGulliver, CookiePLMonster, Darcy3000s, dasherman-ea, davidbaack, dmergele, DoubleDeez, DrewWeth, DTG-Will-Marshall, dyanikoglu, erebel55, Eric2-Praxinos, Erlandys, faisa-believer, foobit, gamethread, geordiemhall, glecko, GreenLightning, guansdu, H3mul, IngSubstance, iniside, jamesfAnet, jamespark-unreal, JasonCoombs, jdamdami, jerobarraco, jeysym, Jiboo, JohnJFarrow, Jordonbc, jorge-axiomvfx, jorgenpt, jpritchard1010, KaosSpectrum, KarimLUCCIN, KeithRare, kimkun07-k, kissSimple, klukule, KXOC, laurencei, lclara-BARB, LHG-JonAnderJimenez, ligazetom, LightKL, lsandersljungberg, LucaFranzo98, Maigo, MarcusSvensson92, Mario-Azcona, MartinWickhamFB, Mattiwatti, melku, michael-buschbeck-ms, Minus4-44, moumee, nickdarnell, phochstrasser, PICO-XR, QRare, r457-Ao2, rdunnington, reduf, redxdev, RiotJDebern, rohyunsang, sareali, serhanio, SilverWinter0511, slonopotamus, SoulSharer, sportbikerr1, ssutherland-riot, SukenderDontNod, Sythenz, teddemunnik, tioez326, tokyocplusplus, Tt-Wes, tustanivsky, Vaei, vladbelousoff, vogoltsov, WangKan, Wizzard033, wmiller, x157, yangskyboxlabs, yoonbigbear, zachlute-arenanet, ZeroEightSix, ZeroErrors, zhou-
Rendering
MegaLights (Beta)
MegaLights ist jetzt im Beta-Stadium, mit Verbesserungen bei der Rauschunterdrückung und der allgemeinen Performance. Dies bringt auch die Unterstützung für die folgenden Funktionen mit sich:
Direktionales Licht
Niagara-Partikel-Lichter
Transluzenz
Haarsträhnen
Heterogene Niagara-Volumen
Heterogene Volumen ist jetzt im Beta-Stadium. Im Fokus dieses Updates stehen Verbesserungen beim Schattenwurf mit den folgenden neuen Funktionen:
Kaskadenschatten für das direktionale Licht.
Beer-Shadow-Map-Unterstützung für Epic-Skalierbarkeit, die Folgendes bietet:
Die Zeit für die Schattenerstellung wurde drastisch verbessert.
Schatten-Abfrage in konstanter Zeit.
Schattenmaskenvorlauf, der den zusätzlichen VGPR-Druck in der aufgeschobenen Beleuchtung entfernt.
Um den Schattenwurf zu aktivieren, muss der Editor nicht mehr neu gestartet und der Shader kompiliert werden.
Substrat
Substratmaterialien, die ab UE 5.7 produktionsbereit und standardmäßig aktiviert sind, stellen ein modulares, physikalisch geerdetes Material-Framework dar, das die festen Schattierungsmodelle durch ein System ersetzt, das auf ausdrucksstarke Steuerung, skalierbare Performance und langfristige Flexibilität ausgelegt ist.
Es unterstützt zwei Rendering-Pfade:
Der adaptive GBuffer, der erweiterte Funktionen wie die Topologie pro Pixel und geschichtete Verschlüsse auf moderner Hardware aktiviert.
Der zusammensetzbare GBuffer, ein vereinfachtes Fallback, das eine breite Plattform-Kompatibilität gewährleistet.
Nanite-Vegetation und -Skinning (experimentell)
Nanite-Vegetation ist ein branchenführender Rendering-Pfad, der im Kern aus drei integrierten Systemen besteht:
Nanite-Assemblys, die die Instanzen der Vegetationsteile zu einer zusammenhängenden Einheit verwalten.
Nanite-Skinning, das sein dynamisches Verhalten mit Systemen wie Wind bestimmt.
Nanite-Voxels, bei denen es sich um pixelgroße Voxels handelt, die in der Lage sind, Details, Animationen und Materialeigenschaften abhängig von der Entfernung zur Kamera beizubehalten, und das alles zu einem Bruchteil der ursprünglichen Kosten.
Die Kombination erlaubt es, stabilere Welten mit lebensechter und animierter Vegetation zu erschaffen, die innerhalb eines Budgets von 60 fps auf Hardware der aktuellen Generation geliefert werden können.
Neue Funktionen:
Nanite-Assemblys, für die Erstellung von Vegetations-Assets mit instanziierten Teilen, um die Asset-Größen klein zu halten.
Blueprint-API zum Erstellen von Nanite-Assemblys.
Außerdem gibt es Werkzeuge im Editor, die die Erstellung von Nanite-Assemblys anhand von Auswahlmöglichkeiten erleichtern.
Importer-Unterstützung für USD. Freigegebene USD-Schemata, die in DCC-Werkzeugen verwendet werden können, um Szenen zu markieren, die als Assemblys importiert werden sollen.
Skelett-Mesh-gesteuerter dynamischer Wind; Bäume sind Skelett-Meshs und das neue Plugin Dynamic Wind aktiviert prozeduralen Wind, der auf ihre Bones wirkt.
Nanite-Voxels, um die Vegetationsgeometrie in der Ferne effizient zu rendern.
TSR-Erkennung dünner Geometrien, um Vegetation besser handhaben zu können.
SMAA (experimentell)
Mobilgeräte- und Desktop-Renderer unterstützen jetzt Subpixel Morphological Anti-Aliasing (SMAA). Du kannst es mit dem Mobilgerät-Renderer aktivieren, indem du die CVar r.Mobile.AntiAliasing=5 verwendest, und mit dem Desktop-Renderer, indem du die CVar
r.AntiAliasingMethod=5 verwendest.
Diese Funktion verbessert die visuelle Wiedergabetreue durch hochwertige Kantenglättung mit minimalen Auswirkungen auf die Performance und ist eine effiziente Technik für Mobilgeräte.
SMAA-Anti-Aliasing ist auf allen Plattformen aktiviert.
Anpassung der Qualitätseinstellungen mit
r.SMAA.QualityAnpassung der Kantenerkennung zwischen Farbe oder Luminanz mit
r.SMAA.EdgeModeVerbessere die Kantenglättung ohne hohe Kosten für die GPU.
Diese Funktion ist derzeit noch experimentell. Mit den Qualitätseinstellungen kannst du zwischen Performance und Wiedergabetreue wählen.
Charakter und Animation
Bewegungsanpassung-Auswahl-Integration (experimentell)
In UE 5.7 haben wir unsere erste Iteration von Bewegungsanpassung in die Auswahlmöglichkeiten integriert. Wir tun dies, weil es den Benutzern die Kontrolle darüber gibt, welche Assets für die Auswahl in Bewegungsanpassung gültig sind, was in früheren Releases nur auf Datenbankebene und nicht auf der Ebene der einzelnen Assets möglich war.
Das bedeutet, dass du nicht nur nach der besten Pose suchen kannst, sondern auch die Ergebnisse pro Asset auf Basis zusätzlicher Bedingungen wie der Spiel-Logik über die Auswahl filtern kannst.
Das neue Pose Search-Feld in den Auswahlmöglichkeiten verwaltet diese Komplexität zusammen mit dem integrierten Debugging der Bewegungsanpassung in den Auswahlmöglichkeiten.
Diese Funktion ist experimentell.
Blendshapes und Sculpting-Werkzeuge
Bringe die Flexibilität der branchenführenden Sculpting-Workflows in Unreal Engine. Dies ist ein Update für die Werkzeuge im Skelett-Editor, mit dem du jetzt Morph-Formen, Bones und Skin-Gewichtungen nahtlos erstellen und bearbeiten kannst.
Bewege dich sofort zwischen dem Platzieren von Bones, dem Malen von Gewichtungen und dem Erstellen von Blendshapes auf einem Skelett-Mesh.
Neuer Morph-Ziel-Viewer.
Formen passen sich an Änderungen der Mesh-Topologie an.
Statte Animatoren mit ausdrucksstarken Werkzeugen für Performances in Studioqualität aus.
Welt-Kollisionen für Control-Rig-Physik
Bringe Level-Kollisionen in deine Control-Rig-Physik-Simulationen. Verwende die vorhandene Welt-Geometrie und Physik-Körper, um glaubwürdige Kontakte, Stöße und Interaktionen zu erstellen.
Unterstützung für Welt-Kollisionen in der Control-Rig-Physik mit einseitiger Interaktion.
Verwende Meshs und Physik-Körper im Level als Collider.
Steuere den Kontakt mit Props, Böden und der Umgebung während der Simulation und Wiedergabe.
Control-Rig-Abhängigkeitsansicht
Verstehe mit einer dedizierten Abhängigkeitsansicht, wie Rig-Elemente miteinander verbunden und über die Zeit aktualisiert werden. Visualisiere die Beziehungen zwischen Steuerelementen, Bones und Modulen, um das Debuggen zu vereinfachen.
Erkunde die Parent-Child- und Metadaten-Beziehungen auf einen Blick.
Debugge Rigs und Module mit besserer Sichtbarkeit des Datenflusses.
Visualisierung der vertrauten Abhängigkeitsstruktur.
FBIK- und Retargeting-Performance
Wir haben die Performance verbessert und die Steuerelemente in Full Body IK und IK Retargeter ergänzt. So kannst du zur Laufzeit ein performantes Retargeting vornehmen.
Verbessere das Posing mit FBIK ohne große Kosten für die Performance (~20 % Geschwindigkeitssteigerung).
Verwende den Gliedmaßendehnung-Solver in IK Rig für performante Retargetings zur Laufzeit.
Verwende den FK-Drehungsmodus Lokal kopieren für eine schnellere Übertragung der Drehung pro Kette.
Aktiviere die Erstellung von Performance-Profilen auf dem Retarget-Stapel.
Füge einen LOD-Schwellenwert pro Retargeting-Operator hinzu.
Besserer Fußkontakt und proportionales Retargeting
Wir haben den IK-Retargeter verbessert, um den Bodenkontakt und Charaktere mit riesigen Proportionen besser handhaben zu können.
Dies ermöglicht eine bessere Übertragung von Animationen auf eine Vielzahl von Charakteren, sodass du schneller die künstlerische Gestaltung vornehmen kannst. Du kannst jetzt Folgendes tun:
Definiere die Schritthöhe, damit das Becken nicht auf den Boden stürzt und die vertikale Bewegung erhalten bleibt.
Füge die Bodenbeschränkung zu den Füßen hinzu, um die vertikale Position beizubehalten, wenn sie sich in Bodennähe befinden.
Verwende den FK-Verschiebungsmodus Ausrichten und skalieren, um Bone-Verschiebungsdaten zu übertragen.
Füge den Dehnen-Kette-Operator hinzu, um die Quell-Retarget-Kette anzupassen oder zu skalieren.
Verwende den Gliedmaße dehnen-Solver, um das Stauchen und Dehnen von Gliedmaßen zu steuern.
Ändere den Drehpunkt der Quell-Skalierung auf einen anderen Bone für Motion-Capture oder Gameplay.
Füge den Bones filtern-Operator hinzu, um hochfrequentes Rauschen beim Retargeting größerer Charaktere zu entfernen.
Räumlich bewusstes Retargeting (experimentell)
Räumlich bewusstes Retargeting bietet Künstlern die Möglichkeit, Animationen zwischen verschiedenen Charakteren zu übertragen, ohne sich um Selbstkollisionen kümmern zu müssen.
So musst du die Animation nach dem Retargeting nicht mehr so oft bereinigen.
Wir haben einen Körperinteraktionen-Operator hinzugefügt, um IK-Ziele unter Verwendung von Physik zu verschieben, um Selbstkollisionen zu verhindern.
Wir haben einen Relative-IK-Operator hinzugefügt, um IK-Ziele relativ zu den Kontaktlängen von der Quelle zum Ziel zu verschieben.
Sequenz-Validator (experimentell)
Mit dem Sequenz-Validator können künstlerische Filmsequenzen auf inhaltliche Fehler in ihren Sequenzen geprüft werden. Dies reduziert die Anzahl möglicher Probleme, die bei der Arbeit im Sequencer während einer Produktion auftreten können.
Du kannst ihn für folgende Zwecke verwenden:
Stelle mehrere Sequenzen und ihre Hierarchien in eine Warteschlange für mögliche Probleme.
Prüfe, ob Sektionen in einer Sequenz außerhalb des Kameraschnitts oder des Wiedergabebereichs liegen.
Prüfe auf nicht zugewiesene Bindungen oder Assets in Sektionen.
Prüfe, ob Sektionen auf ganzen Frames beginnen und/oder enden.
Überprüfe die Ergebnisse und navigiere direkt dorthin, wo das Problem in jeder Sequenz liegt.
Ease-Kurve (Beta) und UX-Verbesserungen
Du kannst jetzt das Werkzeug Ease-Kurve von Motion Design im Sequencer verwenden. Du kannst es mit dem Plugin Ease Curve aktivieren
Außerdem bringt dieses Update mehr kohärente Verhaltensweisen für bessere Benutzerfreundlichkeit, damit du schneller iterieren kannst.
Verwende das Ease-Kurve-Werkzeug, um verschiedene Ease-Kurve-Voreinstellungen im Sequencer, Kurven-Editor und UMG anzuwenden und zu speichern.
Stelle die Skalierung ähnlich wie im Details-Panel im Sequencer-Baum ein, indem du die Skalierungssperre verwendest.
Die Zeitleiste der Hierarchien von Sequenzen wurde verbessert und zeigt nun sowohl die Zeit der aktuellen Sequenz als auch die des Parent an.
Erweiterung der Blueprint- und Python-Fähigkeiten für den Zugriff auf die Track-Zustände (Solo, Stummschalten, Deaktivieren, Sperren und Pin).
Transformations-Baking wurde verbessert und umfasst nun auch Zeitwarping.
Die neuen Spalten Bindungs-ID und Sequenz-ID wurden zum Navigationswerkzeug hinzugefügt.
Das Ease-Kurve-Werkzeug befindet sich derzeit im Beta-Stadium.
Datenlos veränderbar (experimentell)
Beschleunige das Iterieren und rationalisiere deinen Workflow mit datenlosen veränderbaren Objekten. Die Parameter-Inputs werden zur Laufzeit statt zur Kompilierzeit verarbeitet, wodurch du schneller kompilieren, besser verschlüsseln und kleinere Pakete erreichen kannst.
Konvertiere jedes anpassbare Objekt in ein datenloses.
Erlebe schnellere Kompilierzeiten durch die Verarbeitung von Parametern zur Laufzeit.
Verwende die Verschlüsselung und Paketierung wie bei jedem anderen UE-Asset.
Auswahlsätze
Animatoren brauchen während des gesamten Prozesses schnellen Zugriff auf mehrere Auswahlmöglichkeiten. Dabei kann es sich um mehrere Steuerelemente innerhalb eines Rigs handeln, aber auch um mehrere Steuerelemente und/oder Transformationen für verschiedene Assets. Zurzeit sind Animatoren auf benutzerdefinierte Werkzeuge wie GUI-Wähler angewiesen. Deshalb wollten wir eine nativere Version bauen, ähnlich wie die beliebten Plugins in anderen Werkzeugen.
Animationsmodus UX und QOL
Wir haben den Animationsmodus verbessert.
Unsere Werkzeuge Beschränkungen, Raumwechsel und Snapper sind jetzt in dem neuen Fenster Beschränkungen zusammengefasst.
Auch im Zusammenhang mit Beschränkungen haben wir einige neue Optionen in den Erstellungsprozess aufgenommen.
Aktueller Frame: Dies ist die bisherige Standard-Funktionalität. Sie erstellt einen ON-Schlüssel im aktuellen Frame und gleicht alle Schlüssel vorwärts aus.
Von Start (neu): Nimmt den Versatz des aktuellen Frames und setzt ihn auf den ersten Frame deiner Aufnahme anstatt auf den aktuellen Frame.
Unendlich (neu): Fügt keine Schlüssel hinzu. Stattdessen wird der Versatz des aktuellen Frames auf die gesamte Sequenz angewendet.
Posenbibliothek, Überblenden-Werkzeuge, Beschränkungen, Auswahlsätze (neu) und Animationsebenen schalten ihre entsprechenden Fenster jetzt je nach Zustand des Symbols ein oder aus. Ihre Position und Größe innerhalb deines Layouts wird ebenfalls gespeichert.
Du kannst das Umschalten dieser Fenster den Tastaturkürzeln zuweisen.
MetaHuman
MetaHuman Creator
MetaHuman Creator in Unreal Engine ist jetzt unter Linux und macOS verfügbar und bringt leistungsstarke, integrierte Erstellung digitaler Menschen auf deine bevorzugte Plattform. Wenn du noch nicht von der Webanwendung MetaHuman Creator migriert hast, befolge unseren Migrationsleitfaden. Dort findest du Anweisungen, wie du deine bestehenden MetaHuman-Charaktere in Unreal Engine überträgst, um weiter daran zu arbeiten.
Wir haben den Körper-Mesh-Anpassungs-Prozess um die Unterstützung verschiedener Posen erweitert und eine UV-Raum-Scheitelpunkt-Übereinstummung zwischen der Anpassungsvorlage und den Modell-Meshs eingeführt – für genauere Ergebnisse mit weniger Aufwand. Die parametrischen Körpersteuerelemente sind jetzt auch intuitiver, was es einfacher macht, mit höherer Genauigkeit und Kontrolle innerhalb der menschlichen Proportionen zu bleiben.
Mit dieser Veröffentlichung kannst du fast alle Bearbeitungs- und Zusammenstellungsvorgänge für MetaHuman-Charakter-Assets mithilfe von Python oder Blueprints automatisieren und stapelweise verarbeiten. Zum ersten Mal kannst du MetaHuman Creator mit einer API tiefer in deine Pipeline und deinen kreativen Workflow integrieren, die Sculpting, Konformität, Garderobe, Rigging und Texturen unterstützt, wodurch die Zusammensetzung des vollständigen Charakters optimiert wird. Zeige Bearbeitungen live in MetaHuman Creator an und führe sie interaktiv in Unreal Editor oder zur Offline-Verarbeitung in einer Compute-Farm aus.
MetaHumans in Unreal Engine
Das Unreal Engine Groom-Plugin ermöglicht nun eine genauere Kontrolle über Formen und Animieren von Haarsträhnen mit einem gelenkbasierten Workflow. Du kannst jetzt Simulationen mit künstlerischer Bewegung überblenden, auf die vollständige Verwendung von Skelett-Mesh-Animation-Workflows zugreifen und größere künstlerische Freiheit mit erweiterten Auswahlsätzen und Malen-Werkzeugen erzielen. Die Werkzeugsätze bieten vollständige Kompatibilität mit MetaHuman-Grooms, die ursprünglich in Houdini erstellt wurden.
MetaHuman Animator
Die Echtzeit-Animation von MetaHuman-Live Link-Quellen kann jetzt über ein Blueprint-Interface aufgerufen werden. Ein Beispieldiagramm dazu findest du in unserer Dokumentation.
Der Workflow zur Generierung der Kalibrierungsdaten für die Schachbrettaufnahme, die mit einem Stereokamera-Paar aufgenommen wurde, wurde verbessert und bietet nun eine bessere automatische Frame-Auswahl, Visualisierung zur Unterstützung der manuellen Frame-Auswahl und wiederholbare Konfigurationen über mehrere Aufnahmen hinweg.
Kombiniert mit dem neuen Plugin MetaHuman Animator Calibration Diagnostics (experimentell) zur Validierung der Kalibrierung gegen das Performance-Filmmaterial lässt sich leichter bestimmen, ob es sich um die beste zu verwendende Kalibrierung handelt.
MetaHuman-Erfassung
Wir haben die Echtzeit-Animationsoptionen in den Live Link Face-Anwendungen für iOS und Android verbessert, indem das Angebot der unterstützten Kameras erweitert wurde.
Mit Live Link Face kannst du nun Gesichtsanimationen in Echtzeit mit einer externen Kamera auf unterstützten Android-Geräten oder iPads generieren. (Hinweis: iOS von Apple unterstützt derzeit keine externen Kameras.) Video kann nur auf dem iPad von einer externen Kamera aufgezeichnet werden.
Du kannst auch Animationen in Echtzeit generieren, indem du sie von einer beliebigen Gerätekamera mit Live Link Face unter iOS und Android auswählst. Video kann unter iOS nur von der Gerätekamera aufgezeichnet werden.
MetaHuman für Houdini
Die neueste Aktualisierung für MetaHuman für Houdini bietet parametrische Groom-Werkzeuge und einen anleitungsgesteuerten Workflow für die Erstellung von Frisuren mit zuvor erstellten Daten. Der Werkzeugsatz umfasst einen Follikelgenerator, um Dichte und Positionierung im Bereich des Haaransatzes zu verarbeiten, der Orientierungshilfen basierend auf Fall, Länge und Volumenparametern generiert, sowie eine Haarsträhnen-Interpolation und Styling für erweiterte Details wie sich verdickende Bereiche. Das ist eine schnelle und zugängliche Methode, um neue Frisuren zu blockieren und zu iterieren.
In der Zwischenzeit haben wir für alle, die lernen möchten, wie man anspruchsvollere Frisuren erstellt, das neue MetaHuman Groom Erweiterte Kit für Houdini auf Fab als zusätzliche Lernressource veröffentlicht.
MetaHuman für Houdini ist jetzt für Linux verfügbar.
MetaHuman für Maya
Die neueste Aktualisierung für MetaHuman for Maya ist jetzt auf Linux verfügbar und führt Unterstützung für Maya 2026 ein.
Welt-Erstellung
Benutzerdefinierte HLODs
Wenn du die bereitgestellten Methoden zur automatischen HLOD-Generierung verwendest, entspricht der Output möglicherweise nicht immer den Anforderungen des Projekts und ist an Mesh-Komponenten gebunden.
Benutzerdefinierte HLODs-Unterstützung adressiert dieses Beschränkung, indem es dir die Möglichkeit gibt, deine eigenen benutzerdefinierten HLOD-Darstellungen für einzelne Actors oder Actor-Gruppen zu erstellen.
Du kannst die neue benutzerdefinierte Klasse der World Partition HLOD-Actors auf zwei Arten verwenden:
Benutzerdefinierte Darstellung direkt injizieren: Du kannst die benutzerdefinierte Darstellung direkt in die HLOD-Laufzeitpartition einfügen und optional als Input für die Parent-HLOD-Ebenen verwenden.
Nur eine benutzerdefinierte Quelle bereitstellen: Du kannst die benutzerdefinierte Darstellung als Input für die HLOD-Generierung verwenden, ohne sie der Welt selbst hinzuzufügen.
UX-Einrichtung für HLODs
Wir haben HLODs-Ebenenkonfiguration und HLODs-Ebenen-Assets in Welteinstellungen > World Partition überarbeitet, um die Benutzerfreundlichkeit beim Erstellen oder Bearbeiten eines Setups zu verbessern.
Prozedurale Inhaltsgenerierung (Procedural Content Generation, PCG)
PCG-Framework ist produktionsbereit
Das Procedural Content Generation Framework (PCG) ist mit dem Release von UE 5.7 jetzt produktionsbereit.
Während das Framework kontinuierlich weiterentwickelt wird, übernehmen wir die Unterstützung einer stabilen Umgebung, damit alle Produktionen dieses schnelle und iterative Toolset zur prozeduralen Generierung von Inhalten sowohl zur Laufzeit als auch im Editor nutzen können.
PCG-Editor-Modus
Ein neuer PCG-spezifischer Modus für Werkzeuge im Editor ist jetzt in Unreal Engine verfügbar. Er bietet eine Bibliothek von anpassbaren Werkzeugen, die das PCG-Framework nutzen, wie z. B. Spline zeichnen, malen oder Volumen erstellen, jeweils mit einem zugehörigen PCG-Diagramm und seinen Parametern, die live bearbeitet werden können.
Du kannst die bereitgestellten werkzeugspezifischen PCG-Diagramme direkt verwenden oder als Muster anpassen, um die Bibliothek für deine eigenen Bedürfnisse zu erstellen und zu erweitern.
Wenn du die Vorschau von UE 5.7 verwendet hast, weichen deine PCG-Editor-Modus-Einstellungen möglicherweise von der Standardkonfiguration ab. Wenn dein PCG-Editor-Modus-Fenster nicht geöffnet wird und stattdessen einen Fehler anzeigt, öffne Plugins – PCG-Editor-Modus-Einstellungen in den Editor-Einstellungen und klicke dann oben rechts auf Auf Standardwerte zurücksetzen.
Procedural Vegetation Editor
Procedural Vegetation Editor ist ein neues experimentelles Plugin, mit dem du direkt in Unreal Engine Vegetations-Meshs erstellen und bearbeiten kannst, die auch Nanite-Vegetation unterstützen.
In diesem ersten Release werden prozedurale Vegetations-Assets, die du erstellst, mit dem Vegetations-Editor, einem PCG-basierten Knoten-Diagramm-Editor, bearbeitet. Du kannst den mitgelieferten Importer-Knoten und die Skelett-Voreinstellungen verwenden, die im Inhaltsordner des Plugins bereitgestellt werden:
Verändere die Form der Bäume durch die Operatoren Schwerkraft, Schnitzen und Skalieren.
Passe die Verteilung von Blättern und Zweigen an.
Weise verschiedene Blattmodelle zu.
Exportiere zu Skelett-Mesh oder statischem Mesh, einschließlich Unterstützung für Nanite-Vegetation-Assemblys.
Erstelle mehrere Varianten über ein einzelnes Knotendiagramm oder mehrere Knotendiagramme, um eine Bibliothek einzigartiger Vegetations-Meshs für dein Projekt zu erstellen.
Assets-Workflows
Du kannst PCG-Diagramme jetzt als eigenständige Diagramme ausführen, wodurch der Kontext der Welt entfernt wird und das Diagramm aus einer PCG-Komponente generiert werden muss.
Diese Änderung unterstützt:
Workflows zur Erstellung von Assets, wie z. B. das Erstellen von Meshs mit den Geometrie-Operationen, Texturen mit GPU-Operationen oder sogar das Generieren von PCG-Daten-Assets wie z. B. Attribut-Satz-Tabellen, indem nur ein eigenständiges PCG-Diagramm ausgeführt wird.
Werkzeuge und Plugins zur Erstellung von Assets, die auf dem Kern des PCG-Frameworks aufbauen, wie der neue Editor für prozedurale Vegetation, profitieren von dessen umfangreichen Funktionssatz und zukünftigen Updates.
Um die eigenständige Ausführung von PCG-Diagrammen zu aktivieren, kannst du in den Einstellungen jedes Diagramms die neue Option Ist eigenständiges Diagramm aktivieren. Wenn diese Option aktiviert ist, hast du Zugang zu einem Kontextmenü mit der Funktion Eigenständige Diagramme erstellen sowie die Möglichkeit, mit einem eigenständigen Diagramm-Debugging-Objekt aus dem Diagramm-Editor heraus zu generieren, zu untersuchen und zu debuggen.
Benutzerdefinierte Datentypen
Seit dem ersten Release haben wir die Liste der unterstützten Datentypen im PCG-Framework fest im Code verankert, was das einfache Hinzufügen und Unterstützen neuer Datentypen bei der Erweiterung des Frameworks oder beim Erstellen von Interoperabilitäten mit externen Plugins verhindert.
In UE 5.7 kannst du jetzt Unterstützung für jeden benutzerdefinierten Datentyp innerhalb der Typenhierarchie hinzufügen und das Framework erweitern oder den Kern des Frameworks und seine Funktionen nutzen, um dein eigenes Werkzeug darauf aufzubauen.
Wir haben auch den Typenselektor verbessert, um die Beziehungen zwischen den Typen besser anzuzeigen und eine Mehrfachauswahl zu ermöglichen.
Datentyp Polygon2D und Operatoren
Wir haben den neuen Datentyp Polygon2D zur Liste der unterstützten Datentypen im PCG-Framework hinzugefügt.
Polygon2D-Daten sind nützlich, um Gebiete als geschlossene Form darzustellen, die in Oberflächen- oder Spline-Daten konvertiert werden können, für Sampling oder für bestimmte Operationen.
Wir haben eine Gruppe von neuen Operatoren hinzugefügt, um diesen neuen Datentyp zu unterstützen:
Polygon 2D erstellen: Nimmt als Input Punkt- oder Spline-Daten und konvertiert sie in Polygon 2D.
Polygon-Operationen: Erlaubt Polygon-zu-Polygon-Operationen wie Schnittmenge, Vereinigung und Differenz. Außerdem kann Polygon 2D mit Pfaden geschnitten werden, die Splines verwenden, um Formen zu unterteilen oder zu isolieren. „for“ Zerschneide zum Beispiel ein größeres Gebiet unter Verwendung von Spline-Daten in einem Rastermuster, um einzelne Stadtblöcke in einem Stadt-Generator-Diagramm zu erstellen.
Pfade schneiden: Ermöglicht es, Splines mit Polygon-2D-Formen zu schneiden oder Differenzoperationen durchzuführen.
Versatz-Polygon: Wendet einen Versatz auf das Polygon 2D an, um es größer oder kleiner zu machen und Überlappungen korrekt zu behandeln.
Oberfläche aus Polygon2D erstellen: Verwandelt das Polygon 2D in eine Oberfläche, die mit dem Oberflächen-Sampler-Knoten gesampelt werden kann, um Punkte über ihrem Gebiet zu erstellen.
GPU – schnell Geometrieinteroperabilität
Die PCG-GPU nutzt jetzt FastGeometry-Komponenten, um die Performance der Threads im Spiel weiter zu verbessern, wenn das Framework zum Generieren und Spawnen einer hohen Dichte statischer Meshs wie Bodenstreuung und Gras verwendet wird. Dadurch entfällt die Notwendigkeit von Partition-Actors, und lokale PCG-Komponenten werden dynamisch erstellt.
Um die Verbesserung zu nutzen, aktiviere das Plugin PCG FastGeo Interop in deinem Projekt und setze die CVAR pcg.RuntimeGeneration.ISM.ComponentlessPrimitives auf 1.
GPU-Operatoren und -Verbesserungen
Neue Ergänzungen in der Gruppe der GPU-Berechnungsfunktionen im PCG-Framework:
Szenenerfassung: Ein neuer Knoten zur Durchführung von Szenenerfassungen vom Ursprung der Komponente aus, um die Farbe oder Tiefe der Szene für die Streuung abzurufen und zu sampeln.
Textur zu Asset speichern: Ein neuer Knoten zum Baken von PCGTextureData in ein UTexture2D-Asset.
Support für Überschreibungen: Parameter-Überschreibungen werden jetzt auf GPU-Knoten unterstützt, einschließlich der Anzahl der Elemente für benutzerdefinierte HLSL-Knoten.
Bestehende native Operatoren werden mit GPU-Berechnungsunterstützung erweitert:
Cull-Punkte außerhalb der Actor-Grenzen
Punkte transformieren
UX-Verbesserungen
Das sind die neuesten Änderungen, die die UX bei der Arbeit mit PCG verbessern:
Parameter und Überschreibungen-Typen einfärben und validieren: Alle Parameter, Überschreibungs-Pins, konstanten Output-Pins und ihre Kanten werden jetzt auf der Basis ihres Typs eingefärbt, passend zu den Typ-Farben der visuellen Sprache des Blueprint. Wenn ein Input von beliebigem Typ oder undefiniert ist, verwenden Pin und Kante Weiß als Anzeigefarbe.
Parameter Min, Max, Einheitenwerte: Du kannst jetzt Diagramm-Parameter mit Min-/Max-Werten und Einheiten für die Anzeige konfigurieren.
Daten-Viewports Steuerelemente: Wir haben zusätzliche Im-Diagramm-Editor-Viewport-Steuerelemente und Optionen hinzugefügt, um Daten gezielter in bestimmten Kontexten in der Vorschau betrachten zu können.
Knoten und Operatoren
Unreal Engine 5.7 führt mehrere native PCG-Elemente und neue Optionen ein, darunter:
Spline-Schnittstelle: Findet sich schneidende Splines in 3D und fügt Steuerungs-Punkte an der Schnittstelle hinzu oder gibt die Schnittpunkte zurück.
Splines aufteilen: Unterteilt Splines in mehrere Splines auf der Basis von Alpha-, Abstands-, Schlüssel- oder Steuerungs-Punkten.
Segment abrufen: Gibt einen Segment-Indexpunkt oder Spline aus einem Punkt, Spline oder Polygon2D zurück.
Spline-Mesh-Komponentenüberschreibungen spawnen: Die Komponentenklasse wird jetzt beim Spawnen des Spline-Mesh beachtet, und Komponenteneigenschaftsüberschreibungen im Spawn-Spline-Mesh-Knoten werden unterstützt.
Neue PCG-Blueprint-Element-Klassen: Neue PCG-Element-Klassen einschließlich bereichsbasierter, überschreibbarer Funktionen zur Unterstützung von Structure-of- Array-Formatänderungen wurden in nativen Knoten in 5.6 hinzugefügt. Das Verwenden der neuen Elemente verhindert eine zusätzliche Transformation der Daten und verbessert die Performance bei der Arbeit mit BP-PCG-Elementen.
Ausführungskontext abrufen: Aktualisiert mit „Ist Abhör-Server“, „Hat Autorität“ und „Ist Builder-Kontextunterstützung“.
Attribut extrahieren: Ruft ein bestimmtes Attribut am angegebenen Index ab und gibt es als neuen Attributsatz aus.
Ausgewählte Attribute exportieren: Exportiert Daten im binären oder JSON-Format für externe Anwendungen wie z. B. ML-Anwendungen.
Attribut neu zuordnen: Kann jetzt durch eine Kurve gesteuert werden.
Bitweise Operatoren: Hinzufügen von Shift nach links und Shift nach rechts.
Boolesche Operatoren: Hinzufügen von NAND, NOR, XNOR, IMPLY, NIMPLY und automatisches Casting in Boolean aus bitweise.
Mathematische Operatoren: Die neue Operation „Modulo addieren“ wurde hinzugefügt, die nützlich für einen Versatz oder die Neuanordnung mit Indizes ist.
Grenzen vom Mesh und Punkte vom Mesh: Unterstützung für Skelett-Meshs hinzugefügt.
Plugin Python Interop
Wir haben ein neues PCG-Plugin hinzugefügt, das einen neuen Knoten „Python-Script ausführen“ bereitstellt, damit du Python-Scripts während der Ausführung der Diagramme ausführen kannst. Du kannst das Python-Script direkt als Input bereitstellen oder es von einer Datei auf der Festplatte ausführen; den Pfad zur Datei kannst du dynamisch über ein Attribut und/oder einen Parameter für den Soft-Objektpfad setzen.
Entwickler-Iteration
Inkrementelles Cooking (Beta)
Inkrementelles Cooking ist jetzt als Beta in UE 5.7 enthalten.
Inkrementelles Cooking ermöglicht es dir, schneller auf deinen Zielgeräten zu iterieren, indem die Gesamtdauer des Cooking-Vorgangs reduziert wird. Cook-Prozesse analysieren automatisch Asset-Änderungen anhand des im Zen-Server gespeicherten Outputs und cooken nur die Aktualisierungen, die an den Assets deines Projekts vorgenommen wurden. Dies funktioniert für alle nativen Engine-Assets, einschließlich Blueprints und World Partition-Kacheln.
CPP-Werkzeuge – Unterstützung für MSVC 14.44
In Unreal Engine 5.7 haben wir den Standard Microsoft Visual C++ Compiler auf MSVC 14.44 aktualisiert.
Build-Kondition-Verfolgung und -Visualisierung (experimentell)
Als Teil der Horde-Analytikwerkzeuge haben wir ein neues experimentelles Build-Kondition-Dashboard eingeführt, mit dem Teams überwachen und untersuchen können, welche BuildGraph-Schritte in den Änderungslisten der Projekte wie erwartet abgeschlossen werden und/oder Fehler melden.
Dies ist Teil einer fortlaufenden Entwicklung, um eingebaute Funktionen in Horde zur Verfügung zu stellen, die Teams dabei helfen, die häufigsten Ursachen für Fehler beim Build besser zu verstehen, den Druck auf die Agenten-Pools zu überwachen und andere nützliche Performance-Metriken für die Iteration zu ermitteln.
Ton
Audio Insights (Beta)
Audio Insights ist unser primäres Werkzeug für die Profilerstellung und das Debugging von Audio. Dies richtet sich an alle, die Audio in Unreal Engine verwenden. In dieser Version liefern wir zusätzlich zur Stabilisierung der API und Architektur eine Betaversion von Audio Insights aus. Sie enthält die folgenden zusätzlichen Kernfunktionen:
Überwachung
Starte eine Live-Überwachungssitzung, ohne Daten auf die Festplatte zu schreiben.
Sounddesigner können den Betrieb eines Projekts sowohl in eigenständigen als auch in Editor-Sitzungen über längere Zeiträume beobachten, ohne sich Gedanken über ausreichend Speicherplatz machen zu müssen.
Editor-Support
Verwende Audio Insights zusätzlich zu PIE für Anwendungsfälle im Editor.
Audio Insights reagieren jetzt auf jede Audiointeraktion im Editor.
Schnappschüsse und Ausläuferaufnahme
Schreibt die letzten Live-Sitzungsdaten bei Bedarf auf die Festplatte (bis zu 32 MB).
Audio Insights kann erkennen, ob eine Live-Sitzung gestartet wurde, um eine Verbindung zu ihr herzustellen.
Live-Lautstärkemessung (UX-Design)
Bietet Audiomessung im eigenständigen Modus, insbesondere zur Einhaltung der Lautstärke.
Scrollbarer Eventverlauf
Visualisiere eine chronologische Textliste von Audioevents wie Tonstart und -stopp mit Zeitstempeln.
Durch Auswahl eines bestimmten Events werden das Diagramm und andere Visualisierungen zum gleichen Zeitstempel in den Daten verschoben.
MetaSound-Knotenkonfiguration
MetaSound-Knotenkonfiguration verleiht MetaSounds eine neue Ausdrucksebene, indem es einem Knoten ermöglicht, seine Inputs und Outputs zu ändern. Die Knotenkonfiguration nutzt das MetaSound-Editor-Details-Panel, um einen Weg zur Modifikation von Knotenschnittstellen und zur Serialisierung von Zusatzdaten bereitzustellen, die beim Audiorendering eines Knotens verwendet werden können.
Die Knotenkonfiguration bietet Sounddesignern und Entwicklern nicht nur die Möglichkeit, differenziertere und interaktivere Knoten zu erstellen, sondern bietet ihnen auch eine verbesserte UX. Zum Beispiel durch die Bereinigung der Knotenpalette und durch die Reduzierung der Anzahl der Schritte und der Komplexität der Neuverkabelung für viele gängige MetaSound-Design-Aufgaben.
Audio-Untertitel-Plugin
Für die Barrierefreiheit sind Audio-Untertitel erforderlich – Dialogsysteme, Untertitel und Sprach-Chat. In Unreal Engine 5.7 verbessern wir das Untertitel-Plugin mit den folgenden Ergänzungen weiter:
Untertitel können jetzt zusätzlich zur ursprünglichen SoundWave und der unabhängigen Timing-Unterstützung in 5.6 von anderen SoundBase-Typen gesteuert werden. Somit kann die Zeit von Untertiteln nun auf SoundCues oder der obersten Ebene eines MetaSound basieren.
Standardmäßig werden Untertitel, die an
USoundWave-Asset-Benutzerdaten angehängt sind, automatisch abgespielt und gestoppt, je nachdem, wann der Ton startet und stoppt. Es gibt jedoch einen Anwendungsfall für die Verwendung der Untertiteldauer-Eigenschaft. Wir haben eine Aufzählung hinzugefügt, um Nutzern eine Methode zur Auswahl der zu verwendenden Dauer bereitzustellen.Im Nutzerdaten-Asset werden jetzt mehrere Untertitel unterstützt. Anstatt mehrere Assets für mehrere Untertitel zu verwenden, die mit einem bestimmten SFX verknüpft sind, hast du jetzt stattdessen alle Untertitel in einem Asset.
Du kannst Untertitel jetzt mit
UEngine::bSubtitlesEnabledglobal aktivieren oder deaktivieren.
Audio-Wellenform-Editor
Sound-Designer müssen häufig zwischen UE und externen Werkzeugen hin und her wechseln, wenn sie mit Audio-Assets arbeiten. Um den Workflow in Unreal Engine 5.7 zu verbessern, haben wir die Anzeige von Markierungen und Loop-Bereichen aus importierten Sounddateien zum Audio-Wellenform-Editor hinzugefügt.
Dies beinhaltet zusätzliche Verbesserungen der Benutzerfreundlichkeit, um den Wellenform-Editor so zu erweitern, dass Sound-Designer für gängige Audio-Bearbeitungsaufgaben in UE bleiben können.
Format-/Kanalunabhängige Typen (CAT)
Sound-Designer müssen häufig Audio-Daten zwischen spezifischen MetaSound-Knoten mit unterschiedlichen Formaten und Kanalzahlen senden und empfangen. In UE 5.7 können Audio-Programmierer benutzerdefinierte Knoten mithilfe der Channel Agnostic Types (CAT) mit Input- und Output-Referenzen programmieren:
Der neue Audio-Rate-Datentyp bietet Audio-Buffern eine Möglichkeit, mehrere Kanäle in einem Pin-Typ zu unterstützen.
Knoten können jetzt mehrere Konfigurationen für Audio-Kanalformate unterstützen.
Reduziert Unübersichtlichkeit und Komplexität in MetaSound-Diagrammen.
Tech Audio – Werkzeuge-Sample
Die Erfahrung und Nutzung des Editor-Dienstprogramms durch Tech Audio kann für die Spiel-Audio-Community äußerst vorteilhaft sein. Diese Initiative soll neuen Entwicklern den Einstieg in UE Audio erleichtern, die Arbeit im großen Maßstab weniger einschüchternd gestalten und als Ausgangspunkt für Entwickler dienen, von dem aus sie ihre eigenen projektspezifischen Tools entwickeln können.
Eine Sammlung von Blueprint-Scripting-Hilfsprogrammen, Tools und Diagrammen zur Unterstützung der Arbeit mit Unreal-Audio-Technologie.
Tech Audio möchte eine beispielhafte Sammlung von Editor-Dienstprogrammen und Workflows erstellen, um diese intern zu nutzen und extern zu präsentieren.
Plattform
Unterstützung für Android-Plattform
Wir haben die Arbeitsabläufe für Entwickler verbessert, die Unreal Engine-Projekte erstellen, paketieren und auf Android-Geräten bereitstellen.
Bereitstellung auf Android 15 mit 16-KB-Seitenunterstützung
Überspringe manuelle SDK-Setup-Anpassungen unter macOS.
Die Einstellung
bDontBundleLibrariesInAPKist jetzt standardmäßig aktiviert und stellt sicher, dass Bibliotheken extern gehalten werden, um die Paketgröße und Bereitstellungsflexibilität zu verbessern.
Mobilgerät-Renderer
Unreal Engine 5.7 bringt Verbesserungen und neue Funktionen für den Mobilgerät-Renderer.
Du kannst jetzt den Modus Multipass-aufgeschobenes-Rendern verwenden, der Kontaktschatten und Einsatz-Schatten ermöglicht.
Darüber hinaus sind SSAO, SSR und DFAO jetzt Skalierbarkeitsoptionen, die du zur Laufzeit umschalten kannst und die nicht mehr als Projektoptionen festgelegt und neu verpackt werden müssen.
Stereo-Ebene
Stereo-Ebene-Komponenten sind jetzt sichtbar, wenn die X-Achse in Richtung der Kamera zeigt. Verwende die Konsolenvariable: XR``.StereoLayers.UseLegacyFacing true, um das Vorgänger-Verhalten zu aktivieren (sichtbar, wenn X von der Kamera weg zeigt).
Emulierte Stereoebenen unterstützen jetzt Tiefe und sind in ihrem Rendering OpenXR-konform. Du kannst das neue Rendering mit der Konsolenvariable XR``.StereoLayers.RenderEmulatedLayerDepth false deaktivieren.
OpenXR-Anwendung SpaceWarp
Die Anwendung SpaceWarp ist die entwicklergesteuerte Optimierungstechnologie von Meta, die zusätzliche Rechenleistung für geeignete Inhalte freisetzen kann. In UE 5.7 haben wir nicht nur Unterstützung für die Erweiterung XR_FB_space_warp von Meta implementiert, sondern auch für OpenXR-Laufzeiten, die
XR_EXT_frame_synthesis unterstützen.
. Diese Technologie zwingt die Anwendung, mit halber Bildrate zu rendern und jedes zweite Bild mit einer aktualisierten Kopfausrichtung zu synthetisieren, wodurch die Belastung der GPU erheblich reduziert wird.
Die Framesynthese (und SpaceWarp) wird mit xr.OpenXRFrameSynthesis gesteuert. Du kannst sie zur Laufzeit aktivieren, aber sie erfordert r.Velocity.DirectlyRenderOpenXRMotionVectors=1.
OpenXR-Nutzerpräsenz
Wir können jetzt Events für OpenXR-Laufzeiten zurückgeben, welche die OpenXR-Erweiterung XR_EXT_Benutzerpräsenz unterstützen, wenn ein Head-Mounted-Display aufgesetzt oder abgenommen wird. Dies wurde zwar durch VRNotificationsComponent in der Vergangenheit freigegeben, die neue Methode ist aber genauer und verhält sich zwischen den Laufzeiten gleich.
Bewegungsdesign
Motion-Design produktionsbereit
Während Kunden beginnen, Motion Design in ihre Kern-Workflows zu implementieren, wertet das Motion Design-Team weiterhin das Kundenfeedback aus und konzentriert sich auf weitere Möglichkeiten zur Leistungsoptimierung des Werkzeugsatzes.
Um Motion Design in einen produktionsbereiten Zustand zu bringen, war Folgendes erforderlich:
Härtung der Paketierungsunterstützung.
Refaktorierung von Text3D, um Rich Text und Maskierungsfunktionen zu unterstützen.
Stabilität der Übergangslogik und verbesserte Benutzerfreundlichkeit und Einrichtung.
Verbesserung der Fernsteuerungsfunktionalität, indem Werkzeuge zur Schnittstellenorganisation hinzugefügt und die allgemeine UX für eine schnellere Einrichtung umgestaltet wurde.
Aktualisierung des Szenenzustands auf der Grundlage von Kundenfeedback.
Erstellung der Kommunikation zwischen Szenenzustand und Übergangslogik.
Gewährleistung der Zuverlässigkeit des Material-Designers.
Text3D – Rich Text
Verleihe deinen Textlayouts mit vorkonfiguriertem oder dynamisch anpassbarem Text eine dynamische Note. Erstelle mit unserem neuen dedizierten Asset einen Text3D-Stilsatz, mit dem du eine konsistente Konfiguration erstellen kannst, die du in deinem gesamten Projekt auf jedem Text3D-Actor verwenden kannst.
Bisher waren für diese Art von Layout mehrere Text3D-Actors und ein Auto-Follow-Modifikator erforderlich. In Unreal 5.7 können diese inline bearbeitet werden, wodurch die Anzahl der Actors reduziert wird und du sogar die Möglichkeit hast, die einzelnen Textabschnitte fernzusteuern.
Unterstützt die Zuweisung von Schriftarten, Farben, Größen.
Flexible Styling-Werkzeuge passen sich jeder Kunstrichtung an.
Ideal für Designs mit dynamischer Benutzeroberfläche.
Macht jeden Abschnitt der Textzeile zur weiteren Anpassung per Fernsteuerung verfügbar.
Dies ist nützlich, wenn du etwas wie „Brandneuer angereicherter Text“ in drei separate Controller aufteilen möchtest, während der Stil jedes Wortes beibehalten wird.
Benutzerfreundlichkeit der Übergangslogik
Übergangslogik ist für den Broadcast-Workflow von entscheidender Bedeutung und basierend auf Kundenfeedback haben wir die zum Erstellen eines Levels und Einrichten der Übergangslogik erforderlichen Schritte neu bewertet. Du kannst nun alle Schritte im obigen Bild ausführen, indem du ein neues Level erstellst und sicherstellst, dass die Option Übergangslogik-Standardszene erstellen aktiviert ist, wie in der oberen linken Ecke des Bildes zu sehen.
Nachfolgend sind die Einrichtungsschritte aufgeführt, welche die Übergangslogik automatisiert, wenn du „Übergangslogik-Standardszene erstellen“ aktivierst:
Erstelle vorbeschriftete In- und Out-Sequenzen.
Erstelle vorbeschriftete Ebenenänderung-Sequenzen.
Du kannst zusätzliche (und vorab zugewiesene) Ebenenänderung-Sequenzen mit neuen Einträgen im Options-Panel „Sequencer“ hinzufügen.
Lege die Sequenzeinstellungen für diese Sequenzen vorab fest, um sofortige Kompatibilität zu gewährleisten.
Erstelle eine Standardebene, damit du sofort mit der Arbeit beginnen und dein Design testen kannst.
Füge den Übergangslogik-Teilschicht-Modifikator einem Null-Actor in deinem Motion Design-Outliner hinzu und weise ihn vorab den generierten In- und Out-Sequenzen zu.
Außerdem musst du deine Inhalte lediglich mithilfe der generierten In-, Out- und Ändern-Sequenzen tatsächlich animieren.
Fernsteuerung-UX
Wir haben mehrere Funktionen hinzugefügt oder verbessert, die dir beim Rigging deiner Designs Zeit sparen.
Neue Controller
Kategorie
Füge Kategorien hinzu, um deine Controller in Gruppen zu unterteilen.
Wähle einen einzelnen oder mehrere Controller aus und ziehe sie in die Kategorien.
String-Liste
Kuratiere eine benannte Dropdown-Liste, die du mit deinen bedingten Verhaltensweisen verknüpfen kannst, um das Endbenutzererlebnis zu verbessern.
Bisher war zur Lösung dieses Problems die Eingabe ganzer Zahlen erforderlich, wobei „1 = Blau, 2 = Rot, 3 = Gelb“ galt. Jetzt kannst du die Dropdown-Einträge „Rot“, „Blau“ und „Gelb“ benennen.
Events
Erstelle eine Schaltfläche, die Motion Design-Sequenzen abspielen, eine Bei-Modifikation-Eigenschaft oder ein Broadcast-Event auslösen kann.
Pfad-Verhalten
Bisher konnte jeder Pfadverhaltenseintrag nur einen einzelnen Actor ansprechen. Unter dem Aktionen-Panel wird jetzt eine Liste angezeigt, in der du beliebig viele Actors hinzufügen kannst. Dadurch wird die Notwendigkeit mehrerer Pfadverhalten reduziert und die Fehlerbehebung bei deinem Setup vereinfacht.
Bisher war es nicht möglich, die Pfadliste neu anzuordnen. Jetzt kannst du die Reihenfolge mit dem Ziehpunkt auf der linken Seite nach Bedarf ändern.
Die Pfadvorschau informiert dich jetzt mit einem grünen Häkchen darüber, ob der Pfad, zu dem du weiterleitest, gültig ist.
UI-Erweiterung
Wir haben dem Eigenschaftenfenster auf der linken Seite ein Linksymbol hinzugefügt, um anzuzeigen, ob eine freigegebene Eigenschaft einem Controller zugewiesen ist.
Szenenzustand
Der Szenenzustand hat in UE 5.7 mehrere neue Funktionen und UX-Verbesserungen erhalten, welche die Benutzersteuerung erheblich verbessern.
Zustandsmaschine-Organisation
Ordne Zustandsmaschinen per Ziehen und Ablegen neu an.
Füge Kategorien hinzu.
Füge Setter-Aufgaben als Teil von Eigenschaftsreferenzen hinzu.
Zu den Datentypen gehören: Boolean, Float, Int, String, Text.
Jeder Datentyp verfügt über eine einzigartige Funktionalität.
Eigenschaft-Funktionen
String verketten
Text zu String
Name zu String
Ganzzahl zu String
Float zu String
Spawn-Actors und Spawn-Actors zu Tickern.
Daten-Link
Der Daten-Link erhielt zwei vielfach gewünschte Updates:
Push-Funktionalität, die eine Methode zur ständigen Erkennung sich ändernder Werte aus Feeds bietet, um Updates auszulösen.
Interaktion mit dem Szenenzustand, um eine Methode zum Scrollen von Tickern und anderen lebendigen Elementen bereitzustellen.
Produktions-Rendering-Pipeline
Modifikator für die Materialparameter-Sammlung
Materialparameter-Sammlungen sind leistungsstarke Assets, die mehrere Eigenschaften auf mehreren Materialien gleichzeitig steuern können. Kreative Looks und Effekte innerhalb einer Szene werden oft dynamisch durch Materialparameter-Sammlungen gesteuert.
Der Modifikator für die Materialparameter-Sammlung bietet dir die Möglichkeit, Parameterwerte auf einer Pro-Render-Ebenen-Basis im Film-Renderdiagramm festzulegen und zu überschreiben. Mit derselben Ebene und Ebenensequenz könne Aufnahmen mit unterschiedlichen Parameterwerten auf jeder Render-Ebene rendern. Du kannst Parameter auch in Diagrammvariablen umwandeln und sie als Überschreibungen sowohl im Fenster Schnelles Rendern als auch Film-Rendering-Warteschlange freigeben.
Burn-In pro Output-Typ
Die Fähigkeit, mehrere Output-Typen im selben Auftrag zu rendern, bedeutet, dass Movie Render Graph sowohl endgültige als auch Überprüfungsmedien gleichzeitig bereitstellen kann. Normalerweise ist Burn-In für einige aber nicht alle Ausgabetypen eines Auftrags wünschenswert. Um dies zu berücksichtigen, legt Movie Render Graph jetzt Burn-In pro Output-Typ fest, anstatt einen separaten Knoten in einer Verzweigung zu verwenden. Dadurch ist es beispielsweise viel einfacher, saubere EXR-Renderings zu erhalten, aber Burn-In auf MP4s einzuschließen.
Dateibenennungssteuerung
Strenge Benennungskonventionen für die Renderausgabe sind ein grundlegender Baustein effizienter Pipelines in allen Branchen. In diesem Sinne bietet Movie Render Graph eine viel robustere Dateibenennungssteuerung, um die spezifischen Benennungsanforderungen von Studios nativ besser zu unterstützen, ohne dass zusätzliches Pipeline-Scripting erforderlich ist. Dies sind die wichtigsten Verbesserungen:
Benutzerdefinierte Namenstoken, die in den kinematografischen Assembly-Werkzeugen definiert sind, werden in allen Namensfeldern unterstützt.
Du kannst {renderer_name} (zum Beispiel „Verzögert“) und {renderer_sub_name} (zum Beispiel „Beauty“) anpassen, und Konflikte werden pro Verzweigung und nicht für das gesamte Diagramm gelöst, was mehr Flexibilität bietet.
Burn-In erzwingt nicht mehr {renderer_name} auf dem Beauty-Rendering, wenn es nicht zusammengesetzt ist.
Nachbearbeitungsmaterial-Durchläufe können auf Wunsch eine andere Benennungskonvention als für das Beauty-Rendering verwenden.
EXR-Metadaten pro Renderebene
EXR-Metadaten folgen jetzt einer Konvention, die Schlüssel-Wert-Paare zuverlässig auf Renderebenenbasis trennt und Namenskonflikte vermeidet. Basierend auf dieser Konvention können Metadaten aus Unreal Engine-Renderings direkt in Post-Compositing-Anwendungen wie Nuke abgefragt werden, ohne dass zusätzliche Pipeline-Werkzeuge erforderlich sind.
Inhaltspipeline
Personalisieren des USD-Asset-Imports mit Interchange (experimentell)
USD (Universal Scene Description) ist ein vielseitiges Szenenbeschreibungs-Dateiformat mit zunehmender Akzeptanz in der gesamten 3D-Branche.
Wir haben USD (Universal Scene Description) in UE 5.5 zur Liste der vom Interchange-Framework unterstützten Dateiformate hinzugefügt. Inhaltsersteller profitieren von mehr Kontrolle über den Importvorgang und können jetzt benutzerdefinierte Verarbeitungsschritte für den Asset-Import von USD-Dateien hinzufügen, ähnlich den Interchange-Funktionen, die bereits bei anderen Formaten wie FBX verfügbar sind.
Der Support für USD (Universal Scene Description) über Interchange wird als experimentell erachtet und ist auf den Import von Assets beschränkt. In UE 5.7 haben wir Unterstützung für folgende Elemente ergänzt:
Groom
Kuppellichter (nicht das DomeLight_1-Schema)
Audio (UsdMediaSpatialAudio)
Punkt-Instanz
FBX-Level-Import mit Interchange
Um die Benutzeroberfläche/UX für den Import verschiedener Dateiformate in die Engine zu vereinheitlichen, ist der FBX-Level-Import-Prozess über das Interchange Framework verfügbar. Dies ist jetzt der Standardweg, um ein FBX in ein Level zu importieren. Du kannst mit Hilfe einer CVar immer noch auf das alte Verhalten zurückgreifen.
Die wichtigste Änderung besteht darin, dass derselbe Importdialog wie für den Import in den Inhaltsordner verwendet wird. Veraltete Funktionalitäten wie das Entfernen von Assets und Actors aus dem Import oder die Verwendung verschiedener Optionen für den Import können jetzt über benutzerdefinierte Interchange-Pipelines ausgeführt werden.
Editor und UI-Systeme
KI-Assistent (experimentell)
Mit dem KI-Assistenten kannst du schneller Antworten erhalten, ohne Unreal Engine zu verlassen. Durch Herausziehen eines speziellen Panels im Editor kannst du Fragen stellen, Code generieren oder einer Schritt-für-Schritt-Anleitung folgen, alles, ohne zu einem Browser zu wechseln.
Du sparst Zeit und bleibst im Fluss. Anstatt dich auf die Online-Suche zu konzentrieren, kannst du dir direkt im Editor Soforthilfe, Beispiele und Tipps zur Fehlersuche holen.
Das ist möglich:
Biete Schritt-für-Schritt-Befehle für Aufgaben an.
Hol dir Hilfestellung und Tipps direkt im Kontext.
Löse Probleme bei der Entwicklung mit Hilfe von KI.
Generiere Code-Beispiele, um Workflows zu beschleunigen.
Referenziere vergangene Unterhaltungen mit dem Chatverlauf.
Kopiere die Antworten und füge sie in dein Projekt ein.
Der KI-Assistent wird von derselben speziell geschulten KI realisiert, die bereits in UEFN und in der Entwickler-Community verfügbar ist – maßgeschneidert, um Unreal Engine zu verstehen und dir schnelleres Handeln zu ermöglichen.
Startbildschirm
Der Startbildschirm hilft dir, dich in Unreal Engine zu orientieren, indem er dir einen einladenden Startpunkt bietet. Er hebt wichtige Ressourcen wie Tutorials, Dokumentationen und Foren hervor.
Du erhältst eine einfachere, besser geführte Einführung. Anstatt vor einem leeren Editor zu sitzen, hast du eine übersichtliche Navigation zu Lernressourcen, Neuigkeiten und Support – alles an einem Ort. So kannst du deine Projekte mit Vertrauen und klarer Richtung starten.
Das ist möglich:
Erhalte Zugang zu den neuesten Neuigkeiten und Updates.
Navigiere direkt zu den Ressourcen für die ersten Schritte.
Öffne Tutorials und Dokumentation.
Besuche die Foren und Veröffentlichungshinweise.
Starte Links extern in Chrome.
Schalte den Startbildschirm aus, wenn du ihn nicht jedes Mal sehen willst.
Der Startbildschirm dient als zentrale Anlaufstelle für die Einführung und macht Unreal Engine schon beim ersten Start zugänglicher.
Orthografisches-Clipping-Interaktionen
Orthografische Viewports bieten jetzt eine zuverlässigere und flexiblere Steuerung. In früheren Versionen waren die Clipping-Ebenen oft unbrauchbar, sodass es schwierig war, die Sichtbarkeit der Szene anzupassen.
Du gewinnst genaue Kontrolle über das, was du in orthografischen Ansichten siehst, und kannst dich so leichter auf genau die Geometrie konzentrieren, die du brauchst.
Das ist möglich:
Passe die Clipping-Ebenen in der Nähe und in der Ferne mit größerer Genauigkeit an.
Verwende die neuen visuellen Steuerelemente direkt im Viewport.
Personalisiere die Sichtbarkeit in orthografischen Ansichten, um sie an deinen Workflow anzupassen.
Diese in UE 5.7 eingeführte Verbesserung macht orthografische Workflows praktischer und berechenbarer.
Verbesserte Dialogfelder für Speichern und Löschen
Wir haben die Dialogfelder Speichern und Löschen in Unreal Engine verbessert, um das Asset-Management nahtloser zu gestalten. Gewöhnliche Aktionen funktionieren jetzt wie erwartet und reduzieren unnötige Klicks und Unterbrechungen in deinem Workflow.
Du verbringst weniger Zeit damit, dich mit sich wiederholenden Aufforderungen herumzuschlagen, und mehr Zeit damit, dich auf dein Projekt zu konzentrieren.
Das ist möglich:
Verwende die Eingabetaste im Asset-Löschen-Popup (zuvor nicht verfügbar).
Lösche mehrere Assets, ohne wiederholt mit der Maus auf „Akzeptieren“ zu klicken.
Verlasse sich auf konsistentere und intuitivere Interaktionen in Dialogfeldern.
Diese Verbesserungen kommen mit UE 5.7 und verbessern die täglichen Workflows, indem sie lang bestehende Probleme korrigieren.
Verbesserte Interaktionen beim Ziehen von Fenstern
Das Ziehen von Fenstern im Editor ist jetzt intuitiver und weniger störend. In früheren Versionen führte das Klicken und Ziehen auf eine beliebige Header-Leiste dazu, dass der gesamte Level-Editor aus dem Vollbild abgedockt wurde, oft aus Versehen.
Du vermeidest frustrierende Fehlklicks und hältst deinen Arbeitsbereich stabil – so kannst du dich ganz auf das Erstellen konzentrieren.
Das ist möglich:
Ziehe Fenster und Panels, ohne den gesamten Level-Editor abzudocken.
Verhindere versehentliche Unterbrechungen in Vollbild-Workflows.
Erlebe vorhersehbarere und benutzerfreundlichere Fensterinteraktionen.
Diese Verbesserung, die in UE 5.7 eingeführt wurde, geht auf eine häufige Frustration ein und macht die Fensterverwaltung zuverlässiger.
Verbessertes Duplizieren von Interaktionen im Blueprint-Editor
Das Duplizieren von Gegenständen im Blueprint-Editor ist jetzt nahtloser und weniger störend. In früheren Versionen wurde beim Duplizieren die Auswahl gelöscht, sodass du die Gegenstände in der Baumansicht manuell neu auswählen musstest.
Du behältst den Schwung beim Bearbeiten bei und vermeidest zusätzliche Klicks und Nacharbeit beim Duplizieren von Elementen.
Das ist möglich:
Dupliziere Gegenstände im Blueprint-Editor, ohne die Auswahl zu verlieren.
Behalte die aktive Auswahl bei, wenn du in der Baumansicht arbeitest.
Reduziere die sich wiederholenden Schritte beim Duplizieren von mehreren Gegenständen.
Diese in UE 5.7 eingeführte Verbesserung macht das Bearbeiten von Blueprints effizienter und frustfreier.
Viewport-Modi für die Überprüfung der Geometrie
Die neuen Modellinspektion-Viewport-Modi in Unreal Engine bieten vereinfachte, nicht fotorealistische Visualisierungsoptionen. Diese Modi stellen die geometrische Klarheit über den Realismus und entfernen Beleuchtung und Schatten, wenn du mechanische oder komplexe 3D-Modelle untersuchst:
Ton
Zebra
Vordere/Hintere Fläche
Zufällige Farbe
Benutzer-Asset-Tags
Das Benutzer-Asset-Tags-System ermöglicht das Hinzufügen beliebiger Tags zu deinen Assets. Es unterstützt sowohl lokale Favoriten als auch projektweite Tags, und du kannst es erweitern, um zusätzliche Tags vorzuschlagen. Diese Tags dienen als Grundlage für weitere Systeme wie den Getaggter Asset-Browser, der in Niagara verwendet wird. Markiere die Assets, die du taggen willst, und verwende Strg + T oder wähle Tags verwalten im Kontextmenü.
Getaggter Asset-Browser (Niagara)
Ein Update der vorherigen Überarbeitung des Niagara Asset-Browsers. Dieses ist nun allgemein und bildet die Grundlage für Asset-Factorys, die denselben Browser übernehmen wollen. Du kannst es erweitern, indem du ein neues Getaggter-Asset-Browser-Konfiguration-Asset erstellst und deine eigenen Sektionen und Auflistungen von Tags definierst. So wird es möglich, dass deine Projekte eigene Bereiche und Tags haben – oder sogar das Hauptkonfigurations-Asset vollständig in den Projekteinstellungen unter Niagara-Editor austauschen.
Hilfe zum Upgrade bestehender Niagara-Systeme und -Emitter zur Verwendung des neuen Assets „Getaggter Asset-Browser Konfiguration“ findest du unter Upgrade von Niagara-Tags.
Framework
State Tree: Rücklauf-Debugger
Wir führen einen neuen Rücklauf-Debugger-Track für State Tree ein, der eine verbesserte besitzer- und instanzorientierte Debugging-Erfahrung direkt in den Rücklauf-Debugger bringt. Diese Integration bietet einen tiefgreifenderen Kontext dazu, wann und wie die Verhaltenslogik ausgeführt wird, und zwar unter Berücksichtigung der Zeitleisten von Gameplay und Animation.
Der neue Track umfasst ein spezielles Details-Panel mit einer kompakten Baumansicht, wodurch die Visualisierung und Navigation komplexer Logikkonfigurationen einschließlich verschachtelter Unterbäume und verknüpfter Assets vereinfacht wird. Dies verbessert die Benutzerfreundlichkeit bei der Arbeit mit größeren oder modularen State Trees.
Während diese Integration eine Verschiebung hin zu einem einheitlicheren Debugging-Workflow darstellt, bleibt der ursprüngliche State Tree-Debugger als Option verfügbar. Du kannst die alte Schnittstelle weiterhin verwenden, wenn du sie für einige Anwendungsfälle bevorzugst.
State Tree-Laufzeit
Dieses Update bringt eine Reihe von Verbesserungen auf Laufzeitebene, welche die Richtigkeit und Performance der auf State Tree basierenden Logik verbessern.
Live-Eigenschaftsbindung: Knoten können jetzt mithilfe von Output-Eigenschaften während der Ausführung dynamisch Wertaktualisierungen an gebundene Outputs senden, wodurch Probleme mit veralteten oder statischen Daten in Tick-Workflows behoben werden.
ExecutionRuntimeData: Knoten können jetzt optionale, langlebige Daten deklarieren, die für die gesamte Lebensdauer der State Tree-Instanz bestehen bleiben. Dies ist nützlich, um den Ausführungsstatus über Übergänge oder Ticks hinweg beizubehalten, ohne auf statische Globale angewiesen zu sein.
Speicheroptimierung für statische Bindungen: Delegierten-Dispatcher, Listener und Eigenschaftsreferenzen werden jetzt außerhalb der Instanzdaten gespeichert, wodurch der Speicheraufwand pro Knoten reduziert wird.
Wir haben die folgenden Funktionen implementiert, sie jedoch nicht standardmäßig aktiviert, um Störungen vorhandener Daten und Standardverhalten zu vermeiden. Du kannst dich jedoch bei Bedarf für deren Verwendung entscheiden.
Verhaltenszustand beim erneuten Eintreten: Es wurde Unterstützung für den erneuten Wechsel zum gleichen Zustand und den Neustart von Aufgaben hinzugefügt, sodass du die Neustartlogik einfacher implementieren kannst.
Instanzdaten-Umgestaltung: Bedingungen und Übergänge verwenden jetzt bereichsbezogene instanziierte Daten, wodurch Datenverluste zwischen Sitzungen verhindert und sowohl temporäre als auch dauerhafte Nutzungsmuster ermöglicht werden.
Massen-Debugger
Wir haben ein leistungsstarkes neues Entitätssuchsystem direkt in den Massen-Debugger integriert, wodurch Entwickler eine neue Benutzeroberfläche zum Erstellen und Ausführen von MassEntity-Abfragen erhalten. Das Interface spiegelt die C++-Abfrage-API von Masse 1:1 wider und ermöglicht so eine präzise Filterung von Entitäten anhand derselben Kriterien und Anforderungen wie hart-codierte Abfragen.
Du kannst jetzt benutzerdefinierte Abfragen erstellen, speichern, laden und freigeben und die Ergebnisse sofort im Entitäten-Tab anzeigen. Dadurch können Entwickler den Massenzustand zur Laufzeit schneller und effizienter untersuchen und validieren.
Darüber hinaus haben wir das Breakpoint-System umfangreich aufgewertet. Es bietet mehr Kontrolle und Transparenz beim Debuggen von Massenprozessoren und Fragmentschreibvorgängen.
Autogen-NavLink Mehrfach-Springen-Konfiguration
Wir haben die automatische Generierung von Navigationslinks erweitert, um mehrere Sprungkonfigurationen pro NavMesh-Generierungsdurchgang zu unterstützen. Bisher konntest du nur eine einzige Sprungkonfiguration verwenden, die oft zu große Toleranzen erforderte, um verschiedene Linktypen verarbeiten zu können (z. B. hoch-, runter- und querspringen). Dies bedeutete auch, dass alle generierten Links dieselbe Bereichsklasse und Link-Proxy-Klasse hatten, was die Flexibilität einschränkte.
Mit diesem Update kannst du jetzt mehrere unterschiedliche Konfigurationen definieren, die jeweils in einem eigenen Validierungsdurchgang verarbeitet werden. Dies ermöglicht eine gezieltere und aussagekräftigere Steuerung. Beispielsweise können Sprünge nach unten oder über etwas hinüber separat generiert werden, jeweils mit unterschiedlichen Entfernungsschwellenwerten, Bereichstypen oder Proxy-Verhalten. Es ermöglicht differenziertere Bewegungsabläufe und reduziert gleichzeitig Übergenerierung oder unbeabsichtigte Überschneidungen.
Um die Abwärtskompatibilität zu gewährleisten, haben wir jede vorhandene Einfachsprung-Konfiguration als ersten Eintrag in die neue Benutzerfreundlichkeit des Multi-Konfiguration setup.pState Tree migriert.
Wir verbessern den State-Tree-Editor mit mehreren Upgrades immer weiter, die auf mehr Übersichtlichkeit und Benutzerfreundlichkeit abzielen:
Du kannst jetzt zwischen Zuständen Aufgaben, Bedingungen und Übergänge kopieren und einfügen, sogar über verschiedene State Tree-Assets hinweg. Dadurch wird die Wiederverwendung von Logik und die Aufrechterhaltung eines konsistenten Verhaltens über große Verhaltensweisen hinweg wesentlich einfacher.
Wir haben außerdem die Fähigkeit hinzugefügt, einzelne Eigenschaftsbindungen zu kopieren und einzufügen. Gebundene und ungebundene Eigenschaften werden intelligent behandelt:
Gebundene Eigenschaften ersetzen ihre Bindungen, sofern sie kompatibel sind.
Ungebundene Eigenschaften übernehmen Werte, wenn ein Wert eingefügt wird, oder übernehmen die Bindung, wenn eine kompatible Bindung eingefügt wird.
Das Einfügen eines Werts in eine gebundene Eigenschaft ist deaktiviert.
Das Einfügen eines inkompatiblen Typs oder der Unzugänglichkeit der Quell-Daten löst einen Validierungsfehler aus.
Du kannst Eigenschaften innerhalb von Knoten und Instanzdaten basierend auf dem Schema ausblenden, wodurch visuelles Rauschen reduziert und die Konzentration verbessert wird.
Masse-Laufzeit
Dieses Update enthält eine Reihe von Optimierungen auf niedriger Ebene und architektonischen Verbesserungen des Masse-Frameworks, die auf die Verbesserung der Gesamtleistung, Speichereffizienz und Systemstabilität in Echtzeitszenarien abzielen.
Die interessanteste Ergänzung ist Prozessor-Zeit-Slicing, was bedeutet, dass Prozessoren mit langer Laufzeit auf mehrere Frames aufgeteilt werden können. Dies trägt zur Reduzierung von Leistungsspitzen bei und ermöglicht eine bessere Verteilung hoher Arbeitslasten, was insbesondere in großen oder simulationsintensiven Umgebungen nützlich ist.
Iris (Beta)
Da Iris nun nicht mehr in der experimentellen Phase, sondern in der Beta-Phase ist, haben wir uns auf die Festigung wichtiger APIs und die Verbesserung der Benutzerfreundlichkeit, Wartbarkeit und Leistung im gesamten Netzwerk-Stack konzentriert. Diese Version enthält mehrere interne Designänderungen und Verbesserungen der Benutzerfreundlichkeit für Entwickler, die direkt mit Iris-Replikationssystemen arbeiten.
Actor-Factory-Überschreibungen: Actors können nun benutzerdefinierte
NetActorFactory-Implementierungen mitStartReplicationParamsspezifizieren, wodurch mehr Flexibilität beim Replikationsverhalten zur Laufzeit geboten wird. Dies ermöglicht erweiterte Replikations-Setups, ohne auf globale Überschreibungen angewiesen zu sein.Sauberere API-Grenzen: Wir haben die Iris-Basis-Klasse
UReplicationBridgeentfernt, um den Overhead virtueller Aufrufe zu reduzieren und die Codenavigation zu vereinfachen. Die meisten Iris-Systeme basieren bereits direkt aufUObjectReplicationBridge, daher rationalisiert diese Änderung das Vererbungsmodell und vermeidet unnötige Umlenkung.Verbesserte Namensgebung im Replikationslebenszyklus: Wir haben die
BeginReplication-API verdeutlicht:Die nicht virtuelle Funktion ist jetzt
StartActorReplication, wodurch der Zweck als Einstiegspunkt zum Starten der Replikation klar ersichtlich ist.Wir haben den virtuellen Callback zu
OnBeginReplicationumbenannt, um das Lebenszyklusverhalten von Systemaufrufen zu trennen.
Bessere Konsistenz zwischen Iris- und Legacy-Netzwerken:
OnBeginReplicationundEndReplicationwerden jetzt konsistent aufgerufen, unabhängig davon, ob Iris aktiviert ist. Dies gewährleistet Verhaltensparität und macht den Übergang zwischen Netzwerksystemen nahtloser.Nahtlose Reiseunterstützung: Iris unterstützt jetzt die nahtlose Reisefunktion von Unreal Engine und stellt sicher, dass replizierte Actors und Zustände bei Weltübergängen korrekt behandelt werden. Dies ist eine wichtige Voraussetzung für die Bereitstellung von Spielfunktionen, die auf persistenten Spielerdaten oder Übergängen zwischen großen Streaming-Welten basieren.
Medien
Medien-Viewer (Beta)
Oft müssen Animatoren ihre Animationen an vorhandenem Referenz-Filmmaterial ausrichten. In 5.6 haben wir die Möglichkeit hinzugefügt, Medien (Bilder, Medientexturen, Videodateien, Live-Viewports) neben dem Ort anzudocken, an dem die Animationsarbeit ausgeführt wird. Zwei AB-Bänke in horizontaler oder vertikaler Konfiguration helfen beim Vergleichen zweier Assetsätze. Mithilfe der Zoom- und Schwenksteuerung können Inhalte noch weiter ausgerichtet werden. In UE 5.7 befindet sich das Medien-Viewer-Plugin jetzt in der Beta-Phase und enthält die folgenden Verbesserungen im Workflow und in der Benutzerfreundlichkeit:
Verbesserte Steuerelemente wie Dreh- und Zoomsteuerung mit ALT + RMT.
Fähigkeit, Asset-Konfigurationen mit Lesezeichen zu versehen und schnell mit Hotkeys abzurufen.
Die Sperrtaste spiegelt jetzt auch die Wiedergabesteuerung und die Zeitleiste im Dual-Player-Modus wider.
Simulation und Grafikeffekt
Chaos Destruction
Das Chaos-Zerstörungssystem ist eine Suite von Werkzeugen, die dazu entwickelt wurden, Zerstörung in kinematografischer Qualität in Echtzeit zu erreichen. Zusätzlich zu den großartigen visuellen Effekten ist das System auf Performance optimiert und gibt Künstlern und Designern durch die Verwendung eines intuitiven, nicht-linearen Workflows mehr Kontrolle über die Inhaltserstellung und den Brechungsprozess.
Die Aktualisierungen in UE 5.7 beinhalten Folgendes:
Zustand zurücksetzen: Du kannst jetzt den Status der Geometriesammlungskomponente während der Simulation mit C++, Blueprint oder live im Editor zurücksetzen.
In Skelett-Mesh exportieren: Du kannst jetzt Geometriesammlungs-Assets in ein Skelett-Mesh-Asset exportieren.
Blatt-Sub-Trace: Nach dem Nachzeichnen anhand einer Geometriesammlung kannst du jetzt den genauen Blattkegel aus einer Linienverfolgung abrufen. Wenn die ursprüngliche Linienverfolgung gegenüber der Komponente nicht unterbrochen ist, gibt sie den Stamm-Bone zurück. Mit dieser neuen Funktion kannst du jetzt den genauen Bone ermitteln, auf den das Trace trifft. Dies ermöglicht beispielsweise das Anbringen von Aufklebern auf dem richtigen Bone oder sogar das Verankern einzelner Teile zur Laufzeit.
Chaos Datenfluss-Editor
Das Datenflussdiagramm erlaubt die prozedurale Generierung von Assets innerhalb einer knotenbasierten Umgebung. Die Implementierung des Diagramms nutzt eine Pull-basierte Auswertung, bei der die Knoten des Diagramms basierend auf der Auswertung ihrer Inputs einen zwischengespeicherten Output-Zustand generieren. Datenfluss-Assets werden zur Unterstützung der prozeduralen Erstellung und Einrichtung von Simulationssystemen verwendet.
Chaos-Stoff, Zerstörung, Haut und Haar verwenden den einheitlichen, auf Datenfluss-Knoten basierenden Werkzeugsatz.
Die Aktualisierungen in UE 5.7 beinhalten Folgendes:
Neue Zeitleisten- und Simulations-Steuerelemente.
Eine neue Werkzeugleiste.
Ein neu gestaltetes Werkzeug zum Malen der Gewichtungs-Map (passend zum Skelett-Mesh-Editor).
Ein neues Werkzeug zum Bearbeiten der Skin-Skin-Gewichtungen (passend zum Skelett-Mesh-Editor).
Ein neues Werkzeug zum Bearbeiten von Skelett-Bones.
Viele Verbesserungen der Benutzerfreundlichkeit.
Chaos Visual Debugger
Chaos Visual Debugger (CVD) ist ein vielseitiges Werkzeug, das zum Aufzeichnen und Wiedergeben des Zustands einer Physiksimulation während des Gameplay entwickelt wurde. Er unterstützt die Aufzeichnung aller aktiven Rigid- und RBAN-Solver, einschließlich Partikelzuständen und Kollisionsdaten. CVD ist als Editor-Werkzeug in Unreal Engine zugänglich und bietet umfangreiche Anpassungsoptionen, wie z. B. die Auswahl bestimmter aufzuzeichnender Datenkanäle, entweder über die Benutzeroberfläche oder über Konsolenbefehle.
Das Werkzeug verfügt außerdem über Live-Debugging-Funktionen, die eine Echtzeituntersuchung physikalischer Daten während der Simulation erlauben. Darüber hinaus umfasst CVD eine Vielzahl von Visualisierungsoptionen, wie etwa Partikelzustand, Kollisionsdaten und Szenenabfragen, um dich bei der effektiven Analyse und Fehlersuche in Physiksimulationen zu unterstützen.
Die Aktualisierungen in UE 5.7 beinhalten Folgendes:
Verbesserungen bei Objektnamen: In dieser Version haben wir eine neue Funktion namens Partikelmetadaten eingeführt.
Diese neuen Metadaten ersetzen den alten langen „Debug-Name“-String.
CVD zeigt jetzt den Namen des Actor an, dem der Name des Physikkörpers gehört, und unterteilt ihn in verschiedene Felder (Level, Komponente und Bone-Index).
Darüber hinaus haben wir die Schaltfläche Im Inhaltsbrowser suchen eingeführt, die diese neuen Metadaten nutzt und dir eine Möglichkeit bietet, mit einem einzigen Klick den Blueprint zu finden, aus dem ein bestimmter Textkörper stammt.
Leistungsverbesserungen: In dieser Version haben wir weiter an der Verbesserung der CVD-Leistung gearbeitet.
CVD-Dateien mit einer großen Datenmenge (insbesondere über 2 GB Kollisionsgeometriedaten) werden jetzt bis zu 30 % schneller geladen.
Eine Verzögerung von mehr als 10 Sekunden, die beim Laden des ersten Frames komplexer Szenen (+93.000 Objekte) auftreten konnte, wurde auf ~3 Sekunden reduziert.
Diese Version enthält auch Fehlerbehebungen und Verbesserungen der Lebensqualität.
Chaos-Stoff
Da Stoffsimulationen und komplexe Engine-interne Kleidung immer häufiger nachgefragt werden, können sich unser alter Skelett-Mesh-Stoffeditor und -Workflow nicht ohne Weiteres an zukünftige Upgrades anpassen, die zur Unterstützung dieser Anforderungen erforderlich sind. In der Modebranche und bei den meisten Charakterarbeiten wird fast ausschließlich auf die Verwendung von DCCs zurückgegriffen, die auf die Herstellung von panelbasierter Kleidung spezialisiert sind. Um mit diesen externen DCCs zu wachsen, entwickeln wir unseren Stoffeditor weiter, um Panel-Setups aufzunehmen und zu bearbeiten und gleichzeitig den Stoff-Setup-Workflow zu verfeinern.
Chaos-Stoff für Unreal Engine 5.7 beinhaltet die Weiterentwicklung eines Beta-Stoff-Editors.
Die Aktualisierungen in UE 5.7 beinhalten Folgendes:
Datenintegration von Skelett-Mesh-Kleidung:
Du kannst jetzt Stoff- und Outfit-Assets als Skelett-Mesh-Kleidungsdaten hinzufügen.
Die Renderabschnitte des Skelett-Mesh können dann durch die Stoffsimulationseinrichtung innerhalb dieses Datenflussdiagramms der Assets verformt werden, sodass keine zusätzliche Stoffkomponente erforderlich ist.
Neue Referenzraumoptionen:
Verwende den neuen ReferenceBone-Datenflussknoten, um den ReferenceBone explizit festzulegen, anstatt den automatisch berechneten zu verwenden.
Verwende die neue Raumoption „Lokale Dämpfung“, um im ReferenceBone-Raum zu lösen, anstatt den Schwerpunkt der Masse zu verwenden.
Optimierungen: Wir haben Optimierungen am Stoff-Spiel-Thread und am Interaktor-Tick implementiert.
Zubehör-Meshs (experimentell):
Wir haben zusätzliche Zubehör-Meshs hinzugefügt und die Backstop-Einschränkung aktualisiert, um dieses Zubehör-Mesh verwenden zu können.
Derzeit kannst du Zubehör-Meshs erstellen, indem du eine vorhandene Sim-Mesh-Sammlung in ein Zubehör-Mesh konvertierst. Wenn sowohl in der Quell- als auch in der Zielsammlung importierte Scheitelpunkt-IDs vorhanden sind, kannst du diese verwenden, um Scheitelpunkt-Indizes abzugleichen, die im Rahmen eines SKM-Imports neu geordnet wurden.
Chaos Core
Chaosphysik wird ständig aktualisiert und optimiert, um Künstlern, Entwicklern und Programmierern bessere Simulationsergebnisse zu bieten. Die Festkörperdynamik ist die Kerntechnologie, auf der die meisten Spielphysikfunktionen basieren. Während wir Fortschritte in Richtung immer größerer, physikfähiger und physikbasierter Welten machen, müssen wir sicherstellen, dass dieses Kernsystem skalierbar ist und diese Anwendungsfälle bewältigen kann. Abfragen sind wie die Festkörperdynamik eine Kerntechnologie, auf die sich ein breites Spektrum von Systemen innerhalb von Unreal Engine verlässt, und, wie die Festkörperdynamik müssen wir sicherstellen, dass die Abfrage-Performance auf sehr große dynamische Welten skaliert werden kann.
Die Aktualisierungen in UE 5.7 beinhalten Folgendes:
Verbesserungen bei der Simulationsperformance:
Mehr parallele Simulationsphasen.
Wir haben die Funktion „Experimentelles teilweises Schlafen“ hinzugefügt, um die Leistung bei großen, unstrukturierten Stapeln zu verbessern.
Abfrage-Performanceverbesserungen:
Verbesserungen an der Kugel- und Kapsel-Schmal-Phase.
Verbesserungen bei der allgemeinen Abfrageebene-Transformation und Skalierungsverarbeitung.
Chaos Visual Debugger (CVD):
Verbesserte Ladegeschwindigkeit für Szenen mit vielen Actors und komplexer Geometrie.
QoL-Änderungen und Verbesserungen der Konsistenz des Laufzeit-Debuggers.
Datenflussphysik-Assets:
Erste Unterstützung für die Erstellung von Physik-Assets mithilfe von Datenflussdiagrammen.
Viele QoL-Änderungen und -Korrekturen im gesamten Simulationsfunktionsumfang.
Chaos-Caching
In Unreal Engine ist Chaos-Cache ein System innerhalb des Chaos-Zerstörung-Frameworks, das komplexe Zerstörungssimulationen aufzeichnet und wiederverwendet, wodurch die Leistung erheblich verbessert und konsistente, vorhersehbare Ergebnisse für Features wie Kurzfilme ermöglicht werden. Du verwaltest das Caching mithilfe eines Chaos-Cache-Managers, der physikalische Daten in einem Chaos-Cache-Sammlung-Asset aufzeichnet.
Diese zwischengespeicherten Daten können dann zur Laufzeit wiedergegeben werden, um die Zerstörung anzuzeigen, ohne die gesamte Simulation neu berechnen zu müssen. Dadurch werden komplexe Szenen effizienter und die Hardware wird weniger beansprucht.
Die Aktualisierungen in UE 5.7 beinhalten Folgendes:
Unterstützung für Stamm-Proxy-Mesh der Geometriesammlung: Der Chaos-Cache unterstützt jetzt Stamm-Proxy-Meshs ordnungsgemäß und wechselt je nach Zerstörungszustand des zwischengespeicherten und wiedergegebenen Geometriesammlungs-Assets zu deren Verwendung.
Automatisches Inkrementieren von Cache-Assets: Der Chaos-Cache-Manager verfügt jetzt über die Option, bei jedem Start einer neuen Aufzeichnungssitzung automatisch ein neues Asset zu erstellen.
Steuerelemente zum Starten/Beenden der Sitzung: Du kannst jetzt steuern, wann die Cache-Sitzung startet und endet. Standardmäßig beginnt die Cache-Sitzung, wenn das Event „Spiel beginnen“ für den Cache-Actor ausgelöst wird (normalerweise beim Starten von PIE oder Simulation). Es ist eine Option zum Deaktivieren dieses Verhaltens verfügbar. Dazu musst du den Start der Sitzung mithilfe der Blueprint-Funktionen zum Starten und Stoppen auslösen.
Beobachtete Komponentenfunktionen: Es stehen jetzt Blueprint-Funktionen zum Hinzufügen, Aktualisieren, Entfernen oder Löschen beobachteter Komponenten eines bestimmten ChaosActorManager zur Verfügung.
Wichtige Fehlerbehebungen:
Wenn eine zwischengespeicherte Geometriesammlung während derselben Sitzung zweimal aufgezeichnet wird, werden Events jetzt beim zweiten Mal immer ordnungsgemäß aufgezeichnet.
Beim erneuten Abspielen eines Caches im Wiedergabemodus löst die Niagara-Datenschnittstelle für Chaos-Zerstörung jetzt wie vorgesehen immer nachfolgende Events während der erneuten Wiedergabe aus.
Chaos-Haare
Die Initiative Haare und Groom konzentriert sich auf den Aufbau einer robusten Simulationspipeline für realistisches Haarverhalten unter Verwendung von Datenfluss, Skelett-Meshs und Führungs-Splines. Das System ermöglicht animationsgesteuerte Simulationen, die Überblendung zwischen kinematischen und simulierten Strähnen sowie erweiterte Authoring-Funktionen wie Führungsdeformer und Malwerkzeuge.
Die prozeduralen Workflows von Groom-Asset profitieren vom UE 5.7-Update zur allgemeinen Verbesserung des Dataflow-Editors. Wir haben die entsprechenden Knoten verbessert, um ein flexibleres Setup zu ermöglichen:
Auswahlbewusste Knoten:
Die meisten Knoten nehmen eine Auswahl, was zu einer kontrollierteren und gezielteren Einrichtung führt.
Du kannst vorhandene Auswahlknoten für andere Assets (Zerstörung, Fleisch) verwenden, um Auswahlsätze zu erstellen und diese prozedural zu bearbeiten.
Performance:
Groom-Assets mit komplexer Geometrie generieren die Geometrie für den Konstruktions-Viewport schneller und speichern die Informationen jetzt im Cache, um eine Neuberechnung zu vermeiden.
Dies gilt für andere sammlungsbasierte Knoten in allen Datenfluss-Editoren.
Die Aktualisierungen in UE 5.7 beinhalten Folgendes:
Simuliere Haare mit Führungs-Splines, die durch Animation und Physik gesteuert werden.
Mische animierte und simulierte Zustände für Realismus und Kontrolle.
Unterstützung für Malattribute, Hautgewichtung und Führungsaustausch.
Chaos-Fluids
Das Fluids-Projekt erweitert weiterhin die Wassersimulationsfunktionen von Unreal Engine, wobei in UE 5.7 gezielte Anstrengungen auf das Plugin Advanced Water gerichtet sind, hauptsächlich Verbesserungen für gebakte Flusssimulationen.
Aktualisierungen in UE 5.7 beinhalten Folgendes:
Unterstützt jetzt virtuelle Texturen.
Verbesserte Oberflächenqualität (weniger Spitzenartefakte).
Verschiedene Fehlerbehebungen und Performanceverbesserungen.
Virtuelle Produktion
Live-Link – Datenvorschau
Du kannst jetzt eine Vorschau der Live-Link-Daten im Editor-Viewport sehen, ohne dass du Actors oder Skelett-Meshs vorbereiten musst. Der Live-Link-Datenvorschau-Actor visualisiert alle Daten deiner Animations-, Transformations-, Kamera- und Markierungsrollen in einem praktischen Actor.
Wir haben auch Actor-Komponenten für benutzerdefinierte Hilfsmittel im Editor bereitgestellt. Mocap Manager verwendet diese, um deine Live-Link-Daten zu visualisieren.
Live-Link-Hub – stabile Aufzeichnung
Wir haben die Stabilität der Aufzeichnung im Live-Link-Hub verbessert, um mit Motivdaten umzugehen, deren Größe sich über die Zeit ändert – zum Beispiel, wenn die Verfolgung eines Motivs verloren geht und während der Aufzeichnung wiederhergestellt wird.
Du kannst Aufzeichnungen von früheren Versionen auf das neue Format umstellen, indem du in der Liste der Aufzeichnungen auf eine Option im Kontextmenü klickst.
Live Link – Broadcast-Komponente
Du kannst die neue Live-Link-Broadcast-Komponente zu den Actors im Level hinzufügen und sie in Live-Link-Motive verwandeln, von denen andere Rechner im lokalen Netzwerk Animationen empfangen können. Die Broadcast-Komponente unterstützt die Transformations-, Kamera- und Animationsrollen.
Diese neue Komponente aktiviert Workflows, bei denen du ein leichtgewichtiges Unreal-Engine-Projekt für das Retargeting des Skeletts verwenden kannst und die daraus resultierende Pose an andere Unreal-Editor-Projekte im Netzwerk senden kannst, wodurch UE zur DCC-Software für das Retargeting wird. Die Framerate der Broadcast-Animation ist gleich der Framerate des Spiel-Threads.
Live Link – pausierbarer Daten-Stream
Du kannst jetzt Daten von Live-Link-Motiven im Live-Link-Panel und im Live-Link-Hub pausieren und die Pause aufheben. Du kannst Motive einzeln oder in Gruppen pausieren.
Es gibt auch Scripting-Funktionen für Blueprints, mit denen du das Pausieren über deine benutzerdefinierten Werkzeuge im Editor steuern kannst. Mocap Manager verwendet jetzt diese API, um das Pausieren von Motiven zu steuern.
Live-Link-Hub – Unreal-Editor-Gerät
In zukünftigen Releases wird die Funktion des Aufnahmegeräts von Switchboard für Multi-User Motion-Capture-Setups zu Live-Link-Hub migriert. Für UE 5.7 kannst du im Live-Link-Hub jetzt mit einem neuen Plugin namens Live Link Unreal Device den Slate und den Stopp-Start des Take Recorder auf angeschlossenen Unreal Editor-Clients steuern, was noch experimentell ist.
Dieser neue Ansatz verbessert die Stabilität von Multi-Client Take Recording und ersetzt das alte OSC-Nachrichtensystem, das von Switchboard verwendet wurde. Er bietet benutzergesteuerte Autorität darüber, was jeder Client aufzeichnen soll und welchen Clients es erlaubt sein soll, aufzuzeichnen.
Mocap Manager – dynamisches Ankoppeln von Props
Beim Retargeting von Mocap gibt es oft Versätze zwischen den Händen eines Darstellers und den Händen deines Mocap-Charakters. Dies stellt ein Problem dar, wenn du versuchst, verfolgte Props auf deinen Charakter auszurichten.
Die neue Komponente Dynamische Prop-Platzierung ermöglicht es dir, ein Prop mit Motion-Capture-Daten zu steuern, aber einen dynamischen Versatz hinzuzufügen, damit es in den Händen deines Charakters bleibt.
Die Komponente PCapProp besitzt jetzt eine Funktion, die vom Blueprint außer Kraft gesetzt werden kann und mit der Benutzer ihre eigene dynamische Logik für das Ankoppeln schreiben können. In Mocap Manager wird eine Beispiel-Implementierung bereitgestellt, die für die meisten einhändigen Props funktionieren sollte.
Mocap Manager – verbesserte Erstellung von Darsteller-Meshs
Um ein möglichst genaues Ergebnis beim Retargeting zu erzielen, ist ein Skelett-Mesh, das auf die Proportionen der Live-Link-Daten des Darstellers skaliert ist, die beste Vorgehensweise.
Wir haben den Workflow zum Erstellen dieses Assets in Mocap Manager verbessert, um mit Bühnen zu arbeiten, bei denen der Bühnenursprung möglicherweise nicht günstig platziert ist, und für Systeme, die rechtshändige Koordinatensysteme verwenden.
Composure
Mit Unreal Engine 5.7 wird Composure als modernes System für die Zusammensetzung in Echtzeit wieder eingeführt, bei dem sowohl Live-Video-Input als auch Datei-/Bild-Medienplatten verwendet werden können. Das neue Composure ist ein ebenenbasiertes Werkzeug mit zahlreichen Verbesserungen gegenüber dem alten System, die Folgendes umfassen:
Ein neu gestaltetes Benutzererlebnis und ein gestraffter Workflow.
Performante Schatten- und Reflexion-Integration für Live-Action-Filmmaterial unter Verwendung von benutzerdefinierten Rendering-Durchläufen.
Ein verbesserter Keyer.
Medienprofil
In der Vergangenheit waren für die Verwaltung des Inputs und Outputs von Live-Videos in Unreal Engine mehrere Assets (Medienquelle, Media Player, Medientextur usw.) erforderlich, um von Punkt A nach Punkt B zu gelangen. Das Medienprofil soll diese in einem einzigen Konfigurations-Asset für ein bestimmtes Maschinensetup konsolidieren und zahlreiche Erweiterungen des Workflows bieten, wie z. B.:
Füge dynamisch mehrere Medienquellen und Medien-Outputs hinzu und wähle die gewünschte Hardware-Option (zum Beispiel AJA, Blackmagic, NDI).
Betrachte gleichzeitige die Vorschau mehrerer IO-Feeds.
Zeichne den Medien-Output auf.
Konfiguriere den Zeitcode und Genlock mit sofortigem Feedback.
Bequemer Zugang zur Video-IO-Funktionalität in verwandten Werkzeugen wie Composure mit einem einzigen Klick.
Take Recorder – Hitch-Schutz (experimentell)
Das Update UE 5.7 ergänzt den Support für Hitch-Schutz während der Take-Aufnahme. Du kannst Take Recorder jetzt so konfigurieren, dass die Geschwindigkeit der Aufzeichnung zum Schutz vor Datenverlusten erhöht wird. Wenn ein Frame sonst verloren gehen würde, kann Take Recorder die Engine-Auswertung anpassen, um Zeit für die Aufzeichnung der Daten zu lassen, bevor der Rückstand aufgeholt wird.
Zeichne zuverlässiger vollständige Daten auf.
Visualisiere Gebiete, in denen die Integrität der Daten gefährdet ist.
Triff im richtigen Moment Entscheidungen über die Qualität deiner Aufnahmen.
Benennungs-Tokens – Editierbarer-Text-Widget
Wir haben ein neues Slate- und UMG-Widget Token benennen – editierbarer Text mit direkter Unterstützung für Benennungs-Tokens hinzugefügt. Du kannst jetzt ganz einfach Werkzeuge für Pipelines mit Unterstützung von Benennungs-Tokens erstellen. Wenn der Fokus darauf liegt, zeigt das Textfeld den nicht ausgewerteten String {token} an. Nach der Bestätigung wird im Textfeld der ausgewertete Ergebnistext angezeigt.
Suche und vervollständige {tokens} automatisch direkt aus dem Textfeld.
Sieh den ausgewerteten Token-Wert sofort direkt im Textfeld.
Verfügbar mit dem Plugin Naming Tokens.
Zeitleistenvorlagen für kinematografische Assembly-Schemata
Kinematografische Assembly-Schemata können jetzt auf vorhandene Levelsequenzen und Filmbaugruppen als Vorlagen für die Sequencer-Zeitleiste verweisen. Du kannst eine Zielvorlage angeben und diese Zeitleiste jedes Mal neu erstellen lassen, wenn du mithilfe des Schemas ein neues kinematografisches Assembly erstellst.
Entwerfe deine Basiszeitleiste im Voraus.
Reduziere Wiederholungen und Fehler beim Erstellen von Aufnahmen, Szenen, Lichtsequenzen und mehr.
Verfügbar bei Verwendung des Plugins Cinematic Assembly Tools (CAT).
Doppelte Assemblys mit Referenzersetzung
Du kannst jetzt Assemblys mit Referenzersetzung an einem neuen Speicherort duplizieren. Du musst beim Duplizieren einer Assembly keine Teilsequenzen mehr manuell erstellen, umbenennen und neu referenzieren.
Dupliziere es an einem neuen Speicherort und die Umbenennung erfolgt automatisch basierend auf Assembly-Metadaten und Tokens.
Teilsequenzen werden prozedural dupliziert, umbenannt und neu referenziert, um sicherzustellen, dass keine Referenzen zurückbleiben und alle deine alten Aufnahmen geändert werden.
Einfacher Zugriff über einen übersichtlichen und einfachen Assistenten.
SMPTE 2110 – Unterstützung für Nvidia Rivermax BlueField-3
Das Nvidia Rivermax-Plugin in Unreal Engine 5.7 unterstützt sowohl BlueField-2- als auch BlueField-3-DPUs mit validierter Funktionalität in nDisplay für In-Camera-VFX.
Plattform-SDK-Aktualisierungen
Windows
Visual Studio 2022 v17.14 oder neuer
Windows SDK 10.0.22621.0 oder neuer
LLVM Clang
Minimum: 18.1.8
Bevorzugt: 20.1.8
Intel OneAPI
Minimum: 2025.2.0
Bevorzugt: 2025.2.0
.NET 8.0
IDE-Version, gegen die die Build-Farm kompiliert
Visual Studio 2022 17.14 14.44.35207 Werkzeugkette und Windows 10 SDK (10.0.22621.0)
Xcode 15.4
GDK
Minimale Windows SDK: 10.0.22000.0
GDK: April 2025
Letzte Wiederherstellungsversion
Unterstützte IDE: Visual Studio 2022
Linux
Native Linux-Entwicklung
Empfohlenes Betriebssystem: Ubuntu 22.04, Rocky Linux 8 oder neuer, Redhat Linux 8 oder neuer
Kompilierer: Clang 20.1.8
Cross-Kompilierungswerkzeugkette: basierend auf v26 clang-20.1.8
Hinweis: Benutzer von Unreal Engine unter Linux müssen ihr Betriebssystem auf die Verwendung von SDL3 aktualisieren. Weitere Informationen findest du unter Updating Unreal Engine on Linux to SDL3
macOS
Empfohlenes Betriebssystem: aktuelle Version von macOS Sonoma 14
Minimales Betriebssystem: macOS Sonoma 14.0
Empfohlene Xcode-Version: 15.4 oder neuer
Xcode-Mindestversion: 15.2
Unterstützte macOS-SDK: 14 und neuer
Hinweis: Die unterstützten Xcode-Versionen wurden von UE 5.6 heruntergestuft, da bei der Verwendung der neuesten Versionen Probleme beim Kompilieren und Verknüpfen auftraten.
iOS / tvOS / iPadOS / visionOS
Empfohlenes Betriebssystem: aktuelle Version von macOS 14 Sonoma
Minimales Betriebssystem: macOS Sonoma 14.5
Empfohlene Xcode-Version: 16.1 oder neuer
Xcode-Mindestversion: 15.4
Unterstützte SDK-Versionen:
iOS-SDK-Version: 15 oder höher
iPadOS-SDK-Version: 15 oder höher
tvOS-SDK-Version: 15 oder höher
visionOS 2.4 mit Xcode 16.3 empfohlen
Hinweis: v2.5 und x16.4 haben einen sehr eingeschränkten Test bestanden und funktionieren voraussichtlich stabil. Versionen bis hinunter zu v2 und x16 funktionieren wahrscheinlich.
iOS-Graphik-API: Metal 2.4 - 3.1
Sonstige Hinweise
Shader Model 6 (SM6) erfordert macOS 15. Diese Unterstützung befindet sich in der Beta und wir empfehlen sie derzeit nicht für die Produktion.
Android
Android Studio Koala 2024.1.2 29. August 2024
Android NDK r27c
Android-SDK
Empfohlen: SDK 34
Minimum für die UE-Kompilierung: SDK 34
Standardziel-SDK für die Auslieferung: SDK 34
Minimale SDK-Installationsebene: SDK 26
AGDE v23.2.91+ wird empfohlen, wenn du das AGDE-Debugging nutzt, da diese Version eine Korrektur für einen SIGBUS-Fehler enthält.
Build-Werkzeuge: 34.0.0
Bei der Verwendung von 35.0.0 kann es zu Problemen kommen, wenn aidl unter Windows genutzt wird. Dies wurde mit 35.0.1 behoben.
Java-Laufzeit:
OpenJDK 21.0.3 2024-04-16
OpenJDK Laufzeit-Umgebung (Build 21.0.3+-12282718-b509.11)
OpenJDK 64-Bit-Server-VM (Build 21.0.3+-12282718-b509.11, gemischter Modus)
Sonstige Hinweise
UE wurde auf die Verwendung von Gradle 8.7 aktualisiert und die Version des Android Gradle Plugin (AGP), die wir verwenden, wurde auf Version 8.5.2 aktualisiert. Wenn du Android Studio zum Debugging nutzt, empfehlen wir die Verwendung von Android Studio Koala. Ladybug funktioniert ebenfalls, aktualisiert Gradle oder AGP aber nicht gegenüber den oben aufgeführten Versionen.
Wenn du deine NDK-Stufe wählst, solltest du Android-26 anpeilen, was Android 8.0+ unterstützt.
EOS
1.18.1.2-47370208
Steam
1.57
Switch
SDK-Standardversion: 20.5.6
Firmware-Standardversion: 20.1.0-2.2
Minimale SDK-Version: 18.3.1
Minimale Firmware-Version: 18.1.0-1.0
Nintendo Package Manager: 1.7.0
Unterstützte IDE: Visual Studio 2022
Switch 2
SDK-Standardversion: 20.5.6
Firmware-Standardversion: 20.1.0-2.2
Minimale SDK-Version: 19.3.5
Minimale Firmware-Version: 19.1.0-1.4
Nintendo Package Manager: 1.7.0
Unterstützte IDE: Visual Studio 2022
PS4
Orbis-Standard-SDK 12.508.001
Minimales Orbis SDK 12.008.011
Systemsoftware 12.508.001
Unterstützte IDE: Visual Studio 2022
PS5
Prospero-Standard-SDK 11.00.00.40
Minimales Prospero SDK 10.00.00.48
Systemsoftware 11.00.00.43
Unterstützte IDE: Visual Studio 2022
ARCore
1.48
ARKit
4,0
OpenXR
1.1.46
Die Laufzeiten OpenXR 1.0 und 1.1 werden unterstützt und können in den Projekteinstellungen auch deaktiviert werden.
Veröffentlichungshinweise
AI/ML
Neural Network Engine (NNE)
New:
Added multi-task support to the IREE CPU backed NNE runtime.
Upgraded IREE to version 3.5.0. for NNE plugin NNERuntimeIREE.
Animation
Animating in Engine
New:
Added a 'Tolerance' To the ControlRigPoseMirrorSettings Project settings that is used to match Controls also by position in rest pose. We still match by the Mirror table first, and fallback to position based matching. We also now cache the tables and reset them if a mirror table property is changed.
Improved Anim Details
UX Editing multiple values no longer displays the first property value.
Releasing focus on multiple values no longer sets the first property value.
Shift clicking to the left of a property name no longer resets the property.
Added support for math expressions with multiple operators.
Removed support for =operator syntax, instead use operator =, e.g *=3 to multiply the current value by 3.
No longer show parent controls of the current selection, avoiding showing too many channels when a selected control has hosted channels.
Now follows the same order as Sequencer for non Control Rig properties
Now uses meta data of Control Rig elements and Object Properties that sequencer controls, value ranges are now displayed and respected.
Selected Anim Details properties now navigate to their value widget when pressing tab.
Animator Kit:
Added a new Locator utility rig.
Adding static mesh locators and materials.
Curve Editor:
The Set Start Playback Range and Set End Playback Range shortcuts now work in the Curve Editor as well as Sequencer.
A new preference, Panning Mouse Button, allows you to choose whether right or alt-middle mouse button, or both should be used for panning the curve editor view. Also, alt-right now always zooms in/out.
The Next Key and Previous Key shortcuts now work in the Curve Editor as well as Sequencer.
Ensured we load an animation instead of trying to just find the package before we "Bake To Animation" so that it doesn't try to create a new asset.
Updated AnimationEditorUtils.cpp
Bug Fix:
Deleting a Bool channel can no longer set the key at another time if AutoKey and KeyAll is on.
No longer adds anim layers to level sequence unless needed.
Constraints now work with Pivot Tool.
Fixed shift click so it always goes to the last selected object, added a hot key to toggle pivot and motion trail modes.
Made sure to automate tangents when baking.
Made motion trails enter/exiting undo/redoable.
Motion trails can be selected without a focused viewport.
Made sure Rotator/Location/Scale controls have a curve color
Pose library can paste onto hidden control rigs
Made the AnimSequencerExport Blueprint type
Anim Details:
Properties now reset their values to the initial value of controls when clicking reset to default.
Now also displays properties that reside within a Shot Track.
Fixed navigation not working in some cases.
Fixed an issue in Anim Details where selecting a component in a plain location, rotation or scale control would not select the control in Curve Editor.
No longer shows objects if keys are selected only.
Fixed property value widgets are losing focus while scrubbing if a blueprint actor is controlled.
Fixed in some cases editing Anim Details properties creates more than one undo step.
Fixed Anim Details options no longer showing when reentering animation mode
Fixed an issue where Anim Details displayed the actor or component name instead of the track name for attributes.
Curve Editor:
Fixed issues where bezier curves were not always painted correctly.
Fixed an issue where curves were not painted when none of its keys were visible.
Fixed an issue where linear pre-/post-infinity extrapolation was not always painted correctly
Baking keys with a value different than 1 would increase range
Fixed an issue where pre-/post-infinity was not painted correctly when the first or last key's tangent mode was linear and pre-/post-infinity interpolation was linear
Fix an issue where curves flicker hovered and unhovered while editing
Motion Trails:
Made sure the Motion trail state stays on with asset reload.
Fixed strobing frame coloring with dashed by setting the start frame to be eval range start so it doesn't change when view range changes.
Fixed crash when drawing HUD since trail may not be updated due to how the hud draws. Clean pin state in UI when using modifiers.
Fixed an issue where changing additive animation modes with root motion on causes inconsistent root position when going from an additive mode to none.
Fixed a bug where starting an animation with a non-zero playback time (like rewind debugger can do) would cause an incorrect root position.
When merging sections no longer see if it's in range, just extend it so we can match up how it works without the merge.
Now only compensate from the game thread.
Can now set or add keys when recording control rig keys, previously we would just add keys causing duplicates.
Anim Layers:
Bake Fix for absolute with additives when doing per frame bakes.
Make Name Column not shrink when shrinking
Layers show up when added to sub sequence
Keep track of open anim layer UI on the anim layer asset data.
Fixed duplicate/merging control rig sections when the channel layout is different between sections.
Made generic vector channel data display more robust for position/rotation/scale control types. This also fixes the euler curve filter not recognizing rotation keys coming from Rotator control types.
Sequencer: When baking to control rig, the animation track is now disabled instead of the individual sections.
Turn off throttle when mouse button is pressed not just on drag so scrub time doesn't throttle in sequencer/curve editor
Space Switching: Remove extra keys when clicking a space key by checking to see if we are changing into the same space in which case we can delete the extra key and the space key
Hosted channels are no longer enabled if the parent is not enabled, this breaks selection. Also fixed anim layer selection with static meshes
Sequencer: The scrub shortcut (b) now properly works in the viewport, Sequencer and Curve Editor.
Fix Pivot square scale in different FOV's.
Force LOD to 1 when ticking skel meshes when baking anim sequences. Sequencer may restore state which can change the lod during the bake process.
Pivot Tool: Pivot render works in different FOVs
Animation Kit:
Added aim option for blendParent. Changed control shapes to not be solid.
Fixing bad root attachment when no control rig exists.
Fixed an issue with the recompute mesh normals kernel used by Deformer Rigs in the Animator Kit plugin causing unexpected changes to mesh normals even if they are not influenced by deformer.
Can no longer do space compensation from nongame thread which can happen when deleting many channels, in which case we probably don't want to compensate anyway
Pose Library fixes, use alt drag for non additive drags and for additive it goes from -1 to 2.
Blending and additive mode are now working on mirror.
Space Switching: Fix for undoing space switch key deletion.
Tools such as snapper, trails and baking now work better with spawnables in nested subsequences
Character Customization (Mutable)
New:
Added component naming support for spawned groom components.
Debugger improvements:
Added support for Dataless parameters.
Unified Debugger and Editor compilation options.
Reordered some widgets for better use of the available space.
Minor API improvements:
Actor:
Added ACustomizableSkeletalMeshActor::GetCustomizableObjectInstance.
Added ACustomizableSkeletalMeshActor::GetSkeletalMeshComponent.
Override Materials
Deprecated UCustomizableObjectInstance::GetOverrideMaterials(int32).
Added UCustomizableObjectInstance::GetSkeletalMeshComponentOverrideMaterials(FName).
Restricted Passthrough Mesh Component to only support Skeletal Meshes.
Bug Fix:
Fixed Material Parameter assert.
Fixed Default Values not exposed to Blueprint.
Fixed Skeletal Mesh Parameter morph check.
Fixed UpdateSkeletalMeshAsync missing parameters.
Fixed Materials comparison for merging.
Fixed Textures and Meshes not being properly cached, their hash was not deterministic.
Fixed a compiled API typo.
Fixed multiple Dataless bugs:
Crash with Default Material parameter.
Crash with Dataless Morphs having names but no data.
Fix Texture Parameter not cropping images with layout operations.
Fixed issues with GenerateMutableSourceImage cache.
Added missing COI Contains API functions.
Fixed public API Enum Parameter functions not working with the first parameter.
GetEnumParameterNumValues
GetEnumParameterValue
Fixed deadlock when saving an asset + compiling a CO while asset registry was loading.
Fixed streaming crash when no indices.
Fixed meshes incorrectly reusing poses.
Deprecated:
Removed deprecated 5.6 API functions.
Control Rig
New:
Update default hotkeys and related functionality:
Set Solve Mode: Construction Event - 1
Set Solve Mode: Forwards Solve - 2
Set Solve Mode: Backwards Solve - 3
Set Solve Mode: Backwards and Forwards - 4
Set Next Solve Mode - M
Enable profiling- P
Show Controls as Overlay - U
Display Nulls - G
Display Socket - H
Display Axes for selection - J
Using hotkey for Profiling (P by default) now creates an undo step.
Function nodes from other assets now show the asset name instead of the asset path.
Flagged Render MorphTarget MaxBlendWeight CVar as safe for render thread, in order to avoid some warning logs.
Made the animation show flags of the control rig editor never clip off of the viewport toolbar.
Fixed duplicated Control Rig assets not resetting the asset variant ID.
Control Rig Hierarchy no longer reserves transform space for non transform elements (curves and connectors).
Control Rig Physics
Moved to its own experimental plugin, though it still requires the Physics Control plugin as well.
Added ability to import collision shapes and bones
Support for "wind turbulence"
Support for colliding against world objects
Add various cvars under controlrig.physics
Numerous improvements, especially access to functionality, and fixes
Removed top level component concept from Control Rig Hierarchy
Added GetSocketTransform
Modular Control Rig:
Adding plugin Icon for Modules
Improved backwards solve for Foot Module.
Added Module tags and Root56 module to the correct ini files.
Dragging a rig element onto the graph now offers an option to Get Metadata and Set Metadata.
Update default settings and remember them per editor per user:
Display Axes On Selection is now enabled by default.
Display Axes On Selection, Axis Scale, Display Nulls, Display Sockets, Gizmo Scale, Hide Control Shapes, Show Controls as Overlays, Only Select Rig Controls are now saved per editor per user.
Control Rig now only performs one copy of the hierarchy during initialization.
Added line trace unit nodes.
Added icon to plugin.
Added Damp and Critical Spring Damp nodes to Control Rig.
The Control Rig menu now shows directly in the viewport toolbar instead of being a submenu in the Show menu (eyeball icon).
Nodes and hierarchy elements now offers options to find nodes by name locally and globally.
Updates to Set Initial Transform from Current and related Commands
Set Initial Transform from Current is now only applicable for Bones, Nulls and Connectors.
For Controls, Set Initial Transform from Current is now Zero Controls.
For Controls, Set Initial Transform from Closest Bone is now Zero Controls from Closest Bone, and no longer applicable for Bones, Nulls and Connectors.
Set Shape Transform from Current is now Zero Control Shape.
Bug Fix:
Moved findItemsWithTag to the construction event for performance.
Fixed Control Rig curve container undo / redo breaking the curve list
Fixed Control Rig editor resetting on compile curve operations made on the curve container (delete, rename, and import).
Fixed a crash in Control Rig Pose adapter when removing bones from the skeleton while having a Blueprint with a Control rig opened in the asset editor.
Fixed AnimNode Control Rig variable mappings initialization at OnInitializeAnimInstance.
Control Rig: Need to update Rotation Order table with modular rig updated names.
Fixed Control Rig Hierarchy updating more transforms than needed in propagate dirty flags function.
Modular Control Rig
Added twist to legs.
Fixed IK/FK naming.
Added back public function from arm to leg so it picks up changes.
Fixed hind legs ik fk.
Changed leg and arm softness to off by default.
Fixed socket tooltip in Spine.
Fixed HindLeg FK controls not rotating.
Fixed AnimalNeck stretch.
Fixed Shoulder backwards solve by parenting to chest null instead of body ctrl.
Fixed HindLeg to always use connectors for creation instead of parent lookup.
The editor now retains the Rig Solve Mode after compiling.
Fixed Control Rig control module iterator lambda parameters creating copies of some expensive objects.
Fix for client crash in FRigUnit_HierarchyInstantiateFromPhysicsAsset, due to Modular Control Rig object overrides getting garbage collected.
Fixed ControlRig Hierarchy serialization not storing the previous hierarchy name map.
Fixed crash in Control Rig editor when the preview floor mesh is not available, now it will trigger an error log and continue to load the asset.
Avoid a crash in Control Rig when adding an empty rule to a connector.
Fixed an editor undo redo in an AnimBPs that contains a Control Rigcrash, when performing a redo of a previously-undone SetPreviewMesh transaction.
Anim In Engine: Rotator control keys are retained in Sequencer when the controls are changed to transform controls in the rig.
Need to update Constraint Channels with updated Modular rig names, or constraints come in broken.
Fixed ControlRig editor not executing post undo for the transient editor preview actor.
Fixed undo / redo crash in Control Rig hierarchy mappings, when undoing across a construction transaction.
Converted HandleExecutionReachedExit event to function callback, to avoid worker thread contention.
Fixed ControlRig spawn control node details panel not generating the shape name list as a combo box.
Fixed a crash in ControlRig when expanding a function reference from a different graph that contains a private function inside. Now the user will receive a localize request to make a local copy of the function.
Fixed RigVM local variable customization not showing value for local variables not used in the graph and losing value after compiling.
Deformer Graph
New:
Adding Deformer dynamically in Control Rig was changed to use Async Loading to avoid hitches when the Deformer loads.
Enabled Compute Framework/Deformer Graph on mobile platforms.
Fixed SkinWeightAsVertexMask Date Interface providing incorrect data when a non-default skin weight profile is used.
Fixed skeletal meshes getting invalid tangents when using deformer graph with opengl_es31.
Fixed wrong category for a few deformer functions.
Added a pre-built dual quat deformer that supports both morph and cloth.
Bug Fix:
Made sure skin weight profiles are requested earlier so that we can avoid T-Pose on the frame that the deformer becomes active / LOD changes.
Fixed copy pasting resource node with matrix3x4 type creating a node with no pin.
Fixed an ensure related to deformer graph instance settings in packaged build caused by incorrect object name used when creating the settings object.
Gameplay
New:
Make Motion Warping switchoff conditions and warp target direction mode experimental as these APIs will change in future.
Added support for animation mirroring to UAF.
Note this is a first pass and not fully matching Animation Blueprint's capabilities yet.
Added a new version of AddAnimationNotifyEvent() that supports blueprint exposed data from notify events.
This helps prevent data loss when copying/duplicating animation notify events.
Add SmoothWalkingMode to Mover2.0
Added base class SimpleWalkingMode to help make writing walking modes easier.
Renamed AnimationMath -> SpringMath and made public Rename SpringWalkingMode -> SimpleSpringWalkingMode.
Added Velocity Spring functions to SpringMath Add character prediction functions to SpringMath.
Added documentation to SpringMath.
Added support for PoseSearchDatabase searches returning multiple results
Added experimental support to the motion matching node (FAnimNode_MotionMatching) for interaction searches (multi character motion matching, to mimic FMotionMatchingTrait).
Added a custom make bp function for FMotionWarpingTarget to ensure that the custom actor is called to calculate the target transforms when a component is passed as an input.
The ChooserTable randomization column can now keep track of multiple recently selected entries and reduce the probability of reselecting them.
Added new Chooser table column type (FPoseSearchColumn) to support motion matching searches within chooser evaluations.
Add a spring walking movement mode to Mover named "SimpleSpringWalkingMode". This uses a critically damped velocity spring model to translate and rotate the character.
Removed UE 5.5 deprecations from PoseSearch plugin.
Exposed anim to texture editor functions as a public interface.
Add threadsafe method for getting curve asset float & vector values.
Bug Fix:
Fixed UE::PoseSearch::SDatabaseAssetListItem potentially referencing a deleted asset.
Fixed a crash when opening the PoseSearchInteractionAsset editor.
Fixed FSearchContext::GetSampleRotationInternal and FAssetIndexer::GetSampleRotation not properly calculating the rotation relative to their reference bone.
Fixed motion matching tracing during throttled or skipped searches.
Stored FBlendStackAnimPlayer::StoredAttributes as FMeshAttributeContainer instead of FHeapAttributeContainer to support animation LOD changes in blend stack.
Fixed a pose search database indexing crash when using a UAnimNotifyState_PoseSearchSamplingAttribute referencing a bone that is missing from any channel included in the pose search schema.
Fixed root motion sampling in blend stack.
Fixed the motion warping switchoff condition to use the correct target transform when component following ends.
Fixed a crash in UPoseSearchFeatureChannel_Phase::IndexAsset when indexing assets with a single pose, usually caused by a very short animation in a pose search database.
Fixed UPoseSearchDatabase::SynchronizeWithExternalDependencies mistakenly synchronizing transient assets into a database, leading to reference garbage collected assets.
Removed notify guids from Pose Search Database hash generation, otherwise the hash can be non-deterministic.
Fixed a crash in FAsyncPoseSearchDatabasesManagement::CollectDatabasesToSynchronize with Objects with invalid Object->GetClass().
Fixed the Alias state nodes not working with getters like GetRelevantAnimTime.
Deprecated:
Deprecated UPoseSearchDatabase TArray AnimationAssets in favor of TArray DatabaseAnimationAssets.
Deprecated UPoseSearchLibrary::UpdateMotionMatchingState.
ML Deformer
New:
Hide certain conflicting properties (categories even) from the advanced preview scene settings tab. This was needed because the MLD asset editor has its own mesh picking and animation playback. Changing those properties inside the preview settings tab would mess things up. So we now hide those specific conflicting settings.
Make curves work with UAF.
Added support for copy paste between input bone and curve lists.
Means users can copy/paste the input lists from one model to the other.
You can now right click the input list widgets and choose Copy and Paste.
Fixed a few bugs in the tooltips as well as unique curve group name generation.
Improved the UX a bit by setting a minimum height for the bone, curve, bone group and curve group widgets and some context menu improvements.
Fixed some UI refresh issues as well when adding bones or curves. Curve group and bone group coloring did not refresh properly.
Improved performance of the asset editor. Improved responsiveness to property changes, faster loading, faster sampling of anims.
Added a new console command "MLDeformer.DebugDrawInputPoses" which will draw the input pose to the ML Deformer. It can be useful to quickly visually see what meshes have ML Deformers on them, and what bones are included.
GeomCache: Some improvements to the memory management. Prevented reallocs, resulting in faster performance.
Bug Fix:
Fixed a problem where training with curves would cause a failure during training.
Fixed a bug where curves on the skeletal mesh instead of on the skeleton would cause some error checking to fail.
Fixed a crash when adding a bone to the inputs of the ML Deformer.
Fixed a crash on undo on morph based models. Also changed the icon of the Train button.
Fixed python errors when launching with "-game" as argument.
Fixed a bug when training, related to masks of input animations. Training would fail with some error right after sampling.
Moved the tick group from pre physics to post physics.
Fixed a VertexDeltaModel python import error. This was because an import should have been inside the Train function, but it was in global scope.
Fixed async loading issues.
Some fixes where it would not detect curves.
Physics Control
New:
Now supports using a mask when invoking control profiles, which means they can be applied to a subset of the character.
Additional support for specifying control/modifier set names in function calls.
Kinematic targets are now specified the same way across PhysicsControlComponent, RigidBodyWIthControl and ControlRigPhysics.
Fixed duplication of the Linear/AngularTargetVelocityMultiplier and TargetVelocityMultiplier parameters.
Bug Fix:
General minor fixes/improvements to the physics control asset editor, including a fix for a potential crash.
Runtime
New:
Added pinning and toolbar to workspace viewport and remove scene description tab.
Now supports drag/dropping multiple bones in the abstract skeleton binding editor.
Bone items can now be dropped onto non-set items in the abstract skeleton set binding editor.
Added a filter for attributes to anim asset browser.
Added Initialize as a default implemented event in the UAF module.
State Machine: Self transitions & UX improvements:
Self transitions and state re-entry are now possible.
Re-entering a state uses inertial blending and requires an inertialization node. Old content will not use the new re-entry feature but any newly built content, when re-entering a state, will create an error if an inertialization node is not present root-wards in the graph.
The target state must enable bAlwaysResetOnEntry for the inertial blend to trigger.
To aid with managing state-reentry, a new MinTimeBeforeReentry value has been added to transitions.
Added 'reverse transition' context menu option that just reverses the direction of transitions.
Relinking transitions to other states can now be performed from the transition tail as well as the head.
State alias list is now sorted alphabetically to make finding states easier.
Look and feel of state machines has been tweaked & improved.
Now uses SVG brushes to better scale.
Different node types (states, aliases and conduits) now have different shapes.
Transitions now rotate to follow their direction and have been moved closer together and closer to their link line.
Transitions now sort in front of states.
Links are now further apart and scale correctly with zoom level.
Selection of links now scales correctly with zoom level.
Details panels for states now show the anim node functions for their result node and have been rearranged.
Added 'force transition' option to the context menu for state machines that are currently being debugged.
Made machine entry nodes non-deletable.
Extended the Create Asset menu to allow non-asset menu entries for wizards that create potentially multiple assets of various types.
Added a picker widget for animation attributes.
Added toggle to blend layer trait to blend in mesh space.
Added live updating blend mask weights in the profile blend node.
Updated animation blueprint interface icon in the 'My Blueprint' tab to show as blue when the function has been implemented.
Exposed Curve Metadata API on the Skeleton to Blueprint and Python. This includes functions to query, add, remove and rename curve metadata as well as querying and setting material and morph target flags.
Disabled adding set bindings without a set collection set.
Added a viewport to the workspace for UAF.
Paused preview animation while manipulating transform widget in animation editor.
Added an asset wizard for help authoring UAF content.
Added foundations for the abstract skeleton runtime.
Added editors for the abstract skeleton assets.
Added functionality to Open in New Tab via the context menu for collapsed nodes and function nodes in UAF
Fixed collapsed nodes and functions in UAF workspaces being opened without context of their outer, leading to loss of access to variables.
Fixed debug only assert when opening items via double click the workspace outliner.
Bug Fix:
Fixed a missing drag-drop op for adding attributes to sets in the set collection editor.
Caught a situation where the mesh asset in InitializeAnimScriptInstance is invalid. Also dealt with possible parallel anim eval tasks being in flight.
Fixed a crash when trying to create a new UAF Workspace instead of picking an existing one when prompted to choose a workspace after opening a newly created UAF Graph.
Fixed slow document navigation in the workspace editor.
Fixed a crash when attempting to add an existing curve attribute to abstract skeleton binding.
Fixed being able to rearrange a trait onto itself.
Fixed for animation modifiers not reverting correctly and crashing in some instances.
Fixed a crash when re-removing a pin on a blend multi node after undoing.
Fixed a broken root motion extraction during animation modifier evaluation.
Fixed a regression in root motion extraction which prevented animation modifiers from reading raw uncompressed data during the compilation process, causing them to fail
Fixed missing text localization in pose asset widget.
SkeletonCompatibility: Fixed a problem when using compatible skeletons where we could end in a situation where the source skeleton did not have a bone of the target skeleton, which could lead to a crash.
RBAN: Ensure RBAN doesn't write NaNs into the pose.
Fixed visualization of what the blend weight of the animation is in Animation Insights for Random Sequence Player. Now it takes the overall blendweight of the animation into account as well.
Fixed the look at edit mode locator gizmo not updating location when changes are made in the details panel
Anim State Machine:
Fixed incorrect duplicate GUID warning when a transition rule is shared.
Prevented renaming states to 'None'.
Fixed copy-paste of transition nodes creating duplicate GUIDs/assets.
Fixed clamping values preventing manual entering of valid negatives.
Anim Sequence: Fixed thumbnail scene references preventing deletion when assets contain notify states.
Anim Assets: Fixed a crash when creating a preview scene for assets with a deleted compatible skeleton.
Fixed the animation sequence segment length
Fixed a button in the montage editor not working due to property access type mismatch
SkeletalMeshComponent: Fix meshes getting ticked offscreen incorrectly when using montage-related visibility options
Fixed pose history and trajectory history desync by delta time, causing incorrect results especially noticeable when the component transform makes large translation and rotation, e.g. a 180 pivot.
This fixes a bug with bad pivot selection when the capsule rotation flips
Fixed incorrect timings on trajectory history when delta time is not constant.
Fixed duplicate trajectory entries around t = deltatime.
Fixed the set collection editor not updating when renaming a set, and added rename to the context menu.
Fixed the expansion state of tree items resetting when drag/dropping a bone in the abstract skeleton binding editor.
Fixed drag-dropping segments into composite track not matching selection order.
Fixed window scaling issue when dragging multiple notifies in the animation editor.
Changed check to ensure in SkeletalMeshComponent to avoid crash using rewind debugger.
Fixed many SAssetShortcuts unnecessarily refreshing on asset opening resulting in slow ABP navigating.
Animation Budget Allocator: Enabled component tick when unregistering.
Updated the animation attribute functions to not allow adding an attribute with a name that already exists.
Anim BP: Fix cook non-determinism with generated 'mutables' struct
Anim Instance: Fix memory leak when GC-ing both mesh & anim instance in the same pass.
Fixed an issue with tooltip names in SOverrideStatusWidgets.
AnimSequence: Fix uninitialized pose transforms being generated in some circumstances
PropertyAccess: Fix memory leak when calling functions via property access that return non-POD values.
Anim Decompression: Removed usage of deprecated GetCompactPoseIndexFromSkeletonIndex.
Fixed copying notifies when duplicating an anim sequence so the new notifies no longer reference the old sequence.
Fixed the UAF asset wizard template assets being visible in the content browser and selectable in the workspace picker etc.
Added more inline crash details when invalid values are found in animation poses.
PropertyAccess: Hardened GetAccessAddress in case of unexpected data.
SkeletalMeshComponent: Fixed a crash when calling SetAnimInstanceClass during a notify callback.
Triggered caching of all otherwise lazily computed data when a DNA is loaded from a binary stream, which can avoid potential race conditions if the same DNA reader is utilized in a multithreaded environment.
Fixed not being able to move nodes within newly created comment nodes in Control Rig and UAF.
Deprecated:
Removed deprecated Skeleton Compatibility code from the Skeleton class.
Removed deprecated Curve code from the Skeleton class.
Removed deprecated Mesh Linkup Caching code from the Skeleton class.
Sequencer
New:
Property tracks can now be renamed.
Note, the tooltip will still show the actual name of the property being animated.
Added setting to always stop when going to playback start or end.
Sequencer Navigator: There are now columns for the sequence ID and the object binding ID which are useful for debugging purposes.
Take Recorder: Add a cvar TakeRecorder.AllowPossessablePIEObjects to bypass disallowing recording PIE objects as possessables. The default is to not allow this (no change in behavior). This can be useful when recording a player pawn.
Added scripting to text
Added ISequenceVisitor callbacks for when the visit enters/exists a sub-sequence
The camera cut track now supports multiple rows. When multiple rows exist, the camera cut track does not try to auto arrange sections.
MovieScene: Exposed FLevelSequencePlaybackContext to other modules.
Hot key scrubbing will continue playing if Sequencer was playing.
Preview camera cuts in simulate. This also lets users enable/disable seeing camera cuts in PIE after ejecting from the player controller.
The colors for the playback start/end range can now be customized by user settings.
Added support for notification callbacks when animating properties.
The timeline in the cinematic viewport now respects the snapping behaviors of the Sequencer timeline.
Added fixes and improvements to the time space display. The desired time space and the local time space are now both drawn.
Bake Transform now has an option to bake with time warp applied.
Attach sections with Preserve None now default to infinite duration.
'Bake Animation Sequence' and 'Create Linked Animation Sequence' actions in Sequencer now remember the last folder that was used in the current Editor run.
Bake Transform is now available in the Template Sequence and Camera Animation Sequence Editors
The subsequence section's Origin Override Location/Rotation now respect the default float/double spinbox incremental behaviors.
Sequences: Add PlayReverse function to actor sequence components.
Editing scale channels in the Sequencer Key Details now has an option to preserve the scale ratio
Save As is now available in the Template Sequence and Camera Animation Sequence Editors.
Added the ability to get and set Mute Nodes, Solo Nodes, Deactivated Nodes, Locked Nodes, Pinned Nodes, and Binding Tags in Blueprints/python.
The view and working ranges are no longer saved with the asset. Every time you open a level sequence, it will be zoomed to the playback range.
Duplicate keys are now removed on mouse release
Update tooltip to "The interpolation type for the initial keyframe" to clarify that this is only for the first keyframe on the track/section
UE_API all blueprint exposed functions for Sequencer Scripting
Bug Fix:
Refactored track instance bindings and added the concept of "volatile" paths to fix possible memory stomps when animating array items or instanced structs.
Fixed an issue where when changing shots we could sometimes get one frame of t-pose on a character when using bForceCustomMode. The issue was that we were checking for custom mode too late in the frame relative to when we were potentially doing the binding to a custom anim instance.
Fixed the color not reverting when pressing cancel on the color picker.
Added an adjustment for an issue for capturing thumbnails for sequences. Renders at a square aspect ratio and cleans up some advanced rendering features to create the cleanest image possible like materials.
When opening a sequence, the playback mode is now set to loop selection range if a selection range is set.
Fixed the BakeToControlRig function. Now fetches the templateID for the sequence that we're in so that if the sequence we are working on is a nested, instance, or template sequence we can resolve objects within the function.
Added support for indirect gizmo manipulation of sub track offsets.
Added support for animating property bag properties.
Fixed a possible GC leak with UMG animations. It happened when using an event track, and the widget is removed from its parent while the animation is playing, and then the inactive widgets pool is discarded and GC'ed.
Sequencer Navigator: The marks column now properly updates when marks are changed/added/removed.
Exporting a binding that doesn't have a valid spawnable template no longer crashes
Fixed a GC error in restore state of skeletal mesh animation track.
Properly implemented end-at-time feature.
Now stores camera shake previewers as shared pointers because FGCObject classes are not relocatable.
Fixed Material Parameter Collection track display name so that it's not set explicitly on creation. Instead, the display name is just the name of the MPC if the user hasn't changed it. This allows the user to change the MPC and the name will automatically change.
Proxy bindings no longer allow you to mistakenly pick the same actor it is a proxy for.
Key selection is no longer emptied when right clicking on the timeline.
UMovieSceneSequence: Fixed nullptr crash.
Fixed pre-roll/post-roll sometimes still evaluating sections that aren't set to evaluate there.
No longer falls back to the double blender system when a property doesn't have blending information. Instead, it falls back to the fast path where we don't blend anything.
Fixed broken support for ping-pong playback when we only cross the loop boundary once.
Fixed the pre-animated state being incorrectly saved as "persistent" for root tracks.
Deleting a muted track row now properly no longer causes other rows to lose their mute state.
When a fixed timescale is set negative, ranges 2 levels down no longer collapse causing subscenes of subscenes not to play correctly.
This only fixes the case of fixed timescale. Similar issues still occur using the playrate/timescale curve.
Copying a folder now properly copies root tracks as well.
.MovieSceneSequenceExtensions::FindBindingByName now returns a more reliable binding because it gathers the names from FMovieScenePossessable and FMovieSceneSpawnable which are kept in sync with the actor labels.
Fixed a regression with a deprecated code path for fetching what animation is playing for UMG Sequences.
Fixed pause-at-frame logic, which was sometimes incorrectly pausing on the previous frame.
Select All Keys Forward and Backward now properly select all the requested keys.
Selecting a layer bar no longer mistakenly deselects component bindings.
Collapse Nodes and Descendants now properly collapse after being expanded.
Copying a folder now properly copies all bindings and their child component bindings.
Payload objects for event keys are no longer lost.
Disallow picking a proxy binding that's already bound to the current one.
Remove the "Blocking Evaluation" checkbox from the advanced menu, since we can already set it from the playback options.
Fixed ongoing focus issues in the key details. Sequencer are now committed when focus is lost and keys are not accidentally created with incorrect values.
Fixed the time warp curve still evaluating even while muted.
Fixed a bug where the keyable indicator would not update for the selected object in the details panel after opening a sequence. It required adding to the sequence or selecting new objects.
Fixed pre-roll/post-roll sometimes still evaluating sections that aren't set to evaluate there.
Removed calling Modify from SetPreRollFrames / SetPostRollFrames. The caller should be responsible for calling Modfiy().
If you copy an event track from one sequence to another, the events in the pasted event track will point back to the blueprint director in the copied sequence. This is not allowed, so those events are now cleared.
Fixed creating an object property track as a class property in python not properly setting the bClassProperty value which allows a class chooser to pop up instead of an object chooser.
Fixed keys not selectable on multiple rows.
Restored a section model expansion state to be closed if it was before, since RestoreLayout resets it to expanded.
We now tear down the Take Recorder's Sequencer instance before we delete and GC the sequence.
Re-added dropped support for Blocking Evaluation in UMG animations.
Fixed a crash when reinitializing a Sequencer editor on a new sequence while the previous one had legacy tracks
When importing cameras, now applies a uniform scale modifier to distance based parameters (Manual Focus Distance).
No longer blends enum values, and make the byte track use the enum system when it animates an enum.
Ensured that evaluation context buffers are flipped if an eval task is active prior to forced update.
Added a potential fix for a memory corruption of UMG animation states.
The topmost unmuted Cinematic Shot is now correctly evaluated.
Previously, if a muted Cinematic Shot was topmost, it wouldn't be skipped over.
Fixed some properties that should appear to be animatable (i.e. FieldOfView and AspectRatio for Cine Camera Components).
Fixed an issue that when converting to a spawnable, sometimes the original possessable meshes were still visible.
Fixed undo of camera cut section now restoring the camera binding properly.
Fixed regression of pre/post-roll behavior in the skeletal animation track.
Creating the initial key for material tracks now respects the default interpolation type setting.
Snap play time to pressed/dragged key only if snapping is enabled.
Fixed a reference-leak in the Track Instance system.
Setting the time of a key through the Properties menu now works properly.
Keying specific channels of a transform through the Details Panel now properly sets the key with those current values (and not 0).
Fixed calls to bool property custom accessors, which were using the wrong function signature.
Better handling looping for camera cut tracks:
Added a new "HasLooped" flag on the evaluation context.
Assumes by default that looping sequences are "seamless" and do not create a straight/hard camera cut on loops.
Added an advanced evaluation flag to opt out of this assumption.
Fixed undo not working when editing with control rigs.
Now fully supports all camera and post-process properties when previewing blending camera cuts.
Disabled ensure before cleaning up camera cut track viewport modifiers.
Fixed regression in how skeletal animation sections behave when resized from the left edge.
Take the first loop start offset into account when determining if a skeletal animation section needs to loop.
Deprecated:
Deprecated FMovieSceneBinding::Name since it's redundant and not kept in sync with actor labels.
Can now return multiple objects with FMovieSceneBindingResolveResult. FMovieSceneBindingResolveResult's Object is deprecated in favor of an array of Objects.
Migrated text tracks to Movie Scene Tracks plugin (enabled by default). Deprecated MovieSceneTextTrack plugin.
Skeletal Editing
New:
Skin weight profiles can now be switched directly in the skeletal editor viewport, if there are skin weight profiles defined for the skeletal mesh asset.
Edit Weights Tool: Fixed removing weights from vertices weighted fully to a single bone turning them into unweighted vertices.
Bug Fix:
Animation: Editing the text field in the curve editor of an anim montage no longer crashes.
Editor
Datasmith
Bug Fix:
Fixed 3dsmax plugin support for 2026.
Framework
New:
Fixed GetOwnerPackages() for instanced structs inside non-complex properties.
FStructurePropertyNode::GetOwnerPackages() fails at walking up the property nodes for a specific case, and may trigger an ensure. When stumbling upon an instanced struct, GetOwnerPackages() walks up by getting the direct parent.
However, this parent is not necessarily a complex parent (can be a non-object/structure property type). To make sure the walk happens correctly, the case should be handled the same way GetInstancesNum() does (get complex parent of parent).
Added a few virtuals to cosmetic SGraphNode getters.
Useful while adding advanced styling in custom node editors. In some cases it might be possible to avoid overriding engine methods by implementing our own variants, with different names, but not in every case.
Also reusing original methods makes the programmer's intent much clearer - what part of the base class was actually overridden.
Implements experimental Capture Stealing in ITF Input Router.
Updated MathStructCustomization metadata extraction to include InstanceMetadata
This change updates metadata extraction for header row to include InstanceMetadata. It is useful when assigning metadata to Vector/IntVector types via other customizations.
UToolMenu Items will now override any parent Tool Menu Items of the same name.
Positioned Tool Menu Items that fail to be positioned will now be inserted at the end of the section.
Improved reliability of legacy SExtensionPanel support in the new viewport toolbar. Extensions are only enabled when there is enough information to support their existence.
ToolMenus: Adds options for whether a Tool Menu Entry with an insert position that can't find its target should insert anyways and/or log.
Defaults to both inserting & logging.
Disables logging if the ToggleViewportToolbar and ToggleHideViewportUI commands can't find the ToggleFullscreen command in the Level Editor Window menu.
Bug Fix:
Fixed an edge case Blueprint Editor crash on exit.
Fixed an issue where top-level toggle buttons in Viewport Toolbars looked like raised buttons.
Users can now change the derived type on default value instantiations used to initialize a base type reference member in saved instance data when using override serialization.
Fixed the asset reference filtering not working when dropping assets on Material, Niagara Script and Texture Graphs, or on nodes and pins of any asset graph type.
Fixed inconsistencies between drag and drop visual feedback and drop behavior in Animation State Machine, Sound Cue, and Texture Graphs.
Deprecated:
The old Level Viewport Toolbar Panel Extensions are now deprecated. They will be removed in a later version.
Interchange
New:
Reduced memory usage when importing static meshes.
Added a SubdivisionAPI custom schema for specifying per-prim subdivision level.
Added support for array node attributes.
Added support for subdividing static meshes and geometry caches when importing via USD Interchange.
Added more C++ UsdWrapper types and tweaked the Unreal.natvis file to improve how they're displayed on the debugger.
Upgraded MaterialX version to v1.39.3.
Textures imported with non-power-of-2 dimensions or non-multiple-of-4 dimensions were previously automatically set to NeverStream and Uncompressed. This can now be toggled with a config setting :TextureImportSettings::bDoAutomaticTextureSettingsForNonPow2Textures .
Also when textures initially imported as nonpow2 are re-imported as pow2, they now get their settings automatically fixed to the defaults for pow2 textures.
Improved the performance of importing skeletal meshes with multiple morph targets via USD Interchange.
When importing USD stages through USD Interchange, SkeletalMeshComponent prims will be spawned with AnimSequences assigned to them, if any were imported.
Added a "Use Single Bone" option to import a static mesh as a skeletal mesh with top node as the only bone.
If "Force All Mesh as Type" is set to "Skeletal Mesh" and "Use Single Bone" is checked, the imported skeletal mesh will have a unique bone at its origin called "Root".
Added a new option to the USD Export Options dialog when exporting levels to USD called "Export to Nested Sub Folders", which restores the previous behavior of exporting asset layers to a folder structure that mirrors the content folder structure
Interchange: Added support for importing OBJ into level.
Reduced memory usage when importing skeletal meshes.
Upgraded OpenUSD version to v25.08.
Interchange USD can now import groom assets and groom caches.
Added support for dome lights via SkyLightComponents when importing via USD Interchange.
Removed FNavigationOctree::AddNode Warnings during Level Import.
Implemented a Nanite triangle threshold value on the Interchange generic asset pipeline, in order to enable Nanite only for meshes past a triangle count size.
The USD Interchange translator has a new setting for collecting prim metadata as translated node user attributes. It can also specify a regex for filtering of particular metadata fields.
Refactored the LevelSequence handling for USD imports in order to properly support subsections due to references and payload arcs.
Importing via USD Interchange will now reuse generated assets when importing instanced prims.
Added support for OpenUSD on Windows ARM64.
Refactored skeleton handling in Interchange USD to not consider the skeleton prim itself as a root joint, which prevents transforms applied directly to the skeleton from being ignored in some cases.
Interchange USD imports that preserve the pseudoroot node will now produce a top-level actor named after the root layer's display name, as opposed to being always named "/"
Now uses the default static mesh collision profile for static meshes generated via the USD Stage Actor imports.
Bug Fix:
Fixed Reimport not showing skeletal mesh conflicts.
Fixed missing AnimSequence assets when importing animation tracks via Interchange that have a total length below MINIMUM_ANIMATION_LENGTH (of 1/30 seconds)
USD: Editing keys in Sequencer now properly update back to the USD Stage.
Fixed node name collision suffixes appending to previous suffixes, producing names like Cube12345
Fixed actors with identity transform being imported via Interchange with the inverse transform of their parents in some cases.
Fixed imported LevelSequences overwriting others with the same name when importing some very complex USD scenes.
Fixed cameras imported from OpenUSD with fStop of zero so that depth of field effects are correctly disabled.
Fixed incorrect skeletons being imported via Interchange FBX in some edge cases when TransformLinks seem to represent local transforms.
Fixed static mesh collider transforms being incorrect in some cases when importing into level with Interchange.
Fixed some issues with baked skinned mesh transforms when importing skeletal meshes with morph targets via USD Interchange.
Fixed how AnimSequences seemed to have no animation data after using Actions -> Import on the USD Stage Editor.
Fixed issues with using Material Search Location when importing scenes with Material Instances via USD Interchange.
Fixed automated reimports still showing the options dialog when reimporting via Interchange or USD.
Fixed metadata not making it onto actor AssetUserData when importing scenes via Interchange in some scenarios.
Now discards empty LevelSequences when importing from USD.
Fixed SparseVolumeTexture assets not being generated by USD Interchange when importing scenes with volumes if the exact same volume node shows up on the stage more than once.
Fixed a crash when trying to parse USD LodSubtreeAPI schema applied to skinned meshes.
Fixed import of UsdPreviewSurface into Material Instances for USD materials that have output connections to other shader graph or material prims.
Fixed performance bottleneck when importing many lights via USD Interchange.
Fixed some name-prefix-based collision meshes not being correctly used when importing via Interchange in some cases involving name collision.
Can now generate the desired simple collision meshes even if the shape disagrees with the provided mesh data.
Fixed morph target normals and position offsets not being skinned with geomBindTransform when importing skinned meshes via USD.
Fixed how Interchange USD was not using timeCodesPerSecond values when baking skeletal animation tracks.
Fixed incorrect vertex ordering of subdivision surface meshes imported from OpenUSD when their orientation is "leftHanded" and subdivision is enabled.
Fixed a crash when parsing some USD SkelRoots configurations with multiple Mesh prims that contain normals.
Fixed how USD asset imports were persistently disabling the "Import Into Level" option to import actors.
Fixed OpenVDB being imported via USD stages without compensation for the stage's upAxis and metersPerUnit values.
Fixed level exports to USD always using absolute file paths for layer references and payloads.
Fixed Euler flipping issues when importing some USD stages with complex rotation animation.
Fixed invalid skeletons being produced when importing some USD stages with prim names that are not globally unique.
Fixed various issues while importing an asset containing elements named "None"
Fixed support for UDIM textures when opening or importing USD Stages via the USD Stage Actor.
Silence a couple warnings when trying to fetch transforms from Interchange scene nodes with none authored.
Fixed missing actors and assets when importing scenes via USD Interchange that contain sibling prims whose names differ only by character casing.
Fixed a crash when resaving assets imported with Interchange after deserializing them with Interchange disabled.
Fixed HeterogeneousVolumeComponents not refreshing after their SparseVolumeTextures imported via USD Interchange were reimported.
Fixed incorrect skeletal mesh influences when importing skeletons with multiple root bones via Interchange USD.
Fixed various import issues related to using names that resolve to NAME_None.
Fixed risk of missing content when importing FBX containing assets or bones requiring name sanitization.
Fix SparseVolumeTexture assets imported via Interchange USD ending up named as "Null" if the VDB filename itself was purely numeric.
Fixed the handling of some skeletal mesh edge cases via Interchange USD, like nested LOD meshes.
Fix transforms placed directly on LOD meshes being ignored when importing into level with Interchange USD.
Scripting
New:
Exposed FullyLoadPackages/FullyLoadAssets functions to editor scripting via EditorLoadingAndSavingUtils
These fully load the given objects, so that UE no longer has a write lock on their on-disk files (eg, when needing to overwrite the file via an external application).
This is also available in the UI via Asset Actions -> Load, if you hold shift while clicking on Load.
Added support for texture-based tool icons in Scriptable tools.
Added support for setting a custom UUserWidget above the tool details panel of a Scriptable Tool.
Preview Platform Blueprint Functions:
TogglePreviewPlatform: Toggle the Preview Platform On/Off
SetPreviewPlatform: Sets the Preview Platform.
The Preview Platform is set from a list of valid Preview Platforms, the same present in the Preview Platform Menu.
Added a Disable Preview Platform Blueprint Node.
Added a GetDrawableGeometryActor() BP function to fetch the actor that owns any line, point and triangle sets added by a Scriptable tool.
Exposed FTSTicker to Python:
This exposes the superior and safer FTSTicker-based ticking method to Python, and existing Python scripts using the Slate-based ticking methods should consider migrating to use this new method (unless forwarding ticks to an embedded UI framework, which was the intent of the Slate-based ticking methods).
The new ticker callables can be registered via `unreal.register_ticker_callback(...)`, which takes a callable (taking a float delta time, and returning a bool where True means continue to tick), along with the delay (in seconds; default 0) that we should apply between each ticker callback. `unreal.unregister_ticker_callback(...)` can be used to remove a previously registered ticker callback.
Examples:
def run_once(dt): print("run_once") return False # stop ticking
unreal.register_ticker_callback(run_once, 1.0) # call run_once once after 1 second
def run_many(dt): print("run_many") return True # continue ticking
run_many_handle = unreal.register_ticker_callback(run_many, 1.0) # call run_many repeatedly after 1 second delays
unreal.unregister_ticker_callback(run_many_handle) # stop calling run_many
Exposed the ability to include or exclude editor-only references from script asset registry queries
Bug Fix:
Added an encoding fix for PipInstall to force a utf-8 encoding.
Fixed a crash in ExecutePythonScript when Python was disabled at runtime.
Fixed a crash when re-registering Scriptable tools during mode shutdown.
Fixed reachable garbage objects warnings when compiling ScriptableTools containing ScriptablePoint/Line/Triangle sets.
Fixed an issue with accept/cancel/complete actions not firing in ScriptableTools mode.
Fixed 'no world was found for object' warnings when invoking WorldContextObject functions in a Scriptable tool.
Fixed a crash when calling DataTable RemoveRow from editor scripting.
Fixed non-deterministic tool order in Scriptable Tools category palettes.
Added a fix to ensure AssetTools do not call slate functions in headless.
Fixed Python Callback attached to Dynamic Delegate
Editor can now run even if Python is not able to load properly.
UI
New:
Significantly improved the Content Browser column sort performance for large search results.
Updated the Content Browser navigation bar so clicking in the empty space edits the package path if available instead of the virtual path.
Slate drawing optimization: fixed float comparison of the alpha that could send an invisible element to the renderer, for negative or small alpha values.
In the graph editors, right clicking to summon the node context menu now includes the hovered wires connected pins, if any. This allows, for example, insertion of a 'NOT boolean' node on a bool wire in the blueprint editor
Made the "Show Selected" action for actors always visible in the context menu.
SlateIM: Add support for Tab widgets
CommonUI:
Updated CommonWidgetCarousel to be more consistent in its widget caching.
Added an option to determine whether or not to cache widgets at all
Old behavior was to cache widgets in the carousel's RebuildWidget, but widgets added at runtime via AddChild would never be cached.
Currently caching is enabled by default to match the behavior when children were added at design-time, though this could result in increased memory usage in use cases where all widgets were added dynamically.
Added a clockwise ordering option for DynamicEntryBox.
Updated the source control Submit dialog to display full file paths for non-asset files in the Path column.
Waveform editor: Add icons for fade options
Waveform:
Now calculates LUFS and Sample Peak values on audio import, on Waveform Editor open, and on Waveform Transformation changes.
Now displays LUFS and Sample Peak as meta data when hovering over a soundwave in the content browser.
The Path column in the Asset View will now display the package or object path of the row item if available instead of the virtual path.
Redesigned Platforms menu moved from the toolbar to the main menu.
Can now specify a screenshot view rect via FScreenshotRequest::RequestScreenshot:The view rect will be ignored if it is invalid (empty or not within the extent of the render target), or if bShowUI=true, since that takes the slate widget screenshot pathDefault behavior remains the same (to screenshot the whole window)
Enabled 10-bit swap chains on desktop platforms even when the feature level is ES31.
Slate: Modified GetCachedWidget:
GetCachedWidget now returns the Widget returned by RebuildWidget.
GetWrappedWidget returns the Widget return by RebuildDesignWidget if available. Otherwise, returns the widget returned by UIComponents via RebuildWidgetWithContent.
Added InitializeInEditor function to UserWidgetExtension and WidgetBlueprintGeneratedClassExtension to be able to support proper initialization in Editor for Extensions.
Added utility functions to query private states in the widget.
UMG Bindings: Added a new Conversion Function SetVectorParameter that takes a FColor and converts to FLinearColor.
Added support for package path suggestions to the Content Browser navigation bar.
Added support for navigating to C++ class package and object paths entered into the Content Browser navigation bar.
Optimized the font shaping process when using complex shaping (typically for Arabic).
Added a Python script for generating an html color palette for the FColorList class.
Updated mouse capture and high precision mode handling on Windows to save up to .5ms on redundant API calls
A UFont can now be a wrapper around FCoreStyle::GetDefaultFont(), for use with editor UI.
Added a CVar `Slate.UseSharedBreakIterator` to support shared ICU Break Iterators to reduce CPU usage. False by default.
Added new Header and ToolHeader sections to the ToolkitBuilder.
Added support for MVVM Bindings in asset diff tool.
Exposed world context pin on MVVMViewModelBase. This allows blueprints on a Viewmodel to access world subsystems (assuming they have an object they can use to resolve the world context).
Add SetLazyContentWithCallback to CommonLazyWidget to improve async usage in blueprints.
Add blueprint function, SetViewModelByClass, for setting VM by class on a widget directly to simplify usage.
Exposed a setter for CategoryToolbarVisibility in FToolkitBuilder.
Bug Fix:
Fixed a regression where Toolbar buttons with a combined options menu did not display that options menu when the toolbar button was clipped.
Fixed an issue where Spline-related UI elements were displaying XYZ axis labels and tooltips even when the editor was running in LUF coordinate mode.
Details: Updated the context menu and details panel for Splines so that axis labels, tooltips, and action names now correctly reflect LUF when active.
This includes context menu areas like SnapAllToSelected, SnapToLastSelected, and SetLockedAxis (temporarily disabled).
This also includes Details panel areas for Spline settings like Selected Spline Nodes Location, Rotation, Scale, Arrive Tangent, Leave Tangent, and Up Vector Logic was added to ensure these UI elements are now dynamically aligned with the current coordinate system.
XYZ (FLU) remains the fallback when LUF is not enabled.
UMG Sequencer: Fixed 2 issues.
When adding an event track as the first item in a widget animation, the duration of the animation would reset to 0, and notably the playback range start would be set to exclusive (range as (0,0)). This would persist after the length changed, for example to (0,500), meaning that any items placed on the 0 frame, such as events, would never evaluate.
When not encountering the above issue, items placed on the 0 frame would evaluate twice. This was due to a refactor to the way widget animation would playback.
Fixed the Asset View Type column sorting by the full class path rather than the display name that is displayed.
UMG:
Fixed named slot content not saving for named slot instances of widget blueprints that extend widget blueprints.
Fixed CDO de-sync with root widget property changes.
Added a fix to avoid crashes in cases of re-entrancy.
Various fixes for widget animations:
Fixed a crash caused by the runner being invalid for an unknown reason.
Fixed iteration of active animations that can grow during that iteration.
Fixed iteration of animated widgets that can grow during that iteration.
Fixed first and last frame evaluation of animations - Don't tick the widget on the first frame, wait until the next frame. The flag for that was lost during the animation refactor in 5.6 - Fix the evaluation time for when stopping which should indeed be the first frame of the playrange, not frame 0. This was incorrectly ported during the animation refactor.
Fixed how we consume the current animation time on play, to prevent events at frame 0 from firing twice.
Double clicking on a color key in the timeline now correctly opens the color picker.
Fixed an inconsistency in the Viewport right-click context menu, where the Transform options were always ordered according to FLU rather than the expected LUF, even with LUF coordinate system in use. Behavior is now consistent and context-aware across coordinate systems.
Can now pick struct type when class type picking is enabled, eg, from within the Data Table editor
UMG Designer:
Fix to FWidgetBlueprintEditor::SelectObject to support UObject selection. Fixes a nullptr access when a property was changed in the detail panel on an object that is not a UWidget.
Fixed a crash in Drag and Drop operation. Added more checks around calls to GetCachedWidget that can return a null object during drag/drop and move operation.
Fixed a crash in UMG Designer Replace widget context menu operation in the Hierarchy panel. This happened when using the replace function with a User Created widget selected in the Palette panel.
Optimized the widget editor's palette to reduce refresh cost in large projects.
Fixed virtual texture thumbnails sometimes showing the wrong texture.
Fixed an issue where screen-space widget components wouldn't render for players other than player 1 if splitscreen is disabled. There is now an option (ShowAllPlayerWidgetsWhenSplitscreenDisabled) to overlay the player layers, instead of culling out all player layers except for player 1.
Fixed a regression that caused the editor to crash when attempting to place a cooked Actor-based Blueprint class via drag/drop.
Fixed a memory leak when trying to trigger the display of a FCanvasBatchedElementRenderItem without a primitive to draw.
Fixed an issue where SearchableComboBox couldn't be set back to the same value after resetting to default.
Fixed an issue where SCommonButton wouldn't release when it loses focus
Fixed a rare crash in SlateRHIRenderer due to both main thread and render thread possibly writing to the same arrays simultaneously.
Fixed a situation where the Asset Dialog hotkeys either didn't function, or operated on the wrong widget.
Slate: Fix SStackBox not respecting the Orientation slate arg.
Fixed various possible crashes and bugs when importing offline fonts.
Fixed Content Browser columns appearing as sorted after you click on their headers in the column view even when they are no longer the active primary or secondary sort columns.
MetaSounds WaveAsset: Removed create new asset actions for unsupported assets.
CommonUI:
Fixed not being able to click buttons with Virtual_Accept while binding hold actions to Virtual_Accept.
Ensure UCommonInputPlatformSettings load is done at the right time to avoid a synchronous load flushing async load request. Now PostLoad will be called as expected for all UPlatformSettings.
Fix persistent action bindings not always being registered as persistent actions.
Fixed custom dialogs non-deterministically aligning their buttons.
Fixed an issue where FQuat variables always displayed with the name "Rotation" in the details panel, regardless of DisplayName metadata or the variable's actual name. This fix ensures that the intended name is respected and shown properly in the UI.
Fixed a typo in BoxElem.h
Prevented Pin Value Inspector Tooltips from using global invalidation, as it can cause broken tooltips or crashes in some scenarios.
SlateIM:
Fixed a case where child rows would not get removed when no longer drawn.
Fixed Viewport roots preventing mouse input for the whole viewport.
Fixed an issue in the ListView Widget where OnEntriesGenerated would fire for each entry instead of firing once all entries are generated
Fixed a crash in SObjectWidget OnFinishedPointerInput missing CanRouteEvents that causes nullptr access.
Fixed Message Log not displaying when failing to save packages.
PropertyPermissionList: Fixed buttons not appearing for functions marked CallInEditor details panel unless added to AllowList explicitly.
Fixed an issue where users can't type polish letters s and a (with a tail) into the text input.
Fixed an issue with Slate Screen Reader at initialization of the plugin.
Add missing validation check with enabling or disabling SWindow.
UMG Viewport: Made sure we EndPlay on the preview world during teardown.
Deprecated:
Deprecated SCustomDialog VAlignButtonBox since it didn't affect the button layout, but could result in the button rendering outside the dialog if VAlign_Center was used.
UX
New:
StylusInput: Added MacOS support.
Change the default of bUseLinkedOrthographicViewports to `False`.
Simplify the camera speed settings to just expose the camera speed. Min/max values are still exposed in settings.
Slice graph connections by alt+middle-mouse dragging in the graph editor.
Fix a bug where viewports could control the movement of a locked actor in a different viewport.
Added support for direct manipulation of editor viewport orthographic near & far planes.
Added a new Editor Viewport Depth Bar that provides visual control over those planes.
FDateTimeStructCustomization now has a tooltip. Hovering over a DateTime property's text box in the editor provides a hint at the format.
Disabled use of a Template SoundWave, can be re-enabled in Editor Preferences->Audio Editor Per Project Settings.
Switched to camera-relative vertical panning by default. Add an option for world-based vertical panning.
Waveform Editor: Instated Waveform editor as the default SoundWave editor.
Splits viewport panning logic so that the middle mouse button and the left+right mouse button gestures are distinct. Middle mouse can be camera relative (and continues to be so by default) while left+right mouse button always move up and down.
Outliner: Added visibility function versions that work on the selected actor's hierarchy and set H to default to toggle selected hierarchy.
Asset Picker Size Scaling as Editor Preference: Added the Editor Setting "Scale Asset Picker Widget Size" to allow the size of asset pickers to be scaled up or down.
Added a new "Toggle Selected Actor Visibility" command & behavior. This command takes the default "H" binding from "Hide Selected Actors". The command:
Hides selected actors if any actors in the selection are visible.
Shows selected actors if all actors in the selection are hidden.
Does not affect selection.
Show template projects from all plugins:
Problem:
New Project dialog only listed template projects from enabled plugins Users couldn't see or start from templates included in installed but disabled plugins.
Empty/invalid background image paths in template categories showed broken visuals
Solution:
Updated search to include template projects from all discovered plugins Added warning icon + tooltip for templates from disabled plugins.
Selecting a disabled plugin template shows a warning/error box that the plugin is not enabled.
Warning is non-blocking (no modal), project creation proceeds after user confirmation.
Notes:
Keeps behavior lightweight.
Surfaces risk (no additional modal asking to confirm creation) but doesn't block flow.
Bug Fix:
Ensured that the "Hide Selected At Startup" action now correctly applies to all selected actors, regardless of their current visibility state. Previously, actors that were already hidden were skipped by this action. With this change, both visible and non-visible actors will be consistently marked to start hidden on load.
Foundation
Build
New:
AssetManager, AssetRegistry: Add Property AffectsCookRule to ManageReferences.
Extended the AddExternalImportValidation of missing UClass imports to validate imports of all native types.
Added support for the 'Activate' flag in PluginReferenceDescriptors. This fixes an issue where the 'Activate' flag would be deleted from plugin descriptors when running some UAT programs.
IncrementalCook is now enabled for DLC cooks, but for DLC cooks it is still experimental and is not yet robust.
UHT: Added support for engine version comparisons as preprocessor conditions.
Prevented Clang builds for Windows from launching multiple link jobs simultaneously to avoid memory exhaustion.
Bug Fix:
DLC Packaging: Fix missing .upluginmanifest when packaging without -DLCPakPluginFile.
With the plugin manifest present the output folder from a DLC package can be copied into a packaged game as-is and will load through the default plugin discovery and loading process.
SavePackage: Fix errors in IllegalReferences diagnostic; it now more accurately finds the object and property that caused the illegal reference.
Core
New:
Added UE::CFloatingPoint concept.
Added value hashes and sizes to DDC replays
RemoteObjects:
Transactional RPCs can be rescheduled per Actor. This means the transaction can abort and try other transactions while we wait for needed dependencies to service the RPC.
TimerManager now has some limited transactional support.
Exposed GetClass that may skip migrations when used with FRemoteObjectId.
Exposed GetRemoteId() on TWeakObjectPtr
Distinguished between Loaning out an Object and Reassigning a Borrowed Object. This helps clarify some situations, particularly where you're sending an object and maintaining ownership you can just check if you're Loaning it now, because ReassignBorrowed is now a separate case (which means another server has borrowed it, but you never owned it).
Allow third-party crash handling to use `FAdditionalCrashContextStack`.
Default WindowsPlatform.bClangStandaloneDebug to true. This slightly increases pdb size when compiling with clang, but improves debugging experience.
FStateGraph and FStateGraphNode no longer timeout if -NoTimeouts is provided on the command line.
Added [[nodiscard]] to mutex functions.
Added [[nodiscard]] to TLess, TGreater and TEqualTo.
Optimized TCppStructOps vtables to only include functions that will be called. This now prevents users from making UScriptStruct or TCppStructOps a friend in order to allow your class only constructible by the CoreUObject system.
Refactored FInstancedPropertyBag's CopyMatchingValuesByID function to allow the caller to provide a matching function. Added CopyMatchingValuesByName that matches properties by name instead of ID.
Added FRecursiveWordMutex to support very early and/or very late recursive mutex usage.
Removed LLM dependencies on FCriticalSection and FRWLock.
Eliminate static log records in the absence of source location and log tracing to reduce program size.
Made mutating EnumClassFlags functions usable in constexpr contexts.
Added UE_LIFETIMEBOUND to TValueOrError.
Exclude trace state when log trace is disabled and optionally compile out source location from logging to reduce program size.
Use Yield() instead of YieldThread() when spinning in mutexes to improve performance under heavy system load.
Optimized ParkingLot::Wait when there is no timeout.
Added UE::CContiguousRange and CPointer concepts.
Added CCharType concept and applied it in TStringView.
Added Max() functions to sets and maps - and TSparseArray which is needed for sets.
Replaced TSortedSet's O(N^2) Append with an O(N) (at best) or O(N log N) (at worst) and added tests.
Added some basic TSet tests, based on the existing TMap tests.
Specialized FPlatformManualResetEvent for each platform that we target.
Added FOutputDeviceFence to support lifetime management of dynamic log records
Updated debug visualizers for TDeque, supporting visualisation of elements when the container is set up to use a different allocator such as TInlineAllocator or TFixedAllocator.
Add explicit nullptr constructor/equality operators to TWeakInterfacePtr Mark functions in TWeakInterfacePtr [[nodiscard]]
Fixed overallocation for unused null terminators in TStringBuilder.
Added TFunctionWithContext to adapt a callable into a function pointer and context
Improve accuracy of GC time limit by setting object destroy granularity to 10 (instead of 100) and provide a way for it to be tweaked per project with gc.IncrementalBeginDestroyGranularity.
Optimized ParkingLot callback code generation
Updated UE::Core::Private::StringLength to use TCString::Strlen outside of a constant-evaluated context, to speed up compile times with MSVC.
Added UE_IF_CONSTEVAL and UE_IF_NOT_CONSTEVAL.
Updated Oodle to 2.9.14.
Used InitializeCriticalSectionAndSpinCount to avoid an extra function call during construction of FWindowsRecursiveMutex.
Added CConvertibleTo concept mirroring std::convertible_to.
Added a configurable intrusive unfair non-recursive mutex.
Added TInstancedStruct::NetSerialize function.
Removed contention on root flags when pinning weakobjectptrs.
Improved the logging backlog to minimize the number of missed log lines during the initialization.
Added TLogTemplate and control over log template allocation.
Added IsLocked and IsLockedShared to the mutex types.
Add Async.ParallelFor.DisableOversubscription which if enabled will only use existing threads which can be faster when cores are saturated.
Added support for nested $format in structured log formatting.
Added Intel OneAPI and Microsoft Clang 19 HWPGO integration.
Added an ExecFileOverride resource to BootstrapPackagedGame.
Optimized FLazyName to support constant initialization.
Deflate, gzip & lz4hc compressors now honor COMPRESS_BiasSpeed and COMPRESS_BiasSize
Added TExternalStringBuilder and support for TStringBuilder<0>
Improvements to GameFeaturesSubsystem and FPluginDescriptor:
Added a new hook to PluginDescriptor to allow customized loading of uplugin json data.
Updated GFS to ensure that, at least in the editor, we will try to use the PluginManager's copy of the plugin data rather than re-reading it and deserializing it from json ourselves. This is necessary to take advantage of the customized loading.
Enabled custom crash handling for GPU crashes.
Optimization for FSoftObjectPath::ResolveObjectInternal to avoid the round trip to/from string.
Add a console command, core.ResetEnsureState, to reset the ensure state so they fire again. This will cause all non-always ensures to trigger again if they've already been suppressed.
Reduced memory use by FOutputDeviceFile by 992 KiB in the default configuration.
Added better error messages when TLess, TGreater and TEqualTo when used with a type without the corresponding operator.
Now validate LinkerSave unmapped objects against the package harvester excluded object list. This removes the limitation of asserting when FindObject is called while GIsSavingPackage is set.
FPaths:CreateStandardFilename: changed behavior to normalize paths that cannot be standardized: .. is collapsed when possible.
Added UE::CNotCVRefTo concept.
Removed dependencies on ParkingLot from Windows stack walking
Made the MSVC implementations of FPlatformMath::CountLeadingZeros and FPlatformMath::CountTrailingZeros constexpr.
Added format string validation to LowLevelFatalError.
Added UE::CStringViewable and UE::CCompatibleStringViewable concepts.
ThinLTO is now enabled by default for Clang based toolchains.
Added an experimental plugin, Global Configuration Data, that can be used as a single point of access to data that may be provided from different systems.
Can be used to have console and config data added to blueprints without additional code.
Additional data routers can be registers to expand on what data sources are available to the system.
Added UE::CArithmetic concept.
Added UE::CCompatibleCharType concept and some usage in TStringView.
Added UEOps.h to aid in the correct generation of all binary comparison operators based on a couple of simple member function definitions.
Replaced the UTF8CHAR enum with C++20's char8_t.
Added checks for non-trivially-relocatable types being used in containers, particularly FGCObject-derived types.
Added UE_REWRITE, a replacement for FORCEINLINE intended to be used on macro-like functions (rather than for optimization) by 'rewriting' a function call as a different expression.
Enabled override max printed reference chains via `gc.MaxReferenceChainsToPrint` Cvar.
FVector2D deprecated comparison operators (from 5.2 onwards) removed.
Remove deprecated FLinearColor methods, deprecate unused DXT block structs.
Enabled TSharedPtr and TUniquePtr to be usable as keys in sorted containers, and TUniquePtr to be usable as keys in hashed containers.
Added std::initializer_list support to TSparseArray.
Fixed UPS cooking indeterminism for TBox[2] structs on stack Make ForceInit constructor zero out padding.
Fixed managed storage handle attempting to resolve an unmanaged file more than once after the manager becomes active.
Added UE::CDerivedFrom concept.
Added debug visualizers for UE::Math::TVector2<> and FDeprecateSlateVector2D.
Extended `gc.PerformGCWhileAsyncLoading` to provide the option to garbage collect while async loading, only when low memory is detected (based on gc.LowMemory.MemoryThresholdMB).
Package flags are now thread-safe.
Add TargetRules.bIdenticalCodeFolding setting (--icf=all).
Added intrusive unset optional support to TNotNull.
Added a benchmark for mutex types.
Added CSameAs and CDecaysTo concepts.
Added UE::CIntegral concept.
Added tests for Algo::StableRemoveIf.
Added configs managing how GenericPlatformMallocCrash handles allocation requests on non-crashing threads, allowing them to permanently suspend on allocs/frees, suspend on allocs and skip frees, or process as normal.
Removed dependency on FCriticalSection and ParkingLot in memory allocators.
Retry in the shared mutex TryLockShared while there is not an exclusive lock.
Added support for joining non-contiguous ranges in TStringBuilder.
Added support for optional sub-object references in localized structured log formatting.
Reduced codegen impact of ensure() macro.
Added an overload of CreateLogTemplate that takes the format as FText.
Added support for $locformat in structured log formatting.
Added NotNullGet for retrieving the inner value from a TNotNull without an explicit cast.
Experimental Visual Studio 2026 support.
Added a new experimental API: SpringMath:
This includes some useful functions for critically based spring damping
Added experimental blueprint library for spring math to expose functions to BP
Added SpringMath::ExponentialSmoothingApproxQuat to mirror the existing function FMath::ExponentialSmoothingApprox.
Added support for creating Property Bag Placeholder types for entity prefabs.
This is done via a new table added to package files: ImportTypeHierarchy table.
Each entry of that table contains hierarchical information for every FObjectImport entry that is a type (e.g., UClass).
This is the second part of a 2 part change. The first change introduced the package file header change along with the object version bump.
This change adds the remaining logic to save/load the new table and the change to use it when creating placeholders.
Added support for AVX10.
Added write helpers to RapidJsonUtilsAdded UE::Json::WriteCompact and UE::Json::WritePretty, to write a UE::Json::FDocument to a FString in either compact or pretty form.
Added UE::Json::MakeStringRef and UE::Json::MakeStringValue to help convert a FStringView to a UE::Json::FStringRef or UE::Json::FValue when building a JSON DOM.
Added some additional aliases to UE::Json that are needed when building a JSON DOM.
Switched UE::Json aliases to use the UE FMemory allocator, rather than rapidjson::CrtAllocator.
Added --prioritize-dependency-scanning SN-DBS build option.
Added `FNonshrinkingAllocator`, which changes the shrinking policy to No by default.
Added hidden MetaData works for base structs in Instanced Structs.
Cooker:
CookPackageSplitter: Changed the return value of GetGenerateList to a struct (and changed the name to ReportGenerationManifest) so that generators can request that the package containing the generator be not saved.
Deprecated the ability to run the cook inside the editor process when launched from editor. The cook instead should always be executed in a separate invocation of the CookCommandlet. This has been the default since 5.3, and we are now deprecating the ability to change that default and will remove all support for it in 5.9.
Added the following commandline arguments:
-cookshowremaining
-cookshowpackagenames
-cookshowinstigators
These provide a clearer behavior than -dpcvars=cook.displaymode=1|2|4.
Each flag can be specified with a value: -cookshowremaining=1|0, or with no value, defaulting to 1: -cookshowremaining.
These flags override whatever value has been assigned via config or -dpcvars commandline.
Introduced a mechanism for render asset updates to be abandoned by owning `UStreamableRenderAssets` so `UStreamableRenderAssets` can be garbage collected independently (See r.Streaming.EnableAssetUpdateAbandons). Abandoned render assets are ticked during GC or every streaming update if r.Streaming.TickAbandonedRenderAssetUpdatesOnStreamingUpdate is true (defaults to true).
Bug Fix:
Changed FMonotonicTimeSpan::IsInfinity() to stop matching negative infinity.
Fixed FMath::FindDeltaAngleDegrees and FMath::FindDeltaAngleRadians for input deltas outside [-540, 540] degrees.
COMPILE_WARNING reports as error when WarningsAsErrors is being used.
Fixed a potential infinite loop in the serialization of packed ints when loading malformed values.
Fix potential deadlock in the scheduler if a foreground task is scheduling a background one.
Fix potential deadlock in object annotations because of 2 different locks used in different order.
Made -VerifyGC and -NoVerifyGc take all verification cvars into account.
Fixed invalid access to memory location error in UnrealBuildTool.
Made sure that pinned UObject are preventing GC of clusters they are part of.
Fixed composite EPackageFlags not being shown in the debugger, caused by non-power-of-two enumerators.
Fixed _GetUObjectPacked intrinsic for debug visualizers. This addresses an issue with visualizers for weak object ptrs not working in builds where UE_ENABLE_FUOBJECT_ITEM_PACKING == 1.
Made TBox's InverseTransformBy and TransformProjectBy both check for box validity before transforming (matching TransformBy).
Fixed issues trying to load redirected native classes using the StreamableManager (and AssetManager).
Fixed a bug in GC timing where if it destroyed exactly 100 objects in a frame it could cause a large stall.
Fixed many log categories having a default verbosity higher than their compile-time verbosity.
Fixing a crash in CppStructOps caused by unloading a dll at an inopportune time resulting in a dangling pointer to a vtable.
Fixed TMemoryWriter IndexSize to be a bit count.
LaunchEngineLoop: Fixed a copy paste mistake in the error message, it now correctly identifies that it fails to load the Game Engine class instead of the Editor Engine class when instantiating GEngine.
InstancedStruct: Fixed the operator= when copying from a TConstStructView.
The loader will now flush any remaining async loads before PreExit to avoid async loading to perform operations past the exit point.
Fixed UE_STATIC_ASSERT_COMPLETE_TYPE for zero-sized arrays.
Enabled seeking to the end of a response body without returning CURL_SEEKFUNC_FAIL in the Curl implementation in DevHttp module.
Fixed UI layout for a particular view of the crash report dialog where the screenshot preview can cover button controls.
Fixed clang miss-leading indentation warnings.
Checked zlib init and shutdown for errors.
Cleaned up usages that expect nullptr_t to be in the global namespace.
Fixed StaticDuplicateObject when Source Object class and Destination class are different.
Fixed crash when loading content from corrupted pak or optional segment files.
Disabled nuget audit for the dotnet Development configuration to prevent unactionable dotnet build errors.
Force synchronous writes on type library input files.
Fixed pipe and task timeout calculations that generated bad code.
Deferred invoking the class initializer on duplicated objects until after subobject instancing has occurred.
Disable 'C4702: unreachable code' when use bUseInlining is disabled.
Fixed potential race condition in FConfigCacheIni::ForPlatform adding plugins without holding the lock.
Fixed text import of delegate properties with full object paths, and made FDelegateProperty consistent with FPropertyMulticastDelegate on text export.
Added static_asserts to TValueOrError to ensure that it's not instantiated with references.
Fixed a FARFilter with only WithPackageFlags or WithoutPackageFlags set failing to return any assets from IAssetRegistry::GetAssets(...).
Avoid TInstancedStruct::GetPtr/GetMutablePtr and TStructView/TConstStructView::GetPtr crashing when the underlying struct data is incompatible with BaseStructT
This will now ensure instead, though will still perform the bad cast in a shipping build, so any ensures need to be fixed!
Fixed TStringView::CopyString for copying an empty range.
Fix a missing test of MaybeWaitingFlag in FManualResetEvent before parking the thread.
Fixed Algo::RemoveIf calling the predicate too many times in some cases, and added some tests.
Rehashed map and set properties after instancing key subobjects in their overrides of FProperty::InstanceSubobjects.
Disabled AutoSDK for LowLevelTests targets.
Fix thread scheduler to properly apply the cvars TaskGraph.UseDynamicPrioritization, TaskGraph.UseDynamicThreadCreation, and TaskGraph.OversubscriptionRatio which can be used to modify thread performance.
Adding -nocrashreports support for windows. When provided, we will log crashes/ensures/etc but will not perform more complex reporting that could risk hanging on a file pipe.
Reimplemented TVectorRegisterType with partial specializations rather than std::conditional_t to work around alignment issue using Clang on Windows.
Disabled custom property lists during native struct serialization.
Fixed a race waking threads in FSharedMutex and FSharedRecursiveMutex.
Added workaround for getting an array reference element from an rvalue tuple under MSVC.
Deprecated:
Deprecated Alignment in TStaticArray and fixed UB behavior in it's GetData. Made TArrayView and Invoke constexpr.
Deprecated TSortedMap::GetMaxIndex, fixed TSortedSet::GetMaxIndex and correctly commented TSet::GetMaxIndex and TMap::GetMaxIndex.
Deprecated public and protected ways of initializing TStringBuilderBase from a buffer.
Deprecated member TFunction::CheckCallable which was never intended to be public.
Deprecated TIsConst.
Deprecated PLATFORM_COMPILER_SUPPORTS_CONSTEXPR_BUILTIN_FILE_AND_LINE.
Replaced bExactClass with EFindObjectFlags in the FindObject family of functions.
Deprecated the original log template API.
Delete FCbFieldIterator::MakeOwned() to avoid breaking the iterator.
Dev Tools
New:
Added compile warning argument ordering.
Wildcard support in project sections of UGS ini files.
Improved the summary outputs of UnrealPak. The units of memory now scale with the number of bytes making it easier to read for both smaller and larger containers.
UBT DefaultBuildSettings:
Build Settings V6 now applied to wundef.
Default Build Settings Updates for Targets - V6 - engine.
BuildCMakeLib: Added support for building third-party projects with CMake using the Ninja build system.
Adding capabilities to the warning defaults, cleaning up tests, adding more warning+error strings for easier long term adoption & toggling.
UHT will flag U macros (i.e. UCLASS) found in skipped blocks of code as deprecated. This will be made a warning in a future version of UE.
UBT Editor: Added graceful messaging for Target upgrade requirements on editor path.
Emit the target build settings version & build environment to target file for editor runtime consumption.
Consume target file metadata to improve error messaging for Target versions.
Bug Fix:
Fixing a bug where UAT could hang waiting for output. We now log a warning instead.
Shaders: Fixed the shader pipeline skipping work if the number of shaders to compile is less than the number of tasks available.
Fixed an issue where if a TInstancedStruct is used as a function argument, Clang platforms would fail to compile.
Fixed BuildCookRun to include base build .sig files when generating patches.
Updating UHT to once again generate an error when a USTRUCT contains more than one base.
Fixed an issue in UnrealVS that could cause UnrealVS.P4->History to open an empty window
Updated UnrealVS - Includes fixes to test discovery and execution
Corrected define usage (UE_BUILD_SHIPPING vs UE_SHIPPING)
Fixed UHT parser issue where if FArchive is forward declared when used in the Serialize function declaration, UHT would fail to generate the proper code.
Fixed inconsistent exception logging in Gauntlet.TestExecutor. It now consistently uses Exception.ToString().
Fixed issue in UHT where it was allowing a USTRUCT to have multiple USTRUCTs as base classes.
Fixed a bug where presets would be added to the global sync filters if the tab with the preset had its sync filter view opened and the okay button pressed.
Fixed UGS not showing investigations as "resolved" when using Horde's metadata endpoint.
Fixed destination files potentially not having the correct permission during SafeCopyFile in UAT, on non-Windows platforms.
Horde
New:
BuildHealth Server Build: Added JobSummary telemetry.
Hashed issue handler will now automatically check for a file property in the event's structured logging, and use that data in suspect finding. This should lead to suspect changes being identified more accurately, but relies on emitted warnings and errors including file metadata.
Analytics:
Added a Build Health Dashboard View that shows step outcome history for selected templates & streams.
Add ExternalIssueKey & Fingerprint to the telemetry payload for issues. Also includes AnalyticsIntegrationTests.
Added example of implementing a new Secrets Provider for Azure Key Vault. This secret provider is experimental and provided as an example of how to implement a custom secret provider.
Added Secrets plugin configuration option WithAws that controls if the AwsParameterStore provider is enabled.
Added new Secrets API api/v1/secrets/resolve/ that resolves a string to a property value of a secret. For example the string horde:secret:SecretName.PropertyName would resolve to the value of PropertyName for the secret SecretName.
Only commits with Code CommitTag are considered when searching for Compile issue suspects.
Removed the unused Password property from EpicGames.Horde.Streams.IWorkspaceType.
Added the attribute ResolveSecret that allows properties in the Global Config to be resolved to the value of a Horde secret during configuration load.
If the property's value is of the form horde:secret:SecretName.PropertyName then if a secret SecretName exists and has a property PropertyName it will be replaced with the value from the Horde secret.
This allows sensitive configuration properties to move out of the configuration files to an external secrets provider such as AWS or HashiCorp Vault.
New: Updated the Password and Ticket properties for the Build Config's PerforceCredentials property to use the attribute ResolveSecret allowing Perforce credentials to be moved to an external secret provider.
Changed build graph updates where a node that is skipped but modified does not fail the whole build. This allows the build to continue with only dependent nodes being marked as skipped while non-dependent subtrees can continue to run.
Replaced the deprecated code coverage tool JetBrains.dotCover.GlobalTool with JetBrains.dotCover.CommandLineTools.
Added to the Stream Config a StreamTags property, which is a set of name and Boolean pairs; and to the Schedule Config a Condition property.
The Condition property can be used instead of the Enabled property to control if the scheduled jobs for a stream should be enabled.
Each stream tag will have an environment variable named after it with the UE_HORDE_STREAMTAG_ prefix and a value of True or False, which can be used in BuildGraph script conditions.
Fixed an issue where capabilities for agents was missing their RAM capacity.
Updated Temp Storage to allow the maximum number of exports to write in a single request to be configurable from the agent settings. The new option is TempStorageMaxBatchSize and defaults to a value of 20. Modified from contrib .
Bug Fix:
API encounters ".NET type System.Text.Json.JsonElement cannot be mapped to a BsonValue" on swagger API invocations.
Fixed an issue where GetNext for ScheduledDowntime would return the previous downtime.
Fixed an issue where the log for the Downtime Service would print the next downtime being in the past when an expired non-repeating downtime was in the global config.
Server Tests: Fix the DatabaseIntegrationTest class to properly forward dispose calls to the mongoDBRunner.
BuildHealth Server: Exposed DateUtc on GetCommitResponse.
Fixed an issue where capabilities for macOS agents was missing information for:
CPU number of logical cores.
CPU performance and efficiency cores for Apple Silicon.
GPU name and core count.
User name, domain name and running as administrator.
Fixed an issue where the Notices Get method would not return the start and finish times, and if the start and finish times are set then set the active value accordingly.
Insights
New:
Adds pre and post state change callbacks for TraceLog channels. Allows instrumentations to deny state changes and provide a reason for the denial, as well as performing actions when a channel is enabled or disabled, such as sending initial state, resetting tracked state or activating tracking.
Added a method of creating a TraceAnalysis session using a custom data stream.
Added an ability to copy a tooltip value to clipboard from the bookmarks track.
The PlatformEvents channel now uses callbacks to deny enabling channels and provide user feedback, if requirements are not fulfilled.
Added support to save data traced via the Direct Trace mode to disk. FDirectSocketStream can now accept an optional FArchiveFileWriterGeneric used to write the data to disk.
Added support for Frame Start and End Misc Trace events in the minimal trace API.
Added config variables to provide variable trace log write buffer size and prevent writer sleeping. This helps prevent the write thread from getting saturated under heavy load.
Increased version of Unreal Insights to v1.08, for the UE 5.7 Release.
Improved management of TraceLog worker thread in various scenarios. The worker thread can now be started on demand.
Bug Fix:
Fixed a startup deadlock when launching with -trace=memory without tracehost or tracefile.
Fixed an issue where FTraceAuxiliary::Relay did not respect the Options parameter provided.
Fixed an issue due to Trace gap detection using three sync points. Previous logic used two sync points to calculate gaps, but the engine sends out three. In some scenarios this caused an error in gap detection which meant a higher serial was chosen as the next serial. This would leave much of the trace data unprocessed.
Framework
AI
Bug Fix:
Fixed an issue where selecting subnodes would result in the currently-edited property value to be discarded instead of applied.
AI Behavior Trees
Bug Fix:
Fixed reinstantiation for Blueprint-based nodes using blackboard key selector.
Fixed Blueprint reinstantiation issues with some BehaviorTree types.
AAIController::UseBlackboard: Fixed to correctly return the result of trying to initialize the Blackboard.
Changed InstanceIdx to use a const int32 to prevent a need for IntCastChecked to prevent possible data truncation.
AI Debugging
New:
Added possibility in Rewind Debugger tracks to override the default behavior to step backward and step forward commands.
VisualLogger log entry initialization can now also assign a valid location for components. With this change, double-clicking on such an entry will bring the camera to that location instead of the world's origin.
Fixed GameplayDebugger local-multiplayer render duplication.
Bug Fix:
Fixed ever growing buffer in FVisualLoggerBinaryFileDevice when VisualLogger is not set to record to file.
Fixed debug draw helper functions and SmartObject visualization to properly handle scaled DPI.
AI EQS
New:
EnvQueryTest_GameplayTags: Added searching for tags container in actor's components if actor itself doesn't implement IGameplayTagAssetInterface.
Upgraded the description details of the UEnvQueryTest_Pathfinding test to better reflect its behavior in EEnvTestPurpose::Score mode.
Bug Fix:
Fixed blueprint reinstantiation for EQS types
AI Navigation
New:
NavLink Generation:
Added a name property to generation configs, and JumpMaxDepth can now be negative.
Activated the "enable" property now that multiple configurations are supported.
Added multiple link configurations for generated navlinks.
Added LinkGenerationSelectedConfig to debug a specific config.
Improved trajectory ground sample debug display.
GameplayDebuggerCategory_Mass: Now draws a purple circle around entities that are LOD off.
AsyncNavWalkingMode can use navmesh normal instead of physics hit normal.
Now always take the highest hit location in z when searching for ground location.
Mass Navigation:
Added text to MassNavigation::Debug methods.
Added an option to avoid slowing down when steering.
Added a MassSceneComponentVelocityTranslator to copy velocity between mass entities and actors.
Updated NPC desired movement based on current velocity when in animate mode for root motion driven NPCs. This helps with smooth blending into animated states from steering when character is root motion driven.
Added navmesh path boundaries to mass gameplay debugger.
Added logs in the navigation flow.
Mass Entity: Fixed an infinite loop caused by loop variable overflow ().
NavMesh: Added a navmesh tile building optimization when using CompositeNavModifiers with lots of data.
Mass Navmesh Navigation: Increase default corridor width used by FMassNavMeshPathFollowTask.
Pathfind: Changed warnings to logs when InitPathfinding can't find a polygon at the start or the end location.
Removed deprecated 5.4 navigation code.
MassNavMeshPathFollowProcessor: Improved logging information and clamping distance on the closest segment.
MassNavMeshPathFollowTask: Removed overlapping points when building a corridor.
Mass Navigation and Avoidance:
Made a fix to apply max speed in UMassApplyForceProcessor.
Added debug to display standing entities in mass avoidance.
Pathfollow -> Made a fix to keep the steering force when near the end of a path (we want to apply the fade only on the avoidance forces).
Used stronger avoidance forces when getting out of environment boundaries.Added an optional tag to prevent moving backward while avoiding.
Navigation: Added in the output log information regarding invalid pathfind requests and changed log verbosity from error to warning.
NavigationSystem: Replaced legacy repository unregisternavrelevantobject method with UnregisterNavRelevantObjectInternal.
Bug Fix:
Navigation:
Fixed a crash occurring when building navmesh on PIE ending.
Made a tentative fix for a crash occurring when navigation is being rebuilt because a navigation override is being removed when clearing world components.
Update SplineNavModifierComponent to apply the NavAreaToReplace to its modifier.
Guarded against zero DeltaTime in UPathFollowingComponent::FollowPathSegment to prevent division by zero ().
NavLink Generation:
Fixed missing links on small navmesh patches.
Made a fix to avoid filtering overlapping links if they used different navigation areas.
Fixed automatically generated navlinks being created without the NavLinkFlag.
NavMesh:
Made a tentative fix for a rare crash in storeWallSegment.
Fixed assertions occurring in UE::NavMesh::Private::CalculateMaxTilesCount().
Fix FindDistanceToWall returning incorrect result and finding a closest position that is not on a wall.
Fixed editor crash when a large number is typed in the Agent Radius value.
ISMC: Fixed an ensure in UInstancedStaticMeshComponent::GetNavigationBounds() caused by invalid navigation bounds. CachedBounds were being invalidated and not being recomputed when instances were added individually.
ZoneGraph: Fixed problem with converting FZoneGraphTag::None to FZoneGraphTagMask ().
Fix for AsyncNavWalkingMode using stale normals.
AI Smart Objects
New:
Added method to retrieve a Smart Object slot's UserData from the SlotView.
Added basic MRU slots implementation for MassSmartObject with settings in Mass SmartObject section of the project settings:
MRUSlotsMaxCount: Possible values between 0 and 4 (default: 0, meaning that the feature is not used; up to 4 slots).
bUseCooldownForMRUSlots: to allow the most recently used slots to be considered again a given period of time.
MRUSlotsCooldown: period of time during which a given slot will not be considered after being used.
Added all camera controls to the SmartObjectEditor toolbar
Bug Fix:
Fixed a crash in AITask MoveTo
Fixed an issue where the NavNodeRef was not included when requesting the slot entrance location with the option for projecting to navmesh enabled.
AI State Tree
New:
Added a rule to remove sustained state. All reselected states are new states.
Added Blueprint helper 'RunStateTreeRunStateTree' to execute a StateTree on an actor. Helper will use an existing StateTree component or add it if necessary.
Added Multiply operator to the Consideration score calculation.
Added ExecutionExtension callback when a transition is about to be applied.
Bug Fix:
Fixed a Runtime Validation false positive error when changing state trees without running any.
Fixed a transition that didn't remove the frame when a sub-frame changes root.
Prevented a reentrant call into StartTree and Tick for StateTreeComponent and GameplayInteractionsContext.
Fixed temporary frames not cleaned up when we run multiple transitions and did State selection more than once.
State tree references can now change while the tree is not run.
Fixed editor freezing when the user spams undo/redo operation inside State Tree Editor.
State Tree Editor: Hide level actor picker in the state tree editor.
Fixed property function node value not being retained in new nodes when copied/pasted/duplicated.
Fixed property bindings not being retained in new nodes if the old bindings were removed before pasting.
Fixed details view not always syncing correctly with the selected editor node.
Fixed Delegate Listener being unable to bind to the nested Delegate Dispatcher.
API
New:
Added DrawDebugCircleArc version accepting a quaternion for orienting the arc with an arbitrary roll.
Bug Fix:
SlateIM ComboBox now properly shows its selected value when spawned.
Audio
New:
Waveform Editor:
Added a noise threshold for zero crossing logic.
Added an inverted S fade function.
Streamlined the trimming workflow to have new UI handles and be enabled on opening the waveform editor.
Added loop, delete, and conversion options when right clicking.
Playback hotkey adjustments to allow move playhead to start
Added an icon to fade handles.
Made adjustments to default nudge settings.
Added controls to scroll left and right when zoomed using the right mouse button.
Made memory improvements for MetaSounds in the Operator Cache.
Added a Fade Node in MetaSound Experimental.
Added Blueprint equality operator for MetaSound literals
SoundWave Cue Point Origin now has improved defaults. Default origin is now the Waveform Editor Transformation Markers, unless the .wav had cue points on import.
Added a new Virtualization Mode: Seek Restart. This mode will virtualize, but keep track of playback time and, when realized, seek to that time as if it was playing the whole time. It's a less accurate, but more performant alternative to Play When Silent.
Performance improvements when using and destroying a large number of Quartz subscribers.
Metasound Trigger Filter node display name is now Trigger Chance to better convey its meaning. Some of its advanced pins are now hidden by default, and the node & pins tooltips have been made clearer.
Added "MaintainAudioSync" input to Wave Player Node as an advanced input to the Wave Player MetaSound Node.
"MaintainAudioSync" will compensate for latency during playback of streaming wave assets so that the playback of the audio stays in sync within the playing MetaSound.
Added a new debug display for Audio Modulation: au.Debug.Modulation.ActiveMixes
This will display all currently active mixes.you can choose whether Global Control Bus Mixes are included with au.Debug.Modulation.ActiveMixes.ShowGlobalMixes
Both experimental and legacy subtitle fields are now initialized for DialogueWaves so users can switch between them.
Added Subharmonizer MetaSound Node to standard library.
Added an option to only support Vorbis decoding, not encoding, for memory-constrained targets.
Renamed the "Create Subtitle" Asset Utility action to the more-specific "Make Asset UserData from Legacy Subtitles."
Improved extendable MetaSound node configuration editor details customization.
Added two new features to Control Bus Mixes:
Control Bus Mix Timer: Set a duration on the Control Bus Mix, and it will disable itself that many seconds after activating.
Retrigger on Activate: Optional behavior where, when a mix is activated when it's already active, it sets the values on the CBM to its default values and starts the attack over again (like retriggering an envelope).
Added a new Asset Action Utility that enables converting Overlay assets into subtitles in bulk.
MetaSound presets now inherit default metadata (ex. float range/clamp) from parent graph if applicable.
Subtitles and Closed Captions plugin:
Multiple Subtitles can now be added to a single SoundWave. All of them fit inside a single Asset UserData.
No longer queues subtitles if the engine settings for subtitles are turned off.
Added an Enum to Subtitle Assets to distinguish when the duration property is relevant vs when it stops automatically using a sound's length.
Subtitles from now have a default priority of 1.
Subtitles created in a SoundWave's Asset UserData will automatically estimate the length of the sound and default their duration thereto.
Sequences now support dragging and dropping subtitles.
Changed the USubtitleTextBlock class name to USubtitleWidget.
Added automatic subtitle playback support for DialogueWaves inside SoundCues.
Added a Blueprint node for queuing all the subtitles in an Asset UserData at once.
Added a Blueprint function for hot-swapping the Widget.
Added StopSubtitlesInAsset BP function.
Bug Fix:
Waveform Editor:
Fixed an issue where selecting a loop region marks the soundwave dirty.
Fixed an issue where highlighting and saving with a loop region selected disables the rest of the soundwave playing.
Fixed SoundWave markers with incorrect position data on export to USoundWave.
Scrubber Undo Fixes
Fixed frame length resetting to default instead of min when sliding loop region size.
Fixed exported soundwaves not supporting undo transactions.
Fixed ensure on undoing loop deletion.
Fixed editor crashing when closing out a Sound Wave asset after canceling to Export Waveform.
Fixed undo markers triggering ensure
Made UI fixes for markers with positive frame length
Made fixes to popup clearing.
Fixed right click getting stuck when scrolling waveform.
Subtitles in the Subtitles and Closed Captions plugin with delayed starts now respect internal/external timing choices.
Subtitles from the Sequencer plugin now correctly update their visibility when scrubbing along PIE.
Fixed crash with MetaSound user preset widget tab.
Fixed shutdown crash on Audio Streaming Cache handle ref counting.
Fixed a bug where, when a submix is deactivated, Modulators attached to it would still be active.
Fixed a bug where submixes with modulators could not disable via the Auto-Disable setting.
Fixed an issue with the Seek Restart Virtualization mode where it did not properly account for changes in pitch before virtualization.
When the sound virtualizes, it will use the last pitch it was set to to estimate where it should seek upon realization.
Sound Attenuation: Fixed == operator on FSoundAttenuationSettings.
Fixed MetaSound relative render cost being incorrectly reported in some cases when using the operator cache.
Fixed a bug where some Modulation inheritance settings were not working in some cases for non-volume modulation on sound sources.
Fixed MetaSound comment node positions not saving properly after resizing.
Fixed a bug where projects with the Audio Modulation plugin disabled had logspam.
Fixed crashes when using MetaSound node configuration with pages.
Fixed a MetaSounds edge case when the on-done trigger is triggered mid-buffer.
Fixed a MetaSound crash when clicking audition menu after closing asset editor
Fixed a bug where the Chorus Source effect modulation settings did not respond to Modulation changes.
Fixed Sine Curves on FVolumeFader when used outside [0,1] range. They should now follow the expected curve between any two values.
Fixed a bug causing various ITD features to have an enormous delay.
Blueprint
New:
By default the Blueprint editor no longer searches for references to variables when the variables type is changed via the blueprint editor
To re-enable this behavior, set "bSearchForReferencesWhenVariableTypeChanged" to true in your editor settings.
Can now call BlueprintFunctionLibrary functions from classes that do not implement GetWorld or ShowWorldContextPin. It now always shows the pins if needed and will always connect invisible pins even if they are marked as optional.
Added a SetFocusInViewport node to UScriptableInteractiveTool. This means scriptable tools can give focus to the viewport so that key bindings pass through without user interaction.
The Blueprint Debug Draw Line / Point / etc. methods now have the option to draw with 'screen' depth priority.
Added ToRotationVector, MakeFromRotationVector and GetShortestArcWith to the Kismet Math Library.
Structs tagged as HasNativeMake can now still have their individual members set.
Asset/Actor Actions in Developer folders show for everyone.
GetBlutilityClasses already had code to ensure that we don't list other devs' blutilities.
However, it didn't use the correct path format, which caused FPaths::IsUnderDirectory to always return false.
Similarly, UEditorUtilitySubsystem::HandleStartupAssets never had a similar filter to begin with.
Bug Fix:
Fixed failure to copy instanced Blueprint component value overrides on copy/paste workflows.
CollectionsManagerScriptingSubsystem:
Removed a warning from GetAssetsInCollection when an asset could not be found.
Fixed an issue where logs displayed as red despite actually being warnings.
Fixed an editor crash after clicking on a deleted graph node hyperlink in the Blueprint editor's compiler results tab.
UK2Node_VariableGet::SetPurity erroneously removed the SetPurity function from the public API of UK2Node_VariableGet. This fix now re-adds SetPurity, but changes its implementation to use TogglePurity.
Fixed an editor crash after clicking on a deleted graph node hyperlink in the Blueprint editor's compiler results tab.
Fixed a crash when editing children from a cooked Blueprint that had editor-only components.
User defined structs with Text fields with non-trivial default values no longer alter themselves on load.
The Blueprint diff tool now reports changes to Create Event Node's signature function.
Fixed potential for ICH override template namespace collision after reparenting an Actor-based Blueprint.
The engine no longer crashes when it exits while a search in Blueprints is ongoing.
Added more crash report context to paths where we are failing to resolve a node's owning Blueprint and/or graph, while using an ensure to avoid crashing the editor as a result.
Blueprint Compiler
Bug Fix:
Fixed crash in SerializeUnversionedProperties during cooking.
Fixed crash when cooking blueprints with local object references set to objects in asset.
Fixed compiler failing to find newly added functions on Blueprint interfaces, which led to implemented functions being renamed.
Fixed one cause of 'Reachable Garbage' when recompiling Blueprints.
Blueprint's delegate signature checking logic no longer accidently looks at local variables when matching function signatures.
Fixed one cause of loss of Blueprint subobjects when a Blueprint that is contained in another Blueprint is compiled.
Fixed a crash in garbage collection due to mislinked SKEL_ classes, most frequently seen during long-running cook operations.
Blueprint Runtime
Bug Fix:
Fixed a bug where arrays of structs with custom identical operators could fail to copy from Blueprint generated classes correctly.
Fixed push-model blueprint array property not properly marked dirty if modified by different actor.
The root cause of the issue is due to incorrect function signatures on array function thunks. Several of them mark their input array as 'const', but clearly change the array.
When push-model support was added, this problem was discovered and worked around by adding MARK_PROPERTY_DIRTY calls directly in the thunks. The problem with this solution is that it doesn't work when we change an array on a different actor.
Additionally, the thunk doesn't have enough information to determine that easily.
The correct solution is to leverage the existing code in FKCHandler_CallFunction that has sufficient context to inject MarkPropertyDirtyNode accurately.
In order to get array functions working, we needed to fix their signatures to use UPARAM(ref) instead of 'const'. One issue with this fix is that there might be existing Blueprint code that incorrectly uses mutable array functions with read-only data.
For now, we'll support this, but with a warning to fix the code as it'll become an error in 5.9. Currently, this warning is disabled until we fix affected content.
Fixed a memory leak when using containers with types that allocate memory by default.
Gameplay
New:
Mover:
Added a method of canceling movement features by matching gameplay tags.
Added User-Defined Struct support for Mover data collections, so Blueprint-only users can include custom data without requiring native code.
Now supports spring-based walking mode work in networked play.
Reduced potential memory operations when adding to a data collection by preferring to copy onto an existing matching struct if possible.
Added options for supporting root motion for non-vertical moves, which makes possible combining them with gravity-based falling.
Added a double buffer for cached sync state to avoid issues with reading in data that may be freed/overwritten.
Added Mover-Mass translators along with a Mover Integrations plugin to house various integrations between Mover and other systems.
NavWalking mode now sets floor results in the Mover Blackboard when projecting to level geometry is enabled.
Added an auto-expire policy option for rollback blackboard entries.
Added support for blueprintable layered moves through a new system that splits up Layered Move Logic and Data.
This allows Layered Move Logic to be made natively and in Blueprints in an effort to expand blueprint support in Mover.
These new layered moves exist alongside the old ones at the moment with the intention of these new moves eventually replacing the old ones.
Added options for handling out-of-band movement changes, whether to warn about it and whether to accept it as the new starting sim state. Usage is primarily for non-networked play, where an external system is allowed to move the actor around, such as during cinematics or temporary physics simulation.
Converted absolute timesteps to double-precision.
Now supports avoiding state-copying operations when the simulation state doesn't change.
Added AdditiveVelocity MixMode support to MultiJump Layered Move.
Made small adjustments to the extended Mover pawn to make sure additive velocity is respected by turning off extra jump input from CharacterMoverComponent Jump.
Added option for flat-bottom floor checks.
Added consistent angular velocity when changing movement modes.
Adjusted mover API to use a FVector for angular velocity instead of a FRotator. This changes some public API related to Mover.
Removed the gravity orientation from angular velocity calculation.
Added simple montage replication support for the character-focused MoverComponent.
Added first version of rollback-aware blackboard.
Added experimental option to append inputs into sync state, for cases where you want to share inputs with sim proxies that are not simulated and may not have those inputs available.
Made MoveInput and MoveInputType BlueprintReadOnly, so setting this input is done through specific functions only. This means we can properly apply some precision to input to make sure all clients/server have same value after NetSerialization.
Cameras:
Added Blueprint getter nodes for camera rig parameters.
Added evaluation context to transition conditions' API.
Now shows the name of the camera rig on the rig prefab node.
Added more debug information for blend stacks.
Added ResolveCameraRigProxy method to Blueprint camera director.
Moved lens calibration camera node to the CameraCalibrationCore plugin
Some changes to input slots:
Now runs input nodes in OnRun. OnUpdateParameters is only meant for pre-blending input parameters, not running actual logic, if only because it is run in isolation on just a few nodes that opt-in.
Moved the revert axis options onto the base input slot class.
Added a speed option on the input slot class. Pre-blend that instead of pre-blending the actual player input.
Moved the user-exposed option for accumulation onto the axis-binding specific node, in preparation of adding an actual accumulation node for more complex input chains.
Moved axis-binding code to a helper class in preparation of a "raw" input action node.
Added raw input action and accumulator node for complex input chains.
Added "driven control rotation" input node:
This input node makes possible using a "centralized" player input system which drives control rotation on the pawn, while still enabling cameras to have different orientations, such as when using target preservation with various lateral offsets (and therefore parallax requiring converging cameras with different orientations).
The active camera rig uses control rotation as-is, but any blending-out camera rigs use their last control rotation driven by the "delta" control rotation each frame.
This seems to be a good compromise between cameras limited by a single orientation and having player input managed by camera rigs individually.
Added the GetPlayerController method on the Blueprint camera node evaluator.
Added an option on camera components to set control rotation.
Added the ability for the Camera Debugger panel to bind to specific camera system instances (for instance, picking which Gameplay Camera actor to debug).
When drag-and-dropping a camera or camera rig asset onto a level or a sequence, create the corresponding actor.
Camera rig parameters now default to not pre-blended.
Defaulting to pre-blended benefited a few cases, but also caused visual bugs in a couple of other cases, so it's not worth turning it on by default.
Moved persistent rig activation functions onto the camera components and the camera manager.
These Blueprint functions were previously global, affecting whatever camera system host was currently considered "active".
This turns out to be unclear and prone to errors. Now the user activates persistent rigs exactly on whatever they intend to.
Now auto-create camera rigs and assets when nothing is specified on a Gameplay Camera component (but log a warning).
Made the orientation initialization service available to 3rd parties, and added an API for overriding the target or yaw/pitch to preserve.
Added a Blueprint utility function to access the evaluated camera's orientation.
Added Teardown API for node evaluators, added layer and active camera rig information.
Made node evaluator and evaluation service flags inclusive by default (i.e. opt-out).
Added a new "initialize with ideal framing" option on screen-space framing nodes.
Added a "family shortcut" bar to various camera asset editors for helping navigate between related assets.
Users can now set variables to be pre-blended.
Made QoL improvements to the Blueprint camera node.
Added bone/socket options to the attach to player pawn node.
Improved advanced camera shakes (add shake instance IDs and the ability to interrupt and stop a shake), improved the internal API for implementing shake nodes, and fixed a few bugs.
Implemented a more proper auto-build for camera assets for PIE.
GAS:
Improved logging for missing attributes in FActiveGameplayEffectHandle when using GetGameplayEffectMagnitude.
Gameplay Tag display ends in an ellipsis when the display is cut off rather than overflowing.
Gameplay Tag and Tag Container meta data "DisplayShortTagNames" will now remove the Categories filter from the beginning of the Tag chip in the details panel.
Gameplay Effects stacking options now have better names and comments.
CooldownGameplayEffectClass validation: When a GameplayAbility is configured with a cooldown GE class, validation will check whether that GE applies any tags.
Updated the GameplayTagCountContainer to serialize tags itself and provide for fine control of what tags should replicate where via EGameplayTagReplicationState enum.
Exposing common GameplayEffectSpecHandle and ActiveGameplayEffectHandle queries to Blueprint. The following Blueprint callable functions have been added to AbilitySystemBlueprintLibrary to empower Blueprint programmers when making GameplayAbilities. Since some GameplayAbilityTask callbacks only provide a GE spec handle and/or active GE handle, now you can do more with those handles:
GetGrantedTags: Gets gameplay tags granted by a Gameplay Effect, from the effect's spec handle.
GetAssetTags: Gets gameplay tags describing the GameplayEffect, from the effect's spec handle.
GetGameplayEffectFromSpecHandleIsDurationGameplayEffectSpecHandle: Whether a GameplayEffect is instant or non-instant.
IsActiveGameplayEffectHandleValid: Whether a handle for an active GameplayEffect is a valid handle or not. Applied instant GEs don't result in an active handle.
IsActiveGameplayEffectHandleActive: Whether a handle for an active GameplayEffect is a valid handle and it's still applied.
GetAbilitySystemComponentFromActiveGameplayEffectHandle: Retrieving the AbilitySystemComponent from an active GE handle.
Renaming a gameplay tag in the Gameplay Tag Manager now automatically renames all sub tags.
Added predictive gameplay effect stacking and improved stack overflow handling.
The data validation error for when there is a null input trigger on a key mapping now includes the name of the input action which it is mapped to.
You can now call "SetShouldConsume" on any Enhanced Input bound action handles.
You can also define "ENHANCED_INPUT_ALLOW_LEGACY_BINDING" in your game's .build.cs file to enable legacy key bindings onto enhanced input components, making upgrading to enhanced input easier.
Added GetActorFilter UPROPERTY meta support to object picker (mirroring GetAssetFilter).
Added a virtual function to UBlueprint, ShouldAutomaticallyRegisterInputOnConstruction, which can be overridden in widget blueprints.
Added a set of deprecated input action/axis names in the project settings.
Added "Setter=SetShowMouseCursor" to APlayerController::bShowMouseCursor.
Added ReleaseGameFeaturePlugins for multiple plugins at once. Unloading plugins batches GC and GameplayTags tree changes together which improves performance of unloading operation
Added an editor preference for setting a "Simulated Device Mapping Policy".
This can be used in the editor to change how input devices get mapped to platform users, which can be useful for testing device connection sequences for your UI, log in flows, etc.
Added the current device mapping policy to the output of the "Input.LogAllConnectedDevices" command.
Added helper functions to Ability system library: HasAnyAbilitiesWithCondition and HasAnyAbilitiesWithAssetTag
Added QueueWorkFunction and SendQueuedWork to the TaskSyncManager which can be used to queue a batch of function pointers to execute as a simple tick task. This can be used with RegisterTickGroupWorkHandle to safely schedule batched gameplay thread work from any worker thread.
Calling GetDeviceSpecificData now uses the given input device ID. If that is invalid, it uses the platform user's most recent device.
Added LoadGameIfExistsAsync to SaveGameSystem which combines the exists and load checks into one async call to avoid an extra frame delay. Changed GameplayStatics to use this for async loads which fixes a warning when trying to load a nonexistent save game.
Added ensure and comments to prevent creation of registered FTickableGameObjects on worker threads which is an unsafe race condition.
Added an option to the FTickableGameObject constructor to enable creating with a disabled tick, which is safe on a worker thread.
Added bindable "virtual" accept and back FKeys.
Added a OnPostUserSettingsInitialized delegate to Enhanced Input, which will fire after the Enhanced Input User Settings have been initialized on the subsystem.
Added more ways to detect a local player subsystem when using the node which does not have an explicit player controller target pin.
Implemented SlideAlongNavMesh option for CMC NavWalking mode. This means pawns in NavWalking mode can move along a navmesh rather than just moving towards a projected point on the navmesh.
CineCamera: Added an option to disable dynamic exposure.
Previously, turning off depth-of-field with FocusMethod would also turn off exposure simulation. This was fixed recently, but also meant that CineCameraComponent would now always simulate exposure, which isn't always desirable.
This change adds a new ExposureMethod setting to allow disabling exposure too.
Made sure that the key mappings "supported key profile" tag is respected, and made the OnKeyProfileChanged delegate Blueprint assignable.
Fixed a race condition crash on shutdown of the SteamController plugin.
Added an "Input.LogAllConnectedDevices" command to dump all the currently connected input devices and some metadata about them to the logs.
Reduced mouse input overhead on Windows by processing raw mouse moves on a separate FRunnable thread in the WindowsApplication..
GameplayTags and GameplayTagContainers created in Blueprint give the user a way to edit the "Categories" metadata for tag filtering in the owning Blueprint.
Fixed a crash where UPlayerInput::SmoothMouse would assert before it would attempt to divide by zero.
Bug Fix:
Mover:
Fixed a bug in mover angular velocity clamping where the limit was not respected when rotating off axis
Added CommonLegacyMovementSettings shared settings in various movement modes to avoid a crash that could happen if they were the only mode added.
Fixed an issue where pawns wouldn't follow a navlink off the navmesh if bSlideAlongNavMeshEdge was true.
Nav walking modes now force a navmesh projection if something comes along and invalidates our last floor information, such as teleportation.
Now initialize the Mover mode state machine earlier so it can be used in backend initialization if desired
Fixed NaN issue in UMovementUtils::ComputeVelocity that could happen when MoveDirectionIntent was zeroed out.
Fixed issue where backends could leave stale non-persistent structs in sync state between frames.
Fixed several cases where strict equality checks on orientations could fail due to float point imprecision.
Fixed an issue where a specified InputProducer could fail to have ProduceInput called on it.
Fixed a Blueprint editor crash during validation if there's a shared settings object set to None.
Fixed issues with trying to maintain the small distance off of floors in falling/flying modes where a character could get pulled towards the floor.
Fixed improperly calculated angular velocity for mutli-axis rotation cases, and added utility function to compute it.
Fixed a bug in standalone mode where the time step was being rounded down to the nearest whole millisecond.
Fixed floating point precision error in mover's fixed delta time calculation.
Finding a movement modifier by handle and by type now searches through the queued modifiers on the Mover State Machine as well. Fixes an issue where modifiers weren't found immediately after queuing them.
Fixed local->world root motion conversions when non-yaw rotations are involved.
Fixed cases where some movement modes were not respecting the setting for remaining vertical.
Fixed bugs where an actor can violate the min/max distance it's supposed to float above walkable floors.
Made sure we use BaseVisualComponentTransform to update PrimaryVisualComponent transform in FinalizeFrame so changes to BaseVisualComponentTransform apply to the visual component regardless of whether we're smoothing state or not.
Now properly expose Movement Mode in-out references in GenerateMove and SimulationTick to Blueprint.
Searching modifiers by handle with an invalid handle will return nullptr rather than active modifiers with invalid handles that haven't been fixed up yet.
Now passing along starting velocity in Falling modes if we didn't use any time. This fixes some velocity cancellation that sometimes causes a stutter on landing.
Cameras:
Fixed main camera assets not being usable as Blueprint variables.
Fixed crashes and bugs with rewind debugger integration.
Improve debug info display with extra data, more filtering options, and a few other things.
Fixed single-rig updates missing some of the steps the blend stack does.
Fixed static initialization problems that can lead to debug blocks not saving their fields in trace files.
No longer freezes camera rigs during stateless evaluations.
No longer warns about a camera asset not using any rigs if it's using proxies, and builds any rigs in the proxy table.
Fixed a crash when a camera's enter or exit transitions have empty pins.
Fixed an incorrect reset-to-default behavior on the camera parameter editor UI.
Now prevents infinite recursion when there's a cyclic reference of camera rigs.
Fixed gameplay tag transition condition; when a tag query is specified, it should fail if there is no previous/next camera rig.
Normalized yaw/pitch for spline orbit node
Can now run the target ray-cast node when there's no player controller.
Can now build and run camera rigs and shakes with no root node.
Now prevent rig prefab nodes referencing their own camera rig.
No longer throws asserts or error messages when we have a camera actor without an asset specified on it
Fixed activating persistent rigs during director initialization, and having these rigs receive custom parameter overrides.
Now validates that exposed camera rig parameters have the correct type for what they're connected to.
Fixed possible crash in GPC camera manager when the last evaluation context is removed from the stack.
No longer updates dampers and interpolators when the delta-time is zero.
Now properly freeze blends (possibly mid-blending) when freezing a camera rig in a blend stack.
Fixed simple fixed-time blends not saving/restoring their current time.
Fixed a crash when changing the type of a camera rig parameter.
No longer shows byte/int types for data parameters.
Now resolves camera rig name conflicts when building the property bag for a camera asset.
Fixed camera rig parameter nodes not being added to the list of graph objects.
Fixed assert when adding an enum data parameter to a camera rig.
Fixed broken "inline" evaluation of camera shake prefabs.
No longer pre-blends camera variable table entries that are not flagged for it.
Fixed the tick group for the camera components.
Fixed a crash when running editor builds without an editor.
Added missing initialization call for blend nodes in merged camera rigs.
The camera reference widget is now disabled if overridden with a rig parameter.
Fixed a crash when connecting a camera variable reference to a camera rig parameter.
Fixed an issue where rigs could keep running with old data after their asset was rebuilt.
Fixed "Home" button in camera rig editor.
Deleted references to camera variables when a variable collection is deleted.
Fixed a possible crash when running with unbuilt or outdated rigs.
Fixed Blueprint breakpoints not working on GET/SET parameter nodes.
Fixed shake prefab node not passing shake parameter values over to the visual layer in deferred mode.
Fixed SET parameters nodes not setting anything if the parameter wasn't already known in the variable/data tables.
Fixed error messages for unexpected situations lerping/overriding variable tables.
Fixed variable and context data tables sometimes returning uninitialized memory, and replace assert with one-time warning.
No longer uses manual focus distance on the output camera component if the focus distance isn't set.
Fixed pin types and colors for some data parameters.
Fixed incorrect parameter/pin types on the Blueprint camera node for object and class pointers.
Camera modifier rigs added from the player camera manager should now be aware of the player controller.
Added fixes for the player camera manager:
No longer double-updates Gameplay Camera actors
Now run the vanilla (Blueprint-based) camera modifiers ourselves after the camera system.
Now sets the transform of the camera manager itself to where the final viewpoint is.
GAS:
Consolidated code that checks whether an AttributeSet's FProperty represents a gameplay attribute, and improved coverage and stability:
FGameplayAttribute details customization dropdown will only show attribute set properties that represent GameplayAttributes. Previously it showed all properties.
GameplayDebugger will now also display doubles. Doubles as FGameplayAttributes remain supported for legacy reasons.
Fixed GameplayDebugger crash when an UAttributeSet had any int32 UPROPERTY().UAttributeSet::InitFromMetaDataTable now only processes property types that can back gameplay attributes.
Fixed a crash when debugging gameplay effects with aggregate by source stacks.
Fixed an issue where SetTagMapCount didn't call OnTagUpdated like the other tag update functions. This will now be called when Gameplay Cue tags and Loose Tags are added and removed (No change for changing values that don't add or remove the tag).
Fixed target data recalculating source tags and attributes when applying Effect Spec.
GameInstance pointer for Async Actions is correctly reset after it is un-registered.
Network Prediction: Changed static initialization of FNetworkPredictionModelDefRegistry's singleton to avoid issues with static initialization happening out of order causing registered Network Prediction model definitions to be skipped/removed. Also, made some minor adjustments to FNetworkPredictionModelDefRegistry::FinalizeTypes to avoid potential ODR issues.
Fixed an error in ULocalPlayerSaveGame::IsSaveInProgress where it always returned true even if one was not in progress.
Added an ensure to protect against missing player state crashes during seamless travel.
Map placed actor Event Dispatcher duplicates:
A map placed Blueprint actor's bindings to another map placed actor's multicast delegates (including Event Dispatchers) are now cleaned up when the actor is destroyed and reinstanced.
This fixes a bug that bindings to other actors' multicast delegates accumulate when recompiling an actor blueprint. Previously this resulted in event nodes firing multiple times, increasingly when the Blueprint is recompiled.
Now return the playercontroller if found from the owner.
Network Prediction: fixed crash in smoothing service that could occur after adding more simulation objects during runtime
Fixed replication issue canceling Gameplay Abilities when destroying the ASC from the server while abilities are active.
Fixed Multiply (Compound) modifiers not calculating correctly with stacked GameplayEffects.
Prevented a crash in APlayerCameraManager when the owning player controller has been GC'ed.
Input triggers and modifiers will now properly respect the priority of an input mapping context. This fixes a bug where if you had the same input modifier class on an input mapping context of a different priority, it would always use the modifier values of the one which was pushed to the stack first.
Fixed code that removes ?listen from client URLs to work correctly with # options as well.
Ensured that the "SlateApp.GetModifierKeys" function will return the correct values when called on platforms using GameInput to process keyboards.
Fixed OnBlendComplete not being broadcast in Standalone (non-networked) games.
Find-in-Blueprints: When a BP member variable is a struct, its members' default values are now searched and returned as results. Map keys are not supported yet.
Chaos Mover: Fixed floating point precision error in ChaosMoverStateMachines's fixed delta time calculation.
No longer restarts a camera animation blend out when reaching the blend out time if we were already stopping.
Fixed DefaultToInstanced subobjects breaking on blueprint duplication.
Fixed instanced subobjects, including DefaultToInstanced classes and UPROPERTY(Instanced), breaking when a blueprint class with instanced subobjects got duplicated.
This fixes the following editor actions which previously resulted in data loss:
Duplicating blueprints with user defined instanced subobjects.
Duplicating blueprints with GAS attribute set DefaultSubobjects.
Player Input: Fixed a bug where if you had an input component whose outer was a subobject of the currently controlled pawn, the input component would be processed twice.
One example where this could be a common issue is within the "Modular Gameplay Framework". Users would add a UInputComponent to some UActorComponent, and then call "PushInputComponent" on the owning player controller. This would result in the UInputComponent being processed twice.
This would happen because in "APlayerController::BuildInputStack" it calls "GetComponents" on the controlled pawn, which would return the UInputComponent which had already been pushed to the controller's input stack, thus adding it twice to the stack for processing.
Enhanced Input: Do not load platform-specific override data on post load of the platform settings. If you are referencing an object that is in a plugin, this will just fail anyway and does not improve any sort of loading behavior.
Fixed an incorrect Deleter being used on FGameplayAbilityTargetData when calling FilterTargetData, and exposed FGameplayAbilityTargetDataDeleter for this purpose.
Use this deleter when creating an FGameplayAbilityTargetData using FMalloc, such as in UAbilitySystemBlueprintLibrary::FilterTargetData.
When creating TSharedPtr to FGameplayAbilityTargetData which was created with FMemory::Malloc, please use the FGameplayAbilityTargetDataDeleter
Deprecated:
Deprecated the "Speech Mappings". These speech mappings were originally added to support Hololens, which is no longer a supported platform and can be removed.
Removed the deprecated functions on the camera manager, GetCameraCachePOV and GetLastFrameCameraCachePOV.
GAS: Deprecated StackType to make it private in the future, use new accessors instead.
Mass
New:
Added time-slicing with FMassEntityQuery::FExecutionLimiter to limit execution to a set entity count.
Added a Mass command for grouping entities.
Mass Debugger:
Added "Open In Query Editor" button to all query displays in the debugger.
Added handle-based sorting of entities on the Entities tab.
Completely overhauled breakpoints with new types, filtering, hit counters, session to session persistence, copy-paste.
Added query editor UI with load/save and copy/paste support for authored queries.
Added Fragments view tab.
Added new "Selected Entity" breakpoint filter to break for whichever entity is selected in the gameplay debugger or debug UI.
FMassFragmentRequirements and FMassEntityQuery are no longer UStructs, which they were never supposed to be.
Added observers locking to commands flushing. This change results in batching observers calls, significantly reducing the number of individual observers executions (~20 times in CitySample).
Added MassQueryExecutor to unify the functions of MassQuery and MassProcessor and create a foundation to remove dependency on UObjects for Mass processing in the future.
Simplified Mass data access with templated UE::Mass:FAccessors collection.
Added a way to fetch base-typed fragment views from Execution context while providing the actual, specific class with a UScriptStruct pointer.
CFragment concept now checks whether types are std::is_trivially_copyable and if not emits errors requiring users to manually mark fragment types that are not trivially copyable.
The goal is to educate fragment creators about good practices and point out fragments that might accidentally violate the requirement.
Deprecated FMassBatchedCommand::Execute as a const function and introduced non-const replacement named `Run`.
Unfortunately a new name had to be introduced since the constness of the function is the only thing that's changing.
Added a temporary construct to MassCommandBuffer to statically detect commands that still implement the deprecated virtual Execute in an attempt to make it easier for people updating their code to notice the change.
The construct will check at compile time all the pushed commands of known types and statically assert if the command type still overrides the deprecated `Execute` function.
Entity Builder API extension, supporting use of an arbitrary "element" type and having the builder figure out what kind of an element that is and store it appropriately. Additional changes:
Fixed FEntityBuilder::AddInternal implementation to not add duplicated instances of a given element type if one is already present.
Added creation context to the deferred path, to ensure the fragment values are already set when the observers kick in. This was already done in the synchronous path, so this change addresses the inconsistency
Added a couple of functions to MassEntityManager, that deal with types passed in as UScriptStruct, and pass the argument to the appropriate function, based on the type (Tag or Fragment).
Mass Command Buffer API extension:
PushUniqueCommand: the function lets callers add a hand-crafted command. Use it to push commands that you don't want to get merged with other commands of the same type.
AddTag and RemoveTag: added versions that take an array view of entity handles.
DestroyEntities: Added a version with rvalue ref parameter.
Added FMassFragmentRequirements::AddElementRequirement that can be called at runtime with UScriptStruct.
It will add the provided type to Fragment or Tag bitsets, depending on the type represented.
Added FMassRepresentationParameters::Identical to implement logically-correct FMassRepresentationParameters instances comparison. The operation by design ignores CachedDefaultRepresentationType and CachedRepresentationActorManagement.
Added a way to ask a MassCommandBuffer about its host thread.
UMassVisualizationTrait can now be configured to not check mesh descriptions for validity which can be used to procedurally populate trait instances.
Bug Fix:
Fixed inconsistencies between single and multi-threaded deferred command flushing in FMassProcessingPhase::ExecuteTick.
Modified the occasionally failing ensure condition in UInstancedActorsData::OnInstancedActorDestroyed and provided it with more comments and a message to emit.
Properly handle shared fragment hash collisions.
Mass puppet actors now get destroyed immediately when the puppet is destroyed.
Fixed configuration issues of FMassProcessingContext created in UMassSpawnerSubsystem::DoSpawning for running initializer processors.
The original configuration was flushing commands if any have been issued, but did so in a way that forced flushing of all the system's commands accumulated up until that point. That resulted in different behavior in entity spawning depending on whether there were initializers for a given entity available or not.
The new configuration results in keeping the behavior consistent, regardless of initializers presence, which is to not flush commands and if any are issued they will be appended to the main buffer when FMassProcessingContext goes out of scope.
MassGameplay:
Fixed a crash when a mass representation actor is destroyed while mass simulation is active.
Fixed a teardown crash in MassAgentComponent.
Fixed a situational crash in UMassRepresentationSubsystem on world teardown.
MassAgentComponent changes to update EntityHandle-to-actor mapping in MassActorSubsystem when dealing with a player-owned component.
The change fixes an issue with GameplayDebugger's Mass category not being able to display info on the player-owned entity. A tiny change to the category removes the friction when doing that (no longer requiring the transform fragment to display data).
Fixed an issue in FMassEntityQuery::ParallelForEachEntityChunk stemming from the code not taking into consideration that ParallelForEach's workers can be moved between threads.
If that happened and the query was run with `bAllowParallelCommands == true`, then the command buffer would complain about being used outside of the thread of its creation. The fix is updating the thread ID of the command buffer whenever it's picked up.
Now sorting observer processors to utilize UMassProcessor.ExecutionPriority.
Fixed FarmTest to not crash on PIE:
The existing implementation is crashing since the changes to processor initialization have not been applied there.
This issue is limited to the farm-test, due to the custom and legacy way of setting up and running processors.
Fixed standalone-game IA uses by properly talking to ServerInstancedActorsSpawnerSubsystem, which fixes some IA representation issues.
Also, ServerInstancedActorsSpawnerSubsystem has been fixed to `FinishSpawning` actors only once their IAComponent has been configured.
Marked UMassCapsuleTransformToMassTranslator as "game-thread only" to avoid data races when the observed component is modified in game thread as the data is being accessed by the processor.
Networking
New:
Implemented RPC state stomp detection which can detect state buffer writes between quantization and serialization. The cvar to control this is net.Iris.RPC.ServerStompDetectionEnabled which is false by default.
Support Iris when using NMT_JoinNoPawn and NMT_JoinNoPawnSplit.
Adding an FSocket::ReleaseNativeSocket for use with native socket API's (e.g. asio). Using this new function inside the TraceAnalysis' FDirectSocketStream to support cases where we want multiple connections, not just a single connection (e.g. a multi-server capture).
Iris
Implemented seamless travel support. If seamless travel support is not needed for a project the cvar net.Iris.AlwaysCreateLevelFilteringGroupsForPersistentLevels can be set to false to avoid unnecessary overhead of filtering objects in the persistent level.
Optimized polling to only poll objects/properties that are marked dirty.
Added some async loading failure debugging cvars:
net.Iris.AsyncLoading.FailPackageName Name: fails async loading all packages containing the package name.
net.Iris.AsyncLoading.FailNextLoad 1: fails the next async load regardless of the name and resets the cvar.
net.Iris.AsyncLoading.FailAllLoads 1: fails all loads until the cvar is set to 0.
Gracefully handle reaching the end of the bitstream even if it's unexpected. The behavior is controlled via cvar net.Iris.ReplicationReader.GracefullyHandleReachingEndOfBitstream.
Added better logging when handling end of bitstream issues. Reset the read journal when deserializing huge objects.
Added a NetDriver command for printing out all of the actors registered for replication (generic replication system only).
NetEmulation:
Added netEmulation setting to simulate buffer bloat on game traffic.
Set PktBufferBloatInMS for outgoing packets and PktIncomingBufferBloatInMS for incoming packets.
Ex: 'netEmulatation.PktBufferBloatInMS 1000' will apply 1sec of buffer bloat on outgoing traffic.
netEmulation.BufferBloatCooldownTimeInMS can also be used to set a cooldown period between each buffer bloat occurence.
Ex: 'netEmulation.BufferBloatCooldownTimeInMS 2000' means buffer bloat is not applied for 2secs after a buffer flush.
Added a "BufferBloat" emulation profile that enables buffer bloat of 400ms (in and out) over an 'average' emulation profile.
Added metrics to measure the performance and behavior of the multiserver proxy.
Multithreaded Iris Polling Step:
FObjectPoller can now kick off multiple FReplicationPollTasks, each of which processes a subset of the ObjectsConsideredForPolling array.
This is set to process cache line sized Chunks in an interleaved pattern so that each task gets a roughly balanced amount of work, and we avoid false sharing the same cache line.
Also supports the ForcePoll flow if PushModel is disabled.
Added NetBitArray ForAllSetBitsInRange function to facilitate iterating over different parts of the same Array inside each task.
FNetTypeStats now supports threaded access through the use of ChildNetStatsContexts that are used during parallel phases and then accumulated into the parent context at the end of a frame.
Configuration is done at the ReplicationSystem level so that we can enable it just for GameNetDriver on the Server.
We define a flag called bIsInParallelPhase which is true whilst the FReplicationPollTasks are running, and is used to protect against non-thread-safe access during this time.
Added capability for Networking Iris Polling phase to be run in parallel. This can be enabled by adding bAllowParallelTasks=true to the ReplicationSystemConfig
MultiServer:
Refactored LaunchMultiServer script. Users can now derive from it to add their own features.
The -ProxyGameServers command-line argument can now accept a port range. This helps with launching multiple servers on a single host, so you can just use 127.0.0.1:9001-9025 for 25 servers.
RemoteObjects: Now reschedules aborted ServerReplicateActor calls rather than retrying them.
Fixed an issue where UActorChannel::ReplicateActor did not account written bits in one of the paths
Renamed RepNotifies CSV stat to Generic_RepNotifies to better distinguish between Actor Channel based replication (generic) and Iris replication.
Added support for closing child connections in the net driver and closing connections on the multiserver proxy.
Added mutators to UNetworkMetricsDatabase functionality.
Mutators can be added to UNetworkMetricsBaseListener and get a chance to process input metrics every frame. They report an output metric to their owning listener on the listener's reporting interval.
Use mutators to aggregate metrics that are set more frequently than a listener's reporting interval. Basic mutators for min, max, and average are provided.
Added server-side network metrics for RawPing values across all client connections.
Added support for actor replication relevancy when using the multiserver proxy.
The multiserver proxy now shares a single NetGUID cache and objects are cached on the proxy when migrating between servers.
Bug Fix:
Fixed a crash which could occur if an actor channel was removed during replay playback scrubbing.
Iris:
Fixed bug with FastArraySerialzierFragment if using not replicating items.
Fixed bug where FGameplayAbilityTargetingLocationInfoNetSerializer would not properly call FreeDynamicState.
Fixed bug that could prevent a default subobject from receiving a large RPC.
Fix edge case with prioritization causing a crash.
Fixed issue where dirty status of new subobjects created from PreUpdate of objects was masked out.
Now resets NetBitStreamReader between batches to get correct read journal entries and clear overflow status.
ObjectProperty class type is now validated property when serializing object references.
Fixed a bug where initial state was not applied when beginplay() was dispatched for world from AGameStateBase::OnRep_ReplicatedHasBegunPlay.
Fixed a bug that allowed adding subobjects to torn off root objects.
FScriptInterfaceNetSerializer can now handle blueprint implemented interfaces.
The ObjectReplicationBridge's AddDependentObject method will now prevent circular dependencies.
Fixed bitstream corruption that could lead to disconnects.
Can now pass zero size to FNetBitStreamWriter's InitBytes method.
Network:
Added UE_FAST_ARRAY_COMPILE_LOG_LEVEL that enables a program to control the compile time verbosity of LogNetFastTArray logs.
Since this class is templated the logs in the functions are unique per implemented class so it can grow the amount of the log static strings if they are left compiled-in.
Fixed issue with FObjectReplicator's CanSkipUpdate with net.PushModelSkipUndirtiedReplication enabled.
Made a change in UNetDriver::IsLevelInitializedForActor to avoid iterating over net connections if the actor we are evaluating has the correct world, or if the actor it is not a player controller
NetDriver:
Fixed ping updates discarding higher ping values when multiple Acks were received in one packet.
For example this caused ping values to stay low during BufferFloat occurrences.
Added RawPing metric that tracks the highest ping value received every frame.
RawPing will not change if no packets are received or the incoming packets contain no new Acks.
When using Iris replication, objects that have a spatial filter set at runtime will now always use their correct location for filtering calculations.
When using Iris replication, actors and subclasses without explicit FilterConfig overrides in ObjectReplicationBridgeConfig will now be filtered based on their relevancy flags like bAlwaysRelevant.
Previously these actors were treated as always relevant regardless of their bAlwaysRelevant flag.
Deprecated:
Removed error prone SetConnectionFilter API from UReplicationSystem. Use exclusion groups instead.
Deleted UNopNetObjectFilter. It's been superseded by UAlwaysRelevantNetObjectFilter which has identical functionality.
Deprecated GetSubobjectsWithStableNamesForNetworking function
Level Design and Art Tools
Geometry Core
New:
We now use the fast cluster simplifier for convex decomposition's pre-pass simplifier (since the main use case is to make the decomposition faster).
Geometry Core: Added morph target attribute as a core dynamic mesh vertex attribute.
Added path intersection & difference.
Added a ReparameterizedCloserToWorldFrame to the GeometryCore TOrientedBox3 class.
Added a CreatePerVertex method to dynamic mesh overlays, as a faster alternative to the CreateFromPredicate() method in the per-vertex case.
Added a vertex -> single triangle method to dynamic mesh, as a faster/more-convenient path (vs e.g. using a vertex->triangles iterator to get a single element).
FDynamicMesh3 queries now optionally take an inline-allocated array for local vertex-neighborhood mesh queries.
Added optional scale factor to DynamicMeshUVEditor::ScaleUVAreaTo3DArea utility function.
Added option for geometrycore's MeshBoolean to report the source mesh of each result triangle.
Added option for the Mesh Boolean to take a custom 'inside mesh' function, per mesh.
[GeometryCore] Delaunay 2D iterative update support.
Added a version of Expand() to FAxisAlignedBox3 and FAxisAlignedBox2 that takes a vector.
Segment Tree: - add option to build the tree with an array of segments - make use of the filter function that's passed in as an option.
Bug Fix:
We now reset the UsedCount on a moved-from RefCountVector, so it is left in a valid state (and e.g. a mesh will not fail CheckValidity after being moved from).
Made the implicit morphology generator not hit an ensure() when passed an empty mesh (and still return an empty result).
Fixed the dynamic mesh color transfer method handling of non-compact meshes when biasing element positions, and simplified the lerp-toward-centroid logic used.
Fixed static mesh's LOD -> dynamic mesh conversion handling of non-compact polygon group IDs
We need to compact these IDs so that they correspond to static mesh section indices, which all our tools and geometry script processing expect.
Improved performance of MeshRegionGraph operations:
Region merging transfers known neighbor information, rather than recomputing it.
Less redundant validation on internal operations.
Less redundant array searching when building neighbors.
Added api exports to the OBJMeshUtil methods so they can be called from other modules.
Made MeshConvexHull's grid sampler exit when mesh bounds are empty, to avoid ensures on grid w/ zero cell size.
Fixed dynamic mesh CompactInPlace creating a triple-sized TriangleEdges array + add coverage for this case in CheckValidity, and guard against this kind of error breaking AppendWithOffsets.
We now do not leave unused vertices in the cluster simplifier mesh result mesh.
Fixed incorrect transforms on GeometryCollectionToDynamicMesh converter, and added more comments to document the expected coordinate spaces for these meshes.
Fixed crash in implicit morphology offset operation due to offset grid dimensions overflowing int32.
Fixed a possible crash in algorithms that use the sparse solver wrapper, by properly handling failed factorizations.
Geometry Script
New:
Added various oriented box functions to geometry script, to create and query / test intersections and convert to meshes.
Added an OBB containment function to geometry script (matching what simple collision fitting does, but exposing the found oriented box directly).
Improved geometry script's CopyCollisionMeshesFromObject support for complex collision.
It now supports any type that implements the IInterface_CollisionDataProvider interface, and specifically should now work better with Skeletal Mesh Components and Spline Mesh Components.
Added a 'select occluded from outside view' jacketing method to geometry script, to have more controllable occlusion operations (e.g. from specific directions, for specific material IDs/parts of mesh, w/ transparent tris).
Also, cleaned up the detect exterior visibility function logic to support the new options and be a bit faster / more robust.
Added target edge length QEM and cluster-based simplification methods in geometry script.
We now more consistently use the term "Connected Islands" instead of "Components" when referring to connected pieces of a mesh in Geometry Script nodes.
Filled out geometry script list conversion extract/set methods for the various list types: Scalar, UV, Vector and Color.
FOrientedBox is now exposed to Blueprint.
The 'debug' pins in geometry script are now hidden in the Blueprint graph
Geometry script now supports standard MikkT tangents in the Compute Tangents node, on platforms where the MikkT library has been compiled (i.e., win/mac/linux).
Bug Fix:
Added Vertex and Triangle ID validation to geometry script Mesh Query methods so users do not crash on querying an invalid element ID.
Made dynamic mesh pools safer to use from a non-game thread.
Fixed the output param display name for GetMaxMaterialID.
In geometry script asset creation methods, we now test that the paths for new assets are valid before attempting to use them.
Fixed a bug with "AppendXWithSimpleCollision" geometry script methods where repeated calls of a script could accumulate extra copies of the collision shape, because blueprint re-uses output reference objects across script invocations.
Removed requirement that patch unwrap mesh be non-compact.
Fixed issue where Geometry Script would maximally simplify a mesh if "Simplify to Tolerance" was run with a tolerance of 0.
Deprecated incorrect geometry script perlin noise node, and added a corrected v2.
Landscape
New:
No longer visualizes disabled landscape patches.
Now sorts landscapes alphabetically when multiple landscape actors are editable in landscape mode.
Changed the landscape Collapse Layer tool to use selective render weightmaps code instead of intermediate render code.
Added weightmap support for edit layer selective renders.
Added a GrassMap RenderEveryFrame command, to debug grass map runtime generation.
Changed landscape tools with the "Combined Layers Operation" feature to use new selective layer render code.
Stops using old "intermediate render" code and avoids polluting the persistent texture data with intermediate results. The new version is faster and safer.
Moved the Landscape feature level warning (for shader modes < SM5) from a blocking notification to a simple console log.
Landscape optimization for the editor:
No longer inspects materials for finding mobile layer names when generating mobile weightmap allocations while there's no weightmap allocations in a given landscape component in the first place.
Performance optimization when undoing landscape edits.
Added a transient landscape property to track the last selected edit layer index. Edit layer selection state is persistent when toggling between editor modes.
Removed the ability to place Landscape Blueprint brushes from the Place Actors panel.
Added all landscape brushes from the Landscape Manage - Blueprint Brush tool.
Enabled dynamic Landscape Spline control point billboard size and offset in editor.
To change the offset and size, configure Spline Icon World ZOffset and Spline Icon Scale under the Landscape Project settings.
To maintain legacy spline behavior, set CVarLandscapeSplineEnableFixedSpriteIcons=True.
Removed the Landscape Spline Deform to Landscape buttons used to update spline data for non-edit layer landscapes. With edit layer landscapes, Landscape splines automatically affect the data when a Spline Edit Layer is added.
Added API exposure for all public BlueprintCallable Landscape Patch functions.
Exposed landscape component's GetGrassTypes to Blueprint.
Added generic World Partition Landscape Builder Commandlet. Builds all landscape grass maps, physical materials, and nanite components.
Improved landscape.DumpLODs command:
Now it only displays the landscape LOD information by default and -detailed needs to be used to get the verbose mip-to-mip delta information.
Added an option to align landscape grass instances with the precise triangle normal when using jittered grid mode.
Also fixed an issue with the triangle normal calculation.
Added API exposure to virtual functions on landscape patch plugin UCLASSes so that they can be inherited from in other modules.
Remove redundant and unsafe non-blocking landscape nanite build from PreSave. No longer builds Nanite at all on auto-saves.
Added an option to Add Unassigned Blueprint Brushes in the Landscape Edit layer context menu. If a Blueprint brush does not have an assigned edit layer, the right-click context menu will include an option for re-assignment
Added a DeleteActors helper in order to let the editor's delete actors dialog run when possible but also to let actors be safely deleted without using the UI in other cases.
Added Landscape Edit Layer Context Menu customization system.
Added the ability to easily extend right-click context menu actions for custom edit layer classes.
Moved LandscapePatch plugin out of Experimental.
UX improvements:
Updated icons to landscape target layers display order methods.
Added sort type (ascending/descending) for this.
The sort/filter options have moved next to filter box within the Layers property (since they affect only the layers that are visible, these buttons should not be present when the property is collapsed).
Added a number of target layers in the Layers property header, in order to be similar to standard arrays and also the edit layers property above.
Added Collapse All Edit Layers action to the Edit Layer context menu.
Removes all edit layers and flattens the current data into the default edit layer.
Updated default spline edit layer selection behavior:
Selecting the Splines Edit Layer no longer auto-activates the Splines tool.
Double-Click on the Splines layer, or use the right-click context menu option, to toggle between the Splines Tool and last active tool.
Bug Fix:
Fixed mobile landscape weightmaps not being taken into account by streaming.
Fixed a crash when auto-filling target layers from material.
Fixed height/weight alpha precision loss when merging landscape.
Fixed grid-alignment warnings when creating a landscape with more than one region worth of components.
Added refined Water Body underwater detection to avoid applying post-processing when the camera is underneath or outside the bounds of the collision volume
No longer calls UpdateResource when changing texture LOD settings for render targets. This fixes the water brush breaking landscape after switching between desktop mobile preview mode and desktop renderer.
Fixed landscape legacy weight blending potentially leaving ghost weightmaps on large landscapes.
Turned assert about landscape physical material tasks failing to complete on save into an error, since that is something that can happen if the material fails to compile.
Fixed a crash that happened when trying to clear a Landscape Paint Target Layer that was already empty.
Fixed a crash when a Landscape Blueprint brush was deleted and then restored via Undo.
Removed spurious assert when the landscape material references a texture named "Heightmap" (implicit name for heightmaps in landscape).
Fixed determinism issue when updating landscapes with conflicts on the border of landscape components that would lead to landscape proxies getting dirty in an inconsistent way.
Fixed an issue with World-Partition Landscape Proxy Nanite Materials not updating after using Undo/Redo with the Landscape Paint Tool.
Fixed invalidations of landscape physical material during painting.
The last few frames of a paint stroke could be lost because the invalidations were ignored while a physical material task was still pending.
Fixed several issues with ReinitializeHeight/Weights in landscape patches.
Fixed crash with multiple patches. The render command recorder was not stopped at the right moment: both Render and Blend operations must respect the render mode (Immediate or Recorded), which could be broken in case the renderer was grouped with another one earlier.
Fixed landscape that was not updated after having reinitialization had been executed.
Fixed a crash when the same patch is rendered in several batches. The boolean bReinitializeHeightOnNextRender does not support this and that supposes that during reinitialization, the patch is rendered in a single batch. The fix artificially increases the batch size to the entire landscape, which is wasteful, but the best we can do until the reinitialization is replaced by a proper landscape edit layer partial merge.
Fixed landscape batched merge not handling multiple weight patches (i.e. multiple target layers) being rendered on the same patch component (the render targets would cycle in between each, leading to invalid blending).
Fixed landscape patches' input area (which was the size of the patch), that would lead to needlessly large batches.
Fixed potential determinism issue with landscape patches that could theoretically render before their referenced textures are fully streamed in.
Handle null landscape patch weight entries in the couple of places where it was not.
Fixed invalid checks in landscape batched merge.
Stop over-invalidating on empty landscape components. Change to invalidating only components that added or removed weightmap allocations.
Fixed PCG refresh on undo/redo landscape painting.
Moved creation of landscape nanite's UStaticMesh out to the game thread to remove danger of threading issues.
Fixed improper blend of landscape edit layers with custom height/weight flags.
Avoided a crash if saving when FLandscapeTextureStreamingManager is not available.
Fixed a bad ensure condition when trying to cache data from an empty area in the landscape smooth/flatten/erosion tools.
Fixed a crash with the Landscape Copy Tool when attempting to copy data from an invalid or deleted landscape.
Fix deleted landscape spline points/segments coming back after duplicating the spline.
Fixed a crash occurring when saving level instances that include World-Partition Landscapes.
Fixed ctrl+alt+right click drag increasing/decreasing the landscape brush continuously even when the mouse was still.
Fixed mobile landscape data hash being zeroed when entering PIE. That was leading to all landscape mobile data being rebuilt when entering PIE while in mobile preview mode.
Fixed a landscape flatten tool conflict with undo.
Fixed landscape flatten tool behavior at the edges of geometry.
Fixed landscape painting errors when toggling "invert" during a brush stroke.
Fixed an issue with the Landscape Resize tool clearing all heightmap/weightmap data for edit-layer based landscapes.
Fixed an issue with Water Bodies automatically generating invalid collision boxes in the Blueprint editor when changing the Wave Source property.
Prevented a crash when redoing an undo of a Water Zone actor deletion.
Fixed an issue with the Landscape Resize tool using the wrong Y position offset while expanding the landscape.
Fixed the handling of changing transforms when building landscape groups.
Fixed additive blend mode for landscape texture patches.
Fixed various landscape+water new cases where it was assumed that GetWorld() returns a valid world while it's not the case when a world is deleted from the content browser.
Improved the Landscape Import/Export Exposed user experience by exposing the Landscape Gizmo location property to the Landscape details panel.
Fixed a crash updating landscape edge snapshots when heightmaps are not readable.
Fix landscape edit layers merge on Vulkan SM6.
Fixed a crash when renaming a Landscape Paint Target Layer to an invalid name. Target Layer names must be unique non-empty names.
Keep landscape patches in sync with their host landscape by upgrading them from the soft-dirty package list to regular dirty status when the landscape makes that same change.
Enabled landscape grass culling when running MRQ.
Previously we would pass an array of no camera to RegenerateGrass, which prevents all landscape grass from being distance-culled.
Instead, we now pass nothing, which leads landscape to use the streaming manager to get the current "views", one of which is the captured camera (the other, the editor).
This is better handled in the new movie render graph but at least this solves a performance issue in grass-heavy scenes. The user can now override the grass cull distance (as well as grass density) via Game Overrides settings.
Default = override + cull distance multiplier of 50, to have (mostly) backwards compatibility with the previous MRQ captures (which prevented all grass culling) The default for grass density override is false, though, also for backwards compatibility reasons.
Note that the new movie render graph doesn't have these settings since it doesn't have them for ViewDistanceScale, ShadowDistanceScale, etc. so we figured it didn't need those grass settings either.
Also added a CVar (grass.VisualLog.ShowCameraLocation) to show the camera locations used by landscape grass in the visual logger.
Now displays an error message instead of crashing when failing to import an image file to a landscape layer.
Avoided a crash on opening a scene containing the legacy LandscapePatchManager when the scene was already at the max number of edit layers. Ignore the soft limit when creating the new dedicated patch layer.
Fixed OOBB->AABB computation in landscape batched merge, which was leading to bad blend groups for landscape patches.
Fixed an issue with landscape brushes that would sometimes modify height/weight data on the border with unloaded tiles.
Avoided a crash when opening a map with a disconnected landscape patch manager, when the editor isn't ready to provide the current selection set.
Fix for Nanite landscape possibly generating invalid Nanite mesh streaming data on cook.
Added an option for landscape Blueprint brushes to tell if they require power-of-2 render targets to operate. For backwards compatibility reasons, it's set to true by default, although it's not the best option. This ensures that the water brush behaves precisely how it used to before UE 5.6
Fixed the water brush on Vulkan SM5.
Fixed an issue where Landscapes only generate Nanite for the first 64 components of any given landscape proxy.
Fix missing landscape spline meshes after undo of merger of two splines.
Now hides the landscape selector when the New tool in the Manage panel is active.
Fixed a rare crash in the landscape texture streaming manager when landscape textures are GCed while the landscape is still active.
Fixed missing updates to landscape physical material when using a material instance.
Fixed a crash using Undo operation with a Landscape Patch and Patch Edit Layer.
Landscape add component tool fixes:
Now properly generates extrapolated height data on each persistent edit layer, so that there's continuity on the corners on each of them.
No longer generates collisions on component creation because at this point, the height data is set to all zeroes (i.e. the minimum height, not the median, default height value) and doesn't correspond to what comes out of the the subsequent edit layers merge, whose readback would generate an identical heightmap hash, and would therefore not re-generate collisions. Delaying collision generation until the merge fixes this, since that's the first time the collision values would be valid anyway.
Now prevents existing neighboring components from being dirtied when adding a new component (previously they would get dirty by the simple act of caching/interpolating their height data).
Automatically apply splines after component creation, so that new components are immediately affected by the splines that overlap with them.
Improved visualizer for the component about to be added.
Prevent landscape edge fixup from running on world composition maps, where heightmap sharing is still possible.
Fixed all logs involving landscape LandcapeGroupKey and LODGroupKey.
Fixed ensure loading old landscape data with landscape.StripLayerMipsOnLoad = false.
Fixed a crash occurring after exiting a level instance with the Landscape Editor - Landscape Copy tool active.
Deprecated:
Deprecated legacy non-edit layer landscapes:
Removed all editor tooling related to non-edit layer landscapes (e.g. Landscape Retopologize Tool/XY Offset data).
Disabled the creation of non-edit layer landscapes and the ability to toggle between edit layers and non-edit layer landscapes.
When non-edit layer landscapes are loaded, an automatic conversion to an edit layer based landscape occurs. During this process, all proxies copy the existing non-edit layer data to a new default edit layer. Any existing Retopologize data is removed and the proxy is flagged as "soft dirty" with an editor viewport warning.
Removed global and local merge code and deprecated anything that was only available for this.
Since the console variable "landscape.EditLayersLocalMerge.Enable" is deprecated now, a new console command was added, to trigger a landscape layer full update (landscape.ForceLayersFullUpdate) :
With no argument: Updates all landscapes.
With arguments: Updates all landscapes whose display name (partially) matches the argument (e.g. with 3 landscapes named Landscape_0 Landscape_1 and Landscape_2, "landscape.ForceLayersFullUpdate _0 _1" will trigger an update on the first 2 only)
Changed landscape edit layers merge API from experimental to official.
Removed landscape's "intermediate render" code path.
Modeling Tools
New:
Added support for the tangents tool to choose the reference UV layer to use when computing tangents.
Added BrushValue property to the AttributePaintTool to allow users to specify the target value that is painted down rather than always accumulating to 1.0f.
Added symmetry support to the Paint Vertex tool.
The target requirements for the Inspect tool have been relaxed to support DynamicMeshProviders rather than MeshDescriptionProviders.
Modify UBoundarySelectionMechanic to be able to operate on either closed loops (current behavior) or open spans (new optional behavior).
Lattice Deformer Tool:
Modified the FFDLattice to optionally accept an oriented bounding box rather than computing one from the input mesh. This means the lattice can operate on just a portion of the mesh. Lattice computations are now all done in local space.
Added an ILatticeStateStorage interface, which enables the interactive LatticeDeformerTool to store its state in when the tool ends.
Added support for a HitBackfaces option to the MeshAttributePaintTool.
The attribute paint tool now has the option to use a more-shaded material.
Added an option to the Mirror tool to averaging normals along the weld.
Bug Fix:
Fixed a crash on attempting to split meshes w/ invalid material IDs.
Fixed an issue where the AttributePaintTool's stamps would be skewed for meshes with non-uniform scale.
Fixed where modeling tools could incorrectly change material ID assignments due to the static mesh tool target 'IMeshDescriptionCommitter' interface not finding the right material ID mapping method.
The same function is also on the Provider, so needed to be pulled to the top level for both interfaces to find the method.
Made vertex sculpt tool skip render decomp step if the sculpt mesh has no triangles (fixing ensure when tool is run on an empty mesh).
Fixed a crash in the subdivide tool. We were passing in the wrong vertex count to OpenSubdiv.
Fixed a potential crash when enabling UVLayoutPreview.
Fixed a warning about realtime mode erroneously appearing in modeling and scriptable tools modes when the editor doesn't have focus.
Fixed a potential crash in DisplaceMeshTool for meshes with invalid topology.
Fixed a GC crash with mesh element selection's usage of PreviewGeometry.
Fixed support of the 'join method' for closed curves in the Mesh Splines tool (previously always used 'square' joins).
Fixed a crash on starting modeling mode w/ an actor selected that has null components attached.
Fixed a crash when swapping from Modeling Mode to Animation Mode with Motion Trails active.
Fixed a potential crash in the ISM Editor tool.
Fixed a potential nullptr dereference crash in OnActiveViewportChanged for StylusHandling.
Fixed the OutputType properties' display name and tooltip to SourceType in the BakeVertex tool to better reflect the function of those properties.
Fixed an issue where tools in Modeling Mode and Scriptable Tools Mode would not tick if the viewport did not receive focus yet during the editor session.
Fix for crash in Extrude Path tool when creating a totally straight polyline.
Fixed a rare crash when hovering over Mesh Element Selection before viewport is focused.
Fixed Mesh Splines tool handling of duplicate start/end points generated on looping splines, which could previously cause incorrect triangulations.
Lattice Deformer Op: Fixed a check that fires when operating on non-compact meshes.
Fixed an issue where the Union tool only transferred UV Channel 0 in the result mesh.
Fixed a potential crash in TDynamicVector::TruncateBlocks for an empty vector.
Added a workaround to prevent a crash in UVAtlas.
Normal seams on dynamic meshes are now automatically hard edges when converted to mesh description, which can better preserve sharp features when the dynamic mesh is used for editing a static mesh or skeletal mesh asset.
Reduced confusion during displace tool computations by adding a slight delay to the appearance of the 'in progress' material.
Addressed a bug which displayed random gizmo orientation in local space in the PolyEdit tool.
Fixed an error in AddSingleClickBehavior and AddDoubleClickBehavior function tooltip.
Fixed the StaticMeshSelector only working on exactly StaticMeshComponents.
Procedural
New:
Added "SetWorldObject" on the PCG Data Exporter for Blueprints.
Objects can't be cast to World in Blueprints, and when doing an utility widget, Get Selected Assets returns an array of objects.
Does the cast internally, returns false if the cast fails.
Added support for skeletal meshes in BoundsFromMesh and PointFromMesh.
Deprecate StaticMesh property to Mesh property in PointFromMesh, with override alias
Added a new "Extract Attribute" node to extract any attribute from any data and domain.
Factorized code for Get Attribute From Point Index.
Get Attribute From Point Index now works with data domains too.
Added the Polygon2D data type, that represents a 2d polygon (e.g. on a plane), with an additional transform. Has some polygon specific metadata properties on both the data domain and the vertex domains.
Added Python Interop Plugin and Execute Python Script Node.
Stand up the Break Debugger debug feature for GPU nodes, and make the breakpoint conditional on inspection so that it is usable in partitioned/higen use cases.
Fixed multiple performance bugs where GPU-resident data is unnecessarily read back when passing through Change Grid Size nodes.
Added toggle to GPU nodes to trigger render captures for debugging (editor only).
Added GPU processor node for Attribute Sets.
Fixed runtime generation bug where changing Partition Grid Size setting on PCGWorldActor resulted in generated actors being leaked into the level.
Added re-nameable categories for organization in Graph Parameters + Includes Drag and Drop.
Improved priority calculation in distance and direction runtime generation policy to behave more uniformly across grid sizes and to be easier to tweak.
Note: May require re-tweaking if non-default weights were in use.
Added Generate Landscape Textures node that can generate a height map as well as grass maps from the landscape. This path does not rely on virtual textures, and is significantly more efficient than the CPU path.
Added LLM tags for tracking memory allocations.
Added a get segment node that allows the user to retrieve a segment from a polygon 2d, spline or point data, in the form of two points or a spline containing a single segment. Support negative indices (-1 being the last segment) in all cases and hole support for polygons.
Added 'Clip Paths' node to cut paths (points or splines) with clipping polygons. Supports either difference or intersection.
Add new property for data that supports elements: @Data.$NumElements.
Useful to combine with Filter Data by Attribute.
Added the concept of read-only for properties in the Selector menu to not show for output.
Applied this concept to Polygon2D properties.
Added support for property remap when converting back and forth between Attribute Set and Points
Saves adding "Copy Attribute" nodes to do the conversions.
Added option to disable default input creation for top-level graphs. Will become default eventually.
Improvements on Boolean and Bitwise op.
Boolean op now supports arithmetic types as input, still produces a bool as output.
Added operators NAND, NOR, XNOR, IMPLY, NIMPLY.
Added ShiftLeft/Right for Bitwise.
Added "AddModulo" operation in maths node.
Do operation (A + B) % C .
Useful to get the ($Index + 1) % NumPoints.
Added comma-separated tag list (override) to create target actor node.
Added polygon offset functionality (offset positive or negative, open and close holes).
Added polygon operations (intersection, difference, union, inner intersection, exclusive or, cut polygon with paths).
Added GPU implementation of Transform Points.
Added change detection to runtime generation state to throttle scans over grid cells, saving per-frame Game Thread cost.
Added 'Split Spline' node to split splines based on a few criteria (key, distance, alpha) or on a predicate on control points.
Add `IsBuilder` to Get Execution Context node.
Needed to know which component the builder was scheduling.
Added that information to the PCG Editor Module, which can be queried through IPCGEditorModule.
Add helper function to get the result from the IPCGEditorModule.
Added support for attribute curve remap.
Added a new mode in the existing attribute remap node.
Added an alias for curve remap.
Also exposed ExternalCurve for the spline sampler (with the new PCG_OverridableChildProperties).
Added a 'Spline Intersection' node that computes intersections between splines (in 3d).
Added a debug feature that repeatedly dispatches the compute graph to enable profiling, compiled out by default (PCG_GPU_KERNEL_PROFILING).
Added String Contains and Matches nodes and .Length extractor + Extractor:
.Length - Length of the string
Contains - Whether string A contains substring B
Matches - Whether string A matches string B exactly
Added Cvar pcg.GPU.FuzzMemory which initializes GPU buffers to random values during execution to help catch uninitialized data bugs and other undefined or unreliable behaviour.
Added the ability to retrieve the ray hit material with GetMaterialFromCollisionFaceIndex, instead of needing to specify a material index.
StructUtils: Added new features to the Property Bag Details View Child Row Widget:
Customizable via the EPropertyBagChildRowFeatures enum (set via metadata specifier).
New STypeSelector widget (wrapper around SPinTypeSelector) for type selection.
New Access Specifier button.
New drop down menu.
Added 'Get Asset List' node to get assets from a folder or from a collection. Can extract asset classes and generated classes when these are blueprints too.
Anim - SkinnedMesh: Exposed SkinnedAsset and TransformProvider on FSoftSkinnedMeshComponentDescriptor.
To have parity with the non-soft version.
To be used for the Instanced Skinned Mesh Spawner in PCG.
Nanite Assemblies: Initial prototype of Nanite Assemblies builder to support creating Static Meshes.
Interop plugin, as this is still very experimental.
Added specific graph cache enabled and budget CVars for editor worlds vs game worlds.
Can now override nested properties in the Static/Skinned Mesh Spawner.
Bug Fix:
Fixed multiple cook warnings arising from GPU node kernels.
Fixed bugs with CreateGrid2D and CreateGrid3D Custom HLSL helper functions where the NumRows/NumCols arguments were not used correctly.
Fixed Filter Elements by Index node's indexing issue.
Now supports Attribute Rename for Selectors and Data domain.
Improvements to Spline Mesh spawning.
Component class is now respected when spawning the spline mesh.
Added override on the component itself, if users have special fields they want to fill.
Fixed an outstanding issue in package build where the Switch and MultiSelect nodes can fail if the DisplayName is different from the real name for an EnumValue.
GetDisplayName won't return the display name in package build but the real name.
Since we use the Display name for naming the pins, we need to keep a mapping.
Fixed Create Points Sphere crash from divide-by-zero when graph params are used to set degrees to 0.
Fix bool attribute in Write to Niagara Data Channel.
Writing bool values was crashing.
Fixed bug causing Inline Constant not to respect required pin.
Fixed Per data CRC caching issue when there are N:N mappings, which was the case in some configurations of the Match & Set node and the Distance node.
Added support to call Pre/PostEditChange on objects on ApplyOnObjects.
When overriding objects with ApplyOnObject node, we call Pre/Post Edit change to have any pre/post processing to do after a change.
Fixed an outstanding bug in match and set attributes for attribute sets in keep unmatched mode.
SetAttributes metadata entry keys arguments were in the wrong order.
Can now drag and drop in the graph any asset that is a subclass to UPCGBlueprintElement.
Fixed the RemapMaterial not working if the target dynamic mesh didn't have any material.
This was breaking appending a mesh with materials to an empty dynamic mesh, for example.
Fixed erroneous readbacks and re-uploads of arrays of GPU data items that are not placed first in the compute graph's input data collection.
Texturing Tools
New:
Improvements to UCurveLinearColorAtlas.
A bug was fixed which caused nearly black negative values to become white.
TextureHeight of Atlas is now automatically set to the number of curves.
The default width of new atlases is now 64 instead of 256.
Interactive updates are now much faster.
The UV scale for sampling atlases is now fixed so that the U range of [0,1] goes from the first to last pixel center. Old atlases will automatically be updated for these changes.
Added Virtual Texture feedback and warmup support to TextureGraph material rendering nodes.
Virtual texture samples will now stream to the correct mip level before the final render.
Added a new console variable to control the warmup length: "TG.VirtualTexture.WarmupFrames".
UV Editor
Bug Fix:
Fixed localization issue for the "Advanced Transform" category label.
Fixed UVEditor launch conditions to support BP actors with mesh components.Fixed an issue where the RMB context menu would not display the UV Editor option for actors with any invalid components.
World Building
New:
Added a Save Texture to Asset node (editor only).
Added a world partition function to insert a new runtime cell transformer.
HLOD:
Support Spline Mesh Components in Approximate Mesh HLOD.
Added world partition validation to detect actors having a HLOD Layer which doesn't support that actor class. Rules can be specified using a config file and violations trigger a warning.
Standalone HLOD: Added AWorldPartitionHLODOnlyLevelInstance Actor to allow users to place Standalone HLODs in the world without having to add actual Level Instance to the world
After adding the actor to the world users can select the level for which Standalone HLODs should be loaded.
The actual level is neither loaded nor cooked. It's only used by the Standalone HLOD Subsystem to pull in the corresponding Standalone HLOD levels.
Add overridable attribute support to CustomHLSL node
Custom HLOD support:
Added WorldPartitionCustomHLODActor, an actor you can place in the world to provide a custom HLOD representation (using static mesh component).
Added a new HLOD Layer type: "Custom HLOD Actor".
Custom HLOD actors assigned to "Custom HLOD Actor" layer are injected as-is into the HLOD runtime partition.
The "Custom HLOD Actor" layer can specify a parent layer. In that case custom HLOD actors are also used to generate parent layer's HLOD representation.
Custom HLOD actors can also be assigned to other (non-Custom) HLOD Layers. In that case they are used only during HLOD generation and are not pulled into the HLOD partition themselves.
Adds a new LinkedLayer property to UHLODLayer, visible only when LayerType is set to Custom HLOD Actor
LinkedLayer is used to control the visibility of Custom HLOD Actors. They become visible when actors from the LinkedLayer are unloaded.
If LinkedLayer is not specified, Main Partition is used to control the visibility.
Added a SceneCapture node.
Added GPU implementation for CullPointsOutsideActorBounds.
Now supports overridable attributes on GPU nodes.
Added a world partition function to check if runtime cell transformers are installed.
Cell Transformer: Improved handling of components that can be ignored.
FastGeo: Moved FastGeoContainer PSO Precaching from PostLoad (GameThread) to be asynchronous.
Added grid streaming dependency mode to scheduling policy
Move PCG GPU from Experimental to Beta.
Bug Fix:
Standalone HLOD:
Fixed a crash when adding a standalone LI with standalone HLOD to a non-WP world.
Made sure that Standalone HLOD Actors are injected into appropriate containers during streaming generation.
Fixed attached spatially loaded actors not being GCed when AttachParent exists.
EDL: Fixed handling of EDL injection of client-only cells in cases when it happens after BeginPlay Removes irrelevant cells from cells lists during the injection.
Foliage Editor Subsystem: OnActorMoved optimization to avoid expensive TActorIterator operations when no work is done inside the TActorIterator loop.
HLOD: Fixed distributed HLOD builds running on non-WP worlds not doing any work.
WPBuilderCommandlet: Fixed logging when processing additional maps.
Standalone HLOD: Fixed logic that generates the list of Standalone HLOD levels returned by ShouldProcessAdditionalWorlds, to correctly handle cases where the number of HLOD Setups differs from the maximum HLOD hierarchy depth.
FastGeo: Fixed a crash on mac caused by TArray relocation of FFastGeoPrimitiveComponent which contains a FRWLock.
[Cell Transformer] Replaced references to objects that could be recreated during RerunConstructionScripts triggered from ApplyRuntimeCellsTransformerStack in Standalone Editor.
Fixed a crash while level editing. Deleting an actor inside a level instance then pressing save in the bottom of the level viewport would crash in some situations.
Media
Media Viewer (Beta)
New:
Extra keybinds for videos:
Fixed spam of updates when offset / scale was not changing.
Exposed delegates to the public API so it can be used in the image viewer overlay.
Transform lock now also duplicates media playback controls between players.
New dragging options:
Revamped dragging system a little to support more zoom types.
Added alt+rmb to zoom (in addition to scroll wheel).
Added alt+mmb for panning (in addition to left click).
Improved level editor viewport robustness:
Made sure all settings have default values.
Moved level viewport render to end of RT thread event.
Added cross-thread robustness to the pixel color system.
Media track section:
Added a media track section that lists tracks in sequencer that have a media texture.
Added the refresh dynamic group button.
Images now support yaw rotation.
Added a clear history button.
Added Snapshot category.
Bug Fix:
Fixed controls to properly display when playing in reverse.
Also added keybind info to tooltip buttons.
Media Viewer / Media Player Editor:
Added scrub event to IMediaPlayerSlider.
Integrated scrub event to allow dual scrubbing.
Fixed bug in file drag/drop for media viewer not allowing comparisons to current image.
Media Stream: Fixed for packaged games.
Fixed crash relating to viewport.
Added texture size constraints to render calls.
Fixed struct initial values.
Fixed a crash with invalid library thumbnail.
Fixed changing splitter location in single image mode.
Media Stream:
Corrected the "Add Track" button for Media Sources.
Will now always display the button, but disable it, rather than hide it, when it is not available.
Added tooltip to the button explaining what it does and when it is usable.
It is now disabled if the Media Stream's world is not the level level sequence's world.
Fixed relevancy issue for Sequencer.
Fixed Sequencer binding issues.
When locked scrubbing, the videos not being directly scrubbed is paused.
Invalid assets are removed from history when the tab is opened.
When in dual view and without an A image, the slider position now works correctly.
Fixed pixel sampling for compressed images - All pixel samples now work via a render target.
Fixed an issue with A-image not being displayed behind B-image when the slider was set to 0%.
Right click asset fix: There's now a maximum parent check for material instances
Fixed crash when 2 viewport tabs are open.
Added cross-thread hardening for pixel sampling.
Added more texture encoding types to the no-read-with-rhi list.
You now must supply a unique name when saving snapshots.
Toggling the overlay while in comparison mode no longer blocks the custom image ui (i.e. video control overlay).
Mobile Rendering
Mobile Lighting
New:
Translucent objects now receive CSM shadow when surface lighting.
Mobile Postprocessing
New:
Added EUpscaleMethod::Area and swapped in for PrimaryUpscale using the mobile renderer to reduce blurriness at low screen percentages.
Online
Crash Reporter
New:
Apple:
Unified crash dump format on iOS & Mac to crashlog
Added commandline/ini override to enable crash dump on iOS.
Upgrade PLCrashReporter to 1.12.0 and apply our existing modifications by diffing 1.8.1 vanilla & our modified 1.8.1
HTTP
New:
Added an option to enable different http versions per IHttpRequest via SetOption(HttpRequestOptions::HttpVersion).
Limit the number of concurrent HTTP requests by default. This helps avoid connection timeouts when queuing up very large numbers of HTTP requests.
Bug Fix:
Fixed Blueprint compilation crash due to mismatching pin names.
Fixed a low rate crash in HTTP requests.
Online Subsystem
New:
OSS for GDK: Propagate the checkout failure error codes from GDK APIs into PurchaseFailure and PurchaseFailureStart errors.
OnlineServicesCommon: Added TOnlineAsyncOp::GetWrappedHandle to transform the result of an operation to simplify cases where one operation is implemented in terms of another.
Added OSSv2 PSN Connectivity interface.
Bug Fix:
Fixed OnlineServicesNull handling FPartialUpdatePresenceFix FPartialUpdatePresence not merging RichPresenceString.
"ENABLE_PGO_PROFILE 1" Shipping configuration can now disable online subsystems from the commandline.
Fixed Push Event related issues
Fixed FNpPushEventWrapper::Initialize not correctly handling callbacks disposing.
Fixed OSSv1/2 FNpPushEventPushContextWrapper not handling TOptional value safely
Fixed crash in FUserManagerEOS::ReadFriendsList callback when user failed to authorize.
OnlineSubsystemIOS: Fixed a race condition that caused a purchase to fail when purchasing an offer immediately after finalizing a successful purchase of the same offer.
Deprecated:
Removed deprecated GoogleSignIn support from OSSGoogle for Android.
Platform
Linux
New:
Upgraded toolchain to LLVM 20.1.8
Added preliminary support for BuildCMakeLib from Linux.
Add -NoStripSymbols to UBT to support build systems where stripping needs to happen later in the process.
Bug Fix:
Re-enabled PreLoadScreens.
Now skips chmod +x dotnet if file is already executable. This addresses permission errors if UE is run on a read-only file system on Linux.
Fixed an issue where BuildCMakeLib can produce .so files that depend on system shared libraries.
Fixed loss of precision when FLinearColor is requested in VulkanDynamicRHI::RHIReadSurfaceData.
Updated FLinuxPlatformProcess::BaseDir to support -basedir=.
Mac
New:
Inline Ray Tracing is now available for Mac platforms running with the SM6 renderer.
Parallel translation of encoders is now enabled by default on Mac (and can be used on iOS). This gives a significant reduction in overall RHI thread time.
Compute shaders are now executed with concurrent dispatch on iOS and Mac platforms. This provides a significant performance boost when using Nanite.
Adding Metal-strip to lib processing to reduce metallib sizes (around 10% reduction).
Delete iAD framework (deprecated) from Core.Build.cs.
Mac: Included Mac MainThread in CrashContext.runtime-xml for CrashReporter.
Added support for Aliased formats to be explicitly declared enabling optimisation on Metal platforms.
Bug Fix:
Fixed tweakobjectptr debug on Mac OS.
Fixed process reaping to be non-blocking and not leaking.
Fixed an issue where on Mac/iOS SM5 uniform buffers were bound to indices that were unnecessarily high, which caused validation errors in the RHI.
Stopped the submission thread getting stuck when encountering a NotPermitted GPU error.
Fixed bug where Metal runs out of counter sample buffers.
Metal now longer breaks encoders by default when profiling, this can still be enabled with GMetalSampleComputeEncoderTimings and GMetalSampleBlitEncoderTimings.
Mac:
Fixed Cursor offset from visual because of an outdated ScreensArray when processing OnWindowDidMove, resulting from a DPI change.
Fixed MainThreadChecker issue in FMacApplication::OnWindowDidMove. Move bDisplayReconfiguring from FCocoaWindow to FMacApplication since it's not dependent on FCocoaWindow
HairStrands: Disable HairStrands rendering on Mac SM5.
ApplePlatformFile: Refactored to use the common implementation FFileHandleRegistry to support more than the limit of read-only opened files.
Changed Fatal log to a Warning when posix_spawn fails in CreateProcInternal, for consistency with Windows, and to prevent unnecessary crashing.
Fixed DPI scaling bug which could cause Mac's to render at 2x res when using PIE.
Fixed performance issue on editor start up with mdfind taking multiple minutes due to matching incorrect types.
Fixed potential bug where bindless handle could be null when retrieving viewport texture.
Online
New:
Updated GooglePlay Billing library to 7.1.1 in OSSGooglePlay
Bug Fix:
Pixel Streaming:
Fixed a crash when streaming with Pixel Streaming and a user attempts to enter text through the stream text modal on a multiline text element.
Fixed a crash in the editor when setting the streamID on the command line and streaming with Pixel Streaming.
AVCodecs: Encoding frames with VP9 can now have odd pixel width or height.
Windows
New:
Moved Win32 calls for mouse cursors off of the game thread and onto the task graph to reduce stalls on the game thread from internal lock contention that occasionally occurs.
Moved processing of mouse inputs to a dedicated thread to reduce overhead on the game thread for Windows. This is useful for mice with high polling rates, e.g. 8000 Hz.
Made Clang 20 the preferred version of Clang on Windows.
Changed thread priorities for Game, Render, and RHI threads from Normal to AboveNormal on Windows.
Increased MinimumWindowsX64TargetVersion from 0x601 (Windows 7) to 0xA00 (Windows 10) to make more functionality available directly from Windows headers.
Bug Fix:
Ensured that shared resources are created as committed resources for improved compatibility.
Changed our heap VA computation for transient resource allocations on Windows to fix D3D12 call failures on some GPUs.
Fixed FWindowsPlatformMisc::SetEnvironmentVar to unset the variable if it is null or "", just like on Mac and Linux, and .NET 8.
XR
New:
Added native support for the OpenXR XR_EXT_frame_synthesis extension, including Application SpaceWarp (AppSW) on Meta Quest:
To enable, set:
r.Velocity.DirectlyRenderOpenXRMotionVectors=1 (read-only)
xr.OpenXRFrameSynthesis=1 (toggleable at runtime).
Currently only supported on the Vulkan mobile forward renderer, and cannot be used alongside features which require standard velocity rendering (such as TAA/TSR).
Added Android Runtime category tag for immersive mode selection.
See https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#appendix-android-runtime-category
AddedIOpenXRExtensionPlugin hook OnCreateHandTracker().
OpenXR XR_EXT_user_presence is now supported:
Added support for the user presence extension, which tells us whether the hmd is being worn if the platform supplies that information.
Removed the previous implementation which attempted to drive the worn state from other openxr state transitions. This had inconsistent and sometimes broken behavior across platforms.
Replace xr.MobileLDRDynamicResolution with a new CVar, xr.MobilePrimaryScalingMode, which controls whether primary scaling is redirected to the HMD runtime (which will always use spatial scaling) when it would otherwise be unsupported.
Options are:
0: Never
1: DynRes Only (default)
2: Always.
Updated device profiles for standalone XR devices. They no longer inherit from each other in sequence, and the new Android_OpenXR device profile matches the Quest 3 profile which has had its shadow quality increased for dynamic shadows to draw by default in Mobile Preview and on Device. Consider lowering this value if dynamic shadows are not required.
Improved expose passthrough support via the editor:
Added a new UENUM for environment blend modes, EOpenXREnvironmentBlendModeUpdate SetEnvironmentBlendMode() node to accept EOpenXREnvironmentBlendMode.
Added a new GetEnvironmentBlendMode() node.
Added a new GetSupportedEnvironmentBlendModes() node, which returns supported blend modes in an array in order of runtime preference (highest to lowest).
Added a new IsCompositionLayerInvertedAlphaEnabled() node.
Added an xr.OpenXRInvertAlpha checkbox to the OpenXR plugin settings.
Added an r.Mobile.PropagateAlpha checkbox to the Engine->Rendering->Mobile settings
Renamed OpenXRHMDSettings to OpenXR Settings, since it controls settings for the entire module.
OpenXR is now building for all platforms:
The platform specificity of the openxr plugins and modules was problematic because content derived from these would not load on non-xr platforms for projects that are meant to be cross platform.
OpenXR is not actually platform dependent. It can be implemented on any platform. If it is present as a fully independent openxr runtime a small amount of platform specific code is needed to implement an openxr loader.
It is also possible to create an unreal plugin which either acts as an openxr runtime or is able to find an openxr runtime.
The plugins are still disabled by default.
Bug Fix:
Removed permissions not allowed by Quest App Store.
Fixed various debug draw elements failing to render when using Instanced Stereo or Mobile Multi-View:
r.VisualizeOccludedPrimitives
ShowFlag.Bones
DrawDebugBox and other similar calls, excluding DrawDebugString.
Fix a bug where late update camera movements were not accounted for when calculating scene visibility, causing smearing, latency, or other artifacts when some rendering features were used.
Fixed GetHMDData TrackingStatus field:
It was only checking if the hmd device tracking handle was valid, needs to check if the hmd is actually tracked.
It was also attempting to use the camera position rather than the hmd tracking position.
Removed GetMotionControllerData and FXRMotionControllerData which were deprecated in 5.5.
Added handtracking permissions for Quest.
Fixed OpenXR AddProfile for input always being given true rather than the passed in bHasHaptics parameter.
Fixed a crash when using the SteamVR runtime with Vulkan.
Fixed MetalViewport SubmitImmersive: [IOGPUMetalCommandBuffer setProtectionOptions:]:585: failed assertion `setProtectionOptions: with uncommitted encoder'
Fixed Visionos cp_frame_query_drawable null handling:
We abandon the frame if the drawable is null, this indicates that the app is either being paused or exited.
Essentially we just continue the frame but don't call the cp_ functions.
At the beginning of the next frame we handle the state change.
Deprecated:
Deleted the formerly deprecated functions from 5.3 to remove references to the UPlayerMappableInputConfig type.
Platform Mobile
Android
New:
Added -FastIterate flag to Visual Studio/Rider/Quick Launch, to have libUnreal.so outside the APK, and made build iteration faster in general.
Added -AndroidStudio flag to GenerateProjectFiles that generates a Gradle project that wraps around the original Gradle project that is suitable for use in Android Studio.
The Android Vulkan detection logic now uses the same VkApplicationInfo parameters (e.g. App name, Engine version) as used by the VulkanRHI initialization, so graphics drivers that need to opt out of Vulkan for Unreal Engine apps can do so consistently.
Implemented support for factoring screen rounded edges in computing the safe zone. The implementation means users can align the safe zone horizontally or vertically to the rounded edge excluded areas or to an average of both.
Additionally, cleaned up current safe zone implementation to determine size relative to the main view instead of the display as the system may reduce the main view to exclude cutout areas.
Constrained kotlin stdlib dependencies to >= 1.8.0 to fix building issues.
Recompiled libopenxr_loader with 16kb page support based on NDK 27.2.
Removed need for security token for debuggable applications when using AndroidFileServer with UnrealAndroidFileTool.
Added warning if a library on Android is not 16kb page size compatible.
Removed bashrc/bash_profile related code, instead using zshrc for Mac as primary source of environment variables.
Report resident size of "libUnreal.so+base.apk+[anon:.bss]+[anon:linker_alloc]" as ProgramSize on Android.
Report resident size of all memory mapped files as MMIO on Android.
Tag all virtual memory with "UE" VMA tag on Android.
Added the vkquality 1.2.2 library which can be used as another data point as to whether to select Vulkan or OpenGL ES.
The result of the vkquality check is returned in the SRC_VKQuality that can be queried by the Android device profile selector rules.
Updated AutoSDK "MinVersion" to NDK r27c.
Improved AndroidFileServer (AFS) file transfer - retries and resumes for file push to device.
Resolves potential sync issue that leaves the EditBox non responsive to text input and the keyboard in a state where it doesn't get dismissed its the 'Done' button.
Additionally, replaced setVisibility with add/remove View to work around an Android level spam issue when keyboard is repeatedly dismissed/invoked.
Improved Android Camera Player with the Android Camera2 APIs and support for Vulkan frame data processing.
Default NDK is updated to r27c, buildtools to 35.0.1, bundletool to 1.18.1.
Recompiled libopenxr_loader with 16kb page support based on NDK 27.2.
Replaced libhwcpipe with C wrapped .so to avoid C++ STL ABI conflicts on Android.
Now starts loading libUnreal dependencies early for faster startup time
Created Android-arm64/x64 configs in Visual Studio.
Made Quick Launch now build an x86_64 binary when launching on x86_64 devices, such as the emulator.
Lowered Android SDK "MaxVersion" to NDK r28c, due to NDK r29 compiler bug.
Update GooglePAD to 1.15.4 / 2.3.0.
Added engine device profiles for Mali-G1-Ultra and similar devices.
We now detect devices using the ANGLE OpenGL ES driver and use the Vulkan deviceName string for SRC_GPUFamily. This means the device profile Vulkan selection can continue to match the same string as used when the device is in native OpenGL ES mode.
Bug Fix:
Enabled desugar for older Android support.
Filtered out AFSProject task if running it from Gradle (prevent second run).
Ensured java sources are wiped when FirebaseEnabled is toggled off. Otherwise, source files are left behind that don't compile as the Java dependencies don't get populated by the plugin when FirebaseEnabled = false.
Additionally, registerBuildSettiings for the Firebase settings referenced from the plugin's UPL.
Fixed the timing of firing the MediaOpened event in Android Camera Player.
Fixed the issue that the Console Command input is disabled when "Show Launch Image" is off in Project Settings.
Ensured keyboard OnTextCommitted messages are dispatched when using Android improved virtual keyboard.
Ensured nativeKeyboardInputResult is invoked when keyboard is dismissed and keeps the reference to VirtualKeyboardWidget valid until the result is handled.
Corrected issue with file locking in UnrealAndroidFileTool for writes.
Fixed black screen when playing start movies.
Added a watch for deletion complete before database close in Fetch2 (part of background downloading).
Moved early load sync point to prevent possible crash due to an ordering issue.
Made NDK toolchains detection for manual SDK installs more robust.
Made JAVA_HOME environment setting for manual SDK installs more robust.
Added missing setting of ndkPath to Gradle property value
Fixed generated install scripts with overflow OBBs that are broken on non-Windows
Updated Breakpad dump_syms with version supporting compressed symbols.
Added catching of UnsatisfiedLinkError in GameApplication.LoadLibraries, in case some other ClassLoader has already loaded them
Fixed the WebView freeze when switching the game to the background while loading a URL.
Fixed VersionScriptFile not being created robustly, sometimes causing build failures.
Worked around a Gradle bug whereby when only assets change, it attempts to patch the existing APK from previous packaging by adding asset deltas resulting in growth of the final APK payload. Workaround is detection of changes to assets and wiping the existing APK to force Gradle to repackage it correctly.
Fixed a Java exception when closing the Camera Device during initialization.
Fixed the "Play On Open" feature for the Android Camera Player.
Fixed the keyboard EditBox layout on devices with cutout when the cutout area isn't used.
getWindowVisibleDisplayFrame returns a rectable in screen space, however, the edit box coordinates need to be provided in the main decor view's space.
As such, translate the results of getWindowVisibleDisplayFrame to the decor view's space by translating these by the decor view's screen position.
libGPUCounters: Android early crash fix libGPUCounters is built with statically linked libc++, exposing a bunch of std symbols, which override those in libUnreal.so.
For example, it overrides std::to_string leading to an early crash:
Other plugin calls to_string (uses libGPUCounter implementation and its operator new & memory alloc).
That string is later destructed, using engine's operator delete.
Our allocator fatals on unrecognized pointer.
The fix is to add a linker version script to the libGPUCounters build and only expose C API related symbols as global.
Updated Android TargetSDK Fix templates with AFS configuration.
Updated Fetch2 3.3.0 with new version of androidx.room 2.7.1 (used for background downloading).
Added detection of SQL lock error on enqueue (can happen after deleteAll in Fetch2 background downloading).
Added new dump_syms_comp.exe supporting compressed Symbols for Android use.
Fixed an issue with assets with starting offset other than 0.
Made MakeApk do a clean during packaging if EnableBundle is flipped between builds.
Fixed crash from pending JNI exception in non-Shipping builds, when skipping over checks.
Now round rather than truncate Android getRefreshRate when converting to integer.
Fixed the freeze of Android Media Player playback on Xiaomi 13T or devices with a similar chipset.
Fixed TargetSDK 35 compatibility issues with background downloading.
No longer requests WRITE_EXTERNAL_STORAGE permission if TargetSDK doesn't support non-scoped storage.
Ensured that keyboard dismissed isn't called when the text input is accepted by the Virtual Keyboard's done key or a physical keyboard's enter key.
Additionally, ensured that on dismissal of the virtual keyboard, text entry type is Canceled so that text committal only triggers if the widget is configured with behaviour 'Text commit on Dismiss'.
iOS, tvOS, and iPadOS
New:
IOS: Notification about network path characteristic FIOSPlatformMisc::OnNetworkConnectionCharacteristicsChanged can be used to know about network characteristic changes, e.g. knowing if a new connection is constrained or expensive.
Re-enabled SetBytes and SetBufferOffset on iOS and enable on tvOS.
Added support for Xcode26.
The IOS rotation code now defers applying a new rotation until after we have rendered a new frame in the new orientation, for both auto-rotation and programmatic orientation selection.
This fixes the issue with a squashed aspect ratio when the user rotates the app at a time we cannot immediately render a new frame, such as during loading.
Now ask for background time on iOS until all delegates called from applicationWillEnterBackground are invoked.
Disallowed resolve of R32F MSAA targets as this format isn't MSAA resolvable in Metal.
Additionally, make the texture memoryless as we'll never be resolving to it.
Exposed network changed delegate for iOS.
Implemented functionality for -MetalPSOCache=use.
Bug Fix:
Deferred handling of notifications if the engine isn't ready to receive.
Occlusion Query Helpers now correct the number of frames for Metal mobile platforms.
Ensured valid URL for pipeline cache save location.
The current invalid URL generated was invalid as it was constructing a file URL using the absolute string of another URL as a path parameter to the constructor, causing MTLBinaryArchive->serializeToURL to crash when used.
Now store webauth credentials in iOS keychain using a key that does not change after uninstalls.
Fixed some memory leaks in the iOS web browser.
Rendering
Architecture
New:
Virtual Texture:
Renamed "r.VT.Support16BitPageTable" to "r.VT.PageTableMode".
The setting can now be modified live at run time instead of being read only.
Also removed "r.VT.SplitPhysicalPoolSize" which now corresponds to setting "r.VT.PageTableMode=2".
Unified mip color debug display for Virtual Textures.
"r.VT.RVT.MipColors" is deprecated and Runtime Virtual Textures now respect "R.VT.Borders" which other Virtual Textures already use.
"r.VT.Borders" is no longer on/off. The value now sets the debug border texel width.
Also added "r.VT.Borders.Mip" which isolates the mode to a single mip level.
Release/Recycle Virtual Texture spaces after they are unused for some time.
We don't release immediately to avoid cases during loading where this might trigger unnecessary Recreate/Resize work.
The old behavior was to never Release/Recycle unless we ran out of space slots.
Added "r.VT.SpaceReleaseFrames" to control this. The default is to release after 150 frames. Setting to -1 will return to the old behavior.
Changed draw behavior for selected meshes which only write to Runtime Virtual Texture.
Previously we would fully show those meshes on selection (they are hidden in the main pass otherwise).
Now we only show the selection outline.
Runtime Virtual Texture:
The display name of the "Virtual Texture Builder" (also sometimes previously known as "SVT") asset is now "Streaming Runtime Virtual Texture" (i.e. SRVT). This avoids confusion with Sparse Volume Texture (SVT).
It can now be created from the content browser.
Now prevent StreamingTexture from being carried over when duplicating a RVT component (Save As, copy/paste...). This avoids the common mistake of using another map's SRVT after a Save As.
Added optional Z-increment parameter to FPixelShaderUtils::AddRasterizeToRectsPass, in order to control the Z of the quads (Z = quad index, i.e. instance id * ZIncrement). Combined with depth test enabled, this enables making the rasterization deterministic in case of overlapping quads.
Bug Fix:
Runtime Virtual Texture preload requests now work for the adaptive page table case.
Fixed programmatic RenderDoc captures randomly crashing.
Fixed non DBuffer mesh decals not obeying the mesh component "Receive Decals" setting.
Lighting
New:
Enabled VSM receiver masks for directional lights by default.
~10MB memory overhead (depending on settings/scalability).
Often fairly significant performance improvements in uncached cases with lots of dynamic geometry.
Disabled the selection of Virtual Textures on Rect Light components. These have never been supported in a cooked build, but were still shown in the Editor.
Exposed Max Draw Distance and Max Distance Fade Range to Blueprint.
Now store and propagate "cleared" flags to avoid reclearing pages we never wrote into; particularly relevant for receiver mask where we treat all dynamic pages as uncached but often don't write into them all.
No longer allocate unnecessary receiver mask space if local light receiver masks are disabled.
Refactored VSM ID allocation so that we can control the order more consistently. The immediate goal is to guarantee that directional lights get allocated first so that we can easily allocate receiver masks just for directional lights without the memory overhead of doing it for all local lights as well
Added TexCreate_3DTiling flag to volume textures in TranslucentLighting to reduce memory and boost performance on some platforms.
Marked r.UseClusteredDeferredShading and r.Mobile.UseClusteredDeferredShading as deprecated and added notification about future removal. Clustered deferred shading will be removed in a future release due to lack of utility to reduce maintenance burden.
Bug Fix:
Fixed incorrectly reported one pass projection overflow with megalights active. Only run VSM coarse page marking once when there are multiple views as it is view-independent.
Scale the light fade range by `GLightMaxDrawDistanceScale` to avoid lights becoming too dim at lower scales.
Lumen
New:
Enabled half res integration on High scalability (r.Lumen.ScreenProbeGather.StochasticInterpolation 2).
This can soften normals in indirect lighting, and make GI a bit more noisy.
On the other hand it saves ~0.5ms on console at 1080p, which feels like a right tradeoff for High scalability intended for 60hz on console.
Lumen Screen Probe Gather: Bent Normal Integration improvements (r.Lumen.ScreenProbeGather.ShortRangeAO.ApplyDuringIntegration 1)
Implemented r.Lumen.ScreenProbeGather.ShortRangeAO.ScreenSpace.FoliageOcclusionStrength.
Fixed EvaluateSHIrradiance which was causing brightening in corners.
Removed double AO apply during bent normal integration. Now instead of applying AO for the second time we apply only the GI approximation using AOMultiBounce, as DistantIlluminationRescale was too strong.
Clamp decoded AO as it could be larger than 1 causing too strong indirect specular occlusion.
Now support ShouldApplyDuringIntegration when Screen Probe Gather Integration and Short Range AO downsample factors match.
Fixed artifacts when ShortRangeAO is disabled, but ShouldApplyDuringIntegration is enabled.
Lumen HWRT path now supports split screen.
R.LumenScene.DumpStats 3 will now dump primitive culling information. This is useful, as it merges instances into a single entry making it easier to read the log.
Moved GBuffer tile classification out into a single pass, which is also storing opaque history for the next frame. This pass is reused across Lumen and MegaLights for better performance.
Screen tile marking optimizations, which speed up reflections, GI, and water reflections.
Tweaked default settings:
r.Lumen.TraceMeshSDFs 0 - SWRT detail traces (mesh SDF tracing) is now a deprecated path, which won't be worked on much. For scaling quality beyond SWRT global traces it is recommended to use HWRT path instead.
r.Lumen.ScreenProbeGather.MaxRayIntensity 10 - firefly filtering is now more aggressive by default. This removes some interesting GI features, but also reduces noise, especially from things like small bright emissives
Bug Fix:
Fixed missing subsurface energy by removing extra divide by PI. Now an emissive card matches a rect light reference of the same irradiance. This bug was only affecting Epic scalability (r.Lumen.ScreenProbeGather.IrradianceFormat 0 path).
Fixed a bug on Mac platforms when running on SM5 using R11G11B10 for Typed UAV's causing rendering corruption.
Fix visual artifacts and out of memory reads/writes when using non power of 2 Tracing Octahedron Resolution. Now Tracing Octahedron Resolution is always clamped to valid input values.
Nanite Skeletal Mesh now supports bHasRayTracingRepresentation, so that those primitives can be skipped from Lumen under certain conditions.
Fixed landscape culling stealing the r.Lumen.DiffuseIndirect.Allow's on changed callback. This is not needed anymore since this CVar's callback already invalidates all components, including landscape ones.
Fixed tile artifacts on indirect specular on cloth pixels in the same tiles as hair pixels
Don't reset temporal history on SceneTexturesExtent change. Sometimes SceneTexturesExtent can change due to inline view rendering (like water) which causes full history reset and results in visible noise on screen until things converge again.
Skip creating RGS when Lumen is disabled from the PPV volume.
Materials and Shaders
New:
Added an asset registry tag to find material instances causing shader permutations.
Enabled Virtual Texture sampling on Volume material domains.
Changed the interpretation of the PreSkinned Local Bounds material node when used on Instanced Static Mesh. Previously it was the bounds for the entire component. Now it is the bounds for the mesh instance.
Added platform cached ini value to determine whether to compile 128 bit base pass pixel shader variations on platforms which require them. These are infrequently needed and turning them off can save 50k shaders / 15 MiB at runtime r.128BitBPPSCompilation.Allow (default is true, for backwards compatibility).
Improved error messages reported by shader conductor to properly identify where individual error messages begin and end (and so ensure each compile error is reported on its own).
Disabled the ZoomToFocus behavior when creating a usage node from the declaration - No longer zooms the focus of the editor since this was visually jarring for the user.
Optimized material instance post-load in Editor builds by directly hashing the portions of shadermap ID used to construct the unique asset name, rather than constructing the full string representation then hashing.
Added a Base field to Material Parameter Collections, which can be used to derive one collection from another, with the derived collection inheriting the base's properties.
Added support for overriding a material's parameter collections with derived collections in material instances.
Material scalar parameters can now optionally select an enumeration object to use for selecting scalar values by name in the material UI.
Added default initialization of fields of FMaterialEnumerationEntry.
Added function APIs to MaterialEditingLibrary to manipulate the new Enumeration material parameter.
Reworked ShaderDebugData output to unify the "worker input" and "direct compile" debug mechanisms:
Removed r.ShaderCompiler.DebugDumpWorkerInputs cvar; always dump a valid worker input file for all jobs whenever debug info is enabled.
Moved writing of this file into job completion callbacks alongside the other debug artifacts, so will be written out for cache hits if r.ShaderCompiler.DumpDebugInfoForCacheHits is true.
Modified these files to not include a copy of the compressed source, instead using the .usf artifacts.
Renamed "direct compile" mode to "debug compile" and made it use this file instead of needing to serialize extra data into the debug .usf file.
Removed the r.DumpShaderDebugWorkerCommandLine cvar; all jobs will export a DebugCompileArgs.txt file containing the commandline that can be used to run SCW in debug compile mode by default.
Modified shader pipeline compile jobs to export a single worker input file (in the first stage's debug folder).
Each stage of a pipeline will export their own DebugCompileArgs.txt (for convenience, so if only a single stage fails you can still navigate to that stage's debug folder and run the job from there).
The debug compile for any pipeline stage will run the full pipeline job (so compilation always matches what happens in the normal context) with paths modified to be relative to that specific debug folder for convenience (so when downloading debug output from another machine, only one path in the commandline needs to be fixed up to run)
When using the Material Editing Library of functions, now always refreshes the material instance editor when changing material instance parameters.
This fixes a bug where you would set a MI parameter via a python script and the MI Editor wouldn't update the properties panel to show the newly updated value.
Automatically call UMaterialEditingLibrary::UpdateMaterialInstance() whenever a parameter on a instance is set via the library.
UMaterialEditingLibrary::UpdateMaterialInstance should try to find any open material instance editors and tell them that the material instance has changed.
FMaterialInstanceEditor::NotifyExternalMaterialChange now calls `Refresh()` which will update the whole editor, including the property window, to properly reflect any parameter changes made by the library.
Inconsistency fixed on Comment Bubbles on Material Editor:
To ensure visual consistency new Comment bubbles created use the same color value as the other node editors, like Blueprints.
Material Editor: Added two experimental custom output nodes `Motion Vector World Offset (Per-Pixel)` and `Temporal Responsiveness` to give users a way to modify per pixel motion vectors and set how responsive the temporal history is.
Temporal Responsiveness: Describes how temporal history will be rejected for different velocity mismatch levels.
Default :0
Medium (0,0.5]
Full (0.5, 1.0].
Now, it will be used by TSR to change rejection heuristics. Translucency material can also use it to request higher responsiveness if depth is written (r.Velocity.TemporalResponsiveness.Supported=1) or clipped away (r.Velocity.OutputTranslucentClippedDepth.Supported=1).
The translucency mask generated improves TSR thin geometry quality.
Motion Vector World Offset (Per-Pixel): Works similar to the `Previous Frame` input of `Previous Frame Switch` but in the pixel shader. Regions with invalid velocity will be approximated with the current frame's offset.
This function currently supports non-nanite meshes only in non-basepass velocity write and is implemented in two passes. Use r.Velocity.PixelShaderMotionVectorWorldOffset.Supported to enable it.
Added support for customizing the file name for ShaderSymbols and ShaderTypeStats output files.
Exposed EMaterialProperty::MP_MaterialAttributes to Blueprints, Python, and the Editor UI.
This way users can use the Blueprint MaterialEditingLibrary to connect expressions to the MaterialAttributes output on the material block for materials that use MA.
Added a MaterialEditingLibrary function called RenameMaterialParameterGroup and RenameMaterialFunctionParameterGroup which bulk renames all the Group Names on many Material Parameters at once.
Changed LogMaterialEditingLibrary verbosity to include `Log` messages.
Simply loop over all material expressions that are parameters and if the OldGroupName matches change the name to the new one.
Call RecompileMaterial to force the material to recompile so MIs update through the editor.
Unfortunately the `Group` property of material expressions is spread across many different classes. To avoid checking all the different material expression types (there are 8 different UMaterialExpression classes with their own unique Group), I've opted for a property system approach that looks for the property by name.
Optimize pipeline cache to reduce single allocation size and improve performance by copying less data on resize.
Modified output of shader formats using DXC (DXIL output) to keep the reflection data in the DXIL container if the r.Shaders.ExtraData cvar is enabled. This is a workaround for graphics tools which cannot correctly re-generate reflection information from external PDBs.
Note that this bloats runtime memory usage so should only be enabled locally if you are encountering issues seeing data formats (i.e. cbuffer layouts) in such tools.
Can now copy/paste material errors in the PlatformStats panel.
Simply makes the text read-only "editable" so the user can select the text and get automatic copy/paste functionality.
Rename the aliases for the Convert node from `Make Float4` to `Make Vector4` to match "Vector Parameter" and "Constant Vectors'.
This also avoids confusion with the existing Make Float 4 Engine Material functions.
Added additional project-specific texture groups.
Vector Parameter Expression now shows output pin display names to avoid confusion on what the first output pin is.
Also fixed "Convert to Constant" for vector parameters. By default the outputs are now:
RGB
R
G
B
RGBA
Users were expecting the first output pin to be RGBA, but it was RGB.
Now shows output name on pins by default for vector parameter.
Added RGBA output as the final one to match what TextureSample does.
Updated this behavior in the new material translator (it should really use the outputs array which is already defined).
If no channel names are specified show R, G, B by default.
No longer truncates and loses user data when using "Convert to Constant" for Vector Parameter -> Constant.
Gave constant 4 expression display names so the conversion code can match outputs by name when converting nodes.
Marked deprecated virtual functions from MaterialInterface and FMaterial as final to avoid silent errors.
Modified all derived classes to override the right functions.
Improved IO performance of FinishPopulateShaderLibrary.
Added a new debug artifact (ShaderTypeStats.csv), dumped by default for all cooks to the ShaderDebugInfo folder for each shader format.
This CSV file contains permutation counts/code sizes for all shaders in the shader library, grouped by shader type.
Note that this is not directly representative of final shader memory usage since it doesn't account for potential duplication of bytecode introduced by the pak chunking step (where shaders used in multiple pakfiles will have a copy in each).
This is only intended to be used as a tool for tracking and comparing shader growth over time or between cooks.
Subsurface Profile: Improved neighborhood validation for checkerboard when enabled, less bleeding into subsurface scattering region for low res.
Bug Fix:
Virtual Texture Pending Mips debug view now takes screen scaling into account.
Fixed UMaterialExpressionParticleSubUV::Compile bug that caused the node not to use the texture object connected to the Texture input pin.
Repaired cook editor-only-data nondeterminancy in materials.
Ensured that FDefaultMaterialInstance's CacheUniformExpression is cancelled on destroy if still pending.
Under certain conditions the FDefaultMaterialInstance could be destroyed and subsequent dispatch of CacheUniformExpression would result in a crash due to a dangling reference. This replicates functionality from FMaterialInstanceResource for which this guard is already implemented.
Fixed a potential out-of-bounds read when remapping shader compile diagnostic messages; could occur if there were no digits before the end of the line in the diagnostic message after the __UE_FILENAME_SENTINEL marker.
Fixed material shader map not releasing compilation ID if shaders failed to compile.
Fixed incorrect reporting of line numbers when compile errors are encountered in generated material code.
The code calculating the line number offset of the substituted #line directive in MaterialTemplate.ush was incorrect.
Fixed a bug that could cause a retry loop when running with shader development mode enabled and a preprocessing failure is encountered.
Fixed crash in SafeRenameEditorOnlyData() when EditorOnlyCurrent is null.
Fixed a material derivative autogen crash when dealing with uints.
Fixed a crash occurring when the material parent of an instance is changed through scripting.
Fixed ShadingModel material expression in-node combobox to display only valid shading model entries.
Made a minor fix for custom ShaderTypeStats customized name, needs to lookup cvar by ShaderFormat.
Added support for Nanite Geometry Collections to Preskinned Local Bounds material node.
Fixed an issue where the Vulkan shader pipeline cache would sometimes incorrectly produce cache misses for shaders that had already been compiled and serialized.
Fixed shader output for preview/transient materials being cached in DDC.
Changed UMaterialFunctionInterface to include the BlueprintType annotation.
Removed incorrect application of the component scale to the output of World Space Vertex Normal node when used with skinned mesh.
Fixed an uncommon crash in Lerp material expression when the alpha pin was connected to a non-primitive output.
MegaLights
New:
Implemented MegaLights-driven VSM marking to only mark VSM pages that MegaLights has selected samples for.
Added the r.MegaLights.DownsampleCheckerboard, which can run sampling/tracing at half res (every other pixel). It's a good middle ground between default quarter res sampling and option full resolution sampling.
Exposed r.MegaLights.HardwareRayTracing.ForceTwoSided, which allows to flip between matching raster behavior and forcing two-sided on all geometries in order to speedup tracing.
Now always vectorize shading samples. This saves on average 0.1-0.2ms in complex content on current gen consoles.
Improved spatial denoiser filtering after disocclusion.
Limited number of samples sent towards the directional lights to a specified fraction (r.MegaLights.DirectionalLightSampleFraction). This helps with noise indoors, where there's a strong directional light inside taking over the entire sampling budget.
Now uses downsampled neighborhood for temporal accumulation. Interpolated pixels don't add much to neighborhood stats, so we can skip them, improving quality by effectively using a wider neighborhood filter. This also improves performance of the temporal accumulation pass, as it now can load less data into LDS.
Now properly handle invalid sample upsampling. Sometimes during upsampling we can't find any valid sample and need to fallback to history (without any neighborhood clamp). This makes lighting on highly detailed or thin geometry a bit sharper and a bit more stable.
Disabled guiding tile filtering and added stochastic bilinear sampling of guiding tiles in order to hide tile artifacts.
Now merge identical rays in order to avoid overhead of duplicated traces. Duplicated rays happen with strong point lights, where we may send a few identical rays to the same light doing unnecessary work.
Added screen space trace for hair (r.MegaLights.Hair.ScreenTraces). Screen space traces improve card hair quality compared to approximate RT fallback mesh, but can be noisy. In order to reduce the noise there's now extra hair only screen space trace bias (r.MegaLights.Hair.ScreenTraces.Bias).
Merged downsample factor / checkboard CVars into a single r.MegaLights.DownsampleMode CVar.
Bug Fix:
Now require ray tracing platform support, in order to skip compiling and cooking MegaLights shaders on certain platforms.
Fixed split screen crash due to out of bounds memory reads.
Fixed denoiser artifacts on borders between dielectrics and metals (bright outlines) caused by too aggressive material demodulation factors.
Nanite
New:
The dithered opacity mask option is now supported for Nanite rasterization.
Added a new culling check that can improve Nanite culling speed and reduce the amount of memory needed for candidate clusters (r.Nanite.Culling.MinLOD).
Added support for rendering Nanite skinned meshes in the animation editor.
Exposed NanitePixelProgrammableDistance for Nanite skinned meshes to enable forcibly disabling pixel programmable rasterization of Nanite when the mesh is further than a given distance from the camera.
Added experimental and optional passes to prime the HZB before VisBuffer rendering if the HZB is missing (e.g., due to a camera cut), see cvar r.Nanite.PrimeHZB et al.
The main idea is to draw a lower resolution (HZB or lower) and lower detail (by using LOD bias and/or drawing only ray tracing far field scene geometry).
This new render is then used to build a HZB with some depth bias that is then used to render the full scene, greatly improving the cost in many cases.
GeometryCollection: Added a "Nanite Minimum Residency" setting for Geometry Collection assets. This controls the number of resident nanite root pages.
Previously we used a single root page and this is still the default.
Increasing the value can avoid pop-in when a Geometry Collection is first shown.
Added support for disabling "Render In Main Pass" on static mesh components for Nanite meshes.
Bug Fix:
Fixed a bug where the World Position node would return incorrect results when used to calculate opacity in a masked material.
Automatically disable Software VRS when Nanite is not enabled, preventing it from generating shading rate images which will not be used.
Fixed a rare streamer crash that could occur when a streaming page is resident in the streaming pool while its root page slot gets reused a multiple of 256 times.
Invalid page requests from the GPU are now ignored and optionally logged, instead of potentially resulting in a crash.
Suppressed console warning spam when `r.Nanite.Visualize` is set to an invalid value.
Fixed an incorrect conservative instance draw distance test used in the hierarchical instance culling that caused missing instances.
Nanite: Fixed incorrect geometric normal when using r.RayTracing.Nanite.Mode=1.
Fixed a GPU crash that could occur when Nanite was rendering to odd viewport sizes.
Fixed a crash in Nanite primitive filtering that can happen if HLOD force-hidden primitives, or the view's ShowOnlyPrimitives/HiddenPrimitives, contain invalid primitive IDs when there are no primitives in GPU scene.
Fixed a regression where if a static mesh has multiple mesh sections of the same material, Nanite build would merge them into a single mesh section, which could cause them to be re-ordered and cause issues. Now the multiple mesh sections remain intact, but the fallback will not have triangles in the duplicated sections.
Fixed an issue where the sign of the TwoSidedSign node would be flipped for masked materials.
Fixed a crash caused by enabling a Nanite visualization mode when instanced stereo rendering is enabled.
Fixed an issue where MaxHierarchyDepth was not calculated correctly, which could under rare circumstances result in streaming not progressing beyond a certain point.
Fixed an issue where having a non-Nanite capture in the scene can cause the Nanite streamer to not get updated and result in GPU hangs.
Fixed an issue where scene captures and main view rendering would independently try to update residency, sometimes resulting in visual artifacts.
Niagara
New:
CascadeToNiagaraConverter: Can now add template emitters.
Supported read / write icons for stateless: You can now more easily see where bindings are used in LW emitters.
Added a way to release resources from render target 2D:
Changed handling of null texture to set the material default to avoid dangling references.
Removed slate dependency from emitter merging (used by python scripts), which could trip up commandlets that ran without the editor UI.
Other distribution types can now opt into indexing / address / interpolation.
Initialize particle add lookup value mode options:
Added initial look up value mode enum.
Enabled lookup on initial position.
Changed color to a distribution.
Added getter method for Niagara parameters.
Lazy instantiate parts of the baker to reduce memory usage: Added a call to tick the baker world as paused, this ensures the world manager is called to process clean up functions.
Arrays for LW distributions:
Made a large refactor to make reading a distribution a function call vs a structure.
When sampling a value needed for motion vectors pass in multiple time parameters and it will return both values to ensure random is respected.
Some limited space was added to pack indexing into the data, this can be controlled using meta data on the distribution property.
GPU storage moved to ByteAddressBuffer for LoadX operations which gave a small speed boost.
Perf on a large number of particles was marginally better vs before.
LWE:
Added support for debug HUD particle attribute display.
Added support to data set readback.
Adjusted display name for SKM / SM DIs to remove confusion between the asset types.
Changed pin color based on Data Interface vs UObject to reduce confusion.
LWE Shape Location Changes:
Added shape scale.
Fixed plane shape not applying rotation.
Added surface mode to the cylinder.
Material Parameter Collection Data Interface: You can now push scalar / vector parameters from Niagara to MPCs.
Removed UNiagaraEmitter from stateless emitter on cook.
The cooked build does not require them, various parts of the UI still make assumptions and will be cleaned up.
This saves ~4k per stateless emitter.
Added rotator distribution to stateless & use in shape location to allow the rotation to be bound to an attribute.
Fixed the axis not properly being used on the display name for each widget.
Fixed the same binding being added multiple times.
Niagara Editor Preview Actor:
Used for previewing and tuning Niagara Systems without the need to run PIE.
Has some simple default motion options which can be overridden by a derived Blueprint for more complex behavior.
Niagara Fluids: Added vector controls for turbulence frequency and gain.
Niagara Content: Added distribution curve dynamic inputs for float, vector, and vector2D types.
Weighted Distribution Int Array:
Each entry has a value & weight.
The Weight is used in the random calculation, so the higher the weight the more likely it is to return that value.
CascadeToNiagaraConverter: Added UPROPERTY() tags.
When changing the preview platform, now invalidate the cooked status.
We need to make sure everything is in sync when the device profile changes to avoid crashes inside the VM.
Added Niagara to Visuals placement menu.
Updated Stateless Rotate Around Point module:
Added coordinate space / rotation / center.
Added a CPU path for the module.
Added Debug Draw support.
Added a property to customize quick capture number of frames.
Added ID support to Sim Cache Reader.
Added wildcard name match exclusions to sim cache compare.
Validation rules can now be disabled by config file.
Added information about who is using sorting.
Added a marker to sort key generation.
Added a console variable fx.Niagara.Batcher.DumpSortedSimulations which can be used to dump to the log.
Changed the color grad editor stop time widget to use the spin box.
This allows for math operations and validation of the input data.
Dynamic Mesh Sim Cache Storage + Visualizer.
Added all base Niagara float types to sim cache interpolation.
Enabled by default can be disabled by changing bInterpolateAllTypes in the creation parameters.
This improves MRQ renders with temporal samples.
Added concurrent sim cache reading when no data interfaces are cached.
Can be disabled using "fx.Niagara.SystemSimulation.AllowASyncSimCache".
Enabled concurrent execution for fixed DT systems if it's a single tick.
Fixed a bug in the component recaching where it ran all the time in the editor.
Stateless Curve Editor Improvements:
Moved the existing LW curve editor into the compact curve editor.
Added a new curve editor for distributions which is closer to the existing curve editor.
Exposed some of the common widgets shared between the editors.
Future change will be to wrap the DI inside the distribution adapter and share the editors, which will be useful for the compact editor also
Made the FXSystemInterface sharable to fix world tear down reference issues.
In some situations an FX component can be destroyed after the world.
When the world is destroyed it will destroy the FX system set, which will enqueue a command to destroy the FX interfaces.
The render command can execute before the FX component's are destroyed leaving them with a dangling reference.
Added a setting to enable HLSL 2021 in Niagara.
HLSL 2021 features will fail to compile on the VM and on some platforms, but this allows users to experiment.
Added an enum for notify progress, none / forward / reverse.
Fixes issues around using negative rate scaling and allows the user to still use 0-1 when playing backwards.
Disable Source Mode with LWE to reduce confusion.
We don't have a particle stack so there is no way to modify the data without binding to system / user parameters.
Added console commands (fx.Niagara.Component.ReinitializeActive & fx.Niagara.Component.DeactivateActive) to allow a quick way to kill / restart Niagara components.
Cleaned up various console variables while I was here.
Niagara: Properties (Section Start Behavior, Section Evaluate Behavior, Section End Behavior, Age Update Mode, Allow Scalability) in UMovieSceneNiagaraSystemSpawnSection can now be set in Blueprints / Python.
Multiply the debug draw color by alpha so we can have translucent lines.
Now send the current bounds to the GPU for the emitter properties DI.
This makes the result of GetBounds consistent between both paths when using fixed bounds on the emitter.
Removed stateless emitters from compilation.
Previously they would still generate some HLSL data resulting in compilation when added / removed.
Cleaned up several areas that assumed Emitter Data would always be valid.
Made renderer memory savings by reducing FNiagaraVariableAttributeBinding.
Sprites 1992 -> 1320 = 672
Mesh 1688 -> 1160 = 528
Ribbon 1888 -> 1312 = 576
Light 800 -> 560 = 240
Added a rule for validating material usage in renderers.
This makes it possible to block content that does not have the appropriate usage flags set.
Niagara Content:
Added a new dynamic input to support querying values from the new Weighted Distribution Int Array data interface.
Added new modules for spawning particles from simulation caches.
Removed all the async optimize / decompression of VM byte code.
The new VM does not use this path so the code is dead.
Enabled Sub UV cutouts ES3.1.
Can now use the Niagara Data Interface to set material parameters on Material Instance Dynamic objects, from a CPU stage.
CascadeToNiagaraConverter: Add more script input types.
Added Shift+D to enable selected emitters (reverse of D which disables selected emitters).
Refactored renderer widgets to share code and use small chip
Added a menu entry when we have no stateless bindings to make it clear to the user what type we are looking for.
Added a debug draw to renderers.
Implemented debug draw for light & decal renderer.
Added column sorting to sim cache viewer.
Also cleaned up how we build the table data to make it less confusing.
Bug Fix:
Fixed issue where ParticleSystem EPSUM_FixedTime had no effect due to incorrect assignment.
Fixed validation accidentally changing usage with flags on materials.
CheckMaterialUsage will both check and set which can result in a race with shader compilation.
Use the component transform for local space vs the simulation one - When disabling requires current frame data (for performance) these could be out of sync, which mismatches other renderers on the RT (i.e. sprites & meshes)
Fixed hash function in data channel to use full string data instead of just half of it.
LWE: Set the sim target on the compiled data set to match the mode.
This fixes a mismatch that can cause attributes to not upload to the GPU when we are in CPU mode due to using the light / decal renderer.
No longer call the OnSystemFinished delegate if we are constructing Blueprints.
The delegate might interfere with the actor / components and can cause crashes.
Shader loading: Now prevent dereferencing potential nullptr when file is not found.
Fixed emitter renderer tick ordering issue when combined with LWE.
Added missing postload calls for stateless emitters.
Guarded against using EmitterData as it can be nullptr.
Fixed binding buffer changes causing dispatches to serialize on some RHIs.
Fixed potential OOB reads if a binding is invalid.
Added a lock to GPU Sort Manager AddTask to ensure no concurrent access.
This fixes a race between Niagara & Cascade adding tasks.
Now calculate spawn probability per particle for spawn rate, rather than per loop.
Fixed user variables being removed and renderers not updating correctly.
The variable was without namespace so failed to match.
Added a missing null check for the graph source that can happen during undo.
Fixed GetResourceSizeEx miscalculating for non-isotropic UTextureRenderTargetVolume.
Niagara component renderer: now only register one object replacement delegate with the CDO to prevent races during asset loading.
Added missing CanBind to user parameters.
Changed style of binding to be more consistent with other bindings.
Now sets the world time information in the baker.
This fixes things like Engine.Time always being 0.0 and material based time effects not working as expected.
Used GroupMemoryBarrierWithGroupSync with Radix Sort to fix issues on various GPUs.
No longer load niagara system when getting asset registry tags, to prevent deadlocks during emitter merging.
Disabled low latency when anything other than the lit view mode is active.
Some of the view modes short circuit rendering so the data may not be ready in time.
Fixed a crash when copying script variable metadata.
Handled null data interface inside Niagara Variant.
It is unclear how the variant DI becomes nullptr at the moment, this will at least avoid crashing the editor, but more investigation is required to understand why.
Fixed duplicating an emitter with RunUpdateScript set for interpolation mode changing post duplication to NoInterpolation.
Fixed single segment GPU ribbon UV calculations being incorrect.
Fixed a potential use-after-free on world tear down.
If the compute interface is marked pending kill we can ignore sending the command to remove from the computer interface as it will be killed before.
Fixed an asan issue using the component in the lambda.
Bring changes over for garbage references also.
Fixed incorrect stride with FRibbonAccumulationValues when using different features.
Fixed color curves not working inside NPCs when using GPU emitters.
When modifying parameters in the detail panel, now use the editor setting GetResetSimulationOnParameterChange to see if we should reset the system or not.
Disabling reset can be useful to iterate on content live.
Fixed editor undo crashing due to order being out of sync and the thumbnails.
Fixed update context killing systems that are waiting for compilation.
When switching preview modes the update context is called multiple times.
The first time it's considered active.
The next time it's no longer active but is waiting for compilation (compontent ticking) so is now removed from the reactivate list.
We now check if the component tick is enabled due to waiting for compilation results.
When setting up previous data use current if previous does not exist.
Current changing to a new position binding which does not have a previous value generated it would use the default position which is 0,0,0. Using the current value won't produce corrupt motion vectors, but will also not produce correct motion vectors.
Changed default for LOD size Y to -1 to fix issue with meshes being culled incorrectly.
A value of -1 indicates that it will never be culled by screen size.
The previous value of 2 would be adjusted to 1.0 and fail the >= screen size test if bounds were large enough.
Now uses the aliased variable when finding the default mode
This fixes an issue if the first time a variable was encountered it was in StackContext as we would ignore the binding.
Fixed a bug where min instead of max distance was used as LoD parameter.
Fixed a nullptr and weak ptr bug in error log format.
Fixed a bug when an error during script merge occurs.
Fixed memory leak in data channel object destructor.
Path Tracer
New:
Improved the adaptive sampling heuristic.
Added an option to hide the planet ground surface.
When using reference atmosphere mode, the path tracer no longer displays a large ground sphere to represent the planet for better parity with the deferred renderer.
The old behavior of showing the planet ground can be accessed by the cvar r.PathTracing.EnableAtmosphereGround.
Post-process materials can now be specialized for the path tracer.
This adds a permutation of the PostProcess Material that is used when the path tracer is enabled on the view.
This can be used to account for differences in how the path tracer creates the image. Behavior can be customized with the PathTracingQualitySwitch node.
Bug Fix:
Improved shadow artifacts in transparent shadows due to double-counting of transparent hits.
Improved startup time by moving rarely used permutations to experimental.
Fixed a crash when enabling decal normal projection.
Postprocessing
New:
Changed the EOTF for UI composition in HDR from sRGB to BT.1886 for improved parity between SDR and HDR appearance. A new CVar r.HDR.UI.CompositeEOTF was added to provide control over this behavior.
TSR:
Added an option to allow all shading models to use TSR thin geometry detection when r.TSR.ThinGeometryDetection.Coverage.ShadingRange=2.
Added exposure offset (r.TSR.ShadingRejection.ExposureOffset) back so global darkening ghosting can be improved. The value behaves a little differently and is now used to adjust the exposure offset for the reject shading moire luma and guide history. Any legacy project before UE5.5 using the old CVar should consider adjusting the value.
Updated shader selection logic for CombineLUTs to force compute shader rather than pixel shader if graphics volume rendering is guaranteed, and reduced the size of the dispatch group from 512 threads to 64 threads.
Bug Fix:
Replaced usage of PF_R32G32B32F with PF_R32_FLOAT for the ACES gamut table texture to make the implementation compatible with more platforms.
Fixed alpha invert show flag on desktop if primary upscale was active.
Fixed Bloom not working with TSR when motion blur is disabled.
Forced the invalidation of the low-res scenecolor for translucency after motion blur pass if motion blur is not run.
RHI
New:
AddEnqueueCopyPass can now be used with texture arrays.
Metal:
Refactored bindless to support new FeatureLevel & Platforms and include a per-project experimental Mac option to enable SM5 Bindless.
Upgraded Metal Developer Tools from 4.4 to 5.3
MetalCPP: Upgraded to metal-cpp_macOS15.2_iOS18.2
Bug Fix:
Fixed a bug in the PS4 renderer submission queue that delayed signaling occlusion query events.
Fixed UpdateTexture2D() failure case where the source region has an offset and the texture is block compressed.
Substrate
New:
Improved the rough diffuse shading model to minimize energy loss and improve the shaping at high roughness.
Improved legacy conversion of cloth materials.
The roughness range of cloth has been adjusted for better parity with the legacy cloth BRDF.
The specular amount is now automatically adjusted to account for the Fuzz layer being added on top of specular in Substrate whereas it was linearly blended in the legacy model.
Removed r.SubstrateBackCompatibility as we now rely on the Substrate Rough Diffuse option to drive that instead.
Set Blendable GBuffer format as default for new projects. Some archvis and automotive project templates are set to Adaptive GBuffer format by default.
Bug Fix:
Fixed most material properties not being added to FMaterialData::PropertySizes when baking Substrate materials on the Actor Merge -> Simplify path.
Simulation
Chaos Visual Debugger
New:
Improved batching of TEDS operations performed when new physics body data is loaded in the scene. This change, combined with some other improvements made in TEDS itself, resulted in ~75% reduction in the processing time when the first frame of a large CVD recording (+90.000 objects) is loaded. The stall in this particular case went down from ~12 seconds to ~3 seconds.
Added support to enable CVD recordings in Shipping configurations.
Added a new pop up notification to provide a cleared indication of when CVD is still processing trace data for a loaded file.
Added a non-blocking loading bar. This bar will appear in the status bar to indicate the loading process of very large CVD files.
Added initial experimental support for tracing smaller sections of a map instead of the entire map.
This can be configured from code with the CVD_SET_RELEVANCY_VOLUME macro or via Blueprint with the CVD Set Trace Relevancy Volume node.
Note: If a recorded body moves to outside the recorded volume, CVD will show that body frozen in time. This will be addressed in the next release.
Implemented the new view port toolbar the rest of the editor uses.
Extension System:
Added support for attaching custom data to the CVD Recording instance.
Added support for implementing 2D visualizations via CVD's component visualizer API
Improved tracing performance by removing the need for locks (and reduced the contention of ones we could not remove) in some heavily multi threaded paths. Mostly in collision geometry and physics body metadata serialization paths.
Removed connection details from the Recording status message, and moved it to its own message which is sent when needed. This reduces the message bus bandwidth usage when a CVD recording is active.
Bug Fix:
Added missing serialization for FChaosVDParticleDynamicMisc::MLinearEtherDrag.
Added missing serialization for FChaosVDParticleDynamicMisc::MSleepThresholdMultiplier
Added missing serialization for FChaosVDParticleDynamicMisc::MCollisionConstraintFlag.
Fixed an issue where attempting to trace multiple processes at the same time could fail to playback, even if the recording was successfully started.
Fixed a race condition when a CVD recording is started at the same time or right before PIE is started, resulting in a crash.
Fixed an issue where CVD's sessions manager broadcasts a session discovery ping every second, even if CVD is not open in the editor.
Fixed incorrect visualization of per particle position/velocity/projection iteration counts.
Moved iteration counts to FChaosVDParticleDynamicsMisc and added serialization version guards accordingly.
Fixed an issue where trying to load the same CVD recording twice caused an ensure, and failed.
Fixed an issue where the first frame of a recording was not automatically loaded in some scenarios, resulting in an empty scene until you scrubbed to a new frame or started playback.
Fixed an edge case where the recording controls UI could get soft locked, blocking you from stopping a recording that was just started.
Fixed an issue where QueryData was used instead of SimData, in the details customization used for Collision Geometry details panels.
Fixed an error where the Network Tick sync mode was not clamping the track tick offsets to the supported limits in some scenarios.
Fixed an issue where recorded destroyed particles were not being properly removed from the scene.
Fixed a crash that could happen if you play a CVD recording while it is still loading.
Cloth
New:
Added a ReferenceSpace local damping option to Chaos Cloth. This enables local damping about the reference space bone instead of the existing center of mass option.
Updated ChaosClothAsset and ChaosOutFitAsset to use SoftObjectPaths internally to better handle renamed dependent assets such as the Physics Asset.
Updated Chaos Cloth to internally use FNames instead of FStrings for properties. This fixes a long-standing performance regression when setting simulation properties at runtime via the cloth blueprint interactor.
Added the ability to specify the ReferenceBone for a cloth asset.
Added additional accessory meshes for chaos cloth.
Updated the backstop constraint to be able to use this accessory mesh.
This feature is considered experimental.
Cloth Remesh Node: Can now transfer vertex weight layers to output cloth render mesh.
Updated Chaos Cloth and Skeletal Mesh-based cloth to better handle non-simulating LODs.
Fixed a bug where chaos cloth could stop simulating if there was a non-simulating LOD sandwiched between two simulating LODs.
Updated Skeletal Mesh-based cloth to no longer tick cloth for non-simulating LODs when cloth is present on other LODs.
Chaos cloth debug draw improvements: Added wind velocity and updated gravity display.
Bug Fix:
Fixed an editor crash which could occur when remeshing a chaos cloth asset with Long Range Constraints.
Fixed issues with Kinematic Collider and Skinned Triangle Mesh, these were regressions from implementing Skinned Triangle Meshes in Chaos Cloth in the last release.
Kinematic Collider was using previous frame's positions for its constraint Apply causing it to lag behind and not fully resolve collisions.
Kinematic Collider debug draw was broken due to an indexing bug.
Added ClothCollisionThickness parameter on the SimulationCollisionConfigNode was not setting the correct string, so it wasn't being used.
This fix for this will not affect existing assets (ClothCollisionThickness will be set back to 0 to retain existing behavior).
Cloth Render Node: Now populate all UV Channels for output.
Fixed CorrespondClothAssetIndex never set in BindToSkeletalMesh, since checks are stripped out in Shipping.
Cloth Remesh Node: use the DynamicMesh UV layers to determine how many UV channels should be on each render vertex in the output ClothCollection (so that we don't accidentally add 4 channels when the input only has 1, for example).
Core Physics
New:
Partial Island Sleep:
Added a console command to enable partial island waking when the user explicitly manipulates the transform of a rigid body ("p.Chaos.Solver.Sleep.PartialIslandSleep.PartialWakePreIntegration").
Added a console command to enable rigid body waking based on the velocity change introduced by the velocity collision solver ("p.Chaos.Solver.Sleep.PartialIslandSleep.PostStepWakeThreshold").
Added a console command to restrict partial island sleep to collision constraints only, i.e. rigid bodies connected by other constraint types will have to be both awake or asleep ("p.Chaos.Solver.Sleep.PartialIslandSleep.CollisionConstraintsOnly").
Added console command to enable the propagation of impact momentum though the physics constraints to determine with the purpose of waking rigid bodies in partially sleeping islands ("p.Chaos.Solver.Sleep.PartialIslandSleep.MomentumPropagation").
Introduced a Blueprint event to enable or disable partial island sleep for the entire island a rigid body is in ("Set Allow Partial Island Sleep").
Improved performance by limiting partial island waking to scenarios with any sleeping rigid bodies.
Added a console command to only enable partial island sleep if the decimal percentage of motionless rigid bodies is above a user-defined threshold ("p.Chaos.Solver.Sleep.PartialIslandSleep.MinimumMotionlessRatio").
Added generic AddElem function for AggGeom and helpers to access the correct containers based on input element type.
Added SetUseMinTimestep function in Immediate Physics API.
This makes it possible to avoid switching to a fixed timestep when the delta time is small, bypassing the cvar p.Chaos.ImmPhys.MinStepTime
Added a new p.Chaos.MinParallelTaskSize cvar and CVarMinParallelTaskSize function to set a threshold of tasks to run in parallel, which can improve performance on low-core platforms.
Enabled some p.Chaos cvars (like p.Chaos.MaxNumWorkers) in Shipping so they can be used to tweak game-specific performance.
Enable some physics cvars (like p.Chaos.MaxNumWorkers) in Shipping so they can be used to tweak game-specific performance.
Added support for setting CollisionEnabled per ISM body.
Exposed functions for calculating covariance matrix of a set of points and retrieving the dominant eigenvector.
Added a per poly collision setter function to SkeletalMeshComponent.
Moved several shapes from Chaos to ChaosCore.
Added an option to treat default as simulated for RBAN.
Bug Fix:
Enforced drive linear force limits when non-linear joint solve is enabled.
Fixed SphereTraceComponent not returning the hit FaceIndex when tracing against complex shapes.
Fixed an issue where AddForce related methods did not generate wake events in some scenarios.
Now detect and remove null constraints from CCD swept constraints prior to application.
Fixed collision behavior when converting from probe to nonprobe.
Optimized allocation in cable mesh building
Chaos: Fixed wrong rotation axis when using simd for linear joint solver.
Fixed an occasional crash when unwelding rigid bodies.
Fixed a physics bug where unwelding via socket name failed to unweld. This could lead to a crash when the parent body was destroyed and a query was performed against the child.
Fixed FKShapeElem copy constructor accidentally changing the CollisionEnabled flag instead of copying it.
Dataflow
New:
Double clicking on a Dataflow variable now finds the related nodes in the Dataflow graph and sub-graphs.
Dataflow construction views are now generally more performant for large meshes and allow render data caching.
Added transform support to dataflow rendering geometry groups.
Added capsule rendering support to the rendering facade.
Updated the weight map tool in dataflow to more closely match the UI of existing painting tools.
Dynamic mesh processor blueprint can now optionally specify that it is ok to run async.
It is now possible to edit some of the bool / int / float non-connected input parameters inline on Dataflow nodes.
Added a 'Cut Planes' array input to the PlaneCutter dataflow node, to support directly specifying the cutting plane(s).
The Geometry Script based Dataflow node now exposes the Geometry script parameters out to the Dataflow node as connectable inputs.
Added general array Dataflow nodes for getting an element or reading the size of an array.
Dataflow can now automatically add a node to auto convert from an output type to an input type.
Added an option for dataflow FilterPointsWithMesh node to filter by mesh min/max distances in addition to inside/outside winding number test.
Added a general dataflow selection -> index array conversion node (so that e.g. one can iterate the selected indices).
Added support for root proxies for Dataflow based Geometry Collection asset.
Enabled construction view rendering for most of the geometry collection Dataflow nodes.
Added a generic version of the math Clamp dataflow node.
Dataflow variable nodes can now be used directly in Subgraphs.
Added the possibility to promote a dataflow input to a variable ( right click menu ).
Geometry Script based dataflow nodes will now open the Geometry Script blueprint when double clicked on.
Dataflow now show an array pin icon for array types.
Added a Dataflow node to set a string transform attribute and to select from a string pattern.
Added dataflow nodes for conversion from an index or index array to a dataflow selection.
Support "Only Same Parent" option for TinyGeo "Merge Geometry" mode (and corresponding dataflow node).
Added Dataflow nodes for getting bounds from static mesh and dynamic meshes.
Added support for setting up root proxies in Dataflow.
Added a Dataflow node to set the dynamic state of geometry collection bones.
Updated the Dataflow Editor to better handle Save As by reconnecting the newly created derived assets (e.g., Dataflow Asset) to the main asset.
Added display of performance data for Dataflow subgraphs.
Optimized the Dataflow collection spreadsheet ( up to 25x for large collections ).
Added Box, Capsule and Convex simple builders as geometry generators for dataflow physics assets.
Added support for manipulating bones from the Dataflow Edit Skin Weight tool.
Added Fov and planes options to the view menu in both Dataflow simulation and construction views.
Bug Fix:
Fixed crashes due to incorrect selection init for some dataflow fracture nodes.
Expanded out fracture brick pattern bounds by a half-brick, to fix bricks not quite covering the intended bounds in many cases.
Made the collection->mesh dataflow node take an optional selection and perform the conversion more consistently with the collection selection->meshes dataflow node.
Changed the dataflow 'show/hide inputs' menu to use the localized display names instead of the internal source code names.
Add correct struct handling to dataflow context cache to support nested UObject references.
Made blueprint dataflow nodes default to evaluate on the game thread, for safety.
Added guards against selecting invalid indices. Now returns false instead of crashing on attempting to set an invalid selection.
Fixed Dataflow graph not re-evaluating when switching from manual to automatic evaluation mode.
Made sure Dataflow nodes performance data is recorded per node even when the data is not shown on screen.
Fixed the Dataflow Selection by Level Node to make sure the level attribute exists in the collection.
Fixed "append collections" dataflow node not updating transform indices correctly.
Fixed array support for Dataflow subgraph inputs and outputs.
Fluids / Smoke
New:
Added default drag for accurate integration.
Added support for landscape proxies.
Drag model updated buoyancy tests make sure physics assets for rafts computes mass with the correct material.
Added water, spray, foam shading improvements, translucent spray particles
Refactored capture modules in sw emitters to handle overhangs in terrain with better controls rework summary views.
Bug Fix:
Fixed spike artifacts by only advecting to wet cells. This can avoid issues where we advect into steep areas that we shouldn't be.
General Physics
New:
Added a way to reset the state of a geometry collection (from Blueprint or live from the editor with a button in the component details).
Added the ability to incrementally create new cache collection assets each time a Chaos cache records.
Exposed Chaos cache observed component functions to Blueprints.
Geometry collections can now be converted to Skeletal meshes (right click on the asset or in Dataflow).
Added a way to start and stop a Chaos Cache from Blueprint.
Added API for generic sweep traces (Sphere, Boxt, Capsule and Raycast) on the physics thread.
It is now possible to query a geometry collection leaf bone using a line trace from Blueprints (FindLeafTransformByLineTrace).
Added asset user data support to physics assets.
Added support for override materials for geometry collection root proxies.
Bug Fix:
Creating a Chaos cache from the main menu can now be undone.
Fixed Chaos cache not recording events properly after the cache was recorded once.
Fixed Chaos cache not properly replaying simulations of geometry collection using root proxies.
Geometry collections with no materials are now assigned a default material. This prevents issues where the geometry collection may have weird rendering artefacts.
Fixed spawned geometry collections not properly using the physical material set on the asset.
Fixed a crash in the geometry collection SetLocalRestTransforms method happening when the rest of the collection is empty.
Fixed Chaos Niagara interface not playing trailing events properly.
Fixed Nanite based geometry collection not replaying properly from a Chaos cache.
Fixed geometry collections not properly waking up when applying velocity.
Fixed force based local fields not working properly when applied to a geometry collection.
Made sure gravity settings are propagated to cluster unions or cluster group unions.
Fixed geometry collection anchored and other attributes being stripped when using strip on cook on Nanite based geometry collection.
Fixed Chaos cache not properly restoring Simulate Physics or notify break flags when deleted or when removing an observed component.
Fixed geometry collection local field not properly working with partial clusters when using minimal resolution.
Fixed an issue with geometry collection Nanite fallbacks not rendering when enabled and when Nanite is disabled in editor.
Modular Vehicles
New:
Added an additional input quantization mechanism.
Networked Physics
New:
Made improvements to how and when RewindData caches physics states along with fixes for KinematicTarget resimulation.
Optimized NetworkPhysicsSettings memory footprint from padding and alignment.
Added a NetworkPhysicsSettingsDataAsset and converted the NetworkPhysicsSettingsComponent to reference the DataAsset instead of holding all settings in memory for each actor instance.
Added the first iteration of Iris support in the NetworkPhysicsComponent with a new base struct for inputs and states along with a new interface for custom implementations to communicate with the NetworkPhysicsComponent.
Scheduled Physics Thread command lambdas with resimulation handling.
Added new settings and features to balance simulated proxies and post-resimulation corrections.
Option to trigger a resim when receiving new inputs.
Option to apply input decay curve over a set time instead of over the remaining resim frames.
Option to decay post-resim error in render interpolation exponentially, with a half-life setting.
Bug Fix:
Fixed an issue where inputs can get dropped when the server input-buffer runs empty because only the latest received input gets injected at the front of the buffer.
Fixed an issue where input wouldn't be produced for locally controlled pawns not using a player controller.
Fixed Geometry Collection and Cluster Union post-resimulation render interpolation issues with stuttering and rotational calculation.
Added fixes for inputs getting lost.
Tools
BuildGraph
New:
Added the Boolean attribute ReportOnExecution to report diagnostics during execution of a step. The name list attribute ReportOnNodes is used to limit which nodes will report diagnostics during execution.
UnrealGameSync
Bug Fix:
Fixed an issue where Update Settings would fallback to Horde when changing theme even though Perforce was previously selected.
Virtual Production
Compositing
New:
Marked HoldoutComposite plugin as hidden, since it was deprecated & renamed to CompositeCore.
Changed the default Lens Distortion rendering mode of the Lens Component to use the Lens Distortion Scene View Extension.
nDisplay
New:
Removed a dependency on legacy Composure.
Bug Fix:
Improved stage geometry mesh generation to mitigate deformities when geometry edges are near the mesh equator.
Fixed an issue where the ICVFX window would throw a failed assert when -rhivalidation was used.
Performance Capture
New:
LiveLink:
Added a LiveLink Broadcast Component. This component currently allows streaming LiveLink data for Transform, Camera, and Skeletal Mesh data. Adding a broadcast component will create a LiveLink subject that automatically rebroadcasts data from the component.
You can now synchronize a Virtual Subject rebroadcast to one of its subjects.You can enable this through the "Sync Subject" option on Virtual Subjects.
Live Link Hub:
Added a playback mode, which is a compact view of the playback widget. Keyboard Shortcuts for Recording Playback
Left / Backspace: Step back one frame (hold to scrub backward).
Right: Step forward one frame (hold to scrub forward)
Space / Enter: Toggle pause Added a "Select Recording" button when no recording is selected, which opens a pop up window with the recording list.
Added support for config autosave.
Refactored the discovery mechanism to enable seeing all clients without connecting to them automatically.
Added a crash recovery mechanism that attempts to restore the last autosave after launching following a crash.
Note: When launching multiple Live Link Hub instances, this system will only allow crash recovery for the first session that was launched.
Added Client filtering and filter presets support.
Added more information to the discovered clients list (IP, Hostname, Project, Level).
Aja: Updated Aja SDK to 17.5.0
Users can now choose what class of prop component to use. Default is the native version but users can override with their own derived class for uses such as building custom constraint behaviours.
Added a delegate to emit when a Live Link subject's bool bIsEnabled is modified. Required for Performance Capture workflow to respond to subjects being modified in the Live Link client panel.
Removed Mocap Manager requiring all spawned characters to be a ACaptureCharacter actor. All ASkeletalMeshActor classes can now be set to the CaptureCharacterClass property in a PCapCharacterDataAsset.
Changed CaptureCharacterClass member type in UPCapCharacterDataAsset from TSoftClassPtr to TSoftClassPtr.
Relocated the Performance Capture properties under a 'Performance Capture' details category for ACaptureCharacter actors.
Improved PIE/SIE usability of the stage manager and the outliner.
Cleaned up unused nodes in mocap manager EW.
Refactor of LiveLink data pausing:
Moved all calls from the individual actor components (performer, prop, retarget) to simple pausing the LiveLink data on the LiveLink client.
Subjects that are paused can still be recorded in Mocap Recorder.
Pausing a subject will update the pause state in the UI in all locations.
Subjects that go invalid will no longer be removed from Record Manager. Only subjects that are disabled (requires UI interaction with Live Link panel to accomplish) will be disabled from being recorded.
Removed tracking what's paused and what's enabled from the LiveLinkEval struct and renamed to LiveLinkVisual. The array of this struct in the viewmodel now only keeps track of what subjects are being visualised.
All calls to determine a subject's state or enablement go to the Live Link Blueprint function library functions.
Introduced the functionality to calculate a dynamic prop offset via Blueprint native function (dynamic constraint).
Added Function library to query IK Rig and Retargeter properties at run time for calculating dynamic constraint.
Improved handling of spawning custom props actors from the PCap Prop data asset.
Added runtime module for -game sessions.
Refactored actor, actor component and animinstance classes into new runtime module to enable running tools/actors in -game session.
Added redirectors to new class locations.
Updated plugin description to aid discoverability in the plugin browser by including text referring to Mocap Manager.
Enabled Mocap Manager retarget tuner and prop offset widgets to run in PIE/SIE.
Added F keyboard binding to focus on Pcap UMG viewport actor.
Mocap Manager Viewmodel now caches the initial state of Take Recorder settings and reverts them to the initial state when closing Mocap Manager.
Users can now select a folder for their PCap data.
Can now be a Content Plugin path or a game content path.
Now creates a session template per project as part of the first-run workflow, removing dependency away from Engine/Plugin content.
The session template is now unique per uproject.
Did a full pass on all Blueprints, setting namespace to PerformanceCapture on all assets, to prevent functions leaking into the function palette when they're not wanted.
Added Hide actor in-game button to outliner, only visible during a multi user session.
Added missing delegate for when a Live Link subject is added.
This is needed for Virtual Subjects.
Added OnLiveLinkSubjectAdded delete to the PerformanceCaptureSubsystem.
Now remove illegal characters from the filename of created Skelmesh when using Live Link subject name as the basis for the new asset's name.
Improved scaled performer mesh workflow:
Now uses poseable mesh component to shuttle live link transforms to the new skelmesh.
Added ability for user to a freeze the pelvis bone above the origin.
Added bone picker so users can choose which bones is the pelvis
Auto find the pelvis bone function executed on invoking the panel.
Warning if the bones in the given skelmesh do not match the Live Link data.
Modified the bone visualizer to work with any actor containing at least one skinnned mesh component. Always defaults to the first found skinned mesh.
Removed pausing/unpausing of render in the main level viewport when starting the custom UMG viewport. This was negatively impacting prop line up workflows when the user wants to use both viewports.
Added exclusion list of components to the Take Recorder permission list User Asset data object and a function to audit a Take Recorded actor's components in the motion actor row of Mocap Recorder.
Users can now filter recording on component names.
Bug Fix:
LiveLink: Added multi-select for subjects, so you can pause multiple subjects at once.
Live Link Hub:
Added a column that displays the translated role for a subject (hidden by default).
Fixed Live Link Hub resetting timecode and genlock upon exiting, even if these options were not enabled in the Hub.
Can now pick an interpolation processor if transmitting evaluated data is enabled.
Pause subjects when pausing a recording so they appear as valid on UE clients. Dragging the playback slider will no longer pause recording on end if the recording wasn't paused.
Added a prompt to verify if the user intends to close the hub before closing.
You can turn off this behavior by changing the "Confirm Close" option in the LiveLinkHub settings.
Fixed a crash when launching a game in shipping configuration with Live Link Hub plugin enabled.
Fixed potential Multiuser crash caused by emitting change to take recorder metadata during recording. Emit is now gated behind bIsRecording=false.
Retarget character mesh will now tick and update pose on the same frame as the perforrmer source mesh.
Prevented base mocap mesh getting set to null after creating a performer.
Prevented character name getting set to null when creating a character data asset.
Prevented pre-requisite cycle when SourceMesh == ControlledMesh because FComponentReference wants to set default to first skelmesh component on the owning actor.
Fixed crash in Performer mesh creation if the chosen skelmesh has no valid skeleton assigned.
Fixed session missing message after first-run creating the base PCap datatables.
Fixed Motion outliner UI getting invalid information from the level when assets have been deleted which the mocap actors reference.
Fixed bug with mesh visualizer in Performer mesh workflow not clearing the mesh from the viewport.
Fixed bug where Live Link recording subjects aren't refreshed when subjects are removed from the record manager.
Fixed a bug in the Mocap Manager picker widget preventing excessive calls to the asset registry during Take recording.
Deprecated
Deprecated the SourcePerformer, RetargetAsset and bForceAllSkeletalMeshesToFollowLeader properties on ACaptureCharacter in favor of the same properties on URetargetComponent.
Deprecated the AdditionalMeshes property on UPCapCharacterDataAsset.
Rendering
New:
Exposed linear versions of the UE emulation color spaces in OpenColorIO plugin config, useful for tonecurve inversion for example.
Fixed lens distortion material default support for packaged games.
Tools
New:
Live Link Hub:
Store external plugin paths in a versioned directory that reflects the plugin ABI (e.g. "%LocalAppData%\UnrealEngine\LiveLinkHub_5.7"). Outside of an installed build, the workspace Engine/Config directory is used instead.
Added "auxiliary channel" endpoint negotiation. It's now possible to register a channel type handler with ILiveLinkHubMessagingModule, and initiate a channel request to a known client using ILiveLinkHubClientsModel.
Fixed not properly replaying tracks that had inconsistent framerate or data.
A track's timestamps are now always used when seeking to frames across tracks rather than only relying on qualified frame time conversions. For efficiency we still convert the desired frame time to a track's local frame time first which often puts as at or near the desired frame.
Timestamps are now saved and loaded in bulk, rather than with each frame. For old recordings the file is iterated once to load the timestamps, which can be slow.
Added an Upgrade feature which will force load the entire recording into memory and then save it to a new file, providing users a way to convert old animations to the new format, and decrease future load times. The recording list will now specify if a version is outdated or not. If a recording is outdated a context menu option "Upgrade Recording" will be available.
Fixed multiple event fires when committing a scrubber change via spin boxes.
Fixed a crash when exiting the app while streaming frames.
Added extendable data for Productions.
User defined UStructs can be registered as extended data types and are displayed in the Production Wizard.
This data is saved with each Production in the default engine configuration file (Engine.ini).
User defined customizations can be registered for the Production Wizard for registered extended data types.
User defined 'User Settings' tabs can be registered to the Production Wizard.
Added a Tracking Alignment Tool into the Camera Calibration plugin. This tool aligns two tracking spaces together by calculating the aligned origin transform of one of the tracking spaces.
Remote Control:
Made behaviors rearrangeable in the RC panel.
Added Select Source button to the action list
Also added icon to right click on exposed property right click menu.
Changed "in use" visualisation for properties to a background color similar to selection.
Added indication of whether a property is bound to a controller.
Added support for enums and additional struct types.
"Fill path from selected asset" now looks for selected exposed properties if there are no assets selected.
Added a stateless controller button.
Revamped path behavior.
Added the "controller" category .
Changed entity bind numbers over to runtime objects.
You can now select bound action sources.
Switchboard:
Updated the BP OSCListener to use the TR subsystem in all functions. Now all calls to get take metadata use the Subsystem so it can be used without take recorder being open (Mocap Manager)
Start and stop recording now uses the subsystem and will open a level sequence by default to keep the behaviour the same as previous when triggering start record from SB.
Removed some debug prints that snuck in during the dev process that don't help the end-user.
Added an experimental "Use Fast Sync" option to Source Control Settings.
This enables incremental sync functionality in sbl_helper.py.
In the case where the currently synced changelist is known, and we are syncing ahead to a future changelist, we can pass a revision range to the Perforce commands involved in order to achieve a potentially dramatic speedup (reductions from >3 minutes to <30 seconds were observed in large projects internally).
Perforce changelist dropdown refresh now occurs asynchronously, avoiding attendant UI hitches/hangs for long-running Perforce operations.
sbl_helper.py now explicitly maintains workspace sync state in JSON files in the engine/project directories; this is more reliable than the previous mechanism which relied on `p4 cstat ...#have`.
Additionally, if the workspace is "dirty," this will be indicated by an asterisk next to the changelist indicators in Switchboard.
Added a button to the progress dialog to interrupt population / refresh of the asset cache, which can take a long time in large projects.
Can now pass command line arguments to specify the Unreal Editor OSC server address and port.
Added a setting to optionally the Live Link Hub device to suppress the crash recovery dialog following an unclean shutdown.
Take Recorder:
Root cinematics path can now refer to both content and plugin content.
Made Take Recorder Source types public. Sources that weren't already exported now are. This is for consistency since all sources were previously exposed to Blueprints.
Fixed custom time dilation failing when bStartAtCurrentTimecode is true and sequencer is disabled.
Added a command line flag to bypass source control checks when joining a Multi-user session. The new command line arg is -CONCERTSKIPSOURCECONTROLCHECKS.
Motion Design:
Text3D:
Hid the Text3DCharacterTransform from the "add component" list to avoid being added to the new Text3D.
The UText3DLayoutTransformEffect is the new approach to handle per character transform, and keep components to migrate properties to newer systems.
Adding LocationBegin in LayoutTransformEffect to adjust starting offset.
Recycle components instead of creating/destroying using a pool.
Components and renderer are no longer transient.
Reduced number of components needed by 2
Suppressed material & mesh warning when using Text3DComponent in a Blueprint.
Added effects section for text (layout effects) in Details panel.
Reworked the default text transform extension effect to support ease curve.
Fixed the mask material function to work fully in local space without continuous updates to adjust itself.
Added missing Blueprint functions to retrieve text extensions.
Now uses a single custom material for front, back, extrude, bevel slots.
Naming Tokens:
Now supports case-insensitive namespace lookup. bForceCaseSensitive is now recognized for namespaces to force case-sensitive checks.
Registering namespaces is unchanged, and still requires a unique name regardless of case.
Added Naming Tokens Editable Text Box UMG widget for displaying token text, both as raw tokens and resolved tokens. This wraps a new slate version: SNamingTokensEditableTextBox.
The default behavior allows you to type in text with {tokens} through NamingTokens that are automatically resolved when committing the text.
An autocomplete suggestion dropdown is included which allows you to search for namespaces and tokens and automatically insert them into the text box.
Added EvaluateTokenList API to evaluate specific tokens and return their evaluation data.
Added the TokenNamespace field to FNamingTokenValueData so the namespace is always returned.
Added a CombineNamespaceAndTokenKey utility function in case the key and namespace need to be recombined.
Added support for specifying additional mount points via the command line for the storm sync plugin.
SwitchboardListener: Enabled separate handling of stdout and stderr streams.
Template Level Sequences or Cine Assemblies can now be set for assembly and sub-assembly construction through the Cine Assembly Schema 'Content Hierarchy' tab.
Using the take recording feature, you can now capture microphone audio sources on -game clients.
Created a new stat category for the Take Recorder and its sources. This allows users to see what sources are assigned on a -game client.
CineAssembly
Added Productions level toolbar to change the active production.
Added naming token support in Cine Assembly Schema metadata String fields.
Added Python functionality to access and set the author property of a CineAssembly(get_author, set_author).
Added Blueprint functionality to access and set the author property of a CineAssembly (GetAuthor, SetAuthor)
Added Python functionality to access the created data and time of a CineAssembly (get_created_string, get_date_created_string, get_time_created_string).
Added Blueprint functionality to access the created data and time of a CineAssembly (GetCreatedString, GetDateCreatedString, GetTimeCreatedString).
Added a new token to access a CineAssembly's author property ({author}).
Added a new token to access a CineAssembly's created date and time ({created}, {dateCreated}, {timeCreated}).
Exposed the author property of a CineAssembly at creation time in the CineAssembly creation window details.
Added a new property (bIsDataOnly) to Cine Assembly Schema's and Cine Assemblies to set schemas and assemblies as data only.
Data Only CineAssemblies now cannot be added as SubSequences to other Sequences or Assemblies.
SubSequence compatibility with a parent sequence is checked by two new optional virtual functions on UMovieSceneSequence (IsCompatibleSubSequence, IsCompatibleAsSubSequence).
Added a Shot Duplication tool to the Cinematic Assembly Tools plugin, featuring configurable options for duplicating the subsequences of a Cinematic Assembly asset.
Added a new asset content menu entry widget to set the favourite rating of a Level Sequence or Cine Assembly.
Added a widget to the 'Edit Properties' window of a Level Sequence and Cine Assembly to set the favorite rating.
Added display of the favorite rating of a Level Sequence or Cine Assembly in their Content Browser asset tooltips.
Removed reflect visibility in-game cvar for users. A new workflow is supported in the level editor where users have more explicit control over level visibility.
When recording multiple clients in Take Recorder, we recommend that you disable remote sequencer open. An error is now displayed to enforce this condition.
Bug Fix:
Fixed Remote Control Interception on function calls with constant reference parameters.
Take Recorder:
Fixed not applying time dilation when Sequencer was closed.
Now transacts when removing a source from the subsystem, fixing MultiUser usage.
Fixed OnStopped event not firing in subsystem.
Fixed recording over an existing level sequence crashing when using the Take Recorder subsystem.
ActorRecordingSettings no longer creates settings objects in the constructor, improving struct validation times.
Fixed Take Recorder Subsystem IsReviewing() returning true for a frame when stopping a recording.
Fixed GetLastRecordedLevelSequence not returning the last level sequence while reviewing a recording.
Fixed a crash when creating a level snapshot in a multi-user session.
Fixed a crash that occurred when a Cine Assembly Schema was created with a name whose length exceeded path limits.
Naming Tokens:
Evaluation data no longer initializes datetime in the constructor, fixing an issue with CDO stability.
Now provides world context by default.
Motion Design:
Text3D:
Fixed missing glyph geometry when using some fonts like Antonio, Teko... caused by the code checking if a contour is contained within another only testing a segment instead of the entire polygon or bounding box.
Fixed UnrealServer compilation warnings caused by FreeType and HarfBuzz macro redefinition.
Fixed dynamic mesh renderer crash when text gets regenerated due to update flags not triggering a complete refresh of the render proxy.
Added game ready player collisions for static and dynamic mesh
Fixed layout extension to handle RTL text.
Adjusted wrapping code for RTL text.
Fixed Text3D can be used in packaged builds.
Switchboard:
Included rsync daemon in the job object to ensure it doesn't outlive the Switchboard process.
No longer discard keystrokes in the Add Device dialog that would otherwise cause the device name to collide with an existing device.
SwitchboardListener:
Avoided leaking ETW trace sessions via PresentMon invocations in the event of unclean shutdown.
Prevented child processes from inheriting unintended handles. Unintentionally leaking various resources into child processes that outlive SBL is suspected to be involved in a multitude of intermittent issues, such as:
Inability to bind to the configured listening port when re-launching SBL.
NVAPI initialization failures.
Network performance degradation and disconnects.
Updated OSCSwitchboard editor utility object to use new Take Recorder Subsystem events in addition to keeping the legacy TR BP delegate events.
Mocap Record manager: Added missing calls to emit take and slate changes and to accept an externally called StartRecording event.
Remote Control:
Fixed issues with deleting/renaming groups in the group context menu.
Fixed a crash when playing a level in PIE with embedded Remote Control preset and opening another level while PIE is running.
Fixed an issue where the Create Camera button would not show up for Cine Assemblies in the Sequencer editor.
Fixed a Web Remote Control building issue on Mac where the bin directory added to PATH in the Start script was not absolute causing the subsequent web app scripts to fail.
Protocol bindings now correctly mark the preset modified when changing the override mask.
Fixed issue where the 'Add Actor Track' menu option would not show up for Cine Assembly assets.
Live Link Hub:
Fixed play and reverse button tooltips not updating correctly while in playback.
Fixed a freeze when looping large recordings.
Fixed a freeze if waiting for frames to buffer where the range required was spread across different tracks, but not within a single track.
Fixed a possible freeze when reversing or stopping a recording immediately after looping.
Fixed the default selection end time possibly ending early. Recording length now goes by furthest track timestamp, not frame number.
Added a delay when scanning the asset registry after a directory change detection to help cases where the file system may still be locking the file after a manual move.
Added a recording context option to rescan the recording list manually.
Prevent loading or creating a config if the playback session is active.
Fixed recordings not always looping.
Improved frame time calculation and increased precision.
Buffer range reported should no longer report past max frames.
Fixed issues when jumping to a specific frame. Waiting for a frame to buffer will now properly validate the frame is ready across all tracks. Fixes several issues:
Previously buffered frames that were cached and pending removal would still be considered buffered even if they weren't ready, resulting in the wrong frame being displayed initially.
Jumping to a frame that was buffered and ready on one track, but not ready on another track that had inconsistent frames or a faster frame rate would not wait for this track's frame to be ready, displaying the wrong frame.
Reversing from the start to end frame, such as from a reverse play loop, would hit one or both of these issues and the animation would not always continue playing correctly.
UDP Messaging:
Fixed an issue when the loopback device was not added to the multicast group; so only the first editor instance launch would receive multicast packets. We now always join the group across all instances so other editor instances can be in the same multicast group.
Made multiple reliability improvements to UDP Messaging.
Fixed Media Plate's Aspect Ratio and Mesh Mode transactions to fix Multi-User operations.
VR Editor: FVREditorModeManager now explicitly shuts down VR Editor in response to FEditorDelegates::OnEditorPreExit.
Fixed the Render Grid crashing when passing in an empty string when setting Remote Control values
Fixed an issue where attaching an actor to the socket of a skinned mesh actor would not transact in Multi-User or reapply the attachment as part of an undo operation.
Multiuser: Fixed a possible crash when stopping a take record or reverting take changes.
Capture Manager: Fixed several crashes while aborting take upload.
Deprecated:
Lens Calibration no longer depends on (legacy) Composure, and all features that relied on it have been replicated using internal functionality. Opening lens file assets will no longer add a temporary Composure actor to the level.
Templates
New:
VR Template:
The directional light is now configured to draw shadows on standalone XR platforms. Enabled Single Sample Shadow from Stationary Lights on BP_Pistol to reduce shadow cost (it's already enabled on all other dynamic actors in the scene).
Implemented an example of how Passthrough can be toggled. The option can be found in the hand menu. Note that this native Passthrough solution is currently only available on Meta Quest as the OpenXR runtime must support XR_EXT_composition_layer_inverted_alpha.
VR Template content has now been moved to be a shared template resource named XRFramework. This enables the VR template content to be used in multiple templates.
The mannequin hands are now a shared template resource. We can now use them in multiple XR templates.
Renamed Blueprints to match the style guide of new templates
Added unique descriptions to all Input Actions and Input Mapping Contexts
Added the Android Runtime category tag for immersive mode selection. See the OpenXR specifications appendix about the Android runtime category for more information.
Bug Fix:
VR Template:
Now prevent VR Spectator inputs if HMD is not enabled. This fixes an issue when trying to use a mouse and keyboard pawn in the VR Template for testing.
Grab-logic now works even if MotionControllerSource is changed to non-default (such as Palm).
Fixed hand models staying hidden if switching which hand the Pistol was being held with.
Rebuilt lighting to get rid of shadow artifacts from Point Lights.
Collaborative Viewer Template: Fixed default pawn not turning when moving mouse. The template used a Set Mouse Position-function hack which doesn't behave the same as it used to, and input logic had to be updated to not use that function in the same way.
Aktualisierungshinweise
Animation
Control Rig
Upgrade Notes:
Projects using Control Rig Physics, previously provided by the Physics Control plugin, will now need to enable the Control Rig Physics plugin as well.
Runtime
API Change:
Since this code change causes some variables to become unused in a variant of UpdateHistory_TransformHistory, it is now marked as deprecated.
The signature of experimental function UpdateHistory_WorldSpace has been changed
Editor
Framework
Upgrade Notes:
Previously, the UEdGraphSchema performed asset reference filtering when dropping assets on graphs (but not nodes or pins). This high level assumption doesn't hold up for all types of graphs, for example, some graphs open the asset dropped on them for edit. Since the UEdGraphSchema doesn't have knowledge of what the graph represents, asset reference filtering has moved to the implementation details of the various graphs that support it.
Any classes that derive from UEdGraphSchema and implement DroppedAssetsOnNode should perform their own asset reference filtering if dropping an asset on the graph creates a reference from the graph asset to the dropped asset.
UI
API Change:
Public access to UFont::CompositeFont is now deprecated.
Use UFont::GetCompositeFont() if you want to resolve the FCompositeFont to use at runtime (if any).
Use UFont::GetInternalCompositeFont() or UFont::GetMutableInternalCompositeFont() if you need to specifically access/modify UFont::CompositeFont.
Developers should carefully review their use of GetCachedWidget. If a system depends on the outer wrapped widget being returned, use GetWrappedWidget instead. GetCachedWidget may not always return the wrapped widget as expected.
UX
API Change:
The depth bar supports displaying custom widgets that are automatically arranged by depth. This is used in the Level Viewport Client to display selected objects along the depth bar.
These features can be disabled with the "r.Editor.ManualOrthoDepth 0" CVar.
Foundation
Build
Upgrade Notes:
For projects overriding UAssetManager's functions GetPackageManagers, ModifyCook, GetPackageCookRule, GetPackageChunkIds, or UpdateManagementDatabase, there is now an additional EDependencyProperty::CookRule on EDependencyCategory::Manage properties, and there are two types of PackageManagers reported by the UAssetManager:
GetPackageManagers for managers that control only chunk assignment (which pakfile/iostore container an Asset is placed into).
GetPackageCookRuleManagers for managers that affect both cookrule (whether an Asset gets cooked), and chunk assignment.
Assets that declare usedingame dependencies affect both categories of their dependencies.
Assets that declare editoronly, non-build dependencies affect neither.
Assets that declare editoronly, build dependencies affect chunk assignment but not the cookrule. This new property was added to support correct chunk assignment for platform-specific dependencies.
Core
API Change:
MSVC v14.50 compiler bundled with Visual Studio 2026 is not currently supported.
Developers can change the default behavior of TArray<> and related containers to behave more like traditional C++ containers, so that they will only compact when Shrink() is explicitly called. Use the `FNonshrinkingAllocator` as your array allocator to request this behavior. This can also be passed as the secondary allocator for TInlineAllocator.
API Change:
Nuget packages will continue to be audited for other configurations as these are urgent issues to address, but this will prevent blocking errors for licensees and CI while they are addressed.
Dev Tools
Upgrade Notes:
Updating Project Build Settings:
If your project is a code project, the following applies. This does not apply to content-only projects, as they do not contain *Target.cs files.
For Launcher & Installed Engine Builds:
For each *Target.cs file in your project, update the build settings to V6:DefaultBuildSettings = BuildSettingsVersion.V6
Note: If the project is opened from the Epic Games Launcher, you’ll see a prompt identifying which *Target.cs file must be updated. After making this change, reopen the project.
For Source Engine Builds (not an installed version):
For each *Target.cs file in your project, you have two options:
Recommended (Upgrade): Follow the same steps as for Launcher & Installed builds and set the DefaultBuildSettings:DefaultBuildSettings = BuildSettingsVersion.V6.
Stay on Current Build Settings: If you wish to remain on your existing DefaultBuildSettings, you must declare a unique build environment:BuildEnvironment = TargetBuildEnvironment.Unique.
Framework
Audio
Upgrade Notes:
Existing subtitles inside Asset UserData will need to be remade.
Any classes inheriting from USubtitleTextBlock need to instead inherit from USubtitleWidget.
Gameplay
API Change:
You can suppress the deprecation warnings with the bEnabledLegacyMappingDeprecationWarnings option in the project's input settings.
The CVar AbilitySystem.WarnCooldownEffectWithoutTags can be used to opt-out of this, for example if your GameplayAbility subclass implements a different way of checking cooldowns.
Trying to create a FTickableGameObject with default options from a worker thread (such as during async loading) will now ensure as this is a race condition that could crash. To fix this, use the new FTickableGameObject(ETickableTickType::Never) constructor and then call SetTickableTickType after initialization is complete.
If you make a custom camera node evaluator, you can now opt-out of features you don't need, but you get them all by default. It avoids the situation where making a new node results on stuff not working because you didn't add the correct flag.
This behavior is enabled by default, but you can go back to processing only on the main game thread with this console variable: [ConsoleVariables] WindowsApplication.UseWorkerThreadForRawInput=false
Authors of custom movement modes in Mover 2.0 will need to update their code:
Callers must now provide an angular velocity to FMoverDefaultSyncState::SetTransforms_WorldSpace in order to ensure that angular velocity can persist when changing mode
FRotator FProposedMove::AngularVelocity is now replaced by FVector FProposedMove::AngularVelocityDegrees.
UMovementUtils::ComputeAngularVelocity is now deprecated, callers should use ComputeAngularVelocityDegrees
Add a way to deprecate specific "legacy" axis and action mapping names. If this flag is set to true on the project settings, then any BP references to it will have a deprecation warning. Any C++ Bind calls using these names will also emit a warning.
Some of your camera rigs may need some parameters to be pre-blended. Backwards compatibility was not kept for this change (it was too costly and unnecessary given GameplayCameras' "Experimental" status) so you'll have to re-enable the option for these parameters.
Added a "IsVirtual" flag to FKeys so that you check at runtime if the key is virtual.
Added two new virtual keys for accept and back, which are bindable and useable in Enhanced Input.
We need to make new keys here because FKeys are serialized via their FName, so in order to make sure that it properly serializes per-platform we need to save out the keys with unique names and then populate the key details with the "real" value at runtime.
Check for the instigating controller on an actor.
For actor components, get the owning actor and check that instigating controller.
Upgrade Notes:
If you are dealing with the map-placed actor duplicating bindings bug in UE 5.5 and 5.6, see the resolution notes here.
Mass
API Change:
Renamed all `FMassBatchedCommand::Execute` overrides to `Run` and made it non-constant.
Level Design and Art Tools
Landscape
API Change:
Example Command Line: ProjectName MapName -run=WorldPartitionBuilderCommandlet -SCCProvider=Perforce -Builder=WorldPartitionLandscapeBuilder -AllowCommandletRendering ( -IterativeCellSize=Value)
Deprecated ULandscapeEditLayerBase::GetActions and FEditLayerAction to remove custom actions from runtime logic. Edit Layer customization classes can implement IEditLayerCustomization and register to the Landscape Editor module.
Online
Crash Reporter
Upgrade Notes:
Previously, the format was protobuf and needed to be converted using plcrashutil, but now the format is crashlog.
Platform
Mac
Upgrade Notes:
If HairStrands rendering is needed on Mac SM5, the feature can be enabled in addition to using the experimental feature bindless SM5 in project settings.
XR
Upgrade Notes:
If your project has an xr.MobileLDRDynamicResolution setting, you should replace it with an xr.MobilePrimaryScalingMode setting:
xr.MobileLDRDynamicResolution=0 -> xr.MobilePrimaryScalingMode=0
xr.MobileLDRDynamicResolution=1 -> xr.MobilePrimaryScalingMode=1
API Change:
Added FOpenXRRenderBridge::RunOnRHISubmissionThread, which should be used to wrap all OpenXR calls that can submit directly to the graphics queue (xrBeginFrame, xrEndFrame, xrAcquireSwapchainImage, xrReleaseSwapchainImage).
xrEndFrame in FOpenXRHMD is currently exempted because the submission thread is flushed before we present.
Rendering
Lighting
Upgrade Notes:
Added immediately deprecated r.LightMaxDrawDistanceScale.UseLegacyFadeBehavior_WillBeRemoved to temporarily restore previous behavior.
Materials and Shaders
API Change:
Cached the ShaderPlatform inside MaterialResource, derive the FeatureLevel from that ShaderPlatform.
Cache/Find MaterialResource by QualityLevel/ShaderPlatform instead of QualityLevel/FeatureLevel.
Deprecated all the Setter/Getter functions for MaterialResource, MaterialRelevance that take FeatureLevel and replace them with ShaderPlatform.
Deprecated all FMaterialResource/FMaterial/UMaterial/UMaterialInstance functions that take ShaderPlatform as argument, since the ShaderPlatform should already be cached inside the MaterialResource when it was added.
Deprecated BuildFeatureLevelWidget, LoadEditorFeatureLevel, SaveEditorFeatureLevel for BuildShaderPlatformWidget, LoadEditorShaderPlatformPreview, SaveEditorShaderPlatformPreview.
Deprecated GetCurrentFeatureLevelPreviewText, GetCurrentFeatureLevelPreviewTextVisibility, BuildFeatureLevelWidget for GetCurrentShaderPlatformPreviewText, GetCurrentShaderPlatformPreviewTextVisibility, BuildShaderPlatformWidgetMark.
Deprecated virtual functions from MaterialInterface and FMaterial as final to avoid silent errors.
MegaLights
API Change:
Marking for HairStrands data is not yet implemented; it will produce a warning. "Reference mode" works the same with raytracing and will often tend to work with VSM, but could in theory miss marking some pages, so also produces a warning. This is not expected to be a useful mode though as reference mode should generally use raytracing (and perhaps should force it for all lights).
Simulation
Core Physics
API Change:
Added a dependency to the ChaosCore module.
Modular Vehicles
API Change:
Added an additional input quantization mechanism.
Virtual Production
Tools
API Change:
GetValue and GetValueInArray of the IRemoteControlPropertyHandle now correctly take UObject* references.
Remove ProvidedNamespace as it was not in use anywhere. No deprecation as this is an experimental plugin.