StreamingMesh models are regularly way higher poly than the original model

My art style is low-to-medium poly. I love streaming meshes because they can be used to show the gesture of the world even while it is streamed out. My world is very large with long sight-lines so this feature significantly improves immersion for my players. However, I’m finding that streaming meshes are significantly, egregiously higher poly than the original model in my case.

Currently also, streaming meshes don’t seem to be occluded, which undermines the performance gain occlusion produces if I have a wide open world with lots of trees that have streaming mesh enabled, because right now these poly-inflated streaming meshes are being rendered even while occluded.

As far as I understand, most streaming meshes are calculated during edit-time in Studio. There is no reason why Roblox cannot do better to generate these static asset streaming meshes so that they are actually an optimization. If the original model is lower poly and lower density than the streaming mesh, just use it instead.

See these tube meshes.

3 Likes

Thanks for the report! We’ll follow up when we have an update for you.

Hi @PeZsmistic,
Thank you for reporting this issue. Would you please share the mesh, model, or place file that you experienced more polygons are streaming?

Hello. The problematic models are used in this game, as well as the main version of this game. BaA:R - Development Testing - Roblox

I will DM a place with a few models that have this issue. Mirrored in this private DM too https://devforum.roblox.com/t/re-streamingmesh-models-are-regularly-way-higher-poly-than-the-original-model/3304343

I also see that after copy and pasting them into a new place file, I’m seeing the streaming meshes significantly offset from where the actual model physically is. I’ll send you the file with this issue too since this issue has occurred for me randomly for a very long time and I could never pin it down enough to make a bug report.

To get these out of the repro file I sent you, I disabled and re-enabled the StreamingMesh property on one of the given models to fix the offset. You can see that there are slightly fewer drawcalls, but polycount is doubled. It should be possible to reduce drawcalls by removing expensive materials and such, while also using the lower poly combined mesh.

Original Draw (scene) 11 3866
StreamingMesh Draw (scene) 9 6494

3 Likes

This is very true! I recently noticed this. I got a performance boost by disabling streaming meshes. via the command line. I don’t know if this is a recent issue or something that has existed in the past but it might also be that some models are already too low poly. But from a performance standpoint in some use cases it might be more efficient to not use LevelOfDetail when your streaming in distance is set very low. for i,v in game:GetDescendants() do if v.ClassName=="Model" or v.ClassName=="Actor" then v.LevelOfDetail=Enum.ModelLevelOfDetail.Disabled end end

Thank you for reporting and providing more info.
We will continue investigating the interaction of the new occlusion culling feature and the streaming.

In the meantime, I did take a look at the models shifting around and I was able to reproduce the case. The recommended work around is to "select the model and all it’s child models, and toggle the LevelOfDetails to Disabled and back to StreamingMesh. This will update the Model level of details and that should fix the offset problem. Let us know how that works and if you see further issues, please post back here. :roblox_light:

Thanks!

So we’re on the same page, the issue is with the streaming mesh generation, not occlusion culling (though there is an easy improvement to make here). The streaming mesh result has been much higher poly than the original model for several years. This is what I would like to see fixed.

As I mentioned in the above reply, yes, toggling the properties related to streaming mesh corrects the visual huge offset. However, this is totally unintuitive and unexpected, and for the longest time I did not know what was going on, and was unable to fix it. Not to mention, these models are duplicated many times throughout my game and are also packages, so the exact source of the issue was not clear. I forget the exact circumstances, but messing with these properties in this situation was not very easy or intuitive. I would love to see this fixed once and for all.

Hi @PeZsmistic,

Hi, thank you for reporting the issue! In the latest version of StreamingMesh, we’ve added a polygon count check. If you disable the LevelOfDetail property and set it back to StreamingMesh, the model will generate a streaming mesh with a reduced polygon count compared to the original mesh. However, if the original mesh is already low-poly, we simply display it as is.

The image attached shows the updated streaming mesh with a lower polygon count compared to the original one in your reply.

Please note that streaming mesh computation is a resource-intensive process and requires recalculation when a subset of the model group is modified. To avoid unnecessary intermediate computations, we rely on developers to manually disable and enable StreamingMesh as needed (as to the offset issue).

We’re also exploring additional solutions to improve this process. Thank you for your understanding and feedback!

2 Likes

Awesome! Thanks for taking a look at this, that looks very promising. Note that the blue tree asset intentionally splits the streaming mesh across a few child models, so the true polycount of the streaming mesh result is probably a little higher than you show.

When can I expect this to be live to give it a try?

Thanks for the info @ the offset issue, that clarifies the nature of it. With respect to needing to toggle streaming on and off to use the most up to date streaming mesh generation result, it’s extremely unintuitive studio-side to have to disable and re-enable the property, there should be a button (e.g. beside the property dropdown) that will simply regenerate it then and there. It’s also extremely unclear that this is even necessary at all, I doubt that any developer would ever realize that their 4+ year old assets might be using an outdated streaming mesh unless they were having issues like this. It seems like more can be done in terms of studio tooling to make these gotchas more visible and to make the tooling easier to use.

Thanks!

1 Like

Hi @PeZsmistic,

The new feature is now live! You can download the latest version of RobloxStudio to give it a try.

Thank you for sharing your experience with the feature. We’re committed to providing better tools and continually improving the developer experience!

1 Like

Hello, I finally had a chance to check on this. It looks like nothing has changed?

I regenerated the streaming meshes for this model and I’m seeing 7 6478 streaming mesh versus 10 3960 regular model.

This is the model with the sub-models using streaming meshes, not the root model.

If I even reduce this to one model, the tree trunk, you can see that the streaming mesh is still higher poly than the original. 4 2020 versus 6 988.