国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

真實(shí)感海下光照效果實(shí)時(shí)繪制

2018-10-17 12:25:38呂夢(mèng)雅周升騰
關(guān)鍵詞:八叉樹(shù)陰影紋理

呂夢(mèng)雅,劉 丁,唐 勇,李 穎,周升騰

(燕山大學(xué) 信息科學(xué)與工程學(xué)院,河北 秦皇島 066004)

(河北省計(jì)算機(jī)虛擬技術(shù)與系統(tǒng)集成重點(diǎn)實(shí)驗(yàn)室,河北 秦皇島 066004)

1 引 言

虛擬海洋場(chǎng)景的實(shí)時(shí)繪制在計(jì)算機(jī)圖形學(xué)研究中既是熱點(diǎn)又是難點(diǎn).它在海洋勘測(cè)、災(zāi)害救援、主機(jī)游戲、影視特效等方面起著重要的作用.海洋場(chǎng)景的仿真包括海面與海下,國(guó)內(nèi)外研究成果多集中于海面模擬領(lǐng)域,在海底場(chǎng)景實(shí)時(shí)繪制方面則略顯匱乏.隨著人類對(duì)海下資源的開(kāi)發(fā)和利用,進(jìn)行海下場(chǎng)景的仿真具有重要的現(xiàn)實(shí)意義.

海下光照的仿真涉及到海水與光照交互無(wú)疑更加具有挑戰(zhàn)性.其中主要包括以下兩點(diǎn):

1)光與水分子、懸浮顆粒和有機(jī)物質(zhì)相互作用產(chǎn)生復(fù)雜的光束、陰影、焦散等現(xiàn)象;

2)海下場(chǎng)景會(huì)受到海下深度、海水濃度、海水散射等影響呈現(xiàn)不同的色調(diào).

2002年,東京大學(xué)Iwasaki等通過(guò)累積光條紋的強(qiáng)度來(lái)實(shí)現(xiàn)水下體積光效果,使用陰影貼圖技術(shù)實(shí)現(xiàn)光束照射對(duì)象的陰影[1],但計(jì)算每個(gè)三角網(wǎng)格折射體積光太過(guò)耗時(shí)并不能實(shí)現(xiàn)海下場(chǎng)景的實(shí)時(shí)模擬.2007年,MA Shah等人提出一種基于焦散映射的方法實(shí)時(shí)渲染來(lái)自反射和折射對(duì)象的焦散[2],但文中并未涉及到體積光的實(shí)現(xiàn).2009年,雅典經(jīng)濟(jì)與商業(yè)大學(xué)Papadopoulos等使用繪制線條的方法來(lái)模擬體積光效果[3],然而該方法由于線條光柵化的限制,需要提高光線的采樣次數(shù).2010年,北京化工大學(xué)胡威等提出一種用于單散射參與介質(zhì)的體積光焦散渲染方法[4],但這種方法僅適用于較小的水下場(chǎng)景.2011年,麻省理工學(xué)院計(jì)算機(jī)圖形組Liktor等提出一種自適應(yīng)可擴(kuò)展光線追蹤單散射體積光渲染的算法[5],但只是實(shí)時(shí)繪制小規(guī)模水體下的體積光.同年麻省理工學(xué)院Jiawen Chen 使用加速度結(jié)構(gòu)(1D min-max mipmap)[6],快速找到與一對(duì)切片中所有像素平行的細(xì)分光,但是并未涉及到體積光的繪制.2016年,燕山大學(xué)唐勇等[7]通過(guò)優(yōu)化菲涅爾反射系數(shù)求解方法將反射圖和折射圖渲染到紋理中實(shí)現(xiàn)水面折射效果,但沒(méi)有考慮具體的海下光照現(xiàn)象.2016年,皮克斯動(dòng)畫(huà)工作室Daniel Chang等人在Houdini平臺(tái)下采樣焦散紋理圖模擬焦散現(xiàn)象[8],但采用離線渲染方法,很難達(dá)到實(shí)時(shí)效果.2016年,威廉姆斯大學(xué)M Mcguire等提出一種實(shí)時(shí)光柵化算法模型在GPU上實(shí)現(xiàn)焦散、陰影等現(xiàn)象[9],但并未應(yīng)用在水下光照渲染.

