中EN
概念页

纹理过滤与 Mipmap

Texture Filtering & Mipmap

更新于 2026-10-15 约 15 分钟纹理过滤mipmap各向异性EWAPBRT

纹理在屏幕上被放大时需要插值,被缩小时一个像素覆盖许多纹素,必须预先滤波才能避免混叠。放大用最近邻、双线性或双三次;缩小的主流方案是 mipmap + 三线性插值,斜视角下用各向异性过滤减少过度模糊。注意:过滤纹理值只在输入与着色结果线性相关时等价于过滤最终颜色。

过滤输入 vs 过滤输出

抗锯齿理论上要过滤最终像素颜色。颜色这类与输出线性相关的输入,过滤纹理等价于过滤结果;法线、粗糙度等与输出非线性相关,标准过滤可能导致混叠(改进方法见 9.13 节)。

放大

方法做法效果
最近邻(盒式滤波)取最近纹素像素化 (pixelation),只取 1 个纹素
双线性最近 2×2 纹素二维线性插值偏模糊,锯齿大多消失
三次卷积(双三次)4×4 或 5×5 纹素加权质量高,硬件一般不原生支持,可在着色器中实现

双线性公式((u′,v′)(u',v') 为样本在四个纹素中心构成的坐标系中的位置): b=(1−u′)(1−v′)t(x,y)+u′(1−v′)t(x+1,y)+(1−u′)v′t(x,y+1)+u′v′t(x+1,y+1)b=(1-u')(1-v')t(x,y)+u'(1-v')t(x+1,y)+(1-u')v't(x,y+1)+u'v't(x+1,y+1) 砖墙例子:(81.92, 74.24) 减去 (0.5, 0.5) 得 (81.42, 73.74),四个纹素是 (81,73) 到 (82,74),(u′,v′)=(0.42,0.74)(u',v')=(0.42,0.74),右上纹素权重 0.42×0.74 = 0.3108。

  • 细节纹理:把高频重复的细节(手机划痕、地形灌木)以不同尺度叠加到放大的低频纹理上,效果接近一张高分辨率纹理。
  • 重映射:对黑白棋盘格,把低于 0.4 的灰映射为黑、高于 0.6 映射为白,中间拉伸,既保持格子又有过渡。
  • 许多高阶滤波器可写成重复线性插值,从而复用硬件双线性单元。Quílez 的便宜方法:把 (u′,v′)(u',v') 用 smoothstep s(x)=x2(3−2x)s(x)=x^2(3-2x) 或五次曲线 q(x)=x3(6x2−15x+10)q(x)=x^3(6x^2-15x+10)(二阶导在端点也为 0)变换后再交给硬件双线性,结果平滑,但每个纹素处有平台,呈阶梯感。

缩小

  • 最近邻在远处地平线附近严重混叠,运动时更明显(时间混叠);双线性只比它好一点,像素覆盖超过 4 个纹素就失效。
  • 由奈奎斯特极限,每像素最多一个纹素才能避免混叠。提高像素采样率(抗锯齿)作用有限,所以要预处理纹理,用固定时间和固定样本数近似大量纹素的影响。

Mipmap

  • "mip" 意为 multum in parvo(小空间里的许多东西)。原图(0 级)每 2×2 求平均得下一级,递归到一边为 1 纹素,构成 mipmap 链。
  • 质量关键:好的滤波器——2×2 平均是盒式滤波,几乎最差,会不必要地模糊低频、保留引起混叠的高频,最好用高斯、Lanczos、Kaiser 等;纹理边缘要考虑是否重复。gamma 校正——非线性编码的颜色纹理直接过滤会改变感知亮度,远处物体变暗、对比与细节受影响;应转到线性空间过滤再转回 sRGB 存储(多数 API 的 sRGB 纹理会自动处理)。
  • 法线等非线性纹理在生成 mipmap 时尤其敏感,因为一次要过滤成百上千个像素,需要专门方法(9.13 节)。
  • 层级 dd(OpenGL 叫 λ\lambda,即纹理 LOD):用像素单元投影到纹理上的四边形的长边估计,或用四个导数 ∂u/∂x\partial u/\partial x、∂v/∂x\partial v/\partial x、∂u/∂y\partial u/\partial y、∂v/∂y\partial v/\partial y 的最大绝对值。导数在 SM 3.0 起对像素着色器可用;动态流程控制中不可用,需事先算好;顶点着色器访问纹理时要自己计算梯度或 LOD。
  • 三线性插值:在 dd 上下两级各做双线性,再按 dd 的小数部分线性插值,逐像素执行。
  • LOD 偏移:加到 dd 上。原本就偏糊的图可用负偏移,过滤不好(有混叠)的合成图可用正偏移;可按纹理整体或逐像素设置,也可直接提供 dd 或导数。
  • 优点:无论缩小多少,耗时固定。主要缺点是过度模糊:贴近表面斜看时,像素在 u 方向覆盖很多纹素、v 方向很少(甚至一个方向缩小、另一个方向放大),mipmap 只能取正方形区域,为避免混叠取最大覆盖,所以偏糊。

积分表 (SAT)

  • 预计算每个位置到原点矩形内所有纹素之和(需更高精度,如每通道 16 位以上);用像素投影的包围矩形四角查表求平均: s[xur,yur]−s[xur,yll]−s[xll,yur]+s[xll,yll](xur−xll)(yur−yll)\frac{s[x_{ur},y_{ur}]-s[x_{ur},y_{ll}]-s[x_{ll},y_{ur}]+s[x_{ll},y_{ll}]}{(x_{ur}-x_{ll})(y_{ur}-y_{ll})}
  • 是一种各向异性过滤,但只对水平、竖直方向有效;沿对角线看时包围矩形过大,仍然过糊。16×16 及以下的纹理至少要两倍内存,更大的纹理需要更高精度。
  • 在现代 GPU 上可实现,能改进光泽反射、景深、阴影贴图、模糊反射等需要区域采样的技术。

无约束各向异性过滤

  • 当前硬件最常用:把像素单元反投影成纹理上的四边形,用短边确定 dd(每个 mipmap 样本覆盖区更小、更清晰),沿长边中线(各向异性线)取多个 mipmap 样本。各向异性比在 1:1 到 2:1 之间取 2 个样本,更高比例取更多。
  • 方向任意,不需要额外内存。书中对比图:16:1 各向异性在地平线处比三线性 mipmap 清晰得多且混叠极少。
  • 不同实现对沿轴样本(probe)加权不同:等权、两端半权、高斯权重;它们接近软件中椭圆加权平均 (EWA) 的质量,EWA 也可在 GPU 着色器中实现。

GEA 的视角:纹素密度与过滤(卷 II 11.3.14.5–11.3.14.7)

屏幕空间纹素密度

  • 纹素密度是纹素与像素之比。全屏四边形贴一张与屏幕同分辨率的纹理时密度为 1;同一个四边形移远后屏幕面积变小,密度大于 1(卷 II 11.3.14.5)。
  • 密度远小于 1 时纹素比像素大得多,能看到纹素边缘;远大于 1 时多个纹素挤进一个像素,产生摩尔纹,像素颜色还会随相机微动而游动闪烁;远处物体用高分辨率纹理也浪费内存。
  • mipmap 让密度尽量接近 1:每级宽高减半,64×64 的纹理有 64、32、16、8、4、2、1 七级。硬件按三角形离相机的距离选级,例如在屏幕上占 40×40 时可能选 64×64,占 10×10 时可能选 16×16;三线性过滤时可能混合 16×16 和 8×8 两级。

世界空间纹素密度

  • "纹素密度"也可指纹素数与世界空间面积之比,GEA 称之为世界空间纹素密度:边长 2 米的立方体贴 256×256 纹理时为 2562/22=16,384256^2/2^2=16{,}384(卷 II 11.3.14.6)。
  • 它的数值取决于世界单位,不必接近 1,但同一场景中应大致一致,否则立方体某一面会显得比其他面模糊。许多工作室给美术提供纹素密度规范和引擎内可视化工具来保证这一点。

四种过滤方式

方式采样开 mipmap 时选级
最近邻取中心离像素中心最近的纹素选分辨率最接近且高于理想值的一级
双线性像素中心周围 4 个纹素按距离加权选最近的一级
三线性在相邻两级(一高一低)各做双线性再线性插值两级混合,消除屏幕上 mip 级的突变边界
各向异性双线性和三线性都采 2×2 方块,只对正视表面正确;各向异性按视角对应的梯形区域采样提升斜视表面的质量

(卷 II 11.3.14.7)这与本页「缩小」「Mipmap」中 RTR4 的内容一致,GEA 没有涉及 SAT 等更高级的方法。

书中前后不一致:GEA 说最近邻开 mipmap 时选"分辨率最接近且高于理想值的一级",双线性则选"最近的一级"。实际上 mip 级的选择方式与级内过滤方式是独立的两个设置(D3D 的 MIN_MAG_MIP_POINT、MIN_MAG_LINEAR_MIP_POINT 等组合;OpenGL 的 GL_NEAREST_MIPMAP_NEAREST、GL_LINEAR_MIPMAP_NEAREST):mip 用 point 方式时都是取按 LOD 四舍五入的最近一级,不论级内用最近邻还是双线性(OpenGL 4.6 规范 8.14.3 "Mipmapping";MS Learn "D3D11_FILTER enumeration")。 梯度来自 2×2 quad 的差分,见 光栅化。

PBRT 的视角:离线渲染器的纹理过滤(PBRT 4e 10.1、10.4)

与图像采样的区别

几何边缘和硬阴影保证图像必然走样,但纹理往往有解析形式或已知的离散样本,可以在采样前去掉高频,因此做好纹理过滤后通常每像素一个样本就没有纹理走样(光照的蒙特卡洛噪声另当别论)。采样率由光线微分得到,见 光线微分与纹理足迹。

理想重采样与实际简化(10.1.4)

理想做法:先用 sinc 把 T(f(x,y))T(f(x,y)) 带限,再与像素滤波器 gg 卷积。实际几乎总是用盒式滤波做带限、忽略第二步(相当于像素滤波器为盒式),从而全部在纹理空间完成: Tbox=1(u1−u0)(v1−v0)∫v0v1 ⁣ ⁣∫u0u1T(u′,v′) du′dv′,u0,1=u∓12max⁡(∣dudx∣,∣dudy∣).T_{\text{box}}=\frac{1}{(u_1-u_0)(v_1-v_0)}\int_{v_0}^{v_1}\!\!\int_{u_0}^{u_1}T(u',v')\,du'dv',\qquad u_{0,1}=u\mp\tfrac12\max\Big(\Big|\frac{du}{dx}\Big|,\Big|\frac{du}{dy}\Big|\Big). 其他手段:已知频谱的纹理(各项频率已知的和)把超过奈奎斯特的项换成均值,等效 sinc 预滤波;都不行时在纹理空间超采样,比提高图像采样率便宜,因为不用多追光线。EWA 是例外,它假设高斯像素滤波器。

MIPMap(10.4.3–10.4.4)

  • 纹理采样与图像采样的不同:取样只是查数组;纹理函数完全由样本定义,不存在"样本之间是什么"的不确定性。难点是采样率逐像素变化,要能高效过滤任意大小的区域。
  • 金字塔每级分辨率减半,顶层一个纹素为全图均值,最多多占 1/31/3 内存。第 ll 级分辨率为 2nlevels−1−l2^{n_{\text{levels}}-1-l},宽度 ww 对应 l=nlevels−1+log⁡2wl=n_{\text{levels}}-1+\log_2w(取浮点值,超出层数时返回顶层像素)。
  • 各向同性滤波器(点采样、双线性=三角滤波、三线性)取覆盖 ss、tt 两个方向中较大者的保守宽度,选使滤波区域覆盖约 4 个纹素的级别;斜视时会糊。三线性在相邻两级各做双线性再按小数部分混合,掩盖级别跳变;它与在原图上做三角滤波并不严格相等,但差异可接受。
  • EWA(Greene–Heckbert 1986,Heckbert 1989 理论化):用两条微分向量拟合椭圆,以高斯加权;它是统一重采样滤波器,同时计入纹理空间高斯滤波和图像空间高斯重建。步骤:取较短轴选 mip 级;长短轴之比过大时加长短轴以限制纹素数(略糊但时间有界);在相邻两级各做一次并混合;椭圆隐式式 e(s,t)=A′s2+B′st+C′t2<1e(s,t)=A's^2+B'st+C't^2<1 的值恰是"到中心距离与到边界距离之比的平方" r2r^2,直接用来查高斯表。表中存 e−αr2−e−αe^{-\alpha r^2}-e^{-\alpha}(α=2\alpha=2,按 r2r^2 索引,减去常数使其在边界归零)。结果为 ∑fT/∑f\sum fT/\sum f。书中图 10.16:在球的两极和边缘这类强各向异性区域,EWA 比三线性清晰得多。
  • 内存管理:同一文件、同一过滤与环绕参数的 MIPMap 只加载一次(std::map 缓存加互斥锁,读文件前释放锁);场景解析后并行加载纹理。

与上文(RTR4、GEA)的对照与分歧

话题RTR4 / GEA(上文)PBRT 4e
各向异性硬件沿各向异性线取多个 mipmap 探针,接近 EWA 质量直接在软件中做 EWA,作为高质量选项
mip 级选择依据屏幕上 2×2 四元组的导数(硬件),GEA 讲纹素密度光线微分或相机近似;EWA 用椭圆短轴
像素滤波器不讨论指出常规做法等于假设盒式像素滤波器,EWA 才计入高斯重建
积分表 (SAT)作为各向异性方案介绍只在延伸阅读中提到(Crow 1984,仅适合轴对齐区域)

原书问题(10.1.4、10.4.3)

  • 盒式滤波区域:网页公式为 u0=u−−12max⁡(dudx,dudy)u_0=u-{-}\tfrac12\max(\frac{du}{dx},\frac{du}{dy})、u1=u+−12max⁡(⋯ )u_1=u+{-}\tfrac12\max(\cdots)(SVG 确认各有两个连续符号),且导数没取绝对值。应为 u0,1=u∓12max⁡(∣du/dx∣,∣du/dy∣)u_{0,1}=u\mp\tfrac12\max(|du/dx|,|du/dy|);不取绝对值时负导数会让区域反向或为零(同节图 10.5 的图注用的就是绝对值)。
  • 10.4.3 说"必须去掉高于相邻样本距离两倍的频率",频率与距离混用;按奈奎斯特应为:采样间距为 Δ\Delta 时去掉高于 1/(2Δ)1/(2\Delta) 的频率(措辞问题)。

PBRT 的视角:图像金字塔的构建(PBRT 4e B.5.4–B.5.5)

  • Image::GeneratePyramid() 要求分辨率是 2 的幂:不是的话先用 FloatResizeUp() 放大到下一个 2 的幂。放大用可分离滤波器分两次一维重采样(先 xx 后 yy),每个新像素最多由 4 个原像素加权,权重归一化以免整体变亮或变暗;求第一个落在滤波器支撑内的像素时,要在支撑下界加 0.5 再取 floor(中心 2.75、半径 2 的滤波器覆盖 [0.75,4.75][0.75,4.75],起始像素是 1 而不是 0)。
  • 每一层用 2×2 盒式滤波取平均得到上一层;非正方形图像在较短维度到 1 之后保持 1、继续缩小另一维度,直到 1×1。中间计算用 32 位浮点,最终各层恢复原像素格式以免占用更多内存。
  • 代价:放大到 2 的幂最坏时让内存变成约 4 倍(513×513 → 1024×1024);练习 B.1 建议用 Guthe–Heckbert(2005)的非 2 的幂 Mipmap,练习 B.2 建议用 Lanczos 滤波代替盒式滤波。

LearnOpenGL 的视角:NEAREST/LINEAR 与 mipmap 过滤枚举(Getting Started / Textures)

来源:Textures;摘录 Getting Started — Textures。

教程用放大/缩小时清晰的像素块 vs 平滑过渡对比 GL_NEAREST 与 GL_LINEAR,并列出缩小过滤四枚举:NEAREST_MIPMAP_NEAREST、LINEAR_MIPMAP_NEAREST、NEAREST_MIPMAP_LINEAR、LINEAR_MIPMAP_LINEAR(三线性)。常见组合:缩小 GL_LINEAR_MIPMAP_LINEAR,放大 GL_LINEAR。与上文 RTR/GEA/PBRT 的过滤讨论同目标,此处只补 OpenGL 枚举名与「mipmap 仅用于缩小」的 API 陷阱。

  1. realtime_rendering_4ed.pdf 第 6 章 Texturing
  2. Game_Engine_Architecture_4th_Edtion_Volume_2_-_Jason_Gregory.pdf
  3. Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 II 第 11 章 11.3.14.5–11.3.14.7 节
  4. PBRT 4e source excerpt: chapter 10 (Textures and Materials)
  5. Pharr, Jakob, Humphreys《Physically Based Rendering: From Theory to Implementation》第 4 版(MIT Press, 2023)第 10 章 10.1–10.5 节,pbr-book.org/4ed/Textures_and_Materials
  6. PBRT 4e source excerpt: chapter B (Utilities)
  7. Pharr, Jakob, Humphreys《Physically Based Rendering: From Theory to Implementation》第 4 版(MIT Press, 2023)附录 B B.2–B.7 节与延伸阅读,pbr-book.org/4ed/Utilities
  8. Getting Started — Textures
  9. learnopengl.com/Getting-started/Textures

相关页面

图形学纹理映射管线Texturing Pipeline纹理通过修改着色方程中使用的值(颜色、粗糙度、法线等)来高效表现表面材质的变化。通用纹理管线是:空间位置 → 投影函数得到纹理坐标 → 对应函数变换到纹理空间 → 取值 → 值变换 → 用于着色。本页还整理纹理坐标约定、纹理表示方式、程序纹理、纹理动画、材质贴图、alpha 贴图和纹理光源。图形学抗锯齿Antialiasing渲染本质上是采样,采样频率不足就会混叠(锯齿、闪烁的"萤火虫"、车轮倒转)。屏幕空间抗锯齿在每个像素取多个样本并加权求和:超采样最直接但最贵,MSAA 每像素只着色一次,时间抗锯齿 (TAA) 把样本分散到多帧,形态学方法 (FXAA/SMAA) 作为后处理重建边缘。没有一种方法在所有方面最好。图形学像素着色器Pixel Shader像素着色器(OpenGL 里叫片元着色器)对光栅化产生的每个片元运行,用插值后的顶点数据算出颜色,也可以输出不透明度、修改深度或直接丢弃片元。多渲染目标让它一次输出多组数据,催生了延迟着色。它通常只能写自己所在的像素,但能通过 2×2 quad 拿到相邻像素的导数。图形学纹理压缩Texture Compression固定码率纹理压缩由 GPU 实时解码:减少显存占用、增大有效缓存、降低访问带宽,也能在同样内存下用更大纹理。BC (DXTC) 系列是桌面标准,ETC/EAC、PVRTC、ASTC 用于移动平台。它们都是有损的,压缩慢、解压快;法线贴图需要专门处理。图形学显示编码与 sRGBDisplay Encoding & sRGB光照、纹理等计算假设数值是线性的,但显示缓冲和纹理使用非线性编码。简短的回答是:着色器输出 [0,1] 的颜色要取 1/2.2 次幂(gamma 校正),读入的纹理和颜色做相反的变换,多数情况下可以让 GPU 自动完成。忽略它会导致画面偏暗、色相偏移、光照叠加错误和抗锯齿边缘"绳索化"。图形学笔触与表面风格化Stroke Surface Stylization除卡通外,表面还可以呈现素描、炭笔、铅笔等笔触风格。核心问题是:按明暗选择笔触纹理,并在物体远近变化、运动时保持屏幕上笔触粗细和密度稳定。屏幕空间纹理会产生"浴室门效应",贴在表面上的纹理又要用色调艺术贴图 (TAM) 解决缩放问题。图形学大场景渲染与虚拟纹理Large Scenes & Virtual Texturing当场景数据远大于内存(如主机只有 8 GB,而游戏世界有数百 GB)时,需要按需把数据流送进内存。本页讲三类技术:虚拟纹理(把巨大的 mipmap 链切成瓦片,只让可见瓦片驻留在显存,通过页表/间接纹理寻址)、纹理转码(磁盘上用高压缩比的可变码率格式,加载时转成 GPU 块压缩格式),以及按平面瓦片组织资产的通用流送。这些方法几乎总是与剔除和 LOD 配合使用;地形部分见 地形渲染。图形学延迟纹理与可见性缓冲Deferred Texturing & Visibility Buffer延迟着色避免了着色的过度绘制,但生成 G-buffer 时仍有过度绘制:先画的物体读了大量纹理,被后画的物体挡住后这些带宽全部浪费。延迟纹理只用一遍几何 pass、存极少的数据(纹理坐标与切线基,或仅三角形与实例 ID),直到着色时才读纹理。由于 GPU 算力增长快于带宽,让瓶颈落在计算而非缓冲访问被视为面向未来的做法。图形学VR 立体渲染优化VR Stereo Rendering OptimizationVR 每帧要为两只眼渲染,并经合成器做镜头畸变与色差校正。本页讲厂商 SDK/API 的帧流程与内建优化(分层合成、隐藏区域网格、裁剪过的畸变网格),立体渲染如何避免工作量翻倍(合并视锥剔除、实例化、多视图扩展、多 GPU 广播、远景单目渲染),以及利用光学和人眼特性减少外围像素着色的技术:多分辨率着色、镜头匹配着色、径向密度遮罩、固定注视点渲染与注视点渲染。图形学硬件深度剔除与纹理单元Hardware Depth Culling & Texture UnitsGPU 的深度管线先在瓦片级用 HiZ 单元做 zmax/zmin 粗剔除,再逐采样做 early-z 深度测试以免执行被遮挡片元的像素着色器,必要时退回到着色后的 late depth test;深度缓冲同样有瓦片压缩与快速清除。纹理单元以固定功能硬件完成寻址、过滤、钳位与解压(比软件快可达 40 倍),按 quad 有限差分求导数以选择 LOD,并依靠瓦片化/Morton 交织存储和纹理缓存提高局部性。图形学软阴影 PCF 与 PCSSSoft Shadows with PCF & PCSS百分比渐近过滤 (PCF) 在阴影贴图上取多个样本,分别与表面深度比较后混合结果,得到伪软阴影,但半影宽度恒定。PCSS 先搜索附近遮挡体的平均深度,再据此决定过滤宽度,从而在接触处硬、远处软(接触硬化)。图形学参数曲面与贝塞尔面片Parametric Surfaces & Bézier Patches参数曲面把参数曲线从一个参数推广到两个参数 (u,v),由少量控制点定义,运行时细分成任意多个三角形,是质量与速度之间的天然权衡:三角形多则着色和轮廓更好。矩形定义域的是贝塞尔面片(张量积曲面),三角形定义域的是贝塞尔三角形,后者是 PN 三角形和 Phong 细分的基础。图形学视差贴图Parallax Mapping法线贴图的凹凸不会随视角移位,也不会互相遮挡。视差贴图用高度场按视角偏移纹理坐标,以几条额外指令换来明显提升;视差遮蔽贴图 (POM,又称浮雕贴图) 沿视线在高度场中步进求交,能表现遮挡和自阴影,但轮廓仍是原始平面。图形学文本渲染Text Rendering文本中一个像素的变化就可能把 "l" 变成 "1",因此字形渲染格外讲究。主要路线有:按字号预生成字形位图纹理(配合微调和子像素渲染)、有符号距离场纹理(可在三维表面任意缩放旋转)、以及在 GPU 上直接求值字形曲线。图形学替身与深度精灵Impostors & Depth Sprites替身 (impostor) 是把复杂物体从当前视点渲染成纹理、贴在视点朝向公告板上的表示,可在多个实例或多帧间复用以摊薄生成成本。公告板云用少量相交的镂空平面近似网格;深度精灵在纹理中加入每像素深度偏移,能与周围几何正确穿插;浮雕纹理、浮雕替身和几何图像进一步模糊了图像与网格的界线(RTR4 13.6.4、13.6.5、13.7 节)。图形学基于物理的着色Physically Based Shading基于物理的着色从光与物质交互的物理出发,用 BRDF 和反射方程计算表面沿视线方向射出的辐射亮度:镜面项来自微表面理论与菲涅耳反射,漫反射项来自局部次表面散射,布料、波动光学与分层材质再作扩展。本页是 RTR4 第 9 章的总览,并收录该章第 9.13 节的材质混合与材质过滤(镜面抗锯齿)。图形学滤波阴影贴图Filtered Shadow Maps普通阴影贴图的深度不能直接过滤。滤波阴影贴图存的是深度的某种统计量(矩、指数),可以像普通纹理一样模糊、做 mipmap、用求和面积表,只取一个样本就能得到平滑的半影。代表方法有方差阴影贴图 (VSM)、卷积阴影贴图、指数阴影贴图 (ESM/EVSM) 和矩阴影贴图;共同难点是漏光。图形学预计算光照与光照贴图Precomputed Lighting & Light Maps烘焙 (baking) 是把辐射度或路径追踪等离线 GI 结果预先算好存起来,运行时直接查询。静态几何参与预计算并完整交互,动态物体只作接收者。数据可以是辐照度,也可以带方向(SH、H 基、AHD、球面高斯、环境立方体等),存储在光照贴图、顶点或体积/探针中,各有接缝、漏光、内存等取舍(RTR4 11.5.1、11.5.2、11.5.4 节)。图形学体素Voxels体素是"体积元素",表示均匀三维网格中的一块空间,位置由网格索引隐含。体素是存储体积数据的传统方式,可存占用位、密度、颜色、法线、有向距离等。数据量按分辨率立方增长,常用稀疏体素八叉树 (SVO) 等结构压缩;可由 GPU 体素化生成,并通过光线投射、转多边形、移动立方体或等值面/水平集光线追踪来渲染(RTR4 13.10 节)。图形学基于图像的光照Image-Based Lighting用纹理数据(通常是相机拍摄的 360° HDR 全景)照明场景称为基于图像的光照。实时引擎常用预滤波的高光立方体贴图(配合 split-sum 近似)处理高光,用辐照度环境贴图或球谐系数处理漫反射。它们只依赖少量光照图元而不需要知道场景其他表面,因此仍属局部光照。图形学光栅化Rasterization光栅化(也叫扫描转换)把屏幕空间里带深度和着色数据的顶点,转换成三角形覆盖的像素(片元),交给像素处理阶段。它是几何处理和像素处理之间的同步点:三个顶点在这里组成三角形。图形学硬件光栅化与透视校正插值Hardware Rasterization & Perspective-Correct InterpolationGPU 光栅化由三角形设置与三角形遍历组成。硬件用每条边一个边函数判断采样点是否在三角形内,利用其增量性质按瓦片分层遍历,用左上规则决定恰好落在边上的像素归属,用保护带避免大多数裁剪。边函数的值恰好是子三角形面积的两倍,因此遍历顺带得到重心坐标;透视投影下需要线性插值 a/w 与 1/w 再逐像素相除,得到透视校正插值。本页还介绍 2×2 quad 与辅助像素、保守光栅化。游戏数学光线微分与纹理足迹Ray Differentials & Texture Footprint光线微分 (ray differentials) 给每条相机光线附带两条在图像上偏移一个像素样本的辅助光线,借此估计交点处 \partial p/\partial x、\partial p/\partial y 和纹理坐标对屏幕坐标的导数,也就是纹理采样率(纹理足迹)。这是离线光线追踪器做纹理抗锯齿的基础;本页对应 PBRT 4e 10.1.1–10.1.3 及其延伸阅读,并对照实时光线追踪中的光线锥。游戏数学随机变量变换与逆变换采样Random Variable Transforms & Inversion Sampling蒙特卡洛估计器要求能从指定的概率密度里抽样。最基本的工具是逆变换法 (Inversion Method):对 CDF 求逆,把 [0,1) 上的均匀随机数映射成目标分布;更一般地,随机变量经过一一映射后的密度由导数(多维时是雅可比行列式)决定;多维非独立分布则先采边缘密度、再采条件密度。本页按 PBRT 第 4 版 2.1.1、2.3、2.4 节整理,是 蒙特卡洛积分与重要性采样 的数学部分。图形学着色器纹理采样Shader Texture SamplingGPU 把图像存成 sampler2D:一张浮点向量的「表」,坐标连续时硬件做插值。片元里用 texture2D(sampler, uv)(现代 GLSL 为 texture)按归一化 UV 取色。BoS 强调:通道是 [0,1] 连续域、可越界重复、可用噪声扭曲 UV——图像变成可拉伸的「数码软垫」,为后处理与光学玩具式特效铺路。

输入关键词开始搜索

滚轮或双指缩放 · 拖动平移 · 双击放大 / 还原