一、实例化

可以想象一个pubg草地场景。这些草的模型通常是由几个简单的三角形组成的,然后通过一定的旋转平移就可实现这样的一个草地场景。
对于GPU来说,绘制一个草模型十分简单,几乎瞬间完成。但是如何通过一个个Drawcall去绘制每颗草,那么就会因为绘制调用过多而达到性能瓶颈。调用glDrawArrays或glDrawElements函数告诉GPU去绘制你的顶点数据会消耗更多的性能,因为OpenGL在绘制顶点数据之前需要做很多准备工作(比如告诉GPU该从哪个缓冲读取数据,从哪寻找顶点属性,而且这些都是在相对缓慢的CPU到GPU总线(CPU to GPU Bus)上进行的)。所以,即便渲染顶点非常快,命令GPU去渲染却未必。
所以我们希望使用一个Drawcall就能够绘制出整个草地,就让同一批数据绘制出多个物体。这就是实例化(Instancing)。
二、uniform数组
如果想使用实例化渲染,我们只需要将glDrawArrays和glDrawElements的渲染调用分别改为glDrawArraysInstanced和glDrawElementsInstanced就可以了。这些渲染函数的实例化版本需要一个额外的参数,