终于把Shader Instancing加到引擎里去了

大概说一下
        因为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 @ 2005-12-14 11:01  千里马肝  阅读(1037)  评论(6编辑  收藏  举报