When players load into saved games, they are occasionally seeing some Nanite geometry “pop” as the streamed geometry is streamed in. Ideally we would like to hold up the loading screen for a few frames longer while the Nanite streaming has settled down.
What is the recommended way to observe the current status of Nanite streaming? Nanite::FStreamingManager does not have any useful looking public APIs, and I can’t find any good examples in the engine of trying to track Nanite streaming progress.
[Attachment Removed]
Steps to Reproduce[Attachment Removed]
Hi James, we currently do not expose any functionality to check whether the streaming manager is finished. The closest possible solution I can offer you is the cinematic prestreaming plugin, which can be used to hint to the streamer to start fetching data as soon as a cut sequence is about to finish. Since you are on 5.6, I do not quite recall its state, but in 5.8, we have moved it into beta, and it’s now very stable. If you can backport the changes, I think this could still fit your use case. Let me know what you think.
[Attachment Removed]
Gotcha. Unfortunately, we have not heard of any licensees that have done this before. I do know, though, that we have gotten this request before and that we want to add extra feedback to the streamer. Unfortunately, due to other requests taking higher priority, we have not had time to work on it yet. I have reported your feedback to the engineering team, and they mentioned we could get this into 5.9, but I cannot make those guarantees right now.
In the meantime, I was told that we have experimented with increasing the initial root page size for the Nanite cluster data, which helps stream higher-resolution cluster data more quickly. It’s not a perfect solution, but it could work in the interim.
[Attachment Removed]
No problem at all! Feel free to let me know if you have any more questions, and I will try my best to get you some answers.
[Attachment Removed]
Hi Tim,
Thanks for the feedback! Unfortunately it’s not really a solution for our case - it relies on a Level Sequence being running, and we would need to build some system that sets up an appropriate Level Sequence for every possible save point in the game, in every world state it can be in, capture these captures for every one of these permutations, then make sure we load them at runtime. Not really a viable solution for what we need I’m afraid.
Do you know if any other licensees have had any success if querying the nanite streaming state from the CPU? Any suggestions of things we could look at in the engine?
[Attachment Removed]
Thanks Tim - we’re locked onto 5.6 for this project, so sadly won’t be able to get the improvements from 5.9, but good to know it might be improved for future projects. We’ll take a look at the Nanite root page size too!
[Attachment Removed]