王 華, 馬亞丹, 李紳紳, 徐 靜, 徐明亮, 張 旭, 金保華
(1.鄭州輕工業(yè)大學(xué) 計(jì)算機(jī)與通信工程學(xué)院,河南 鄭州 450001; 2.鄭州大學(xué) 圖書館,河南 鄭州 450001; 3.鄭州大學(xué) 信息工程學(xué)院,河南 鄭州 450001)
隨著虛擬現(xiàn)實(shí)技術(shù)和人機(jī)交互技術(shù)的迅速發(fā)展,實(shí)現(xiàn)三維場景中實(shí)時(shí)的、任意形狀的蒙版擦除動(dòng)畫,可極大提高人機(jī)交互的體驗(yàn),具有較為重要的現(xiàn)實(shí)意義。
目前國內(nèi)外已有大量相當(dāng)成熟的技術(shù)和軟件系統(tǒng)用于實(shí)現(xiàn)蒙版擦除動(dòng)畫。例如,photoshop軟件采用基于alpha通道圖像融合技術(shù)實(shí)現(xiàn)的二維底版/蒙版圖像的蒙版擦除[1-3]。在水果忍者、說劍等擁有豐富擦除交互效果的虛擬現(xiàn)實(shí)游戲中,用戶通過各種交互方式擦除場景蒙圖,實(shí)現(xiàn)用戶任意需求形狀的實(shí)時(shí)蒙版擦除動(dòng)畫。 上述軟件可以實(shí)現(xiàn)任意形狀的擦除動(dòng)畫,但主要是用于實(shí)現(xiàn)二維圖像的擦除,通常并不支持三維虛擬場景中的蒙版擦除動(dòng)畫。 三維仿真軟件如Unity 3D、Unreal Engine 4等,利用其強(qiáng)大的shader功能,在三維場景中將包含擦除形狀信息的圖像和蒙版圖像進(jìn)行紋理透明度混合,從而實(shí)現(xiàn)三維場景中任意位置處的蒙版擦除動(dòng)畫[4-5]。但是,針對多次擦除的可視化,需要?jiǎng)?chuàng)建加載多個(gè)shader,非常耗時(shí)。
針對上述問題,筆者提出了一種三維場景中基于模板的個(gè)性化蒙版擦除動(dòng)畫方法。 方法包含擦除模板制作和擦除動(dòng)畫繪制2個(gè)步驟,如圖1所示。 在擦除模板制作過程中,首先對包含形狀信息的圖像進(jìn)行矢量化處理,其次進(jìn)行矩陣標(biāo)準(zhǔn)化及相應(yīng)的移位變換和仿射變換,使得擦除模板數(shù)據(jù)格式統(tǒng)一且和場景蒙版數(shù)據(jù)大小比例相當(dāng),為后續(xù)動(dòng)畫繪制效率提升提供標(biāo)準(zhǔn)化且合理有效的高質(zhì)量擦除模板數(shù)據(jù)。 在擦除動(dòng)畫繪制過程中,采用三維空間正射投影分層繪制的方法,先繪制三維場景,然后在其近裁剪面繪制蒙版,并通過alpha通道不同的參數(shù)設(shè)置來區(qū)分當(dāng)前已擦除部分集合和未擦除部分集合。 實(shí)驗(yàn)結(jié)果表明,本文方法可以實(shí)現(xiàn)三維場景中任意個(gè)性化擦除形狀的定制,并且可以實(shí)現(xiàn)任意大小,任意旋轉(zhuǎn)角度的蒙版擦除動(dòng)畫。
本文方法主要具有如下優(yōu)點(diǎn):首先,方法支持任意個(gè)性化的擦除形狀數(shù)據(jù),可以是任意凸/凹多邊形,也可以是任意單/多連通區(qū)域形狀; 其次,方法可以在蒙版上實(shí)現(xiàn)不同大小、不同形狀、不同旋轉(zhuǎn)角度的個(gè)性化擦除;最后,也是最重要的,方法可以實(shí)現(xiàn)任意三維場景內(nèi)的大規(guī)模實(shí)時(shí)蒙版擦除動(dòng)畫。
現(xiàn)有蒙版擦除技術(shù)主要指的是二維圖像摳圖技術(shù)。 以圖像的統(tǒng)計(jì)特征以及近鄰像素的相關(guān)性為依據(jù),圖像摳圖方法可以簡單地分為基于采樣的方法、基于傳播的方法、采樣和傳播相結(jié)合的方法。
基于采樣的方法[3-4]基本思想:假設(shè)未知區(qū)域的像素可以依據(jù)已知的給定區(qū)域附近前景顏色和背景顏色進(jìn)行估計(jì),利用這些已知給定的樣本像素,計(jì)算出透明度α的值, 用于未知區(qū)域內(nèi)像素的劃分。 如:Berman等[3]設(shè)計(jì)了Knockkout方法,這也是著名的Photoshop插件采用的方法。 Ruzon等[4]將統(tǒng)計(jì)學(xué)方法用于摳圖方法,采用概率統(tǒng)計(jì)的方法實(shí)現(xiàn)了圖像的摳圖。 Chuang[5]提出了Bayes摳圖算法等。
與基于采樣的方法不同,基于傳播的方法[6-11]不對前景和背景的顏色進(jìn)行估計(jì),而是根據(jù)圖像的統(tǒng)計(jì)特性做出假設(shè),從顏色、空間位置等方面描述近鄰像素之間的關(guān)系。 如由Levin等[6]提出的基于封閉模式的摳圖模型、Chen等[9]提出了K近鄰摳圖模型以及Sun[8]提出的泊松摳圖模型,創(chuàng)造性地將偏微分方程引入摳圖領(lǐng)域,并取得了不錯(cuò)的實(shí)驗(yàn)效果。
基于采樣的方法和基于傳播的方法都有其優(yōu)點(diǎn)和缺點(diǎn),為了更好地將2種方法的優(yōu)點(diǎn)相結(jié)合,同時(shí)盡力避免其不足。近年來不少學(xué)者提出了將基于采樣和傳播方法相結(jié)合的方法[12-14],如:shared-matting方法[12]、gobal matting方法[13]、魯棒摳圖方法[14]等。 其中魯棒摳圖方法是一種具有代表性的基于采樣和傳播相結(jié)合的方法。 該方法解決了采樣不準(zhǔn)確以及前景和背景色階相似或重疊的問題,提高了摳圖的質(zhì)量。 同時(shí),通過添加信任系數(shù),增加采樣距離等,較好地均衡了準(zhǔn)確性和魯棒性。
上述蒙版擦除技術(shù)一般是根據(jù)用戶提供的樣本像素,對圖像中用戶感興趣的像素區(qū)域進(jìn)行摳圖。 這些方法主要是基于二維圖像的摳圖處理,很難移植至三維場景中的蒙版擦除動(dòng)畫中。
如圖1所示,本文方法主要包括擦除模板制作和擦除動(dòng)畫繪制,擦除模板制作包括形狀提取和模板制作,只需輸入包含形狀信息的圖像數(shù)據(jù)、場景數(shù)據(jù)以及蒙版圖像數(shù)據(jù),本文方法即可實(shí)現(xiàn)三維場景內(nèi)的任意形狀的蒙版擦除。
圖1 本文方法技術(shù)框架Figue 1 Technical framework of this method
2.1.1 形狀提取
首先要導(dǎo)入包含用戶需求形狀信息的圖像數(shù)據(jù); 然后對圖像進(jìn)行摳圖處理以獲取圖像中用戶需要的形狀邊界;最后根據(jù)摳圖獲得的邊界信息,得到1張包含形狀信息且前景背景區(qū)分明顯、不包含任何噪聲的灰度圖。
本文中用戶需求形狀可以由任意凸多邊形或者凹多邊形構(gòu)成,也可以是任意單連通或多連通區(qū)域。
采用photoshop軟件直接摳取獲得上述圖像中的形狀信息。以上述邊界為前景圖和背景圖的邊界,構(gòu)建新的圖像。 對新圖像前景和背景分別進(jìn)行純色區(qū)域填充。 填充過程采用灰度像素填充,使得新圖像為灰度圖像, 所有像素僅有2類取值,這里設(shè)2類像素值的灰度值分別為(0,0,0)和(200,200,200),其中灰度值為(0,0,0)組成的區(qū)域即為用戶需求形狀區(qū)域,灰度值為(200,200,200)組成的區(qū)域?yàn)楸尘皥D區(qū)域。
2.1.2 模板制作
將上述柵格形狀數(shù)據(jù)經(jīng)處理制作成具有一定格式的矢量數(shù)據(jù),并將其作為模板供后續(xù)繪制使用。 具體過程包含3個(gè)部分,如圖2所示。
圖2 模板制作過程Figue 2 Making process of template
(1)柵格數(shù)據(jù)矢量化:用戶需求形狀通常是不規(guī)則的,形狀圖形還有可能是多連通的,如何采用一種通用的矢量化方法存儲(chǔ)形狀數(shù)據(jù)顯得至關(guān)重要。
筆者借用多邊形掃描轉(zhuǎn)換算法的思路,采用逐行掃描的思路來獲得用戶需求形狀的邊界矢量數(shù)據(jù),將由點(diǎn)陣表示的形狀柵格數(shù)據(jù)轉(zhuǎn)換為易于進(jìn)行幾何變換的邊界坐標(biāo)序列矢量數(shù)據(jù),從而實(shí)現(xiàn)柵格數(shù)據(jù)的矢量化。 具體來說,柵格數(shù)據(jù)矢量化過程包括:求交、排序、配對。
求交:也就是求交點(diǎn),計(jì)算按行掃描得到的掃描線和需求形狀各邊的交點(diǎn),如圖3所示。
圖3 柵格數(shù)據(jù)矢量化掃描轉(zhuǎn)換示意圖Figue 3 Process of row-by-row scanning
排序:交點(diǎn)求出后,要對交點(diǎn)進(jìn)行排序,將這些交點(diǎn)按照沿圖像水平方向坐標(biāo)遞增的順序進(jìn)行排列。
配對:將沿水平方向按行排序后的交點(diǎn)第1個(gè)和第2個(gè)配對,第3個(gè)和第4個(gè)配對,依此類推,每對交點(diǎn)表示掃描線和用戶需求形狀區(qū)域的左右邊界。
至此,得到采用二維坐標(biāo)序列表示的形狀邊界矢量數(shù)據(jù)集P1:
(1)
式中:(xi,2j-1yi)和(xi,2jyi)(i∈[1,t],j∈[1,si])表示掃描線和形狀區(qū)域的左右邊界交點(diǎn);t表示掃描線的條數(shù);2si表示第i(i∈[1,t])條掃描線和形狀區(qū)域邊界交點(diǎn)的個(gè)數(shù)。
令pij=(xi,yj),i∈[1,t],j∈[1,2si]則
(2)
式中:P1為按行掃描得到的用戶需求形狀邊界坐標(biāo)對序列集合。
若將序列集合中{pi1,pi2,…p2si}(i∈[1,t])作為第i行,不難發(fā)現(xiàn),式(2)中每行的坐標(biāo)對個(gè)數(shù)并不一定相等,即si≠sj,(i≠j且i,j∈[1,t])。 這是因?yàn)閷τ诓煌挠脩粜枨笮螤?,掃描線掃描不同行得到的坐標(biāo)對個(gè)數(shù)并不一定相等。
(2)矩陣化:為了方便后續(xù)進(jìn)行數(shù)據(jù)變換和操作, 接下來對集合P1進(jìn)行矩陣標(biāo)準(zhǔn)化處理。 集合P1矩陣化的過程,即將P1補(bǔ)全為矩陣的過程。 為使得每行數(shù)據(jù)個(gè)數(shù)相等,采用矩陣P表示該方陣,設(shè)P=Pm×n=(pij)m×n,則m=t,n=max{2si|i∈[1,m]}。
補(bǔ)全規(guī)則如下:對于?i∈[1,t],如果j∈(2si,n],則pij=(-10 000,-10 000)。
由于2.1.2節(jié)中矢量化掃描中通過按行配對,使得P中pi,2j-1和pi,2j(i∈[1,m]且j∈[1,si])分別為同一連通區(qū)域的左右邊界, 但是并無法保證pi,2j-1和pi,2j(i∈[1,m]且j∈[1,si])為同一連通區(qū)域的左邊界。
此外,為方便后續(xù)直接對形狀區(qū)域進(jìn)行紋理填充,這里對矩陣進(jìn)行按列配對的移位變換。變換的偽代碼如下。
For (i=2;i<=n;i++)
For (j=1;j If (xi-1,2j-1>xi,2j) For (h=i-1;h>=1;h--) For (k=2si;k>=2j+2;k--) xh,k=xh,k-2;yh,k=yh,k-2; End xh,k=-10 000;yh,k=-10 000 xh,k-1=-10 000;yh,k-1=-10 000 End End Else if (xi-1,2j For (k=2si;k>=2j+2;k--) xi,k=xi,k-2;yi,k=yi,k-2; End xi,k=-10 000;yi,k=-10 000; xi,k-1=-10 000;yi,k-1=-10 000; End End End (3)仿射變換:上述矩陣化后的形狀邊界數(shù)據(jù)直接用來繪制仍存在如下問題:①相對于蒙版而言,形狀邊界坐標(biāo)值過大,需要經(jīng)過平移后才能將形狀繪制至蒙版上。②相對于蒙版而言,形狀圖形過大,需要進(jìn)行縮放后才能將形狀繪制至蒙版上。 筆者通過對矢量數(shù)據(jù)做平移和縮放變換來避免上述兩種情況的發(fā)生。 具體通過對矩陣P作平移和縮放變換2種仿射變換來實(shí)現(xiàn)。 (a) 縮放變換: P1=PA, (b) 平移變換: P2=[P11]B, 根據(jù)2.1得到的模板矢量數(shù)據(jù),在三維場景中的蒙版上擦除出用戶需求形狀的場景。 受圖像摳圖技術(shù)以及現(xiàn)有三維仿真引擎中采用shader實(shí)現(xiàn)蒙版擦除工作的啟發(fā), 筆者采用三維空間正射投影分圖層繪制的方式實(shí)現(xiàn)形狀繪制。即在正射投影構(gòu)成的三維空間中,沿觀察者視線方向上,先繪制底版信息,然后在其正前方繪制蒙版圖像。在蒙版繪制中,已被擦除區(qū)域的alpha通道設(shè)置為0,即完全透明,其他區(qū)域的alpha通道設(shè)置為1,即完全不透明。 其中,已被擦除區(qū)域?yàn)楫?dāng)前時(shí)刻位置,即所有用戶在蒙版上所有擦除形狀的集合。 為驗(yàn)證本文方法的有效性,這里分兩部分對本文方法進(jìn)行驗(yàn)證:方法豐富的繪制效果以及方法的計(jì)算效率。 測試環(huán)境:CPU為Intel(R) Core 8 Xeoni7-4790,RAM為4.0 G。 3.1.1 對各種個(gè)性化擦除形狀的支持 本文方法支持各類擦除形狀,可以是單連通區(qū)域,也可以是多連通區(qū)域,可以是凸多邊形,也可以是凹多邊形。如圖4所示分別為采用橢圓形、五角星、紅旗、以及多連通凹多邊形繪制的效果圖。 可以看出,本文方法對不同用戶需求形狀繪制的效果非常好。 圖4 不同個(gè)性化擦除形狀繪制示意圖Figue 4 Erasure animations with different erasure shapes 3.1.2 指定形狀下個(gè)性化的變形效果 任意大小繪制:本文方法制作出來的形狀數(shù)據(jù)模板是經(jīng)過縮放變換后的數(shù)據(jù),用戶可以通過設(shè)置不同的縮放系數(shù)來實(shí)現(xiàn)形狀大小的變化,如圖5所示。 由于本文方法繪制過程中無法使用OpenGL列表等方法進(jìn)行優(yōu)化加速,為了提高繪制效率,本方法減少了繪制過程匯總的計(jì)算量,目前暫不支持繪制過程中的縮放變換。 任意角度繪制:本文方法制作的形狀數(shù)據(jù)模板是唯一的。但是,在繪制過程中,通過旋轉(zhuǎn)變換,仍可以繪制出各種旋轉(zhuǎn)角度的形狀圖形,繪制擦除次數(shù)增加時(shí)動(dòng)畫效果:指定擦除形狀,擦除底板和擦除蒙版后,隨著擦除次數(shù)的增加,本文方法可以自動(dòng)生成擦除動(dòng)畫,圖7示為擦除次數(shù)增加時(shí),本文方法生成的擦除動(dòng)畫效果截圖。 圖5 任意形狀大小圖形繪制Figue 5 Erasure animations with different size of the shaking actions 效果如圖6所示。 圖6 不同旋轉(zhuǎn)角度形狀圖形繪制Figue 6 Erasure animations with different rotation angles of the shaking actions 圖7 擦除動(dòng)畫效果截圖Figue 7 The snapshot of the erase animations 針對同一模板,測試了形狀繪制次數(shù)和計(jì)算時(shí)間的關(guān)系。 圖8 形狀擦除次數(shù)和相應(yīng)計(jì)算時(shí)間的關(guān)系Figue 8 Relationship between the number of shape erasures and corresponding calculation time 測試采用的形狀邊界頂點(diǎn)個(gè)數(shù)為1 192個(gè),LOD級別為1,即采用最高精度繪制,測試結(jié)果如圖8所示。從圖8可以看出,對于上述形狀,本文方法可以實(shí)時(shí)繪制2 000個(gè)以上。 這個(gè)數(shù)值看起來并不大, 原因如下:首先是由于對形狀實(shí)行了最高精度的繪制; 其次是由于每個(gè)形狀圖像位置不同,所以擦除出來的場景數(shù)據(jù)像素也不相同,導(dǎo)致形狀貼圖紋理隨之變化,無法直接采用OpenGL中顯示列表之類的繪制方法,每次都需要進(jìn)行紋理映射計(jì)算繪制,并且為了實(shí)現(xiàn)繪制的多樣化,每次繪制還進(jìn)行了平移和旋轉(zhuǎn)變換。 具體應(yīng)用中,可以采用如下方法來提高本文的繪制效率: (1) 根據(jù)蒙版距離觀察者視點(diǎn)的遠(yuǎn)近,采用不同的LOD級別實(shí)現(xiàn)圖形繪制。 (2) 對形狀頂點(diǎn)進(jìn)行壓縮,有效減少頂點(diǎn)個(gè)數(shù)。 筆者提出了一種三維場景中基于模板的個(gè)性化蒙版擦除動(dòng)畫方法,通過模板制作和動(dòng)畫繪制可以快速地在蒙版上擦除出三維場景中個(gè)性化的形狀,從而間接地實(shí)現(xiàn)了蒙版擦除、展示三維場景的功能。 實(shí)驗(yàn)證明,本文方法支持各種場景數(shù)據(jù)的輸入,也支持各類擦除形狀,并且本文方法有較高的計(jì)算效率。 本文方法可以通過和移動(dòng)終端相結(jié)合,用于各類互動(dòng)游戲中,實(shí)現(xiàn)刷屏等功能。2.2 擦除動(dòng)畫繪制
3 實(shí)驗(yàn)
3.1 個(gè)性化動(dòng)畫效果
3.2 圖形繪制效率測試
4 結(jié)論