張嚴辭,龔昱寧
(1.四川大學 軟件學院,成都 610207;2.四川大學視覺合成圖形圖像技術國家重點學科實驗室,成都 610065)
隨著卡通渲染類游戲的興起,人們開始不僅僅滿足于基于物理的渲染,非真實感渲染出的效果也越來越受到消費者的青睞。素描是一種運用單一色彩表現物體美感的繪制手法[1],用素描這種繪畫的方式對游戲等可交互產品進行渲染,增強了這類產品的趣味性,吸引了消費者的眼球,增加了產品商業價值。
近幾年,關于非真實感渲染的研究結果層出不窮。其中文獻[2]歸納了大部分基于表面的有說明表現力的可視化方式,其提到使用曲面的第二基本形式[3]或者使用高階多項式擬合的[4-5]方式來估計素描渲染所需要的主曲率,但其需要耗時的頂點屬性的預計算而無法做到實時渲染。文獻[6]基于文獻[7]提出了使用焦平面的主方向估計方式來估計主方向,但無法很好解決因為復雜模型頂點間屬性線性插值帶來的噪聲問題。
在獲得主方向的基礎上,關于對素描風格的渲染,文獻[8-9]使用了基于文獻[10]思路的線卷積積分,但該方法存在透視錯誤的問題。文獻[5]提出使用貼圖進行旋轉和粘貼的方式來繪制,但這種方式繪制出來的線條與主方向偏差較大且存在空間耦合性的問題。文獻[11]提出了深度學習來獲取一定的方向進行線卷積積分,但此方法不適用于需要高幀率的實時渲染。
針對以上問題,在實時主方向估計上,本文對構建焦平面的方式來獲取主方向的算法進行了改進,相比于原方法對于復雜模型能得到更加魯棒的結果,相比于無法改變頂點間關系的主方向預計算,有著可以應用到蒙皮網絡與頂點動畫的優勢。其次,本文提出了一種線卷積方式,憑借有序抖動與GPU端硬件的紋理采樣優勢,突破了原有離散的像素點與2D空間的限制,提高了單幀的渲染效率,且有空間耦合性與投影正確性。最后,使用兩個主方向的角平分線作為線卷積的方向,降低了畫面整體的復雜度,并對渲染結果進行了風格化處理,使渲染效果更加接近手繪素描的效果。
在適用場景上,由于本文渲染算法為通過幾何緩沖進行實時后處理,無需對模型進行預處理或對傳統渲染管線更改,有較強空間耦合性,可以應用到需要實時交互且有蒙皮動畫的應用上,且不會產生如文獻[6]中雨幕效果的問題。因此渲染算法能在常用的消費級渲染引擎上直接使用(如Unity或Unreal Engine4),并應用到基于這些引擎的可交互產品中(如手機或桌面端游戲、影視作品、三維漫游以及可交互教學應用等),為可交互產品展現的場景帶來風格化渲染效果,激發使用者的興趣以提高產品的商業價值。
曲面上一點的主方向定義為該點法曲率取得最大和最小的方向。主方向對應的兩個法曲率被定義為主曲率。由于主方向可以表現物體在某一點的變化趨勢,使用主方向為基礎在許多風格化與可視化中得到了廣泛的應用[13-14]。因此,如何求解主方向成為了一個重要的主題,近幾年有許多關于如何求解主方向的研究。在微分幾何上,某一點的主曲率與主方向可以由該點Weingarten映射[16]或者形狀算子[3,15]進行特征值分解求得解析的解。但對于由三角網絡與幾何緩沖表達出離散的值而言,難以直接使用主方向的定義求解。現有算法中,對離散值進行主方向估計算法分成兩類,基于模型空間的預計算以及使用屏幕空間幾何緩沖進行實時估計。對于模型空間的預計算,現有3種較為常見的思路。
第1種算法是用高階多項式[4-5]對曲面進行擬合然后得到某個頂點的主方向。
第2種算法是先對每個三角面構建切平面[15-16],之后使用如差分的形勢計算該三角面沿著一條邊的法向量的變化量,然后將該方向與法向量的變化量代入形狀算子的等式來求得形狀算子矩陣的值,并將3個方向的結果使用最小二乘法進行回歸來得到更為準確對于每個三角面的結果。對于每個頂點,首先根據頂點切平面與三角面的切平面的位置關系,將其中一個平面圍繞著兩個平面法線的叉乘的方向進行旋轉,使得兩個平面共面(若兩個平面旋轉前已經共面,則不用旋轉)。之后求得形狀算子在頂點坐標系下的值。由于一個頂點對應多個三角形,即一個頂點對應多個形狀算子的值,本文使用Voronoi區域[17]值進行加權求和來得到一個更為準確的值。并將最后的結果進行特征值分解得到該頂點的主方向。這種算法,有著對于復雜度較高的模型,有著容易產生不平滑以及不連續的結果的問題[7]。
第3種算法是利用焦平面[7],其核心思想是利用曲面上一點的法向量與其周圍臨近的法向量會在某兩個平面上共線的這個特性,而這兩條共線的線便是主方向,這2個平面便是焦平面。對于離散三角網絡的估計,文獻[7]使用了L-M方法進行回歸以求得更準確的解,根據論文中的數據,這樣一種算法比第2種提到的算法,對于普通模型產生的結果略微不夠準確,但相對于復雜的模型能產生更為準確以及連續的結果。
總的來說,針對模型空間的算法雖有較高的準確性,相對于模型離散化而產生的噪聲有一定的魯棒性,但是其預計算需要大量時間,有著無法實時應用到有頂點動畫與蒙皮網絡渲染需求的缺陷,且會帶來額外的存儲空間。
對于屏幕空間的主方向估計,根據離散幾何上對主方向的定義,使用與臨近像素點的差分來獲取曲面的高階偏導數,并利用高階偏導數計算每個像素點的形狀算子以求得主方向的值。但這樣的算法因使用了三角網絡光柵化后線性插值得到的噪聲嚴重的世界坐標和法線方向,使得結果不夠準確。因此,文獻[6]提出了使用焦平面來實時計算主方向。該算法與模型空間的預計算方法類似,但是沒有使用回歸的方式求更準確的解,只使用目標像素點以及與其臨近的兩個像素點來進行計算。
線卷積積分作為一種讓向量場可視化的圖像處理技術最早由文獻[10]提出,文獻[18]對其進行了改進,文獻[19]將該算法應用到了圖像處理的運動模糊上。本文將該算法應用到實時渲染中。原算法的核心是在二維向量場上沿著每個像素點對應的向量場方向,每一步跨越一個像素點到另一個像素點,并通過新像素點對應的向量場的方向到達新的像素點。同樣的方式也可以推廣到三維,但三維向量場的渲染需要使用體渲染,這樣的方式難以與現有管線相整合做到實時渲染。
有序抖動最早是一種半透明的印刷技術。在圖形學中,有序抖動對于體積光等體渲染降低邁進步數[20-21],在圖像處理中,對圖像降噪等有著較為重要的作用。本文將該方式用于對線卷積積分的改進,提升了線卷積積分的性能。
文獻[12]提出了使用不同的光照等級對應不同紋理的方式來進行素描渲染,這種渲染算法存在線條繪制的方向固定、難以表現清物體的結構特點且透視錯誤的問題。文獻[6]用貼圖進行旋轉和粘貼的方式來繪制,存在空間耦合性的問題,且由于是后處理,每個像素點UV坐標旋轉圍繞的點的位置必須固定,使得繪制得到的方向與實際主方向偏差大,且存在透視錯誤的問題。文獻[8-9]使用線卷積積分的方式來進行渲染,但該算法存在透視錯誤的問題,且得到的結果存在疊筆不充分的問題(在素描繪制中,藝術家對于顏色較黑的色塊往往使用了從幾個方向進行“鋪調子”的方式,疊筆繪制)。
為闡明具有廣泛的適用性與魯棒性的實時主方向算法,以及基于該算法的更為接近手繪素描的渲染算法,從3個部分講解本文使用到的算法:適用范圍更廣且更具魯棒性的實時主方向估計,透視正確且高效率的線卷積積分,基于藝術導向的素描風格渲染,本文使用的算法的流程如圖1所示。
基于模型空間主方向估計需要預計算,不適用于蒙皮動畫與頂點動畫。而基于屏幕空間的主方向估計只與每一幀繪制得到的幾何緩沖有關,并且若使用延遲渲染的方式,幾何緩沖很容易獲得,使其很容易整合進現有管線中。
在屏幕空間的主方向估計方法中,本文對焦平面進行主方向估計的算法進行改進。相比于直接使用差分估計形狀算子的方式,基于焦平面的算法有著更好的對因為光柵化帶來的噪聲的抵抗能力。
原主方向估計[6]算法的核心思想是:首先構建以計算的像素點的法線為z軸,該點世界坐標為原點的正交坐標系;之后選擇兩個臨近像素點計算其法線射線在該坐標系下的表示,并求得兩個法線射線與該坐標系xy平面的交點(u1x,u1y,0),(u2x,u2y,0),并求的法線方向在該坐標系下,z值為1的方向向量(n1x,n1y,1),(n2x,n2y,1),之后利用如下等式求解計算焦平面的位置。
該等式化簡后為一元二次方程。若方程有解,則將得到的2個λ代入式(2)中,便可以求得主方向在該坐標系下的表示,將該向量轉換為世界坐標下的表示即為所求的主方向。
經復現后,發現此方法存在一定的缺陷:
1)原算法未對如何選取兩個臨近像素點的法線射線與焦平面的交點中的一個進行分析,因為在大部分情況下選擇其中任意一個均會得到正確的結果。但是對于如圓柱曲面以及其類似的曲面上,若選取的臨近的法線射線的像素點是與目標像素點在同一個圓周上的點,則會存在該像素點的法線射線與焦平面的交點與目標像素點的法線射線與焦平面的交點重合的問題(相交于該圓周的圓心)。若計算主方向時選取了該像素點,則由于浮點數精度問題,2個交點本應重合,但進行相減不為零向量,歸一化后得到的主方向與原來主方向相差過大,使得整體算法缺乏魯棒性。
2)由于只選擇了一組臨近像素點(2個),并根據其計算主方向,本文經過實驗,發現這樣的算法對于形態較為簡單的幾何體(如文獻[6]中展現的球體、圓柱體、茶壺)能得到較為準確的結果,但是對于較為復雜的形體,部分估計值會隨著這組像素點的選取而改變。并且隨著物體靠近屏幕方向,會出現一些像素點在求得焦平面解二次方程時出現判別式為負數的情況,導致使得該點的像素值無法確定,使得整體算法缺乏魯棒性。
為了解決上述2個問題,受文獻[7]中通過焦平面對模型空間中的離散三角網格的主方向使用L-M方法進行回歸的啟發,本文采用另一種思路進行更快的線性回歸。由于使用2個臨近的法線射線以及目標像素點的法線射線就可以計算出一組主方向,首先構建目標像素點所在的切平面的一個正交坐標系,接著分別求出目標像素點的周圍8個像素點的世界坐標與法向量在該坐標系下的相對坐標,并分別對這個8個像素的法線射線進行計算。對于每個像素在切平面下表示的法線射線的方向向量記為(nix,niy,1),與切平面的交點記為(uix,uiy,0),其中i的不同取值代表目標像素點周圍8個臨近像素點中的一個的計算結果。
接下來,將上方與左方、上方與右方、下方與左方、下方與右方、左斜上與左斜下、左斜下與右斜下、左斜上與右斜上、右斜上與右斜下這8組像素點分別與目標像素點在切平面正交坐標系下的幾何信息代入式(1),每一組分別求得最大主曲率或最小主曲率分別對應的應在主方向上的2個點(px1,py1,0)與(px2,py2,0)。
將得到的結果使用最小二乘法進行回歸。由于主方向與切平面平行,因此不考慮z軸方向,算法的偽代碼如下:
算法1 對采樣結果進行回歸求得更為準確的主方向
輸入:
Point[17]通過以上算法求得的17個坐標
axis X,axis Y分別對應切平面坐標系下的X軸與Y軸在世界坐標系下的表達。
輸出:
PrincipalDirection世界坐標系下的主方向for(int i=0;i<17;i++)
{
sum_x+=Point[i].x;
sum_y+=Point[i].y;
sum_xy+=Point[i].x* Point[i].y;
sum_x2+=Point[i].x*Point[i].x;
count++;
}
k=(sum_xy-sum_x*sum_y/count)
k/=(sum_x2-sum_x*sum_x/count);
b=(sum_y-sum_x*k)/count;
PrincipalDirection=normalize(axis X+(k+b)* axis Y)
使用最小二乘法進行線性回歸規避了之前提到了計算量大需要反復迭代,使用到超越函數的問題。之后像文獻[22]的方法進行平滑處理。
在非生物模型占主導地位的場景或渲染影視作品的場景下,可以只選用上方、下方、左方、右方4個像素點的采樣結果進行計算,原因如下:
生物模型(如人體以及各種動物)表面上相對平滑且起伏細節較多,較非生物模型更復雜,因此對生物模型較多的場景應該應使用8個像素點進行采樣。而對于非生物等人造物模型占主導的場景(如家具或汽車等機械),其表面比較規則,細節較少,因此對非生物模型較多的場景應使用4個像素點進行采樣。
幾何緩沖是由光柵化線性插值得到的,因此噪聲產生于頂點間頂點屬性線性插值。若模型頂點密度較高,相當于該模型其對物體表面采樣數更多,線性插值帶來的噪聲的影響就越小。影視作品其往往使用頂點密度較高的模型,對其應使用4個像素點進行采樣并計算結果。而對頂點密度較低的實時交互類應用(如游戲等),由于其使用頂點密度較低的模型,而導致噪聲問題嚴重,因此需要使用8個像素點采樣并計算得到結果。
這樣的算法能在GPU上能夠以較快的速度進行處理。作為實驗結果,本文發現使用這樣的算法計算得到屏幕空間主方向對于復雜模型有著更為準確的結果,并且基本能回避上文提到的文獻[6]中的兩個問題。
為了進一步解決物體靠近帶來的判別式為負數的問題,本文設置一定的深度等級作為對照。當深度低于一定指標時,在采樣時選擇離目標像素點一定距離外的像素點來構建法線射線。當物體離視平面較近時,臨近像素點由于線性插值和浮點數誤差,幾個像素點的空間位置上與平面過于近似而無法得到正確的結果。而使用有一定距離外的像素點,會在一定程度上減少線性插值帶來的影響,增大幾個像素點在空間位置上的差距,減少其與平面的近似程度,從而得到更為正確的結果。除此之外,對于一些已經被判定為平面的點,在進行對主方向進行平滑的時候,搜索其附近的點,將其附近沒被視成平面,且和該點在同一平面上的點的主方向賦給該像素點。這樣的做法能在一定程度上增強算法的魯棒性。
對于不同場景、深度等級及其對應的像素,采樣間隔設置方法如下:首先找到場景中曲率最低的曲面,若有多處則對多處分別按照以下思路計算深度等級,并對相同深度區間取最高間隔作為該部分的間隔。首先將該曲面貼近裁剪平面,之后將被錯誤視為平面的像素點中最高深度值作為最高深度等級,并逐一提高像素采樣的間隔距離,直到曲面上沒有像素點被視為平面。之后降低1像素間隔,并將物體向裁剪平面中遠平面偏移,直到沒有曲面上的像素點被視為平面,并記錄此時曲面上最低的深度值,將該深度值視為使用此時間隔的臨界點。并按照如上方法降低像素采樣距離并設置深度值,直到間隔變為1。
傳統線卷積積分以每一個像素點為單位,視一個像素點內向量場不會發生變化。故每一次向前傳播時,會固定跨越一個像素點。本文對該算法進行改進,不再將一個像素點內的向量場視為不變,而是作為一個通過插值得到的連續向量場參與后續運算。
本文算法對于非整點的采樣,對其臨近的4個頂點使用雙線性插值獲取采樣值,并通過控制步長得到風格化的效果,使用有序抖動降低了邁進的步數以提高性能。這樣的插值操作在GPU端由于其能被硬件實現而有著較高的效率。
文獻[8]中使用到的2D線卷積積分,其直接用主方向與透視矩陣相乘的結果,作為其進2D線卷積積分的2D向量。這樣的做法存在透視錯誤,因透視矩陣的構造,對于有相同方向向量的卻在裁剪空間中不同位置的像素點,該向量其在裁剪空間中與水平方向的夾角與像素點在裁剪空間的位置有關。而將其直接與透視矩陣相乘,則使得擁有同樣主方向,在不同剪裁空間位置的像素點有著相同的投影主方向。因此,原算法會帶來如圖2的問題。圖2與圖3渲染了3個不同朝向的圓柱,并沿著圓柱的主方向進行卷積。圖2中由于透視問題導致渲染結果不正確:線卷積積分的線條并非沿著物體表面主方向延伸。但若使用3D的線卷積積分,則需要進行體渲染,對渲染管線改動較大。采用本文算法可以規避以上問題,得到圖3的效果。
新線卷積算法首先由使用者確定邁進步長與邁進次數。算法流程如下:
步驟1對于每一個像素點,第一步根據有序抖動矩陣與其像素所在位置得到其起始偏移量,通過該點uv坐標對計算好的主方向結構緩沖與世界坐標結構緩沖進行采,之后計算該點的主方向與偏移量的乘積并再加到像素所在世界坐標。
步驟2將所得到的世界坐標位置與投影矩陣相乘,將結果轉換為屏幕空間uv坐標,使用此uv坐標對計算好的主方向結構緩沖與世界坐標結構緩沖進行采樣,得到新的世界坐標與主方向。
步驟3將主方向與步長相乘,加到世界坐標上,讓累計卷積值加上通過uv坐標對當前卷積目標進行采樣的值,邁進次數加1。
步驟4若邁進次數未達到規定的邁進次數,則返回步驟2。
通過規定邁進步長與邁進數,可以得到更為風格化的結果。使用較長的步長可以得到軟鉛描繪的效果,而較短的步長得到的效果更加細膩,類似硬鉛繪制得到的效果。
文獻[8-9]等在進行素描風格的渲染時,只對白噪聲進行了線卷積積分。本文發現,若使用如Perlin噪聲,Worley噪聲等可以得到一些風格化效果,具體效果在實驗部分進行展開。
為了解決空間耦合問題,本文使用uv坐標對噪聲貼圖進行采樣來實現。首先對不同模型設置一個uv比例材質參數。之后在延遲渲染時將每個像素點的uv坐標乘以uv比例材質參數,將得到的結果單獨存在一張紋理中。在線卷積積分時,對于每一點的噪聲值,用這張紋理中得到uv值去采樣一張噪聲紋理得到。之所以要使用一個uv比例材質參數,這是因為一些模型因為其使用的紋理數量不同,uv值會出現較密或者較為疏松的情況。通過使用這樣一個紋理比例參數來勁調整,使得繪制出來的線條在模型與模型之間有著相近的大小。
文獻[6,8,12]對素描風格的渲染模擬是從繪制完成的作品中去分析的,而未從藝術家在完成這類作品時為了表現出某些藝術特點而使用了怎樣的繪制方式去分析,錯過了一些在素描繪制中表現的較為重要的細節。本文從素描繪制期望表現的特點進行分析,對素描風格渲染模擬提出改進。
2.3.1 增強物體表面立體感
素描為了表現出一個面的立體感,往往采用的渲染手法是讓面融入場景。為了達到這樣的藝術特點,素描繪制的做法是減少邊緣,在上色階段,會將原來作為結構繪制的邊緣部分,通過排線的方式,讓其通過漸變的方式融入背景,或者物體的較暗的部分,并以此加強邊緣兩邊的亮度對比。即若邊緣的一側,主要表現的物體越亮,那么藝術家會希望邊緣的另外一側就越暗。若主要表現的物體越暗,則藝術家則希望邊緣的另外一側就越亮。
為了達到期望效果,在光照繪制階段,首先使用alpha通道或者模板緩存標記物體是否是主要表達的物體。因為之后使用到了較大的卷積核,為了提升運行效率,本文對通過將光照計算得到的渲染結果進行下采樣。之后將得到的結果進行卷積核較大的高斯模糊,但為了減少計算量,本文并非對于卷積核內所有單位進行全部采樣,而是隔一定的像素距離進行一次采樣。將計算結果與原像素值進行對比,若原像素值大于該像素值(對應想表現的部分更暗的情況),則結果為原像素值加上使用者設定的希望的對比度大小與兩者的差的絕對值的乘積。若原像素值小于該像素值(對應想表現的部分更亮的情況),則結果為原像素值減去使用者設定的希望的對比度大小與兩者的差的絕對值的乘積。將得到的結果與下采樣前的光照結果進行混合得到最后背景像素值。
圖4左邊是未經本文處理的渲染圖,右邊是經過該方法的渲染結果。不難看出,兩幅圖中,在箭頭處所指,物體的邊緣兩側(即背景與物體兩部分),右圖由于進行了風格化處理,使得明暗對比更加明顯,這樣一種做法在視覺上使得球體更有體積感。
2.3.2 畫面處理復雜度的降低以及更加符合手繪的線條
在傳統素描繪制中,藝術家往往會使用角度相差不大的線條組對畫面進行上色(即素描專業術語:“鋪調子”),若使用角度變化較大的線條進行上色,會使得畫面處理復雜度較大,而使得畫面過于雜亂。在素描渲染中,若直接使用主方向進行繪制,對于復雜模型,由于主方向變化頻率高,使得線條角度變化大,導致整體畫面處理復雜度過大,使得渲染結果不符合手繪效果。
為解決以上問題,本文使用了兩個主方向角平分線的方向作為線卷積的方向。經實驗,使用這樣的一個方向降低了畫面的處理復雜度(processing complexity),計算機美學研究認為美學價值與處理復雜度成反比[24],處理復雜度的降低讓畫面更加符合現實到繪畫作品的抽象,使其更具有美學價值。并且處理復雜度的降低提高從整體上來看更加符合素描的效果,且由于每個像素點的兩個主方向均不存在空間耦合問題,因此作為其角平分線依然不存在空間耦合問題。并且由實驗部分可以看出,這種方法在視覺效果上也能表現出物體的結構特征。
求角平分線所在方向很容易整合進本文的算法中。本文并沒有分別去求最大法曲率與最小法曲率對應的主方向,再在該基礎上求夾角的角平分線,而是在采樣8個點的法線射線分成八組計算焦平面時,選擇一半的組估計最大法曲率對應的主方向,一半的組估計最小法曲率對應的主方向,再將結果進行最小二乘法回歸。
2.3.3 素描三大面的表現
素描中為了表現物體的光影關系,提出了三大面的概念:亮面、灰面、暗面。素描繪制中,應著重加強3個面的對比關系。其中灰面與暗面往往能用光照方程的渲染結果很好地表達。但對于亮面,文獻[8]在線卷積積分后對其沒有進行處理,使得灰面與亮面的對比感不強。為了表現亮面,本文設置了2個接近1閾值,當像素點的亮度高過較小閾值時,將其亮度進行一定的非線性縮放,使得該亮度在達到第2個閾值時為1。將亮度值高過第2個閾值的像素點也標記為亮度為1的像素點。通過這樣的處理,渲染出來的結果也能像手繪渲染一樣有與畫面其他部分對比較強的亮面,且亮面與灰面過渡平緩。
使用1 920*1 080的渲染分辨率與InterI9-9990X的CPU與GTX2080的顯卡。為了表現這種算法能很好地整合進現有的渲染管線,本文在Unity3D(2019.3.4f1)上進行了實驗。并為了得到更高精度的幾何緩沖以及存儲模型uv信息的幾何緩存,實驗部分未使用內置的延遲渲染管線,而是使用了Unity3D的可編程管線(SRP)重新實現了延遲渲染。
3.2.1 主方向實時估計效果
對2個圖形學常用模型的主方向進行估計,并分別計算其主方向,并將結果其渲染到屏幕空間上,與現有算法進行對比。為方便讀者比較,本文將主方向單位向量的絕對值作為像素點的顏色。其中本文算法與文獻[6]的結果算法經過了文獻[6]使用的濾波。其中,圖5為文獻[3]中算法,圖6為文獻[6]中算法,圖7為本文算法。表1為每種算法計算所的時間,表2為以文獻[3]算法(圖5)為基準,對圖6與圖7分別計算峰值信噪比。可以看到,本文的算法每一幀渲染時間雖然略高于文獻[6]的算法,但是魯棒性較強,且不會出現如中部分因為估計時解二次方程判別式為0帶來的黑色區域。通過對比峰值信噪比,本文算法比文獻[6]的算法在估計值上更加準確。相比于文獻[3]的算法,無需大量的預計算時間。

