中EN
概念页

视差贴图

Parallax Mapping

更新于 2026-10-16 约 8 分钟纹理视差高度场POM浮雕贴图

法线贴图的凹凸不会随视角移位,也不会互相遮挡。视差贴图用高度场按视角偏移纹理坐标,以几条额外指令换来明显提升;视差遮蔽贴图 (POM,又称浮雕贴图) 沿视线在高度场中步进求交,能表现遮挡和自阴影,但轮廓仍是原始平面。

基本视差贴图

  • 2001 年由 Kaneko 提出,经 Welsh 完善推广。在像素处取高度,按高度和视角偏移纹理坐标去取表面另一部分。
  • 高度场可单独存,或打包进其他纹理的空闲通道(不相关数据打包可能影响压缩质量)。高度先缩放和偏移:缩放决定高出/低于表面多少,偏移给出不位移的"海平面"。 padj=p+h⋅vxyvz\mathbf{p}_{\text{adj}}=\mathbf{p}+\frac{h\cdot\mathbf{v}_{xy}}{v_z}
  • 视线向量必须在切线空间。
  • 高度变化平缓时效果不错;掠射角时失效:微小高度变化造成很大偏移,取到的位置与原位置高度无关。

偏移限制 (offset limiting)

padj′=p+h⋅vxy\mathbf{p}'_{\text{adj}}=\mathbf{p}+h\cdot\mathbf{v}_{xy}

  • 偏移不超过取到的高度,且计算更快。正视时与原式几乎相同;掠射时凹凸感减弱,但远好于随机取样。
  • 仍有视角变化时纹理"游动"、立体渲染中两眼深度线索不一致的问题。但只多几条像素着色器指令,就比普通法线贴图有可观提升。

视差遮蔽贴图 (POM) / 浮雕贴图

  • 目标是找到视线与高度场的第一个交点。沿投影到表面的视线取固定数量的高度样本,掠射角时取更多样本以免漏掉交点;找到第一个低于高度场的样本后,用它与前一样本的高度差估计交点,再用交点处的法线、颜色等纹理着色。
  • 实际把高度场当深度场,矩形平面是表面上限,起点总在高度场之上。
  • 交点细化:一步割线法 (Tatarchuk)、二分搜索 (Policarpo 等)、迭代割线法 (Risser 等)。规则采样可并行,迭代法纹理访问更少但要等待结果、做较慢的依赖读取;暴力方法总体表现似乎不错。
  • 也能产生硬、软自阴影;多层高度场可表现悬垂、独立重叠表面和双面浮雕替身。
  • 部分技术会在着色器中 discard 或写深度,可能损害性能。最佳方法随 GPU 演进、内容和步数而变。

采样与加速

  • 必须足够频繁地采样:对尖刺、毛发等高频高度场,可偏移 mipmap 查询并用各向异性 mipmap;也可让高度场分辨率高于法线贴图。有的系统不存法线贴图,用十字滤波器从高度场即时求法线。
  • 跳过空白空间:体素化存到表面距离(存储更大);五维位移贴图(内存大得多,支持曲面与自阴影);方向距离图;锥形步进贴图——每位置存锥半径,保证区间内至多一个交点,快速跳跃不漏交点,但需依赖读取和预计算,不适用动态高度场;四叉树浮雕贴图、"最大值 mipmap"等层次结构。

轮廓问题

  • 所有方法在轮廓处都会穿帮,显示原表面的光滑轮廓:渲染的三角形决定哪些像素运行着色器,而不是表面实际在哪。
  • 对策:二次轮廓近似;壳贴图 (shell mapping)——把每个三角形挤出成棱柱并渲染,覆盖高度场可能出现的所有像素,保持棱柱求交的非线性可得无伪影结果,但昂贵。
  • 书中示例:《孤岛危机》用 POM 让一组简单三角形构成的石子路看起来真实。

对比

方法遮挡自阴影代价主要问题
法线贴图无无(可配合地平线贴图)低斜看显平
视差 + 偏移限制无无多几条指令掠射角凹凸减弱、纹理游动
POM / 浮雕有硬/软自阴影随步数增加轮廓仍为原始几何
壳贴图有有高复杂

