Quick answer: Set InstanceStartCullDistance & InstanceEndCullDistance with hysteresis (start cull ~3000, end cull ~5000). Avoids per-frame flicker at fixed boundary.
A grass field uses HISM with cull distance. At a specific camera distance, individual instances flicker on/off as the camera nudges. Cull cutoff is binary at one distance.
Hysteresis Cull Distances
HISMComponent->InstanceStartCullDistance = 3000; // fade-out begins
HISMComponent->InstanceEndCullDistance = 5000; // fully invisible
Instances smoothly fade between these distances. No sharp pop at one threshold.
Per-Instance Bounds
HISM uses the mesh’s bounds for culling. If bounds are too tight, instances at boundary flicker. Expand bounds:
BodyInstance.UpdateBoundsBodySetup();
Or in the static mesh asset, set Custom Bounds Override slightly larger than visual extent.
LOD Per Instance
For HISM, LOD changes per instance based on distance. Sharp LOD transitions look like flicker. Enable dithered LOD transitions:
r.LODFadeTime 0.5 // 500ms cross-fade
Verifying
Walk past grass field. Smooth fade-out at distance. No instances popping in/out individually. GPU cost reasonable.
“Hysteresis (two thresholds) replaces flicker (one threshold). Cheap fix, big perceptual win.”
For VR especially, any flicker is nauseating. Cull distances should be generous and transitions softened.