Feature Preserving Octree-Based Hexahedral Meshing

论文阅读

作者映入了一种新的算法尝试去产生一个纯粹的六面体网格并且不带有自交和正值雅克比。CAD模型上的尖锐特征达到用户指定的几何距离。利用最近在生成体积参数方面的进展,使其变形以最小化到输入表面的距离。局部的自交被阻止通过一个翻转避免的形变,全局的自己被阻止使用一个脚手架网格。

方法

  1. 给一个流形的水密的三角网格带有标注的尖锐特征。
  2. 一个小的,用户指定的容忍度 \(\varepsilon\)
  3. 一个想要的边长\(l\),我们的算法尝试去生成一个所有的六面体网格带有一下的属性:
    a. 这个网格没有非流形的结构
    b. 所有的六面体元素有正的张量Jacobian值。
    c. 边界距离输入的网格在\(\varepsilon\)以内。
    d. 网格的边界没有自交。

基础的规则对于解决这个问题是一个一个要求实现,一个一个属性满足了,他不会离开满足域。在生成初始网格的过程中,
我们也构建了一个脚手架防止我们的网格在剩下的步骤中出现自交的现象。特诊对齐和几何保真通过在开始的时候构建一个拓扑正确
特征映射来实现。变形网格一匹配输入通过一个局部的内设体积参数化。自适应网格的细化和填充直到满足\(varepsilon\)

Pipeline

图2展示了我们的管线在2D。

  1. 开始一个封闭的流形的三角网格定一个了要去网格化的区域,我们创建了一个自适应的八叉树,带有更高的
    密度在那些有小的结合特性的区域。
  2. 八叉树转为纯粹的六面体网格通过计算它的几何对偶和分裂/合并非六面体单元
  3. 在这一步我们分割了网格为内部的和外部的和在外部的网格作为一个脚手架网格。在输入网格的锐利特征处拓扑映射对于边界的六面体网格
  4. 网格和脚手架被填充在表面和在锐利特征的周围
  5. 最后六面体网格被形变通过一个局部的内射去匹配输入表面的集合。
    额外的修正可能需要去去报拓扑双映射特征匹配。或者去满足最小误差边界\(\varepsilon\).

3.1 八叉树的生成

从输入的边界框开始,我们递归的分裂元素如果他们的边界自交于输入的表面或者他们包含输入网格内部的顶点。
为了有一个光滑的尺寸转换,我们仍然强制额外分裂去确保

  1. 平衡,举例,任意两个相邻八进制?(什么鬼?)的差值少于或者等于1
  2. 匹配,举例,如果一个八进制的孩子需要被分裂,探后他的兄弟需要地笼统的八进制和他们的父母情也需要被分裂。

3.2 转换到一个纯粹的六面体网格

就说构建的八叉树可以被视作一个非保形的六面体网格,挂载节点在相邻的八进制带有不同的尺寸,或者作为一个保形的混合网格,有许多多面体元素组成。作者使用第二点,作者首先构建了混合六面体网格,然后引入一个简单的方案将其转为全六面体网格。
我们的方法,我们首先讨论了2为的例子,举例,我们先将一个四叉树转为四边形网格。

2D

三角形在对偶四叉树中挂起节点在四叉树中。由于匹配规则我们在四叉树构建中使用,挂起的节点在相同的坐标轴总厨成对的出现,每一个三角形配对形成一个梯形,梯形总是彼此孤立。我们可以将每个梯形转化为一些列四边形通过分裂内部的四边形用两个而外的顶点。

3D

在把创建的金字塔(四面体)在对偶八叉树,简单来说就是出现一个四面体,由于八叉树的算法一定会出现四个四面体构成的小土堆形状,然后以一定规则分割这个小土堆构成许多六面体。

通过加入12个顶点生成13个六面体。

如果一个小土堆旁边有其他相关驳接的块我们采用三种模板进行解构。

特征提取

我们假定输入的面带有锐利的特性,锐利的特性个定义为一系列边集合,当信息丢失的时候,输入被认为是一个没有尖锐特性的有机模型。
对于CAD模型我们自动采集尖锐特性通过两个弥漫之间的夹角如果小于140度的话认为他们是锐利的边缘,然后可以人工交互的方式进行完善尖锐信息。
有些尖锐的信息,可能整个程序不会完全精确表示。

特征传递??

在六面体网格表面特征的传递可以通过解算是双映射在原三角形表面和目标四边形网格。可以保证是正的雅克比值。
我们然后映射顺序的映射特征线使用一下的步骤:

  1. 在输入的网格上均匀的采样特征线
  2. 匹配所有的采样到最近的点在四边形网格的边上
  3. 定义一个距离场在四边形网格上,分配每个点到距离最近的映射采样?(什么鬼?没看懂)
  4. 我们跟踪特征线使用Dijkstra算法,使用距离长作为权重。
    媒体添加特征线时,我们认为他是后续特征跟踪的切割,确定没有交点被引入。

重新标记特征注释

有几种情况可能会出现错误

  1. 特征不完整
  2. 丢失小特征
  3. 假的特征线在真的特征线附近

3.4 填充层和解算

拓扑填充

我们区分特征对于3D
模型在一下两种类型:

  1. 软特征通过增加离散的解析被近似。如图8,增加了一个填充层。
  2. 硬特征通过明确的捕获
    软特征对应于引入凹区域的高频特征。

扭曲能量项

单个六面体的扭曲\(\mathcal{D}_{h}(\mathbf{V})\),其中\(\mathbf{V}\)是一个矩阵存储了整个网格顶点的位置。
每个六面体的总扭曲度分解为8个四面体的的扭曲衡量,四面体表示为\(t\),六面体表示为\(h\)

\[E_{D}(\mathbf{V})=\sum_{h \in \mathcal{H}} \mathcal{D}_{h}(\mathbf{V})=\sum_{h \in \mathcal{H}} \sum_{t \in h} \mathcal{D}_{t}(\mathbf{V}) \]

其中每个四面体的扭曲度的衡量

\[\mathcal{D}_{t}(\mathbf{V})=\left\|\mathbf{J}_{t}(\mathbf{V})\right\|_{F}^{2}+\left\|\mathbf{J}_{t}^{-1}(\mathbf{V})\right\|_{F}^{2} \]

其中\(\mathcal{H}\)表示所有的六面体,其中\(\mathbf{J}_t\)是雅克比值对应于四面体\(t\)转换到理想同体积的四面体的转换(不太懂~)。
当前和理想四面体之间的不同通过\(\mathcal{D}_{t}(\mathbf{V})\)来测量堆成狄利克雷能量。我们要求的理想形状是直角四面体:我们计算目标形状作为六面体对应的交的四面体,和六面体有着相同的体积?

缝合能量项目

初始化地,所有的六面体元素以独立的六面体表示,所有的顶点除了那些在边缘上的顶点有着多个拷贝。这一项允许每个顶点的多个拷贝移动到相同的位置,允许我们将它们合并成一个点。我们定一个了聚类\(c\)对于每个点集需要被合并,和新增了一个二次惩罚项目,鼓励每个聚类要互相联系?

\[E_{S}(\mathbf{V})=\sum_{c \in \mathcal{C}} \sum_{p \in c}\left(\left\|p(\mathbf{V})-\frac{1}{|c|} \sum_{p \in c} p(\mathbf{V})\right\|_{2}^{2}\right) \]

其中\(c\)是一个顶点聚类,\(p\)是每个顶点在聚类中。理想的我们希望\(E_S\)是0,在实际中我们试着破坏每个聚类在每次优化迭代之后,我们接受合并在没有产生负的雅克比值的情况下。

求解器

几何局部区域的优化通过最小化以下能量

\[E_{F}\left(\mathbf{V}^{\prime}\right)=E_{D}\left(\mathbf{V}^{\prime}\right)+\lambda_{S} E_{S}\left(\mathbf{V}^{\prime}\right) \]

其中\(\mathbf{V}^{\prime}\)表示子区域的点。\(\lambda_{S}=1\)表示初始化,\(\lambda_{S}^{\text {update}}=\min \left(\lambda_{\min } * \max \left(\lambda_{S} \frac{E_{D}}{E_{S}}, 1\right), \lambda_{\max }\right)\)的更新规则,其中\(\lambda_{\min }=10^{4}\) and \(\lambda_{\max }=10^{16}\)
使用SLIM求解器去最小化能量。使用了翻转避免的线搜索。

例子?,说实话没看懂说明,给一个网格包含翻转的六面体(是六面体的某一个面的法向量出现了错误么?QU:六面体的翻转是什么意思)

3.5 几何拟合

六面体网格最终变形去最小化距离 他的边界和输入的三角网格。通过计算一个局部的入射匹配,简单去我们插入填充层,但是应用额外特征角,线条和部分在两面网格的对齐。

特征保留

能量

\[\begin{aligned} E_{B}(V)=\sum_{p \in \text {corner}}\|p(V)-\tilde{p}\|^{2}+& \sum_{p \in \text {line}}\left\|p(\mathbf{V})-\tilde{p}-a_{l} \vec{d}_{l}\right\|^{2} \\ &+\sum_{p \in \mathcal{M}}\|\vec{n} \cdot(p(\mathbf{V})-\tilde{p})\|^{2} \end{aligned} \]

其中\(\tilde{p}\)表示边缘点距离最近的表面的坐标\(\vec{n}\)是在点\(\tilde{p}\)的法向量;\(\vec{d}_{l}\)表示在\(\tilde{p}\)的特征切线方向; \(a_{l}\)表示特征线约束。

拟合能量

最终的网格通过最小化一下的能量来计算得到

\[E(\mathbf{V})=E_{D}(\mathbf{V})+\lambda_{B} E_{B}(\mathbf{V}) \]

其中\(\lambda_{B}^{\text {update}}= \min \left(\lambda_{\min } * \max \left(\lambda_{B} \frac{E_{D}}{E_{B}}, 1\right), \lambda_{\max }\right)\)
\(\lambda_{B}=50\)在初始化的时候。

关于脚手架的提醒

只有当我们监测到自交的时候(在我们的实验中从未发生过)我们才会冻结脚手架的边界。

image

从上图中可以简单看出来,当设定误差交到可以简单的制作六面体来拟合整个初始的三角形边界,但是随着误差的减小,作者引入了越来越多的奇异边结构。

3.6 停止标准

我们最小化能量对于最多30个最小化的迭代Fitting Energy.公式
我们提前停止迭代如果两个条件被满足

  1. 网格满足用户指定的\(\varepsilon\)误差范围
  2. 网格在连续两个迭代之间的变化足够小

结果

使用\(l=\frac{b}{2^6}\)b是包围框最长的边,和使用Hausdorff距离是 \(varepsilon=0.005d\) \(d\)表示的是包围框的对角线的距离。
MeshGem 产生的更快,对于有些模型此产生的更好,但是更耗时,产生的结果更简单因为有些分辨率很大的块。
三个主要缺陷

  1. 很大的内存占用
  2. 运行时间长
  3. 只产生正雅克比值。
posted on 2020-12-21 23:16  HDU李少帅  阅读(185)  评论(0编辑  收藏  举报