纹理采样中偏移量的应用场景及HLSL特定采样场景的结果问询
纹理采样中偏移量的应用场景及HLSL特定采样场景的结果问询
在HLSL里,我们可以用坐标来采样纹理,还能额外传入一个偏移量参数哦。
要划重点的是:这个偏移量是直接作用在**纹素(texel)**上的,而不是采样坐标本身——这话听起来有点抽象?给你举个实际的例子就明白啦。
比如我们写了这样的采样代码:
// 相当于偏移1个纹素 c = tex.Sample(sampler, uv + float2(1.0 / texWidth, 1.0 / texHeight));
现在假设我们有这样的纹理条件:
- 基础纹理(mip层级0)是8x8的尺寸,总共有4个mip层级:l0=8x8、l1=4x4、l2=2x2、l3=1x1
- 采样用的UV坐标会计算导数,最终会在mip层级1和2之间做插值
- shader第一次调用时,UV的取值是(0.0625, 0.0625)(也就是1/16, 1/16)
那在这个场景下,我们实际会采样到对应mip层的这些纹素区域:
l0 l1 l2 l3 8x8 4x4 2x2 1x1 ┌─┬─┬─┬─┬─┬─┬─┬─┐ ┌─┬─┬─┬─┐ ┌─┬─┐ ┌─┐ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├─┼─┼─┼─┼─┼─┼─┼─┤ ├─┼─┼─┼─┤ ├─┼─┤ └─┘ │ │ │ │ │ │ │ │ │...
简单总结下:这里的偏移是直接在纹素网格上移动一个单位,和我们直接在UV空间里加一个偏移值的逻辑完全不同,得结合mip层级的采样逻辑一起看才不会搞混哦。
备注:内容来源于stack exchange,提问作者samanthaj
相关产品推荐
相关产品推荐