綜上,本文提出一種基于改進(jìn)光線追蹤的實(shí)時(shí)有效繪制光照模型.通過(guò)該模型實(shí)現(xiàn)光線透過(guò)海面在海中的漂浮物、顆粒物等粒子形成的體積光、陰影、焦散等效果.再次,引入散射相位函數(shù)和能量守恒定律解決海水在不同深度下對(duì)光照散射的影響,提高了光在水中傳播的真實(shí)性;最后,加入了線性八叉樹(shù)算法對(duì)光線追蹤算法進(jìn)行優(yōu)化加速,保證了海下光照模型的實(shí)時(shí)性.

2 海下光照模型的構(gòu)建

2.1 體積光建模

目前體積光建模方法很多,如BillBoard貼片法、徑向模糊法、以及文獻(xiàn)[1]中累積光條紋的強(qiáng)度方法等.BillBoard貼片法由噪聲貼圖添加遮罩生成,只能實(shí)現(xiàn)部分區(qū)域的體積光;徑向模糊法要求過(guò)多的CPU計(jì)算,且體積光效果并不明顯;文獻(xiàn)[1]通過(guò)計(jì)算光線透過(guò)海面發(fā)生折射前后的光線強(qiáng)度方法獲得體積光效果,由于要計(jì)算每個(gè)光線透過(guò)的三角網(wǎng)格的光強(qiáng)總和,因此這種方法非常耗時(shí),并不能實(shí)現(xiàn)實(shí)時(shí)模擬.本文為簡(jiǎn)化計(jì)算量,選擇累積折射后的光線強(qiáng)度的計(jì)算方法,并通過(guò)線性八叉樹(shù)算法進(jìn)行加速計(jì)算,從而保證實(shí)驗(yàn)的實(shí)時(shí)性.

圖1 不同方法的體積光效果Fig.1 Volume light effects of different methods

2.1.1 求解亮度值積分

由于光的傳播特性是按距離增加而衰減.光的亮度和離光源的距離成平方反比.因此得到一個(gè)基本的衰減公式為

(1)

其中,i為采樣點(diǎn)處光照強(qiáng)度,d為距離,I為光照強(qiáng)度,這里得到的只是一個(gè)采樣點(diǎn)處的亮度值,為了獲得所有采樣點(diǎn)的亮度值,需要對(duì)所有采樣點(diǎn)的亮度值進(jìn)行積分求和.如圖2所示.

S為光源位置,C為攝像機(jī)(視點(diǎn))位置,O為物體位置,t1、t2、t3、t4分別為四處采樣點(diǎn),此處設(shè)函數(shù)L(t)為采樣點(diǎn)t處

圖2 采樣點(diǎn)亮度值求和Fig.2 Summation of sampling brightness values

亮度值,函數(shù)x(t)為視線的積分曲線.可得公式為

x(t)=rc+t*rd

(2)

其中rc為視線起點(diǎn),rd為視線方向,將函數(shù)x(t)代入L(t)中得到

(3)

其中S為光源位置,海水深度為d,我們需要求得L(t)從0到d的積分,則由上述兩式可得

(4)

2.1.2 透光比計(jì)算

太陽(yáng)光進(jìn)入水中會(huì)發(fā)生折射,折射后的太陽(yáng)光能量不斷衰減,光能量的衰減一般使用透過(guò)率來(lái)表示,因此在光線跟蹤算法中加入透過(guò)率,使海下光照更加符合光學(xué)特性.根據(jù)比爾朗伯定律(Beer-Lambert Law)可知,傳輸途徑損耗的能量與光通過(guò)的距離成正比,其表達(dá)式為

dIλ=-Iλφ(λ,z)dz

(5)

