使用二次误差度量的表面简化
迈克尔加兰? Paul S. Heckbert†
卡内基·梅隆大学
抽象
计算机图形学中的许多应用需要复杂,高度详细的模型。但是,实际需要的细节水平可能差别很大。为了控制处理时间,通常需要使用近似值代替过于详细的模型。我们开发了一种表面简化算法,可以快速生成多边形模型的高质量近似值。该算法使用顶点对的迭代收缩来简化使用二次曲面建模并维护表面误差近似矩阵。通过收缩任意顶点对(不仅仅是边缘),我们的算法能够连接模型的未连接区域。这个可以在视觉上和尊重方面促进更好的近似到几何误差。为了允许拓扑加入,我们的系统还支持非流形表面模型。CR类别:I.3.5 [计算机图形]:计算几何
和对象建模 - 表面和对象表示关键词:表面简化,多分辨率建模,对收缩,细节水平,非流形
1简介
许多计算机图形应用需要复杂,高度详细模型保持令人信服的现实水平。所以,通常以非常高的分辨率创建或获取模型以满足这种细节需求。但是,完全复杂这些模型并不总是需要的,并且自计算以来使用模型的成本与其复杂性直接相关对于复杂模型的简单版本很有用。当然,我们想自动生成这些简化模型。最近表面简化算法的工作重点是这一点目标。
与该领域的大多数其他工作一样,我们将重点放在简化上多边形模型。我们假设模型包含仅三角形。这意味着不会失去一般性,因为每一个原始模型中的多边形可以作为预处理的一部分进行三角剖分相。在角落时实现更可靠的结果两个面相交一点,面应定义为共享单个顶点而不是使用两个单独的顶点在太空中重合。
?garland@cs.cmu.edu; http://www.cs.cmu.edu/?garland/ †ph@cs.cmu.edu; http://www.cs.cmu.edu/?ph/ 我们开发了一种生成简化版本的算法这种多边形模型。我们的算法基于迭代顶点对的收缩(边缘收缩的一般化)。随着算法的进行,几何误差近似保持在当前模型的每个顶点。这个误差近似用二次曲线矩阵表示。主要优点我们的算法是:
?效率:该算法能够简化复杂模型很快例如,我们的实现可以创建一个在15秒内对70,000个面部模型进行100面近似。误差近似也非常紧凑,仅需要每个顶点10个浮点数。
?质量:我们的算法产生的近似值保持原始模型的高保真度。主要特点即使在显着简化之后,模型的保留也是如此。
?一般性:与大多数其他表面简化算法不同,我们能够加入模型的非连接区域在一起,我们称之为聚合的过程。提供维护对象拓扑不是一个重要的问题,这个可以促进更多近似模型与许多断开连接组件。这也需要我们的算法
支持非流形1模型。
2背景和相关工作
多边形表面简化的目标是采用多边形模型作为输入并生成简化模型(即近似值)原始的)作为输出。我们假设输入模型(Mn)已被三角化。目标近似(Mg)将满足一些给定的目标标准,通常是期望的面部计数或最大容许误差。我们对表面感兴趣可用于渲染系统的简化算法多分辨率建模 - 用适当的模型生成模型当前上下文的详细程度。
我们不假设必须维护模型的拓扑。在某些应用领域,例如医学成像,维护对象拓扑可能是必不可少的。但是,在申请中渲染,拓扑等领域不如整体重要出现。我们的算法能够关闭拓扑孔以及连接不连接的区域。许多先前的简化算法具有隐式或显式假设他们的输入表面是,并且应该保留,歧管表面。让我们强调,我们不做这个假设。事实上,聚合过程将定期创建非流形区域。
2.1表面简化
近年来,表面简化的问题越来越多多分辨率建模的一般问题,已经增加关注。已经制定了几种不同的算法简化表面。那些最相关的算法我们的工作大致可分为3类:
顶点抽取。施罗德等人。 [9]描述了一种算法我们将术语顶点抽取。他们的方法迭代选择要删除的顶点,删除所有相邻的面,然后重新三角形由此产生的洞。 Soucy和Laurendeau [10]描述一种更复杂但基本相似的算法。虽然他们提供合理的效率和质量,这些方法并不是真的适合我们的目的。两种方法都使用顶点分类和重新拟合方案本质上限于多方面表面,它们小心地保持了模型的拓扑结构。虽然这些是某些领域的重要功能,但它们是限制性的用于多分辨率渲染系统。
顶点聚类。 Rossignac和Borrel [8]是能够处理任意多边形的少数几个之一输入。边框位于原始模型周围分成一个网格。在每个单元格内,单元格的顶点是聚类的一起到一个顶点,模型面相应地更新。这个过程可以非常快,并且可以做出极大的拓扑对模型的改动。但是,虽然网格的大小单元格确实提供了几何误差界限,输出质量往往很低。另外,难以构造近似具有特定面数,因为面数仅由指定的网格尺寸间接确定。该产生的精确近似也取决于确切的位置和原始模型相对于周围的方向网格。这种统一的方法可以很容易地推广使用自适应网格结构,如八叉树[6]。这可以改善简化结果,但它仍然不支持质量和控制我们想要的。
迭代边收缩。有几种算法发表了通过迭代收缩边来简化模型(参见图1)。这些算法之间的本质区别在于他们如何选择收缩的优势。一些值得注意的例子这些算法是Hoppe [4,3],Ronfard和Rossignac的算法[7],和Gu’eziec [2]。这些算法似乎都是经过设计的用于歧管表面,虽然边缘收缩可以用于非歧管表面。通过连续执行边缘收缩,他们可以关闭对象的洞,但他们不能加入未连接的区域。如果近似模型在一定距离内是至关重要的原始模型和它的拓扑保持不变,Cohen等人的简化包络技术。 [1]可以与上述简化算法之一结合使用。只要对模型进行的任何修改仅限于谎言在信封内,可以保持全局错误保证。然而,虽然这提供了强大的误差限制,但该方法本身就是如此限于可定向的歧管表面和仔细预合同该方法本质上是限于可定向的歧管表面和仔细预合同之前之后

