大概说一下
        因为ShaderConst数量有限
                1. VS1.0中有96个
                2. VS2.0中有256个
                每个是一个float4,所以可供描述Instance的信息量有限

        根据不同需要,实现分为3种:
        1.  需要3个轴Rotation和Translate的物件,使用float4x4描述一个Instance
                     VS1.0一个Batch可以提交20个,VS2.0是60个
        2.  需要Translate和y轴Rotation,使用float4描述一个Instance,xyz是position,w是rotation
                     VS1.0一个Batch可以提交80个,VS2.0是240个
        3.  植物,使用float4描述一个Instance,xyz是position,w是sway
                     VS1.0一个Batch可以提交80个,VS2.0是240个
                     顺便,在计算mvp时,直接忽略掉view matrix,即是billboard ^_^

        我在计算时都减去了16,预留给其他的uniform。
        而Instance index我没有修改Vertex的格式,而是直接插在了Diffuse.r中,取的时候int index = int(diffuse.r * 256);就好了。

        当然,如果是SM3.0就不必这么辛苦了。
posted on 2005-12-14 11:01 千里马肝 阅读(454) 评论(6)  编辑 收藏

  回复  引用  查看    
2005-12-17 15:49 | Pointer      
是SHADER INSTANCING是类似SM3.0里的几何实例的东东吧。:D
  回复  引用  查看    
2005-12-18 16:29 | 千里马肝      
你指的应该是Geometry Instancing
我这里做的是使用Shader const尽量一次更多得提交相同模型
具体的在DxSDK中有一个sample
  回复  引用  查看    
2005-12-20 18:58 | Pointer      
嗯,Geometry Instancing是利用VB来传送每个实例的信息。
  回复  引用  查看    
2005-12-21 09:08 | 千里马肝      
确切得说
VB里保存的是“一堆”相同的数据
不同的是可能用Texcoord1.x存index之类

然后用shader const数组存放每个instance的信息
  回复  引用    
2006-08-10 21:01 | jiffwan [未注册用户]
这种做法,支持不了skin是否?大概可以认为是static instancing技术.至于这种技术的局限,请参见gpu gems 2的第三章,不细说了。gameres上所述的,也不再回了。:)
  回复  引用  查看    
2006-08-11 09:34 | 千里马肝      
想要在< sm3.0的平台下做instancing
要么Vendor在sm2.0基础上给你留有后门可入
要么在有限的寄存器上
你做的动作越多
可以Instancing的数目就越少

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
 
另存  打印
 





<2005年12月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

与我联系

常用链接

留言簿(33)

我参与的团队

我的标签

随笔档案(295)

文章档案(1)

好友

搜索

  •  

最新评论

阅读排行榜

评论排行榜

60天内阅读排行