Description

From licensee:

We are using the legacy HLOD system in our game. With 5.5 there was a change to FSceneProxyBase::DrawStaticElementsInternal() where the implementation was removed (https://github.com/EpicGames/UnrealEngine/commit/5739cb4af91a567636130f3e834340688ce64f81#diff-f40cf666070ac7a046890af0c957a44e9d339333c98708b037434702d9133aeb). This means that the FPrimitiveSceneInfo structure for nanite-enabled HLODs no longer have their StaticMeshes and StaticMeshRelevances properties set.

The code at FLODSceneTree::UpdateVisibilityStates() contains an early out if !NodeMeshRelevances.IsValidIndex(0), which means the HLODs are always rendered.

We have a workaround in FLODSceneTree::UpdateVisibilityStates.

Replace

if (NodeVisibility.UpdateCount == UpdateCount || !NodeMeshRelevances.IsValidIndex(0))

with

if (NodeVisibility.UpdateCount == UpdateCount)

 

and then

const bool bIsDitheredTransition = NodeMeshRelevances[0].bDitheredLODTransition;

with

const bool bIsDitheredTransition = NodeMeshRelevances.IsValidIndex(0) ? NodeMeshRelevances[0].bDitheredLODTransition : false;

 

This removes the dependency on the NodeMeshRelevances data. It's only used to determine bIsDitheredTransition.

Steps to Reproduce
  1. Create a level
  2. Add two or more StaticMeshActor instances to the level
  3. Open the HLOD Outliner
  4. Check 'Generate Single Cluster for Level'
  5. Create and assign an HLODSetup Asset with one HLOD level with 'Simplification Method' set to approximate and 'Generate Nanite Enabled Mesh' set to true
  6. Click 'Build All'
  7. Notice that at any distance the HLOD is rendered

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-256684 in the post.

1
Login to Vote

Unresolved
CreatedMar 17, 2025
UpdatedMar 18, 2025
View Jira Issue