Glsl 可以使用Vulkan取样器';是不是太高了?

Glsl 可以使用Vulkan取样器';是不是太高了?,glsl,texture-mapping,vulkan,Glsl,Texture Mapping,Vulkan,假设我正在制作一个VkSampler,或者可能是一组VkSampler,我计划将其与多个纹理一起使用。每个纹理都有多个mip级别,不同纹理的mip级别数量不同。我希望所有纹理的所有采样器选项都相同,除了maxLod之外 我实际上不想maxLod阻止任何特定的mip级别被使用;我只希望每个纹理的所有级别都能以一种普通、无误的方式使用。所以我能不能加入一个高得离谱的上限,对所有纹理使用相同的采样器: VkSamplerCreateInfo samplerCreateInfo; …还是需要为每个纹

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

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

VkSamplerCreateInfo samplerCreateInfo;

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


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

不,您可以将
maxLod
设置为您想要的大小。如果出现“过高”的情况,则会将其列为有效的使用要求。根据规范,唯一的要求是大于或等于
minLod
,如果
unnormalizedCoordinates
为真,则必须为零。除此之外,它仅用于钳制计算的lod。实际访问的mipmap级别是计算的lod(钳制为maxLod),进一步钳制为纹理中实际可用的mipmap级别数


在spec语言中,
maxLod
用于限制λ()的值。然后访问的mipmap级别是d'=levelbase+clamp(λ,0,
levelCount-1
)()。因此,如果
maxLod
大于
levelCount-1
,则不会影响结果。

Ahh好的,我在细节级别操作中看到了maxLod夹紧,但错过了(levelCount-1)夹紧。由于我患有轻度焦虑症,我仍然觉得必须检查一下(level_base+levelCount-1)不能超过图像的实际等级计数。(事实证明,这是不可能的;如果我正确地跟踪了跟踪,那么VkImageViewCreateInfo的有效用法文本确定了levelCount必须足够小,以适应基本级别和图像的级别计数。)
samplerCreateInfo.minLod = 0;
samplerCreateInfo.maxLod = 1048576;