專利名稱:一種將三維對象渲染為二維圖像的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種基于顯示適配器GPU著色器的非真實(shí)感三維對象實(shí)時(shí)渲染方法。 使用此方法渲染的三維對象所達(dá)到的二維圖像最終效果有以下特點(diǎn)用黑色等寬的線條勾 勒對象,用明暗色塊表現(xiàn)光照情況,具有動(dòng)畫風(fēng)格的陰影。
背景技術(shù):
以往的卡通動(dòng)畫都是利用人工手繪的方式一張一張的呈現(xiàn)出來,而隨著計(jì)算機(jī)性 能的進(jìn)步,開始可以利用三維繪圖的方式來制作二維的對象或場景,目前這種方式在許多 卡通動(dòng)畫以及電影當(dāng)中經(jīng)常被利用。簡而言之,就是將原本三維對象仿真或渲染成類似人 類手繪的二維風(fēng)格圖像。日本動(dòng)畫的畫風(fēng)較為含蓄、嚴(yán)謹(jǐn)、精致,深受全球觀眾的喜愛,同時(shí)也是各國動(dòng)畫 業(yè)者競相模仿的一種風(fēng)格。使用計(jì)算機(jī)圖形學(xué)技術(shù)模仿日本動(dòng)畫風(fēng)格進(jìn)行實(shí)時(shí)繪制,可以 應(yīng)用于游戲等人機(jī)交互領(lǐng)域,提高產(chǎn)品的藝術(shù)感染力和市場競爭力?,F(xiàn)已存在不少動(dòng)畫風(fēng) 格渲染的技術(shù),但都存在一些不足?!禖artoon-Looking Rendering of 3D_Scenes》(作者 PhilippeDecaudin,1996 年 6 月發(fā)表于 “Research Report INRIA” 第 2919 期)是最早論 述卡通渲染技術(shù)的文章,這篇文章提出的基本框架至今仍未改變,但由于當(dāng)時(shí)技術(shù)條件所 限,作者采用的描邊是圖像處理技術(shù)的方法,并不適于實(shí)時(shí)渲染?!禗ot3 Cel Shading》(作 # =RonBarbosa, 2004 ^Ξ n ^"ShaderX3 =Advanced Rendering with DirectX and OpenGL“)和《Cel-Shading》(作者Sami "MENTAL"Hamlaoui,發(fā)表于 http://www. gamedev. net/reference/programming/features/celshading/)這兩篇文章都從實(shí)時(shí)渲染的角度給 出了解決方案,但沒有實(shí)現(xiàn)陰影?!犊ㄍǜ吖獾娘L(fēng)格化算法及其實(shí)現(xiàn)》(作者蘇延輝、韋歡、 費(fèi)廣正、石民勇,2006年6月發(fā)表于《中國計(jì)算機(jī)圖形學(xué)進(jìn)展2006》)一文針對動(dòng)畫風(fēng)格中 的高光修正進(jìn)行了深入研究,但主要針對非實(shí)時(shí)渲染。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是在使用顯示適配器GPU著色器將三維對象實(shí)時(shí)渲染 成類似人類手繪的二維風(fēng)格圖像時(shí),勾邊不連貫;不支持陰影,手繪藝術(shù)感不強(qiáng),轉(zhuǎn)換效率 不高,占用CPU資源高。為解決上述技術(shù)問題,使用背面線框的方法實(shí)現(xiàn)對三維對象等寬線條描邊;在動(dòng) 畫風(fēng)格渲染中應(yīng)用了陰影技術(shù),并且使用求最小值的方式進(jìn)行混合。本發(fā)明采用技術(shù)方案的基本構(gòu)思是在使用顯示適配器GPU著色器將三維對象實(shí) 時(shí)渲染成類似人類手繪的二維風(fēng)格圖像時(shí),分為以下三個(gè)步驟先描邊用單色等寬的線 條描出模型的邊界和硬邊;再進(jìn)行光照渲染用有明顯界線的明暗色塊來渲染模型;最后 陰影渲染借助深度陰影圖技術(shù)(Di^pth Shadow Map)實(shí)現(xiàn)陰影,并與光照渲染的結(jié)果加以 混合ο本發(fā)明使用背面線框算法能夠連貫等寬地勾邊,陰 影技術(shù)并與明暗效果混合,使人物在側(cè)光下更生動(dòng),能產(chǎn)生藝術(shù)化的效果,而且可以較好地利用顯示適配器硬件提供的 特性,提高了 CPU性能。
下面結(jié)合附圖和實(shí)施方式對本發(fā)明作進(jìn)一步詳細(xì)的說明。圖1為本發(fā)明中背面線框方法的示意圖。圖2為本發(fā)明中光照渲染方法的效果圖。
具體實(shí)施方式
1.描邊在DirectX或OpenGL線框模式下,使用等寬線條繪制三維對象多邊形的邊。結(jié)合 線框模式和硬件剔除功能,可以較容易地勾勒出三維對象的二維圖像特征,這種方法稱為 背面線框方法。背面線框方法一共兩遍,第一遍正常繪制,第二遍進(jìn)行描邊。在第二遍繪制時(shí)進(jìn)行 如下設(shè)置先啟用線框模式;然后啟用硬件剔除功能,剔除面向攝像機(jī)的表面,只保留背向 攝像機(jī)的表面;再將所有頂點(diǎn)的顏色設(shè)置為黑色或指定的描邊顏色;最后設(shè)置線寬為2像 素或以上,設(shè)置深度偏移量為+1。如圖1中,1為原始模型;2為線框模式繪制;3為第一遍正常繪制模型(硬件背面 剔除);4為線框模式、正面剔除、2像素線寬、深度偏移量+1的模式繪制模型;5為兩遍繪制 的結(jié)果;6為從攝像機(jī)角度看,模型有了邊線。在默認(rèn)情況下,線框模式是以1像素寬度的細(xì)線進(jìn)行繪制的,但由于邊線和與它 鄰接的正表面的邊是重合的,實(shí)際上只有線框?qū)挾鹊?/2會被顯示出來,因此須將線寬設(shè) 置為2像素或以上。設(shè)置深度偏移量可以保證在深度緩沖區(qū)中線框均比正面更“深”一些。 這樣可防止三維對象距離攝像機(jī)較遠(yuǎn)時(shí)發(fā)生深度沖突(Z-fighting)。這一方法能夠有效地找到邊線,對于向內(nèi)折的硬折痕,也可以勾畫出來。勾邊線條 粗細(xì)一致,且不會因?qū)ο蟮倪h(yuǎn)近而發(fā)生變化。2.光照渲染光照渲染用具有明顯分界線的色塊來抽象地反映三維對象光照情況,使渲染生成 的二維圖像具有平面繪畫的色彩效果。反射光強(qiáng)度連續(xù)變化是造成光滑表面色彩連續(xù)變化的原因,因此要將其進(jìn)行二值 離散化處理,可以利用紋理映射機(jī)制實(shí)現(xiàn)從連續(xù)值到二值的映射。首先我們建立一個(gè)16像 素寬的一維紋理,即“漫反射光照紋理”,該紋理的左側(cè)用0(黑色)填充,右側(cè)用1 (白色) 填充,其分界位置決定了二值化的閾值。實(shí)現(xiàn)明暗色塊光照模型時(shí),開始繪制前,我們要將原始顏色(基色)紋理、漫反射 光照紋理和高光紋理載入,分別作為第0至2層紋理。模型的頂點(diǎn)數(shù)據(jù)中應(yīng)該已經(jīng)包含了 基色紋理(第0層)的紋理坐標(biāo)信息。在正常繪制的遍中,進(jìn)行以下操作(1)為顯示適配器GPU中的頂點(diǎn)著色器(Vertex Shader)設(shè)置如下程序先計(jì)算 出該頂點(diǎn)的漫反射強(qiáng)度與鏡面反射強(qiáng)度,再用它們作為第1層和第2層紋理的坐標(biāo)。(2)為顯示適配器GPU中的像素著色器(Pixel Shader)設(shè)置如下程序首先,將每像素的反射光強(qiáng)度數(shù)值當(dāng)作上述紋理的紋理坐標(biāo);然后,通過圖素查詢,得到了反射光強(qiáng) 度二值化后的值;最后,將這個(gè)值與該像素的原始顏色(基色)混合,就得到了基色與暗色 兩個(gè)色塊。圖2中,1A、1B只使用基色渲染,2A、2B使用傳統(tǒng)光照模型渲染,3A、3B使用明暗色 塊光照模型渲染。對于三維對象存在高光的光澤表面,高光的處理方法與陰影基本相同。不同的是 陰影色是將基色變暗,而高光是將基色變亮。另外,由于三維對象高光面積應(yīng)該較小,其二 值化的閾值也應(yīng)更高。
3.陰影渲染先獲得三維對象的“深度陰影圖(D^th Shadow Map) ”及陰影,然后以取最小值的 方式將陰影與之前獲得的明暗進(jìn)行混合。具體方法是先創(chuàng)建一個(gè)新紋理,稱其為“深度陰影圖”紋理,它用來保存深度信 息。然后在正常繪制之前增加一遍,這一遍從光源角度進(jìn)行繪制,任務(wù)是將光源攝像機(jī)空間 中的深度信息繪制到“深度陰影圖”紋理中。具體進(jìn)行的操作為(1)為顯示適配器GPU中的頂點(diǎn)著色器(Vertex Shader)設(shè)置如下程序?qū)㈨旤c(diǎn) 的空間坐標(biāo)映射到光源攝像機(jī)坐標(biāo)系,并將頂點(diǎn)的深度信息以紋理坐標(biāo)的形式保存到頂點(diǎn) 數(shù)據(jù)結(jié)構(gòu)中;(2)為顯示適配器GPU中的像素著色器(Pixel Shader)設(shè)置如下程序?qū)⒓y理坐 標(biāo)(即該點(diǎn)深度)作為顏色繪制到“深度陰影圖”紋理中。在繪制接收陰影的對象時(shí),要進(jìn)行如下操作(1)為顯示適配器GPU中的頂點(diǎn)著色器(Vertex Shader)設(shè)置如下程序先進(jìn)行光 照渲染涉及的頂點(diǎn)著色器程序,然后將“深度陰影圖”紋理坐標(biāo)映射到對象的每個(gè)頂點(diǎn)上。(2)為顯示適配器GPU中的像素著色器(Pixel Shader)設(shè)置如下程序首先,進(jìn) 行光照渲染的像素著色器程序中的二值化運(yùn)算,得到反射光強(qiáng)度二值化后的值;然后,對每 個(gè)像素進(jìn)行一次深度測試,通過測試則將測試結(jié)果記為1(白色),測試失敗則將測試結(jié)果 記為0 (黑色)。最后,將反射光強(qiáng)度二值化后的值與深度測試的測試結(jié)果取最小值,用該值 與該像素的原始顏色(基色)混合,就得到了基色與含有陰影的暗色兩個(gè)色塊。
權(quán)利要求
一種將三維對象渲染為二維圖像的方法,其特征在于A.描邊用單色等寬的線條描出三維對象的邊界和硬邊;B.光照渲染用有明顯界線的明暗色塊來渲染三維對象;C.陰影渲染借助深度陰影圖實(shí)現(xiàn)陰影,并將所述陰影與光照渲染的結(jié)果加以混合。
2.如權(quán)利要求1所述的方法,其特征在于 所述方法是基于顯示適配器GPU著色器的。
3.如權(quán)利要求1所述的方法,其特征在于所述A步驟是使用背面線框的方法實(shí)現(xiàn)對三維對象等寬線條描邊。
4.如權(quán)利要求1所述的方法,其特征在于 所述C步驟是使用求最小值的方式進(jìn)行混合。
全文摘要
本發(fā)明涉及一種將三維對象渲染為二維圖像的方法在使用顯卡GPU著色器將三維對象實(shí)時(shí)渲染成類似人類手繪的二維風(fēng)格圖像時(shí),分為以下三個(gè)步驟先描邊用單色等寬的線條描出模型的邊界和硬邊;再進(jìn)行光照渲染用有明顯界線的明暗色塊來渲染模型;最后陰影渲染借助深度陰影圖技術(shù)(DepthShadow Map)實(shí)現(xiàn)陰影,并與光照渲染的結(jié)果加以混合。
文檔編號G06T15/60GK101840585SQ20091011980
公開日2010年9月22日 申請日期2009年3月18日 優(yōu)先權(quán)日2009年3月18日
發(fā)明者樂大山 申請人:樂大山