一、纹理的上采样(放大;二维插值)

一般直接把纹理颜色用作 $k_d$ 。

for each rasterized screen sample (x, y):
	(u, v) = evaluate texture coordinate at (x, y);
	texcolor = texture.sample(u, v);
	set sample's color to texcolor;

这样的情况::纹理 256x256,但是渲染 4k ???

如果称 pixel 生成画面上的像素,相对地一般称之为 texel 为纹理上的像素。如图便为很多的 pixel 对应一个 texel 。

Untitled

  1. 最邻近(Nearest)

    Untitled

  2. 双线性(Bilinear)

    lerp = linear interpolation

    $$ {\rm lerp}(\lambda, v_0, v_1) = v_0 + \lambda (v_1 - v_0) $$

    $$ f(x, y) = {\rm lerp}(t, {\rm lerp}(s, u_{00}, u_{10}), {\rm lerp}(s, u_{01}, u_{11})) $$

    Untitled

  3. 双立方 / 双三次(Bicubic)

双立方插值会取邻近的 16 个点进行运算,效果也更好些。

纹理很大的话反而会产生严重问题。

二、纹理的下采样(Mipmap、各向异性过滤)

当像素点对应的纹理部分过大的时候,对应点采样的方式又会发生问题。

Untitled

Untitled

也就是说,这次从左边来到了右边。

超采样

可以是可以,但是开销很大效果还不好。

Untitled