-- OnMotionEnd now resets instance transforms as well as component transforms.
#jira UETOP-1546
#rb brice.criswell
#lockdown nick.whiting
#ROBOMERGE-SOURCE: CL 16198557 in //UE5/Release-5.0-EarlyAccess/...
#ROBOMERGE-BOT: STARSHIP (Release-5.0-EarlyAccess -> Main) (v796-16191650)
[CL 16198575 by brett miller in ue5-main branch]
-- Added state machine logic and scene proxy callbacks for triggering when motion begins and ends.
#jira UETOP-1546
#rb graham.wihlidal
#lockdown nick.whiting
#ROBOMERGE-SOURCE: CL 16178376 in //UE5/Release-5.0-EarlyAccess/...
#ROBOMERGE-BOT: STARSHIP (Release-5.0-EarlyAccess -> Main) (v792-16166999)
[CL 16178381 by brett miller in ue5-main branch]
* Implemented thread safe object pool / free list allocator (FGeometryCollectionDynamicDataPool)
* Added Chaos stats for total transforms and changed transforms
* Removed TransformsAreEqual mechanism that caused full transform updates to occur unnecessarily for 2 subsequent frames, as the state wasn't stable until the previous 3 frames were stable. This was incredibly innefficient for GPUScene, etc..
* InitDynamicData now returns the data allocation (which can be null if not dynamic or if no transforms have changed), users of this now check if it's available, and either skip or fall back to the static/rest path otherwise
* Cleaned up some code paths by combining them with similar passes
* Removed tons of allocations, including heavy allocations/memcopies of transform data, even on stable frames (which were immediately deallocated right after allocation and setup of the dynamic data)
* Saves ~0.5 to 1.0ms of CPU time in heavy scenes
* Saves ~0.5ms of GPU time doing far less GPUScene updates
* Main optimization around this refactor is forthcoming in a followup CL (avoid calling MarkRenderTransformDirty in TickComponent).
#rb brett.miller, brice.criswell
#lockdown nick.whiting
[FYI] brian.karis, rune.stubbe
#jira UETOP-1088
#ROBOMERGE-SOURCE: CL 16059409 in //UE5/Release-5.0-EarlyAccess/...
#ROBOMERGE-BOT: STARSHIP (Release-5.0-EarlyAccess -> Main) (v789-15992632)
[CL 16061411 by graham wihlidal in ue5-main branch]
- Fix to an indexing error when the bounds are setup on the FNaniteGeometryCollectionSceneProxy, and a transform error when updating the instance bounds.
#jira UE-113611
[FYI] brett.miller, graham.wihlidal
#lockdown nick.whiting
#ROBOMERGE-SOURCE: CL 16057336 in //UE5/Release-5.0-EarlyAccess/...
#ROBOMERGE-BOT: STARSHIP (Release-5.0-EarlyAccess -> Main) (v789-15992632)
[CL 16061147 by brice criswell in ue5-main branch]
- Strip geometry attributes from the collection when using the collection as a simulation viewer.
- Use the transferred bounds on the minimal asset for rendering bounds.
- Minor clean to expose user controllable cache only state to the GeometryCollectionObject
#jira UE-113611
#rb Brett.Miller
[FYI] Graham.Whlidal
#lockdown nick.whiting
#ROBOMERGE-OWNER: Benn.Gallagher
#ROBOMERGE-AUTHOR: brice.criswell
#ROBOMERGE-SOURCE: CL 16052869 in //UE5/Release-5.0-EarlyAccess/...
#ROBOMERGE-BOT: STARSHIP (Release-5.0-EarlyAccess -> Main) (v789-15992632)
#ROBOMERGE-CONFLICT from-shelf
[CL 16060655 by Benn Gallagher in ue5-main branch]
Pretty nasty one where material slots are manually added/changed (differing from LOD0), Nanite encodes the material tables from that, but then the LOD0 of the mesh (which drives mesh draw commands wrt. material interfaces) no longer matches correctly 1:1, so you can have 1 mesh section with 1 material interface, but it's actually using material index 1.
From the normal mesh draw command side of things, this is all handled nicely, but Nanite and GPUScene don't upload LOD0 data, we go off of material slots when encoding the tables (we don't care about the LOD data). Basically it means we'd upload a material table entry to GPU Scene at (say) slot 1280 with a given depth value (as if the relative material index is 0), but the cluster material encoding would say the relative index is 1, causing depth export and culling to lookup the depth value from slot 1281 instead.
Reverb was mainly single material meshes (with a few exceptions), so we never encountered all the reimport and mismatch fun, and even for a long time on Frosty, multiple materials were fine (and of course well tested previously).
The start of the problems came from the previous bug of LOD0 coarse mesh simplification killing unreferenced materials, scrambling the indexing - while that bug was being fixed by us, artists started trying to fix it on their end by manually adjusting material slots, etc. This left a ton of meshes behind with crazy indexing like this, where even disabling coarse mesh still results in mismatches between LOD0 and the material slots.
While making these fixes, I also made a number of CPU optimizations to various parts of the Nanite material rendering code, and also refactored a lot of the geometry collection and (H)(I)SM deferred material code into a common path shared by all Nanite proxies.
#rb ola.olsson
#fyi brian.karis, rune.stubbe, juan.canada
#jira FROST-1224
#robomerge Release-5.0-EarlyAccess
[CL 15736080 by graham wihlidal in ue5-main branch]
- Simplifies the ifdef logic in both and cleans up naming significantly.
- also added support for GPU-scene instance culling.
#rb Graham.Wihlidal
#ROBOMERGE-SOURCE: CL 15567860 in //UE5/Release-5.0-EarlyAccess/...
#ROBOMERGE-BOT: STARSHIP (Release-5.0-EarlyAccess -> Main) (v771-15082668)
[CL 15567868 by ola olsson in ue5-main branch]
* Added new PrimitiveComponent flag bIsBeingMovedByEditor which is enabled by the editor when it moves an actor through the gizmos.
* Velocity rendering now draws components being moved by the editor on top of the usual Movable components
#rb Matt.Kuhlenschmidt
#ROBOMERGE-SOURCE: CL 15373844 in //UE5/Release-5.0-EarlyAccess/...
#ROBOMERGE-BOT: STARSHIP (Release-5.0-EarlyAccess -> Main) (v771-15082668)
[CL 15373874 by daniel wright in ue5-main branch]
Removed WorldToLocal from GPUScene packed instance data (now derived) to save 8 bytes (after new fields).
Fixed calculation of Instance.LocalToInstance.
#jira UE-105083
#rb brian.karis
#fyi rune.stubbe
[CL 15076426 by graham wihlidal in ue5-main branch]