關于Remeshing的一個簡單的定義如下:
- 輸入一個3D網格,通過計算得到另一個和輸入大致相同且滿足一定質量要求網格。
曲面的Remesing目標有以下兩點:
- 根據需求減少曲面的復雜度
- 改善曲面的質量(Mesh Quality)
曲面的質量(Mesh Quality)指的是一些非拓撲屬性(Non-Topological Properties),例如采樣密度,正則性,大小,方位(Orientation),對齊性(原文為Alignment,不太好翻譯),以及曲面網格的形狀。
局部結構(Local Structure)
網格的局部結構(Local Structure)說的是網格元素的種類,形狀,方位以及分布情況。
元素的種類(Element Type)
最為常用的兩個種類是三角形(Triangle)和四邊形(Quadrangle)。
四邊形網格可以通過在每一個四邊形中插入一條對角線,輕易地轉換成三角形網格。
反過來,如果要把三角形網格轉換為四邊形網格,可以使用重心劃分的方法:將三角形的重心和每一條邊的中點連接,這樣一個三角形就被劃分成了3個四邊形。另外還有一種方法:將三角形的重心和每一個頂點連接,然后舍棄掉網格上原來所有三角形的邊。
元素的形狀(Element Shape)
網格的元素可以分為各向同性(Isotropic)或者各向異性(Anisotropic)兩類。
各向同性(Isotropic)的元素的形狀通常在各個方向上一致。理想情況下,當某個三角形(四邊形)的元素是或者近似是等邊三角形(正方形)時,就說這個元素是各向同性(Isotropic)的。
對于三角形的元素來說,可以通過其外接圓的半徑和三邊中最短的一條邊的比值來度量它具有的各向同性(Isotropic)的強度。
各向異性(Anisotropic)的元素在網格曲面上各個方向的形狀往往都不同,通常這些元素的都朝向(oriented)主曲率的方向。這種元素往往能夠更好的表現幾何體的結構特征。它的另一個優勢在于,相對于各向同性(Isotropic),得到同樣質量的網格其使用的元素的個數更少。
元素的密度(Element Density)
在一個平均分布的網格中(Uniform Distribution),網格元素平均的分布在整個模型上。在一個不均勻或者適應性分布的網格中(Nonuniform Adaptive Distribution),每個區域分布的元素的數量都不同,例如比較小的元素通常會較多地處于曲率較高的區域。通過調整,這種不均勻或者適應性分布的網格能夠用更少的元素更好地近似出原來的網格。
元素的對齊性和方位(Element Alignment and Orientation)
在Remeshing的過程中,一些尖銳突出的地方(Sharp Features)通常會受到影響產生走樣(Aliasing),這些地方的切線是不連續的,為了避免這個情況需要將網格元素與它們(Sharp Features)對齊(Align)。
全局結構(Global Structure)
當三角形網格上非邊界上的頂點周圍頂點的數量為6或者邊界上的頂點周圍頂點的數量為4的時候,稱這個頂點是正則(Regular)的。同理對于四邊形網格來說,這兩個值對應分別是4和3。
相對于正則(Regular),其它的頂點則是非正則(Irregular)或者Extraordinary。
網格的全局結構可以根據正則頂點的數目被分為非正則(Irregular),半正則(Semiregular),高度正則(Highly Regular)和正則(Regular)四種。
一致性(Correspondences)
所有Remeshing算法,都會在曲面上或者曲面附近計算點的位置。其中大部分算法甚至還會進行額外的迭代來修正頂點的位置以改善網格的質量。所以在Remeshing的過程中一個關鍵的問題就是要保證計算前后頂點的一致性。
下面有幾種解決這個問題的方法:
全局參數化(Global parameterization):將輸入的模型整個參數化到一個2維參數域上,然后在這個參數域對采樣點的分布和位置進行調整,最后再將其還原到3維空間中。
局部參數化(Local parameterization):算法只保留某個點局部的參數化信息,當采樣點變換的時候,再去計算那個點的局部參數化信息。
投影(Projection):將采樣點投影到輸入模型上對應最近的頂點、邊或者三角形上。
全局參數化的計算相對來說比較耗時,同時當模型被切開成一個圓盤(Disk)的時候。
而當采樣點離曲面太遠的時候,直接進行投影則可能會導致重影現象。通過將對采樣點的移動限制在切平面上使得采樣點不會原來曲面太遠,以解決上述問題。
局部參數化方法相對穩定,并且效果較好,不過需要不斷的跟蹤記錄并重新計算局部的參數化信息。
沃羅諾伊圖和德洛內三角剖分(Voronoi Diagrams and Delaunay Triangulations)
沃羅諾伊圖(Voronoi Diagrams),簡單的說就是基于一組特定點將空間分割成不同的區域,而每一個區域都只包含這些點中的一個,并且該區域內的任意點到這個特定點的距離小于該這個任意點到空間中其它特定點的距離。其中這些被分割的區域稱作沃羅諾伊區域(Voronoi Region)。
上面這張圖形象的描述了 沃羅諾伊圖的生成過程。
下面我們用數學的形式來表達沃羅諾伊區域。給定任意維空間Rd上的一個點的集合{p1,...,pn},點pi的沃羅諾伊區域 V(pi) 是:
。
沃羅諾伊圖可以看作空間Rd上的一個劃分,因為該空間上任意一個點必定屬于某一個沃羅諾伊區域。
與該空間中的任意兩個點pi和pj等距的點組成的區域被稱作Bisector,所有的Bisector都是該空間上的仿射子空間(Affine Subspace)。例如,在2維空間上Bisector是一條線,3維空間上Bisector是一個面。
從Bisector的定義可以看出,沃羅諾伊區域也可以被定義為由一些Bisector的半空間(Half-Space)相交所圍成的閉合區域,因為凸集(Convex Set)相交仍仍然是凸的,所以沃羅諾伊區域是一個凸集。不過在靠近整個空間Rd邊緣的區域,閉合組成沃羅諾伊區域的Bisector里就會包含Rd的外殼(Hull)部分。
沃羅諾伊圖的對偶結構被稱為德洛內三角剖分(Delaunay Triangulations)。通過連接沃羅諾伊區域內的頂點可以得到其對應的對偶結構,如下圖所示:
德洛內三角剖分的三角形(p, q, r)與沃羅諾伊區域V(p),V(q),V(r)相交得到的頂點對偶。
德洛內三角剖分的邊(p, q)與沃羅諾伊區域V(p),V(q)相交得到的邊對偶。
德洛內三角剖分的頂點 p與沃羅諾伊區域V(p)對偶。
可以發現德洛內三角剖分和沃羅諾伊圖在許多局部和全局的屬性上存在對偶關系,如:
對于k維空間上的某個點集P上的德洛內三角剖分,其上的任何一個k單純形(k-simplex:即在k維空間上,由k+1個點組成的多面體,如2維空間上的三角形,3維空間上的四面等)的外界圓(因為是任意維的情況,所以稱作超球面更準確一些)的內部都不包含點集上其它的點。
對于2維空間上的某個點集P上的德洛內三角剖分,這種剖分能夠最大化所有三角形中最小的角。
另外在進行德洛內三角剖分的時候還可以對其加以限制,例如在2維空間上可以用閉合的平面曲線來進行限制,在3維空間上用閉合曲面來進行限制。
三角形網格的網格重劃分(Triangle-Based Remeshing)
Greedy Remeshing
這個方法的主要思想是對3維德洛內三角剖分的Refining和提取Filtering。
在Refining的過程中,輸入網格上的點會被選中然后插入到德洛內三角剖分的三角形中。而點的位置則是網格曲面與德洛內三角剖分對應的沃羅諾伊圖的邊的交點。換句話說沃羅諾伊圖的邊被用來當作輸入網格曲面的“探針(Probe)”。
在Filtering的過程中,更新德洛內三角剖分使其被限制在曲面上,即選取德洛內三角剖分的面,與這些面對偶的沃羅諾伊圖的邊與該曲面相交。
該算法會涉及下面的概念:
-
Surface Delaunay ball
一個Surface Delaunay ball是一個位于輸入網格曲面中心的球,這個球包圍了一個德洛內三角剖分中的一個特定的面。一個中心位置為c,半徑為r,包圍了面f的Surface Delaunay ball可以記作:
-
Medial axis
給定n維空間上的一個集合O,它的Medial axis M(O)是一系列點的集合,以這些點為中心的超球面與集合O的邊界相切的點的個數至少為2。
橢圓區域為O,中間的直線為Medial axis -
Medial ball
中心在Medial axis上的球(ball),其內部被集合O包含并且它的包圍球面與O的邊界相交,稱這樣的球(ball)為Medial ball。
最外側的實線包含的集合為O,集合內的實線為Medial axis,圓圈所圍成的區域為Medial ball Reach(Local feature size)
集合O內的點x到集合O上的Medial axis的距離稱為Reach或者Local feature size。
有了上面的定義就可以準確的描述Refine的過程,即調整帶限制的德洛內三角剖分,使得所有的Surface Delaunay ball的半徑都小于局部的Reach,為了保證算法能夠正確終止還需要確保Reach大于0。
算法需要一個點集P,P的德洛內三角剖分Del(P),帶限制條件的德洛內三角剖分DelS(P),以及DelS(P)中“不好(bad)”的面的列表L。
“不好(bad)”的面的定義為:假定有一個Surface Delaunay ball——Bf = B(cf,rf),滿足rf > ψ(cf),其中ψ是定義在S上的函數,ψ滿足下列條件:存在S上的一個點x,使得
初始化的時候點集P選取S中每個聯通區域上足夠近的三個點,然后執行下面的算法
當ψ滿足,其中ε = 0.2,ρ = reach,上面的算法會在經過有限次的迭代之后終止,并且算法輸出的結果——帶限制的3維德洛內三角剖分與輸入的網格曲面相互同胚。
上述算法由于大量涉及到求直線和三角形面求交的過程,所以可以使用八叉樹的數據結構進行加速。
Greedy Remeshing的優點在于其結果保證不會出現自相交,因為三角形網格是取自與三維德洛內三角剖分的。Greedy Remeshing另外一個很好的地方在于他不需要局部或者全局的參數化信息。
那么如果想要使用盡量少的頂點得到質量盡可能高的網格,該怎么做呢?下面的Variational Remeshing方法能夠部分解決這個問題。
Variational Remeshing
當我們尋求高質量的網格的時候,就需要對網格進行相應的優化工作。
- 優化的標準是什么?一些和形狀、三角大小等相關的幾何量
- 自由度是多少?盡可能的少。
Variational Remeshing地主要思想是:將一系列的點盡可能平均地放置到輸入地網格之上。
以2D的情況為例,如果要平均地將一系列點放置到一個平面上,其中一個方法就是通過構建一個Centroidal Voronoi Tessellation(CVT)來實現。
給定一個邊界域Ω,如果存在一個被Ω限制的沃羅諾伊劃分(Voronoi Tessellation),其上的任意一個沃羅諾伊區域中的頂點剛好是這個區域的重心,那么稱這個這個劃分為Centroidal Voronoi Tessellation(CVT)。
求一個沃羅諾伊區域Vi的重心ci的方法如下:
ρ(x)是的密度函數,通常取一個常數(即區域內的質量分布是均勻的)。
Variational Algorithm即變分算法通常需要首先定義一個能量函數,然后通過不斷地迭代最小化這個能量函數。
這里我們定義如下地能量函數:
通過觀察可以知道,當pi是對應沃羅諾伊區域Vi上的重心的時候,上面的能量函數取最小值。
我們可以使用Lloyd's Algorithm(也叫Lloyd’s
Relaxation Method),通過不斷迭代建立一個CVT。給定一個密度函數ρ和一個點集pi,算法由下面三個步驟組成:
- 根據點集pi建立沃羅諾伊劃分(Voronoi Tessellation)
- 計算每一個沃羅諾伊區域的重心ci,然后將pi移動到ci的位置
- 重復執行(1)(2)直到滿足收斂條件
為了能夠在3D網格上應用同樣的算法,我們先將網格進行保角參數化,然后在參數空間上應用Lloyd's Algorithm。參數化的過程中會導致三角形變形,密度函數ρ在這里就被用來抵消這種變形,通過在多個帶邊界限制的沃羅諾伊圖上分別應用Lloyd's Algorithm,網格上一些諸如褶皺、夾角的特征能夠得到保留。
Incremental Remeshing
Incremental Remeshing相較于之前的Variational Remeshing來說實現起來更加簡單——它不需要進行參數化并且不需要進行劃分(Tessellation)。
算法首先輸入一個目標邊長(Target Edge Length),然后根據這個輸入對網格中較長的邊進行Split操作,對較短的邊進行Collapse操作,并且會移動頂點的位置,直到所有邊的長度和輸入的目標邊長(Target Edge Length)大致相當。算法的偽代碼如下:
注意到我們通過輸入的長度得到一個區間[low, high],如果邊長在區間左側則認為這條邊太短需要進行Collapse操作;如果邊長在區間的右側則認為這條邊太長,需要進行Split操作。
split_long_edges(high)函數會遍歷當前網格中所有的邊,如果其長度大于high,那么我們就從這條邊的中點對其進行Split操作。操作之后,和這條邊相鄰的兩個三角形都會被一分為二。
collapse_short_edges(low, high)函數同樣對當前網格的所有邊進行遍歷,對長度小于low的邊進行Collapse操作。不過需要注意的一點是,在進行Collapse操作的時候需要檢查經過該操作是否會產生長度大于high的邊,如果不產生,那么我們進行此次的Collapse操作,否則不進行。
equalize_valences()函數對邊進行Flip操作來調整各個頂點的Valence(于該頂點相鄰的頂點的個數),使其盡量地接近目標Valence。函數會遍歷當前網格的所有邊,并嘗試對其進行Flip操作,然后比較Flip操作前后和這條邊相鄰的兩個三角形上的四個頂點其Valence和目標值的偏差,如果偏差沒有變小那么撤銷之前的Flip操作(對這條邊再進行一次Flip操作)。
target_val(v)函數接受一個頂點做為輸入,如果該頂點是邊界上的點那么函數返回4,如果是內部的點則返回6。
tangential_relaxation()函數對當前的網格進行反復的平滑過濾。假定p是網格上的某一個點,n是該點的法線量,然后使用下面的方法計算出點q:
然后我們將q向p點的方向投影,得到p的新位置:
project_to_surface()函數將頂點投影到原曲面上。
為了保證輸入模型的特征,在進行上面的算法的時候需要加入一些限制:
角上的頂點(Corner Vertices)對應的一個或兩個特征邊(Feature Edge)必需被保留,并且不對其進行任何可以改變其幾何或者拓撲結構的操作。
對一個特征邊(Feature Edge)進行Split操作將得到兩個特征邊(Feature Edge)和一個特征點(Feature Vertex)。
對特征邊(Feature Edge)進行tangential_relaxation()函數的時候,只能在這條邊的方向上進行。
對處于特征邊(Feature Edge)的點進行Collapse操作的時候只能在沿著這條邊的方向上進行該操作。
不能對特征邊(Feature Edge)進行Flip操作
四邊形網格的網格重劃分(Quad-dominant Remeshing)
生成四邊形網格的思路主要有下面幾種:
四邊形化(Quadrangulation):通過放置一些列的點,然后將其四邊形化(通過添加Steiner Point或者使用Circle Packing法)。不過缺點在于缺乏對邊朝向性(orientation)和對齊性(alignment)的控制。
轉化(Conversion):首先生成三角形網格或者多邊形網格,然后將其轉換維四邊形網格。轉換的具體方法有:合并與一條邊相鄰的兩個三角形
,切分多邊形網格等。這種方法能夠簡單地控制邊的朝向性和對齊性。基于曲線的采樣(Curve-based Sampling):通過放置一系列與方向場相切的曲線來生成一個曲線網絡,這樣網絡上的每一個交點正好是生成的頂點。此方法能夠很好的控制邊的朝向性和對齊性,不過生成的四邊形網格上可能會有T-Junction,所以并不完全是一個四邊形網格。
- 等值線法(Contouring):一個能得到純四邊形網格(Pure Quadrangle Mesh)的方法包含有如下:計算兩個標量函數、將經過選取的一系列等值帶入這兩個函數中從而得到四邊形網格的一些列小四邊形。
這里我們將討論的方法基于后兩點,該方法包含三個主要步驟:
- 首先計算每個頂點的曲率張量(Curvature Tensor)來還原出一個連續(continuous)的模型。計算完張量之后,丟棄掉其中法向量的分量。然后通過計算離散保角參數化(Discrete Conformal Parameterization)得到了一個2維分段張量場,然后對其使用高斯核函數做卷積運算,得到一個平滑的曲率方向場,并且提取出張量場中的臍點(Umbilics)。
- 第二步是在參數空間上上進行重新采樣。對于各向異性的區域(Anisotropic Area),建立由一些列曲率線(沿著主曲率的方法)組成的網格;而對于各向同性的區域(Isotropic Area)則使用普通的頂點采樣的方法
- 最后一步通過第二部采樣出來的點獲得邊,在各向異性的區域我們將曲率線拉直以得到邊,在各向同性的區域我們通過德洛內三角剖分來獲得邊。最終得到的多邊形網格中既包含三角形也包含了四邊形。
不過對于平坦的區域,由于曲率線之間的距離很大,可能最后不會產生任何的多邊形。因此當曲率線進入一個較為平坦的區域的時候,算法使從其上一個采樣點開始沿著測地線(Geodesic Curve)的方向延長,直到其進入較為彎曲的區域。