首页 > 其他分享 >Shading(2) Texture和插值

Shading(2) Texture和插值

时间:2024-03-21 13:44:06浏览次数:17  
标签:aligned 插值 Texture 纹理 正方形 Shading 三角形 像素

插值

三角形内部点的表达

\[\begin{aligned}(x,y)=\alpha A+\beta B+\gamma C\end{aligned} \]

\[\begin{aligned}\alpha+\beta+\gamma&=1\end{aligned} \]

表示在三角形ABC所在平面上
当\(\alpha\)、\(\beta\)、\(\gamma\) 都是非负的时,点(x,y)在三角形内部

三角形重心是均分三角形面积的点。

在顶点的线性插值:
这里还有一个注意点是应该注意坐标系,如果要插的值是三维坐标系中的,那就应该在三维坐标系插值,而不是投影后。

Bilinear 插值

当纹理过大,对应的采样像素区域过小时怎么办?

首先会出现问题:

这个现象的原因有些难以理解,应该是在远处的一个像素其实对应了纹理上的一大块区域【在很小的一块像素上表达了高频的纹理信息】

下面这幅图可以比较好的解释:

可以理解为,在远处的部分,其实在uv纹理上对应了很大的一部分信息,那么这一大块我要怎么取才合理呢?

那么接下来就要找到如何将高频的纹理信息表达(常规来看是平均)出来。

这其实转化为了一个重要问题——范围查询。也有一些解决方法:mipmap(针对正方形)、(金字塔应该也是这个思想)等。

Mipmap

有一个非常重要的前提是正方形
【why,应该是定义就是这么定义的,后面取得也是一个近似的正方形,当取得是一个近似的长方形时,可以用各向异性的】

也就是提前把(长/2N)×(宽/2N)分辨率给计算出来,然后查询就可以了,提前计算的这部分总和占之前面积的1/3:

对于某一像素,在纹理上计算一个近似的正方形,然后取对应层的一个像素表达。

当层数计算出来是非整数时,也可以再进行一次层与层之间的插值:

这样的话就能插值出来一个比较连续的结果,但是会出现一个问题就是overblur:


原因是因为采样的时候,按照和相邻顶点近似为正方形去获得像素。如果形状和正方形相差过大,就会造成这种现象。例如将下面的蓝色框取为正方形近似,就会平均了更多的纹素。针对红色框圈住的长方形形状,设计了Anisotropic Filtering

Anisotropic Filtering

Ripmaps and summed area tables

标签:aligned,插值,Texture,纹理,正方形,Shading,三角形,像素
From: https://www.cnblogs.com/code-fun/p/18087154

相关文章

  • Shading
    Shading定义:Thedarkeningorcoloringofanillustrationordiagramwithparallellinesorablockofcolor.在这里的定义是应用material到object的过程。ASimpleShadingModel——Blinn-PhongReflectanceModelComputelightreflectedtowardcameraataspecif......
  • 图像处理ASIC设计方法 笔记10 插值算法的流水线架构
    (一)三次插值算法实现的图像旋转设计的流水线架构传统上,三次插值算法实现的图像旋转设计需要三块一样的处理资源,为了节约资源,采用流水线设计,简单来讲就是三次插值算法共用一块资源,优化这部分使用的存储器结构,以达成流水线的目标。插值算法最直接的是需要DFF模块,现在对它进......
  • 【Python】拉格朗日Lagrange插值与牛顿Newton插值求解
    实验原理熟悉并掌握Lagrange插值的构造原理;会计算在给定点的函数值Lagrange插值是一种基于Lagrange基函数的插值方法。给定一组数据节点(x,y),其中x是自变量,y是因变量,其插值的目标是构造一个多项式函数,通过这个多项式函数来拟合已知的数据节点,并用于对其他未知点进行插值预......
  • 拉格朗日插值
    插值:已知平面直角坐标系上的\(n\)个点,找出一个函数\(f(x)\)过这\(n\)个点,这样的函数有无限多个。拉格朗日插值:首先他构造了\(n\)个函数,第\(i\)个是\(f_i(x)=\left\{\begin{matrix}y_i&x=x_i\\0&x=x_j(j\nei)\end{matrix}\right.\)。对于其余的\(x\),我们并不关心。这......
  • 【Unity】内存优化之— —Texture的MaxTextureSize以及Format压缩格式
    本人才疏学浅,只是近期略看了一下Texture的内存,如有不对的地方,还望大佬指正。参考文章:你所需要了解的几种纹理压缩格式原理1.说一说图片占用的内存关于图片的内存,是怎么算的呢,就是图片的长乘以宽,乘以每个像素点占的byte大小。MaxTextureSize,影响的就是基础的长和宽。图片的压......
  • 文本插值
    文本插值是一种基本的数据绑定形式,用于将数据绑定到DOM文本节点。使用双大括号{{}}来显示JavaScript表达式的结果。它主要用于将数据绑定到HTML文本节点。在Vue组件的模板中使用文本插值时,Vue会自动将对应的数据显示在页面上,并且当这些数据变化时,页面上显示的内容也会自动更新......
  • Vue学习笔记13--插值语法 + method
    插值语法示例:插值语法--实现信息拼接<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>插值语法--实现信息......
  • 线性插值计算百分位数的C++示例
    代码如下#include<iostream>#include<vector>#include<algorithm>doublepercentile_linear_interpolation(conststd::vector<double>&data,doublepercentile){//确保百分位数在合理范围内if(percentile<0.0||percentile>1......
  • P5667 拉格朗日插值2
    由拉格朗日插值公式得:\[f(x)=\sum_{i=0}^nf(i)\prod_{j\nei}\dfrac{x-j}{i-j}=\sum_{i=0}^n\dfrac{f(i)x^{\underline{n+1}}}{(-1)^{n-i}i!(n-i)!(x-i)}\]我们要把函数平移\(m\)个单位长度,所以要写\(f(x+m)\)的式子,即\[f(x+m)=\sum_{i=0}^n\dfra......
  • 拉格朗日插值学习笔记
    拉格朗日插值第一步:子函数\(f_i(x)=\begin{cases}1&x=x_i\\0&x=x_j(i\nej)\end{cases}\)由此可得:\(f(x)=\sum\limits_{i=1}^ny_if_i(x)\)第二步:对于\(f_i(x)\),要满足当\(x=x_i\)时,\(y=1\),而\(x\nex_i\)时,\(y=0\)故:\(f_i(x)=\dfrac{\prod\limits_{j=1,j\......