December 12, 2022 纹理采样是图形渲染过程中的一个基础步骤,本文主要介绍 Vulkan/SPIR-V 中纹理采样相关的指令以及计算逻辑,从而可以了解最终像素点的采样值RGBA,是如何根据内存中的图片buffer数据计算而来的,对我们实现软件渲染器有一定帮助,主要的参考资料是 Vulkan Specification – Image Operations 这一章,建议和本文对照阅读。 纹理采样相关指令 SPIR-V 的纹理采样相关指令主要可分为: OpImageSample*:最常用的纹理采样指令,有多种形式,详见下面表格 OpImage*Gather:邻域 texel 批量获取,有 OpImageGather 和 OpImageDrefGather 两种形式,区别在于是否做深度比较; OpImageFetch:获取指定的单个 texel,不采样(如 texel 之间、mipmap 之间插值计算等) OpImageQuery*:查询纹理相关的一些属性,如 size、level、lod 等 以上四类指令在 GLSL 中都能找到对应的函数,详见 Texture Functions,另外 Vulkan 中以上指令都有 Sparse 版本,针对的是虚拟纹理,这里就不做过多介绍。 opcode 指定lod 齐次投影 深度比较 OpImageSampleImplicitLod OpImageSampleExplicitLod ✅ OpImageSampleDrefImplicitLod ✅ OpImageSampleDrefExplicitLod ✅ ✅ OpImageSampleProjImplicitLod ✅ OpImageSampleProjExplicitLodContinue reading “Vulkan 纹理采样计算过程详解”