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. 只产生正雅克比值。

Feature Preserving Octree-Based Hexahedral Meshing的更多相关文章

  1. SVO实时全局光照优化(里程碑MK2):Sparse Voxel Octree based Global Illumination (SVO GI)

    自主实现的实时渲染引擎,对标对象ue4/ce5,超越u3d/klayge.MK2版本侧重于质量与速度的均衡,以下上传示范均为实测截图,均为全分辨率(网页上显示缩小了)1080p/60fps.

  2. SVO实时全局光照优化(里程碑MK0):Sparse Voxel Octree based Global Illumination (SVO GI)

    完全自主实现,bloat-free.再次声明,这不是UE.U3D.CE.KlayGE! 老规矩,先贴图.后面有时间再补充描述. 1. 支持多跳间接全局光照2. 支持vxao/so.vxdiff/spe ...

  3. SVO实时全局光照:Sparse Voxel Octree based Global Illumination (SVO GI)

    功能已实现,初步集成进来,暂未进行重度优化.但GI的效果已很明显.这里特地给出了开启实时GI前后的效果对比,比对场景如下:1.只有直接光照(方向光源)的场景.2在直接光照(方向光源)基础上开启了实时G ...

  4. Graph Regularized Feature Selection with Data Reconstruction

    Abstract • 从图正则数据重构方面处理无监督特征选择: • 模型的思想是所选特征不仅通过图正则保留了原始数据的局部结构,也通过线性组合重构了每个数据点: • 所以重构误差成为判断所选特征质量的 ...

  5. cvpr2015papers

    @http://www-cs-faculty.stanford.edu/people/karpathy/cvpr2015papers/ CVPR 2015 papers (in nicer forma ...

  6. Spark MLlib - Decision Tree源码分析

    http://spark.apache.org/docs/latest/mllib-decision-tree.html 以决策树作为开始,因为简单,而且也比较容易用到,当前的boosting或ran ...

  7. Xamarin 的 MVVM 之 Caliburn.Micro

    约定 Caliburn.Micro 以下简称 CMXamarin.Form 以下简称 XF 摘要CM 当前已释出 3.0 beta 版https://github.com/Caliburn-Micro ...

  8. Machine Learning for Developers

    Machine Learning for Developers Most developers these days have heard of machine learning, but when ...

  9. 西安理工大学 李爱民 Xi'an University of Technology, Aimin Li

    李爱民-西安理工大学计算机科学与工程学院 ● 简介(Introduction)-> 李爱民(Aimin Li),男,湖北随州人,西安电子科学大学博士(PhD),中共党员.中国计算机学会会员,CS ...

  10. ArcEngine二次开发错误编码对照表(转)

    阅读数:3323 每当我们在进行AE开发,出现错误时经常会出现错误代码,但是我们并不知道它到底代表什么意思,这里的而错误编码我们可以对照着找到我们需要的时候常详细信息(问题是,经常还是会出现没有错误编 ...

随机推荐

  1. MySQL 中的索引数量是否越多越好?为什么?

    MySQL 中的索引数量是否越多越好?为什么? 虽然索引能够提高查询性能,但并不是索引越多越好.索引数量过多会带来一定的负面影响,尤其是在写操作频繁的场景下.需要根据实际的查询需求来合理设计索引,以平 ...

  2. test-同步111

    视频如何拍? 旅拍技巧 旅拍微电影必拍内容 只要用这个思路,用手机拍也可以,只是相机效果更好一些. #小雨朵 #摄影教学 #旅行vlog #川西美景 #把生活拍成电影 - 抖音 (douyin.com ...

  3. C# 基础——CLR、托管代码及非托管代码

    C# 基础--CLR.托管代码及非托管代码 应用程序的类型 使用.net的编程语言(C#.F#.VB)创建的应用程序,都会被编译器编译成中间语言IL语言,在CLR(公共语言运行时)中运行. 比如:控制 ...

  4. Python 潮流周刊#99:如何在生产环境中运行 Python?(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  5. Vue相关笔记

    Promise基本使用 Promise是异步编程的一种解决方案,用于一个异步操作的最终完成(或失败)及其结果值的表示,比传统的回调函数方案更加合理. var promise = new Promise ...

  6. 2025.3.24 DP专题

    题目按照主观难度增序排列 Luogu P1758 [NOI2009] 管道取珠 有上下两个长度分别为 \(n,m\) 的管道 \(a,b\),管道中有两种不同颜色的球用 \(A,B\) 表示.现在每次 ...

  7. vue3 基础-补充 ref & provide-inject

    本篇主要对一些被以前内容(渲染, 传值) 等忽略的几个常用小技巧进行补充说明啦. v-once 即对某个dom节点生效, 其会限定只会渲染一次, 不论数据是如何的变化, 演示如下: <!DOCT ...

  8. DevEco重大更新快来体验吧

    HarmonyOS首个api17 release已经正式发布了.这次的更新DevEco增加了很多重大特性,系统能力也有所增强.DevEco现在支持创建api17的应用了,模拟器也首次支持阔折叠手机以及 ...

  9. C#中的i++,++i,i--,--i

    这些是 C# 中用于增加和减少变量值的运算符,下面是它们的用法: 1.i++ (后增量运算符):先使用变量 i 的当前值,然后将 i 的值加 1. int i = 0; int j = i++; // ...

  10. 【最新】MySQL 5.6 保姆级安装详细教程

    MySQL5.6简介 MySQL 5.6 是 MySQL 数据库管理系统的一个重要版本,以其稳定性.性能优化和功能扩充受到广泛关注与使用.该版本在数据库领域中提供了更加高效的数据处理能力.增强的复制功 ...