x

Search in
Sort by:

Question Status:

Search help

  • Simple searches use one or more words. Separate the words with spaces (cat dog) to search cat,dog or both. Separate the words with plus signs (cat +dog) to search for items that may contain cat but must contain dog.
  • You can further refine your search on the search results page, where you can search by keywords, author, topic. These can be combined with each other. Examples
    • cat dog --matches anything with cat,dog or both
    • cat +dog --searches for cat +dog where dog is a mandatory term
    • cat -dog -- searches for cat excluding any result containing dog
    • [cats] —will restrict your search to results with topic named "cats"
    • [cats] [dogs] —will restrict your search to results with both topics, "cats", and "dogs"

Grass Tool causing massive performance drop

Hello,

Landscape performs well regardless of how many components it has. But as soon as Grass Tool node is used inside the material editor, the performance exponentially decreases based on how many components the landscape has.

Here's a test I'm posting below to demonstrate the problem. The Grass Type linked to the Grass Tool node is the same for both tests. Please note that both landscapes are almost at the same scale so the number of meshes distributed on both is also almost the same.

Landscape with 1 component, With Grass Tool node used inside material, performance is okay. (Overall Resolution 64x64).

alt text alt text

Landscape with 100 components, with Grass Tool node used inside material, performance is extremely dropped. (Overall Resolution 63x63).

alt text alt text

Grass Tool is a feature for open world games, and in open world games a landscape usually has way more than 1-100 components so any attempts to go with the minimum number of components is a no go. You can try to reproduce the issue simply as I showed above, if there is any more information needed I'd be happy to provide. I think this issue deserves to be fixed as soon as possible as almost everyone is affected by it.

Looking forward to hear something from Epic on this. Thank you.

Product Version: UE 4.15
Tags:
more ▼

asked Mar 12 '17 at 11:56 PM in Rendering

avatar image

Maximum-Dev
529 7 15 18

avatar image AndrewHurley Mar 13 '17 at 05:52 PM

Hey Maximum-Dev,

I believe you might have a simple misunderstanding of how the landscape system works, and why we give users the ability to choose the number of components and quads. I did a stream on landscapes which I believe you will benefit from, but the bottom line here (especially in your case) is that you can get the same overall resolution with a lower number of components and have better performance, than if you were to use more components.

Getting Started with Landscapes

The tradeoff for having less components are the that the LOD transitions between components might not be as smooth which can be undesirable if you are viewing the landscape from really far distances. Each landscape component is a draw call, and in your example you are comparing 18 components in total, compared to a single landscape component so it is expected there is going to be a difference in performance. You can mitigate this by doing things like optimizing the LOD distances, the cull distances of your foliage, and changing your lights mobility type.

Thanks,

Andrew Hurley

avatar image Maximum-Dev Mar 13 '17 at 06:55 PM

Hi Andrew,

I think you missed my point. I was talking about the Grass node behavior, not the landscape. I'm NOT experiencing any performance drop coming from the landscape. I'm putting together another test for you below.

1 Component = 120 FPS

alt text

Grass Type linked to Grass Node inside material editor = 120 FPS

alt text

100 Components = 120 FPS

alt text

Same Grass Type linked to Grass Node inside material editor = 53 FPS

alt text

So basically Grass node has a problem which is tied to the number of landscape components. Landscape alone is fine.

Does this now help you to see the issue more clearly?

avatar image Dorian B. Mar 13 '17 at 07:35 PM

Hi, I have the same problem... I made some test with a new blank projet and it's the same. :/

avatar image AndrewHurley Mar 14 '17 at 03:19 PM

Thanks for the clarification. Once I have completed my tests I will return with more information.

Regards,

Andrew Hurley

avatar image barmhartsam Mar 14 '17 at 06:33 PM

I am having the same issue my fps drops below 30fps at times running on a 15x15 quad with grass material with 400 density painted on

avatar image AndrewHurley Mar 14 '17 at 08:24 PM

So I just ran a test on my end using minimal content to guarantee it has to do with the correlation between landscape grass output and the number of components in the landscape. My results do not exhibit the behavior you are reporting, which leads me to believe it could be something else. The difference between our projects are the meshes you are using and perhaps slightly different densities.