表1 主方向估計所需時間

表2 本文算法、文獻[6]算法與文獻[3]算法計算的峰值信噪比
3.2.2 線卷積積分
將文獻[8]使用的文獻[10]的線卷積積分與本文提出的改良后的線卷積積分算法的渲染結果進行對比。圖8為文獻[8]的算法,圖9為本文的算法。每組中,從左到右分別是卷積長度為10、20、40、60的結果。表3為每組中不同卷積長度每一幀渲染所需時間。

表3 線卷積所需時間 ms
從以上算法中可以看出,本文提出的線卷積算法雖然在相同步數下性能低于傳統算法,但本文的算法在10步時有著與原方法60步的效果,并且透視正確。表明了本文的線卷積算法能用較低的步數獲取原方法較高步數的效果,且近似效果下,本文算法的10步需要的每一幀渲染的時間1.6 ms低于原方法60步所需的2.31 ms。
3.2.3 畫面處理復雜度的降低
為表現相比于直接使用主方向作為線卷積的方向,使用本文算法的主方向的角平分線能降低畫面的處理復雜度而進行實驗。為了定量計算處理復雜度的降低,本文使用了文獻[24-25]中對美學價值處理復雜度定量計算的指標,即將圖像采用有損壓縮算法(本文使用JPEG壓縮算法,即DCT變換),之后通過均方根誤差除以壓縮率來計算圖像的處理復雜度。分別將兩個模型的主方向以及主方向間的角平分線的方向與透視矩陣相乘,將得到的方向向量結果轉換為標量角度并縮放到紋理像素的取值范圍。圖10為計算得到渲染結果,其中左邊為直接使用主方向,而右圖為使用主方向的角平分線。之后分別對每一組計算文獻[24-25]中的指標(使用50%的壓縮率),結果如表4所示。實驗結果表明,使用角平分線相比于直接使用主方向能夠降低畫面的處理復雜度。