其中Iλ是入射到dz所在面上的輻射通量的密度,比例因子φ(λ,z)稱為消光系數(shù).設(shè)光線通過(guò)的距離為Q(x,y,z)則上式可以得到傳輸后的光輻射通量密度表達(dá)式為

(6)

其中Iλ0是在入射面z0處的通量密度;在指數(shù)中的積分部分為光學(xué)厚度,一般用τ表示.因此上式可化簡(jiǎn)為Iλ=Iλ0exp(-τ),只需獲得傳輸路徑上海水的消光系數(shù),即可得到相應(yīng)的透過(guò)率.

(7)

2.2 陰影繪制

光線追蹤算法中對(duì)陰影的計(jì)算準(zhǔn)確、真實(shí),但由于計(jì)算量過(guò)于巨大,不能實(shí)時(shí)繪制陰影,為兼顧陰影的真實(shí)性與實(shí)時(shí)性,本文采用陰影映射技術(shù)(Shadow Mapping)結(jié)合光源視角下渲染的陰影貼圖實(shí)現(xiàn)陰影的實(shí)時(shí)繪制.

在光源坐標(biāo)系下,將整個(gè)場(chǎng)景渲染到一張紋理圖上,并把視點(diǎn)從光源視角轉(zhuǎn)為正常視角,再對(duì)整個(gè)場(chǎng)景進(jìn)行渲染,并將渲染得到的投影坐標(biāo)系下的深度值保存至紋理,從而獲得一張大小為512×512的深度圖 (Shadow depth map).獲取深度圖和陰影貼圖(shadow map)之后,將深度圖和陰影貼圖中的深度值進(jìn)行對(duì)比,如果深度大于陰影貼圖的深度值,那么就說(shuō)明在陰影之中.最后通過(guò)采樣深度圖完成對(duì)場(chǎng)景陰影的渲染.

2.3 焦散效果

基于物理的焦散效果真實(shí)但實(shí)時(shí)性差,為獲得較為真實(shí)且實(shí)時(shí)的焦散效果,本文采用紋理映射方法來(lái)渲染.將焦散接受體(海底地形和其他物體)頂點(diǎn)變換到光源坐標(biāo)系中,用投影得到的紋理坐標(biāo)對(duì)焦散圖采樣,然后將采樣結(jié)果與焦散接受體的顏色融合或疊加,并根據(jù)焦散的接受體與視點(diǎn)的距離對(duì)顏色進(jìn)行衰減.用于采樣焦散圖的紋理坐標(biāo)可通過(guò)矩陣Mtexture變換焦散接受體的模型坐標(biāo)得到如下公式:

Mtexture=MbiasMprojMviewMmodel

(8)

Mmodel是焦散接受體的模型矩陣,Mview是光源的觀察矩陣,Mproj是焦散圖矩陣,Mbias矩陣用于將紋理坐標(biāo)值縮放為[0,1].

由實(shí)驗(yàn)結(jié)果可知,使用紋理映射技術(shù)可以模擬不同地形下的焦散效果,并且在海下場(chǎng)景實(shí)時(shí)繪制中依然可以保持很高的幀率.

2.4 海水散射模型

傳統(tǒng)海水散射通常使用霧化效果粗略表現(xiàn),效果不夠逼真.為了解決光線散射問(wèn)題,這里引入Henyey -Greenstein散射相位函數(shù)作為海水散射相位函數(shù)表現(xiàn)海水的散射效果,符合真實(shí)的海水散射效果.具體公式如下:

(9)

θ為視線方向和光線入射方向的夾角(散射角),p(θ)為視點(diǎn)方向的散射光線亮度.g值為前向相位函數(shù)非對(duì)稱因子,代表介質(zhì)散射性質(zhì).通過(guò)H-G公式對(duì)視角區(qū)域內(nèi)平面的所有像素進(jìn)行計(jì)算.根據(jù)視角區(qū)域內(nèi)平面任意像素點(diǎn)的幾何位置P值、視點(diǎn)位置及光向量可計(jì)算出散射角θ,代入H-G公式求出p(θ).以上方法可逼真的表現(xiàn)出海下光照散射效果.

