Vulkan 采样器的 maxLod 会不会太高?



假设我正在制作一个VkSampler,或者可能是一组VkSamplers,我计划将其与几个纹理一起使用。每个纹理都有多个mip级别,mip级别的数量因纹理而异。我希望所有采样器选项对于所有纹理都是相同的,除了maxLod

实际上,我不希望maxLod阻止使用任何特定的mip级别;我只希望每个纹理的所有级别都能以一种普通的、没有错误的方式使用。因此,我可以输入一个高得离谱的上限,并对所有纹理使用相同的采样器吗:

VkSamplerCreateInfo samplerCreateInfo;

samplerCreateInfo.minLod = 0;
samplerCreateInfo.maxLod = 1048576;

还是我需要为每个纹理创建一个不同的采样器,并将采样器的maxLod设置为该纹理的唯一最大mip索引?

我认为答案可能是,即使我的采样器的maxLod非常高,即使我在着色器中显式地将一个无用的高值传递给textureLod,我也可以指望会发生合理的箝位,但我不完全确定我是否正确解释了Vulkan和GLSL规范中的相关部分。

不,您可以使maxLod任意大。如果有"过高"的情况,它们将被列为有效使用要求。根据规范,唯一的要求是它大于或等于minLod,如果unnormalizedCoordinates为真,那么它必须为零。除此之外,它只用于钳制计算的lod。访问的实际mipmap级别是计算的lod(钳制到maxLod(,进一步钳制到纹理中实际可用的mipmap等级的数量。

在规范语言中,maxLod用于限制λ(详细程度操作(的值。然后访问的mipmap级别为d'=levelbase+clamp(λ,0,levelCount - 1((图像级别选择(。因此,如果maxLod大于levelCount - 1,则不会影响结果。

相关内容

最新更新