引言:
最近刚好有个项目要用到这个技术,就学习了下DXSDK的Sample里面的Instancing10。
实例化的技术是利用多个顶点缓冲区有效的合并,减少Draw Call的次数,从而有效的提高程序的性能。实例化比较适合于相同物体的重复渲染,例如粒子系统,草被模拟等等。
本文实现了一个非常简单,甚至简陋的实例化的Demo。虽然Demo非常简单,但是实例化的每个必要的元素都已经被体现出来了。相对于Dx的Sample而言简单的多,不过同样可以把这个技术简单解释清楚。
正文:
实例化适合于相同物体的反复渲染,例如草,粒子系统等。传统的渲染方法中,相同物体由于一些细节不同,例如位置,颜色等信息,使得Draw Call被迫调用多次。对于很小的元素,例如草,可能视野里面会有上万根草,那么如果仅仅因为纹理,方向甚至位置不同,就必须调用上万次DrawCall,从而严重降低了程序的性能。利用实例化技术,虽然这些Mesh在一些简单的细节上有不同,但是大体上还是一致的,所以可以仅仅用一个Draw Call就可以把所有的Mesh渲染出来,这样节省了CPU与GPU之间的带宽,非常高效。
下面是这次Demo的截图: