#rb Per.Larsson
#jira UE-161296
#rnx
#preflight 62fe3ce73d3fb466b229bcc0
- There are some usecases that require the VA system to initialize the first time it is accessed (usually the first time we attempt to pull a virtualized payload) rather than be initialized in the program start up. This change provides three different methods to achieve this:
-- Setting the define 'UE_VIRTUALIZATION_SYSTEM_LAZY_INIT' to 1 in a programs .target.cs
-- Setting [Core.ContentVirtualization]LazyInit=true in the Engine ini file
-- Running with the commandline option -VA-LazyInit
- If we detect that the source control backend is being initialized on a background thread we do not try to run the FConnect operation. The backend will still work but this does reduce the potential error checking on initialization. This is done because the FConnect operation currently only works on the main thread and to change this would be a bigger work item than we can schedule at the moment.
- UE::Virtualization::Initialize functions now take a EInitializationFlags enum as a parameter. This enum allows the call to ignore all lazy init settings and force the initialization immediately. This is useful for programs like the Virtualization standalone tool which just needs to start the system when needed.
-- The call to ::Initialize in LaunchEngineLoop passes in None and does not ignore lazy initialization.
-- Calls to ::Initialize in the UnrealVirtualizationTool however all use EInitializationFlags::ForceInitialize and ignore lazy initialization settings.
- Fixed an odd bug in UE::Virtualization::Initialize where the error path (if the config file cannot be found) was using a different start up code path.
- Add asserts when assigning to GVirtualizationSystem to make sure that it is null. This is not 100% safe but should catch some potential threading issues, if any.
- Add an assert after lazy initialization (IVirtualizationSystem::Get) to make sure that GVirtualizationSystem was assigned a valid object.
- Improve how we check for legacy values in [Core.ContentVirtualization]. We now support multiple allowed values.
- Added a way to poll if a VA system has been initialize yet or not, this allows us to avoid initializing a VA system if one has not yet been created and we try to:
-- Dump VA profiling stats after cooking
-- Send VA stats to studio analytics
- Note that currently using lazy init loading will probably cause the VA statistics panel not to work, this will be fixed in future work where we will allow the panel to register for a callback when the system is initialized.
[CL 21467510 by paul chipchase in ue5-main branch]
#rb Chris.Babcock
#jira UE-131966
#ushell-cherrypick of 21441862 by dmytro.vovk
#preflight 62fe4c78200ff87e07be431f
[CL 21442825 by dmytro vovk in ue5-main branch]
Notes:
* Model used for the squeeze factor is HorizontalFocalLength = LensFocalLength / SqueezeFactor; VerticalFocalLength = LensFocalLength;
* The renderer renders the desqueezed image directly because of not wanting to add support to maintain non squared pixel.
* Squeeze factor is only hooked in to DOF's CoC.
* Squeeze factor currently also affects depth blur which it shouldn't in theory, requires dual CoC shader permutations in DOF algorithm to do that correctly.
* Crop's model fits an aspect ratio directly into the desqueezed full sensor image.
* Crop settings are directly applied to the camera's FOV calculation of the camera to avoid rendering extra pixels.
* Custom crop aspect ratios can be added into the project's DefaultEngine.ini
#rb colin.benoit, rod.bogart, pat.tubach
#fyi colin.benoit, rod.bogart, pat.tubach
#jira none
#preflight 62fcefe51e39eb26a08cede2
[CL 21424608 by Guillaume Abadie in ue5-main branch]
- Deprecate and redirect USkinnedMeshComponent::SetSkeletalMesh into SetSkinnedMeshAndUpdate.
- Rename SetSkinnedMesh to SetSkinnedMeshAndUpdate to allow default parameter to work in the Blueprints' UI.
#rb Josie.Yang
#preflight 62f62fd723003b62a399dcf8
#jira none
[CL 21353272 by kriss gossart in ue5-main branch]
#rb Per.Larsson
#jira UE-156189
#rnx
#preflight 62f4c098e60c9215b9bcde08
- The orignal name implied tha the payloads would only be stored locally on the users machine, but the intent is to describe a number of backends that are a) faster than the persistent storage backends b) no guarantee that the payload will be found.
- The new name better describes this functionality.
- We still accept 'LocalStorageHierarchy' but will log a warning informing the user to update their graph but this backwards compatibility code will most likely be removed before 5.1 ships.
-- EStorageType::Local will follow the usual deprecation rules.
- Not strictly related to this change but I also cleaned up and added additional loggng during the initialization of the virtualization manager.
[CL 21333601 by paul chipchase in ue5-main branch]
#jira UE-160208
#preflight skip
#rb Patrick.Enfedaque
#ROBOMERGE-AUTHOR: rex.hill
#ROBOMERGE-SOURCE: CL 21323811 via CL 21329084 via CL 21329109 via CL 21329162
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v972-20964824)
[CL 21330359 by rex hill in ue5-main branch]
#rb trivial
#jira UE-156189
#rnx
#preflight 62f3ab2023003b62a324f67a
- The older versions of this value ([Core.ContentVirtualization].EnablePushToBackend and [Core.VirtualizationModule].EnablePushToBackend) will continue to work but will log a warning to the user telling them to update it.
- It is very unlikely that anyone is actually using these old values and so we can remove this backwards compatibility when 5.1 ships. It is only present to allow us to fix up internal projects and to avoid interrupting people testing the system.
[CL 21317383 by paul chipchase in ue5-main branch]
#rb Per.Larsson
#jira UE-156750
#rnx
#preflight 62f212e13b773d04161ee7dd
### Problem
- The payloads stored in map files tend to change more than other assets and would cause a lot more churn in the VA system.
- Some other systems like the landscape component are not able to sensibly continue if their payloads cannot be accessed (heightmaps for exmaple) and would prefer not to allow virtualization.
- As a short term fix we need an option to disable the virtualization on all payloads in map files. Future improvements to the filtering system will allow systems to more easily opt their payloads out of virtualization. When this is functional we might want to change the default from true to false.
### Feature
- The config optionf for this filtering is "[Core.VirtualizationModule]FilterMapContent=True"
- Testing if the owning UObject for a payload is in a umap can get tricky, because we not only need to check the umap but we also need to check if it is in a "_builddata.uasset" file, which is an additional file we store next to a umap containing things like lightmaps etc.
- At the moment we check for this by finding the outermost object for the given owner and check to see if it is a ULevel, UWorld or UMapBuildDataRegistry. This is a bit of a kludge but the types we need to check against are not accessible by this module and making them accessible will pull in a lot of dependencies that we'd prefer not to add.
-- One improvement might be to tag the FLinkerSave with the info we need and passing that into the serialization process rather than trying to work it out ourselves but I am wary of making that change until we are 100% sure that we want to keep this feature.
### Refactor
- Removed IVirtualizationSystem::IsDisabledForObject and replaced it with ::FilterPayload which can return multiple reasons for preventing a payload from virtualizing. (the method was added during 5.1 development so it should be fine to just replace it without deprecation)
-- The original behaviour for FVirtualizationManager::IsDisabledForObject has been moved to FVirtualizationManager::ShouldVirtualizeAsset
- Added a new header to declare enums/types used by the various parts of the virtualization system and started by moving EPayloadFilterReason there from the package trailer header. This allows both the core API and PackageTrailer to use EPayloadFilterReason without creating overburdened header dependencies.
-- EPayloadFilterReason has moved from the UE namespace to UE::Virtualization so the package trailer code needed updating accordingly.
- EditorBulkData will ask the virtualization system for the base filter reason, then add it's own reasons if UE_ENABLE_VIRTUALIZATION_TOGGLE is enabled. This bit of code will be removed for 5.1
[CL 21283179 by paul chipchase in ue5-main branch]
#rb none
#rnx
#jira UE-159597
#preflight
- The option is [Core.VirtualizationModule]VirtualizationProcessTag=
- If left blank then no tag will be added
- The internal virtualization process code no longer needs to return a tag since it will now be applied by the virtualization manager instead.
-- Note that we still follow the same logic, we only stamp if no errors were encountered.
[CL 21217286 by paul chipchase in ue5-main branch]
Added default values to BaseEngine.ini for reference
#ROBOMERGE-AUTHOR: andrew.grant
#ROBOMERGE-SOURCE: CL 21204775 via CL 21204944 via CL 21207221 via CL 21207247 via CL 21208631
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v972-20964824)
[CL 21211418 by andrew grant in ue5-main branch]
#rb none
#jira UE-159596
#rnx
#preflight 62d94160110da0f944afdd32
### Problem
- When rolling our virtualization to projects we have run into a number of set up problems which has caused users to fail to submit packages from the editor as when the virtualization failed we prevented the overall submit from going through.
- Although we will eventually work through all of these problems and add better fault tolerance for now it is annoying for the content team so we need an easy way for a project to allow package submits to be completed even if the virtualization process part of the submit failed.
- Worth noting that the virtualization process failing should never affect the state of the package files, the only downside is that the packages may not be virtualized.
### Fix
- The virtualization/rehydration of packages now return an enum instead of a bool although at the moment we are only returning Success and Failed, but it will allow us to expand in the future
- Combined the code calling the virtualization process from both the source control window and the source control changelist window into a single utility function.
-- Now the two windows only diverge on how they report failure to the user.
- This new utility function now checks to see if the virtualization manager suggests if failing the virtualization process should block any package submission to source control or not.
- I am not happy with this solution, but I haven't come up with anything that feels right, this solution will at least work.
[CL 21199597 by paul chipchase in ue5-main branch]
* Replaced the existing 2d BlueNoise texture (256 x 256 x 7) with one that is generated to have no low frequencies over time as well as space, and has many more temporal samples (128 x 128 x 64)
* Lumen now uses Spatiotemporal Blue Noise for probe directions, screen probe interpolation jitter, stochastic interpolation (used on High settings), and Screen Bent Normal.
* https://developer.nvidia.com/blog/rendering-in-real-time-with-spatiotemporal-blue-noise-textures-part-1/
* "Spatiotemporal Blue Noise Masks" [Wolfe et al 2022]
#ROBOMERGE-AUTHOR: daniel.wright
#ROBOMERGE-SOURCE: CL 21156598 via CL 21158743 via CL 21163822
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v972-20964824)
[CL 21182222 by daniel wright in ue5-main branch]
#jira UE-159832
#rb Aaron.mcleran Phil.Popp Dan.Thompson Josh.Adams
#preflight 62d260033c3df323907eaa93
[CL 21153330 by jimmy smith in ue5-main branch]
Remove properties and functions so that redirectors can do their job
Add redirector for function paramter
#preflight
#codereview jaime.cifuentes, thomas.sarkanen, john.vanderburg
[CL 21140261 by Marc Audy in ue5-main branch]
Renamed / deprecated master/slave terms at SkinnedMeshComponent and SkeletalMeshComponent (plus all the users)
#jira UE-158645, UE-158525, UE-158532
#review @thomas.sarkanen @john.vanderburg
#preflight 62ced88af324cee189e48d43
#tests Verified the properties transfer correctly after modifying them without the fix and loading the character with the component with the fix applied
#preflight 62cfc490c36afd11ef07c9ab
[CL 21088391 by jaime cifuentes in ue5-main branch]
The project settings pipeline stack now point on assets (base on UInterchangePipelineBase) instead of class. The new UInterchangePipeline asset editor allow users to specificly lock any property values. The import dialog show the pipeline locked properties has read only.
In the import dialog, a "Reset to default" button was added, when users click on it, all selected pipeline properties value will go back to the pipeline statck asset properties value. In case of re-import the properties value will get back to the last import properties value.
#jira UE-151210
#rb jeanmichel.dignard, jeanluc.corenthin
#rnx
#preflight 62c86943b3789302b1ef4c10
[CL 21010434 by Alexis Matte in ue5-main branch]
- added a ItemIndex abstration class to deal with regular transform indices and cluster index ones ( UniqueIdx )
- simplified the BP functions that are leverage the new ItemIndex abstraction
- simplified the proxy equovalent function by consolidating the code in Clustering class
- adjusted removal crumbling code to use the new APIs
- propagate internal cluster information from PT to GT ( no GT particle , but a way to query internal cluster index by the GT children for queries to use )
#rb brice.criswell, max.whitehead
#jira none
#preflight 62be14228d5e678759dfc1bf
#robomerge EngineMerge
[CL 20917279 by cedric caillaud in ue5-main branch]
Deprecate GetSelectedObjects()/SelectObjects in favor of GetSelectedBindings/SelectBindings which operates on FMovieSceneBindingProxy for consistency with all other blueprint/python functions
Deprecate SequencerBindingProxy and typedef it to MovieSceneBindingProxy
Tested that calls with SequencerBindingProxy produce warnings but still compile
Tested that blueprints with SequencerBindingProxy are automatically redirected to use MovieSceneBindingProxy
#jira none
#preflight 62b60dad380d1629fd887082
#rb andrew.rodham, matt.hoffman
[CL 20819928 by Max Chen in ue5-main branch]