Dense Foliage

I’ve been looking into the terrain system, it still appears rendering dense foliage is causing major issues with the deferred renderer in terms of performance. I checked pretty much everything else, from amount of tris to draw calls etc. and on a 390X I can render 50 Million tris without the card even breaking a sweat (without foliage) (loose around 2MS / 20 FPS).

So it’s nothing to do with LOD’s etc., at max in a dense scene I was rendering 8 Million tris / 190 DC’s (including terrain / foliage) which is nothing. Whilst looking about it’s an issue with overdraw and all the other lovely offset issues with using deferred rendering.

You may say this is an inherent issue to all engines using deferred rendering and that would be true, but nowhere near to this extent. Unity and CryEngine at fullscreen with 10K trees / 10K grass as an example w/ out Vsync I’m looking around 60 - 80 FPS, in Unreal I’d be lucky to get 40…! (Yes I was using DR in Unity)…

Can you either offer some suggestions? Or would you be willing to look into something like a forward + path? I know ages ago Epic said they were looking into it, but I could do with something setting in stone at this stage.

Appreciate all the help and support as always.!

The first obvious steps would be to do things like disable dynamic shadows on the foliage, take off the normal maps, use the most simple shaders you can, and try to put as much as you can on a single polygon to reduce overdraw with opaque pixels. Also, go into the material and disable accurate velocities from vertex deformation for things like grass. It’ll be a bit blurrier but it’ll be easier for it to process. And of course, make sure you disable distance fields on the smaller vegetation and disable it in the foliage settings so it doesn’t impact performance there.

There’s no real silver bullet for this particular issue, I’ve felt like I’ve been bashing my head against a wall for the last 2 months trying to optimize foliage for my own game, but there are tiny things you can start chipping away at, at the very least, to help things along. Even engines like the CryENGINE as you mentioned actually disable shadows on the vast majority of vegetation, only bushes/trees usually have it enabled even in the latest iterations.

Thanks, I’ve tried most of that besides from removing the normals and vertex deformations… Although I have been experimenting with a new renderer to see if once and for all it’s an “Epic” issue… I managed to get 51K instances running @ 60FPS (no LOD’s). Of course not all of them were in frustrum, but there were tens of thousands still in view and it was running around 60FPS full screen…

Of course, try to get it to blend in with the ground color to some extent as well, and fade it out over distance with the distance culling stuff. With how far everything looks like it’s going, you can probably afford to do some pretty heavy distance culling if you change the terrain material.

Sorry if I wasn’t clear, this was a test example of a custom forward+ rendering solution… The whole point was to stress test it as much as possible. With this solution I was able to render a metric ton of foliage with relatively little impact…

Although there is still a lot of issues with it at the moment and it’ll take a long while to have a properly functional version, I’ll have to weigh up if it’s worth continuing with it. If nothing else it does prove one thing, the TDR epic are currently using is the main culprit. I’ll have to dig deep and find out why because the DR in Unity has nowhere near the amount of overhead, if I find out why I shall report back.!

Tiled Deferred Rendering, as far as I’m aware, is only enabled once the amount of lights in a scene reaches a certain threshold. You can see when it switches over by looking in the light complexity view mode, it’ll actually show the tiles (and area lights will break, currently a bug).

This is about as far as I’ve been able to get the foliage in my scene:

For some reason the upload is crushing the blacks, but you get the general idea. This is running on my desktop’s GTX 780. There’s maybe 5k instances of grass for the entire scene (obviously less than that visible at the moment).

Oddly enough, at this point I don’t even know what’s causing the slowdowns, I can delete half the scene and it won’t put a dent in the framerate. I’ve been trying to get in contact with Epic for assistance in fixing it, but things have been a bit slow in that regard. Something odd’s definitely going on when it comes to foliage rendering in general, and this isn’t even that large of a map. It’s gotten to the point where I’ve had to start making an entirely separate set of maps that avoid using it until this gets resolved.

Good to know that I’m far from the only one, I’ve only had a fringe look at UE’s rendering solution… But it is still a deferred renderer (shading) (however and whenever it’s split). If Epic responds, I may take the time to improve the rendering solution and commit back to the main branch… If not then I’ll move on to something else.

Issue with running custom branches is upgrading, if you don’t you’re stuck with a platitude of other issues in said release, if you do then you’ll have to re-add / fix all the changes you made.

Let’s see what they say…

Whatever came of your rendering and foliage efforts? Its almost 2019 and foliage is still a complete joke on this engine. Its literally the only thing that I dont like about UE4. Once Epic fixes the foliage renderer, this engine will be unstoppable

You may like it or not, but there is nothing slower about foliage in UE4 than anywhere else. It is down to how you use it.

You’re joking right? Anyone who does outdoor scenes with loads of grass and trees knows how UE4 isnt great at rendering it. Both Unity and Cryengine can handle fields of foliage much better than UE4. Everybody knows this lol. If you somehow figured out how to render tons of foliage at 120fps+, then you’re the only one lol

Nope. Ain’t joking.

Anyone who does outdoor scenes with loads of grass and trees knows how UE4 isnt great at rendering it. Both Unity and Cryengine can handle fields of foliage much better than UE4. Everybody knows this lol.

It would be quite brave to sign as everyone under this, but if this is truly so, then everybody, referenced here by you as everybody, is wrong.

While there are differences in implementations, there is nothing that UE4 does cardinally different.

Engine defaults, particularly shadow settings, is number one cause of users mistakenly perceiving it as being slower. It isn’t.

Look man you can believe what you want. Like I said, if you have come up with an amazig way to render foliage at 120+ fps with dynamic shadows like cryengine can, then please share your project for the community.

Until then, I’ll go off my own research and trials with both engines as well as the dozens of research threads that you can look up on the forums confirming that UE4 just isnt great for high fps foliage gameplay in a dynamic open world.

Kite demo gets 30fps max on my 1070. Meanwhile Cryengine renders similar scenes at 120+ fps

Sounds reasonable. Good luck!