【发布时间】:2018-12-01 19:44:32
【问题描述】:
让我说一下场景,我们有几个网格具有相同的着色器(材质类型,例如 PBR 材质),但网格材质之间的区别在于用于渲染它们的统一缓冲区和纹理。
对于统一缓冲区,我们有一个动态统一缓冲区技术,可以为命令缓冲区中的每次绘制指定统一缓冲区偏移量,但是对于图像直到这里我没有找到在命令缓冲区中为描述符指定图像视图的方法放。在我到目前为止看到的所有示例代码中,对于每个网格和该网格的每种材料,它们都有一个新的管道、描述符集等。
我认为这不是最好的方法,必须有一种方法只为一种材质类型设置一个管道和描述符集等,并且只更改统一缓冲区偏移和纹理图像视图和采样器,对吗?
如果我错了,这些样本是不是最好的方法?
我应该如何为每分钟网格将添加和删除的动态场景指定VkDescriptorPoolCreateInfo.maxSets(或其他类似限制)?
更新:
我认为可以为所有对象使用相同的管道和描述符集布局,但 VkDescriptorPoolCreateInfo.maxSets 存在问题(或其他类似限制),最佳实践仍然存在。
不重复
我正在寻找一种指定纹理的方法,例如我们可以使用动态统一缓冲区(以减少描述符集的数量)做些什么,除了这个问题之外,还有一些补充问题,主要是为了找到建议方式的最佳实践有答案。
【问题讨论】:
-
将该图像视图的描述符放在更高编号的集合中并根据需要重新绑定有什么问题?
-
您可以使用相同的管道,但是您需要在渲染期间更改描述符集(它们可以从相同的布局创建)或者您需要通过纹理图集或纹理数组存储您的纹理数据。
标签: vulkan