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

相关推荐
Go Work4 小时前
2026 Cadence SPB 24.1中文版安装图文详解(附安装包)
经验分享·笔记
ACP广源盛139246256734 小时前
HDMI2.0 转 DP1.4 桥接方案评估:国产 GSV2125C@ACP 芯片选型笔记
笔记·硬件架构·hdmi·type-c·国产芯片
龙仔7255 小时前
RustDesk 自建服务器 Key 强校验配置笔记
运维·服务器·笔记
悟乙己5 小时前
AFAC2026 赛题四金融长文本 Agent竞赛学习笔记:赛题解析(一)
笔记·学习·金融
PC2005-cloud6 小时前
MySQL学习笔记:GTID 主从复制,从原理到实践,告别传统 Binlog+Position 的痛点
笔记·学习·mysql
悟乙己8 小时前
AFAC2026 赛题四金融长文本 Agent竞赛学习笔记:关联技术(二)
笔记·学习·金融
yi0118 小时前
LeetCode 424. 替换后的最长重复字符|不定长滑动窗口:如何判断窗口是否合法?
笔记·python·算法·leetcode·双指针·滑动窗口
杨逢昌工厂6S管理9 小时前
116——杨逢昌:归位三定闭环法的旺季轻量化执行方案与工具清单
经验分享·笔记·职场和发展·学习方法
想喝奶茶啾啾9 小时前
AMBA CHI架构以及规范中使用的术语 翻译笔记(1)
笔记·arm·chi
yi01110 小时前
LeetCode 3. 无重复字符的最长子串|不定长滑动窗口:什么时候更新最大值?
笔记·python·算法·leetcode·双指针·滑动窗口