王亞楠,肖雙九
(上海交通大學(xué) 電子信息與電氣工程學(xué)院,上海 200240)
半透明物體表面陰影的渲染
王亞楠,肖雙九
(上海交通大學(xué) 電子信息與電氣工程學(xué)院,上海 200240)
基于陰影映射算法,提出一種半透明物體表面陰影的渲染方法.考慮半透明物體的次表面散射的光學(xué)特性,在獲得陰影圖后加入陰影接收表面的材質(zhì)散射系數(shù),確定隨機(jī)取樣的范圍,使用加權(quán)平均方法計(jì)算目標(biāo)點(diǎn)處于陰影區(qū)域的概率值,最終渲染場(chǎng)景.實(shí)驗(yàn)證明,該方法能夠真實(shí)模擬半透明物體表面陰影中散影區(qū)的渲染效果.
陰影渲染;陰影映射算法;次表面散射;隨機(jī)采樣
在現(xiàn)實(shí)生活中,陰影無(wú)處不在,陰影提供了光源對(duì)物體的照射信息,它增加了人們理解三維場(chǎng)景的深度[1],通過陰影可以得到物體的大小、距離、高度等重要的信息,并且在一定情況下可以得到物體的材質(zhì)屬性.作為陰影接收者,半透明物體和不透明物體表面的陰影是有區(qū)別的.在相同光照和遮擋條件下不同材質(zhì)的接受物表面陰影實(shí)物照片,如圖1所示.由圖1(a)可以看出,遮擋物在半透明物體表面形成的陰影邊緣更為柔和,有一部分過渡區(qū)域.遮擋物在不透明物體表面形成的陰影邊緣界限則比較清晰,如圖1(b)所示.
產(chǎn)生圖1中不同陰影的原因是半透明物體的次表面散射效應(yīng).次表面散射是光從表面進(jìn)入物體經(jīng)過內(nèi)部散射,然后又通過物體表面的其他點(diǎn)射出的光線傳遞過程.半透明物體由于次表面散射導(dǎo)致本來處于本影區(qū)(沒有光源直接照射)的一部分區(qū)域具有一定的反射亮度,在視覺上表現(xiàn)為陰影邊緣比較柔和.將半透明表面的這一陰影區(qū)域稱為“散影區(qū)”.由于散影區(qū)的存在,在相同光照和遮擋條件下,半透明的陰影接收體表面的本影區(qū)的范圍會(huì)相對(duì)較小.
(a) 人造大理石表面
(b) 白色不透明表面
圖1 不透明表面和半透明表面陰影
Fig.1 Shadow on opaque surface and translucent surface
在實(shí)時(shí)陰影計(jì)算方面,人們已經(jīng)做過許多研究.現(xiàn)有的多種陰影算法可分為兩大類:硬陰影算法和軟陰影算法[2-5].硬陰影是指場(chǎng)景中的點(diǎn)只有在陰影中或在陰影之外兩種狀態(tài);軟陰影是指定義一個(gè)點(diǎn),如果光源射向它的光線被部分遮擋了,則這個(gè)點(diǎn)位于半影區(qū)域.現(xiàn)在比較常用的陰影算法有陰影映射算法(shadow mapping)[2]和陰影體算法(shadow volume)[6].陰影體算法的復(fù)雜度與場(chǎng)景中的物體個(gè)數(shù)相關(guān),相對(duì)于陰影映射算法而言,其復(fù)雜度較高.傳統(tǒng)陰影映射算法生成的是硬陰影,人們基于陰影映射算法提出了一些軟陰影算法,例如adaptive shadow maps(ASM)[7],perspective shadow maps(PSM)[8], percentage closer filtering(PCF)[9].其中,PCF在繪制陰影時(shí),除了繪制該點(diǎn)陰影信息,還對(duì)該點(diǎn)周圍陰影情況進(jìn)行多次采樣并混合來實(shí)現(xiàn)半影區(qū)域,ASM和PSM都是在產(chǎn)生鋸齒的地方人為地增加采樣率.在陰影映射算法中,人們根據(jù)生成的陰影圖來計(jì)算陰影,場(chǎng)景中所有物體表面的陰影被相同對(duì)待;軟陰影算法對(duì)所獲得的陰影圖整體進(jìn)行處理,即場(chǎng)景中的所有物體表面的陰影使用同一算法.
但現(xiàn)有陰影映射算法中并未考慮陰影接收體的材質(zhì),對(duì)于整個(gè)場(chǎng)景中所有物體采用統(tǒng)一算法計(jì)算陰影.本文基于陰影映射算法,提出一種半透明物體表面陰影的渲染方法.由于光線在半透明物體內(nèi)部的散射作用會(huì)在陰影的本影區(qū)的局部產(chǎn)生反射亮度,形成半透明物體表面特有的散影區(qū)的陰影效果.散影區(qū)域的范圍由半透明物體的散射系數(shù)決定,因此在渲染半透明物體表面的陰影時(shí),考慮加入材質(zhì)的散射系數(shù)來確定所產(chǎn)生的散影區(qū)域范圍.本文假設(shè)所用光源為點(diǎn)光源,遮擋物為不透明材質(zhì)物體.
1.1 半透明物體表面陰影分析
根據(jù)次表面散射的原理對(duì)半透明表面產(chǎn)生的陰影進(jìn)行分析,假設(shè)點(diǎn)xout處應(yīng)完全沒有光照,即xout應(yīng)處于本影區(qū)域,如圖2(a)所示.如果陰影接收表面為半透明材質(zhì),如圖2(b)所示,從點(diǎn)x1,x2,…,xn處射入的光線經(jīng)過單次散射或者多次散射從xout處射出,于是點(diǎn)xout處具有一定的反射亮度,即點(diǎn)xout實(shí)際應(yīng)處于散影區(qū)域,其光照亮度L0可近似表示[10]為
(1)
其中:V為物體表面所有頂點(diǎn)的集合;I(xi)為點(diǎn)xi處的光照輻射度;Fr(w0)為x0處的菲涅爾系數(shù);F(xi)為點(diǎn)xi處的面積;Rd(xi,x0)定義了從物體表面上任意一點(diǎn)入射的光線,通過多次散射之后到達(dá)物體表面上另一點(diǎn)的比例.由文獻(xiàn)[6]給出的Rd(xi,x0)的近似定義可以看出Rd(xi,x0)與distance(xi,x0)有關(guān),距離越遠(yuǎn)的點(diǎn)對(duì)xout處光照亮度的貢獻(xiàn)度越小,如圖2 (b)中,Rd(x3,x0)>Rd(x2,x0)>Rd(x1,x0).當(dāng)距離大于一定值時(shí)基本可以忽略不計(jì),比如點(diǎn)y1對(duì)點(diǎn)xout處的光照亮度的貢獻(xiàn)度可以忽略不計(jì),這個(gè)距離由半透明材質(zhì)本身內(nèi)部的散射系數(shù)所決定的.
(a) 不透明物體 (b) 半透明物體
1.2 算法設(shè)計(jì)
根據(jù)1.1節(jié)的分析,這里使用簡(jiǎn)化式(2)來近似求xout處的顏色值C0.
(2)
式中:Ci為點(diǎn)xi處光照亮度計(jì)算值(未加入陰影計(jì)算).為節(jié)約計(jì)算成本,可將V由物體表面所有點(diǎn)的集合簡(jiǎn)化為xout周圍一定區(qū)域內(nèi)所有點(diǎn)的集合,區(qū)域的大小由物體材質(zhì)本身的散射度來決定.
在陰影計(jì)算中,若點(diǎn)xout原本在本影中,則其顏色值應(yīng)受周圍一定區(qū)域內(nèi)點(diǎn)的影響.在陰影映射算法中,繪制時(shí)會(huì)根據(jù)depthmap上對(duì)應(yīng)的深度值來判斷當(dāng)前目標(biāo)點(diǎn)是否在陰影中,如果在陰影中其v值為0,否則v值為1.根據(jù)深度測(cè)試結(jié)果可得到一幅陰影圖,存儲(chǔ)點(diǎn)處于陰影內(nèi)的概率值.對(duì)于點(diǎn)xout,計(jì)算點(diǎn)xout周圍一定區(qū)域內(nèi)點(diǎn)在陰影區(qū)域內(nèi)的概率值的加權(quán)平均作為點(diǎn)xout最終處于陰影區(qū)域的概率值,如式(4)所示.
C0=C·p
(3)
(4)
(5)
式中:C0為點(diǎn)xout處最終渲染時(shí)的顏色值;C為點(diǎn)xout處未計(jì)算陰影時(shí)的光照亮度計(jì)算值;n為采樣點(diǎn)的數(shù)量;p為目標(biāo)點(diǎn)處于陰影區(qū)域的概率值;vi為點(diǎn)xi處深度測(cè)試的結(jié)果值.由1.1節(jié)的分析可知,根據(jù)物體材質(zhì)的散射系數(shù)來取一定的區(qū)域,以點(diǎn)xout為圓心和R為半徑的圓區(qū)域來計(jì)算點(diǎn)xout處的p值,如圖3(a)所示,黑色部分為本影區(qū)域,計(jì)算區(qū)域半徑R由材質(zhì)的散射系數(shù)s(0≤s≤1)決定,取R=16·s,不同的散射系數(shù)表示不同透明度.將目標(biāo)區(qū)域分區(qū),如圖3(b)所示.圓被直線分割為N個(gè)區(qū)域,在徑向?qū)A又劃分成c個(gè)圓環(huán),將整個(gè)采樣區(qū)域分為N·c個(gè)子區(qū)域.c值應(yīng)與R相等(若R為小數(shù),向上取整),N為常數(shù).當(dāng)然,N取值越大,采樣點(diǎn)數(shù)目會(huì)越多,計(jì)算結(jié)果會(huì)越精確,計(jì)算量也會(huì)隨之增大.本文設(shè)置的N值為6,如N<6則渲染出來的陰影粒子感比較明顯.假設(shè)散射系數(shù)為0.5,求得R值為8,那么采樣區(qū)域的子區(qū)域數(shù)量為48.為減少計(jì)算量,采用隨機(jī)取樣[11]的方法在每個(gè)子區(qū)域中選取一點(diǎn),如圖3(b)中的×點(diǎn),那么計(jì)算目標(biāo)點(diǎn)陰影參數(shù)時(shí)的采樣點(diǎn)數(shù)目為48,對(duì)這些點(diǎn)使用式(4)來計(jì)算點(diǎn)xout處于陰影內(nèi)的概率值.
(a) 以xout為圓心
(b) 對(duì)目標(biāo)點(diǎn)周圍進(jìn)行分區(qū)
為驗(yàn)證這一采樣方案的有效性,將不同采樣點(diǎn)數(shù)量計(jì)算得到的陰影效果做了對(duì)比實(shí)驗(yàn),結(jié)果如圖4所示.由圖4可以看出,兩幅圖中的陰影區(qū)域基本相同,說明本文采樣方案在精度和計(jì)算量之間的平衡是較優(yōu)的.
(a) 采樣點(diǎn)數(shù)目為48
(b) 采樣點(diǎn)數(shù)目為120
1.3 算法步驟
本文提出的半透明物體表面陰影算法主要包含以下步驟:
(1) 以光源位置為視點(diǎn),將場(chǎng)景的深度信息渲染到紋理中,生成陰影映射圖;
(2) 以相機(jī)位置為視點(diǎn),使用步驟(1)中獲得的深度紋理來進(jìn)行陰影測(cè)試,通過比較給定點(diǎn)在光源空間中的深度值與該點(diǎn)在深度紋理中的深度值關(guān)系,判斷該點(diǎn)是否處于陰影中,將判定結(jié)果存于紋理中,稱為陰影圖;
(3) 使用隨機(jī)取樣方法對(duì)上一步獲得的陰影圖進(jìn)行模糊處理,其中隨機(jī)取樣的范圍為圓形區(qū)域,圓形區(qū)域的半徑R由半透明物體的散射系數(shù)計(jì)算,本文取R=16·s(0≤s≤1);
(4) 以相機(jī)位置為視點(diǎn),根據(jù)步驟(3)中處理后的陰影圖渲染整個(gè)場(chǎng)景.
本文實(shí)驗(yàn)在一臺(tái)Intel Core i5-2300 2.8 GHz CPU, 內(nèi)存8 GB,NVIDIA GeForce GTX 570顯卡的機(jī)器上進(jìn)行.基于Open GL 4.0,使用GPU的頂點(diǎn)渲染器和像素渲染器功能,在VS 2012編程環(huán)境下實(shí)現(xiàn)本文算法.
實(shí)驗(yàn)的場(chǎng)景中包含背景平面和一個(gè)點(diǎn)光源,遮擋體為一個(gè)不透明的圓環(huán),陰影接收體是一個(gè)半透明材質(zhì)的茶壺.
2.1 渲染半透明物體
對(duì)半透明物體的渲染方法,人們已經(jīng)做過很多研究,現(xiàn)有的算法有空間動(dòng)態(tài)可變材質(zhì)的交互式全局光照方法和高斯核模擬方法[12-13].為減少相關(guān)的計(jì)算量從而獲得更快的渲染速率,本文渲染半透明物體使用fake sub-surface scattering shader[14].在算法的具體實(shí)現(xiàn)時(shí),給材質(zhì)添加了散射系數(shù)s,s為0時(shí)表示不透明物體,使用Phong光照模型計(jì)算物體表面顏色值,如圖5(a)所示;s不為0時(shí)表示半透明物體,使用fakesub-surfacescatteringshader來進(jìn)行渲染,如圖5(b)所示;使用本文提出的陰影算法計(jì)算陰影,如圖5(c)所示.
(a) 使用Phong模型渲染不透明 物體
(b) 使用fake sub-surface scattering shader渲染 半透明物體
(c) 加入陰影計(jì)算的半透明表面陰影
2.2 渲染半透明物體表面陰影
利用不同陰影算法渲染相同場(chǎng)景的實(shí)驗(yàn)結(jié)果如圖6所示.其中,圖6(a)使用傳統(tǒng)陰影映射算法,可以看到陰影邊緣界限明顯;圖6(b)使用2×2的百分比接近濾波(PCF)軟陰影算法,可以看到陰影的邊緣比圖6(a)中陰影平滑;圖6(c)使用本文提出的半透明表面陰影算法,可以看到半透明茶壺表面陰影邊緣具有散影區(qū)域,即明顯的軟陰影部分,而背景墻面上的陰影不具有半影區(qū)域,因?yàn)椴鑹厣⑸湎禂?shù)為0.80,墻面的散射系數(shù)為0,根據(jù)材質(zhì)的散射系數(shù)渲染不同表面的陰影.
本文的半透明表面陰影算法通過改變s值渲染相同場(chǎng)景的實(shí)驗(yàn)結(jié)果如圖7所示.由圖7可以看出,隨著散射系數(shù)的增大,陰影邊緣的散影區(qū)域也在增大,并且陰影更加柔和.
(a) 陰影映射算法
(b) PCF算法
(c) 半透明物體表面陰影算法
(a)s=0.15
(b) s=0.50
(c) s=0.80
本文算法在半透明和不透明小牛上產(chǎn)生的自陰影渲染圖如圖8所示,其中墻面的散射系數(shù)為0.由圖8可以看出,半透明小牛模型在自己表面形成的自陰影邊緣更加柔和,即為軟陰影,不透明小牛表面形成的自陰影邊緣很明顯,兩幅圖中小牛在墻面上形成的陰影是相同的.
(a) 半透明小牛
(b) 不透明小牛
本文提出了一種半透明物體表面陰影渲染的改進(jìn)算法,加入陰影接收表面材質(zhì)屬性信息,并使用次表面散射算法,確定對(duì)目標(biāo)點(diǎn)顏色值有貢獻(xiàn)度的點(diǎn)所在的區(qū)域,采用隨機(jī)取樣的方法在該區(qū)域內(nèi)采樣進(jìn)行計(jì)算,模擬遮擋物在半透明陰影接受體表面形成的陰影.從實(shí)驗(yàn)渲染結(jié)果可看出,使用本文算法渲染出的場(chǎng)景中半透明物體表面陰影具有散影區(qū)域,更接近真實(shí)場(chǎng)景.
本文假設(shè)光源為單光源,并且遮擋物為不透明物體,在下一步的工作中需要考慮光源為多光源以及遮擋物也是半透明物體情況下如何計(jì)算其在半透明陰影接收表面所形成的陰影.
[1] 何援軍.計(jì)算機(jī)圖形學(xué)[M].北京:機(jī)械工業(yè)出版社, 2006: 197-198.
[2] WILLIAMS L. Casting curved shadows on curved surfaces [C]//Proceedings of SIGGRAPH’78. 1978:270-274.
[3] LOKOVIC T, VEACH E. Deep shadow maps [C]//Proceedings of SIGGRAPH’2000. 2000: 385-392.
[4] JENSEN H W, MARSCHNER S R, LEVOY M, et al. A practical model for subsurface light transport [C]//Proceedings of SIGGRAPH. 2001: 511-518.
[5] WOO A, POULIN P, FOURNIER A. A survey of shadow algorithms [J]. IEEE Computer Graphics & Applications, 1990, 10(6): 13-31.
[6] BERGERON P. A general version of crow’s shadow volumes [J]. IEEE Computer Graphics & Applications, 1986, 6(9): 17-28.
[7] FERNANDO R,F(xiàn)ERNANANDEZ S,BALA K , et al. Adaptive shadow maps[C]//Computer Graphics Proceedings,Annual Conference Series,ACM SIGGRAPH. Los Angeles,California,2001:387-390.
[8] STAMMINGER M, GEORGE D. Perspective shadow maps[C]//Computer Graphics Proceedings,Annual Conference Series,ACM SIGGRAPH.San Antonio,2002 :557-562.
[9] REEVES W T,SALESIN D H,COOK R L. Rendering antialiased shadows with depth maps[J]. Computer Graphics,1987 ,21(4):283-291.
[10] STAM J. Multiple scattering as a diffusion process [J]. Proceedings of Euro Rendering Workshop, 1995, 6(1): 41-50.
[11] WOLFF D.OpenGL 4 shading language cookbook[M]. Birmingham:Packt Publishing Limited, 2011:251-257.
[12] 孫鑫,周昆,石教英.空間動(dòng)態(tài)可變材質(zhì)的交互式全局光照明繪制[J].軟件學(xué)報(bào),2008,19(7):1783-1793.
[13] NGUYEN H.GPU Gems 3[M]. New Jersey: Addison-Wesley Professional, 2007: 223-263.
[14] Toneburst. GLSL translation of this fake sub-surface scattering shader by invalid pointer. [EB/OL].(2008-10-29)[2014-08-15]. http://machinesdontcare.wordpress.com/2008/10/29/sub surface-scatter-shader/.
Rendering Shadows on Translucent Objects Surface
WANGYa-nan,XIAOShuang-jiu
(School of Electronic Information and Electrical Engineering, Shanghai Jiaotong University, Shanghai 200240, China)
Based on shadow mapping, an algorithm of rendering shadows on translucent objects is presented. Considering sub-surface scattering optical properties of translucent objects, after getting the shadow map, this algorithm uses the scattering coefficient of translucent objects to determine the scope, then computes the probability value of the target point, renders the scene at last. Experimental result shows that the method can simulate the scatter shadows on translucent objects realistically.
shadow rendering; shadow mapping; sub-surface scattering; random sampling
1671-0444(2015)05-0646-04
2014-11-16
國(guó)家自然科學(xué)基金資助項(xiàng)目(61173105, 61373085)
王亞楠(1990—),女,江蘇南通人,碩士研究生,研究方向?yàn)橛?jì)算機(jī)圖形圖像. E-mail:wyn_double@163.com 肖雙九(聯(lián)系人),女,副教授,E-mail: xsjiu99@cs.sjtu.edu.cn
TP 391
A