1 Component

alt text

100 Components

alt text

As you can see my landscape sizes and overall resolutions are identical to your test cases. Perhaps I am overlooking a step or you have left out a detail or project setting? My mesh is much simpler than yours and comes from the engine content with the world grid material applied.

Let me know if you have further details or I am perhaps missing something.

Thanks,

Andrew Hurley

1component.png (1.1 MB)
avatar image Maximum-Dev Mar 15 '17 at 12:07 AM

Hi Andrew,

I looked through the GPU Profiler and found something very weird. On the landscape with 1 component, the ShadowDepths costs 1.42 ms and on the landscape with 100 components ShadowDepths costs 10.84 ms. That is while it's the same grass type and same amount of meshes in both tests. So if the problem was specific to the meshes then ShadowDepths shouldn't cost different on landscapes with different number of components. Please check these out:

alt text alt text

It seems like each single landscape component has it's own cost for receiving any shadows and 100 components in our case here, adds up to 10.84 ms. I can supply you the project if you need it, please let me know.

Thanks.

avatar image AndrewHurley Mar 15 '17 at 01:51 PM

This goes back to my original post regarding this issue. More components are going to generally be more expensive due to each landscape component counting as a draw call. This also means each component will be receiving a per object shadow which can get quite expensive very quickly if you begin to use dynamic shadows.

If you would like you can share with me your project, but I have a feeling that what you are reporting is an expected cost with the amount of components being used. Either way, you can zip up your project and upload it to a shareable drive link and share with me in your response. I highly recommend you watch the stream I did as well as read the documentation to get an understanding of how and why landscapes have certain sizes that work better than others.

Thank you,

Andrew Hurley

avatar image Dorian B. Mar 15 '17 at 04:12 PM

Hi, I have a project with a lot of vegetation but since the 4.15 even with very low vegetation I can't get good performance, and bigger the landscape is (with more components), lower the performances are(while the quantity of vegetation does not increase) ... I have re-tested with a new project, same problem. I think it's a bug :/ But I do not know where, I'm currently trying to make a comparison with the vegetation tools.

(Sorry for my english)

Thanks.

avatar image Maximum-Dev Mar 15 '17 at 04:46 PM

Hi Andrew,

I got something very interesting to show you. Believe me, there's a huge problem here. Check this out:

100 components + Grass Node. ShadowDepths = 8.76 ms.

alt text

100 components + Foliage Painter (same meshes, but much higher density). ShadowDepths = 1.9 ms.

alt text

So again the problem only occurs when using Grass Node. If this was an expected cost then it shouldn't cost 6.86 ms less when using foliage painter. I can't post these ferns in public, but I'll use other meshes to create a demonstration project and put the link here for you shortly.

avatar image Dorian B. Mar 15 '17 at 05:03 PM

You are faster than me...

avatar image John Alcatraz Mar 16 '17 at 11:06 PM

I've lately spent quite some time with debugging shadow performance, and I think what you see is more or less expected, but should still be fixed. The thing is that, like Andrew mentioned, every component has its own draw call. This not just means that during the base pass there are 100 draw calls for the landscape, but during the shadow depth rendering there are 100 draw calls again. If you now add grass foliage, then you will have 100 draw calls during base pass for the foliage, and also 100 draw calls for shadow depths (if you only use a single material on the grass and a single shadow cascade).

Now the real issue you see is that shadow depth rendering can just be really slow for some reason. It does not scale well with draw calls, for some reason there's a pretty constant cost to shadow map draw calls, so 100 draw calls with a lot of vertices (foliage has many vertices) will be slow.

Manually painted foliage is a lot faster, because there you will only have a single draw call for every material that's used on the foliage, compared to the 100 draw calls you have with the landscape grass system.

For fixing this, either shadow depth performance has to be improved (that would be that best solution, since everything would benefit from this) or the landscape grass system would need to render all the grass as a single draw call. Making it a single draw call would make adding and removing grass instances a lot more expensive I think, that's why they probably kept it split up over all the components.

So the issue that needs to be fixed is shadow depth performance. Why are 100 shadow depth draw calls with 1000 vertices each a lot slower than a single shadow depth draw call with 100000 vertices?

avatar image Maximum-Dev Mar 15 '17 at 08:07 PM

