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:多次查询,加权平均,可处理不规则覆盖范围

相关推荐
chase。2 小时前
【学习笔记】PointWorld:迈向通用机器人操控的3D世界模型
笔记·学习·机器人
星恒随风5 小时前
C++ STL 栈详解:stack 的使用、经典题目与简单模拟实现
开发语言·数据结构·c++·笔记·学习
谢白羽5 小时前
vllm源码剖析14-vLLM 分布式推理-专家并行EP
笔记·分布式·llm·论文·vllm
玖玥拾6 小时前
Unity 3D 笔记(十一)UI 框架进阶:栈弹窗交互、BasePanel 基类虚方法、DoTween 界面动画
笔记·3d·unity
FellAveal6 小时前
【Go语言入门学习笔记】Part13.结构体与接口
笔记·学习·golang
学计算机的计算基7 小时前
回溯算法下篇:四道经典题讲透约束剪枝、原地标记、预计算与状态压缩
java·笔记·算法
雷工笔记7 小时前
Ubuntu迁移记录
笔记·ubuntu
一只小菜鸡..7 小时前
Stanford CS144 学习笔记 (九):大师访谈与互联网的未来
笔记·学习
十月的皮皮7 小时前
STM32从零到量产开发:四路继电器工业控制模块开发实战笔记(小白视角)
c语言·笔记·stm32·stm32cubemx·hal库