GEA 的视角:高度图的三种用法(卷 II 11.6.2)

  • 高度图记录理想表面在三角形之上或之下的高度,通常存成灰度图(每纹素一个高度值)。它有三种用法,都能让平面看起来有起伏:凹凸贴图、视差遮蔽贴图和置换贴图(卷 II 11.6.2)。
  • 视差遮蔽贴图:用高度图人为调整纹理坐标,使平面看起来有随相机"半正确"移动的表面细节。GEA 举例说顽皮狗《神秘海域》系列的弹孔贴花就用了这项技术(见 贴花渲染)。
  • 置换贴图:先细分、再按高度图挤出表面多边形,生成真实几何细节;因为是真几何,能正确自遮挡和自阴影,效果最令人信服。书中展示了 DirectX 中运行时细分简单源几何来生成表面细节的例子(见 曲面细分与几何着色器)。

术语分歧:什么是"浮雕贴图"

来源浮雕贴图 (relief mapping) 指
RTR4(本页「视差遮蔽贴图 (POM) / 浮雕贴图」)与 POM 同类的像素着色器技术:沿视线在高度场中步进求交,轮廓仍是原始平面
GEA 卷 II 11.6.2置换贴图的别名:"Displacement mapping (also known as relief mapping)",即真正细分并挤出几何

两书把同一个名词用在不同技术上,阅读文献时要看上下文。这里并列记录。

原书问题(卷 II 11.6.2):文献中的"浮雕贴图"通常不是置换贴图的别名。Policarpo、Oliveira、Comba 的《Real-Time Relief Mapping on Arbitrary Polygonal Surfaces》(I3D 2005)明确是像素驱动的方法:在片元着色器中把视线变换到切线空间,与高度场求交(线性搜索加二分搜索),不细分也不移动任何顶点,因此轮廓仍是原多边形。GEA 所说"真正细分并挤出多边形"的技术应称为置换贴图 (displacement mapping)。

LearnOpenGL 的视角:视差 / 陡峭视差 / POM(Advanced Lighting / Parallax Mapping)

来源:Parallax Mapping;摘录 Advanced Lighting — Parallax Mapping。

用高度/深度图偏移 UV 伪造位移。切线空间里:height=texture(depthMap,uv).r;P = viewDir.xy/viewDir.z * height*scale(除以 z 为默认;去掉则为 offset limiting);uv' = uv - P。常用深度图(高度取反)更易在平面上「挖深」。越界 UV 可 discard(平面有效)。

Steep:把深度分成多层,沿 P 步进直到层深 ≥ 贴图深;层数可按与切线 +Z 的点积在 8–32 间 mix。POM:在碰撞前后两层 UV 间按深度差线性插值。需与法线贴图同用,否则光照与位移错位。陡斜视与轮廓仍有假象;地板/墙面近垂直观察时最稳。术语与 GEA「浮雕」对照见上文。

GPU Gems 的视角:松弛锥步进浮雕映射(GPU Gems 3 第 18 章)

来源:Policarpo & Oliveira《Relaxed Cone Stepping for Relief Mapping》;摘录 Chapter 18. Relaxed Cone Stepping for Relief Mapping — Policarpo, Oliveira。接在上文 POM / 浮雕纹理之后:用预计算锥图做空间跳跃,再接二分精炼。

普通浮雕映射:线性搜索易漏薄结构,二分又可能在「尚未穿入」时就收敛错点。Cone Step Mapping(Dummer)保证不漏第一次相交,但锥角保守,固定步数常停在表面之前,采样坐标与相机空间位置都偏,画面扭曲。松弛锥步进放宽约束——视射线在锥内最多穿入高度场一次——锥显著变宽,跳跃更快;一旦确认在表面下,安全进入二分。离线 O(n2)O(n^2) 为每个纹素求满足约束的最大锥比 w/hw/h,可与深度同存;运行时约十余次锥步 + 数次二分通常够用。自阴影用同一锥图对光射线求交。深度缩放与平铺只改切线空间射线方向,不必重算锥图。锥图不要用普通平均值做 mip(应取最小锥比或最近点采样)。

  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.6.2 节
  4. Chapter 18. Relaxed Cone Stepping for Relief Mapping — Policarpo, Oliveira
  5. developer.nvidia.com/gpugems/gpugems3/part-iii-rendering/chapter-18-relaxed-cone-stepping-relief-mapping
  6. Advanced Lighting — Parallax Mapping
  7. learnopengl.com/Advanced-Lighting/Parallax-Mapping

