中EN
概念页

替身与深度精灵

Impostors & Depth Sprites

替身 (impostor) 是把复杂物体从当前视点渲染成纹理、贴在视点朝向公告板上的表示,可在多个实例或多帧间复用以摊薄生成成本。公告板云用少量相交的镂空平面近似网格;深度精灵在纹理中加入每像素深度偏移,能与周围几何正确穿插;浮雕纹理、浮雕替身和几何图像进一步模糊了图像与网格的界线(RTR4 13.6.4、13.6.5、13.7 节)。

替身

  • 物体存在处不透明,其余完全透明。用途:小静态杂物、快速渲染远处物体(相比最低 LOD 模型不会丢失形状和颜色信息,图像分辨率可匹配显示)、近处但移动时始终以同一面朝向观察者的物体。
  • 生成:相机对准物体包围盒中心,替身矩形正对视点,大小为包围盒投影的最小外接矩形;alpha 清 0,绘制物体处写 1。之后作为视点朝向公告板使用。
  • 何时更新:相机或物体移动会放大纹理分辨率、破坏幻觉。Schaufler 与 Stürzlinger 给出启发式。Forsyth 的实践:靠近观察者或鼠标的物体更新更频繁;动态物体预处理求动画中任一顶点的最大位移 dd,Δ=d/frames\Delta=d/\text{frames},替身 nn 帧未更新时把 Δ⋅n\Delta\cdot n 投影到图像平面,超过用户阈值就更新。
  • 替身没有厚度,与真实几何结合时会出问题;Forsyth 建议沿视线把纹理投影到物体包围盒上,给它一点几何存在感。常见策略:物体移动时渲染几何,静止时切换到替身。
  • 多部件替身 (polypostor, Kavan 等):人物每个肢体和躯干各一个替身,在纯替身与纯几何间折中。Beacco 等综述了人群渲染中的各种替身技术及优劣。

公告板云 (Billboard Clouds)

  • 替身必须一直面向观察者,远处物体改变朝向就得重算。Décoret 等用一小组相互重叠的镂空公告板表示复杂模型,还可加法线/位移贴图和不同材质。平面可以相交,镂空可以任意复杂。
  • 树木:从数万三角形的模型可生成不到一百个纹理四边形(书中例子 20,610 个三角形 → 78 个公告板)。
  • 代价:过度绘制 (overdraw) 很大;相交镂空无法严格从后往前排序,质量受影响;alpha to coverage 有帮助。SpeedTree 等改用由 alpha 纹理叶片和枝条组成的大网格,几何处理更多但过度绘制更少,总体更划算。也可用体积纹理按垂直视线的层渲染。

深度精灵 (Depth Sprite / Nailboard)

  • 替身纹理加一个每像素 Δ\Delta 通道成为 RGBΔ 纹理,Δ\Delta 存从精灵矩形到真实几何深度的偏差,即视空间高度场。像素着色器逐像素修改 z 深度,因此在矩形穿入附近几何时也能正确融合,优于替身(书中对比:2 位与 8 位深度偏差)。
  • Shade 等用扭曲适应新视点,并提出分层深度图像 (LDI):每像素多个深度,避免扭曲时因去遮挡(隐藏区域变可见)产生空洞;Chang 等用层次 LDI 树控制采样率。

浮雕纹理与相关方法

  • 浮雕纹理映射 (Oliveira 等):带高度场的图像表示表面真实位置;不放在公告板上,而是固定在世界空间四边形上,一组接缝匹配的浮雕纹理可定义物体;用 GPU 光线步进渲染(见视差贴图)。
  • Policarpo 与 Oliveira 在一个四边形上用多张高度场纹理依次渲染:如同注塑件可由两个半模(两个高度场)表示,更复杂的模型需要更多;所需高度场数等于该视角下任一像素重叠表面的最大数目。可做编织表面等复杂细节。
  • 浮雕替身 (Beacco 等,人群):为模型生成颜色、法线和高度场纹理,关联到盒子的各面,渲染时光线步进找可见表面;每个刚体部分(骨骼)一个盒子以支持动画,假设角色在远处所以不做蒙皮;纹理化也便于降低 LOD。

几何图像 (Geometry Images)

Gu 等把不规则网格变换成存储位置值的正方形图像,图像本身就是规则网格(相邻四纹素构成两个三角形)。生成过程复杂,但关键是它可以 mipmap,各 mip 级就是更简化的模型,模糊了顶点与纹素、网格与图像的界线。也被用于带特征保持映射的地形以表现悬垂。

取舍小结

表示优点局限
替身远处复杂物体变成一张图,保留形状与颜色必须面向观察者,需更新;无厚度
公告板云不必面向观察者,可加材质过度绘制,排序困难
深度精灵 / LDI可与几何正确穿插;LDI 减少空洞存储增加
浮雕纹理 / 浮雕替身像素级真实表面,支持刚体动画光线步进开销,不蒙皮
几何图像天然 mipmap LOD参数化生成复杂

GPU Gems 的视角:真替身 True Impostors(GPU Gems 3 第 21 章)

