中EN
概念页

网格整合与顶点法线

Mesh Consolidation & Vertex Normals

整合 (consolidation) 指把零散多边形合并成共享顶点的网格、让所有面朝向一致、判断是否为实体,并生成平滑的顶点法线与折痕边。这些步骤是背面剔除、折痕检测、阴影体、碰撞检测、3D 打印等的前提。

基本检查(16.3 节)

多边形至少要有三个不同且不共线的顶点;两个顶点重合的三角形面积为零,可以丢弃。视用途而定,保存多边形本身可能比立即三角化更高效,因为三角化会产生更多边,增加后续工作。

合并与焊接(16.3.1 节)

  • 互不相连的多边形称为多边形汤 / 三角形汤,浪费内存且显示低效,通常要合并为网格:一个顶点列表(位置及法线、纹理坐标、切线、颜色等可选数据)加每个多边形的整数索引列表,每个顶点只存一次。
  • 哈希合并:顶点计数器从 0 开始;对每个多边形的每个顶点按顶点值哈希,表中没有就存入并记下计数器值(计数器加一,顶点加入最终列表),已有则取回其索引。
  • 焊接 (welding):位置极接近但不完全相同的顶点,用排序加宽松的位置相等函数高效合并。

朝向(16.3.2 节)

  • CAD 惯例:从正面看顶点逆时针排列(环绕方向,右手定则:右手四指沿顶点顺序弯曲,拇指指向法线)。这与视空间或世界坐标的左右手性无关;但对已定向网格施加反射矩阵会让法线与环绕方向相反。
  • 定向流程:
flowchart TD
  A["为所有多边形建立半边 half-edge"] --> B["排序或哈希, 找出匹配的边"]
  B --> C["得到邻接图, 找出相连的多边形组"]
  C --> D["每组任选起始面, 递归检查邻面: 共享边遍历方向相同则翻转邻面"]
  D --> E["计算有符号体积, 为负则整体翻转"]

如上图:半边存储时按排序顺序(先比 x,再 y,再 z)把较小顶点放前面,这样比较边只需首对首、尾对尾;若顶点已合并,可把半边挂到首顶点索引的临时列表上,平均每顶点约 6 条边,匹配极快。没有两个相邻面的边就是边界边;茶壶模型有壶身和壶盖两组。所有面一致后可能整体朝内,用每个三角形标量三重积求和得到有符号体积,为负则翻转所有环和法线。

  • 坑:房间盒子的法线应朝内;两个立方体共享一条边时该边被四个面共享;莫比乌斯带不可定向;即使良好的曲面网格也难判定哪侧朝外(Takayama 等从每个面投射随机光线,看哪个朝向从外部更可见)。

实体性(16.3.3 节)

  • 若网格已定向且从外部可见的面朝向一致(只能看到一侧),称为封闭 / 水密 (watertight)。实体可用背面剔除提高效率,也是阴影体和 3D 打印的必要条件。
  • 最简单的检查:每条边恰好被两个多边形共享,大致称为二维流形。严格的流形没有拓扑不一致(三个以上多边形共享一条边、两个以上角点相碰等);构成实体的连续曲面是无边界的流形。

法线平滑与折痕边(16.3.4 节)

  • 许多格式不提供顶点法线或边信息。折痕边是重要的视觉提示(也用于 NPR,见 轮廓边与几何描边),简化时应倾向保留。
  • 平滑组:显式指定哪些多边形属于同一曲面,不同组之间的边视为硬边。
  • 折痕角:二面角(两平面法线夹角)小于折痕角(典型 20°–50°)的相邻面视为同一平滑组,也称"边缘保持"。可能把该硬的边磨圆或反之,常需试验;平滑组也有局限,例如中间被捏出折痕的纸张需要重叠平滑组或直接定义折痕;圆锥整体平滑后尖端只有一条沿轴的法线,尖端是奇点,理想情况每个三角形在尖端要像四边形那样有两条法线。
  • 顶点法线加权:
方法做法评价
简单平均平均共享该顶点的各面法线结果可能不一致;一个多边形被三角化成两个三角形后会施加双倍影响
按角度加权 (Thürmer & Wüthrich)每个面法线按其在该顶点处两条边的夹角加权是否三角化结果不变;Jin 等综述认为在各种条件下最好或之一
Max 加权长边构成的多边形对法线影响较小配合简化可能更好,因为简化后的大多边形不太贴合曲率
按面积加权—Cignoni 明确警告不要用
  • 高度场快捷法 (Shankel):用点 p\mathbf{p} 沿 x 轴两个邻点、沿 y 轴两个邻点的高度差分别作为(未归一化)法线的 x、y 分量,z 分量取常数 2,可快速近似按角度加权的平滑(书中式 16.1;具体符号在提取文本中无法完全确定,此处以文字描述)。
  1. realtime_rendering_4ed.pdf 第 16 章 Polygonal Techniques

相关页面

图形学多边形三角化Polygon Triangulation模型数据很少恰好是渲染需要的格式。图形 API 和硬件都针对三角形优化,所以复杂多边形要先剖分 (tessellation),最常见的是三角化 (triangulation)。本页讲三维数据的来源、三角化算法(耳切法、凸剖分、模板缓冲法)、四边形对角线选择与纹理扭曲,以及边缘裂缝和 T 型顶点。图形学三角形带、扇与索引网格Triangle Strips, Fans & Indexed Meshes让共享顶点的三角形成组送入管线,可以减少顶点着色器调用。三角形扇和带把每三角形发送的顶点数降到接近 1;现代 GPU 的标准做法是带单一索引缓冲的三角形网格,理论上每三角形只需处理约 0.5 个顶点,实际效果取决于变换后顶点缓存,由三角形顺序优化(Forsyth、Tipsify 等)决定。图形学网格简化Mesh Simplification网格简化(数据缩减、抽取 decimation)在尽量保持外观的前提下减少三角形数,使应用能在低端机器上伸缩。核心操作是可逆的边折叠,用代价函数(典型是 Garland–Heckbert 的二次误差度量 QEM)排序;它产生的渐进网格可用于连续 LOD 与渐进传输,但自动化并非万能。图形学轮廓边与几何描边Contour Edges & Geometric Outlining卡通渲染的黑色描边可以按表面着色、过程几何、图像处理、几何边检测或混合方式生成。本页讲边的分类,以及在几何层面生成描边的三类方法:基于着色法线、背面过程几何(偏移、膨胀、外壳)、显式检测轮廓边并做隐藏线消除。图像空间方法见 图像空间边缘检测。图形学着色频率与材质系统Shading Frequency & Material Systems实现着色时要按"计算频率"划分工作:整个 draw call 不变的放到应用端作为 uniform,其余放在相应的可编程阶段。实践中大多数着色在像素级完成,顶点着色器负责变换和变形。材质系统把面向美术的材质与底层着色器组织起来,处理海量着色器变体的组合问题。图形学阴影基础与阴影体Shadow Basics & Shadow Volumes阴影帮助玩家判断物体的位置。精确光源只产生硬阴影,面光源产生带本影和半影的软阴影。最简单的情况是投射到平面上的投影阴影;投影纹理可把阴影扩展到曲面;阴影体用模板缓冲计数,能在任意表面得到精确硬阴影,但开销极不稳定,如今很少使用。图形学顶点着色器Vertex Shader顶点着色器是程序员直接控制的第一个管线阶段,逐个处理输入顶点,至少要输出顶点在齐次裁剪空间里的位置。它不能创建或删除顶点,顶点之间也不能传递结果,正因如此可以大规模并行。图形学剔除技术Culling Techniques剔除 (culling) 是在渲染前尽快去掉对最终图像没有贡献的部分。本页讲几何类剔除:背面剔除(含成簇背面剔除与法线锥)、视锥剔除(层次化、平面掩码)、室内场景的入口剔除,以及牺牲质量换速度的细节剔除和小三角形剔除。更复杂的遮挡剔除见 遮挡剔除。图形学PN 三角形与 Phong 细分PN Triangles & Phong Tessellation两种只用每个三角形自身的顶点位置和法线、把平面三角形替换成曲面三角形的方法,不需要邻接信息,适合硬件细分即时生成。PN 三角形构造三次贝塞尔三角形并二次插值法线;Phong 细分是"几何版 Phong 着色",生成二次曲面,更快更简单。两者都能明显改善低模的轮廓和着色。图形学细分曲线与细分曲面Subdivision Curves & Surfaces细分从一个控制多边形 / 控制网格出发,反复"细化 + 平滑",极限是光滑的曲线或曲面。它能从任意拓扑的网格得到连续、无裂缝的曲面,规则简单、天然支持无限 LOD,连接了离散三角网格与连续曲面。游戏和电影最常用的是 Catmull-Clark(四边形)和 Loop(三角形)两种逼近型方案,可扩展出折痕和置换细分。

被这些页面引用1 篇

输入关键词开始搜索

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