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

实例化技术通过合并顶点缓冲区减少Draw Call,提高渲染性能,尤其适用于相同物体的重复渲染。文章通过一个简单的实例化Demo,解释了如何利用IA(input assembler)处理多个顶点缓冲区,并通过VS的输入结构和常量缓冲区实现不同位置球体的渲染,从而展示了实例化的基本原理。
最低0.47元/天 解锁文章
3081