来源:Eric Risser《True Impostors》;摘录 Chapter 21. True Impostors — Eric Risser。接在上文公告板/深度精灵之后:用浮雕射线求交把整物体 thrash 进朝向相机的四边形。

四通道纹理存最多四层高度场(可扩展)。顶点把 UV 扩成三维帧并绕物体中心旋转;片元沿视射线在纹理空间切片求交。不透明:射线行进 + 二分(同 视差贴图 浮雕族)。半透明:逐层解析求交、折射、累加穿越距离得透光。填充率决定细节,天然 LOD;CPU 按深度排序广告牌以免过度绘制。适合大量简单重复物(小行星环、碎石),不适合每帧变形的复杂角色。

  1. realtime_rendering_4ed.pdf 第 13 章 Beyond Polygons
  2. Chapter 21. True Impostors — Eric Risser
  3. developer.nvidia.com/gpugems/gpugems3/part-iv-image-effects/chapter-21-true-impostors

相关页面

图形学公告板Billboarding公告板是根据视线方向调整朝向的带纹理矩形。配合 alpha 纹理和动画,它能表现草、烟、火、雾、爆炸、能量护盾、尾迹、云等没有光滑实体表面的现象。各类公告板的区别只在于固定哪个向量(法线或上方向);软粒子、球形公告板解决与实体相交和穿过近平面的问题,轴向公告板用于树木、激光等柱对称物体(RTR4 13.6–13.6.3 节)。图形学天空盒与固定视点技术Skyboxes & Fixed-View Techniques用图像代替三角形时,渲染代价与像素数而不是顶点数成正比。Lengyel 的"渲染谱系"从纯图像方法一直排到三角形和光线追踪。本页汇总谱系中偏图像一端的技术:限制视点移动的固定视点加速、渐进细化与重光照、天空盒、光场渲染以及精灵与分层(RTR4 13.1–13.5 节)。图形学视差贴图Parallax Mapping法线贴图的凹凸不会随视角移位,也不会互相遮挡。视差贴图用高度场按视角偏移纹理坐标,以几条额外指令换来明显提升;视差遮蔽贴图 (POM,又称浮雕贴图) 沿视线在高度场中步进求交,能表现遮挡和自阴影,但轮廓仍是原始平面。图形学透明渲染与 Alpha 混合Transparency & Alpha Blending本页讲最简单的"视角相关"透明:半透明物体只衰减其后方物体的颜色。z-buffer 每像素只存一个表面,所以透明物体通常要从后往前用 over 运算符混合;顺序无关透明 (OIT) 方法用多遍渲染、逐像素链表或近似公式避免排序,各有内存、性能或准确性代价。预乘 alpha 让过滤、混合和合成更正确高效。游戏美术顶点混合与蒙皮Vertex Blending & Skinning顶点混合(也叫线性混合蒙皮、enveloping、骨骼子空间变形)让一个顶点受多根骨骼的变换影响,按权重混合结果,使关节处的"皮肤"连续弯曲。它非常适合在 GPU 上执行;主要缺点是关节折叠、扭转和自相交,可用双四元数蒙皮等方法改善。图形学纹理过滤与 MipmapTexture Filtering & Mipmap纹理在屏幕上被放大时需要插值,被缩小时一个像素覆盖许多纹素,必须预先滤波才能避免混叠。放大用最近邻、双线性或双三次;缩小的主流方案是 mipmap + 三线性插值,斜视角下用各向异性过滤减少过度模糊。注意:过滤纹理值只在输入与着色结果线性相关时等价于过滤最终颜色。图形学天空与云渲染Sky & Cloud Rendering天空颜色和空气透视来自空气分子的瑞利散射,太阳周围的光晕来自近地大颗粒的米氏散射。实时方案有解析拟合模型和基于预计算透射率/散射查找表的物理模型;云则从全景贴图、粒子发展到用程序化噪声构建、光线步进的参与介质层,并以倍频程近似多次散射(RTR4 14.4 节)。图形学细节层次Level of Detail细节层次 (LOD) 在物体对图像贡献变小时改用更简单的表示。LOD 系统由三部分组成:生成(简化或手工制作多个版本)、选择(按距离、投影面积等收益函数挑选)、切换(尽量减少跳变 popping)。LOD 主要减少顶点处理,也通过减少 quad 过度着色降低像素开销;进一步还可在预算约束下全局选择 LOD,实现时间关键(恒定帧率)渲染。图形学网格简化Mesh Simplification网格简化(数据缩减、抽取 decimation)在尽量保持外观的前提下减少三角形数,使应用能在低端机器上伸缩。核心操作是可逆的边折叠,用代价函数(典型是 Garland–Heckbert 的二次误差度量 QEM)排序;它产生的渐进网格可用于连续 LOD 与渐进传输,但自动化并非万能。图形学绘制调用与状态切换优化Draw Calls & State Change Optimization调用图形 API 的开销主要在 CPU 端的驱动里:状态切换昂贵,每次绘制调用有固定开销,大量小批次会让 GPU"饿死"。对策是:合理放置缓冲;按状态代价排序分组;共享纹理和着色器;合并网格和实例化以减少调用;并用一个整数排序键同时兼顾状态分组与前后排序。

输入关键词开始搜索

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