胡中天,葉 綠
(浙江科技學(xué)院 信息與電子工程學(xué)院,杭州 310023)
?
實(shí)時交互式三維模型紋理映射算法
胡中天,葉 綠
(浙江科技學(xué)院 信息與電子工程學(xué)院,杭州 310023)
針對三維動畫制作中模型紋理繪制不夠直觀、效率低下等問題,提出一種實(shí)時交互式三維模型紋理映射算法,即通過交互式三維拾取準(zhǔn)確找到三維模型與二維紋理圖像對應(yīng)點(diǎn),直接在三維模型表面使用筆刷進(jìn)行紋理圖像的繪制。實(shí)驗(yàn)在Unity 3D引擎中進(jìn)行,結(jié)果表明用戶可以使用該算法進(jìn)行紋理的交互式設(shè)計與合成,其筆刷定位精確,繪制過程幀率穩(wěn)定,繪制得到的紋理圖像質(zhì)量較高。該方法對比傳統(tǒng)制作流程中對三維模型展開UV,在二維圖像處理軟件中進(jìn)行紋理繪制的方法更為直觀、高效。
紋理映射;三維重建;二維圖像;交互
紋理映射是計算機(jī)圖形學(xué)中常用的一種增強(qiáng)虛擬物體真實(shí)感的技術(shù)。隨著近年來三維技術(shù)的發(fā)展,三維動畫制作、虛擬現(xiàn)實(shí)、工業(yè)仿真等行業(yè)中都對虛擬物體的真實(shí)感與精度提出了更高的要求,紋理映射也被廣泛應(yīng)用到各種實(shí)際項目中。
1974年Catmull[1-3]首次提出了紋理映射的概念,通過紋理空間內(nèi)的UV坐標(biāo)與三維物體表面局部坐標(biāo)之間的映射關(guān)系,將紋理圖像中的彩色參數(shù)值映射到對應(yīng)位置的三維曲面上,使得三維物體表面能夠呈現(xiàn)紋理圖像中的色彩效果。1986年Bier等提出了兩步映射法[4],三維物體表面的彩色參數(shù)值由中介曲面二次映射得到,這種紋理圖像先被映射到中介曲面的方法,提高了紋理映射的效率,但應(yīng)用于復(fù)雜結(jié)構(gòu)的物體表面時可能出現(xiàn)破洞、接縫等問題。1999年Niem[5]提出利用多相機(jī)多角度拍攝不同焦距的圖像素材,再將紋理圖像映射于重新剖分三角面的物體模型表面的映射方法,該方法映射效果較好,但算法比較復(fù)雜,不易實(shí)現(xiàn)。文獻(xiàn)[6]中提出一種基于物體單色幾何模型的紋理映射算法,以三角面片作為中介面,能夠?qū)⒄掌蛄猩系募y理圖像映射到圓柱模型上,并通過拼接、變形等過程獲得物體的紋理;該方法不需要質(zhì)量很高的原始紋理,允許在運(yùn)行時進(jìn)行交互操作,但對于復(fù)雜模型表面可能存在部分位置的紋理無法映射的情況,且計算量較大。文獻(xiàn)[7]中提出基于Catmull映射方法的一種交互式紋理映射方法,該方法通過三維拾取選擇紋理坐標(biāo)與三維曲面的對應(yīng)特征點(diǎn)進(jìn)行紋理映射,只通過鼠標(biāo)選取一些特征點(diǎn)后將一張紋理貼圖整體映射到模型表面,其交互操作仍有一定的局限性。
在上述的映射方法中,映射得到的結(jié)果紋理中無法保證紋理貼圖的完整性,如出現(xiàn)缺口、接縫等。文獻(xiàn)[8]提出利用梯度融合方法以消除紋理拼接邊界的顏色差異并消除貼圖接縫。文獻(xiàn)[9]提出一種多參數(shù)加權(quán)的紋理映射算法以消除紋理接縫,對網(wǎng)格結(jié)構(gòu)誤差較大的區(qū)域也能取得良好效果,并可應(yīng)用于城市級別的大場景三維重建。但是,修復(fù)算法的計算量都較大,難以實(shí)現(xiàn)實(shí)時交互。
筆者在分析、總結(jié)前人研究的基礎(chǔ)上,提出一種基于離散面片的實(shí)時交互式三維模型紋理映射算法。該算法使用戶能夠通過筆刷實(shí)時繪制方式進(jìn)行貼圖的映射,其算法實(shí)現(xiàn)簡單,計算量小,映射結(jié)果質(zhì)量較高,不存在貼圖接縫問題。
1.1 計算機(jī)三維圖形渲染管線
圖1為三維圖形渲染管線,也稱為渲染流水線,是顯示芯片內(nèi)部處理圖形信號相互獨(dú)立的并行處理單元。渲染管線主要分為應(yīng)用程序階段、幾何階段、光柵階段3個階段。應(yīng)用程序階段將計算好的頂點(diǎn)坐標(biāo)、法向量、紋理坐標(biāo)、紋理數(shù)據(jù)通過數(shù)據(jù)總線傳給圖形硬件,作為進(jìn)一步處理的源數(shù)據(jù)。幾何階段主要負(fù)責(zé)頂點(diǎn)坐標(biāo)變換、光照、裁剪、投影及屏幕映射。光柵階段則是將像素的顏色值寫入幀緩沖。
圖1 三維圖形渲染管線Fig.1 3D graphics rendering pipeline
1.2 三維物體表面與二維紋理空間的位置映射
圖2 立方體UV展開Fig.2 Cube’s UV unfolding
渲染管線的光柵化階段中包括一步紋理操作,根據(jù)像素的紋理坐標(biāo)查詢對應(yīng)的紋理值。具體而言,如對一個三維空間下的立方體進(jìn)行展開(圖2),將它的6個面都展開到同一個平面后就可以方便地對每個表面進(jìn)行顏色紋理的繪制。這個過程就是三維模型的UV展開,三維物體表面與二維紋理空間的位置映射實(shí)質(zhì)上就是這樣找到模型表面位置和二維紋理坐標(biāo)對應(yīng)關(guān)系的過程。
2.1 交互式三維拾取
渲染管線的幾何階段中,根據(jù)頂點(diǎn)坐標(biāo)變換的先后順序,主要有模型坐標(biāo)空間、世界坐標(biāo)空間、觀察坐標(biāo)空間和屏幕坐標(biāo)空間。模型坐標(biāo)空間中記錄模型頂點(diǎn)的坐標(biāo)值,這些值是在建立模型時得到的;世界坐標(biāo)空間中記錄世界坐標(biāo)原點(diǎn),物體的世界空間坐標(biāo)通過物體自身位置與原點(diǎn)位置相比較得到;觀察坐標(biāo)空間則是以攝像機(jī)為原點(diǎn),由視線方向、視角和遠(yuǎn)近平面組成的一個視錐空間;屏幕坐標(biāo)空間是一個單位立方體空間,這個立方體被稱為規(guī)范立方體(CCV),CCV的近平面即對應(yīng)最終用戶所看到的二維屏幕空間。
交互式三維拾取操作是指當(dāng)用戶在屏幕上用鼠標(biāo)點(diǎn)擊某個圖元時,應(yīng)用程序能夠返回該圖元的某些相關(guān)信息。拾取過程中,首先獲取用戶在屏幕空間下點(diǎn)擊的坐標(biāo)位置,轉(zhuǎn)換為觀察坐標(biāo)空間下的坐標(biāo)位置,接著從觀察坐標(biāo)空間轉(zhuǎn)換到世界坐標(biāo)空間,獲取處于當(dāng)前世界坐標(biāo)空間目標(biāo)點(diǎn)的三維物體,最終將目標(biāo)點(diǎn)坐標(biāo)轉(zhuǎn)換到模型坐標(biāo)空間下,再通過三維物體表面與二維紋理空間的位置映射關(guān)系,得到對應(yīng)的二維紋理坐標(biāo)。
對于模型上即空間中一點(diǎn)的世界坐標(biāo)系為[Xw,Yw,Zw]T,轉(zhuǎn)換到相機(jī)坐標(biāo)系時增加一維用齊次坐標(biāo)來表示它,以方便對它進(jìn)行平移操作:
(1)
式(1)中:[Xc,Yc,Zc]T為相機(jī)坐標(biāo);[Xw,Yw,Zw,1]T為模型所在的世界坐標(biāo);R為旋轉(zhuǎn)矩陣;T為平移矩陣。
忽略畸變過程,相機(jī)坐標(biāo)系通過焦距對角矩陣和畸變系數(shù)轉(zhuǎn)換到圖像物理坐標(biāo)系:
(2)
式(2)中:f為焦距;[Xc,Yc,Zc]T為相機(jī)坐標(biāo)。
圖像物理坐標(biāo)系通過像素轉(zhuǎn)換矩陣轉(zhuǎn)換到像素坐標(biāo)系:
(3)
式(3)中:dx和dy分別為x方向和y方向的一個像素所占的長度單位;u0,v0表示圖像的中心像素坐標(biāo)和圖像原點(diǎn)像素坐標(biāo)之間相差的橫向和縱向像素數(shù);[X,Y,1]T為歸一化后的圖像物理坐標(biāo)。
故從鼠標(biāo)點(diǎn)擊拾取的屏幕像素坐標(biāo)點(diǎn)(u,v)轉(zhuǎn)換到物體被拾取點(diǎn)所在的世界坐標(biāo)(Xw,Yw,Zw)的轉(zhuǎn)換過程總公式如下:
2.2 離散化模型表面上色
2.2.1 精確筆刷定位
筆刷作為單獨(dú)的一個三維物體,以平面方式增加透明貼圖渲染,通過鼠標(biāo)在屏幕坐標(biāo)空間下的位置獲取模型坐標(biāo)空間位置后,同時獲取模型表面該坐標(biāo)位置的法線向量,通過這兩個參數(shù)即可確定當(dāng)前位移的筆刷位置及其朝向。
2.2.2 筆刷軌跡的離散化
筆刷軌跡的離散化是將連續(xù)的筆刷移動軌跡離散為不連續(xù)點(diǎn)跡的過程。在用戶移動鼠標(biāo)的過程中,筆刷跟隨鼠標(biāo)緊貼模型表面移動,每間隔一小段時間對筆刷軌跡進(jìn)行采樣,記錄下當(dāng)前筆刷的位置坐標(biāo)。
2.2.3 根據(jù)離散點(diǎn)跡對模型表面上色
圖3 路徑采樣與三維面片創(chuàng)建Fig.3 Path sampling and 3D patch creation
如圖3所示,每進(jìn)行一次采樣,在采樣位置實(shí)例化一個緊貼模型表面的帶顏色三維面片,當(dāng)采樣率足夠高時,三維面片即可組成連續(xù)的線段。三維面片依照產(chǎn)生的次序進(jìn)行命名,可以依據(jù)三維面片的名稱逐個依次刪除來撤銷操作,達(dá)到類似平面圖像處理軟件中歷史記錄的作用。
2.2.4 轉(zhuǎn)換模型表面繪畫信息到紋理貼圖
模型表面的繪畫信息由所有三維面片組成,轉(zhuǎn)換時,對模型表面的顏色進(jìn)行逐像素采樣,將獲取到的顏色值繪制到紋理貼圖的對應(yīng)位置,更新模型的紋理貼圖,并刪除所有三維面片。
2.3 算法主要流程及關(guān)鍵代碼
圖4為實(shí)時交互式三維模型紋理映射算法的主要算法流程,算法關(guān)鍵部分偽代碼:
1)獲取用戶當(dāng)前鼠標(biāo)在屏幕空間的坐標(biāo)位置并轉(zhuǎn)換到模型UV坐標(biāo)。
mouseInputVector←用戶當(dāng)前鼠標(biāo)在屏幕空間的坐標(biāo)位置;
uvRay←從mouseInputVector向觀察方向發(fā)射一條射線;
if uvRay射線檢測返回了碰撞物體 THEN BEGIN
meshCollider←返回的碰撞物體;
collidPosition←計算uvRay與meshCollider碰撞點(diǎn)的世界坐標(biāo);
uvPosition←collidPosition轉(zhuǎn)換為對應(yīng)的紋理坐標(biāo)位置(UV坐標(biāo));
return true;
END
return false;
2)對采樣點(diǎn)創(chuàng)建三維面片。
if 獲取到UV坐標(biāo)且處于繪制狀態(tài) THEN BEGIN
temp_brush←創(chuàng)建面片;
temp_brush.worldPosition←畫刷位置;
temp_brush.localPosition←uvPosition;
temp_brush.localScale←畫刷大小;
temp_brush.name←面片實(shí)例編號名稱;
添加新產(chǎn)生的面片到面片列表;
面片計數(shù)值加一;
END
3)保存當(dāng)前繪制的紋理貼圖。
tex←創(chuàng)建新的2D紋理;
逐像素讀取顏色到tex;
保存紋理貼圖為選定格式;
刪除列表中的面片;
清除場景中的面片實(shí)例;
圖4 實(shí)時交互式三維模型紋理映射算法流程Fig.4 Process of the algorithm for realtime interactive 3D model texture mapping
系統(tǒng)運(yùn)行在一臺Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz四核CPU,NVIDIA GeForce 820M顯卡的計算機(jī)上,Unity 3D版本為5.3.4f1(64 bit),渲染時均使用標(biāo)準(zhǔn)著色器,測試紋理分辨率為2 048×2 048像素大小。
表1所示為交互式三維拾取的部分坐標(biāo)轉(zhuǎn)換結(jié)果。
表1 交互式三維拾取坐標(biāo)轉(zhuǎn)換結(jié)果Table 1 Coordinate conversion results of interactive 3D picking
圖5為不同采樣率下進(jìn)行繪畫能夠獲得的最終效果,采樣率越高,繪畫越接近連續(xù)的線段。圖6是在不同形狀模型表面的繪制效果。圖7(a)是通過添加遮罩改變筆刷形狀后繪制的效果,圖7(b)是對三維面片本身增加圖片作為紋理后,用于繪制組成模型整體紋理的效果,可以產(chǎn)生比純色筆刷繪畫更豐富的色彩效果。
圖5 不同采樣率下的畫線效果Fig.5 Effect of lines drawn at different sampling rates
圖6 不同形狀表面繪制效果Fig.6 Effects of drawing on different shape surface
圖7 增加畫刷遮罩及圖片作為三維面片紋理的繪制效果Fig.7 Effects of drawing with brush cover added and picture as 3D patch’s texture
圖8是在模型原有紋理的基礎(chǔ)上進(jìn)行混合繪制的效果,可以快速高效地增加模型的細(xì)節(jié)且不影響最終貼圖質(zhì)量。
圖8 混合紋理效果Fig.8 Effect of mixed texture
圖9為用于混合映射的原始照片素材,使用不同方法映射于模型表面生成紋理貼圖(圖10)。圖10(a)與(c)為使用兩步映射法的貼圖混合映射生成的紋理貼圖效果與模型效果,在復(fù)雜結(jié)構(gòu)處以及嘴部內(nèi)邊緣處產(chǎn)生了破洞與明顯接縫;而圖10(b)與(d)中,采用本文先創(chuàng)建離散化面片對模型表面上色,再進(jìn)行重采樣創(chuàng)建紋理貼圖的方法,就不存在上述問題。對比文獻(xiàn)[8]中利用梯度融合方法消除紋理拼接邊界的顏色差異的方法與文獻(xiàn)[9]中多參數(shù)加權(quán)的紋理映射算法消除紋理接縫的方法,本文方法不需要額外消耗大量時間進(jìn)行邊界處理。
圖9 用于混合映射的原始紋理素材Fig.9 Original texture assets for mixed mapping
圖10 邊緣效果對比Fig.10 Comparison of marginal effects
圖11為實(shí)驗(yàn)系統(tǒng)運(yùn)行時的實(shí)時系統(tǒng)資源統(tǒng)計,方框中CPU與內(nèi)存占用峰值時段為紋理繪制時段。在模型表面進(jìn)行貼圖繪制時,應(yīng)用程序運(yùn)行幀率始終保持60幀/s以上,最高達(dá)到200幀/s,不會產(chǎn)生卡頓且貼圖像素大小可調(diào),而且保存后的紋理貼圖效果與實(shí)時繪制時效果一致,無偏差。
圖11 系統(tǒng)資源統(tǒng)計Fig.11 Statistics of profiler
對比文獻(xiàn)[5]中的方法,本文算法無需將被映射物體重新分割為三角面,對比文獻(xiàn)[8-9],本文算法無需實(shí)現(xiàn)映射紋理的錯誤邊緣與破洞修復(fù),算法實(shí)現(xiàn)簡單。與文獻(xiàn)[10-13]中的紋理映射方法作對比,本文算法不僅能夠?qū)⒍S圖片直接映射到三維物體表面作為紋理貼圖,還可以讓用戶使用筆刷交互式地進(jìn)行紋理的繪畫,筆刷支持純色也支持使用圖片作為三維面片的紋理進(jìn)行模型的紋理繪制,同時支持大小調(diào)節(jié)與基于遮罩的形狀調(diào)節(jié),從而保證了用戶最大的創(chuàng)作自由度。比起在平面圖像處理軟件中進(jìn)行貼圖繪制的方式,本文方法的繪制方式更為直觀高效,所見即所得。
筆者提出一種實(shí)時交互式三維模型紋理映射算法,通過交互式三維拾取方式直接在三維模型表面使用筆刷進(jìn)行紋理圖像的繪制。筆刷支持純色也支持使用圖片作為三維面片的紋理進(jìn)行模型的紋理繪制,同時支持大小調(diào)節(jié)與基于遮罩的形狀調(diào)節(jié),還支持對歷史記錄進(jìn)行撤銷。對比在平面圖像處理軟件中進(jìn)行貼圖繪制的方式,本文方法的繪制方式更為直觀高效,對提高三維模型貼圖階段制作效率、提升成品質(zhì)量有一定作用。但本文算法目前還不支持類似PhotoShop等傳統(tǒng)平面圖像處理軟件中色階、色調(diào)、曝光度、對比度調(diào)整等更復(fù)雜的圖像處理功能,這是今后需要改進(jìn)的方面。
[1] CATMULL E. A subdivision algorithm for computer display of curved surfaces[R]. Salt Lake City: The University of Utah,1974.
[2] CATMULL E. A hidden-surface algorithm with anti-aliasing[J]. ACM Siggraph Computer Graphics,1978,12(3):6.
[3] CATMULL E, SMITH A R. 3-D transformations of images in scanline order[J].ACM Siggraph Computer Graphics,1980,14(3):279.
[4] BIER E A, SLOAN K R. Two-part texture mappings[J]. IEEE Computer Graphics and Applications,1986,6(9):40.
[5] NIEM W, WINGBERMUHLE J. Automatic reconstruction of 3D objects using a mobile monoscopic camera[J]. Image and Vision Computing,1999,17(2):125.
[6] 陳任,魯東明,潘云鶴.基于幾何模型與照片序列的不規(guī)則物體紋理獲取[J].中國圖象圖形學(xué)報,2003,8(8):902.
[7] 王琰,王明宇.一種交互式紋理映射方法[J].小型微型計算機(jī)系統(tǒng),2011,32(10):2101.
[8] 姜翰青,王博勝,章國鋒,等.面向復(fù)雜三維場景的高質(zhì)量紋理映射[J].計算機(jī)學(xué)報,2015,38(12):2349.
[9] 劉彬,陳向?qū)?薛俊詩.多參數(shù)加權(quán)的無縫紋理映射算法[J].中國圖象圖形學(xué)報,2015,20(7):929.
[10] 姚礪,錢朔.基于三角網(wǎng)格模型的局部紋理映射[J].計算機(jī)應(yīng)用與軟件,2015,32(3):205.
[11] 萬燕,王慧潔,魯俊.基于三角網(wǎng)格模型的紋理映射研究[J].計算機(jī)應(yīng)用與軟件,2016,33(4):160.
[12] 唐晶磊,景旭,何東健.基于兩步法的交互式紋理映射研究[J].計算機(jī)工程與設(shè)計,2008,29(8):2062.
[13] 陳益,王莉莉.基于幾何網(wǎng)格的交互式紋理合成方法[J].計算機(jī)輔助設(shè)計與圖形學(xué)學(xué)報,2013,25(10):1480.
A realtime interactive 3D model texture mapping algorithm
HU Zhongtian, YE Lü
(School of Information and Electronic Engineering, Zhejiang University of Science and Technology, Hangzhou 310023, Zhejiang, China)
In response to such problems as poorly visualized and inefficient drawing of model texture in the process of 3D animation production, the article puts forward a real-time interactive 3D model texture mapping algorithm. The algorithm can accurately locate points of 3D models corresponding to 2D texture images through interactive 3D picking and can directly use a brush to draw texture images on the surface of 3D models. An experiment conducted in the Unity 3D engine shows that users can apply the algorithm to interactive design and composition, and achieve high-quality texture images, thanks to accurate localization of the brush and stable frame rate in the drawing process. Compared with the traditional process in which 3D models are unfolded, the algorithm proves more visualized and efficient in terms of ways of drawing texture in 2D image processing software.
texture mapping; 3D reconstruction; 2D image; interaction
10.3969/j.issn.1671-8798.2017.03.009
2017-03-07
浙江科技學(xué)院大學(xué)生課外科技創(chuàng)新與實(shí)踐項目(春萌計劃)(浙科院團(tuán)[2016]2號)
葉 綠(1962— ),女,浙江省杭州人,教授,博士,主要從事圖形學(xué)、圖像處理、三維重建和虛擬現(xiàn)實(shí)研究。E-mail: yelue@zust.edu.cn。
TP391.41
A
1671-8798(2017)03-0206-08