计算机图形学(闫令琪博士课程答疑)-Shading(三)
重心坐标
纹理怎么贴到物体表面
重心坐标:为了做三角形内部差值,原因是计算是三角形顶点处理,我们需要在三角形内部进行均匀的变化。如何更平滑
三角形每一个点,都可以用三个顶点的系数组合,且系数加起来为1.且都是非负数
重心坐标可以通过面积比求出来。
我们看三角形重心:(a,b,r)=(1/3,1/3,1/3)
任意点坐标重心
好长,
这样我们可以对物体进行着色了。
乘以权值然后加起来。
有问题:进行投影的时候三角形会发生变化,所以重心坐标也会变化。
如果我们计算三维点,我们也去在三维坐标里面去求重心等等。然后再去对应到二维投影图形里面。
现在我们看怎么应用到三角形,根据他的位置插值uv,在纹理查询uv,然后把他拿来应用于那个点
问题出现:
因为纹理大小有限,有时候我们需要进行扩大,(纹理1080p)可是你贴在了2k的图形里面,(多个像素会映射同一个纹理像素)
pixel是实际图的像素,texel是纹理像素
现在我们不找临近的一个点,找四个
我们根据权值进行插值(线性插值)
做一次水平差值,然后再对他们进行竖直差值
说起来很麻烦,其实既可以直接使用权值
这个方法叫做:双线性插值(还可以16个8个进行插值)
性能和功能疯狂权衡
如果纹理太大了会出现什么情况:
会出现走样。
问题出现原因:
从远到近,如果很近,一个像素基本对应纹理一个像素点,如果原来,我们用一个点代表了多个纹理像素点
思路一:
我们吧太远的地方直接用上一帧图贴()
思路二:超采样:远了进行超采样,就不会出现锯齿;,但是
理论走样回顾:变化太快,我们采样太慢了,(一个像素类,对应贴图里面多个像素。),我们可以直接采用更高屏方法解决,,但是没必要。
只要我们不采样就不会出现锯齿了:我们可以采用各种范围查询方法,得出结论(如何快速得到平均值)
Mipmap:允许做范围查询(快,近似,正方形)
生成不同等级图片:每次分辨率都/2.
我们相当于引入了额外1/3的开销
那我怎么算出来我覆盖的面积有多大呢
找他临近的那几个点:,然我们进行一个近似正方形框
进行Mipmap
加入我们这个方块里面有四个像素点,那他的上一层是不是等于一个像素点了,很神奇(等于平均),如果出现我认为的对应方格交叉了
这样会出现不连续,
我们再次进行差值(1.8层),分别再1,2层求出,然后进行差值。
那我们的mipmap能够完全解决问题吗?
我们发现会模糊掉,模糊太多了。
原因,他只能方块,各项异形过滤(层数可以自己确定)
和mipmap的区别是他还涵盖了不缩放某一轴的区别。这样就可以查看矩形的了,而不是只能是正方形
但是没有完全解决问题,eg:斜着的
DWA过滤。暂时没有搞明白还需要生乳思考