Instancing Performance and Transform Issue

So I managed to get the whole spawn in a band thing working, and well, spawning lots of normal blueprints is fairly costly, so I redesigned a few things so that I use instancing for the mesh and keep necessary data in arrays, my understanding being that what happens is you send the GPU the data for the verts once, and then pass a bunch of matrices, one for each instance, instead of sending the vert data many times.

The first issue is, for a mesh with 1,149 tris and 3,295 verts, multiplied by 1,000, would bringing my frame rate down to about 40fps be normal?
Using the “stat unit” thing during gameplay, Frame, Game and GPU are all around the 25ms mark, where as Draw is at 2/3ms, so what exactly does that mean?
That things are taking a while on the CPU so the GPU is forced to wait? What can I do to improve this, or would I have to delve into C++ for this.

Also, my GPU is a Nvidia GTX 980, and my CPU, rather old, i7 960. (Yeah, I know it’ll be a bottle neck)

Second, I can’t for the life of me figure out why the rotation in the transform is changing?
I set it during creation of the BP, but during the main loop it’s different, I don’t understand what’s going on.
Here’s what I’ve got, it may because I misunderstand something.
What I’m doing is, when creating the data for the instance, I generate and random location and rotation, feed that into the Instance Transform, I then also store the transform in a transform array by using the add node. Then inside the main loop, at the same point in the array, the value is different.
Spawn Function
Main Loop

My interpretation of the unit stats are that the Draw is very low because the video card is not having a problem with the number of verts/tris it has to draw. The other stats are sync’ed when there is a bottle neck forcing them to wait for the other threads (as you surmised).

I believe updating InstancedStaticMeshes is not cheap, HierarchicalInstancedStaticMeshes may be faster (I don’t know for sure in this case, it has resolved performance issues for me in others). If you disable the update in your tick event, does the framerate look better?

As for the second problem, I am not sure what you mean by the transform is changing?

I also noticed that your loop is using the count instead of the last index? I believe it should be for(FirstIndex=0, LastIndex=Count-1)

Disabling the update improves it greatly, takes off 15ms.

As for the second problem, basically, the values for the transform in, say, the first element of the array change from when I initially set them in the spawn function to when I read them during the tick.
For example, in the spawn function, I get a vector with the values of, X:114.064 Y:333.302 Z:253.001, then in the tick it becomes X:-0.049 Y:-93.019 Z:-22.583

And which loop?

Anyone have any ideas? I’m pretty stumped.

I will add though that using the launch button to test the game, does improve things a little bit as well.

Well I don’t know about the transform thing, started it again, did it slightly different and got it to work.
Improved performance by reducing the amount of transforms done at any one time as it gets redundant at distances due to the fact it ends a few pixels big to none at all as well as only updating after every few ticks.

And for anyone interested, here’s the blueprint where I update everything. There’s still a bug with rotation, so I have a temporary manual setting for that. Note: Image is slightly cut at the right, however there is nothing beyond the Update Instance Transform node.
Edit: ****, forgot I had to make it orbit XD Well at least it works when nothing moves.

Any advice for any potential improvement in terms of performance would be greatly appreciated.