張 帥
(滁州學(xué)院 美術(shù)與設(shè)計(jì)學(xué)院,安徽 滁州 239000)
3D數(shù)字動(dòng)畫具有強(qiáng)大的表現(xiàn)力,幾乎可以實(shí)現(xiàn)所有想要達(dá)到的效果[1]。3D數(shù)字動(dòng)畫的普及在根本上改變了制作動(dòng)畫的流程、提升了制作動(dòng)畫的效率、降低了制作動(dòng)畫的成本,因此具備明顯的優(yōu)勢[2]。在3D數(shù)字動(dòng)畫的制作中,線條渲染是一個(gè)重要步驟,通過線條渲染才能達(dá)到3D數(shù)字動(dòng)畫技術(shù)驅(qū)動(dòng)、虛實(shí)結(jié)合的藝術(shù)風(fēng)格。線條渲染的實(shí)際成本會(huì)達(dá)到總成本的1/3,線條渲染設(shè)備的實(shí)際成本占固定資產(chǎn)的1/2,足見其重要性[3]。對3D數(shù)字動(dòng)畫線條渲染方法的研究,國外的技術(shù)已經(jīng)發(fā)展得較為成熟。國內(nèi)對3D數(shù)字動(dòng)畫線條渲染方法的研究相對起步較晚,但隨著2D技術(shù)逐漸被其取代,線條渲染系統(tǒng)與軟件等相關(guān)技術(shù)也成為了研究熱點(diǎn)。王威[4]提出了一種基于數(shù)字技術(shù)的三維動(dòng)畫圖像紋理實(shí)時(shí)渲染方法??姿厝坏萚5]提出一種三維動(dòng)畫圖像紋理實(shí)時(shí)渲染系統(tǒng)設(shè)計(jì)方法。在渲染窗口像素大小為800×600~1 000×600時(shí),利用以上方法進(jìn)行渲染存在渲染幀速率較低的問題,因此,本文提出一種基于圖像空間的3D數(shù)字動(dòng)畫線條渲染方法。通過累加環(huán)境光、鏡面反射光以及漫反射光模型,構(gòu)建局部光照模型并形成陰影體算法繪制線條軟陰影;再對渲染流水線實(shí)施編程處理,使用戶能夠?qū)€條渲染進(jìn)行自定義,實(shí)現(xiàn)3D數(shù)字動(dòng)畫線條渲染,以期提高渲染幀速率,使硬性線條渲染效果更好。
通過累加環(huán)境光、鏡面反射光和漫反射光[6]構(gòu)建局部光照模型。鏡面反射光與漫反射光的原理如圖1所示[7],其中:N為頂點(diǎn)法線;L為入射光反方向;θ為頂點(diǎn)法線與入射光反方向的夾角;R為反射光方向;V為觀察視點(diǎn);θ″為反射光方向與觀察視點(diǎn)的夾角[8]。環(huán)境光則主要用于對真實(shí)感進(jìn)行渲染。
(a)漫反射光的原理
將環(huán)境光、鏡面反射光和漫反射光的參數(shù)相加,獲取局部光照模型的參數(shù),構(gòu)建局部光照模型[9],完成圖像空間的建立,為后續(xù)線條軟陰影的繪制奠定基礎(chǔ)。
基于圖像空間,通過陰影體算法對線條軟陰影進(jìn)行初步繪制,具體步驟為:1)首先對線條陰影體進(jìn)行繪制,也就是通過網(wǎng)格邊測試對線條陰影體的實(shí)際輪廓進(jìn)行構(gòu)造[10]。2)對動(dòng)畫場景中線條的各像素點(diǎn)是否在線條陰影體中進(jìn)行判斷,也就是對陰影進(jìn)行判定[11]。
其陰影體算法的實(shí)現(xiàn)主要是利用OpenGL,具體過程如圖2所示。
圖2 陰影體算法具體實(shí)現(xiàn)過程
接著在初步繪制結(jié)果的基礎(chǔ)上實(shí)施繪制加工,獲取滿意效果的軟陰影,加工方式為模糊陰影圖,使其生硬的邊緣變得更加柔軟,模擬出線條陰影半影區(qū)與本影區(qū)平滑過渡的渲染效果[12]。采用的模糊算法是膨脹腐蝕算法,其中膨脹操作是對一個(gè)結(jié)構(gòu)子進(jìn)行定義,比較陰影圖各像素與結(jié)構(gòu)子中心,遍歷后取結(jié)構(gòu)子與陰影圖的軌跡并集[13];腐蝕操作是對一個(gè)結(jié)構(gòu)子進(jìn)行定義,在比較陰影圖各像素與結(jié)構(gòu)子中心時(shí),當(dāng)結(jié)構(gòu)子中心以外的部分不完全落在線條陰影圖中,則在原陰影圖內(nèi)刪除對比像素[14]。多次交替執(zhí)行腐蝕操作與膨脹操作,對半影區(qū)的實(shí)際范圍進(jìn)行精準(zhǔn)的計(jì)算[15],以獲取更加滿意效果的軟陰影,使陰影半影區(qū)與本影區(qū)平滑過渡的渲染效果更佳。最后需對線條渲染進(jìn)行處理,以實(shí)現(xiàn)3D數(shù)字動(dòng)畫線條渲染。
該部分主要是對渲染流水線實(shí)施可編程處理,將渲染流水線中的一些功能函數(shù)通過可編程方式來實(shí)現(xiàn),使用戶能夠?qū)Σ糠志€條渲染過程進(jìn)行自定義,對渲染流水線的線條渲染功能進(jìn)行靈活處理,實(shí)現(xiàn)3D數(shù)字動(dòng)畫線條渲染的目的[16]。其中渲染流水線中包含多個(gè)階段:光柵化運(yùn)算、片段紋理著色和映射、圖元光柵化和裝配、頂點(diǎn)變換,具體操作內(nèi)容如表1所示[17]。
表1 渲染流水線各階段具體操作內(nèi)容
對渲染流水線實(shí)施可編程處理,包括片段著色器、幾何著色器、曲面細(xì)分著色器、頂點(diǎn)著色器,各種處理的具體內(nèi)容如表2所示[18]。
表2 各種處理的具體內(nèi)容
對渲染流水線實(shí)施可編程處理后,實(shí)現(xiàn)了渲染框架的搭建,如圖3所示[19]。利用搭建的渲染框架即可實(shí)現(xiàn)3D數(shù)字動(dòng)畫的線條渲染。
圖3 搭建的渲染框架
為驗(yàn)證本文方法的性能,進(jìn)行線條渲染實(shí)驗(yàn)驗(yàn)證。實(shí)驗(yàn)的運(yùn)行環(huán)境如表3所示。
表3 實(shí)驗(yàn)的運(yùn)行環(huán)境
在實(shí)驗(yàn)中主要對山巒動(dòng)畫畫面進(jìn)行線條渲染,該動(dòng)畫畫面的網(wǎng)格模型如圖4所示。
圖4 動(dòng)畫畫面的網(wǎng)格模型
實(shí)驗(yàn)中采用RGB圖像空間,采用的紙墨模型的存儲(chǔ)結(jié)構(gòu)與墨液屬性具體如圖5所示。
圖5 紙墨模型的存儲(chǔ)結(jié)構(gòu)與墨液屬性
將實(shí)驗(yàn)動(dòng)畫畫面分為10個(gè)區(qū)域分別進(jìn)行線條渲染,各區(qū)域的具體線條數(shù)據(jù)如表4所示。
表4 各區(qū)域的具體線條數(shù)據(jù)
利用本文方法對實(shí)驗(yàn)動(dòng)畫畫面進(jìn)行分區(qū)域渲染。獲取渲染窗口像素為800×600~1 000×600范圍內(nèi)的渲染幀速率作為實(shí)驗(yàn)數(shù)據(jù)。并將文獻(xiàn)[4]中基于數(shù)字技術(shù)的三維動(dòng)畫圖像紋理實(shí)時(shí)渲染方法(方法1)和文獻(xiàn)[5]中三維動(dòng)畫圖像紋理實(shí)時(shí)渲染系統(tǒng)設(shè)計(jì)方法(方法2)作為對比方法,實(shí)施對比實(shí)驗(yàn)。
在渲染窗口像素為800×600時(shí),3種方法獲取的渲染幀速率數(shù)據(jù)如表5所示。
表5 窗口像素為800×600時(shí)的渲染幀速率 Hz
根據(jù)表5可知,在渲染窗口像素為800×600時(shí),本文方法的渲染幀速率高于其他2種方法。
在渲染窗口像素為900×600時(shí),本文方法與其他2種方法的渲染幀速率對比實(shí)驗(yàn)數(shù)據(jù)如表6所示。
表6 窗口像素為900×600時(shí)的渲染幀速率 Hz
根據(jù)表6可知,在渲染窗口像素為900×600時(shí),本文方法的渲染幀速率高于其他2種方法。
在渲染窗口像素為1 000×600時(shí),本文方法與其他2種方法的渲染幀速率對比實(shí)驗(yàn)數(shù)據(jù)如表7所示。
根據(jù)表7可知,在渲染窗口像素為1 000×600時(shí),本文方法的渲染幀速率高于其他2種方法。
將圖像空間應(yīng)用于3D數(shù)字動(dòng)畫線條渲染中,實(shí)現(xiàn)了渲染幀速率的提升,對于山巒等線條的渲染效果卓越,但對人物、動(dòng)物的渲染效果還有待于驗(yàn)證和改進(jìn),將會(huì)在今后的研究中繼續(xù)努力。