I’m running a simulation in studio. I’m changing colors of hundreds of parts very quickly. They stop updating. I want to wait until it renders before I continue making more changes. New changes get rendered before old changes, so most of it just never updates at all. I want an event that fires when rendering has finished, as in, everything has updated, and everything appears as it exists. There is currently no way to tell.
example: gridfractal.rbxl (11.9 KB)
press run and set the value of the IntValue Rate inside the script to some big number like 100,000. You will see that most of it stops rendering.
You probably don’t quite understand what “rendering” is, but regardless, the answer is “no”, because rolling out such an API would introduce a dependency of your game code on certain implementation details of the 3D engine (geometry generator, clustering, etc.). If we decide to e.g. change the latter, it would break your game.
So how can I make sure that what I see is correct before I make another change? If I make another change before what I see is correct then the newer change is prioritized, and if I keep making changes, the oldest changes never appear at all.
It’s not a bug, you are simply submitting more work than the clustering system is able to process. The “there’s no lag” part is because the clustering system is working as intended on a tight time budget. Realtime is real.
It’s sort of a bug in that we don’t prioritize updates correctly right now so you can permanently starve portions of the map by doing per-frame updates to other portions.
New clustering system would change everything sufficiently that I don’t think we’ll be focusing on fixing this though.
Instead of setting part.BrickColor, try pooling the parts and CFrame them so they switch places when needed. This should result in less expensive part updates
Ah yes, changing the CFrame causes the clustering system to use dynamic clusters for moving parts, which have far less capacity… So if you try to force updates by wiggling the parts, that will also proportionally increase the number of draw calls, and no, it won’t solve the geometry generator throughput problem.
That’s correct - CFrame currently is the only “fast” property in that you can change it every frame without really heavy code kicking in. Everything else is expensive.
We’re working on a new system that would make most properties cheap to update. But for now you’ll have to live with the limitations of the existing system.
Sorry for bumping this old thread, but is this still the case?
I’m making a chunk terrain system using triangles. I will be using PartCache so that I can reuse triangles from an old chunk, but I will still need to resize the parts. How costly to the performance is resizing a lot of parts at once?