本發(fā)明涉及計算機圖像處理技術(shù)領(lǐng)域,具體地說,涉及一種快速分割三角形的光滑自由變形算法。
背景技術(shù):
在幾何建模和計算機動畫中,空間變形是幾何外形編輯和柔性體動畫生成的關(guān)鍵技術(shù)之一,其中,最具代表性的是自由變形技術(shù)(ffd),已發(fā)展出多個變種,如精確自由變形方法、光滑自由變形方法等,由于其簡單易用、功能強大,已經(jīng)被集成到3dsmax、maya、softimagexsi等商業(yè)軟件中。
由于傳統(tǒng)自由變形方法的變形是作用到待編輯模型的采樣點上,再由采樣點變形后的位置還原出模型的變形結(jié)果,導(dǎo)致其在變形過程中存在因采樣點密度太小而出現(xiàn)走樣的問題。
為解決走樣問題,通常是增加采樣點的密度,但會造成性能上較大的開銷;更進一步的方法是根據(jù)面片大小和曲面曲率,自適應(yīng)確定采樣密度,雖然降低了性能開銷,但自適應(yīng)算法實現(xiàn)相對復(fù)雜,且無法很好地處理一些奇異情況。
精確自由變形作為解決ffd中走樣問題的方法,其是通過沿節(jié)點盒切割初始三角面片,計算三角面片上足夠數(shù)目采樣點變形后的位置,再用采樣點插值計算出原始三角面片變形后的精確結(jié)果。
光滑自由變形方法通過以下七個步驟對精確自由變形方法進行改進:
(1)定義變形空間步驟
選用b樣條體作為變形空間,記作r(u,v,w):
其中,
然后用該變形空間包裹住待變形模型。
(2)三角剖分步驟
通過b樣條體上的節(jié)點盒分割初始三角面片。
(3)模型嵌入步驟
在本步驟中,嵌入過程為計算待變形模型在變形空間中參數(shù)坐標(biāo)的過程,具體通過嵌入函數(shù)u=e(x)將采樣點從世界坐標(biāo)系映射到變形空間,其中,x為采樣點在世界坐標(biāo)系中的坐標(biāo),u為采樣點在變形空間的參數(shù)坐標(biāo)。
嵌入函數(shù)e由變形空間決定,在光滑自由變形中,通常是通過的一定的方法構(gòu)造b樣條體,使嵌入變形空間點的參數(shù)坐標(biāo)與該點在世界坐標(biāo)系中的坐標(biāo)相等,即e(x)=x,以簡化嵌入過程中的計算。
并通常選用三次貝塞爾曲面片來擬合精確的變形結(jié)果,由于每一個切割產(chǎn)生的三角形,都會在變形后得到一個三角貝賽爾曲面片,所以要在每一個切割產(chǎn)生的三角形上進行采樣,共需要3×3個約束點及m(m由變形空間的次數(shù)決定)個擬合點,即光滑自由變形共需要9+m個采樣點。
然后用e(x)=x計算出采樣點在變形空間中的參數(shù)坐標(biāo),同時通過重心坐標(biāo)插值計算采樣點的法向。
(4)幾何變形步驟
幾何變形過程為改變變形空間并將該變形傳遞至待變形模型的過程,具體為將采樣點嵌入b樣條體中,以通過這些采樣點將變形空間的變形傳遞至待變形模型中的。當(dāng)用戶改變b樣條體控制頂點的位置后,先將采樣點的參數(shù)坐標(biāo)和控制頂點位置代入到定義變形空間所用的公式中,以求得采樣點變形后的位置;再以這些新的位置為輸入,通過帶約束的擬合方法,求出作為變形結(jié)果的三角貝塞爾曲面的控制頂點。
(5)法向變形步驟
為了解決精確自由變形中結(jié)果不夠光滑自然的問題,通過重心坐標(biāo)插值估算得采樣點的法向,然后計算出采樣點的法向量變形以后的值;接著,用與幾何變形步驟中相同的方法,以采樣點變形后的法向量為輸入,用三次貝塞爾曲面片擬合出變形后的三角曲面片法向量場。在細(xì)分階段同時細(xì)分法向量場,并以此作為細(xì)分三角形的法向,從而可得到在光滑邊兩側(cè)視覺上g1連續(xù)的幾何和g0連續(xù)的法向量場;在尖銳邊兩側(cè)g0連續(xù)的幾何和g-1連續(xù)的法向量場。
(6)幾何微調(diào)步驟
為了得到視覺上更加細(xì)膩的變形結(jié)果,還需根據(jù)法向信息對表示幾何的三角貝塞爾曲面片的控制頂點進行微調(diào)。
(7)細(xì)分繪制步驟
將法向變形步驟和幾何微調(diào)步驟的結(jié)果進行細(xì)分后繪制。
經(jīng)過上述七個步驟的處理后,通過將cuda應(yīng)用到了精確自由變形中,不僅可實現(xiàn)比精確自由變形方法快50倍左右的計算速度,而且改進了變形結(jié)果的視覺美觀度。
另一方面,ffd構(gòu)架下的算法大多是計算密集型的,且這些算法能較好地適用于單指令流多數(shù)據(jù)流計算模型,隨著通用計算的興起,很多學(xué)者利用gpu加速各類ffd,從而使這些算法能對大型三維模型進行實時編輯。gpu從一個僅負(fù)責(zé)圖形繪制的專用硬件漸漸演變?yōu)橐粋€多線程、高帶寬的通用計算硬件。cuda、opencl等通用計算框架的出現(xiàn),更加方便了人們用gpu對各類算法進行加速。
然而,在gpu平臺上實現(xiàn)光滑自由變形方法中的剖分三角形步驟存有兩個問題:(1)在gpu中進行并行計算時,其三角均勻剖分步驟中的時間取決于剖分時間最長的初始三角面片;(2)gpu不適合針對“剖分三角形”這種復(fù)雜的算法進行加速;所以現(xiàn)有三角剖分步驟均在cpu中進行,導(dǎo)致在載入模型時需要較長的初始化時間。
以上所述是光滑自由變形的一個問題,另一方面,光滑自由變形中,其它步驟均用cuda實現(xiàn),無法跨平臺計算。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的為提供一種快速分割三角形的光滑自由變形算法,使其能在gpu中進行三角均勻剖分,提高光滑自由變形速度,且克服了原有光滑自由變形只能在nvdia硬件中運行的平臺局限性。
為了實現(xiàn)上述目的,本發(fā)明提供的光滑自由變形算法包括三角均勻剖分步驟,三角均勻剖分步驟包括:依據(jù)等分段長度控制參數(shù),計算初始三角面片三邊的等分段數(shù);從查找表中獲取與三邊等分段數(shù)相對應(yīng)的剖分方案對初始三角面片進行三角剖分,查找表為以三角面片三邊的等分段數(shù)為索引的剖分方案集合。
由于在生成查找表步驟中,各基準(zhǔn)三角面片的剖分方案已制成以其三邊等分段數(shù)為索引的集合,所以在對模型上的初始三角面片進行均勻剖分時,只需依據(jù)等分段長度控制參數(shù)計算其三邊的等分段數(shù),就可直接調(diào)用對應(yīng)剖分方案對該初始三角面片進行剖分,不僅加快了該步驟的運行速度,且縮短各類初始三角面片的剖分時間差,從而使三角均勻剖分步驟適合于在gpu進行加速。
一個具體的方案為等分段數(shù)是初始三角面片的邊長度與等分段長度控制參數(shù)之商的向上取整值。算法簡單。
另一個具體的方案為還包括:接收對等分段長度控制參數(shù)的設(shè)定。
通過接收用戶對等分段長度控制參數(shù)的設(shè)置,便于用戶對分割產(chǎn)生子三角形的大小進行控制,以根據(jù)需求和硬件的性能,對變形誤差進行控制。
另一個具體的方案為剖分方案包括各等分點的重心坐標(biāo)及剖分后各子三角形頂點的連接關(guān)系。該存儲方式簡單且易于查找。
進一步的具體方案為從查找表中獲取與三邊等分段數(shù)相對應(yīng)的剖分方案對初始三角面片進行三角剖分的步驟包括:從查找表中獲取對應(yīng)剖分方案中等分點的重心坐標(biāo)與子三角形頂點的連接關(guān)系;根據(jù)初始三角面片三個頂點在當(dāng)前坐標(biāo)系中的坐標(biāo)與對應(yīng)分割方案中各等分點的重心坐標(biāo),用公式pa=u*p1+v*p2+w*p3計算出各等分點在當(dāng)前坐標(biāo)系中的坐標(biāo),其中,(u,v,w)為等分點重心坐標(biāo),p1,p2,p3為初始三角形的頂點坐標(biāo)。pa為計算所得的等分點的坐標(biāo);根據(jù)連接關(guān)系連接各等分點對初始三角面片進行三角剖分。
一個優(yōu)選的方案為生成查找表的步驟包括:計算一系列基準(zhǔn)三角面片三邊的長度;依據(jù)基準(zhǔn)等分段長度控制參數(shù),計算各基準(zhǔn)三角面片三邊的等分段數(shù);對基準(zhǔn)三角面片進行三角剖分,并從剖分結(jié)果中提取剖分方案,并將剖分方案以三邊等分段數(shù)為索引存儲到查找表中。將一系列基準(zhǔn)三角面片的剖分結(jié)果提取成剖分方案并以該基準(zhǔn)三角面片的三邊等分段數(shù)為索引儲存到查找表中,以便隨時調(diào)用該剖分方案,節(jié)省了大量的時間。
更優(yōu)選的方案為基準(zhǔn)三角面片三邊的等分段數(shù)為各邊的長度與基準(zhǔn)等分段長度控制參數(shù)之商的向上取整值。算法簡單。
另一個更優(yōu)選的方案為將剖分結(jié)果生成剖分方案的步驟包括:提取剖分方案中的中各子三角形頂點的重心坐標(biāo)及各頂點的連接關(guān)系;重心坐標(biāo)為以基準(zhǔn)三角面片頂點坐標(biāo)為參照的坐標(biāo);依序?qū)鶞?zhǔn)三角面片中各剖分點進行編號,連接關(guān)系為由子三角形頂點編號組成的數(shù)組構(gòu)成的集合。
另一個更優(yōu)選的方案為對基準(zhǔn)三角面片進行三角剖分的步驟包括:
步驟1,依據(jù)基準(zhǔn)等分段長度控制參數(shù),對基準(zhǔn)三角面片最小內(nèi)角的兩邊進行等分;
步驟2,連接鄰近最小內(nèi)角頂點的兩個等分點,形成頂三角形與待剖分四邊形;
步驟3,以待剖分四邊形與頂三角形共有的端點為起點,對應(yīng)連接待剖分四邊形上的等分點,剖分成若干個類梯形;
步驟4,依據(jù)基準(zhǔn)等分段長度控制參數(shù),對類梯形上底與下底進行等分,并連接等分點對類梯形進行三角剖分;若最小內(nèi)角兩邊上的等分點數(shù)不等,則重復(fù)步驟3與步驟4,以距離最小內(nèi)角頂點最遠(yuǎn)的類梯形為待剖分四邊形進行三角剖分,且以位于最小內(nèi)角等分點數(shù)較少的邊上的頂點為起點。
利用等分段長度控制參數(shù),使分割產(chǎn)生的子三角形的邊長接近等分段長度控制參數(shù),即分割產(chǎn)生的子三角形較接近正三角形,有效避免了狹長三角形或蛻化三角形的產(chǎn)生,使光滑自由變形過程更加魯棒高效。
進一步的方案為連接等分點對類梯形進行三角剖分的步驟包括:沿同一連接方向,連接類梯形上底與下底上對應(yīng)等分點,形成若干四邊形,并連接短對角線對四邊形進行剖分。
與現(xiàn)有的方法相比,本發(fā)明的有益效果在于:
(1)提高可在gpu中實現(xiàn)的步驟數(shù),有效地提高了程序效率;
(2)以上在gpu中進行的步驟都可用opengl實現(xiàn),使算法具有良好的跨平臺通用性。
附圖說明
圖1為本發(fā)明實施例的工作流程圖;
圖2為本發(fā)明實施例中生成查找表步驟的工作流程圖;
圖3為本發(fā)明實施例中對基準(zhǔn)三角面片進行三角剖分的工作流程圖;
圖4為本發(fā)明實施例中對基準(zhǔn)三角面片進行均勻剖分的部分過程示意圖,其中(a)為基準(zhǔn)三角面片,(b)為查找出基準(zhǔn)三角面片的最小內(nèi)角,(c)為對最小內(nèi)角兩邊進行等分,(d)為剖分出的頂三角形,(e)為第一個待剖分的類梯形,(f)為對第一個類梯形上下底進行等分;
圖5為本發(fā)明實施例中對基準(zhǔn)三角面片進行均勻剖分的其他部分過程示意圖,(a)為對第一個類梯形進行三角剖分,(b)為對第二個類梯形進行三角剖分,(c)為最后一個待剖分的類梯形,(d)為對最后一個類梯形進行部分三角剖分,(e)為三角剖分結(jié)果,(f)為對剖分結(jié)果進行cvt優(yōu)化;
圖6為本發(fā)明實施例中生成查找表步驟中提取剖分方案的示意圖。
具體實施方式
以下結(jié)合實施例及其附圖對本發(fā)明作進一步說明。
實施例
參見圖1,本發(fā)明快速分割三角形的光滑自由變形算法包括生成查找表步驟s1、定義變形空間步驟s2、三角均勻剖分步驟s3、模型嵌入步驟s4、幾何變形步驟s5、法向變形步驟s6、幾何微調(diào)步驟s7和細(xì)分繪制步驟s8。
生成查找表步驟s1,預(yù)計算一系列不同形狀基準(zhǔn)三角面片的剖分方案并進行存儲,形成一張查找表。
參見圖2,生成查找表步驟s1包括計算等分段數(shù)步驟s11、三角剖分步驟s12、生成剖分方案步驟s13和存儲剖分方案步驟s14。
計算等分段數(shù)步驟s11,在本實施例中將以下剖分中所使用的基準(zhǔn)等分段長度控制參數(shù)l設(shè)置為1,按照經(jīng)驗,對于一條邊等分成30段以上并不會顯著提高其計算精度,反而會使計算開銷提高,并影響程序性能,因此,在本實施例中將各邊的長度設(shè)置在30以內(nèi),對所有邊長為
三角剖分步驟s12,對基準(zhǔn)三角面片進行三角剖分。
參見圖3,三角剖分步驟s12包括等分步驟s121、連接等分點步驟s122、剖分四邊形步驟s123、剖分類梯形步驟s124和優(yōu)化步驟s125。
等分步驟s121,如圖4(b)所示,根據(jù)初始基準(zhǔn)三角面片1的頂點坐標(biāo),計算其邊11、邊12及邊13的長度,然后采用排序法對三邊長度進行升序排列,其中位于第一位的邊13所對的角α為初始基準(zhǔn)三角面片1的最小內(nèi)角。
依據(jù)邊11與邊12的端點坐標(biāo),計算它們的等分點坐標(biāo),對于最小內(nèi)角具體的一邊,例如邊11,計算其等分點坐標(biāo)時,設(shè)其兩個端點的坐標(biāo)為p1,p2,則
連接等分點步驟s122,參見圖4(d),連接鄰近最小內(nèi)角頂點的兩個等分點,形成頂三角形2與待剖分四邊形3。
剖分四邊形步驟s123,如圖4(d)所示,以待剖分四邊形3與頂三角形2共有的端點為起點,對應(yīng)連接待剖分四邊形3上的等分點,剖分成若干個類梯形,如圖4(e)的實線部分為第一個類梯形31。
剖分類梯形步驟s124,以如圖4(e)所示的第一個類梯形31為例,依據(jù)基準(zhǔn)等分段長度控制參數(shù)l,對第一個類梯形31的上底與下底進行等分,結(jié)果如圖4(f)所示;沿同一連接方向,比如由圖中的左向右,將對應(yīng)連接上底與下底等分點形成的四邊形用其短對角線進行剖分,結(jié)果如圖5(a)所示。
從上至下,依序?qū)Ω鱾€類梯形進行三角剖分,在剖分過程中,如圖5(b)所示,第二個類梯形32上底與下底的等分段數(shù)相等,連接其上底與下底上對應(yīng)等分點,形成若干四邊形,根據(jù)四邊形的四個頂點計算其兩條對角線的長度,沿著較短的那條對角線分割四邊形,最終使每個四邊形分割成兩個三角形。
如圖5(c)所示,第三個類梯形33的上底分割段數(shù)比下底少1,對上底和下底的均分點進行編號,上底的編號從左到右為1到k,下底的編號從左到右為1到k+1,在第三個類梯形33上,先連接上下底編號相同的點。除此之外,對于上底中的每個點,若其編號為j,則使將其與下底中編號為j+1的點相連,最終將第三個類梯形33分割成多個鋸齒狀的三角形。
若最小內(nèi)角兩邊上的等分點數(shù)不等,如圖5(c)、圖5(d)所示,重復(fù)剖分四邊形步驟s123與剖分類梯形步驟s124,以距離最小內(nèi)角頂點最遠(yuǎn)的類梯形為待剖分四邊形進行三角剖分,且以位于最小內(nèi)角等分點數(shù)較少的邊上的頂點為起點。將距離最小內(nèi)角頂點最遠(yuǎn)的類梯形逆時針旋轉(zhuǎn)90度,使該類梯形和待剖分四邊形類似,延長該類梯形的上底和下底,相交后與最小內(nèi)角的另一條邊的剩余部分構(gòu)成一個三角形,把該三角形當(dāng)作如圖4(a)所示的基準(zhǔn)三角面片,并對其執(zhí)行等分步驟s121至剖分類梯形步驟s124,在剖分過程,初始基準(zhǔn)三角面片1被分割成如圖5(d)所示,直至初始基準(zhǔn)三角面片1剖分成如圖5(e)所示。
優(yōu)化步驟s125,如圖5(f)所示,采用cvt優(yōu)化方法對基準(zhǔn)三角面片1剖分結(jié)果進行優(yōu)化,并對該結(jié)果進行5次cvt優(yōu)化,使子三角形更加均勻。cvt優(yōu)化方法為duq,faberv,gunzburgerm.centroidalvoronoitessellations:applicationsandalgorithms[j].siamreview,1999,41(4):637–676中介紹的方法。
生成剖分方案步驟s13,將剖分結(jié)果生成剖分方案。
提取剖分結(jié)果中的中各子三角形頂點的重心坐標(biāo)及各頂點的連接關(guān)系,重心坐標(biāo)為以基準(zhǔn)三角面片頂點坐標(biāo)為參照的坐標(biāo),如圖6所示如圖5(f)中頂三角形與第一類梯形的剖分結(jié)果示意圖的,依序?qū)ζ涓髌史贮c進行編號為a、b、c、d、e、f,首先計算各剖分點的重心坐標(biāo),以點a為例,不防設(shè)基準(zhǔn)三角形的三個頂點為位置為p1,p2,p3,點a的位置為pa。我們對方程pa=u*p1+v*p2+w*p3進行求解,求得的(u,v,w)就是點a的重心坐標(biāo),即相對三個頂點的參照坐標(biāo)。連接關(guān)系為由子三角形頂點編號組成的數(shù)組構(gòu)成的集合:(a,f,d)、(b,d,e)、(e,d,f)、(e,f,c)。將各子三角形頂點的重心坐標(biāo)及各頂點的連接關(guān)系存儲到查找表中,并以三邊的等分段數(shù)為查找表的索引。
定義變形空間步驟s2,定義一個b樣條體作為包裹待變形模型的變形空間。
三角均勻剖分步驟s3,用三角均勻剖分算法將待變形模型中的初始三角面片分割成若干個子三角形,以減小變形后的誤差。
從文件中讀取待變形模型并對待變形模型進行三角化;
接收對等分段長度控制參數(shù)l′的設(shè)定,用戶根據(jù)初始三角面片尺寸及其對精度的要求,通過輸入界面對控制參數(shù)l′進行設(shè)定,使用戶能夠更好地控制變形誤差;
依據(jù)等分段長度控制參數(shù)l′,計算初始三角面片三邊的等分段數(shù),等分段數(shù)為初始三角面片的邊長度與等分段長度控制參數(shù)l′之商的向上取整值;
以三邊的等分段數(shù)為索引從查找表中獲取對應(yīng)剖分方案中等分點的重心坐標(biāo)與子三角形頂點的連接關(guān)系;
根據(jù)初始三角面片三個頂點在當(dāng)前坐標(biāo)系中的坐標(biāo)與對應(yīng)分割方案中的等分點重心坐標(biāo),用公式pa=u*p1+v*p2+w*p3計算出各等分點在當(dāng)前坐標(biāo)系中的坐標(biāo),其中,(u,v,w)為等分點重心坐標(biāo),p1,p2,p3為初始三角形的頂點坐標(biāo)。pa為計算所得的等分點的坐標(biāo);
根據(jù)連接關(guān)系連接各等分點對初始三角面片進行三角剖分。
模型嵌入步驟s4,將模型嵌入變形空間,計算剖分后產(chǎn)生的每個三角面片的采樣點在變形空間中的參數(shù)坐標(biāo)和法向。
幾何變形步驟s5,用戶改變變形空間的控制頂點,對變形空間進行變形。保持采樣點在變形空間中參數(shù)坐標(biāo)不變,計算采樣點在世界坐標(biāo)系下的新的位置,根據(jù)得到變形后的采樣點,用帶約束的擬合方法計算出每個三角面片變形后的結(jié)果,該結(jié)果用三角貝塞爾曲面片表示。
法向變形步驟s6,計算采樣點在世界坐標(biāo)系下的新的法向,根據(jù)得到變形后的采樣點的法向,用帶約束的擬合方法計算出每個三角面片變形后的法向量場,該結(jié)果用三角貝塞爾曲面片表示。
幾何微調(diào)步驟s7,調(diào)整幾何變形步驟s5得到的三角貝塞爾曲面片的控制頂點,使變形結(jié)果更加光滑自然。
細(xì)分繪制步驟s8,將法向變形步驟s6和幾何微調(diào)步驟s7中的結(jié)果進行細(xì)分后繪制。
上述實施例過程簡單,適合在gpu中實現(xiàn)。
最后,將該算法用opengl4.3實現(xiàn),不僅具有良好的跨平臺通用性,且可以在所有支持opengl4.3及以上版本的平臺中運行。并對一個具有46742個面片的模型進行變形分析,本發(fā)明方法在三角均勻剖分步驟中只需26.093ms,而現(xiàn)有光滑自由變形的三角剖分步驟則需5131.883ms,即比現(xiàn)有技術(shù)快了近200倍。此外,本發(fā)明算法可分別在筆記本電腦和手機上運行,體現(xiàn)了該算法的跨平臺通用性。