批次渲染
其实,根据我最近研究发现,暴雪早在DX8时代就做了批量渲染这件事,所以一举占据了RTS老大的地位.很凑巧的时候我现在的项目也是个RTS类游戏.所以批量渲染就成了一个亟待解决的问题. Gamebryo是支持MeshInstancing的,就是模型的批量渲染。 关于D3D的SetRenderState切换影响效率的问题!!! SetRenderState(a) instancing 渲染 在gpu gems2中将instancing渲染技术分成了4个种类: l 静态批次 l 动态批次 l 顶点常量实例化 l 几何体实例api批次 书中对4中技术阐述的十分清楚,以下只针对dx sdk中的sample中的三种做法进行叙述。 stream instancing 设置好各个buffer后即可渲染。渲染的时候一次只能渲染一个立方体,每次drawindexedprimitive之前都需要调用setstreamsource设置实例在第二个vb中的偏移量即可。显然对于每个物体都调用drawindexedprimitive的做法肯定对效率影响很大。 这种方法算是一种比较静态的方法,不过和gpu gems2中的静态方法不太一样。gpu gems2中的静态方法只使用一个大的vb和一个大的ib,这个vb中存放转换好的几何实例信息,ib中存放每一个实例的索引,然后使用一个drawindexedprimitive绘制出所有的几何体。这种方法需要耗费大量的储存器且不能支持骨骼运算,对cpu的消耗十分的大。 shader instancing 这个方法和gpu gems2中的顶点常量实例化的方法很相似,不过由于gpu gems2中的这个方法将所有的顶点常量拿来做instancing运算,无法进行骨骼运算。为了解决这个问题dx sdk中的sample中并没有使用全部的顶点常量。 hw instancing hw instancing的方法和前面说的stream instancing的方法如出一辙,所不同的是,hw instancing使用了dx sdk提供的api:setstreamsourcefreq()。通过这个api,就可以不需要在渲染的时候指定实例在vb中的偏移量,所以使用这个方法可以自动的将所有的实例使用一个drawindexedprimitive绘制完毕。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/udking/archive/2010/12/01/6048195.aspx (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |