張愛軍, 蔣高明, 李欣欣, 叢洪蓮(江南大學(xué) 教育部針織技術(shù)工程研究中心, 江蘇 無錫 214122)
經(jīng)編毛絨織物是經(jīng)編織物中重要的一類產(chǎn)品。此類產(chǎn)品除具有經(jīng)編線圈結(jié)構(gòu)外,在表面還有毛絨覆蓋。在經(jīng)過定型、拉毛、梳毛等整理工序后,毛絨織物表面具有方向性的毛絨,這使得此類織物對光線的反射具有各向異性。而毛絨織物在使用過程中,毛絨受到外力作用其方向發(fā)生改變,從而會產(chǎn)生一定的隨機(jī)性。由于這些特點(diǎn),在進(jìn)行渲染時(shí),不能將毛絨織物表面簡化為理想的鏡面反射面進(jìn)行計(jì)算。
目前對于毛絨織物仿真的研究有圖像合成、二維繪制和三維繪制等方法。其中叢洪蓮等[1]通過紋理合成的方法模擬毛絨,原始圖像為真實(shí)織物,真實(shí)感強(qiáng),但每種織物都需要預(yù)先采集對應(yīng)的紋理,毛絨形態(tài)不能變化,前期需要建立合適的紋理庫,工作量大。雷惠等[2]將圖像像素化為粒子,再使用徑向模糊算法實(shí)現(xiàn)毛絨效果的模擬,具體方法是通過在意匠圖的所有像素點(diǎn)與其模糊中心點(diǎn)連線上取若干點(diǎn)像素值,將取得的所有像素值的平均值作為該點(diǎn)的新像素值。Xiong等[3]使用直線畫法模擬毛絨效果,將毛絨紗描述為顏色漸變的線段。上述算法以二維圖像或二維圖形為處理對象,在仿真立體感上還需改善。更多的研究是使用三維模擬方法,包括幾何方法和紋理方法。Csuri等[4]、Neulander[5]、Sadeghi等[6]使用幾何方法繪制的毛絨較清晰,繪制效果好,但耗時(shí)較長,通常用于影視動畫制作的離線渲染。Kajiya等[7]使用紋理方法繪制的毛絨絨感較強(qiáng),效果柔和,但早期方法的速度尚不能滿足針織產(chǎn)品計(jì)算機(jī)輔助設(shè)計(jì)過程中快速模擬的要求。Lengyel等[8-9]提出了一種基于層狀紋理的毛絨繪制思想,在繪制效果和繪制速度方面得到了很好的兼顧,并成功應(yīng)用在短毛動物模擬中。楊剛等[10]改進(jìn)了Lengyel提出的算法,使其可以用于繪制玩具表面稍長的毛。唐勇等[11]改進(jìn)了Lengyel提出的算法并應(yīng)用在實(shí)時(shí)繪制毛發(fā)中。Wong等[12]、Lee等[13]分別用層狀紋理實(shí)現(xiàn)了三維雪景和皮草時(shí)裝的模擬。Zhang等[14]使用Lengyel方法生成了一種單針床提花毛絨的模擬。
通過觀察可發(fā)現(xiàn),經(jīng)編毛絨織物表面毛絨的方向既具有整體上的確定性,又具有細(xì)節(jié)上的隨機(jī)性,形成了自然的紋理。本文使用分形噪聲來模擬毛絨的這一外觀效果。此外,在經(jīng)編織物計(jì)算機(jī)輔助設(shè)計(jì)系統(tǒng)中應(yīng)用毛絨仿真時(shí),考慮到對使用者的友好度,仿真效率和對計(jì)算機(jī)硬件資源的要求是必須要考慮的問題。而毛絨織物表面的毛絨數(shù)量大,生成毛絨的幾何結(jié)構(gòu)時(shí)需要消耗大量中央處理器(CPU)內(nèi)存資源。為降低這一影響,本文在幾何著色器中生成毛絨幾何結(jié)構(gòu),從而減輕CPU的運(yùn)算量,并減少CPU與圖形處理器(GPU)之間傳輸?shù)臄?shù)據(jù)量。
現(xiàn)實(shí)中織物中毛絨方向并不完全一致,具有一定的隨機(jī)性,在毛絨仿真時(shí)添加隨機(jī)性可增加真實(shí)感。使用普通的隨機(jī)數(shù)生成算法產(chǎn)生的噪聲,其隨機(jī)性在整個(gè)區(qū)域內(nèi)分布平均,不具有紋理效果,表達(dá)結(jié)果不自然。本文使用分形噪聲模擬毛絨方向的隨機(jī)性。
分形噪聲是對基噪聲按不同頻率采樣,將采樣結(jié)果進(jìn)行疊加得到的混合噪聲。本文使用的基噪聲為二維噪聲。生成基噪聲的步驟如下。第1步生成隨機(jī)數(shù)θ和隨機(jī)數(shù)λ,如圖1所示。假設(shè)毛絨的初始切線方向?yàn)槿S坐標(biāo)系中z軸方向,v為毛絨發(fā)生隨機(jī)偏移后的方向,則θ表示偏移后的方向與初始方向的夾角。θ決定了毛絨偏移的大小,一般取小于45°的值,λ決定了毛絨偏移的方向,取值為0~360°。設(shè)毛絨的長度為1,用公式x=sinθcosλ,y=sinθsinλ,z=cosθ,可計(jì)算得到偏移后的位置坐標(biāo)。根據(jù)三角函數(shù)的定義可知,x、y和z的值域?yàn)閇-1,1]。用公式R=(x+1)/2×255、G=(y+1)/2×255、B=(z+1)/2×255 可將x、y、z轉(zhuǎn)換到[0,255]值域中,用R、G、B表示RGB顏色空間中紅、綠、藍(lán)3個(gè)顏色通道,即得到基噪聲圖像F=f(R,G,B)。在毛絨織物仿真時(shí),噪聲圖像F中1個(gè)像素的顏色值可反推得到1根毛絨的偏移向量,但此時(shí)圖像F上的像素還是完全隨機(jī)的,直接使用生成的毛絨方向雜亂,缺乏過渡,因而需要使用下面的方法生成分形噪聲。
圖1 隨機(jī)數(shù)θ和λ示意圖Fig.1 Schematic diagram of random θ and λ
對基噪聲按不同的采樣系數(shù)采樣可得到多幅長寬和基噪聲圖像相同的新噪聲圖像。設(shè)采樣系數(shù)為k,則在基噪聲圖像上每k個(gè)像素點(diǎn)中取1個(gè)點(diǎn)作為采樣點(diǎn)賦予新噪聲圖像。新圖像上的非采樣點(diǎn)的值可以通過對采樣點(diǎn)平滑插值得到。本文選用的插值函數(shù)為柏林噪聲[15]推薦的3t2-2t3。圖2示出k=5時(shí)插值過程,對任意一個(gè)非采樣點(diǎn),找到與它相鄰的4個(gè)采樣點(diǎn)P(0,0),P(0,1),P(1,0),P(1,1)。對P(0,0),P(1,0)在x方向上插值得到P(x,0),對P(0,1),P(1,1)在x方向上插值得到P(x,1),再對P(x,0)和P(x,1)在y方向上插值得到P(x,y)。
圖2 噪聲的插值方法Fig.2 Interpolation method of noise.(a) Basis noise; (b) Interpolated noise
對不同采樣系數(shù)的噪聲圖像使用式(1)進(jìn)行疊加混合即得到分形噪聲圖像。從公式可看出,采樣系數(shù)越大的噪聲所占比重越大,決定了分形噪聲的基本形態(tài)。采樣系數(shù)越小的噪聲所占的比重越小,但是它為分形噪聲提供了更多的細(xì)節(jié)信息。
(1)
式中:Pi為第i個(gè)采樣頻率的采樣值;ki為其對應(yīng)的采樣系數(shù);n為總的采樣次數(shù);P為最終合成的分形噪聲。
圖3(b)、(c)、(d)示出對基噪聲圖3(a)使用不同的采樣率進(jìn)行采樣的結(jié)果。將圖3(a)~(d)合成后得到的分形噪聲如圖3(e)所示。
圖3 分形噪聲的混合Fig.3 Mixing of fractal noise.(a)Basis noise; (b) Interpolated noise of k=2;(c) Interpolated noise of k=4;(d) Interpolated noise of k=8;(e)Fractal noise
本文假設(shè)絨紗為以圓為橫截面,從根部到頭部沿一定路徑掃掠而成的半透明幾何體。Lengyel等[9]通過將毛絨分為不同的層,使用紋理逐層渲染,繪制效果有較好的絨感,但該方法在視線與毛絨接近垂直時(shí),層間會出現(xiàn)空隙,所以需要用毛翼紋理進(jìn)行填充。本文同樣是將一根毛絨分為不同的層進(jìn)行渲染,不同的是本文使用了水平切片和垂直切片2種切片。無論是水平切片還是垂直切片,一層切片都是使用一個(gè)四邊形表示,這使得切片很容易在幾何著色器中通過一個(gè)點(diǎn)擴(kuò)展生成。
圖4示出水平每層切片都平行于織物表面和垂直每層切片都垂直于觀察者視線方向切片。
圖4 水平切片和垂直切片F(xiàn)ig.4 Horizontal chip (a) and vertical chip (b)
在生成一幀織物仿真圖時(shí),通過算法判斷當(dāng)前視線下毛絨切片層間的空隙情況,選擇不同的切片類型進(jìn)行繪制。當(dāng)視線與毛絨切線接近平行時(shí),是以俯視的視角觀察毛絨,不易產(chǎn)生空隙,使用水平切片渲染。當(dāng)視線與毛絨接近垂直時(shí),是以側(cè)視的視角觀察毛絨,容易產(chǎn)生空隙,則使用垂直切片。
圖5為毛絨在視平面上的投影示意圖。毛絨切片層間的空隙情況與層間距離l、毛絨半徑r、視線與毛絨的夾角α等多個(gè)因素有關(guān)。層間的距離越大,毛絨的直徑越小,視線與毛絨的夾角越大時(shí),毛絨在屏幕上的投影越易出現(xiàn)空隙。
圖5 毛絨在視平面上的投影關(guān)系Fig.5 Projection of plush on plane of vision
當(dāng)2rcosα≥lsinα?xí)r,說明毛絨直徑在視平面上的投影長度大于層間距離在視平面上的投影長度,此時(shí)使用水平切片。反之,當(dāng)2rcosα 使用切片表示的毛絨,每根毛絨上有若干層切片,每個(gè)切片有一個(gè)四邊形。一塊織物上毛絨眾多,如果由CPU完成所有毛絨結(jié)構(gòu)的生成,數(shù)據(jù)量大且耗時(shí)較長。本文將這一過程遷移到幾何著色器中執(zhí)行。幾何著色是現(xiàn)代可編程著色流水線的1個(gè)渲染階段,它允許GPU根據(jù)需要改變輸入的幾何圖元數(shù)據(jù),輸入的圖元可以被拓展成1個(gè)或多個(gè)圖元,也可以被刪除。利用這一特性,可以將生成毛絨紗線幾何結(jié)構(gòu)的算法轉(zhuǎn)移到幾何著色器中,從而減少CPU向GPU傳輸?shù)哪P晚旤c(diǎn)數(shù)。本文中幾何著色器中的輸入為點(diǎn)圖元,點(diǎn)圖元的坐標(biāo)值即是毛絨紗線根部中心點(diǎn)坐標(biāo)。幾何著色器的輸出為三角形帶,用于表示1個(gè)毛絨切片,即1段毛絨。每個(gè)三角形帶包含2個(gè)三角形,由4個(gè)頂點(diǎn)定義。 毛絨段的4個(gè)頂點(diǎn)的坐標(biāo)由輸入的點(diǎn)圖元、原始切線方向紋理、分形噪聲紋理計(jì)算得到。計(jì)算步驟為:先將分形噪聲紋理疊加到原始切線方向紋理得到毛絨實(shí)際方向,再根據(jù)實(shí)際方向與視線的關(guān)系選擇使用水平切片或垂直切片的方法計(jì)算頂點(diǎn)坐標(biāo)。 在生成分形噪聲時(shí),假設(shè)毛絨原始切線方向?yàn)閦軸方向,而仿真時(shí)指定的毛絨方向不一定是z軸,因此,需要對噪聲所包含的坐標(biāo)進(jìn)行坐標(biāo)系轉(zhuǎn)換。如圖6所示,以1根毛絨的根部為原點(diǎn),與織物橫列平行且向右的方向?yàn)閤軸正向,與織物縱行平行且向上的方向?yàn)閥軸正向,與織物平面垂直的方向?yàn)閦軸建立坐標(biāo)系,該坐標(biāo)系為父坐標(biāo)系。將原點(diǎn)、x′軸、y′軸取為與父坐標(biāo)系一致,以毛絨原始切線方向?yàn)閦′軸,建立坐標(biāo)系,該坐標(biāo)系為子坐標(biāo)系。設(shè)毛絨切線方向在父坐標(biāo)系中用單位矢量(xt,yt,zt)表示,則分形噪聲中的坐標(biāo)(xs,ys,zs)可用式(2)從子坐標(biāo)系轉(zhuǎn)換到父坐標(biāo)系,在父坐標(biāo)系中的坐標(biāo)表示為(xf,yf,zf)。 (2) 圖6 父坐標(biāo)系和子坐標(biāo)系Fig.6 Parent coordinate system and child coordinate system 得到毛絨切線的實(shí)際方向后,按2.2節(jié)的方法選擇切片類型。若需使用水平切片,則4個(gè)頂點(diǎn)的坐標(biāo)可用式(3)計(jì)算得到圖1(a)所示的切片;若需使用垂直切片,則4個(gè)頂點(diǎn)的坐標(biāo)可用式(4)求得圖2(b)所示的切片。 (3) (4) 式中:P0、P1、P2、P3為四邊形4個(gè)頂點(diǎn)的坐標(biāo);Pe為該段絨紗軸線終點(diǎn)坐標(biāo);Ps為該段絨紗軸線起點(diǎn)坐標(biāo);L為視線方向;R為毛絨切線方向與視線方向的叉乘;Wf為毛絨半徑;Hf為毛絨段高度的一半。 在幾何著色器中,除了計(jì)算得到毛絨幾何結(jié)構(gòu)的頂點(diǎn)坐標(biāo),還需要確定頂點(diǎn)的紋理坐標(biāo)。本文假設(shè)的單根毛絨為圓柱形:水平切片是俯視毛絨時(shí)的效果,因此映射具有圓形圖案的紋理而邊緣透明的紋理;垂直切片為側(cè)視毛絨時(shí)的效果,使用具有矩形圖案的紋理。 由幾何著色器生成的圖元經(jīng)過光柵化,在像素著色器中進(jìn)行顏色混合輸出最終的顏色,即可渲染出毛絨效果。 本文算法基于DirectX 11實(shí)現(xiàn)。DirectX 是主流的圖形渲染引擎接口,其渲染管線中的可編程階段包括實(shí)現(xiàn)本文算法所需的頂點(diǎn)著色器、幾何著色器和像素著色器。實(shí)驗(yàn)所用計(jì)算機(jī)CPU為Intel Core I7-6700, 內(nèi)存為16 GB, 顯卡為NVIDIA Quadro M1000。 圖7示出織物實(shí)物圖和仿真圖。圖7(a)為織物被手掌按壓后的照片,按壓后毛絨的方向發(fā)生了明顯的改變,使織物反光發(fā)生改變,外觀上形成了掌印。圖7(b)是模擬這一效果的仿真圖。仿真時(shí)除根據(jù)手掌按壓位置改變了毛絨切線方向,還為毛絨方向疊加了分形噪聲,因此在非按壓位置也能看到不同區(qū)域有較平滑的外觀變化。圖7(c)為圖7(b)中掌心位置的局部放大圖。 圖7 織物實(shí)物圖和仿真圖Fig.7 Fabric photos and simulation picture.(a) Fabric pressed by palm;(b) Simulation picture;(c) Enlarged partial 圖7(b)中測試織物花高為384橫列,花寬為240針,仿真耗時(shí)約750 ms。該耗時(shí)能滿足計(jì)算機(jī)輔助設(shè)計(jì)軟件快速仿真的要求。 本文用二維分形噪聲表示經(jīng)編毛絨織物中毛絨具有的隨機(jī)感,多分辨率噪聲的混合使某一處毛絨的隨機(jī)性與周圍毛絨有了一定的聯(lián)系,形成了較為自然的效果。毛絨的實(shí)際幾何切片由GPU根據(jù)分形噪聲紋理在幾何著色器中生成,減少了CPU和GPU之間數(shù)據(jù)的傳輸量,且能利用GPU的多核心運(yùn)算能力提高算法的效率。算法在幾何著色器中根據(jù)需要選用不同的切片類型,避免了單一平行切片會造成空隙的問題。 本文沒有獨(dú)立計(jì)算每根毛絨的陰影,因此,在表現(xiàn)毛絨之間的遮擋關(guān)系時(shí)有欠缺。此外,本文以單根毛絨為單位進(jìn)行繪制,毛絨的柔和感弱于以一片區(qū)域?yàn)閱挝贿M(jìn)行紋理繪制的方法。 FZXB [1] 叢洪蓮, 李秀麗. 基于紋理合成的提花絨類織物仿真[J]. 紡織學(xué)報(bào), 2014, 35(10):150-155. CONG Honglian, LI Xiuli. Simulation of jacquard pile fabric based on texture synthesis[J]. Journal of Textile Research, 2014, 35(10):150-155. [2] 雷惠, 叢洪蓮, 張愛軍. 雙針床短毛絨織物的CAD設(shè)計(jì)與仿真[J]. 紡織學(xué)報(bào), 2013, 34(7):132-136. LEI Hui, CONG Honglian, ZHANG Aijun. CAD design and simulation of double-needle bar short pile fabrics[J]. Journal of Textile Research, 2013, 34(7): 132-136. [3] XIONG Y, MIU X H, JIANG A J, et al. Computer simulation for warp knitted brushed fabric with patterned pile[J]. Textile Research Journal, 2016,36(7):1659-1667. [4] CSURI C, HAKATHORN R, PARENT R, et al. Towards an interactive high visual complexity animation system[C]//DEFANTI T, MCCORMICK B H, POLLACK B W, et al. Proceedings of the 6th Annual Conference on Computer Graphics and Interactive Techniques. New York: Association for Computing Machinery, 1979: 289-299. [5] NEULANDER Ivan. Quick image-based lighting of hair[C]//BARZEL Ronen. ACM SIGGRAPH 2004 Sketches. New York: Association for Computing Machinery, 2004:43. [6] SADEGHI I, PRITCHETT H, JENSEN H W, et al. An artist friendly hair shading system[J]. Acm Transactions on Graphics, 2010, 29(4):157-166. [7] KAJIYA J T, KAY T L. Rendering fur with three dimensional textures[C]//THOMAS James J. Proceedings of the 16th Annual Conference on Computer Graphics and Interactive Techniques. New York: Association for Computing Machinery, 1989: 271-280. [8] LENGYEL J E. Real-time Fur[C]//PEROCHE B, RUSHMEIER H. Rendering Techniques 2000. Vienna: Springer-Verlag GmbH, 2000: 243-256. [9] LENGYEL J,PRAUN E,F(xiàn)INKELSTEIN A, et al. Real-time fur over arbitrary surfaces [C]//HUGHES J F, SEQUIN C H. Proceedings of the 2001 Symposium on Interactive 3D Graphics. New York: Association for Computing Machinery, 2001: 227-232. [10] 楊剛, 曹衛(wèi)群, 黃心淵. 基于層狀紋理切片表示法的短毛造型系統(tǒng)[J]. 中國圖象圖形學(xué)報(bào), 2008, 13(5):984-990. YANG Gang, CAO Weiqun, HUANG Xinyuan. A fur modeling system based on multi-layer textured slices[J]. Journal of Image and Graphics, 2008, 13(5): 984-990. [11] 唐勇, 邵緒強(qiáng), 呂夢雅. 基于改進(jìn)的 Lengyel 繪制方法的毛發(fā)實(shí)時(shí)模擬[C]//徐伯夏.第二屆立體圖象技術(shù)及其應(yīng)用 (國際) 研討會論文集.北京:中國圖象圖形學(xué)學(xué)會,2007:139-142. TANG Yong, SHAO Xuqiang, Lü Mengya. Improved Lengyel′s method based fur real-time simulation[C]//XU Boxia. Proceedings of the Second 3-D Image Technology and Application Conference. Beijing: China Society of Image and Graphics, 2007:139-142. [12] WONG S, FU I. Hybrid-based snow simulation and snow rendering with shell textures[J]. Computer Animation & Virtual Worlds, 2015, 26(3/4):413-421. [13] LEE J, KIM D K, KIM H S, et al. Real-time fur simulation and rendering[J]. Computer Animation & Virtual Worlds, 2010, 21(3/4):311-320. [14] ZHANG A, LI X, XIONG Y,et al. 3D simulation model of warp-knitted patterned velvet fabric[J]. International Journal of Clothing Science and Technology, 2016, 28(6): 794-804. [15] PERLIN K. Improving noise[J]. Acm Transactions on Graphics, 2002, 21(3):681-682.3 毛絨在幾何著色器中的繪制
4 實(shí)驗(yàn)結(jié)果
5 結(jié) 論