游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2224|回复: 2

什么情况下使用Instancing?

[复制链接]

12

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2008-11-14 16:00:00 | 显示全部楼层 |阅读模式
什么情况下使用Instancing?

如果我创建了很多的 同一类型,同一种模型的怪物, 是不是要使用Instancing?

就比如说 游戏中有很多的战士,他们是一样的模型, 但由多个player控制 每个模型某一时刻的动作和状态都不一样 可以用 Instancing吗?

6

主题

40

帖子

67

积分

注册会员

Rank: 2

积分
67
发表于 2008-11-15 10:13:00 | 显示全部楼层

Re:什么情况下使用Instancing?

状态不一样是不能用instancing的,instancing是Gpu中保存了实例的多个世界位置进行一次绘制的。如果状态一样可以绘制,而且必须用dx10里的硬件intancing。

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 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来提速,最常见的就是植物(花草和树叶之类)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-20 21:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表