Grass is Raytraced by default in 4.26 resulting in huge performance drop

Edit: After more research I managed to narrow the issue down to GrassTypes. It seems they are being raytraced by default now in 4.26. Whereas in 4.25 raytracing every blade of grass was disabled to save our GPU’s from melting or crashing. I added a project below that allows anyone to repro the steps.

Hi everyone,
I got a number of unusual reports from Brushify customers about severe lag with raytracing enabled in the latest 4.26.1 hotfix.

I investigated further and discovered there is a significant decrease in performance from version 4.25. The issue seems to significantly affect levels with large landscapes.

This is from the same project/files, the only change is engine version.

Third person example map. Only modification is that the Light Source is set to Movable and Source Angle is 55 (This shows the soft raytraced shadows)

4.25:

4.26

A 20 FPS drop on this simple scene. Nothing terrrible, but not great. Also the shadows are slightly worse quality on 4.26.

Now the real issue… Landscapes.

I make an empty map and create an 8k landscape.

4.25 a solid 100FPS:

4.26 now down to 88 FPS:

On landscapes with GrassTypes the performance drop is huge.

Decent performance on 4.25 with a 1080TI:

Raytracing the exact same scene is down to below 10FPS in 4.26 now:

I researched the exact cause of this huge drop. It appears that every grass mesh on the landscape is now being raytraced by default, there doesn’t seem to be any distance culling on it. It actually ignores the Cull distance parameter in the grasstype! Rendering the grass shadows on all the generated grass near the player camera.

When I use the console command r.RayTracing.Geometry.InstancedStaticMeshes 0
Performance returns to 70 FPS.

It seems some of the default Raytracing settings for instanced meshes have been altered by default in 4.26.

If you’re reading this thread and have RTX hardware and could try to replicate this it would be a great help to me as I can file a bug report with repro steps.

The current workaround is simply to use r.RayTracing.Geometry.InstancedStaticMeshes 0 if you’re using 4.26 (not great because it basically removes raytracing from all the Foliage/Grasstypes) or switch to 4.25 where the bug is not present.

Cheers
Joe

1 Like

Welcome to the party.
the forums are peppered about performance issues since .26 dropped.

Tell all your customers to go and bother the devs in the Feedback channel :wink:

It does seem to be a rocky release =D
I’m pointing everyone to this thread and advising everyone to use 4.25 until I can atleast find a good workaround.
The problem is there isn’t really anything I can specifically change in the level settings, materials or grasstypes etc to actually disable raytracing or prevent this bug. It just seems to be a binary On/Off. The moment raytracing is on it tries to cast shadows on any grass that has dynamic shadows enabled :frowning:

In the future, at the very least run “stat UNIT” and “stat GPU”. FPS is not a useful diagnostic tool.

But on the plus side you posted reproduction steps. I tested your steps (making an 8k landscape) in both versions with raytracing enabled, frame time is being eaten up by Raytracing Dynamic Geometry Update which (on an RTX 2070) on launch (standalone) is ~27ms in 4.26.1 and ~4ms in 4.25.4. If I leave the map running for a minute or so in 4.26.1, the dynamic geometry update slowly drops until it stabilizes at about 13ms. In 4.25.4 it stabilizes at ~2-3ms.

This appears to be an old problem, I found a suggestion here that said to change the landscape MaxLOD from -1 to 1. It worked for me. In fact, I was able to change it back to -1 and it still worked even after restarting the project… which leads me to think it may be an issue with the landscape generation. After setting it from -1 to 1 and back again, dynamic geometry update dropped to 0.7ms and overall frametime was significantly better in 4.26.1 than 4.25.4.

Interestingly, 4.25.4 has a few cvars for raytracing landscapes (r.RayTracing.Landscape.*) that are all missing in 4.26.1. My assumption was maybe they changed the defaults, but it seems the options have been removed entirely.

TL;DR: I have no idea what is going on but I was able to reproduce it and there is at least one solution for you.

