纹理采样及应用

【纹理采样】
三角面映射到在屏幕上每一个像素,都在纹理上采样一个texel。
核心方法:重心坐标。从obj文件可知三角面每个顶点在纹理上的uv值Va/Vb/Vc,三角面上任意点都可以表示成 αVa + βVb + γVc,而α/β/γ正是顶点对面三角形的面积比例(α+β+γ=1)。
具体步骤:
1.遍历三角面上所有像素;
2.找到它的三维坐标;
3.根据公式求出α/β/γ;
4.用αVa + βVb + γVc得到对应的uv值;
5.用texture.sample采样得到color。

【纹理抗锯齿】
当分辨率远大于贴图大小时(如4k分辨率贴256*256的纹理),常规的采样会导致不同颜色的像素间边缘过于明显。
核心方法:双线性插值。取该像素对应uv周围的几个texel,u和v维度各做一次线性插值,得到平滑过渡的color。

【纹理走样/摩尔纹】
当分辨率远小于贴图大小时(如交叉延伸至远处的线),常规的采样会导致摩尔纹。
原因:一个像素覆盖多个texel,仅用一个中心texel代表这个像素便会走样;而如果用多重采样虽然能解决走样问题,但是计算量过大,不适合用于实时渲染。
核心方法:范围查询(Mipmap/各向异性过滤/EWA过滤),先生成各种不同精度的过渡色纹理存起来,采样的时候直接查询。
Mipmap步骤:
1.根据原纹理生成logN张纹理图,每张精度为上一张的1/4(如128*128的问题,则额外生成64*64、32*32、16*16、4*4、2*2、1共7张纹理,只会额外多出1/3的存储空间);
2.根据目标像素点及邻近像素点uv,估算出这个像素点大概在纹理上占据的矩形范围;
3.根据矩形的size直接查询对应精度的纹理。

【纹理的用途】
纹理实际就是一串连续的数据,可以用uv两个维度获取数据的值;
1.在光照模型中赋予像素color值(如phong模型的kd值);
2.镜面反射/光照贴图:把周围环境物放到球面上作为贴图,可模拟镜面材质看到环境物体的效果
3.凹凸贴图:通过改变法线造成明暗差,让人看起来像有凹凸感,但在边缘会露馅,且缺乏自遮挡时应该有的阴影;
4.位移贴图:改变顶点的位置,比凹凸贴图效果真实,但需要模型面足够精细;
5.三维贴图:三维纹理,医学扫描骨骼信息等;
6.阴影贴图:一些自遮挡的阴影(如眼轮廓、皱纹)。

posted @ 2022-10-19 11:28  银龙背上的骑士  阅读(147)  评论(0编辑  收藏  举报