网格生成 05:四边形网格——从交叉场到整数格点图

四边形网格不只是把两个三角形合并

四边形的价值来自两族相交坐标线。规则区域近似张量积网格,可直接支持样条、纹理、边界层和方向性 PDE。把三角形两两合并只能得到 quad-dominant 连接,通常没有好的全局流线结构。

局部奇异点与指数

内部正则顶点价数为 4。价数vv 的顶点角亏为

Kv=2π−vπ2=(4−v)π2.K_v=2\pi-v\frac{\pi}{2}=\frac{(4-v)\pi}{2}.

相应交叉场指数为

ind⁡(v)=Kv2π=1−v4.\operatorname{ind}(v)=\frac{K_v}{2\pi}=1-\frac{v}{4}.

三价点指数+1/4+1/4,五价点指数−1/4-1/4。闭曲面满足

∑vind⁡(v)=χ(S).\sum_v\operatorname{ind}(v)=\chi(S).

这只给总量约束,不保证这些奇异点位置能诱导全局四边网格。

现代主流程

flowchart LR
    A[三角曲面] --> B[特征与边界约束]
    B --> C[平滑交叉场]
    C --> D[奇异点配置]
    D --> E[切开曲面]
    E --> F[无缝全局参数化]
    F --> G[整数周期量化]
    G --> H[提取 quad layout]
    H --> I[几何/拓扑优化]

每一步都可能失败。特别是“交叉场平滑”与“存在有效整数格点图”不是同一问题。

交叉场离散化

在三角面ff 的局部正交标架中用角θf\theta_f 表示方向。因为旋转kπ/2k\pi/2 等价,保存

qf=ei4θf.q_f=e^{i4\theta_f}.

跨边比较时要先把一个面的方向平行移动到另一个面。典型光滑能量为

E(q)=∑(f,g)wfg∣qf−ei4αfgqg∣2,E(q)=\sum_{(f,g)}w_{fg}\left|q_f-e^{i4\alpha_{fg}}q_g\right|^2,

αfg\alpha_{fg} 是两个局部标架之间的旋转。

从方向到参数坐标

理想参数化希望

∇u∥d1,∇v∥d2,d1⊥d2.\nabla u\parallel d_1,\qquad \nabla v\parallel d_2, \qquad d_1\perp d_2.

在切图的两侧,参数不是简单相等,而是允许四分之一旋转与整数平移:

[u′v′]=Rkπ/2[uv]+[mn],m,n∈Z.\begin{bmatrix}u'\\v'\end{bmatrix} =R_{k\pi/2} \begin{bmatrix}u\\v\end{bmatrix} +\begin{bmatrix}m\\n\end{bmatrix}, \qquad m,n\in\mathbb Z.

这就是 mixed-integer 方法中整数变量出现的原因:它们不是数值技巧,而是在编码网格线闭合和无缝拼接。

为什么交叉场不等于 quad mesh

交叉场要求局部方向在旋转群C4C_4 下相容;四边形网格还要求:

  1. 存在可积分的两族坐标线;
  2. 周期满足整数格点条件;
  3. 奇异点除子满足更强的全局代数几何约束;
  4. 轨线形成有限布局,而不是稠密、螺旋或自交;
  5. 参数化局部单射并满足边界约束。

所以一个视觉上很平滑的场可能根本无法直接抽取目标四边网格。

T-mesh、layout 与最终网格

  • separatrix:从奇异点出发的特殊积分曲线;
  • quad layout:separatrix 将曲面分成拓扑矩形;
  • T-mesh:允许 T-junction 的矩形分区;
  • quad mesh:每个面都是四边形的完整离散;
  • semi-regular:奇异点少,其他区域为规则网格。

论文比较时必须确认输出对象相同。只输出 layout 的方法不能与直接输出细网格的方法按单元数公平比较。

最小奇异指数检查代码

def quad_index(valence, boundary=False):
    # 闭曲面内部顶点:正则价数为 4。
    # 边界点需要结合边界转角,不能直接套这个公式。
    if boundary:
        raise ValueError("boundary index needs the boundary turning angle")
    return 1.0 - valence / 4.0

def check_poincare_hopf(valences, euler_characteristic, tol=1e-12):
    total = sum(quad_index(v) for v in valences)
    return abs(total - euler_characteristic) < tol, total

ok, total = check_poincare_hopf([3] * 8, euler_characteristic=2)
assert ok and total == 2

这个检查只能排除违反必要条件的配置,不能证明网格存在。

方法家族比较

方法核心变量优点常见风险
paving前沿边与模板边界控制直接前沿闭合与奇异点不可预测
三角合并配对/匹配实现简单、鲁棒全局结构弱
cross-field + tracing方向与积分线直观、可对齐特征螺旋、极限环、交叉
global parameterization(u,v)(u,v) 与整数跳跃可直接采样规则格翻转、量化与整数优化
polycube到轴对齐域的映射便于体网格与纹理构造与双射保证困难
亚纯微分除子、周期、自然坐标全局理论清晰计算复杂、轨线有限性与工程约束

关键论文

自测

  1. 球面上只有 8 个三价奇异点为何满足必要条件?
  2. 参数切缝两边为什么允许旋转与整数平移?
  3. 交叉场通过 Poincaré–Hopf 检查是否足够?

答案:总指数为8×1/4=2=χ(S2)8\times1/4=2=\chi(S^2);坐标轴可交换/旋转且网格线编号可整体平移;不够,还缺可积性、周期、除子与有效性条件。

文献深读

从 paving、PGP、QuadCover、MIQ 到 2022–2025 年可实现性与神经场工作的连续关系,见四边形网格、方向场与全局参数化文献谱系。