@Arkiras, thankyou that’s useful information sorry for the lack of GPU stat, that would have been more informative sorry. I did take a look at that thread before posting this, and it seems to be a different issue only happening when the camera moves, I was able to reproduce that in all raytracing scenes with landscape. It’s probably contributing to lower performance for sure.
I would be interested to see what results you get from Grasstypes system, that caused the most significant drop on my maps. Although it’s quite involved process to setup a landscape material and grasstypes it’s not that easy to make repro steps.
I do have a simple grass project that I was using before for a different bug, so i might repurpose that to try and create an example project.

Using that solution completely solved the issue in 4.26 for me, even with the camera standing still.

Can’t test landscape grass right now, sorry.

I created a super small test project with a single grass mesh on a landscape in order to reproduce the grasstypes/raytracing issue.

Open the project in 4.25:

Great performance, and notice that the Grass has no raytraced shadows (someone must have realized it was stupidly expensive)

4.26:

massive performance drop, Raytracing is enabled on all grass meshes by default and even seems to ignore any culling distance values I enter into the grasstypes files. You can even visualize the problem perfectly by going into the grass type and turning cull distance down.

This is with Cull distance at 2000, the red line is the Real Cull distance… but raytracing completely ignores it and renders shadows for grass that isn’t even visible.

Same exact project, only change is opening in a different engine version.

This test project is 3MB and can be downloaded here:
https://www.dropbox.com/s/l0jqbscivg…ng425.zip?dl=0

To reproduce you can right click the Uproject file and choose Switch Unreal Engine version and that should be it.

This wouldn’t be such a terrible issue, but there doesn’t seem to be any way to disable raytracing specifically on the grass. There are not options for this in either the static mesh editor or the grass types file. There is also no Grasstypes specific CVAR.

Cheers
Joe

Mostly curious, and your clients who end up here probably should be too.

Have you tried the Nvidia branches?
https://github.com/NvRTX/UnrealEngine

And in case you get a 404, here’s instructions.

It’s not “magical” or anything. But if you are on a 1080ti and you want to at least be able to get around 20fps on a 2k scene, this works better than the regular release.

hi dude, I sent you a pm. we can chat about nvidia/custom branches there. I’m trying to keep this thread focused on the bug in the main branch.
I will submit a bug report soon, I think I’ve got enough.

Bug report submitted today. Fingers crossed.

In the best case scenerio, I hope they disable Raytrace on the grass by default, and maybe give us a tickbox in the grasstypes to enable Cast Raytraced Shadows, incase someone with a super computer actually wants to raytrace every grass blade.

With that said if the raytracing system worked with the Cull distance option in the grasstypes then it might actually be feasible!

The plot thickens, I got a number of complaints surrounding the Render Queue + Grass system in 4.26. After testing I found that the render queue experiences significant loss of performance in 4.26 when trying to render scenes with Grasstypes system. This is something i’ve reproduced with a few random environments (that use grasstypes) from marketplace.
Seems the grasstypes system really got broken in 4.26 unfortunately.

1 Like

I had the same problems, but in my case it was the outdated programming for the graphics cards and their drivers, so after a driver update and seeing the deterioration in performance I reverted to the previous drivers for the gtx 1080 graphics card.

this Grasstypes issue has nothing to do with graphics drivers.
changing drivers would make no difference since the issue is with the Renderer / grasstypes system itself.
Both my test machines are running latest drivers and encounter the issue. As do many of my customers running various hardware. This is a hardcoded Bug that affects all machines I’ve tested it on.
Long story short… Grass has raytracing enabled in 4.26 causing huge lag. https://forums.unrealengine.com/t/grass-is-raytraced-by-default-in-4-26-resulting-in-huge-performance-drop/211376/7?u=brushify.io

In my case yes, there is on the part of the card manufacturing companies, the obsolete time programming, where the performance of the cards drops under certain drivers, they do it so that people go on to buy their new generations of cards, that’s why in my comment, I have put, “In my case”.

