Summary
Landscape Grass generation in UE 5.8 does not prioritize the active player camera after level load. Grass HISM components are generated progressively in distant Landscape cells first, while the area around the player remains without visible grass even though the active camera and ViewLocationsRenderedLastFrame are correct.
What Type of Bug are you experiencing?
World Creation Tools
Steps to Reproduce
-
Create or use a large Landscape with a Landscape material containing Landscape Grass Output and several Landscape Grass Types.
-
Load the Landscape level using OpenLevel.
-
Spawn/move the player to a location on the Landscape and wait until the player camera reaches its final position.
-
Do not manually call RegenerateGrass().
-
Observe Landscape Grass generation after loading using:
- UWorld::ViewLocationsRenderedLastFrame
- ALandscapeProxy::FoliageComponents
- UHierarchicalInstancedStaticMeshComponent::GetNumRenderInstances()
- Grass HISM Bounds
-
Approximately 500 ms after loading, the active player camera is already correct:
Player Camera:
(37769.5, 42815.8, 253.2)ViewLocationsRenderedLastFrame:
Count = 1
View #0 = (37769.5, 42815.8, 253.2) -
Despite this, Landscape Grass initially generates in distant Landscape cells.
At 500 ms:
GrassComponents = 4
RenderInstances = 5069
RecentlyRendered = 0
InsideCull = 0Nearest LongGrass HISM:
Bounds = (13975.0, -5626.0, -1942.0)
DistanceToCenter = 54014.9
DistanceToBounds = 49312.7
EndCullDistance = 39000 -
Continue observing the generation.
At 1000 ms:
GrassComponents = 25
RenderInstances = 46039
RecentlyRendered = 0
InsideCull = 0Nearest LongGrass HISM:
Bounds = (39189.3, -5641.6, -1882.3)
DistanceToCenter = 48525.2
DistanceToBounds = 43826.0 -
The active camera remains unchanged and correct, but Landscape Grass continues progressing through distant Landscape cells in a deterministic grid-like sequence:
~2500 ms:
(13977, 674)~3000 ms:
(20292, 672)~3500 ms:
(26583, 696)~4500 ms:
(32885, 678)~5000 ms:
(39193, 675)~8000 ms:
(20275, 6962)~8500 ms:
(26590, 6961) -
During this entire period the player remains approximately at:
(37769, 42815)
and ViewLocationsRenderedLastFrame continues to contain exactly the correct player camera.
Expected Result
Landscape Grass generation should prioritize Landscape cells around the current active player camera.
After the player camera reaches its final location, grass within or near the camera’s normal culling distance should be generated first.
The player should not have to wait while Landscape Grass is generated in distant parts of the Landscape before nearby grass becomes available.
Observed Result
Landscape Grass generation starts in distant Landscape cells instead of around the active player camera.
The active camera is correct and stable, and UWorld::ViewLocationsRenderedLastFrame contains exactly one view which matches the player camera.
Nevertheless, Landscape Grass HISM components are progressively created tens of thousands of Unreal Units away from the player.
The number of generated components and render instances continuously increases, but RecentlyRendered remains 0 around the player.
For example:
500 ms:
GrassComponents = 4
RenderInstances = 5,069
RecentlyRendered = 0
InsideCull = 0
1000 ms:
GrassComponents = 25
RenderInstances = 46,039
RecentlyRendered = 0
InsideCull = 0
3000 ms:
GrassComponents = 61
RenderInstances = 114,018
RecentlyRendered = 0
InsideCull = 0
5000 ms:
GrassComponents = 90
RenderInstances = 160,814
RecentlyRendered = 0
8500 ms:
GrassComponents = 162
RenderInstances = 298,316
RecentlyRendered = 0
The generated cells appear in a repeatable grid-like order rather than being prioritized by distance to the active player view.
A manual synchronous regeneration using the correct CameraLocations:
LandscapeSubsystem->RegenerateGrass(
true, // Flush
true, // ForceSync
CameraLocations
);
immediately generates the correct Landscape Grass around the player, which suggests that the Landscape Grass data itself, material, grass types and camera positions are valid.
Affects Versions
5.8
Platform(s)
Windows
For crash reports, include your callstack
Not applicable. This issue does not cause a crash.
Additional Notes
Additional investigation was performed to exclude incorrect camera selection and common Landscape Grass configuration issues.
SceneCaptureComponent2D investigation:
The level contains:
- a minimap SceneCapture
- a level-map SceneCapture
- four realtime character portrait SceneCaptures
- a Landscape WaterBrushManager SceneCapture
However, during the problem:
UWorld::ViewLocationsRenderedLastFrame contains exactly ONE view and it exactly matches the player camera.
Example:
Player Camera:
(37769.5, 42815.8, 253.2)
ViewLocationsRenderedLastFrame:
Count = 1
View #0 = (37769.5, 42815.8, 253.2)
The level-map SceneCapture is disabled during the test:
Visible = false
CaptureEveryFrame = false
CaptureOnMovement = false
FOV = 0
Therefore the distant Landscape Grass generation does not appear to be caused by SceneCaptureComponent2D camera locations.
The following CVars remained constant during the test:
grass.Enable = 1
grass.DensityScale = 1
foliage.DensityScale = 0.8
grass.CullDistanceScale = 1
grass.UseStreamingManagerForCameras = 0
grass.MinTimeToKeepGrass = 60
grass.MinFramesToKeepGrass = 30
grass.TickInterval = 1
sg.FoliageQuality = 2
foliage.MinimumScreenSize = 5e-06
r.ViewDistanceScale = 0.8
grass.UseStreamingManagerForCameras=0 and grass.MinTimeToKeepGrass=60 were diagnostic settings used to isolate the behavior. The original missing-grass issue existed before these diagnostic changes.
The behavior is deterministic between runs.
The same distant Landscape cells are generated in approximately the same order.
Possible UE 5.8 regression:
UE 5.8 introduced changes related to time-sliced Landscape / grass map generation.
The observed behavior looks consistent with a generation-priority/order problem:
- the active camera is correct;
- the active rendered view is correct;
- Landscape Grass generation is running;
- HISM instances are successfully generated;
- distant Landscape cells are generated before cells around the player;
- generation progresses incrementally through a reproducible Landscape grid;
- synchronous RegenerateGrass with explicit correct CameraLocations generates the expected nearby grass immediately.
I can provide complete diagnostic logs and additional test data if required.