Hardware Vertex Instancing v/s Old School Instancing

poly-gone

Newcomer
I really don't use the usefulness of hardware vertex instancing. Old school vertex instancing of storing a single geometry and rendering it at multiple locations with differing world matrices seems to do the same trick.

For example, if we consider a forest with 100 (same) trees using the old school method, we would only need to store one tree and draw the same tree at 100 different locations. With vertex instancing, we would need one stream containing the vertex positions and another stream containing normals, texcoords, etc... and in the end, we end up doing the same thing.

One might argue that with vertex instancing one can render different looking trees. But since the vertex normals would be different for each instance, the tangents and binormals would need to be computed seperately for each tree and so the whole point of instancing is violated.

Unless I'm missing something, I really don't see the point of vertex instancing since the same could be done with the old school method.
 
The point is very simple: the idea is to draw all instances with only one call, reducing CPU overhead, and avoiding the drawing of eg 10000 trees being CPU-limited.
 
You mean if one were to use instancing, one would only need to call "draw primitive" once? So, in the earlier example, one big stream would contain positions for all the 100 odd trees and the other stream would contain one set of normals, texcoords and what not and all the 100 trees would be drawn with just one call? Hmm... that makes sense... Thanks for your input :)
 
Actually you have one stream with your tree (vertex position, tex coords, normals,...) like you have now and additional stream with that 100 transformation matrices packed into it.
 
Back
Top