表4 圖10中每組畫面處理復雜度的降低比例
3.2.4 不同類型噪聲的風格化卷積效果
分別使用白噪聲、Perlin噪聲以及Worley噪聲進行線卷積積分。其中文獻[8-9]使用到白噪聲如圖11,Perlin噪聲如圖12,Worley噪聲如圖13。為方便對比,未與光照進行混合。經過對比可以發現,使用白噪聲進行卷積,得到的結果較為細膩,像是由硬度較高的鉛筆繪制出。Perlin噪聲輕線條與重線條的區分較白噪聲更為明顯,像是由硬度適中的鉛筆繪出。Worley噪聲卷積后得到的結果輕線條與重線條區分十分明顯,像是用軟鉛繪制而成。實驗表明,使用不同噪聲進行卷積,會帶來不同的風格化效果。
3.2.5 空間耦合性
為表明本文算法有較強的空間耦合性,圖14對通過本文算法渲染的模型的一系列角度進行觀察。不難發現,隨著視角位置的變化,模型身上的線條位置沒有發生變化。實驗表明,本文算法具有較強的空間耦合性。
3.2.6 間隔一定距離采樣對性能與效果的影響
為表現本文在2.3.1節中,使用間隔一定距離采樣的算法對性能與效果的影響,本節分別對73*73的卷積核全部采樣,間隔不同像素距離的采樣效果以及渲染單幀所需時間(運算量)進行分析。渲染效果如圖15所示(從左到右,從上到下依次為全部采樣,間隔2、4、6像素進行采樣),單幀渲染時間如表5所示。可以看出,全部采樣以及間隔一定像素進行采樣對渲染效果無明顯影響,而性能上相比于全部采樣,間隔6像素進行采樣每一幀節省了186.9 ms。