Alright you can grab the demo project from this link: https://drive.google.com/open?id=0B8r-amh_izuod2ItdzY1OVZHdlk

For this test I've created 2 blank maps, both have the same landscape settings (100 components each), and I've used the cone mesh from engine content. In one of the maps the cone is painted using foliage painter, in the other map is distributed using grass node. The problem is again obvious.

100 Components + Grass Node. ShadowDepths = 5.98 ms.

alt text

100 Components + Foliage Painter (~17,200 instances, I've tried to maintain a similar density for both maps). ShadowDepths = 2.86 ms.

alt text

I hope this gives you an idea of what is wrong. If you still insist it's all expected behavior, well... I don't have more information to contribute.

Thanks.

avatar image DamirH Mar 16 '17 at 03:50 AM

This may or may not be related but a couple of months back I've experienced severe performance drop with the grass node but only if my landscape was scaled down from the original scaling.

avatar image Papa Beans Mar 16 '17 at 05:55 PM

Using the example project Maximum-Dev linked, I am getting the behaviors explained here also.

avatar image AndrewHurley Mar 17 '17 at 08:33 PM

Hey all,

So I ran the project on my end in the editor and during play and below are my results. I am not noticing the extreme drop in performance you guys are saying you experience. This does not mean I do not believe you, and just an observation as to what I am seeing on my end. We are working with some fairly powerful machines, so the difference in results could be due to hardware differences as well.

Painted Foliage in Editor

alt text

Landscape Grass in Editor

alt text

Painted Foliage PIE

alt text

Landscape Grass PIE

alt text

As you can see, I do have a slight difference is shadow depth cost when comparing painted foliage versus landscape grass, but not nearly as extreme as you are explaining. With all of this said, since there seem to be a number of users claiming this does occur on their end, which merits a bug report so our engineers can investigate further.

I will return to this post once I have reported the issue and have further information to share.

Thank you,

Andrew Hurley

avatar image Xodroc Mar 18 '17 at 02:41 AM

I just tested the demo map provided by Maximum-Dev as well.

For ShadowDepths I got 1.63ms with FoliagePainter map, For the GrassNode map I got 2.02ms. Not a huge increase for me, however I am not convinced there isn't a major problem.

Recently I was considering buying an asset on the Marketplace, and the creator was advising against using much grass; he was reporting similar issues to this thread which I found surprising.

I was a huge fan of the Kite Demo, it handled lots of grass quite well, among other things. So I decided to create a new project and package the unmodified Kite Demo on 4.15. The performance was an unplayable slide show.

Then I reinstalled 4.8, re-downloaded the Kite Demo and packaged it again on 4.8.3, this time is was as smooth as I remembered it being. Something is clearly wrong.

Without doing a lot of further testing I can't be sure the issues are related, but I'm hoping they are.

avatar image JaroMast Jul 14 '17 at 01:52 PM

Glad I'm not the only one that noticed this issue

avatar image hessjacobs Aug 29 '17 at 06:41 PM

I've experienced the same problem with the Kite Demo when preparing a benchmark - see here: https://answers.unrealengine.com/questions/700722/strange-rendering-performance-issue-with-417.html In 4.14, everything runs smooth. Starting with 4.15 up to 4.17 the kite demo is a "mess" when it comes to performance - as you said, an "unplayable slide show". Maybe its the grass tool, maybe something else. My tests showed that most of the frame time is spend in the Dynamic part of the BasePass,

avatar image 0Kintaro0 Aug 29 '17 at 08:42 PM

I'm experiencing the same problem with Kite Demo on 4.17, on 4.14 it's run smooth. My rig is not that bad: i7 4960X 6core 3.4GHz 64GB 2x nVidia 780 TI SLI I'm getting around 6-8 fps in the open areas.

avatar image Gunschlinger Mar 16 '17 at 05:34 PM

I have the same issues. Its annoying and i would like it to be fixed

avatar image kymo.thys Mar 16 '17 at 05:42 PM

hello, Just tested it out and I'm getting significant performance issues with the grass node too.

avatar image troyirving Mar 16 '17 at 05:43 PM

I'm working on a project that was actually dealing with performance issues with grass. I think this might be what's causing it.

avatar image BioXide Mar 16 '17 at 09:54 PM

I can also confirm that I'm getting performance drops from this

avatar image MoBIoS Mar 18 '17 at 02:06 PM

same issue here UE 4.15

avatar image SwiftLeigh May 04 '17 at 05:17 AM

Bumping this as I see the issue fix is targeted for 4.17. I had to stop using the grass material that performed so well in KiteDemo and all my other landscape projects in 4.15 . Similar to above comments these same projects work fine in older versions. A side by side comparison of KiteDemo on two different versions of the engine but on the same rig should help diagnose. It would be great to know what workarounds there are to get the performance back to where it was in the meantime ahead of the issue fix if there are any.

avatar image AndrewHurley May 04 '17 at 08:31 PM

Workarounds would be to use the Foliage Paint tool as often as possible to avoid populating your entire scene with Grasses from the landscape grass tool. Secondly, if you do use the landscape grass tool I would look at reducing the cull distances and making sure you have established LODs to handle transitions. Try also reducing the density for the grass tool a bit as sometimes you can a convincing look with half the amount of foliage.

Aside from that, you will need to wait for the release we have it marked to be fixed. Thanks for your patience.

Andrew H

avatar image Maximum-Dev Jul 14 '17 at 09:47 PM

Well target fix was 4.16, then 4.17, now 4,18. Is there any hope to see it fixed before 4.19 ?

(comments are locked)
10|2000 characters needed characters left
Viewable by all users

1 answer: sort voted first

Hey all,

So I went ahead and entered the bug report as mentioned. I appreciate everyone's patience and for providing me with the necessary information to complete the report. Below is a link to the issue on our public tracker.

UE-43093

Once the issue has been addressed by our engineers the ticket will be updated and reflected in the public tracker. Let me know if you have further questions or need additional assistance.

Cheers,

Andrew Hurley

more ▼

answered Mar 20 '17 at 07:59 PM

avatar image MoBIoS Jul 19 '17 at 04:04 PM

thank you Andrew

avatar image AndrewHurley Jul 19 '17 at 04:09 PM

No problem. We are currently working to optimize the Landscape and Foliage tools to have better performance. We have made some progress, but some of these changes are not fully implemented just yet. Thanks for your patience while we work to improve these systems.

avatar image eyoli Sep 18 '17 at 12:24 PM

Hi, any update on the status of this bug? Basically the grass tool is unusable in production since March 2017... I can see UE-43093 is targetted to 4.18 but several bugs are targetted to some release but don't make it into such release. This one is a major bug, can we be sure it will be handled in 4.18?

avatar image Maximum-Dev Oct 02 '17 at 12:50 AM

Any updates? :)

