|
|
发表于 2008-11-15 14:26:00
|
显示全部楼层
Re:什么情况下使用Instancing?
Instancing有两种,Shader Instancing和Hardware Instancing,对于Shader来说,dx9.0即可实现,但这不是真正意义上的Instancing,你可以把每一个物体自身的位置或其他信息存在常量寄存器中,但这种方法需要把索引序号也存放到那里,而且会受常量寄存器数量限制,尤其是对于像Player这样的动画模型就更加吃力了
Hardware Instancing是将物体信息存放在Buffer中,这样能够增加不少存储量,不会受寄存器数量限制,但只有sm3.0的硬件才支持,如果你的模型全部公用一套骨骼数据那还好办,但通常情况是不同角色有不同的动作,这样一来骨骼矩阵得全部放在Instancing Buffer中,更新Buffer的代价是得不偿失的
D3D10的常量Buffer非常大,足以存放所有这些骨骼矩阵,这样就避免了频繁更新Buffer的操作,再加上系统生成的InstanceID可以很方便的索引这些矩阵,使用哪种方法就看你具体的需求了,总之只要是渲染方法相同,公用一套资源,面数较少而数量又很多的模型,都可以用Instancing来提速,最常见的就是植物(花草和树叶之类) |
|