跳到主要内容
研究论文
开放式访问

基于功能的交互式高精度体积设计与制造方法

出版:2023年9月29日 出版历史
  • 获取引文提醒
  • 摘要

    我们提出了一种新的基于函数表示(F-Rep)的几何建模内核,该内核是为支持计算机辅助设计(CAD)和包含数千亿像素网格元素的高分辨率体积模型的制造而量身定制的。我们的建模内核解决了与评估、存储和访问F-Rep在渲染之外的上下文中生成的体积数据相关的现有限制。结果是,F-Rep建模内核非常适合于基于CAD的应用程序。
    我们的内核使用稀疏体数据结构来管理F-Rep数据,同时通过区间算法(IA)、用户定义函数的实时编译(JIT)和GPU上的大规模并行计算的组合来实现高效的F-Rep计算。我们使用IA作为函数评估树的局部修剪的基础,以最小化总函数评估,我们使用一种新的JIT编译方案来优化函数执行,并利用GPU并行性来提高计算吞吐量。我们说明了该内核在可视化和切片具有复杂定义函数和详细几何结构的模型方面的有效性,并利用几何内核来制造物理零件。此外,我们还提供了多个硬件配置的性能指标,证明了与现有F-Rep几何内核相比,性能有了显著提高,并且我们还研究了几何内核如何随计算能力扩展。

    1引言

    计算机辅助设计(CAD)软件通常由几何内核提供支持,几何内核定义了可用于设计和存储模型的操作和表示。传统CAD软件实现了几何内核,这些内核使用边界表示(B-Rep)其目的是将实体定义为一组曲面片,这些曲面片正确连接到内部区域与外部环境空间之间。新制造技术,如添加剂制造已经突破了可制造性的界限,扩展了可以构建的零件的范围,超出了现有B-rep系统所能代表的范围。AM系统提供了一种通过直接控制本地材料沉积将数字模型转换为物理部件的机制,这意味着充分利用AM技术需要对整个模型内部进行完整描述。AM制造所需的信息更直接地对应于体积表示;然而,体积模型遇到了实际限制。由于计算成本和与B-Rep相关的潜在稳健性问题,将B-Rep模型描述转换为体积形式可能具有挑战性点成员分类(PMC)在AM技术支持的规模下,体积表示也很难处理,因为现有AM系统能够跨计量建筑体积实现微米级功能(包括材料或工艺属性的内部变化)[Bader等人。2018]. 相应的体素模型可以包含数千亿个元素,相关的内存需求高达TB。当前的建模软件无法以这些分辨率设计和表示模型,未来AM系统的增强功能只会加剧这一问题。
    为了解决表示和设计高分辨率模型的挑战,我们引入了一个几何建模内核,该内核使用基于功能的表示(F-Rep)旨在提供高效设计、可视化和打印大规模体积模型的功能。F-Rep提供了一个替代模型基础,允许明确且高度并行的PMC[布卢门塔尔和威维尔1997; Pasko等人。1995; 基特2020]同时仍然支持B-Rep几何内核通用的建模技术。我们的几何建模核心框架由两个组件组成:用于评估用户定义模型的解释器和存储解释器生成的用于可视化和操作的输出的稀疏体数据结构。将这两个组件与图形处理单元提供了以现有软件工具目前无法实现的比例和速度支持大规模体积建模应用程序的方法。

    2相关工作

    2.1基于功能的表示

    F-Rep是B-Rep的强大替代品,可用于实体建模,支持许多常见的模型装配技术,如构造立体几何(CSG),能够精确表示,并已用于从微观结构建模等众多应用[Pasko等人。2011]大范围地形【Génevaux等人。2015]. 然而,F-Rep使用隐式函数定义模型,并且隐式函数通常被认为难以直接呈现。此外,F-Rep传统上采用单一方法进行模型表示;对模型几何体所做的所有修改都位于一个表达式中。随着整体F-Rep模型的复杂性增加,即使只适用于局部区域的修改也会使模型的全局评估成本增加。围绕F-Rep的大量研究都集中在降低评估和可视化所需的计算成本上。
    传统上有两种方法用于F-Rep渲染。第一种方法涉及使用marching cubes或dual contouring[Maple2003; Ju等人。2002; de Araüjo等人。2015]然后通过光栅化进行多边形渲染。多边形化方法利用了对多边形网格可视化的广泛软件和硬件支持,但也存在鲁棒性和准确性方面的缺点。多边形网格不能准确地表示曲面;着色方法可以用来使表面网格看起来平滑,但多边形化不可避免地会引入几何伪影,从而降低模型的准确性。多边形化也不能保证生成与有效三维实体边界对应的网格。因此,明智的做法是避免依赖基于多边形模型的PMC的鲁棒性[Manson和Schaefer2010; 弗莱亚齐诺夫和帕斯科2007]. F-Rep可视化的第二种也是更常见的方法是光线投射;模型通过在空间中投射光线进行渲染,测试光线是否与几何定义函数所描述的区域相交。以稳健的方式找到F-Rep曲面,同时限制与计算交点相关的计算成本,这是一个相当于根查找的挑战性问题。
    只能对有限类简单几何定义函数(例如低阶多项式[Loop和Blinn2006; Kanamori等人。2008; 辛格和纳拉亚南2010]. 当交点无法解析计算时,可以使用行进技术沿射线搜索曲面交点。为了减少交集检查的总数,如果定义函数导数的界是局部或全局已知的,则可以使用基于Lipshitz的技术生成自适应步长,以便能够更有效地沿射线行进[Hart等人。1989; 雄鹿1995; Keinert等人。2014; Seyb等人。2019; Galin等人。2020]. 或者,如果导数的界未知,区间算术(IA)[摩尔1966]这些技术可以用于递归细分光线,直到隔离定义函数的根1990; 德菲格雷多和斯托尔菲2004; De Cusatis等人。1999; Knoll等人。2007;,2009年a].
    除了根隔离之外,还可以使用基于IA的技术来降低与几何定义函数的评估相关的计算成本。达夫[1992]演示了如何使用区间算法构造层次空间划分并局部简化定义函数。当使用几何图元(例如立方体、球体、圆环体等)构造通过CSG操作定义的F-Rep时,可以为任何空间细分派生出保留局部几何的简化或“修剪”评估树。省略了与不与空间细分重叠的几何图元关联的求值,从而减少了函数求值计数。基特[2020]扩展了达夫的工作[1992]通过提出一个GPU解释器,该解释器利用IA修剪几何定义函数。然而,Keeter并没有在几何基元层次上修剪树,而是采用修剪构成几何定义函数的单个数学操作的方法。Jazar和Kry[2023]将IA应用于时域,提出了有效评估闭合形式动画隐式曲面的方法。他们的评估方案使用IA来确定时间导数的范围,并仅对定义函数在时间步长之间变化的区域进行局部评估。

    2.2稀疏体数据结构

    我们使用稀疏的卷数据结构来管理GPU解释器生成的输出。稀疏卷得到了很好的研究,并出现在许多应用领域。为了彻底研究最新技术,包括稀疏体构造和可视化,我们请读者参阅Aleksandrov等人[2021]和Beyer等人[2015]. 我们的重点主要放在基于GPU的稀疏体结构上,该结构可以集成到我们的几何内核中,以存储解释器输出,以便以满足并超过现有软件和硬件CAD工具的规模进行可视化和操作。
    由于体积数据的极端内存需求,因此需要稀疏卷。稀疏性可以通过分配内存来仅描述卷内所需空间区域中的相关属性,从而显著降低给定卷的内存消耗。八叉树是一种常用结构的例子,它提供了稀疏性[Knoll等人。2006;,2009年b; 克鲁格和韦斯特曼2003]并且,除了减少内存开销外,还可以使用诸如空格跳跃之类的技术来提高渲染性能[Ruijters和Vilanova2006; 泽尔曼2019]. 当仅稀疏性不足时,也可以使用非核心实现[Gobbetti等人。2008; Fogal等人。2013; Liu等人。2012]其中数据根据需要动态流式传输到GPU,从而允许稀疏网格包含超过GPU内存的信息。
    存在其他分层多级网格,例如边界体积层次(BVH)[甘特和曼兹克2019]. 最直接的利益是\(N^3\)-树,这种结构提供了轻松重新划分输入数据的方法,以优化内存效率和遍历速度。Crassin等人[2009]介绍基于GPU的稀疏网格的最早实现,该网格利用\(N^3\)-该树名为GigaVoxel,用于可视化海量体积数据。霍兹林[2016]引入GVDB,一种基于GPU的稀疏网格,灵感来自Museth的OpenVDB[2013]. 采用与Crassin等人类似的方法[2009],GVDB对和\(N^3\)-具有由指定给树节点的块组成的体素地图集的树。GVDB使用一种新颖的内存池体系结构来存储树拓扑,与以前的方法相比,实现了重大的性能改进。
    最近,Museth以NanoVDB的形式提供了OpenVDB的GPU扩展[2021]; OpenVDB结构的线性化只读表示。由于其只读特性,NanoVDB在直接体渲染之外的使用受到了限制,但它在基于渲染的工作负载中提供了令人印象深刻的结果。Kim等人[2022]还通过合并神经网络来学习其中包含的稀疏网格拓扑和体积数据,从而使用NeuralVDB扩展OpenVDB。经过训练的网络大大减少了存储稀疏网格所需的内存,但对训练和解码步骤的要求为实时应用程序的实现带来了巨大挑战。

    2.3捐款

    我们的几何内核设计解决了与当前F-Rep几何内核及其在CAD中的应用相关的问题。而现有的内核,如Keeter提供的内核[2020],可以实现令人印象深刻的渲染速度,但它们不能有效地访问F-Rep模型的定义函数在渲染上下文之外生成的数据。从F-Rep模型导出的数据被视为短暂的,仅存在于渲染帧的长度内。在渲染之外的任何上下文中与模型交互通常通过首先细分模型的曲面来实现。这种方法不仅使常见的CAD操作(如计算模型的体积属性)依赖于细分过程的稳健性和准确性,还导致丢弃通过查询F-Rep获得的所有体积信息。为了克服对基础F-Rep数据访问的限制,我们的几何内核旨在提高现有F-Rep几何内核的性能,并解决管理F-Rep评估生成的大规模体积数据的挑战,避免了曲面细分的需要。捐款包括:
    JIT编译用户创建的模型定义函数,提高解释器性能。
    增强的修剪功能将可修剪性扩展到算术操作,允许额外的定义函数优化。
    减少了存储模型定义功能的优化副本的内存需求。
    集成稀疏卷数据结构,以有效管理和存储解释器生成的数据。
    演示如何利用稀疏体数据结构高效地执行CAD操作,如切片分解和体属性评估,而无需进行曲面细分。
    对渲染性能的全面评估,证明与现有方法相比,帧速率和支持的模型网格大小有所改进。

    F代表口译员

    3.1模型表示

    在建模软件中,几何内核定义了可用于描述模型的允许操作集,并形成了构建模型的基础。我们的方法是实现一个几何内核,该内核使用GPU上的通用解释器来处理模型评估。通过函数组合来定义模型;表示数学运算的单个函数向用户公开,可以组成层次图结构或“函数组合树”,描述模型的几何定义函数。数学运算表现为编写模型的汇编语言。这种方法在原则上与Keeter类似,但在实现方面有很大差异,以支持其他功能,如JIT编译。
    与方程式关联的示例函数组合树(1),它定义了中的单元盘\(\mathbb{R}^2\)或与对齐的单位半径圆柱体z(z)-轴输入\(\mathbb{R}^3\),如图所示1.
    \(\开始{方程式}f{\textrm{disk}}(x,y)\lt 0\;\;\textrm{where}\;\;f_{\textrm{disk}}(x,y)=\sqrt{x^2+y^2}-1\结束{方程式}\)
    (1)
    图1。
    图1隐式方程、水平可视化、木螺丝的切片堆栈以及Stratasys J750 3D打印机上制作的物理模型。
    图2。
    图2。单位磁盘的定义函数,描述为函数组合树,其中树中的每个节点表示一个代数运算。x个表示空间中给定点的x和y分量,函数在该点处求值。
    解释器遍历组合树,计算与每个节点关联的函数,以构建模型。虽然与特定于模型的程序相比,这种评估方法通常效率较低,但我们实时(JIT)编译并本地优化定义函数以减少解释器开销。

    3.2 JIT操作分组

    我们的解释器支持一系列内置的数学运算,包括与代数运算相对应的函数,这些函数可用于构建模型。除了固定的基本操作集之外,我们的解释器还使用了一种新颖的JIT编译方案,允许动态扩展解释器的函数集,以降低与解释器评估相关的成本。
    口译员的一个主要缺点是获取和执行指令所需的开销。函数组合树中的每个节点都有一条对应的指令,表示解释器要调用的数学函数。树越大,需要调用的函数越多,评估树所需的解释器开销就越大。执行局部求值时,可以通过删除或“修剪”不影响局部几何结构的函数组合树分支来减少指令总数[Keeter2020]. 我们尽可能进行修剪,但如第节所述3.5,只有某些操作类能够修剪函数组合树。定义包含很少或不包含可拘谨的候选操作的函数,要么无法进行本地优化,要么可能无法抵消足以保证使用解释器的评估成本。我们使用JIT编译作为不满足修剪分类的操作的附加优化策略。
    为了减少解释器开销,通过将连续的非rune候选操作分组来简化函数组合树。每个操作序列被合并或“融合”在一起,形成单个功能或“操作组”,只需要执行一条解释器指令。能够修剪函数合成树的操作与操作组无关,以保留函数合成树所有可能的局部约简。2从方程中演示了构成单位圆盘定义函数的代数运算(1)可以打包成一个新的函数来替换图中合成的代数函数树1.
    图3。
    图3一种函数组合树,表示代数运算已合并到单个节点中的单位圆盘。而不是使用图中所示的几个函数定义磁盘1JIT编译允许使用一个将所有代数运算组合在一起的函数来表示定义函数。这减少了合成树中的函数数,使解释器能够更快地进行计算。
    通过遍历函数组合树并递归地将父节点与其子节点合并,操作组通过几何内核自动生成,如算法中所述1。完全遍历函数组合树后,将对每个操作组应用额外的优化过程,其中标识重复表达式和中间值以供重用,并将其存储在插槽中的本地。应该注意的是,我们并没有直接实现这个步骤,而是利用CUDA编译器来处理值重用标识。相反,我们对每个操作组子图进行拓扑排序,并使用静态单一赋值存储值。然后,编译器在解释器编译期间生成优化的代码。
    清单1显示了应用于\(f_{\textrm{disk}}\)图中的操作组2由于第节中解释的原因3.6,重复表达式的标识仅限于操作组,不适用于整个函数组合树。
    清单1。
    清单1的.C++实现\(f_{\textrm{disk}}\)几何内核生成的操作组。使用静态单一赋值,以便CUDA编译器能够进一步优化操作组实现。

    3.3操作编码

    为了便于构建函数组合树的CPU和评估函数组合树的GPU解释器之间的通信,我们为函数组合树的每个节点分配一个操作标识符或“操作码”,解释器使用它来获得对相关函数的引用。内置操作集被指定为操作码,这些操作码索引到固定的函数表中。对于操作组,几何内核将操作码分配到动态生成的JIT函数表中。

    3.4编译流程

    除了操作码生成之外,我们还向解释器注册新构造的操作组,以便在GPU上求值期间编译它们以供使用。我们使用NVRTC(NVIDIA的运行时编译库[Cook2013]. NVRTC生产并行线程执行(PTX)由CUDA链接器加载以生成CUDA模块的文件。每次定义新的操作组时,必须重新编译模块以更新JIT功能表。在编译管道的几个级别上都使用了缓存,以防止不必要的编译,并使重新编译尽可能快。编译被推迟到解释器执行之前,以避免在引入多个新函数时重复编译。

    3.5修剪

    编译解释器后,我们将函数组合树移动到GPU。最后的预处理步骤应用于定义函数,其中省略或“修剪”了对几何体的局部区域没有影响的函数合成树的分支。修剪生成局部简化的功能合成树,保留模型几何结构,同时避免不必要的功能评估。由于合成树中的函数通常只影响局部区域中的几何体,因此有必要避免在有助于定义几何体的区域之外对组件函数进行不必要的求值。在没有修剪的情况下,添加新的局部特征会使函数组合树在全局上的评估成本更高,并且可能会花费大量的计算时间来评估组合树中对局部几何结构没有贡献的函数。
    GPU解释器的剪枝组件通过使用区间算术(IA)[Moore1966; Moore等人。2009],这项技术最初是为了跟踪实数的有限精度浮点表示中固有的错误而开发的。IA涉及将函数从对实际输入的操作扩展到对表示实数集的区间的操作。通用间隔\({x}\)定义为:
    \(\begin{方程式}\hat{x}=(\bar{x},\bar{x})\;\textrm{where}\;\lbrace x\in\mathbb{R}\;|\;\bar{x}\lex\le\bar{x{rbrace\end{方程式}\)
    (2)
    间隔延长,\({f}\),实际函数的(f),满足以下条件:
    \(从{方程式}开始\lbrace f(x)\in \hat{f}(hat{x})\;\所有\;x\in\hat{x}\rbrace\end{equation}\)
    (3)
    间隔延长(IE)对区间进行运算,并返回一个区间,该区间的范围包含输入区间中任何实数的实数函数的所有可能输出值。我们使用IA通过识别函数合成树中对给定子区域中模型几何结构没有贡献的组件来启用修剪[Keeter2020].
    剪枝是在评估模型定义函数的IE时执行的,我们通过替换每个函数生成该定义函数,\(f_n\),包括函数组合树及其IE,\(\帽子{f} _n(n)\)。我们构建了自己的IA库,该库使用CUDA中提供的一套舍入控制浮点内部函数来定义标准数学运算的IE。一点,\(\boldsymbol{p}=\lbrace x,y,z\rbrace\),提供给定义函数的输入也被替换为通过坐标间隔表示的轴对齐框,\(\boldsymbol{\hat{p}}=\lbrace\hat{x},\hat}y},\ hat{z}\rbrace\)当遍历函数组合树时,在包含被指定为“可修剪候选”的操作的任何节点处启动修剪树的尝试。如果在几何内核中指定了“修剪函数”,则属于内置解释器操作固定集的任何二进制函数都被分类为修剪的候选函数。剪枝函数指定二进制函数的间隔输入之一不能对输出作出贡献的标准。当剪枝函数成功识别出一个输入没有贡献时,可以省略产生非贡献间隔的函数组合树的分支,而无需修改间隔区域内的结果几何体\(\boldsymbol{\hat{p}}\)。然后,在计算\(\boldsymbol{\hat{p}}\).
    在CSG的F-Rep实现中,修剪最直接的候选者是min和max,它们分别实现并集和交集。与min和max关联的剪枝函数能够通过检查不相交的输入间隔来识别函数组合树的非分布组件(算法2). 图中提供了一个使用颜色编码来演示修剪后的函数组合树如何在模型中显示自己的示例模型的定义函数由单个剪枝候选函数组成,\(f_{\textrm{min}}\),它将一个球体和一个块组合在一起,生成一个功能组合树,总共有三个修剪树排列。模型上的每种颜色都对应于三种修剪树排列中的一种。第一个修剪后的配置(以绿色显示)显示在球体和块之间的界面上。在此区域中,输入间隔提供给\(f_{\textrm{min}}\)在树木修剪过程中没有脱节,这表明\(f_{\textrm{sphere}}\)\(f_{\textrm{block}}\)能够对模型的几何结构做出贡献。在此区域中进行修剪会生成一个没有省略操作的函数组合树,定义函数的求值需要遍历完整的未修剪树。在模型的红色和蓝色区域中,输入间隔为\(f_{\textrm{min}}\)是不相交的,生成具有删除分支的修剪函数合成树。模型的红色区域表示修剪过的树,省略了\(f_{\textrm{sphere}}\)而蓝色区域省略\(f_{\textrm{block}}\).
    图4。
    图4基于修剪后的函数合成树的颜色编码,对F-Rep模型进行着色渲染。每种颜色表示分配给用于存储模型的稀疏卷结构的叶节点的唯一修剪树配置。共有三种修剪树排列:\(f_{\textrm{sphere}}\)修剪(红色),\(f_{\textrm{block}}\)修剪(蓝色),不修剪(绿色)。\(f_{\textrm{block}}\)\(f_{\textrm{sphere}}\)每个表示分别包含块和球体的定义函数的操作分组,而\(f_{\textrm{min}}\)通过min函数定义联合操作。
    我们将支持的可修剪候选函数列表扩展到Keeter几何内核中的最小和最大操作之外[2020]通过包含用于加法、减法、乘法和除法的剪枝函数。包含代数运算也促使我们支持引入用户控制来选择性地禁用修剪候选。虽然通常需要修剪最小和最大输入,但代数函数在识别非分布输入时需要更严格的标准,并且通常不会导致成功修剪输入。例如,加法需要一个输入被严格限制到\((0,0)\)进行修剪。然而,有许多建模操作,如放样,通常以已知的满足此类代数修剪标准的间隔进行。用户控制的操作可修剪性禁用允许在操作预期产生修剪输出的情况下应用修剪优化,并且在不太可能识别非分发间隔时,解释器不必调用prune函数。几何内核还可以自由地将不再可修剪的操作合并到操作组中,从而进一步简化了函数组合树。

    3.6评估

    评估模型的定义函数或IE都涉及遍历函数组合树。向量值输入\(\粗体符号{p}\),向解释器提供指定三维区域或空间中的点以开始评估。通过区间表示的区域描述了应评估IE的轴对齐体积。另一方面,点定义了应该计算定义函数的位置。的输入类型\(\粗体符号{p}\)控制是否加载标量或IE函数表,指示是否计算定义函数或其IE。给一分\(\粗体符号{p}\),解释器的主执行循环(算法)使用自顶向下的方法遍历功能组合树,在下降和上升之间交替,直到访问了每个节点(算法4和5)。与内部节点相关联的函数在访问了它们的子节点之后被评估,而叶节点在到达时被执行(算法6和7)。遍历树时产生的中间值存储在基于堆栈的内存系统中;叶节点求值将新值推送到堆栈上,而内部节点求值都从中弹出旧值,并将新值推入堆栈。定义函数的求值和它的IE之间的本质区别在Algorithm中6,其中我们调用与可修剪候选操作关联的修剪函数,该操作可以导致输入分支的修剪。
    作为定义函数IE的输入提供的每个区域都可能有一个不同的修剪函数组合树。最小化修剪树的内存消耗是至关重要的,因为我们主要关心的是包含许多区域的大卷,在这些区域上可能会生成大量修剪树。为了避免过度的内存利用,我们将局部优化的树存储在一个紧凑的表示中,不需要生成初始函数组合树的副本。成功修剪的分支被编码为遍历决策,在随后的求值过程中用于跳过定义函数的无关组件。每个剪枝决策都存储为两个位,即“剪枝位”和“选择位”。活动剪枝位指定树的一个分支已被剪枝,而选择位确定剪枝时的遍历方向。在评估定义函数的IE期间,当遇到具有非活动修剪位的可修剪候选操作时,评估其修剪函数。如果确定函数的任一输入都不起作用,则与可修剪操作相关联的修剪和选择位将被更新,并在随后的访问中用于直接遍历,跳过修剪的分支(算法46). 每个剪枝和选择位对构成一个单一的剪枝决策,当与所有其他剪枝和选项位组合时,形成一个表示剪枝函数组合树的位掩码。位掩码是一种紧凑而轻量级的表示,允许以最小的内存开销存储数百万个修剪过的树副本(与许多空间子域相关)。基于位掩码的方法通过仅维护可由所有GPU线程高效缓存和访问的函数组合树的单个副本,帮助最大化内存访问速度。
    我们需要最小化修剪树内存使用量,这也使得很难将基于插槽的值重用优化应用于整个函数组合树,这种优化在操作组内和Keeter的早期工作中使用。包含分支修剪的基于插槽的方法出现了复杂性;随着分支被修剪,槽可能会变得不活动。必须为每个修剪树更新和维护与每个操作读取和写入的插槽相关的信息。即使在存储少量修剪过的树木时,此信息也会变得非常昂贵。虽然实现上的差异阻止了修剪树表示法和Keeter表示法之间的直接比较,但可以通过估计来说明我们的方法节省的内存。例如,Keeter使用Hazel Fraticelli和Anthony Taconi提供的熊头模型对他的几何内核进行基准测试,该模型的定义函数包含541个术语,其中27个是CSG操作。Keeter以64个块为单位分配修剪后的树节点,总计512字节(每个节点8个字节)。如果每个修剪树都被缩减为单个64节点块,那么单个修剪树的内存消耗下限是512字节。我们的修剪树位掩码表示需要每个CSG操作2位,每个修剪树总共8个字节,占用的内存至少少64倍。储存\(1,\!000,\!000\)使用Keeter的几何内核,唯一的修剪树需要512MB到4.5GB的内存,而我们的实现只需要8MB。
    我们的解决方案不是使用基于插槽的内存系统,而是实现本节中详细介绍的混合方案。堆栈用于存储在遍历函数组合树期间生成的输出,而槽则在操作组的范围内使用,以保持对值重用的支持。可修剪的候选操作被排除在操作组之外,从而防止了分支之间的值重用,从而在修剪分支时不影响操作组中的槽。混合实现允许价值重用,而无需跟踪插槽相关信息所需的开销。

    4稀疏卷数据结构

    4.1数据布局

    为了管理高分辨率模型,我们使用空间细分方法以紧凑且可访问的形式存储解释器生成的函数值和修剪的函数组合树\(N^3\)-从OpenVDB和GVDB的内存池系统构建的树稀疏卷数据结构2013; 赫茨莱因2016]. The design of the\(N^3\)-树由多个级别的节点组成,形成网格层次结构。细分系数,N个层次结构的可配置方式与OpenVDB和GVDB基本相同;目标树拓扑配置被指定为表示日志的值向量\(_2\)每个网格级别的分辨率。例如,配置\(\mathinner{\langle{4,3,2}\langle})对应于一个三级树,其中每个叶砖包含\((2^4)^3\)体素,内部节点包含\((2^3)^3\)叶节点子节点和顶级节点包含\((2^2)^3\)内部节点子级。生成的稀疏网格最多支持\(512^3\)体素。
    我们存储\(N^3\)-通过使用提供访问\(N^3\)-CPU和GPU上的树数据。Museth和Hoetzlein观察到,虽然节点数据和分辨率在网格级别之间有所不同,但特定级别的节点的划分是类似的。因此,我们在每个树深度级别分配一个“池组”,负责存储节点数据(图4). 池组被组织为具有相同数量元素的单个池。池组中的每个池描述所有节点的数据集合或“属性”,而可以通过索引访问每个池的条目,以获取单个节点的所有属性。通过内存池和节点属性进行组织提供了一种高度可配置的树表示方法。
    图5。
    图5.我们的数据和拓扑布局的可视化表示\(N^3\)-树稀疏数据结构。树的每个深度级别都有一个关联的池组,用于存储树上的信息。池组被划分为各个池,每个池为给定深度级别的所有节点存储一组数据或“属性”。可以通过索引访问每个池,以获取属性的特定于节点的副本。树的根深度由单个节点组成,而内部和叶深度可以包含多个节点。除了描述拓扑布局的池组之外,还沿叶深度分配了一个包含存储解释器输出的体素块的几何池组。几何池组分为多个通道,每个通道描述给定体素位置的单个值。叶节点保留几何体池组中的体素块,以存储解释器根据节点在空间中的位置生成的模型信息。
    我们的默认配置\(N^3\)-树由在每个深度级别分配的主池组组成。此主池组称为拓扑池组,因为它存储分层网格的连接信息。拓扑池组由三个属性组成;节点,儿童,以及几何形状(图5). 这个节点酒店的主要责任是维护以下相关信息:
    图6。
    图6。每个数据结构都定义了一个属性,用于表示\(N^3\)树。的价值N个儿童属性表示日志\(_2\)拓扑配置中指定的给定树深度级别的子级数。
    深度:节点所属的拓扑池组
    拓扑_idx:节点在其拓扑池组中的位置
    起源:节点父节点的topology_idx,位于池组中深度级别更高的位置
    起源:稀疏网格中节点的空间位置
    一起,深度拓扑_idx形成一个值对,在树中唯一地定义一个节点。
    这个儿童,以及几何形状属性跟踪与深度相关的信息。位于叶深度以外深度的拓扑池组存储儿童属性,维护每个节点的子节点的信息。这个儿童属性定义了一个位掩码,用于跟踪活动子级,以及一个索引,用于存储拓扑池组中第一个活动子级在较低一个深度级别中的位置。期间\(N^3\)-树结构,节点的子节点在单个批中分配,以便它们在内存中是连续的。可以通过添加来访问子节点儿童_idx到中所有活动位的总和儿童任务(_M)达到所需子节点的位置。
    \(N^3\)-树,细分将以其全分辨率与网格相关联。节点子节点被替换为模型定义函数的解释器求值生成的函数值,在叶节点跨越的每个网格位置采样。样本函数值表示模型几何体,并存储在小组体素或“体素块”中,其中包含的元素数量等于叶深度细分因子。这个儿童属性替换为几何形状属性来跟踪叶节点体素块所有权。体素块保存在一个单独的池组中,称为几何池组,该组沿着叶深度拓扑池组进行分配。几何池组中的单个池被称为通道,我们从GVDB中采用的术语,包含体素块,用于存储描述单个属性的信息(例如,表示模型几何体的函数值)。这个几何形状属性包含索引,几何_idx,指向表示体素块的节点所有权的几何池组。当体素块被指定给节点时,我们通过解释器更新内容。此外\(N ^3\)-通过分配额外的几何池组并包括几何形状属性与叶深度以外的深度级别并排。

    4.2施工

    \(N^3\)-树的构建涉及到识别和有选择地激活树中包含模型几何体的节点。我们表示活动集\(N ^3\)-与模型相交的树节点作为模型的拓扑。为了获得模型与节点的交点,我们必须确定定义函数的表面层集是否与节点相交(即,多维等价于寻根问题)。由于相关的计算成本,获得模型节点交点的过程在历史上限制了稀疏体积结构的使用。传统方法涉及评估大多数网格和激活区域,这些区域包含定义曲面的级别集的某些用户定义范围内的网格值,对于大型网格来说,这是一个计算困难的过程。
    回想一下,函数IE返回的间隔包含输入间隔中任何实值的实数函数的所有可能输出值。我们利用IA的这个属性来确定\(N^3\)-树使用模型定义函数的IE。输出间隔,\({F}\)由定义函数的IE求值生成,包含输入间隔区域内定义函数的所有可能实值\(\boldsymbol{\hat{p}}\).的间隔范围\({F}\)然后确定区域\(\boldsymbol{\hat{p}}\)可能包含模型几何图形。
    要构建\(N^3\)-我们在GPU上实现了一个递归算法,该算法利用解释器和模型定义函数同时修剪函数组合树并确定活动节点\(N ^3\)-树(算法8). 我们的算法,构造拓扑的根节点上进行初始操作\(N^3\)-树。对于每个潜在的子节点,在GPU上创建一个线程,以使用解释器评估定义函数的IE。对拓扑节点的子节点的求值发生在GPU上的单个线程块中,以便块中的所有线程在相同的修剪函数组合树上迭代,从而消除线程分歧。输入\(\boldsymbol{\hat{p}}\)每个线程提供给解释器的对应于一个轴对齐的框,该框由覆盖子节点所占区域的间隔定义。评价\(\hat{F}=\ hat{F}(\boldsymbol{\hat}p})\)允许对子节点进行完整分类。根据输出间隔结果生成三种可能结果之一:
    \(0\lt\) \(\,\那{F}\):子节点完全位于模型外部,不需要分配。
    \(0\in\hat{F}\):子节点不能分类为模型的完全内部或外部。它可能包含模型的一部分,因此需要进一步细分。
    \(0\gt\) \({F}\):子节点完全位于模型内部。如果是动态拓扑,请参阅第节4.3,然后将节点标记为动态,以便稍后根据需要进行构造。否则,将细分节点以进一步解析网格。
    在必须细分网格的每种情况下,递归调用构造拓扑将根节点输入替换为新构造的子节点。父节点的间隔范围被细分,使得每个子节点间隔都是其父节点的子间隔,从而允许在计算期间使用父节点的修剪后的函数合成树输出来代替非运行的函数合成树状结构。重复细分,直到达到最大深度或所有子级都已完全分类。基于位掩码的剪枝树表示的最小内存占用允许在拓扑构造期间生成的所有剪枝树通过向\(N^3\)-存储每个位掩码的树。此外\({F}\)在每个\(N ^3\)-树节点,用于区分模型内部的节点和可能包含模型曲面一部分的节点。
    一旦确定了模型拓扑,将在活动状态下按需评估模型几何体\(N^3\)-树叶节点。当请求网格中的值时,将进行体素块指定和几何体求值。这个\(N^3\)-包含所需网格值的树叶节点保留一个体素块,并使用解释器更新块内容。使用与节点跨越的区域相关联的修剪函数组合树来代替未修剪的树,以减少计算时间。当活动叶节点的数量小于或等于几何体池组大小时,可以为每个叶节点指定一个唯一的体素块。在叶节点数超过几何池组容量的情况下,体素块从中的几何池组中获取最近最少使用(LRU)时尚。通过使用解释器按需评估几何体,我们将稀疏网格的内存占用空间减少为仅网格拓扑的内存占用。

    4.3动态节点

    我们的\(N^3\)-树结构有选择地使用我们引入的“动态节点”,通过分配和构造大量的\(N^3\)-动态树。大致填满由\(N^3\)-树占据了接近整个卷的位置,导致几乎每个节点都位于\(N^3\)-正在分配的树。在这种情况下,模型内部的节点占总节点分配的大多数。因此,处理“内部节点”(完全位于模型内部的节点)有可能大大减少存储模型拓扑的内存需求。一些稀疏网格结构(包括OpenVDB和GVDB)支持内部节点表示的替代方法。其中一种方法是用一个常量值替换内部节点子节点,假定该常量值适用于节点跨越的所有网格条目,这表明不应进一步细分网格。另一种策略是完全忽略内部节点分配,只为与模型的窄带表面级别集相交的节点分配内存。在与渲染相关的应用程序中,这些方法通常令人满意,因为重点是模型的曲面几何体。在其他应用程序(如CAD)中,模型中的功能值可能非常重要,因此需要在模型内部完全解析网格。
    现有的内部节点表示无法在不牺牲网格分辨率的情况下减少拓扑内存需求。我们处理内部节点分配问题的解决方案是实现动态节点,这为通过动态构建模型拓扑来完全解决网格问题提供了一种手段。为了适应动态节点,拓扑池组包括\(N^3\)-树的初始大小仅适合非动态或“静态”节点(即不能分类为完全内部或外部的节点),并通过用户控制的值进行扩展,D类,表示动态节点的新节点。每个拓扑池组都添加了一个附加属性,以跟踪动态子节点以及动态节点所有权。
    期间\(N^3\)-树组件,当启用动态拓扑时,被确定为模型几何体内部的节点将被分类为动态节点,并且不会进一步细分。新添加的动态属性包含一个位掩码,该位掩码使用集合位来指示子节点的动态状态。一旦\(N^3\)-构建树时,如果请求的子节点对应于父节点动态位掩码中的活动条目,则父节点保留一个分配的动态节点,将动态节点设置为其子节点,并记录节点索引以反映动态节点所有权。在每个深度级别重复此过程,直到构建动态叶节点,然后可以为其指定一个体素块,由解释器进行评估。结果是一个“动态分支”,它从第一个非动态父节点向下延伸到叶节点,并保持活动状态,直到动态分支中的任何动态节点重新分配给另一个动态分支。通过调整D类,可以直接控制内部节点分配。设置D类到零完全消除了内部节点分配,这在不需要模型内网格值的情况下很有用(例如,渲染模型表面时)。这将生成具有与现有替代内部节点表示类似的内存占用的拓扑。在需要内部节点的情况下,可以相应地设置所分配的动态节点数。

    4.4可视化

    我们使用光线投射渲染算法显示模型,该算法利用层次3D数字微分分析仪由Museth开发[2014]后来由Hoetzlein改编为GPU。我们将渲染过程分为两个阶段,重复这两个阶段直到每条光线与模型相交或退出\(N ^3\)-树。我们还分配了一个节点缓冲区和一个光线缓冲区来跟踪过程之间的光线信息。节点缓冲区存储拓扑_idx叶节点的值,而距离缓冲区保留沿每条光线移动的总距离信息。
    第一个渲染阶段涉及确定光线模型交点。首先,测试光线与\(N^3\)-树。找到的任何交点都会导致遍历\(N^3\)-树,直到找到叶节点或树退出。成功的叶节点交集将遍历叶节点的体素几何体块。我们只假设\(C^0\)模型定义函数的连续性,并使用统一的步长穿过体素块。插值用于在沿射线的点处估计定义函数的值,直到退出砖或找到射线-曲面交点。出于着色目的,曲面法线是通过计算相交点处函数的梯度来确定的(例如,使用有限差分)。在定义函数的类有限的情况下,例如对于有符号距离函数,可以将球体跟踪等技术集成到DDA中,以动态设置体素步长以提高性能。
    在遍历过程中,遇到尚未分配体素块的活动叶节点会导致光线停止遍历并记录当前光线距离和叶节点拓扑_idx在距离和节点缓冲区中。为了防止节点多次添加到节点缓冲区,在旗帜的属性节点属性,在尝试记录节点之前进行检查和原子设置。如果节点缓冲区在第一个阶段完成后包含非零数量的条目,则会触发第二个渲染阶段,这表示活动叶节点被击中,但尚未指定几何体。未指定的体素块,或属于在第一阶段已遍历的节点的体素砖,被指定给节点缓冲区中记录的节点。解释器更新新指定的体素块的内容,并重置节点标志。因为解释器是在GPU上实现的,所以块可以直接在GPU中更新,避免了CPU和GPU之间的昂贵内存传输。重复第一阶段,每条光线使用记录在距离缓冲区中的值从停止的位置恢复遍历。重复这两个渲染阶段,直到第一阶段结束,节点缓冲区为空,表示渲染已完成。因为几何体是按需求值的,并且求值是由光线模型交点通知的,所以只有可见的\(N^3\)-树节点更新了其体素块内容,减少了查看大型模型时的总评估开销。

    4.5切片分解

    模型切片分解或“切片”是将模型分解为3D打印机可以解释的表示形式的过程,以便制造模型的物理副本。对于高分辨率体积模型,基于光栅的打印过程通常用作制造方法,并将与模型的水平切片相对应的图像堆栈作为输入。我们框架中的模型切片是通过\(N^3\)-树,由两个步骤组成。第一步涉及对活动项进行迭代\(N^3\)-树叶节点并将沿特定z高度的所有体素收集到切片缓冲区中。与可视化类似,所有尚未指定几何体的叶节点都将从几何体池组中指定体素块,在提取其体素内容之前使用解释器进行更新。第二步也是最后一步是将切片缓冲区从GPU移动到CPU,缓冲区在CPU中保存为图像。通过引入第三步,可以将支持扩展到基于矢量的打印机,该步骤从切片缓冲区提取定义模型曲面的水平轮廓。
    基于光栅的加法制造系统沿笛卡尔轴的打印机分辨率通常不相同,例如Stratasys J750 PolyJet 3D打印机的x和y分辨率为42微米,而其z轴的分辨率为14微米。为了适应不同分辨率的轴,我们实现了特定于坐标的网格间距,以支持对非立方体素的采样。定义函数及其IE的求值保持不变,更改的只是值第页提供给口译员作为输入。由于打印机沿每个轴缩放,生成的切片图像会发生扭曲,但打印时会恢复原始几何图形。

    4.6散装特性

    模型的物理特性(如重心)对于验证模型设计的各个方面很有用。计算这些属性需要集成模型的几何体。我们使用Yurtoglu等人提出的方法评估体积积分、曲面积分和线积分[2018]一种对规则网格上采样的函数值数组进行操作的积分方法。积分贡献来自应用于每个网格点的模板计算。非零贡献发生在模具跨越定义模型曲面的级别集的位置。IA在构建模型拓扑期间提供的节点分类允许对不包含模型表面的拓扑节点进行有效过滤。只计算产生非零积分贡献的节点。

    5个结果

    等待数分钟到数小时来构建和查看模型会对生产率产生严重的负面影响。生产力方面的考虑重点不仅在于支持大规模体积模型,还在于以合理的速度支持设计师和工程师通常使用的计算硬件。为了验证几何内核的响应性,我们用两种方法描述了其性能。首先,我们将几何核与Keeter中的核进行比较[2020],当时是libfive[Keeter的最先进的GPU实现2019]是CAD软件nTopology中用作内核基础的库。通过涉及复杂模型的基于渲染的工作负载进行比较。其次,我们在标准的附加制造工作负载下对几何内核进行基准测试,该工作负载包括生成高分辨率模型的光栅切片数据。除了基准测试外,我们还利用我们的切片管道来生成我们使用3D打印机制造的木螺钉的切片堆栈数据。下面的所有讨论和表格都描述了两种系统上的性能:配备GTX 1650-Max Q GPU和Intel i7-1065G7 CPU的低端笔记本电脑,以及包含RTX 3090和Intel i7-21700K的高端台式电脑。选择这些系统是为了说明几何内核在硬件上的能力,这些硬件对应于计算能力谱中分离良好的部分。

    5.1性能比较

    由于几何内核实现中的实质性差异,很难直接比较我们的内核和Keeter提出的内核的各个组件。Keeter的内核实现要求每帧重新评估模型的间隔修剪和几何评估,并使用屏幕对齐和正交坐标系,该坐标系将模型分辨率直接与屏幕分辨率联系在一起(例如\(2048^3\)模型卷需要\(2048^2\)屏幕分辨率)。在我们的内核实现中\(N^3\)-树存储了修剪信息以及模型几何体,因此无需对每帧执行这些属性的评估。这个\(N^3\)-树在渲染开始之前构建一次,并根据需要计算几何体并将其存储在\(N^3\)-树。此外,我们的渲染方法允许固定维度的屏幕渲染任何分辨率的模型。这个\(N^3\)-树还支持高级渲染技术,如细节级别控制,当几何体素块接近像素大小时,该技术可以显著提高高分辨率模型的性能。考虑到这些巨大的差异,我们使用以最大分辨率渲染模型的帧速率作为比较的指标,因为它最能量化每个几何体内核的端到端性能。
    桌子1,2,以及包含三种不同模型的性能指标,如图所示7,来自[Keeter2020]使用基特和我们的几何核。由于最小和最大函数的数量较少,熊头模型支持有限的修剪,这使其成为JIT优化的良好候选对象。齿轮和结构模型包含大量的最小和最大函数,限制了JIT优化。内核的结果显示在表标题“FVD”(基于功能的体积设计)下,而Keeter的结果包含在“MPR”(大规模并行渲染)收割台。我们包括每个几何内核的结果,直到GPU耗尽内存或生成低于每秒一帧的帧速率(用破折号表示)。
    表1。
    表1.在不同网格尺寸和拓扑结构上呈现熊头模型的基准结果
    表2。
    表2.呈现齿轮模型的基准结果
    表3。
    表3.呈现架构(Architecture)模型的基准测试结果
    图7。
    图7.使用我们的几何内核设计和可视化的F-Rep木螺钉的渲染。顶行显示了基于简单漫反射照明模型的着色渲染的木螺钉的两个视图。底部行中的图像显示了木螺钉的相同视图,但基于修剪后的函数合成树的颜色编码进行了着色。螺钉上的每个彩色区域对应于属于\(N ^3\)-树叶节点。颜色是通过将节点修剪树的位转换为单个整数生成的,并将该整数缩放到范围\([0, 1]\),并将该范围映射到HSV颜色空间。修剪树中较早出现的修剪位与树中较晚出现的修剪位相比较,会导致较大的颜色差异,因为它们占据了生成整数值的更有效位。
    图8。
    图8.[Keeter的熊头、装备和架构模型2020]用于对我们的几何内核进行基准测试。
    1包括对各种拓扑配置的广泛参数扫描,以表征模型拓扑对渲染性能和拓扑构造的影响,而其余表格仅提供了更简明的结果,其中仅涵盖了拓扑配置,该拓扑配置可为给定的网格大小产生最优的渲染性能。表中的“配置”标题1详细说明拓扑配置、活动数量\(N^3\)-树叶节点,以及指定模型所占密集网格百分比的占用率。为了获得稀疏网格中包含的活动体素元素的数量,可以将网格大小乘以占用率。对于我们的几何内核,除了帧速率之外,我们还包括计时结果,这些结果详细说明了第一个渲染帧所需的额外工作。特别是,我们给出了稀疏网格构建的计时结果,以及可见几何体的识别和评估。最后,我们的内核的所有渲染结果都是使用固定屏幕大小确定的\(1280乘以720).
    比较几何内核之间的帧速率结果表明,我们的内核在三个模型中的每一个模型上都优于Keeter的,渲染改进超过\(10次)我们还能够以以前无法实现的网格大小以交互速率可视化模型。几何内核渲染性能的变化很大程度上是由于几何池容量和\(N^3\)-树拓扑结构,将在以下两段中详细讨论。
    几何体池容量决定了可以存储并用于多个渲染帧的几何体块的数量。尚未指定几何体的拓扑节点会阻止光线通过\(N^3\)-树,要求解释器评估新的几何体,并在几何体更新后再次遍历树,如第节所述4.4。“遍历”和“评估”表列下提供了与此过程相关的计时。最小化树遍历过程的数量是实现最佳帧速率的关键。可见几何体与几何体池容量的比率最好小于或等于1,以便在一次通过中实现完整的树遍历。当使用我们的内核渲染三个模型中的每一个时,帧速率下降到每秒一帧以下是由于可见几何体超过了分配的几何体池容量(以及每个GPU的总内存容量)。每一帧都需要对所有可见几何体进行几乎完全的重新评估,这大大降低了性能。
    这个\(N^3\)-树拓扑配置指定网格的空间细分,以及底层网格的分区方式。改变\(N^3\)-树拓扑改变了3D DDA遍历时间以及几何体素块维度。当在表中查看给定网格大小的叶深拓扑配置的变化时1帧速率计时的下降趋势表明,较小的叶节点大小支持更快速的渲染。较大的叶节点对应较大的几何体块和增加的网格占用。在渲染过程中相交时,较大的几何体块的遍历成本也更高,并且由于需要更多内存,因此限制了几何体池块的分配。相反,较小的叶节点会增加总数\(N^3\)-树节点计数,提高了模型拓扑内存需求。\(N^3\)-每个表的“构建”列下显示的树构建时间也随着叶节点大小的减小而增加,因为必须在更多的节点区域上评估模型定义函数的IE。因此,最佳拓扑配置取决于应用程序,较小的叶节点更有利于渲染,较大的叶节点更利于树的构建。应该注意的是,我们不提供不同内部节点拓扑配置的渲染结果。我们使用来自GVDB的3D DDA算法,Hoetzlein[Hoetzelin讨论了内部节点大小变化如何影响帧速率的度量2016]. 我们同意以下结论:内部节点配置的顺序为\(N=3\)提供最佳结果。

    5.2模型切片

    衡量几何内核性能的第二个指标是通过第节中描述的模型切片过程4.5为了证明切片管道的有效性并描述其如何随网格大小缩放,我们设计并切片了一个木螺旋模型,如图所示6.表4介绍了螺旋模型在几种拓扑配置和越来越大的网格尺寸上的切片性能指标。“Evaluation”列报告评估所有叶节点几何体并将几何体提取到切片缓冲区所用的时间,而“GPU to CPU”列报告将切片缓冲区从GPU移动到CPU所需的时间。总切片时间是通过将两列相加得到的。
    表4。
    网格拓扑结构#个节点(共个)节点占用。评估CPU到GPU
    静态动态1650309016503090
    \(128^2乘以512)\(\mathinner{\langle{3,3,3}\langle}\quad\)4,5871,16835%0.1300.0550.0860.023
    \(\mathinner{langle{4,3,2}\rangle}\quad\)1, 1704859%0.0660.032
    \(\mathinner{\langle{5,3,1}\rangle}\quad\)228089%0.0650.032
    \(256^2乘以1024)\(\mathinner{\langle{3,3,1}\rangle}\)17,31113, 06823%0.3900.1200.2200.085
    \(\mathinner{langle{4,3,3}\rangle}\quad\)4,5871,16835%0.1900.065
    \(\mathinner{\langle{5,3,2}\rangle}\quad\)1, 1704859%0.1400.055
    \(512^2乘以2048)\(\mathinner{\langle{3,3,2}\rangle}\)67,329122,10718%1.3000.4501.2000.409
    \(\mathinner{langle{4,3,3,1}\rangle}\)17,31113,06823%0.4700.160
    \(\mathinner{\langle{5,3,3}\rangle}\quad\)4,5871,16835%0.3200.120
    \(1024^2\乘以4096\)\(\mathinner{\langle{3,3,3}\rangle}\)265, 8671,054,30616%3.9001.7007.5002.900
    \(\mathinner{langle{4,3,3,2}\rangle}\)67,329122,10718%2.1000.780
    \(\数学内部{\langle{5,3,1}\langle}\)17,31113,06823%1.4000.360
    \(2048^2乘以8192)\(马特林{\langle{3,3,4}\langle})1,056,3198,763,00715%238.4005921
    \(\mathinner{langle{4,3,3}\rangle}\)265,8671,054,30616%123.600
    \(\mathinner{\langle{5,3,3,2}\rangle}\)67,329122,10718%123.700
    表4不同网格尺寸和拓扑结构下木螺钉模型的切片基准结果
    性能是在配备GTX 1650 Max-Q的笔记本电脑和包含GTX 3090的台式机上测量的。包含破折号的表格条目表示由于需要不合理的时间刻度来完成而忽略的结果。
    对于较小的网格大小,评估和填充切片缓冲区占主导地位,而随着网格大小的增加,GPU到CPU的传输时间成为主导因素。对于给定的网格大小,切片评估时间受\(N^3\)-树拓扑,主要是叶节点大小。叶节点几何体块具有体素计数,允许GPU在评估模型的定义函数时实现最大计算吞吐量,从而产生更多最佳计时。这通常对应于较大的叶节点大小。然而,随着叶节点大小的增加,体素网格占用率也会增加,这相当于对模型定义功能的更多总体评估。评估计数和计算吞吐量相互竞争,导致依赖网格大小的最佳拓扑配置。对于总体素数较低的较小栅格尺寸,较大的叶砖尺寸表现得更为有利。随着网格大小的增加,在体素网格占用率和计算吞吐量之间取得平衡的叶节点大小产生最佳计时。对于GTX 1650和RTX 3090,首选配置最初对应于叶节点大小为的配置\((2^5)^3\)但过渡到\((2^4)^3\)以最大网格分辨率。我们还使用切片管道,使用Stratasys J750 PolyJet 3D打印机制作木螺钉,并提供代表性切片堆栈的图像以及图中的成品打印。

    6未来工作

    在这里,我们提出了未来研究的几个方向,重点是几何内核的性能改进。

    6.1拓扑评估

    我们的拓扑构建算法在一次遍历中构建模型的拓扑。然而,在可视化过程中,模型的大部分拓扑可能会被遮挡。理想情况下,只构建可见的拓扑。将我们的视相关几何评估方案扩展到模型拓扑结构,将减少可视化所需的计算和内存需求。依赖于视图的评估也有助于进一步减少修剪树内存需求,因为只有可见的拓扑区域才会生成修剪树数据。

    6.2几何评估

    几何体求值占用了大量的总模型求值时间。我们使用诸如树修剪和视图相关评估等技术来显著降低评估成本。然而,在对定义函数进行任何编辑后,我们将丢弃所有几何图形并从头开始重建模型。在CAD应用程序中常见的频繁修改模型时,采用识别几何图形(在模型编辑之间不会发生变化)的策略将进一步减少所需的计算开销。

    6.3区间界限

    我们使用IA来通知拓扑结构,因此不需要模型几何来确定区域占用率。IA在评估估计中较为保守,导致不包含模型几何结构的虚假拓扑节点分配。用替代技术(例如仿射算法)替换或增强IA,可以提高精度,这将有助于生成更符合模型几何结构的拓扑,从而减少模型评估时间和内存需求。

    7结论

    我们提出了一个F-Rep几何内核,该内核专为大规模体积建模应用而设计,包括大体积、高分辨率CAD和加法制造。建模器由一个新颖的F-Rep GPU解释器和一个稀疏的体积数据结构组成。我们的F-Rep几何内核是在Keeter以前的工作基础上构建的,它以JIT编译的形式提供了改进,增加了函数可修剪性,并减少了存储修剪树的内存占用。我们开发的稀疏体数据结构用于存储解释器输出,并提供可视化和操作高分辨率体数据的方法。此外,我们的几何内核框架在支持GPU的系统(从笔记本电脑到台式机)上表现良好,并且随着GPU计算吞吐量、数据传输速率和内存容量的不断提高,有望进一步提高性能。

    工具书类

    [1]
    米特科·阿列克桑德罗夫(Mitko Aleksandrov)、西西·兹拉塔诺娃(Sisi Zlatanova)和大卫·赫斯洛普(David J.Heslop)。2021.体素化算法和数据结构:综述。传感器21, 24 (2021).
    [2]
    克里斯托夫·巴德(Christoph Bader)、多米尼克·科尔布(Dominik Kolb)、詹姆斯·韦弗(James C.Weaver)、苏南达·夏尔马(Sunanda Sharma)、艾哈迈德·霍斯尼(Ahmed Hosny)、乔安·科斯塔(Joáo Costa)和内里。2018年,让数据变得重要:Voxel打印用于跨尺度和域的数据数字制造。科学进展4, 5 (2018).
    [3]
    Johanna Beyer、Markus Hadwiger和Hanspeter Pfister。2015年,基于GPU的大规模体视化技术处于领先地位。计算。图表。论坛34,8(2015年12月),13-37。
    [4]
    朱尔斯·布卢门撒尔(Jules Bloomenthal)和布莱恩·维维尔(Brian Wyvill)。1997隐式曲面简介摩根·考夫曼出版社,美国加利福尼亚州旧金山。
    [5]
    谢恩·库克(Shane Cook)。2013CUDA编程:使用GPU进行并行计算的开发人员指南(第1版).摩根考夫曼出版公司,美国加利福尼亚州旧金山。
    [6]
    西里尔·克拉辛(Cyril Crassin)、法布里斯·尼雷特(Fabrice Neyret)、西尔万·列斐伏尔(Sylvain Lefebvre)和埃尔玛·艾斯曼(Elmar Eisemann)。2009.GigaVoxels:光线引导流媒体,用于高效和详细的体素渲染。In2009年I3D.
    [7]
    B.R.de Araújo、Daniel S.Lopes、Pauline Jepp、Joaquim A.Jorge和Brian Wyvill。2015年,隐式曲面多边形化调查。ACM计算。Surv公司。第47、4条,第60条(2015年5月),39页。
    [8]
    A.De Cusatis、L.H.De Figueiredo和M.Gattas。1999.使用仿射算法进行光线投射隐式曲面的区间方法。第十二届巴西计算机图形和图像处理研讨会(分类号PR00481). 65–71.
    [9]
    路易斯·恩里克·德菲格雷多(Luiz Henrique de Figueiredo)和豪尔赫·斯托尔菲(Jorge Stolfi)。2004.仿射算法:概念和应用。数值算法37 (2004), 147–158.
    [10]
    汤姆·达夫。1992.隐函数和构造立体几何的区间算术递归细分。SIGGRAPH计算。图表。26,2(1992年7月),131-138。
    [11]
    托马斯·福格尔(Thomas Fogal)、亚历山大·希韦(Alexander Schiewe)和延斯·克鲁格(Jens Krüger)。2013.基于可缩放GPU的光线引导体绘制分析。In2013年IEEE大型数据分析与可视化(LDAV)研讨会.
    [12]
    Oleg Fryazinov和Alexander Pasko。2007.基于GPU的实时FRep射线投射。GraphiCon 2007-国际计算机图形学与视觉会议,会议记录(012007).
    [13]
    埃里克·加林、埃里克·盖林、阿克塞尔·帕里斯和阿德里安·佩塔维。2020年。使用本地Lipschitz边界进行分段跟踪。计算机图形论坛39, 2 (2020), 545–554. arXiv:https://onlinelibrary.wiley.com/doi/pdf/10.111/cgf.13951
    [14]
    D.Ganter和M.Manzke。2019.基于GPU的区域聚类BVH体绘制分析。计算机图形论坛38, 8 (2019), 13–21.arXiv公司:
    [15]
    Enrico Gobbetti、Fabio Marton和JoséIglesias Guitián。2008年。用于大规模体积数据集的交互式堆外渲染的单通道GPU光线投射框架。可视化计算机24 (072008), 797–806.
    [16]
    Jean-David Génevaux、Eric Galin、Adrien Peytavie、Eric Guérin、Cyril Briquet、Francois Grosbellet和Bedrich Benes。2015.基于特征基元的地形建模。计算机图形论坛34 (052015).
    [17]
    约翰·哈特。1995.球体追踪:隐式曲面抗锯齿光线追踪的几何方法。可视化计算机12 (061995).
    [18]
    J.C.Hart、D.J.Sandin和L.H.Kauffman。1989.射线追踪确定性三维分形。SIGGRAPH计算。图表。23,3(1989年7月),289-296。
    [19]
    拉玛·卡尔·霍兹林。2016.GVDB:GPU上的光线追踪稀疏体素数据库结构。Eurographics/ACM SIGGRAPH高性能图形研讨会Ulf Assarsson和Warren Hunt(编辑)。欧洲制图协会。
    [20]
    卡沃什·贾扎尔和保罗·克里。2023.动画隐含的时间集反转。ACM事务处理。图表。42, 4 (82023).
    [21]
    陶菊、弗兰克·洛萨索、斯科特·谢弗和乔·沃伦。2002.Hermite数据的双重等值线。ACM事务处理。图表。21, 3 (2002).
    [22]
    金森义弘、佐尔坦·塞戈和西田智友。2008年。基于GPU的快速射线投射,用于大量变形球。计算机图形论坛27, 2 (2008), 351–360. arXiv:https://onlinelibrary.wiley.com/doi/pdf/10.111/j.1467-8659.2008.01132.x
    [23]
    马修·基特。2019.利比。https://libfive.com网站/
    [24]
    马修·基特。2020年。复杂闭合形式隐式曲面的大规模并行渲染。ACM事务处理。图表。第39、4条,第141条(2020年7月),共10页。
    [25]
    Benjamin Keinert、Henry Schäfer、Johann Korndörfer、Urs Ganse和Marc Stamminger。2014.增强球体追踪。用于图形的智能工具和应用程序-欧洲图形学会意大利分会会议安德烈亚·贾切蒂(编辑)。欧洲制图协会。
    [26]
    Doyub Kim、Minjae Lee和Ken Museth。2022.NeuralVDB:使用层次神经网络的高分辨率稀疏体表示。arXiv:2208.04448【cs.LG】
    [27]
    亚伦·诺尔(Aaron Knoll)、尤尼斯·希贾兹(Younis Hijazi)、查尔斯·汉森(Charles Hansen)、英戈·沃尔德(Ingo Wald)和汉斯·黑根(Hans Hagen)。2007.使用SIMD区间算法对任意隐式进行交互式光线跟踪。2007年IEEE交互式光线追踪研讨会. 11–18.
    [28]
    A.Knoll、Y.Hijazi、A.Kensler、M.Schott、C.Hansen和H.Hagen。2009年a。基于区间和仿射算法的任意隐式曲面的快速光线跟踪。计算机图形论坛28, 1 (2009), 26–40. arXiv:https://onlinelibrary.wiley.com/doi/pdf/10.111/j.1467-8659.2008.01189.x
    [29]
    Aaron Knoll、Ingo Wald和Charles Hansen。2009年b。相干多分辨率等值面射线追踪。可视化计算机25 (072009), 209–225.
    [30]
    Aaron Knoll、Ingo Wald、Steven Parker和Charles Hansen。2006.大型八叉树体的交互式等值面射线追踪。2006年IEEE交互式光线追踪研讨会. 115–124.
    [31]
    J·克鲁格和R·韦斯特曼。2003.基于GPU的体绘制加速技术IEEE可视化,2003年。VIS 2003。287–292.
    [32]
    刘宝全(Baoquan Liu)、戈登·克拉普沃西(Gordon J.Clapworthy)、冯东(Feng Dong)和爱德蒙·普拉卡什(Edmond C.Prakash)。2012.八叉树光栅化:加速高质量的核心外GPU体积渲染。IEEE可视化和计算机图形汇刊(2012).
    [33]
    查尔斯·洛普和吉姆·布林。2006.分段代数曲面的实时GPU渲染。ACM事务处理。图表。25,3(2006年7月),664-670。
    [34]
    乔赛亚·曼森和斯科特·谢弗。2010年。多分辨率网格的单纯形分区上的等值面。计算机图形论坛29, 2 (2010), 377–385. arXiv:https://onlinelibrary.wiley.com/doi/pdf/10.111/j.1467-8659.2009.01607.x
    [35]
    C.枫树。2003年。使用行进方块和行进立方体算法进行几何设计和空间规划。2003年国际几何建模与图形学会议,2003年。诉讼. 90–95.
    [36]
    D.P.Mitchell。1990年。使用区间算法实现稳健射线相交。90年图形界面会议记录(新斯科舍省哈利法克斯)。加拿大信息处理协会,CAN,68-74。
    [37]
    拉蒙·摩尔。1966.区间分析第4卷。普伦蒂斯·霍尔·恩格伍德悬崖。
    [38]
    Ramon E.Moore、R.Baker Kearfott和Michael J.Cloud。2009区间分析简介美国工业和应用数学学会。
    [39]
    肯·穆塞思(Ken Museth)。2013.VDB:具有动态拓扑的高分辨率稀疏卷。ACM事务处理。图表。第32、3条,第27条(2013年7月),共22页。
    [40]
    肯·穆塞思(Ken Museth)。2014.OpenVDB中用于高效射线归档的分层数字差分分析仪。ACM SIGGRAPH 2014年会谈(加拿大温哥华)(SIGGRAPH’14)。美国纽约州纽约市计算机协会,第40条,1页。
    [41]
    肯·穆塞思(Ken Museth)。2021.NanoVDB:一种GPU友好的便携式VDB数据结构,用于实时渲染和模拟。ACM SIGGRAPH 2021年会谈(虚拟活动,美国)(SIGGRAPH’21)。美国纽约州纽约市计算机协会,第1条,共2页。
    [42]
    亚历山大·帕斯科(Alexander Pasko)、瓦列里·阿德日耶夫(Valery Adzhiev)、阿列克谢·苏林(Alexei Sourin)和弗拉基米尔·萨文琴科(Vladimir Savchenko)。1995。几何建模中的函数表示:概念、实现和应用。可视化计算机11 (081995), 429–446.
    [43]
    Alexander Pasko、Oleg Fryazinov、Turlif Vilbrandt、P.A.Fayolle和Valery Adzhiev。2011.基于程序功能的体积微观结构建模。图形模型73 (092011), 165–181.
    [44]
    D.Ruijters和Anna Vilanova。2006.优化GPU卷渲染。InWSCG-计算机制图冬季学校,第14卷。9–16.http://graphics.tudelft.nl/Publications-new/2006/RV06
    [45]
    Dario Seyb、Alec Jacobson、Derek Nowrouzezahrai和Wojciech Jarosz。2019.用于渲染变形符号距离场的非线性球体跟踪。ACM图形事务处理(TOG)38 (2019), 1–12.
    [46]
    Jag Mohan Singh和P.J.Narayanan。2010.GPU上隐式曲面的实时光线跟踪。IEEE可视化和计算机图形汇刊16, 2 (2010), 261–272.
    [47]
    Mete Yurtoglu、Molly Carton和Duane Storti。2018.将所有积分视为体积积分:一种统一、并行、基于网格的方法,用于评估隐式定义域上的体积、曲面和路径积分。工程计算与信息科学杂志18 (032018).
    [48]
    斯特凡·泽尔曼。2019.比较稀疏体绘制的分层数据结构与空白跳跃。ArXiv公司abs/1912.09596(2019)。

    索引术语

    1. 基于功能的交互式高精度体积设计与制造方法

      建议

      评论

      信息和贡献者

      问询处

      发布于

      封面图片ACM图形事务
      ACM图形汇刊 第43卷第1期
      2024年2月
      211页
      国际标准编号:0730-0301
      EISSN公司:1557-7368
      内政部:10.1145/3613512
      期刊目录
      本作品根据Creative Commons Attribution International 4.0许可证授权。

      出版商

      计算机协会

      美国纽约州纽约市

      出版历史

      出版:2023年9月29日
      在线AM:2023年9月7日
      认可的:2023年8月22日
      修订过的:2023年8月19日
      收到:2023年5月5日
      在TOG中发布体积43,发行1

      检查更新

      作者标记

      1. 计算机辅助设计
      2. 添加剂制造
      3. 3D打印
      4. 隐式曲面
      5. FReps公司
      6. 通用分组
      7. CUDA公司

      限定符

      • 研究文章

      贡献者

      其他指标

      文献计量学和引文

      文献计量学

      文章指标

      • 0
        引文总数
      • 1,560
        下载总量
      • 下载次数(过去12个月)1, 560
      • 下载次数(最近6周)139

      其他指标

      引文

      视图选项

      查看选项

      PDF格式

      以PDF文件查看或下载。

      PDF格式

      电子阅读器

      使用联机查看电子阅读器.

      电子阅读器

      获取访问权限

      登录选项

      完全访问权限

      媒体

      数字

      其他

      桌子

      分享

      分享

      共享此出版物链接

      在社交媒体上分享