avatar image Michel.Dupuis STAFF Nov 14 '17 at 03:47 PM

Hi @Maximum-Dev,

I was wondering if you're still seeing the exact same issue when using 4.18?

Simply want to be sure the info is still up to date, as i'm going to tackle this quite soon, so dont expect it for 4.19, it's a big changes. As on my side on 4.19(early dev) i see the shadow depth cost to be really high in both cases, not only the grass one, so basically both behave the same using a GTX 1060.

And as Andrew said, the more component you have the higher the draw call counts, thus rendering cost. Grass system do not work the same way than the painted foliage. For painted foliage you have 1 component (thus 1 draw call) for each foliage type, where as for grass, you have 1 draw call for each landscape component + component for grass, as they are both relaying on the same distribution system.

Which come down to comparing system 1 to be : - 101 normal draw call (100 landscape components + 1 foliage component) - 101 shadow draw call (100 landscape components + 1 foliage component) = 202 draw calls

VS system 2 - 200 normal draw call (100 landscape components + 100 foliage component) - 200 shadow draw call (100 landscape components + 100 foliage component) = 400 draw calls

Obviously the second one will have a much higher shadow cost.

I'm simply explaining so everyone is on the same page as of the current implementation.

As for Kite Demo performance, i can't speak from before, but i can assure you guys that it's not landscape and mostly not foliage related (from what i have seen, disabling grass didn't increase perf that much)

Hope it help clarity a bit the current system.

Thanks

avatar image Maximum-Dev Nov 14 '17 at 05:04 PM

Hi Michel,

I'm testing on 4.18 now. Here are my landscape settings:

alt text

Here's the cost on GPU, around 8ms.

alt text

Here's the cost on GPU with a single bush (around 170 tris per instance), around 23ms.

alt text

I'm running a GTX 970 at 1080p. Please note that while the landscape is 1x1 Kilometers, the grass is being spawned only on small circle around the player and is not covering the entire 1x1 Kilometers. Also there are 64 components total but there isn't grass on all of them as you can see.

The massive performance cost is still coming from shadow depths as soon as grass node is used. Also please notice that we're dealing with only 1 mesh here where in outdoors we'd need many different pieces linked to the grass node.

If you need any additional information please let me know. Thanks.

avatar image Michel.Dupuis STAFF Nov 14 '17 at 05:29 PM

Can you provide some info on the mesh you're using? i.e triangle counts, LOD counts, etc?

Thanks

avatar image Michel.Dupuis STAFF Nov 14 '17 at 08:26 PM

Here is what i see on my side when doing some test in a map with the shown landscape settings and 1 directional light and light in the back of the camera (for worst case):

Painted Foliage: alt text

Grass: alt text

As you can see both are quite similar in performance, i'm using a mesh(the engine content cone) with 3 LOD, for sure if your mesh only have 1 LOD you will have massive performance issue.

In both example you can see i'm drawing +500k instances with similar density, shadow depth is high at 8ms but it's the same for both system.

Unless there is something missing, i don't see the performance issue you're seeing(i.e grass specific issue)?

Thanks

avatar image Maximum-Dev Nov 14 '17 at 08:57 PM

Hi there,

Like stated in my previous post, "(around 170 tris per instance)". Usually a grass patch goes up to +500 Tris for LOD0 and goes down in other LODs. Here I'm just using a single bush without any LODs since LOD0 is already low.

However, my ferns had 4 LODs + Billboard so the issue can't be related to LODs or tri count. What I do suspect is that the frame rate drops happen when the used mesh has a masked material on it. I did give it a try using a cone and wasn't getting hit as hard as I do when using a mesh that uses masked material with 2 Sided foliage shading model.

I'm going to setup a demo scene with actual grass and post my results + dropbox link to the project for you to have a look at.

avatar image Michel.Dupuis STAFF Nov 14 '17 at 09:06 PM

Thanks!

I think it will be useful to help finally resolve this issue :)

avatar image Maximum-Dev Nov 14 '17 at 09:52 PM

Alright here's a grass patch with LODs, Grass density set to 30.

alt text

There's about 9ms increase. Here's the project. I've also included a camera you can pilot to have the exact same view as I do.

https://www.dropbox.com/s/o4upwhki1smvuhk/Project.rar?dl=0

My specs:

GTX 970 16GB RAM i7 4790K 1080p

Thanks.

avatar image Michel.Dupuis STAFF Nov 15 '17 at 12:13 PM

@Maximum-Dev When you say there is about 9ms increase, compared to what? no grass at all or compared to painted foliage?

avatar image Maximum-Dev Nov 15 '17 at 03:03 PM

Compared to no grass.

I went ahead and placed same amount of grass using foliage painter and am getting the same ~9ms hit, can't spot the performance difference we were having back in the day. But is this cost normal?

The main issue is that scattering several meshes is basically preventing us from achieving a solid 60 fps still without anything else going on in the scene. This is a roadblock for us working on an open world/outdoor game.

The cost we're seeing here for having foliage instances is actually more than the cost we'd have been paying for something like SVOGI (if it was still kept in the engine) and this is all basically coming from ShadowDepths, which is exactly the same issue with landscape tessellation bug reports.

I'm sorry I'm an artist and don't know much about the technical aspects for these systems I just can say that this is a solid STOP sign for ourdoor projects as many have agreed. There's definitely something messing with performance there.

avatar image Michel.Dupuis STAFF Nov 15 '17 at 03:14 PM

This is good to hear, that you are getting the same result for grass or painted. As for is 9ms normal for what you're doing? I would say it depend on the GPU/platform, as on my side the cost is only 3ms for your scene. Keep in mind that each primitive need to be rendered more than once, so the higher the prim count the higher the cost.

I'll see if i can do something on this end, but it might simply be "normal", try being more aggressive with your primitive count in your LOD, you should see the cost come down a lot. Maybe you could try disabling the shadow on the "grass" and use the landscape lightmap instead, (i'm not an artist so it might not give the result you want to achieve)

Also i think one of the big issue regarding this system, is missing doc explaining on how to properly configure it to achieve a good ratio of perf vs visual quality.

As for being the same problem with the landscape, keep in mind that the optim i made are on many front, but one of them is sending appropriate data to the GPU either for normal render pass or shadow pass.

avatar image Maximum-Dev Nov 15 '17 at 03:29 PM

Thanks for the help. Also is it possible to have a simplified mesh cast shadow -for- a mesh instead of the LOD0 itself? For example disabling "cast shadow" on a grass that is 3000 tris, and have a grass that's 500 tris to cast shadow instead, while not being rendered.

Edit: Found the solution to that. That's probably going to help reducing shadowdepths cost. But really looking forward to see if you can come up with a better solution. Thanks.

avatar image Michel.Dupuis STAFF Nov 15 '17 at 03:42 PM

Well what i'm doing for landscape (that will be in another checkin) is that i lower the LOD used to render the shadow. For example, if you render with a LOD2 your landscape, depending on calculation i might use LOD3 or 4 for the shadow rendering this reduce the cost of shadow depth A LOT with real visual difference, in my test case.

As for grass, i'll have to check but maybe i could do something similar, as the one costing the most of the shadow cost are the really far away one, in most case you don't see enough details to justify the cost of rendering with normal LOD.

P.S what is the solution you found for doing something as you described?

avatar image Maximum-Dev Nov 15 '17 at 05:04 PM

By checking "Hidden Shadow" and "Actor Hidden In Game" I can make a mesh cast shadow while not being rendered, however, I can't access this feature because these: https://answers.unrealengine.com/storage/temp/66562-method02.jpg Are not accessible when a mesh is placed using Grass Tool or Foliage Painter so I'm stuck.

But, if you can make it as simple as allowing the specified LOD i.e LOD 5 to cast shadow for other LODs instead of each LOD having it's own shadow casting, that should significantly reduce the shadow cost while not making much visible difference.

If that actually come true, we'd be able to use it for pretty much everything i.e have our rock LOD 5 cast shadow for rock LOD 0, applying this technique would tremendously help with battling the ShadowDepths cost specially in outdoors where there are lots of rocks, trees, ground cover etc.

Thanks.

avatar image eyoli Nov 14 '17 at 03:51 PM

@Michel.Dupuis: you may want to test the Kite demo, if it is crawling like crazy there is a problem, last time I checked it was (not with 4.18 but 4.16 or 4.17).

avatar image Michel.Dupuis STAFF Nov 14 '17 at 04:00 PM

@eyoli I know there is perf issue in Kite demo, all i'm saying it that it's not relate to landscape, and i'm quite certain it's not foliage related either, as if you disable the grass rendering you dont gain that much fps.

Keep in mind that while optimizing the landscape rendering i used the Kite demo as a test map, and if you do a "stat landscape" you will see that the landscape is really not taking much of the rendering cost.

I would need to check the foliage to be 100% certain, but it's something else that is costing a lot in this map, probably some new feature that were added in the engine, but the map was'nt updated accordingly to tweak params properly.

avatar image eyoli Nov 14 '17 at 07:01 PM

There is a comment above in this thread saying that there was massive performance drop for the Kite demo when moving from 4.14 to 4.15. I don't know if this is related to foliage or other, but I believe this should be investigated (maybe by opening a new bug ticket for this specific issue?)

avatar image Michel.Dupuis STAFF Nov 14 '17 at 07:31 PM

Yes you should enter one specific to KiteDemo

avatar image MoBIoS 6 days ago

Thank you for the effort being put into resolving this issue. I hope we are getting to the bottom of it soon.

(comments are locked)
10|2000 characters needed characters left
Viewable by all users
Your answer
toggle preview:

Up to 5 attachments (including images) can be used with a maximum of 5.2 MB each and 5.2 MB total.

Follow this question

Once you sign in you will be able to subscribe for any updates here

Answers to this question