表5 間隔一定像素距離的每幀渲染所需時間
3.2.7 素描風格渲染
本節將素描渲染得到的整體效果,與按照文獻[8]中的線卷積方式,以及其卷積方向的選擇得到的效果進行對比。按照文獻[8]中的線卷積方式,以及其卷積方向的選擇得到的效果如圖15所示,按照本文算法渲染得到的結果如圖16所示。
通過對比,在線條描繪上,圖17中,通過結構張量對光照結果進行分析,對主方向表現不明顯的臍點,如平面或球體,按照其亮度變化的方向進行卷積,使其也有較為適合線條表達其形狀特征。并且對主方向表現明顯的物體,使用了多個方向進行疊筆。并且運用了本文的透視正確的線卷積積分,在表達物體的形狀上更為準確。而圖16文獻中算法因僅考慮了主方向作為其卷積方向,使得其對于主方向不明顯的臍點只能用固定的方向進行卷積,并且存在透視錯誤的問題,使得線條無法很好地表現出物體的形狀特征。
圖17 中,通過對高于一定閾值的像素點的篩選形成了亮面。這種做法加強了畫面灰部與亮部的對比,并且通過對背景進行處理,加強了物體的立體感,使得整體效果更貼近手繪素描效果。而圖16中,該算法沒有考慮物體與物體之間的關系,且未根據素描表現效果進行風格化處理,使得其表現效果不如本文的渲染結果。
本文提出一種更具魯棒性的實時主方向估計,以及一種效率更高且透視正確的線卷積積分。通過將這兩種方法,并結合藝術導向的處理,得到符合美學且實時的素描渲染結果。實驗結果表明,這種算法比傳統素描繪制算法能更好地表現手繪素描效果,且有著較廣泛的適用性。由于主方向可以很好地表現物體的形狀特征,因此后續考慮將這種魯棒的實時主方向估計應用到其他風格化渲染(如油畫等)上。