- Home /
Does writing to Mesh arrays cause allocation?
I'm trying to optimize scripts which generate meshes procedurally at run time. I'm concidering making a pool of game objects with meshes that are never destroyed but deactivated / reused / reactivated. I'm already reusing arrays with generated vertices / colors / uv / ... and I never read Mesh.vertices etc only write to them. The sizes of arrays never change, but I am wondering: when I write to these arrays does it trigger memory / GPU resources (re)allocations (or anything else that could cause a drop in performance).
I've also wondered about the details of how mesh data is handled under the hood. I think I remember reading somewhere that if the assigned vertex array is of the same size as the mesh's current vertex array, no buffer reallocation will occur - the new data will just overwrite the previous data in the buffer. (Which makes sense of course.) I'm not sure where I read this though, and it would be nice to know for sure that repeatedly overwriting the vertices of a mesh won't incur costs other than that of transferring the data itself. ($$anonymous$$aybe someone else can provide some info on this.)
FWIW: I have implemented the pool and it seems to have solved my performance deterioration problem. So just writing to those arrays seems to be harmless enough.
I find that the GC bottleneck occurs when reading the data out of a mesh (Vector3[] verts = mesh.vertices;), if I pool my vertex data for instance, I get a massive boost in performance, but that means you have to store the same data twice, which is a pain.
Your answer
Follow this Question
Related Questions
How do I efficiently maintain a constantly-changing list without triggering GC? 2 Answers
SendMouseEvents - GC Collect Spike Issue 1 Answer
Display numbers in UI.Text Garbage Free? 2 Answers
Unity Procedural Game Optimization 3 Answers
Questions About Allocations - Arrays - Structs and so on 1 Answer