Distant Landscape Material Black when using World Partition HLODs

Hi, :slight_smile:

I was attempting to setup World Partition loading for my landscape, but I’ve ran into an error where distant HLODs render black in-game.

I spent a few days searching forum posts and trying different settings to narrow down the problem, but I haven’t had much luck. It’s hard to find information on World Partitions, so some help solving this would really be appreciated.

Here’s a comparison of what I can see in the editor, and when the game is running:


[Editor, Landscape Material]


[Game, Landscape Material]

At first I thought it was a landscape layer or material issue, but the problem is still present when I set it to use the default material:


[Game, Default Material]

Unlit materials also look very similar, but I’m not sure what could cause these sections to be unlit when they’re meant to be using the same material. I tried manually setting the materials for each Landscape Streaming Proxy and deleting and recreating the light sources, but these made no difference.

They seem normal, but here are some screenshots of my landscape and world partition settings:

Screenshot 2024-10-03 202039
[Landscape HLOD Settings]


[World Partition Settings]

In case it helps, I’ve confirmed that the HLODs are otherwise functioning as intended. I also disabled Forward Shading, tried a new landscape with the same settings, and tried both Instanced and Merged HLOD Layers (Default settings) for the landscape and streaming proxies. Unfortunately, none of these fixed the problem.

Thanks in advance for any help :slight_smile:

If the shot is from the same area, you are also missing a mountain range?

Anyway, I’d chalk this off to another reason for steering clear of landscapes.
You’d never had this issue using custom meshes with custom LODs - on top of much better perfromance.

Aside from the matter of “landscape or mesh” - at that distance you should be using mesh impostors.

1 Like

You can pin the Landscape HLOD actors in the outliner to open up their materials to see if there are any shader compilation errors. The default Landscape HLOD material is a Virtual Texture material (this can be overridden in your DefaultEngine.ini, but it’s not exposed in the UI), so my first instinct would be to make sure you have Virtual Textures enabled, but in my own testing the landscape HLODs look fine whether or not Virtual Textures are enabled or disabled when building them, or even disabling them after building HLODs, so possible red herring there.

All of the Landscape HLOD settings are set in the Landscape settings, so changing anything in the settings for the HLOD Layer you’ve assigned to the landscape won’t make much difference.

1 Like


@Fafhrd

Thanks for the pinning tip, that worked nicely to display the HLODs in-editor:

Following the mesh and material references for the HLODs, I found that they’re using the default FlattenMaterial_WS_Normal_VT material. In the material I was able to change the colour output, confirming it is what I’m seeing:

The only place I found a HLOD material setting was inside the merged HLOD layer I’m using, but changing this didn’t affect the Flatten material reference. You mentioned that the landscape settings have their own HLOD settings, so I assume they’re controlling it.

Unfortunately I couldn’t find any HLOD material reference in the details tab for my landscape, are there any additional landscape settings somewhere else?

This feels a lot closer to a fix, thanks.


@MostHost_LA

I do like the idea of having more control over my terrain LODs, but at the moment I’m enjoying the workflow from seeing my Landscape Auto-Material update in real-time.

Can you recommend any tutorials/documentation on building terrain meshes out of an existing heightmap? That way I might be able to paint the terrain using Landscape mode, but convert it into meshes later for the performance boost.

Thanks for the suggestion though. I’ve had a few problems with landscapes, so if I can’t fix this soon I’ll definitely give that a try.

The only place you can change the base material for Landscape HLODs is in DefaultEngine.ini

Add this and change FlattenMaterial_WS_Normal_VT to something else (I think you’ll have to make sure the texture parameters of the desired material have the same names in this material. Or you’ll have to make engine changes to the LandscapeHLODBuilder)

[/Script/Engine.Engine]
DefaultLandscapeFlattenMaterialName=/Engine/EngineMaterials/FlattenMaterial_WS_Normal_VT.FlattenMaterial_WS_Normal_VT

Before you do that I’d check the HLOD build logs for any errors. If it’s just assigning the FlattenMaterial_WS_Normal_VT and not an instance of that with baked textures, then there’s something else going wrong and just changing the base material isn’t going to help you much.

1 Like

Not sure about the new engine (or sorry excuse thereof) but in 4.x - well at least 4.18+ - you can open the Levels tab, select a level, and cook out the impostor for it.

It automatically gives you the mesh, a capture of the material as the base color, and a normal to apply thats taken by using LOD0.

Depending on topology and total tris count it could be much better to just use the mesh you generate (which you can set LOD reduction values for upon generation) as is, vs the landacape.

Just keep in mind you need to modify it and add custom collision - and should never go with conplex as simple for you just give players the ability to easily mesh if you do (which may be ok on single palyer actually, no one really cares what they want to do to screw their own gameplay).

Re the rest - could it be that you just arent using VT on the landacape material / the new outputs, and thus whatever the system is supposed to do is not working - processing 0 (which is black like you see) ?

1 Like

I’ve figured this out, thanks for the help guys. :slight_smile:

Frustratingly, it was actually really simple. When I tested if forward shading was affecting the HLODs, I didn’t delete the existing HLODs before building new ones, and I guess that affected the result. After extra testing on a blank project, it’s definitely forward shading that’s preventing the HLOD textures from being assigned.

Fortunately, it only needs to be disabled for the build. So my current solution is disabling it, building, and re-enabling. It’d be real nice if there was a render exception for building the HLODs since that’s in-engine instead of in-game. I guess I’ll make a feature request.

Before I figured this out, I made a mesh-building tool using the Geometry Script plugin. @MostHost_LA I did some performance testing and the meshes gave me about 250fps in comparison to the 190fps from the landscape, so thanks for the tip. Unfortunately, I couldn’t match this difference with foliage too. None of the methods I tried reached the same performance/instance as Landscape Grass. I don’t know what magic they’re using for it, lol.

I don’t want my work to go to waste, so could anyone recommend a place to post the tool for others?

Its magic.
Not really. Its because its pre-processed via the grass map.
Partially.
And because the system for placing instances of grass is just better built than say foliage or the HISMC.

The only way I was ever able to do better is ny HLSL, where gost of tsushima style you just make the grass with math and fill it in from the shader itself.

Unfortunately that way the end result looked like crappola, so yes. Performance is good (gpu only, hard to top). But the artistic side suffers…

Re the tool - you should be able to create tutorials on the forum - other people seem able to.

If its code stuff, just use github?

1 Like

Here’s a link to the tool for future readers:
https://fab.com/s/86857aed05a9

2 Likes

I’d suggest some revisions on it;

Take the concepts off this

Doing anything like this in Unreal is not for the meek, but the results you get from it actually make the engine usable :stuck_out_tongue:

2 Likes

Much appreciated :slight_smile:

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.