GAMES101: Lecture 9: Shading 3(Texture Mapping cont.) ppt笔记

Interpolation Across Triangles: Barycentric Coordinates

三角形上的插值:重心坐标

为什么需要插值法?

三角形的三个顶点有特定的值(颜色,法线,材质...),我们想得到三角形中任意一点的特定值,使得三角形中该值均匀变化

重心坐标Barycentric coordinates (α,β,γ)(\alpha, \beta, \gamma)(α,β,γ)

在三角形中,与三角形共面的任意一点(x,y)(x, y)(x,y)可表示为三个顶点坐标的线性和,即(x,y)=αA+βB+γC(x, y) = \alpha A + \beta B + \gamma C(x,y)=αA+βB+γC

且满足α+β+γ=1\alpha + \beta + \gamma = 1α+β+γ=1

三角形内一点(x,y)(x,y)(x,y)满足重心坐标的三个参数均为非负数

我们将每个顶点的特定值与对应重心坐标相乘并相加 得到三角形内一点的特定值

注意!点在三角形内的重心坐标在投影后可能发生变化

几何上,αβγ\alpha \beta \gammaαβγ的值为顶点对应三角形占三角形ABC的比值

三角形面积由向量的叉积求得,如PA叉乘PB向量的模为三角形PAB面积的两倍

重心坐标结果如下

α=−(x−xB)(yC−yB)+(y−yB)(xC−xB)−(xA−xB)(yC−yB)+(yA−yB)(xC−xB)\alpha = \frac{-(x - x_B)(y_C - y_B) + (y - y_B)(x_C - x_B)}{-(x_A - x_B)(y_C - y_B) + (y_A - y_B)(x_C - x_B)}α=−(xA−xB)(yC−yB)+(yA−yB)(xC−xB)−(x−xB)(yC−yB)+(y−yB)(xC−xB)

β=−(x−xC)(yA−yC)+(y−yC)(xA−xC)−(xB−xC)(yA−yC)+(yB−yC)(xA−xC)\beta = \frac{-(x - x_C)(y_A - y_C) + (y - y_C)(x_A - x_C)}{-(x_B - x_C)(y_A - y_C) + (y_B - y_C)(x_A - x_C)}β=−(xB−xC)(yA−yC)+(yB−yC)(xA−xC)−(x−xC)(yA−yC)+(y−yC)(xA−xC)

γ=1−α−β\gamma = 1 - \alpha - \betaγ=1−α−β

Applying Textures

对屏幕上的每个采样点(x, y) (通常是像素中心)

插值法找到对应的材质坐标(u, v)

将采样点的颜色设为对应材质的颜色

Texture Magnification

当材质分辨率较低,而实际分辨率较大时,会出现纹理放大texture magnification

在采样(x, y)时,常规做法是用最近的texture上的点近似代替,这会导致多个邻近的采样点使用相同的颜色,导致纹理放大

纹理上的像素称为纹理元素texel

双线性插值Bilinear Interpolation 可解决纹理放大

e.g. 双线性插值 取邻近的四个texel,在u, v方向上分别做线性插值

四个黑色texel先在u方向上线性插值得到u1, u0

再做线性插值得到红色采样点的颜色值

(这里的公式假设两个相邻黑色texel的距离为1,便于计算)

Texture Minification

当材质分辨率较大,而实际分辨率较小时,会出现纹理缩小Texture Minification

一个采样点对应到纹理空间上,覆盖范围footprint包括texture上的多个texel

解决方法:Mipmap 实现快速、近似、正方形的 范围查询

将texture提前处理,从level 0原分辨率128x128开始,存储level 1,level 2...level N的图像,图像分辨率边长每次缩小为原本的一半

多消耗原texture三分之一的存储空间

对于每次采样,通过相邻像素在纹理空间中的坐标差来估算footprint的大小

将当前采样点得到的覆盖范围近似为边长为L的正方形

通过边长L找到在mipmap中对应的level D ,即D=log2LD = log_2LD=log2L,然后使用对应level D的提前处理的texture进行着色

如果处理出来的level D不是整数呢?

采用三重线性插值Trilinear Interpolation

先在与D相邻的两等级的texture上,对采样点周围四个texel使用双线性插值

再将两个结果按D的小数结果进行线性插值

floor(D) + ceil(D) --------linear interpolation--------> D

mipmap的限制:各向同性带来的倾斜,长条形footprint,会导致overblur

解决方法:各向异性过滤Anisotropic Filtering

提前处理texture时,对于mipmap的每个等级的图像,固定图像分辨率长度不变,宽度为原来的一半,1/4...;宽度不变,长度为原来的一半,1/4...

这样在查询时可以得到轴对齐的矩形区域

对采样点近似时,部分矩形覆盖范围不必近似成大型正方形,而能直接查询到对应的矩形

但各向异性过滤对于倾斜的矩形覆盖范围的采样点优化仍然有限

可采用EWA filtering:多次查询,加权平均,可处理不规则覆盖范围

相关推荐
GlueNa2SiO37 小时前
第十八章 Linux故障排查与恢复
linux·服务器·笔记·学习
xian_wwq8 小时前
【学习笔记】Context Engineering,AI Agent 真正的内存管理-4/16
笔记·学习·context
疯狂打码的少年10 小时前
【数据结构】队列:定义、顺序队列与链式队列
数据结构·笔记
LeoZY_12 小时前
LinkScope 使用笔记:基于 OpenOCD 的通用硬件芯片调试助手
笔记·单片机·嵌入式硬件·开源软件
不会代码的小猴12 小时前
标准模板库(STL)
开发语言·c++·笔记·算法
爱莉希雅&&&12 小时前
K8s NFS+StorageClass+PV/PVC+Deployment 实战笔记
笔记·容器·kubernetes
影寂ldy13 小时前
SQL 索引(Index)完整笔记
数据库·笔记·sql
GlueNa2SiO313 小时前
06-Docker存储与数据持久化
笔记·学习·docker
上下求索,莫负韶华15 小时前
切面学习笔记
笔记·python·学习
测试运维日常笔记15 小时前
Unix/Linux 系统软件包管理笔记
linux·笔记·unix