How to get 'Water' plugin HLODs to build?

I am trying to build HLODs for a level that uses the ‘Water’ plugin and WaterBodyOcean.

The HLODs do not get built for the WaterBodyOcean can anyone help with this?

Below is a screenshot of my WaterBodyOcean LOD settings. I have tried almost every combination of setting in the HLOD section to try and get the HLODs to build.

Hello there @DanielOS96!

Checking around the community, it seems you are encountering a usual point of conflict between these two features. The WaterBodyOcean actor is not a standard static mesh, but a procedural spline controller by the Water plugin. Meaning, it won’t build the same way a regular static meshes do with HLODs. That’s why you see does broken grey meshes around the water area in your sreenshot.

Still, checking your settings, there are a few things to test:

  • Your “Detail Mode” is set to low, which is usually set as a scalability help for mobile platforms. Unless you are working on mobile, this could interfiere on how HLOD builds the component. Test by setting it to “High”, then rebuild.

  • Your HLOD Layer as no value assigned, so the actor has no place in the HLOD hierarchy. Even if the builder picks it up by having “Include Actor in HLOD”, with no layer assigned, it won’t know exactly when to load it. Test by giving it a defined HLOD layer, then build again.

Now, if the issue persists even after these changes, then the best course of action may be to have the water actor excluded from HLOD altogether. To do so, check the actor’s setting, and disable “Include Actor in HLOD” and “Include Component in HLOD”

image

This will make WaterBodyOcean render at runtime as normal. For distant views, the ocean surface can work fine without an HLOD, since most of the times it’s a flat surface with no complex geo to process.

Hope this helps, and good luck!

Hi, Thanks for the reply this issue has been driving me crazy.

I have tested these proposed solutions.

  1. Keep in HLOD and set mode to High: I tried this and they still do not appear in the HLOD.

  2. Assign a HLOD layer: I believe without one assigned it will default to the level HLOD. I tried setting this manually to the level HLOD and still have the same result, no water in the HLOD.

  3. Exclude from HLOD: I would like to avoid this as the near shore waterbody is not just a flat surface it is a moving tessellated surface with many polygons. However I will take any approach that works for now. I tried setting it so that is was excluded from the HLOD but it still gets culled at a distance.

    [Screenshot showing water tessellation in distance]

    [Screenshot showing settings to try and exclude this from HLODs]

    [Showcase of how despite being excluded from HLODs the water does not show]

Hello again!

Thanks for the update, kind of a bizarre turn of events though. The exclusion approach should have at least allowed you to render the water, but it’s still being culled. You even have “Desired Max Draw Distance” already set to zero for both WaterBody and Spline, as well as “Never Distance Cull” checked in. This means that something else is interfering here, beyond the HLOD setup.

And that something should be culling functions tied to the water plugin itself, which are independent from HLOD. These can be controlled by console commands, please test the following:

  • r.Water.WaterMesh.LODCountBias (more LODs retained at distance, try setting it to -1 or -2)
  • r.Water.WaterMesh.TessFactorBias (same as above for tessellation, test setting it to -1)
  • r.Water.WaterMesh.LODMorphEnabled (this should ease the blending between LODs, set it to 1)

After making these changes, move the camera around and check if the water body remains active. Keep adjusting the values until it’s no longer culled.

And for further reading on the water system, please check the UE doc below: