Based on discussion in this [Content removed] I’ve done some tests with the newest Nanite Foliage (used Quixel Megaplants assets from FAB; Dynamic Wind plugin is added to project and enabled as well.
Apparently, when something like forest (PCG Volume from Assets_Zoo PVE Plugin, roughly 1x1 km) is created in world, in PIE USkinnedMeshComponent::TickComponent takes a lot of time on CPU, then RenderGraphExecute updates (some Transforms?) and DeferredRenderUpdates takes some time too:
[Image Removed]
In Packaged game situation is better, though not ideal - still Transform or RenderData takes quite a lot of time:
[Image Removed]
Tested on Ryzen 5800X3D and AMD Radeon 7800XT
Is it the intended behavior, or considered as bug as of UE 5.7.1? Because Editor still renders Foliage without that big performance issues, I assume something is wrong with USkinnedMeshComponent::TickComponent, that behavior between Editor and PIE/Packaged is different.
I’m sorry for not getting back to you sooner. Could you please zip up the project as is, along with your configuration files, and send it over to me? I think we might have fixed this already in our dev branch, but I want to perform some tests on my end to verify this.
Hi Bohdan, yes, that is a large upload, which is too big for our ticketing backend. Do you have access to Box? If you provide me with your email address, I can create an upload link that you can use to share the project with me. Alternatively, if you prefer to share the project through your own file-sharing service, that would also be acceptable. Let me know what works best for you.
No worries, you should receive an email in the next few minutes with the upload link. Please ping me here once you have made the upload, or if you haven’t received the link, since I do not receive notifications on status changes in Box
Hi Bohdan, thanks for the upload. I am seeing slightly better perf numbers on my end, even with our latest internal engine build, although I suspect that this is due to me running the project on a more performant hardware setup. I agree that the ticking of the skinned mesh components is part of the overall slow performance; however, the larger issue is that the project is GPU-bound, mainly due to the render thread having to wait on occlusion queries from the previous frame (see screenshot). I will need to ask around to see if this bottleneck can be improved, but I should have an answer for you after the break, if you don’t mind. Please let me know if you are okay to wait for a reply from us until the new year; otherwise, I can look into escalating the issue.
I have been having some conversations with folks about your performance issues and have a small update to share with you. It’s still a bit inconclusive as to why you are seeing such a high count of ticking skinned mesh components. Did you by any chance modify any of the tree assets that came with the PVE plugin? The tree assets placed with the PCG volume should all be instanced, skinned mesh components, which should drastically reduce the amount of ticking that needs to be done per frame. In the demo project you sent me, it was unclear whether you had made any modifications or not.
Thanks for the feedback thus far. I have informed the team about this issue, and they will keep it in mind as they continue to improve the procedural vegetation editor and the skinned mesh component. Since the PVE is still experimental, we will do our best to bring its performance into a production-ready state within the next few months. If you have any additional questions about this, please don’t hesitate to let me know.
I should clarify that my initial message was based on a hunch that we had some fixes available already; however, I tested your project on our most up-to-date stream, and it made no difference. The UE5-Main perforce stream and GitHub repository are updated on a daily cadence, so you could peek at the changes there if anything helps improve your perf. That is all I have for you at the moment, but if I hear about any further changes, I can try to get in touch with you for some additional testing. Let me know if that works for you.
That sounds good to me. I have set a reminder to check in with the team before the release of 5.8, so if I have anything to share, I will let you know. If you have no further questions, I will proceed with closing the ticket.
No problem! It is good to inform others who are encountering this issue that we are already investigating it. Therefore, we can keep this ticket public. If you don’t feel comfortable with that idea, though, then I can make the ticket private.
Sure, should I just attach it there (zip is ~ 5Gb)? I have another content in project, though I could clean it up to have a map with only PCG setup and no custom content .
Hey, I managed to strip out code, most heavy content and assets non-related to question. Anyway zip is around 2.5 Gb. I’ve just uploaded the zip to Box.
If you see anything else that could be also improved, please shout. For example, I did not touch the shadows - shadows casting is a bit more expensive than usual, I assume I need to tweak some cvar in Dynamic Wind/Nanite Foliage, similar to VSM Cache Invalidation behavior when WPO is used. Or maybe forest is just too dense?
Also I had weird crash in Dynamic Wind, when Listen Server + Streaming on Server is used, apparently Dynamic Wind tries to set some GPU buffers on non-existing instance, so crashes. When I know more, I’ll make another entry to EPS or comment here.
I’m definitely OK to handle it after the winter holidays. No rush, just RnD’ing new Engine possibilities.
In the demo project I’ve used Quixel Megaplants from Fab (iirc European Beech and/or Black Alder packages, for example https://www.fab.com/listings/cefe5722-9c31-4aa2-9ee2-e5426610d5e6). All of the assets are unchanged. I put Megaplants trees as is to Trees array of PCG Volume. PCG Volume has changes - it uses Landscape to generate points, though no changes in Instanced spawner logic.
Did some debugging of void USkinnedMeshComponent::TickComponentand what immediately jumps out that in Editor “TickPose” and “RefreshBoneTransforms” aren’t called.But they are called each frame inside the game whereas The Editor only calls “DispatchParallelTickPose()” and that seems to be enough for trees. My Guess the other stuff it does in tick for the poses and bones are mainly intended for anim montages and such, so for Character crowds and such, but it seems the trees dont really Need it and currently it is unnecessary extra Overhead(probably oversight?) it disables all other animation like character controller, so you need to add the property and expose it in the spawner
You’ve mentioned team has already done some performance improvements on dev branch, thus even with those improvements issue with occlusion persists/exists. Do you have any plans to merge such fixes to ue5main at least?
Also, is it acknowledged that there are some issues with TickComponent exactly? I might help testing potential fixes, if you need some feedback.