图2:非边缘收缩。当非边缘对收缩时,模型的未连接部分已连接。虚线line表示两个顶点一起收缩。提供模型拓扑。同样,这些往往是限制简化渲染的目的。这些先前开发的算法都没有提供这种组合我们所希望的效率,质量和普遍性。顶点抽取算法不适合我们的需要;他们很小心保持模型拓扑并通常假设流形几何。
顶点聚类算法非常通用,速度非常快。但是,它们对结果和这些结果的控制很差可能是相当低的质量。边缘收缩算法可以不支持聚合。我们开发了一种支持聚合的算法和高品质的近似值。它具有很多普遍性顶点聚类以及迭代的质量和控制收缩算法。它还允许更快的简化一些更高质量的方法[3]。
3通过对收缩进行抽取
我们的简化算法基于迭代收缩顶点对;迭代边缘收缩技术的推广用于以前的工作。一对收缩,我们会写.v1; v2 /! Nv,将顶点v1和v2移动到新位置Nv,将所有事件边缘连接到v1,并删除顶点V2。随后,任何已经变质的边缘或面
被删除。收缩的影响很小并且高度局部化。如果.v1; v2 /是边缘,然后将移除1个或更多个面(见图1)。否则,两个以前单独的部分模型将在Nv加入(见图2)。
这种收缩的概念实际上很普遍;我们可以签约一组顶点到一个顶点:.v1; V2; :::; vk /!Nv。这个广义收缩的形式可以表达两对收缩以及更一般的操作,如顶点聚类。然而,我们使用对收缩作为我们算法的原子运算因为它是最细粒度的收缩手术。从初始模型Mn开始,一系列对收缩应用直到满足简化目标和最终近似生产出镁。因为每个收缩都对应对当前模型的本地增量修改,算法实际上生成一系列模型Mn; MN-1; :::; Mg。因此,单次运行可以产生大量的近似模型或多分辨率表示,例如渐进网格[3]。
3.1聚合
通过利用通用顶点对获得的主要好处收缩是算法加入先前未连接的能力模型的区域在一起。潜在的附带好处是它使算法对网格连通性不敏感原始模型。如果实际上两个面在重复的顶点相遇,这对顶点的收缩将修复这个缺点初始网格。在某些应用程序(如渲染)中,拓扑结构可能不那么重要比整体形状。考虑如下所示的形状图3由100个紧密间隔的立方体组成网格。假设我们想要构造一个近似值左边的模型用于远距离渲染。基于的算法边缘收缩可以关闭对象中的孔,但它们永远不会连接断开组件。在仅使用边缘收缩的算法中,各个组件分别简化为什么都没有,就像中间的模特一样。使用对收缩,单个组件可以合并为单个对象,如模型在右边。结果是更加忠实的近。
允许聚合还需要我们支持非流形表面。在两个独立区域连接的瞬间,非流形区域很可能被创建。这需要一个伟大的小心谨慎,努力确保收缩从未创造过非歧管区域,没有严重限制收缩的种类我们可以执行。
3.2对选择
我们选择在初始化时选择一组有效对,并且在算法过程中仅考虑这些对。我们的决定基于这样的假设,即在很好的近似中,积分不会远离原来的位置。我们会说一对.v1; v2 /是一个有效的收缩对,如果之一:1.v1; v2 /是边缘,或2.kv1-v2k <t,其中t是阈值参数使用t D 0的阈值给出简单的边缘收缩算法。
较高的阈值允许非连接顶点配对。当然,必须谨慎选择这个门槛;如果是的话模型的高度,广泛分离的部分可以连接,这可能是不合需要的,它可以产生O.n2 /对。我们必须在迭代过程中跟踪有效对的集合收缩。对于每个顶点,我们将其中的一对关联起来它是会员。当我们执行收缩.v1; v2 /! NV,v1不仅获得了与v2相关的所有边缘,它也是如此将v2中的一组对合并到它自己的集合中。每次出现有效对中的v2将替换为v1,并删除重复对。
4 Quadrics的近似误差
为了选择在给定迭代期间执行的收缩,我们需要一些收缩成本的概念。要定义此成本,我们试图描述每个顶点的误差。要做到这一点,我们将对称的4?4矩阵Q与每个顶点相关联,我们定义顶点v D [vx vy vz 1] T处的误差为二次形式1.v / D.vTQv。在第5节中,我们将描述初始矩阵是如何进行的建造。注意水平面1.v / D?,即设定值
相对于Q的误差是?的所有点都是二次曲面。对于给定的收缩.v1; v2 /! Nv,我们必须得到一个新的矩阵
NQ其近似于Nv的误差。我们选择使用简单的加法规则NQD Q1 CQ2。
为了执行收缩.v1; v2 /!女,我们也必须为Nv选择一个位置。一个简单的方案是选择其中之一v1,v2或.v1 Cv2 / = 2取决于它们中的哪一个产生1.Nv /的最低值。但是,找到一个位置会很高兴对于最小化1.Nv /的Nv。由于误差函数1是二次方,找到它的最小值是一个线性问题。因此,我们发现Nv通过求解@ 1 = @ x D @ 1 = @ y D @ 1 = @ z D 0.这相当于2解决:
2
64
q11 q12 q13 q14
q12 q22 q23 q24
q13 q23 q33 q34
0 0 0 1
3
75
NVD
2
64
0001
3
75
对于Nv。矩阵的底行是空的,因为Nv是同质的vector-its w component总是1.假设这个矩阵是可逆的,我们得到了
Nv D.
2
64
q11 q12 q13 q14
q12 q22 q23 q24
q13 q23 q33 q34
0 0 0 1
3
75
-12
64 0001 3 75
(1)
如果这个矩阵不可逆,我们试图找到最佳顶点沿着v1v2段。如果这也失败了,我们就会选择Nv来自终点和中点。
4.1算法摘要
我们的简化算法是围绕对收缩和错误二次曲面。当前实现代表使用的模型邻接图结构:顶点,边和面都是明确表示和链接在一起。跟踪有效集对,每个顶点维护它所属的对的列表。
算法本身可以快速总结如下:
1.计算所有初始顶点的Q矩阵。
2.选择所有有效对。
3.计算每个有效对的最佳收缩目标Nv.v1; v2 /。该目标顶点的误差NvT.Q1CQ2 / Nv变为承包这一对的成本。
4.将所有货币对放在以成本为最低的堆中成本对在顶部。
5.迭代删除该对.v1; v2 /来自堆的最低成本,合同这一对,并更新涉及的所有有效对的成本V1。
唯一剩下的问题是如何计算initialQmatrices从中构造错误度量1。2你可以通过获取偏导数来为自己验证
vTQv D q11x2 C 2q12xyC2q13xzC2q14x C q22 y2
C 2q23 yz C2q24 y C q33z2 C 2q34z C q44
5导出错误二次曲面
要构造我们的错误二次曲面,我们必须选择一个启发式来表征几何误差。我们选择了一种启发式方法与Ronfard和Rossignac [7]给出的非常相似。以下[7],我们可以在原始模型中观察到每个顶点是一组平面交叉的解决方案 - 即
在该顶点处相交的三角形平面。我们可以关联一个每个顶点都有一组平面,我们可以定义它的错误相对于此设置的顶点为其平方距离的总和飞机:
1.v / D 1. [vx vy vz 1] T / D.
X
p2planes(五)
.pTv / 2(2)
其中p D [a b c d] T表示由等式定义的平面ax C by C cz C d D 0其中a2 Cb2 Cc2 D 1.这是近似的尽管我们使用了求和,但误差度量与[7]类似而不是飞机组的最大值。一组飞机在顶点被初始化为在那里遇到的三角形的平面
顶点。请注意,如果我们要明确跟踪这些平面集,如[7]我们会在收缩后传播飞机.v1; v2 /! Nv使用规则:飞机。 Nv / D planes.v1 / [planes.v2 /。这可能需要相当大的存储量,不会因简化而减少进展。
(2)中给出的误差度量可以重写为二次形式:
1.v / D.
X
p2planes(五)
扩展名为.vtp / .pTv /
d
X
p2planes(五)
vT.ppT / V
D vT
X
p2planes(五)
KP

v
其中Kp是矩阵:
Kp D ppT D.
2
64
a2 ab ac ad
ab b2 bc bd
ac bc c2 cd
ad bd cd d2
3
75
这个基本误差二次曲线Kp可用于求平方空间中任何一点到平面p的距离。我们可以总结这些根本二次曲线并代表一整套平面单个矩阵Q.
我们使用单个矩阵隐式跟踪多组平面;代替计算集合联盟(planes.v1 / [planes.v2 /)我们只需添加两个二次曲面(Q1 C Q2)。如果由Q1和Q2表示的集合中原始度量是不相交的,二次加法相当于集合联盟。如果存在一些重叠,则可以是单个平面多次计算。但是,任何一架飞机都可以计算在内最多3次,因为每个平面最初只分配给其定义三角形的顶点。这可能会引入一些不精确的问题进入误差测量,但它有很大的好处:空间跟踪平面集所需的只是4?4对称所需的矩阵(10个浮点数),以及更新的成本近似仅是用于添加两个这样的矩阵的近似。如果我们是
愿意牺牲一些额外的存储空间,甚至可能使用包含 - 排除来消除这种多重计数式。
因此,计算我们的对收缩所需的初始Q矩阵算法,每个顶点必须积累平面在那个顶点相遇的三角形。对于每个顶点,这一组plane定义了几个基本的错误二次曲面Kp。错误该顶点的二次曲线Q是基本二次曲线的总和。请注意,每个顶点的初始误差估计值均为0顶点位于其所有入射三角形的平面中。
5.1几何解释
正如我们将看到的,我们基于平面的误差二次曲线产生相当高的值质量近似值。此外,它们还具有有用的几何形状meaning3。这些二次曲面的水平表面几乎总是椭圆体。在某些情况下,水平表面可能是退化的。对于例如,平行平面(例如,在平面表面区域周围)将产生水平表面,它是两个平行的平面和平面它们都平行于一条线(例,线性表面折痕周围)将产生圆柱形水平表面。用于寻找的矩阵只要最佳顶点位置(方程1)将是可逆的水平表面是非简并椭圆体。在这种情况下,Nv将是在椭圆体的中心。
6其他细节
到目前为止概述的通用算法在大多数模型上表现良好。但是,有一些重要的改进可以改进它在某些类型的模型上的性能,特别是平面模型具有开放边界的模型。保持边界。之前派生的错误quadrics做了没有任何开放边界的补贴。对于诸如此类的模型地形高度场,有必要保留边界曲线同时简化其形状。我们也可能希望保留离散的颜色不连续。在这种情况下,我们最初标记每个边缘为正常或“不连续”。对于周围的每个面孔一个特定的不连续边缘,我们生成一个垂直飞机穿过边缘。这些约束平面是然后转换成二次曲线,由一个大的惩罚因子加权,然后添加到边缘端点的初始二次曲面中。我们有发现这很有效。
防止网格反演。对比收缩不一定保留收缩区域中面部的方向。例如,有可能收缩边缘并导致一些边缘相邻的面孔互相折叠。通常最好尝试一下避免这种类型的网格反转。我们使用的基本相同其他人之前的计划(例如[7])。考虑时一个可能的收缩,我们比较每个邻居的法线面对收缩之前和之后。如果正常翻转,即收缩可能会受到严厉惩罚或被禁止。
6.1评估近似值
为了评估我们产生的近似值的质量算法,我们需要一个更严格的错误测量比算法采用的启发式误差测量本身。我们选择了衡量平均值的指标近似与原始模型之间的平方距离。这与Hoppe等人使用的Edist能量项非常相似。 [4]。
我们定义了逼近误差Ei D E.Mn; Mi /的简化模型Mi为:
Ei D 1
jXnj C jXij
X
v2Xn
d2.v;米/ C
X
v2Xi
d2.v; Mn /

其中Xn和Xi是在模型Mn和Mi上采样的点集分别。距离d.v; M / D minp2M kv - pk是最小值从v到最近的M的距离(k?k是通常的欧几里得矢量长度运算符)。我们使用此指标进行评估仅用途;它在实际算法中不起作用。
7结果
我们的算法可以公平地产生高保真近似值时间短。图5总结了运行时间4我们目前的实现使用了本文所示的模型。
图4显示了由…生成的近似的样本序列我们的算法。这整个奶牛的序列是在大约一秒钟。请注意,角和蹄等功能仍然存在通过许多简化可识别。只是极端细节水平低,它们开始消失。
如前所述,我们的算法试图优化收缩后放置顶点。图6总结了此政策对代表性模型的近似值的影响(图4的牛模型)。在极低的细节水平下,4这个数据是在带有195 MHz R10000处理器的SGI Indigo2上收集的和128 MB的内存。面(i)固定(Ei)最佳(Ei)缩减
10 0.0062 0.0054 13.4%
100 0.00032 0.00025 21.7%
500 2.4e-05 1.3e-05 47.6%
1000 5.7e-06 3.4e-06 40.3%
2000 1.2e-06 7.9e-07 32.4%
3000 3.6e-07 2.6e-07 28.2%
图6:最佳顶点放置的影响。选择最佳位置,而不是端点之间的固定选择中点,可以显着减少近似误差。约稿
是使用t D 0的牛模型。效果不大。但是,在更合理的细节层面上效果显着;最佳顶点放置可以减少整体
差错50%。在我们的实验中,我们也发现了使用最佳顶点放置往往会产生更好的形状网格。
图8-13展示了我们的算法的性能更大的模型。图9表示显着的简化(1.4%)的原件,但注意到所有主要细节
原来留下来了。特别要注意内部的轮廓耳朵和后腿周围的大轮廓已经保存。图10显示了一个更加激烈的近似值:
100面或原始尺寸的0.14%。虽然大部分细节模型已经消失,对象的基本结构仍然存在完整;头部,腿部,尾部和耳朵等主要特征都是虽然高度简化,但显而易见。图12显示了非常密集的情况镶嵌地形模型,图13显示了高度简化
版。虽然地形的小规模纹理已基本消失,地形的所有基本特征仍然存在。另请注意开放边界得到了妥善保护。没有边界前面描述的约束,边界将是显着的侵蚀。
图11说明了累积的误差二次曲线的性质在简化期间。水平面vTQv D?显示每个顶点。每个水平面都是以相应的为中心的椭圆体顶点。这些椭圆体的解释是一个顶点可以移动到椭圆体内的任何位置并出错少于 ?。椭球的重要特征是它们符合要求非常好的模型表面的形状。它们很大并平放在大部分平面区域,如后腿中间,并且它们沿着诸如轮廓的不连续线延长通过耳朵和腿的底部。从某种意义上说,这些椭球可以被认为是积累有关的信息它们顶点周围局部表面的形状。图14-17展示了聚合的真正好处通过对收缩可以提供。原始模型包括人类左脚的骨头。有许多单独的骨头细分,其中一些甚至互相渗透(显然是一个错误在模型重建中)。比较三个近似值:一个由均匀顶点聚类构建,一个用边缘收缩构建单独,和一对建立与对收缩。边缘收缩时单独使用,脚趾末端的小段塌陷分为单点;这造成了脚趾缓慢的印象后退回到脚下。另一方面,使用更一般对收缩允许合并单独的骨段。
如图17所示,脚趾正在合并为单个长段。图19显示了最初选择的一些对有效。注意它们如何跨越骨段之间的间隙。最后,图18显示了水平面的另一个图示简化期间累积的误差二次曲线(这是模型见图16)。聚合的好处不仅仅是视觉上的。聚合也可以产生客观较低的近似误差。图7图7:对阈值的影响。逼近误差E250对于足面的250面近似,显示为t的函数模型(图14)。导致聚合的配对收缩可以显着减少近似误差。
显示足部模型的250个面近似的误差E250使用各种t值。所有产生的价值都相当广泛客观上比边缘更好的近似值
收缩仅近似(t D 0)。但请注意,增加t并不总能改善近似值。这个到期了我们的二次误差度量的性质。在本地,到一个距离一组平面是到一组的距离的合理近似值面孔但是,因为飞机具有无限的范围和面孔不然,随着我们走得更远,误差度量变得不那么可靠了。
8讨论
我们的算法提供了效率,质量和通用性的组合在早期算法中找不到。而某些其他算法是它们通常比我们更快或产生更高质量的近似值不能满足我们算法在这三个方面的能力。唯一能够简化任意多边形模型的算法,顶点聚类[8],不能可靠地产生高质量的近似值。没有更高质量的方法[2,7,3]支持聚合。 [2]和[3]似乎都要多得多比我们的算法耗时。 [7]的结果最相似对我们自己,因为我们使用非常相似的误差近似。但是,我们的系统使用amore efficientmeans来跟踪平面集,它包含一些增强功能,如边界保护。我们的算法仍有各方面可以改进
根据。我们使用了一个相当简单的方案进行选择有效对。很有可能是更复杂的自适应方案可以产生更好的结果。我们没有解决这个问题表面性质如颜色。一种可能的解决方案是将每个顶点视为向量.x; Ÿ; Z者除外; R等G; b /,构造7?7二次曲面,并简化。我们相信这可能会很好,但增加了尺寸和复杂性使它没有基本算法那么有吸引力。
虽然它通常表现良好,但我们的算法有一对明显的弱点。首先,如前所述,测量误差为到一组飞机的距离仅适用于适当的当地社区。
其次,二次曲线中积累的信息基本上是隐含的,有时可能会有问题。假设我们连接两个立方体,并希望删除相关的平面现在已经不复存在的内部面孔。一般来说,它不仅是很难确定哪些面孔已经不存在,没有明确的方法
从二次曲面中可靠地移除适当的平面。结果是,我们的算法在简化方面做得不好我们希望聚合。
9结论
我们已经描述了一种能够实现的表面简化算法迅速产生多边形的高保真近似楷模。我们的算法使用迭代对收缩来简化用于跟踪近似误差的模型和二次误差度量模型正在简化。最终存储的二次曲线顶点也可用于表征整体形状表面。
我们的算法能够连接未连接的部分模型虽然仍然保持相当高的质量结果。而大多数先前的算法本身也限于多种算法表面,我们的系统非常有能力处理和简化非多样物体。最后,我们的算法提供了一个有用的中间在诸如顶点之类的非常快速,低质量的方法之间进行研究聚类[8]和非常慢的高质量方法,如网格优化[3]。