Now, don’t be surprised if your graphics card is damaged and you have no idea why.

I compiled the Nvidia branch last night, and it seems to be working just fine with the grass type foliage in the landscape material (ray tracing enabled). The multi-biome level from the Brushify environmental shader pack was getting as low as 8-10fps with the official 4.26 editor on an EVGA 3090 Kingpin, 8700k 4.8GHz, and 64GB of RAM. That’s in the smaller viewport too on a 1440p monitor, not even fullscreen. The same area is 60-70fps on the Nvidia branch.

Somewhat related, the inconsistent LOD & shadow popping of procedural trees/bushes is no longer an issue either. It looks more like setting r.RayTracing.Geometry.InstancedStaticMeshes.Culling 0 would in the official 4.26 editor.

Here is the commit on the Nvidia branch where they mention improvements to instanced static meshes, specifically mentioning foliage. I don’t know exactly what fixed it yet, or if it was this commit. I just tried the Nvidia branch after seeing this note. Hopefully the information can help identify the issue with grass.

Optimized Instanced Static Mesh Culling

This optimization addresses efficiency tied to the handling of instanced static mesh (ISM) objects including foliage. In scenes with heavy ISM loads, it can substantially reduce CPU load.

Commit:

  • 05704a30341c8a53517922c64faba17d1744a1ba

https://github.com/NvRTX/UnrealEngine/commit/05704a30341c8a53517922c64faba17d1744a1ba

1 Like

@kynolin - Thanks so much for taking the time to test this. I’d reckon if you switch that same project to 4.25 you will get equivalent performance to the Nvidia branch (back to 60-70fps in that same scene). So far the only version affected seems to be 4.26. It’s good to know that the Nvidia branch is unaffected (doesn’t help too much though because very few people use it), it probably didn’t receive whatever changes were made to the system in 4.26, or there were newer commits that corrected the problem. I’m still waiting to hear back from epic about the bug submission. I will keep on it until I can get them to reproduce it.

@llYuell - The performance issue you had but it sounds unrelated to this bug.

2 Likes

Hey There,… so I’ve got the same issue coming from 4.25 to 4.26… everything was fine, on very large landscapes with complex materials in 4.25… (but no assets or foliage)…

Then there was this huge performance drop going to 4.26…(basically on simple just created landscapes…) so I tried to investigate and find solutions… one workaround was turning off the landscape for raytracing…
"r.RayTracing.Geometry.Landscape 0" (but obviously, lets say u use raytracing shadows, Raytracing GI and so on,… it will not react anymore to the landscape)

So today I had another try, and I remembered something from the time I was working with UE on my old ultrabook…
There were these “new” performance drops in 4.23 when working with landscapes…
So I found this CVAR that I then always had to turn off: “r.RayTracing.Geometry.Landscape.DetectTextureStreaming” …and this got the performance back to normal…(Even if my hardware wasn’t RTX capable)…

So tried “r.RayTracing.Geometry.Landscape.DetectTextureStreaming 0” today, and voila,… performance got back to “normal”,… and my landscape is huge,… full with foliage,… raytracing,…GI… Raytraced reflections and so on,…

But overall,… I’m not a technican,… I tried this CVar a couple of weeks ago on the exact same project and level with no success,… so I was kinda surprissed that it worked today,… maybe something driver related?! (oh btw… hardware is ryzen3900x /Nvidia RTX2080super… tons of RAM and M2 ssd’s on a x570 chipset board)

Hope this helps some of you guys,…

@panPvonB - interesting i’ll give that cvar a shot. I’m hoping to find a solution to this soon without having to fully disable raytracing, would be a shame but it’s causing a lot of people headaches when they open maps with RTX on and it melts their machines.

So if Raytracing is not enabled in project settings , then none of this above should have any effect , right?

Yes, this only affects Raytracing and 4.26, as long as you disable raytracing this won’t affect you.