This represents UE4/Main @18073326, Release-5.0 @18081140 and Dev-PerfTest @18045971
[CL 18081471 by aurel cordonnier in ue5-release-engine-test branch]
This represents UE4/Main @17911760, Release-5.0 @17915875 and Dev-PerfTest @17914035
[CL 17918595 by aurel cordonnier in ue5-release-engine-test branch]
This represents UE4/Main @17774255, Release-5.0 @17791557 and Dev-PerfTest @17789485
[CL 17794212 by aurel cordonnier in ue5-release-engine-test branch]
Phase 1 adds the async compilation without introducing any higher-level awareness.
This step provides the biggest performance improvements by allowing skeletal mesh to be compiled in
multiple threads but stalls are expected to occur before the level has finished loading as soon as
properties of skeletal meshes are accessed by the game-thread.
- Make skeletal mesh reduction and renderdata building thread-safe where needed
- Add protection on all USkeletalMesh accessors so the game-thread can wait on data still being built if needed
- Modify both PostLoad and Build to be async when the feature is enabled
- Make FRawSkeletalMeshBulkData::LoadRawMesh thread-safe
- Fix some PropertyChangedEvent name comparison to use strongly typed GET_MEMBER_NAME_CHECKED
- Add an experimental setting options to enable the feature (disabled by default for now)
DEBUGGING
- Can be forcibly enabled/disabled through command-line via -asyncskeletalmeshcompilation=[off, on, paused]
- Can pause skeletal mesh compilation using Editor.AsyncSkeletalMeshCompilation = 2 or -asyncskeletalmeshcompilation=paused
- Can manually resume a specified amount of paused compilation using Editor.AsyncSkeletalMeshCompilationResume [Num]
- Can forcibly wait on all compilation using Editor.AsyncSkeletalMeshCompilationFlushAll
BENCHMARKS
Tested on AMD TR 3970X with 256GB RAM
- 6m50s to 2m58s for loading P_Construct with a local-only DDC that doesn't contains any prebuilt skeletal mesh
- 3m10s to 39s for importing 299 SK with the Interchange framework
TESTS
- Opened all 5769 SK from FortniteGame to exercise all legacy conversion code paths
- Opened all 102 SK from QAGame
- Opened P_Construct, Apollo_Terrain, LumenTest, P_World
- Imported 299 SK with and without Interchange activated
- Ensure no new regression introduced in any of the 70 SK related tests from EngineTest
- Run all FBX import test in EngineTest
- Cook / Run ShooterGame Client
#rb Alexis.Matte
[CL 15452895 by danny couture in ue5-main branch]
- Moved source models related classes and implementation into separate files.
- Created a new UObject wrapper for holding mesh description bulk data; this is created as a transactable object inside a UStaticMesh.
- The cached mesh description is now an inner object of the bulk data wrapper; this allows transactions on the bulk data to affect the cached mesh.
- The static mesh SourceModels array can no longer be accessed directly: FStaticMeshSourceModel requires extra initialization before it should be used, so new LODs should be added through the static mesh API.
- Undo/redo is now fixed within the geometry tools
- Fixed regression where mesh description was being unpacked unnecessarily during transactions
- MeshDescription bulk data and its cached MeshDescriptions are now emptied prior to removing the UObject reference, in order to immediately free memory instead of needing to wait for garbage collection
- No more deadlocks when clearing or committing mesh descriptions during garbage collection
- Bulk data UObjects are constructed, where possible, at startup, in order to prevent it from happening during critical moments, e.g. during garbage collection or package saving.
#rb Danny.Couture, Alexis.Matte, Ryan.Schmidt
[CL 15420827 by Richard TalbotWatkin in ue5-main branch]
* r.LumenScene.MeshCardsMaxLOD controls representation quality. With 0 being a box projection
* New card placement to focus on important parts of a mesh (skip non visible parts)
* Replaced CubeMapTrees with MeshCards. Instead of a big volume texture lookup there are now 6 lists of decals (one per axis)
* Merged distance field and mesh card Embree setup code into a set of common functions
* Removed hardcoded limits of 6 cards per mesh
#fyi Daniel.Wright, Patrick.Kelly, Yuriy.ODonnell
[CL 15144947 by Krzysztof Narkowicz in ue5-main branch]
Adding a public member to USkeletalMesh class is now prohibed since it can break asynchronous operations that will be added next to this submit.
#rb danny.couture
#jira UEENT-3936
#rnx
[CL 14812920 by Alexis Matte in ue5-main branch]