假设我正在制作一个VkSampler,或者可能是一组VkSamplers,我打算与几个纹理一起使用。每个纹理具有多个Mip级别,并且Mip级别的数量因纹理而异。我希望所有纹理的所有采样器选项都相同,但maxLod
可能例外。
我实际上并不希望maxLod
阻止使用任何特定的Mip级别;我只希望以普通的,非错误的方式使用每个纹理的所有级别。因此,我可以仅抛出一个高得离谱的上限,并对所有纹理使用相同的采样器:
VkSamplerCreateInfo samplerCreateInfo;
...
samplerCreateInfo.minLod = 0;
samplerCreateInfo.maxLod = 1048576;
...还是我需要为每个纹理创建一个不同的采样器,并将采样器的maxLod
设置为该纹理的唯一最大mip索引?
我认为答案可能是,即使采样器的maxLod
很高,我也可以依靠合理的钳位-即使我随后在着色器中将无用的高值明确传递给textureLod
-但我不确定我是否正确解释了Vulkan和GLSL规范中的相关部分。
答案 0 :(得分:4)
否,您可以根据需要增大maxLod
的大小。如果在某些情况下“过高”,它们将被列为有效使用要求。根据规范,唯一的要求是它大于或等于minLod
,如果unnormalizedCoordinates
为true,则它必须为零。除此之外,它仅用于钳位计算的lod。访问的实际mipmap级别是计算的lod(固定为maxLod),进一步固定为纹理中实际可用的mipmap级别数。
在规范语言中,maxLod
用于限制λ(Level of Detail Operation)的值。然后访问的mipmap级别为 d' = level base + clip(λ,0,levelCount - 1
)({{3 }})。因此,如果maxLod
大于levelCount - 1
,则不会影响结果。