UnityShader开发之纹理 - Unity中的图像插值 Point、Bilinear、Trilinear

        图像插值就是当图像进行放大/缩小时,图像原有的像素数量不足以满足需求,例如从3X3的像素矩阵往4X4的像素矩阵变换的时候,就会出现像素值不知该如何填充的问题,而图像插值算法就是为了解决这个问题

       

上图就是Unity中选择贴图时出现的属性面板,箭头标识的位置就是可供选择的插值算法;

    

将最大尺寸调小,然后有插值与没有插值的情况十分明显,左侧有明显的颗粒感,而右侧则没有,感觉十分平滑。

 

        Unity支持的插值有Point、Bilinear和Trilinear,分别是最邻近插值法、双线性插值以及双三线性插值。而常见的插值方式主要有三种,最邻近插值法、双线性插值以及三线性插值。

        当图像由分辨率X*Y放大M,宽放大N倍后变为(X\cdot M)*(Y\cdot N)(X\cdot M)*(Y\cdot N)

例如:由3X3的矩阵变为9X9的矩阵

159
131721
252933

 

1   5   9
         
         
         
13   17   21
         
         
         
25   29   33

 

        (1)最邻近插值法(Nearest、Point)

        X_{origin}=Func_{floor}\left (X_{current}\ast \frac{X_{forward}}{X_{after}} \right )=Func_{floor}\left (\frac{X_{current}}{M} \right )

        X_{current}经处理后图的的x坐标值

       X_{origin}原始图片上经处理后图的x坐标映射值

       Func_{floor}为向下取整的函数

       宽Y同理

       则   C_{(X_{Current} , Y_{Current})}=O_{(X_{Origin} , Y_{Origin})}

运算结果:很明显,如果使用这种插值方法,放大的图会出现一块一块的像素块,即出现锯齿

111555999
111555999
111555999
131313171717212121
131313171717212121
131313171717212121
252525292929333333
252525292929333333
252525292929333333

 

 

        (2)双线性插值(Bilinear)

       

        双线性插值就是根据x、y轴两个方向来进行插值,如图所示,先根据O_{1}O_{2}求得I_{1},O_{3}O_{4}求得I_{2},再根据I_{1}I_{2}的值求出R的值。基本原理依然是根据距离来做颜色的插值。

先求x轴方向的插值:

 

        C_{I_{1}}=\frac{x-x_{1}}{x_{2}-x_{1}}\cdot (C_{O_{2}}-C_{O_{1}})+C_{O_{1}}

同理

        C_{I_{2}}=\frac{x-x_{1}}{x_{2}-x_{1}}\cdot (C_{O_{4}}-C_{O_{3}})+C_{O_{3}}

x轴方向的插值做完后,我们根据求得的颜色值再求y方向的插值:

        C_{R}=\frac{y-y_{1}}{y_{2}-y_{1}}\cdot (C_{I_{2}}-C_{I_{1}})+C_{I_{1}}

最后求得

123456789
456789101112
789101112131415
101112131415161718
131415161718192021
161718192021222324
192021222324252627
222324252627282930
252627282930313233

 

 

        (3)三线性插值(Trilinear)

        加上LOD层级来进行插值

       

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值