3 線性八叉樹(shù)算法

本文引入線性八叉樹(shù)空間剖分算法提高折射后的太陽(yáng)光與線性八叉樹(shù)節(jié)點(diǎn)間的碰撞檢測(cè)速度.將包含整個(gè)場(chǎng)景的大立方體分割成八個(gè)子立方體,若子立方體中所含場(chǎng)景面片數(shù)大于給定的閾值,則按照上述方法進(jìn)一步劃分,直至子立方體中場(chǎng)景網(wǎng)格面片數(shù)小于閾值.

線性八叉樹(shù)的深度是立方體所能分割的最大次數(shù).假設(shè)線性八叉樹(shù)深度為N,則任意一個(gè)終節(jié)點(diǎn)的編碼是

其中,q1,q2,…,qi{0,1,2,…,7},F(xiàn)為異于0,1,2,…,7的符號(hào)(0≤i≤N).由上述節(jié)點(diǎn)方式找到空間任一點(diǎn)所在的空間網(wǎng)格單元.設(shè)P(x,y,z)為空間內(nèi)一點(diǎn),x,y,z取整數(shù),其相應(yīng)的二進(jìn)制表為

x=i1i2…iN,
y=j1j2…jN,
z=k1k2…kN,
il,jl,kl∈{0,1},l=1,2,…,N

(10)

通過(guò)計(jì)算前左下角坐標(biāo)Q點(diǎn)是否位于第一個(gè)立方體邊界上和光的前進(jìn)方向判斷光是否射出場(chǎng)景,若光線射出場(chǎng)景,則結(jié)束算法.否則,在空間線性八叉樹(shù)的節(jié)點(diǎn)表中查找P,直至光線射出場(chǎng)景.

4 實(shí)驗(yàn)結(jié)果與對(duì)比分析

在Windows10系統(tǒng)下結(jié)合Unity3D平臺(tái)建立實(shí)時(shí)海下光照模型,并進(jìn)行實(shí)驗(yàn)與對(duì)比,充分驗(yàn)證海下光照的真實(shí)感與實(shí)時(shí)性.硬件環(huán)境:Intel(R) Core(TM) i7-4790 CPU @3.60GHz,16GB,顯卡為GeForce GTX 750Ti (2GB/NVIDIA).

圖3中,(a)為本文建立的海下光照模型的實(shí)驗(yàn)效果圖,(b)為真實(shí)海洋環(huán)境下的體積光效果.與真實(shí)效果相比,本文方法可以清晰的展現(xiàn)海下光照的特性.(c)為文獻(xiàn)[3]中的體積光效果,(d)為文獻(xiàn)[8]的實(shí)驗(yàn)效果圖.本文方法與文獻(xiàn)[3]對(duì)比,更加真實(shí).文獻(xiàn)[8]在Houdini平臺(tái)下離線渲染的效果,在實(shí)時(shí)性方面,本文仿真效果更好.

圖3 海下光照模擬與對(duì)比Fig.3 Comparison of underwater illuminations

圖4為引入散射相位函數(shù)后不同g值下海水散射效果,與傳統(tǒng)的霧化效果粗略表現(xiàn)相比,更加真實(shí)的展現(xiàn)海下光照的散射效果.由圖4(a)到圖4(d)的效果可以看出隨著g值的增加,得出的散射效果與真實(shí)的海底散射較為接近.圖4(d)為g=1.0時(shí),獲得較為清晰的體積光.

圖4 不同g值下的散射效果對(duì)比Fig.4 Comparison of scattering effects at different values

圖5 不同焦散效果對(duì)比Fig.5 Comparison of different caustics

圖5為不同焦散效果的對(duì)比.圖5(a)為本文方法是通過(guò)對(duì)焦散圖采樣映射到焦散接受體實(shí)現(xiàn)焦散效果的實(shí)時(shí)模擬,實(shí)時(shí)幀率達(dá)到70fps.圖5(b)為文獻(xiàn)[4]中焦散效果,但其各相散射分量的求和使其僅適用于小規(guī)模場(chǎng)景中焦散的表現(xiàn),且實(shí)時(shí)幀率僅為12.5fps.圖5(c)為真實(shí)環(huán)境下的焦散效果.與圖5(c)相比能很好的模擬真實(shí)環(huán)境下的焦散效果.

