概念页
网格简化
Mesh Simplification
网格简化(数据缩减、抽取 decimation)在尽量保持外观的前提下减少三角形数,使应用能在低端机器上伸缩。核心操作是可逆的边折叠,用代价函数(典型是 Garland–Heckbert 的二次误差度量 QEM)排序;它产生的渐进网格可用于连续 LOD 与渐进传输,但自动化并非万能。
三种简化(16.5 节)
Luebke 把简化分为:
- 静态:渲染前生成若干离散 LOD 模型,运行时选择(第 19.9 节);也可为细分曲面提供粗网格。
- 动态:提供连续的 LOD 谱,即连续细节层次 (CLOD)。
- 视角相关:模型内部细节随位置变化,典型是地形:近处精细、远处粗糙。
边折叠(16.5.1 节)
把一条边的两个顶点移到一起。对实体模型,一次边折叠去掉 2 个三角形、3 条边、1 个顶点(由 推出封闭网格约有 个面、 条边),3000 个三角形的封闭模型折叠 1500 次即为零面。
- 可逆:按顺序记录折叠,从简化模型可重建原模型,适合网络上压缩传输并渐进显示,因此称为视角无关的渐进网格 (VIPM)。
- 放置策略:
| 策略 | 做法 | 取舍 |
|---|---|---|
| 子集放置 | 折到 或 折到 | 可隐式编码选择、评估快;解空间小,质量较低 |
| 最优放置 | 两点收缩到新位置:Hoppe 限定在边上(为利于压缩可只查中点);Garland 与 Heckbert 解二次方程求最优位置,可能不在边上 | 网格质量更高;需更多处理、代码和记录内存 |
- 局部性:代价只依赖少数局部变量(边长、边附近面法线),每次折叠只影响少数邻居(如 3000 个候选只需重算约 10 个),因此用堆或优先队列维护代价表。
- 无论代价多低都必须禁止的折叠:会导致边交叉的折叠,可通过检查邻接三角形法线是否翻转来发现。
flowchart TD
A["计算所有候选边折叠的代价"] --> B["放入优先队列"]
B --> C["取代价最小者执行折叠"]
C --> D{"邻接三角形法线翻转?"}
D -- "是" --> E["放弃该折叠"]
D -- "否" --> F["记录折叠, 重算受影响的少数候选"]
E --> B
F --> B上图是基于代价的边折叠主循环;记录下的折叠序列就是渐进网格。
二次误差度量 (QEM)
共享顶点的每个三角形都有平面方程,把顶点移到新位置 的代价是到这些平面距离的平方和: 为第 个平面法线, 为其到原点的偏移。例:边长 2 的立方体在某条边上多了一个点 ,(折到角点)代价 0,因为 不离开它所在的平面; 代价 1,因为 偏离右侧面的平方距离为 1,所以选 。
- 扩展:鱼鳍、涡轮叶片这类尖锐边上点的基本代价很低(代价与移除特征的体积变化有关,而非视觉重要性);可加一个包含该边、法线为两侧法线平均的额外平面来保留锐边;或按三角形面积变化加权。
- 应保护的特征:折痕边与边界边、材质变化处、纹理贴图边缘、逐顶点颜色变化处。
- 地形简化中 Garland 与 Heckbert 早期发现 Hausdorff 距离(简化网格顶点到原网格的最远距离)效果最好。
常见问题
- 纹理扭曲:边折叠会使纹理映射变形;镜像模型中线处纹理坐标相同却属于不同区域。Caillaud 等的算法能处理纹理接缝。
- 速度:用户创作内容(CAD)需即时生成 LOD。可用 GPU 简化,或用顶点聚类:用三维体素网格覆盖模型,每个格子内的顶点移到该格"最佳"位置,两个以上顶点落在一起的三角形退化消失。稳健、不需要连接信息、可把多个网格合在一起,但基本版质量很少能比得上完整 QEM;Willmott 团队在《Spore》的用户生成内容中把它做得稳健高效。
- 烘焙法线贴图:把纽扣、褶皱等小特征转成法线贴图是与简化相关的思路,常见于把高模烘焙成带纹理的低模。
- 跳变 (popping):LOD 瞬间替换可见;已知高低模顶点对应关系,可用 geomorph 平滑过渡(第 19.9.1 节)。
- VIPM 可让同一模型不同 LOD 的副本共享一个顶点缓冲,但基本方案每个副本需要单独索引缓冲;折叠顺序决定三角形顺序,顶点缓存一致性差(Forsyth 讨论了改进方法)。
- 对称性与关键特征:自动简化会破坏对称(10 面圆柱减一面后不对称,不如让 faceter 重新生成 9 面),会把眼睛、嘴这些最重要的部位当作无关紧要抹平;优秀美术手工做的低模往往更好。重拓扑 (retopology) 通过加边让特征在建模、平滑或简化时保持分离。
出处
- realtime_rendering_4ed.pdf 第 16 章 Polygonal Techniques
相关页面
图形学三角形带、扇与索引网格Triangle Strips, Fans & Indexed Meshes让共享顶点的三角形成组送入管线,可以减少顶点着色器调用。三角形扇和带把每三角形发送的顶点数降到接近 1;现代 GPU 的标准做法是带单一索引缓冲的三角形网格,理论上每三角形只需处理约 0.5 个顶点,实际效果取决于变换后顶点缓存,由三角形顺序优化(Forsyth、Tipsify 等)决定。图形学网格整合与顶点法线Mesh Consolidation & Vertex Normals整合 (consolidation) 指把零散多边形合并成共享顶点的网格、让所有面朝向一致、判断是否为实体,并生成平滑的顶点法线与折痕边。这些步骤是背面剔除、折痕检测、阴影体、碰撞检测、3D 打印等的前提。图形学多边形三角化Polygon Triangulation模型数据很少恰好是渲染需要的格式。图形 API 和硬件都针对三角形优化,所以复杂多边形要先剖分 (tessellation),最常见的是三角化 (triangulation)。本页讲三维数据的来源、三角化算法(耳切法、凸剖分、模板缓冲法)、四边形对角线选择与纹理扭曲,以及边缘裂缝和 T 型顶点。图形学法线贴图与凹凸贴图Normal & Bump Mapping凹凸贴图是一类在像素着色中修改着色法线来表现中尺度细节的技术:几何法线不变,只改变光照计算使用的法线,从而在不增加几何的情况下显得更立体。最常用的形式是切线空间法线贴图,需要每顶点的切线框架;法线贴图的过滤是难点。图形学替身与深度精灵Impostors & Depth Sprites替身 (impostor) 是把复杂物体从当前视点渲染成纹理、贴在视点朝向公告板上的表示,可在多个实例或多帧间复用以摊薄生成成本。公告板云用少量相交的镂空平面近似网格;深度精灵在纹理中加入每像素深度偏移,能与周围几何正确穿插;浮雕纹理、浮雕替身和几何图像进一步模糊了图像与网格的界线(RTR4 13.6.4、13.6.5、13.7 节)。图形学体素Voxels体素是"体积元素",表示均匀三维网格中的一块空间,位置由网格索引隐含。体素是存储体积数据的传统方式,可存占用位、密度、颜色、法线、有向距离等。数据量按分辨率立方增长,常用稀疏体素八叉树 (SVO) 等结构压缩;可由 GPU 体素化生成,并通过光线投射、转多边形、移动立方体或等值面/水平集光线追踪来渲染(RTR4 13.10 节)。图形学细节层次Level of Detail细节层次 (LOD) 在物体对图像贡献变小时改用更简单的表示。LOD 系统由三部分组成:生成(简化或手工制作多个版本)、选择(按距离、投影面积等收益函数挑选)、切换(尽量减少跳变 popping)。LOD 主要减少顶点处理,也通过减少 quad 过度着色降低像素开销;进一步还可在预算约束下全局选择 LOD,实现时间关键(恒定帧率)渲染。图形学地形渲染Terrain Rendering地形渲染(游戏、Google Earth、开源大世界引擎 Cesium 等)要在巨大高度场上按距离分配细节,同时控制内存、绘制调用和 LOD 之间的裂缝与跳变。主流 GPU 友好方案有:类似纹理 clipmap 的几何 clipmap、按瓦片复用顶点缓冲只换索引缓冲的分块方案、基于四叉树和屏幕空间误差的 chunked LOD、预存所有过渡索引缓冲的受限四叉树,以及 GPU 细分和压缩等补充手段。任何方案都可叠加分形噪声以在拉近时提供细节,许多系统也在加载时程序化生成地形。游戏数学包围体构建Bounding Volume Construction紧凑的包围体能降低相交测试成本:光线击中凸体的概率与其表面积成正比,拒绝永远不比相交慢,所以求交加速应最小化 BV 表面积;碰撞检测则常最小化体积。本页讲 AABB/k-DOP、包围球(AABB 法、Ritter 近似法、Welzl 最优法)、凸包(Quickhull)以及 OBB(PCA 法、数值最小化、Larsson 与 Källberg 的近优线性算法)的构建方法与取舍。游戏开发 · UE5Nanite 虚拟化几何体Nanite Virtualized GeometryNanite 是 UE5 的虚拟化几何体 (Virtualized Geometry) 系统:导入时把网格切成分层的三角形簇 (Cluster),渲染时按相机视角逐簇选择细节层次并无缝拼接,按需从磁盘流送,并在绕过传统绘制调用 (Draw Call) 的独立通道中渲染,使帧预算不再受多边形数、绘制调用和网格内存约束。图形学细分曲线与细分曲面Subdivision Curves & Surfaces细分从一个控制多边形 / 控制网格出发,反复"细化 + 平滑",极限是光滑的曲线或曲面。它能从任意拓扑的网格得到连续、无裂缝的曲面,规则简单、天然支持无限 LOD,连接了离散三角网格与连续曲面。游戏和电影最常用的是 Catmull-Clark(四边形)和 Loop(三角形)两种逼近型方案,可扩展出折痕和置换细分。