使用Texture2DArray进行批处理

时间:2014-09-04 10:45:47

标签: c++ 3d rendering directx-11

我目前正在使用DX11开发新的渲染器。
要批处理多个网格,我想使用几何实例与Texture2dArrays来防止纹理图集。
这将是渲染的伪代码:

foreach effect in effects
    foreach batch in batches
        SetTexture2DArray()
        SetInstanceBuffer() //Transform & Material (cbuffer)
        SetVertexBuffer() 
        SetIndexBuffer()
        DrawIndexed()

每个网格由3个纹理和几何体组成。具有相同输入布局的网格将在一个批次中合并。
一批可以容纳~300个网格,每批获得900个纹理的TexturArray。
是否可以在TextureArray上使用不同大小的不同组合纹理?
如果不是,我只能将具有相同输入布局和纹理尺寸的网格组合起来。

您认为这是一个好的系统吗?

1 个答案:

答案 0 :(得分:1)

关于纹理数组,每个切片需要大小相同。

关于合并模型,较少的绘制调用通常更好,但是如果一个缓冲区持有不同数量的基元的不同子集,则每个都可能导致一些透支,如果它的话,那么在这个用例中更难应用截顶剔除。需要(取决于你可能只发送它的几何数量,现代卡片可以很容易地消耗几何形状)。如果所有几何体始终可见,那么合并是一个明确的好选择。