圖6 不同時(shí)刻體積光和陰影變化Fig.6 Volume light and shadow changes at different times

圖6為不同時(shí)刻體積光和陰影的變化情況,由表1的幀速率可證明本文海下光照模型可以實(shí)時(shí)渲染不同時(shí)刻下的體積光和陰影的變化.

表1 不同渲染質(zhì)量的幀速率表Table 1 Frame rate table with different rendering quality

表1為Unity3D平臺(tái)下不同渲染質(zhì)量隨時(shí)間變化的幀速率數(shù)據(jù).由表中幀率變化可知隨著時(shí)間增加,幀速率趨于穩(wěn)定,前期幀速率較低究其原因是因?yàn)槲覀兺ㄟ^(guò)前向渲染方法對(duì)場(chǎng)景中所有物體都要進(jìn)行計(jì)算裁剪后渲染.

5 結(jié) 論

本文針對(duì)海下光照可視化過(guò)程中,海下光照難以實(shí)時(shí)繪制問(wèn)題,提出一種基于光線追蹤算法的海下光照的實(shí)時(shí)仿真模型.在傳統(tǒng)的光線追蹤算法基礎(chǔ)上,通過(guò)求解亮度值積分與透光比相結(jié)合策略,有效解決水下光束繪制問(wèn)題.并采用陰影貼圖與紋理映射相結(jié)合的方法改善了陰影與焦散效果實(shí)時(shí)繪制的問(wèn)題.并引入線性八叉樹(shù)算法,加快光線與節(jié)點(diǎn)碰撞檢測(cè)速度,使海下光照繪制幀速率穩(wěn)定在67fps左右.實(shí)驗(yàn)表明,所提出的模型能夠?qū)崿F(xiàn)海下體積光與陰影、焦散實(shí)時(shí)繪制的逼真效果.

焦散效果繪制的過(guò)程是將計(jì)算好的光斑繪制在紋理圖上,因此添加其他光源之后,不能做出實(shí)時(shí)的計(jì)算與渲染.如何在保證實(shí)時(shí)仿真的同時(shí),又解決多光源添加之后對(duì)海下光照影響的問(wèn)題,將是我們未來(lái)工作的重點(diǎn).

猜你喜歡
八叉樹(shù)陰影紋理
三維十字鏈表八叉樹(shù)的高效檢索實(shí)現(xiàn)
你來(lái)了,草就沒(méi)有了陰影
文苑(2020年11期)2020-11-19 11:45:11
基于BM3D的復(fù)雜紋理區(qū)域圖像去噪
軟件(2020年3期)2020-04-20 01:45:18
使用紋理疊加添加藝術(shù)畫(huà)特效
TEXTURE ON TEXTURE質(zhì)地上的紋理
Coco薇(2017年8期)2017-08-03 15:23:38
讓光“驅(qū)走”陰影
陰影魔怪
消除凹凸紋理有妙招!
Coco薇(2015年5期)2016-03-29 23:22:15
散亂點(diǎn)云線性八叉樹(shù)結(jié)構(gòu)在GPU中的實(shí)現(xiàn)
墨竹工卡县| 多伦县| 南川市| 河曲县| 陕西省| 承德市| 班玛县| 阳山县| 公安县| 达州市| 景泰县| 常州市| 岳阳县| 砚山县| 舞阳县| 高州市| 新丰县| 通化市| 铁力市| 宁都县| 安达市| 新巴尔虎右旗| 浏阳市| 泰来县| 鄂托克前旗| 和硕县| 额敏县| 甘孜| 大渡口区| 余干县| 故城县| 涟源市| 双鸭山市| 宣恩县| 岑巩县| 丰县| 万宁市| 蒲江县| 温泉县| 乌苏市| 来宾市|