- FEditorLoadedActorCache was reporting unregistered loaded actors and the code that was using it was expecting registered actors.
- Replaced FEditorLoadedActorCache by FWorldPartitionHelpers::GetLoadedActorGuidsForLevel that gathers registered actors GUIDs and updated callers.
- UWorldPartition::Tick is now private to avoid code like LandscapeEditorUtils::SaveLandscapeProxies doing manual ticks to get around unwanted internal behaviors.
- TExternalDirtyActorsTracker can now filter out tracked actors depending on the parent class wanted behavior.
- Don't track dirty actors coming from non transactional operations.
#rb chris.tchou
[CL 32133372 by jeanfrancois dube in ue5-main branch]
* Relies on pre-computing max height delas from mip-to-mip for every landscape component
* Invalidation occurs when the evaluated max delta between the heights at the LOD value that was active when VSM was last cached is different enough from the heights at the current LOD value (for a given persistent view), based on a height threshold that is tweakable per landscape and overridable per landscape proxy
* Invalidation doesn't occur when Nanite landscape is used
* The invalidation rate is decreased as the LOD value goes up, controlled by a screen size parameter in the landscape actor (overridable per proxy), under which no invalidation will occur. This avoids over-invalidating VSM on higher LOD values, since they tend to occupy less real estate and therefore don't need to have perfect shadows
* Added per landscape (overridable per-proxy) shadow map bias to help with this problem too
* Added 3 non-shipping CVars to help tweak those 3 parameters in-game (landscape.OverrideNonNaniteVirtualShadowMapConstantDepthBiasOverride, landscape.OverrideNonNaniteVirtualShadowMapInvalidationHeightErrorThreshold, landscape.OverrideNonNaniteVirtualShadowMapInvalidationScreenSizeLimit)
* The whole invalidation system can be enabled/disabled via CVar landscape.AllowNonNaniteVirtualShadowMapInvalidation
* Added another CVar (landscape.NonNaniteVirtualShadowMapInvalidationLODAttenuationExponent) to tweak the screen-size-dependent invalidation rate curve shape
Misc:
* Fixed landscape.DumpLODs command : now works without parameter and can be used several times
* Changed CachedSectionLODValues system for landscape to be usable both for ViewState-less views (one-shot renders like water info custom render passes) and "persistent" views (those that have FViewStateInterface associated). This allows to keep track of the previous frame's CachedSectionLODValues for a given persistent view and removes the previous hacky method
* Also, prevented landscape render systems to have their LOD section values cleared when a render is made on another scene (e.g. any time a thumbnail renders in editor or when custom render passes execute) : now only the render systems that pertain to the scene being rendered get udpated
* Fixed game thread data being accessed in render thread landscape scene proxy (component)
* Landscape UX fixes
* Fixed some landscape CVars which were not render-thread safe
* Removed member RHI buffer refs LandscapeLODDataBuffer and LandscapeIndirectionBuffer which didn't serve any purpose
#rb chris.tchou
#tests Editor, cooked game,, cooked game
#jira UE-203928, UE-141201, UE-203934, FORT-687382, UE-203945, UE-163715
[CL 31441773 by jonathan bard in ue5-main branch]
These are the changes in existing behavior:
- ShiftMouseMovePixelPerDelta has been deprecated in favor of these new mechanisms of ShiftMultiplier and CtrlMultiplier.
- SupportDynamicSliderMaxValue and SupportDynamicSliderMinValue now activate with Alt instead of Ctrl so that Ctrl can be used for CtrlMultiplier.
- OnMouseWheel had hardcoded ctrl/shift step increments and these now follow the ShiftMultiplier and CtrlMultiplier attributes.
There are two changes required so that snapping to the Delta attribute does not occur when using ShiftMultiplier and CtrlMultiplier:
- OnMouseMove commits the value by CommittedViaSpinMultiplier
- OnMouseButtonUp detects that the mouse event either has Shift or Ctrl
#jira UE-195384
#rb Patrick.Boutot, Vincent.Gauthier
[CL 30962670 by max chen in ue5-main branch]
Intended to save disk space and runtime memory, at the cost of generating grass density maps at runtime.
Enabled per platform via cvar "grass.GrassMap.UseRuntimeGeneration" (disabled by default), and enabled per landscape via the "bUseRuntimeGrassMapGeneration" object property (also disabled by default). Both must be enabled at cook time for disk and memory savings.
Original review in Main: https://p4-swarm.epicgames.net/reviews/29027747
#rb jonathan.bard
#tests console testers tested grass in cooked builds on all platforms, I ran and profiled game projects in editor and cooked standalone, and tested grass editing in game projects in editor
[CL 29539554 by chris tchou in ue5-main branch]
The main problem was that the cell count calculation was overflowing, when passed WORLD_MAX/MIN as input bounds -- so it thought that iterating the entire space was faster than iterating the populated cells.
I also modified the query code to not query WORLD_MAX/MIN on Z, but to instead expand the world bounds by a good amount, which helps it take more optimal paths by limiting the query volume.
#rb jonathan.bard
#jira UE-197004
[CL 28475067 by chris tchou in ue5-main branch]
Adding back the "Reset to default" option to some landscape tool properties
#jira UE-156290, UE-152894
#rb luc.eygasier
[CL 28236473 by chris tchou in ue5-main branch]
* Added an option to be able to consider the paint layer's hardness parameter when using the erosion tool. Set to false by default because this used to be misleading for users
* Set hardness to 0 by default for landscape layer info assets (for the same reason as above)
* Added several missing tooltips
* Added support for double-clicking on a paint layer thumbnail to open the corresponding landscape layer info asset
#rb chris.tchou
[CL 28185367 by jonathan bard in ue5-main branch]
Misc:
* Removed FLandscapeEditorServices, which didn't make much sense in terms of design wrt dependency inversion : instead, FLanscapeEditorModule is the one implementing ILandscapeEditorServices
#jira UE-195737
#tests editor
#rb don.boogert
[CL 28079921 by jonathan bard in ue5-main branch]
* Removed deprecated code from <=UE5.2
* Moved UHierarchicalInstancedStaticMeshComponent::AcceptPrebuiltTree and UHierarchicalInstancedStaticMeshComponent::BuildTreeAnyThread to UGrassInstancedStaticMeshComponent
#rb jamie.hayes, chris.tchou
[CL 27992212 by jonathan bard in ue5-main branch]
Adds LandscapeEditor DetailsView RightColumnMinWidth to allow ResetToDefault button to be properly hit testable.
#rb Jonathan.Bard
#jira UE-194977
[CL 27828563 by luc eygasier in ue5-main branch]
Changes buttons to toggle buttons for landscape editor BP brushes affecting layers features.
Updates landscape editor target list colors, padding, text color to reflect UE5 style.
#rb Jonathan.Bard
[CL 27346857 by luc eygasier in ue5-main branch]