相关页面

图形学法线贴图与凹凸贴图Normal & Bump Mapping凹凸贴图是一类在像素着色中修改着色法线来表现中尺度细节的技术:几何法线不变,只改变光照计算使用的法线,从而在不增加几何的情况下显得更立体。最常用的形式是切线空间法线贴图,需要每顶点的切线框架;法线贴图的过滤是难点。图形学纹理映射管线Texturing Pipeline纹理通过修改着色方程中使用的值(颜色、粗糙度、法线等)来高效表现表面材质的变化。通用纹理管线是:空间位置 → 投影函数得到纹理坐标 → 对应函数变换到纹理空间 → 取值 → 值变换 → 用于着色。本页还整理纹理坐标约定、纹理表示方式、程序纹理、纹理动画、材质贴图、alpha 贴图和纹理光源。图形学纹理过滤与 MipmapTexture Filtering & Mipmap纹理在屏幕上被放大时需要插值,被缩小时一个像素覆盖许多纹素,必须预先滤波才能避免混叠。放大用最近邻、双线性或双三次;缩小的主流方案是 mipmap + 三线性插值,斜视角下用各向异性过滤减少过度模糊。注意:过滤纹理值只在输入与着色结果线性相关时等价于过滤最终颜色。图形学替身与深度精灵Impostors & Depth Sprites替身 (impostor) 是把复杂物体从当前视点渲染成纹理、贴在视点朝向公告板上的表示,可在多个实例或多帧间复用以摊薄生成成本。公告板云用少量相交的镂空平面近似网格;深度精灵在纹理中加入每像素深度偏移,能与周围几何正确穿插;浮雕纹理、浮雕替身和几何图像进一步模糊了图像与网格的界线(RTR4 13.6.4、13.6.5、13.7 节)。图形学VR 渲染注意事项VR Rendering Considerations在单屏上效果良好的渲染技术,放到随头部移动的双目显示上可能失效甚至引起不适。本页汇总 RTR4 第 21.4 节列出的需要修改或避免的技术:HUD 深度、凹凸与视差贴图、公告板与天空盒、色调映射与屏幕空间效果、镜面高光视差、抗锯齿选择、色带、运动模糊与景深,以及混合现实中的光照匹配。核心原则:严格遵循厂商头部模型和投影矩阵,任何会让两眼图像难以融合或与前庭感觉冲突的效果都要谨慎。图形学方向遮蔽Directional Occlusion方向遮蔽用比单个 AO 标量更有表现力的方式记录"哪些方向被挡住",例如地平线角、可见性锥(环境孔径)、球面有向距离或球谐。它主要用于面光源和环境光照的软遮蔽,以及凹凸细节自阴影、超大地形等阴影贴图分辨率不够的场合;对点光源,专门的阴影技术质量更好(RTR4 11.4 节)。图形学曲面细分与几何着色器Tessellation & Geometry Shader曲面细分、几何着色器和流输出是顶点着色器之后的三个可选阶段。曲面细分把曲面描述按需生成合适数量的三角形;几何着色器能把图元变成别的图元,但效率不好、实际用得少;流输出把处理后的顶点写回内存以便复用。图形学贴花渲染Decal Rendering贴花 (decal) 是叠加在表面上的图案或纹理,如轮胎印、弹孔、玩家喷漆、标志。贴花可只改颜色(纹身)、只改凹凸(压印标志)或换成完全不同的材质(车窗贴纸),可多个叠在同一几何上,也可横跨多个模型。主流做法是用有向盒做正交投影的投影贴花;延迟着色把贴花效果直接写进 G-buffer,分簇前向着色则把贴花像光源一样放进簇列表。游戏美术假室内Fake InteriorsSimon Schreibt《Game Art Tricks》48 / 12:用平面窗户着色器假装后面有房间——立方体贴图减速视差、Bump Offset 平铺室内、多层视差+假公告板等——省建模与真透明排序成本。本页忠于原文观察,不臆造引擎未写明的实现细节。游戏美术断边贴花:从 Fallout 3 到 Cyberpunk POMBroken Edge DecalsGAT 1 与 85:低模断边用贴花/包裹几何补细节;Cyberpunk 2077: Phantom Liberty 进一步用重叠破损网格 + POM 贴花消交线并打碎轮廓。85 明确是 1 的延伸。

输入关键词开始搜索

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