本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體涉及實(shí)時(shí)渲染次表面散射的方法及相關(guān)裝置。
背景技術(shù):
次表面散射效果在3D動(dòng)畫電影、游戲等很多領(lǐng)域被廣泛使用。次表面散射是光射入非金屬材質(zhì)的物體后,又射出該物體的光線傳遞過程。次表面散射主要用于表現(xiàn)光透過透明或半透明物體的效果,例如表現(xiàn)燈光照射下人的皮膚,光照射大理石、玉石、玻璃、液體等的效果等。
在光線從該物體表面的某入射點(diǎn)入射再?gòu)奈矬w表面的某出射點(diǎn)射出的過程中,光線會(huì)被散射和吸收,光線在物質(zhì)中傳播得越遠(yuǎn),它被散射和吸收得就越厲害。則出射點(diǎn)處的光強(qiáng)會(huì)小于入射點(diǎn)處的光強(qiáng)。
可使用深度映射方式來實(shí)時(shí)渲染次表面散射的,請(qǐng)參見圖1a,其原理是:
給定虛擬物體的3d模型(Object)表面的一個(gè)點(diǎn)(可稱為像素點(diǎn))作為出射點(diǎn),例如圖1中的do2點(diǎn),根據(jù)光線直線傳輸?shù)脑磉B接do2點(diǎn)與光源(light),二者與Object表面的交點(diǎn)為入射點(diǎn)di2。入射點(diǎn)di2與光源的距離減去出射點(diǎn)do2到光源距離,得到距離差S2,距離差S2是光線從點(diǎn)di2入射到do2點(diǎn)射出的傳播距離。得到光線傳播距離后,便可以使用距離指數(shù)對(duì)入射點(diǎn)的光強(qiáng)度進(jìn)行衰減,得到出射點(diǎn)do2的光強(qiáng)度。屏幕上表現(xiàn)的虛擬物體的像素點(diǎn)與3d模型表面上的點(diǎn)有對(duì)應(yīng)關(guān)系(請(qǐng)參見圖1b,虛擬物體表面上的像素點(diǎn)是一個(gè)個(gè)小方格),之后,可使用出射點(diǎn)do2的光強(qiáng)度對(duì)虛擬物體表面上相應(yīng)的像素點(diǎn)進(jìn)行渲染。
同理,對(duì)于給點(diǎn)定do1可得到光源到入射點(diǎn)di1的距離和從光源到射出點(diǎn)do1距離之差(S1),進(jìn)而使用距離指數(shù)進(jìn)行衰減,得到出射點(diǎn)do1的光強(qiáng)度,再使用出射點(diǎn)do1的光強(qiáng)度對(duì)虛擬物體表面上相應(yīng)的像素點(diǎn)進(jìn)行渲染。
隨著各應(yīng)用場(chǎng)景越來越追求渲染效果的真實(shí)性,上述實(shí)時(shí)渲染虛擬物體的方式已不能滿足更高的真實(shí)性要求,因此,需要提高實(shí)時(shí)渲染次表面散射效果的精度。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明實(shí)施例提供實(shí)時(shí)渲染次表面散射的方法及相關(guān)裝置,以提高次表面散射效果的精度。
為實(shí)現(xiàn)上述目的,本發(fā)明實(shí)施例提供如下技術(shù)方案:
一種實(shí)時(shí)渲染次表面散射的方法,包括:
在實(shí)時(shí)渲染過程中,獲取虛擬物體對(duì)應(yīng)的三維模型的表面紋理;所述表面紋理包括所述三維模型表面上的像素點(diǎn)的次表面散射紋理信息,所述次表面散射紋理信息包括所述像素點(diǎn)作為光線出射點(diǎn)時(shí)對(duì)應(yīng)的M個(gè)光線入射點(diǎn)的空間信息,以及,每一光線入射點(diǎn)與所述像素點(diǎn)之間的光線傳播距離;所述光線入射點(diǎn)位于所述三維模型的表面,所述M個(gè)光線入射點(diǎn)基于散射原理確定;M為大于1的正整數(shù);
根據(jù)所述光線入射點(diǎn)的空間信息,計(jì)算得到所述每一光線入射點(diǎn)對(duì)應(yīng)的光強(qiáng)信息;
根據(jù)每一光線入射點(diǎn)對(duì)應(yīng)的光強(qiáng)信息以及其與所述像素點(diǎn)之間的光線傳播距離進(jìn)行光線衰減,得到每一光線入射點(diǎn)對(duì)應(yīng)的衰減結(jié)果;
對(duì)各光線入射點(diǎn)對(duì)應(yīng)的衰減結(jié)果求和,得到所述像素點(diǎn)對(duì)應(yīng)的光強(qiáng)信息;
使用所述像素點(diǎn)對(duì)應(yīng)的光強(qiáng)信息,對(duì)所述虛擬物體的表面上相應(yīng)像素點(diǎn)進(jìn)行渲染。
一種實(shí)時(shí)渲染裝置,包括獲取單元和渲染單元,其中:
所述獲取單元用于在實(shí)時(shí)渲染過程中,獲取虛擬物體對(duì)應(yīng)的三維模型的表面紋理;所述表面紋理包括所述三維模型表面上的像素點(diǎn)的次表面散射紋理信息,所述次表面散射紋理信息包括所述像素點(diǎn)作為光線出射點(diǎn)時(shí)對(duì)應(yīng)的M個(gè)光線入射點(diǎn)的空間信息,以及,每一光線入射點(diǎn)與所述像素點(diǎn)之間的光線傳播距離;所述光線入射點(diǎn)位于所述三維模型的表面,所述M個(gè)光線入射點(diǎn)基于散射原理確定;M為大于1的正整數(shù);
所述渲染單元用于:
根據(jù)所述光線入射點(diǎn)的空間信息,計(jì)算得到所述每一光線入射點(diǎn)對(duì)應(yīng)的光強(qiáng)信息;
根據(jù)每一光線入射點(diǎn)對(duì)應(yīng)的光強(qiáng)信息以及其與所述像素點(diǎn)之間的光線傳播距離進(jìn)行光線衰減,得到每一光線入射點(diǎn)對(duì)應(yīng)的衰減結(jié)果;
對(duì)各光線入射點(diǎn)對(duì)應(yīng)的衰減結(jié)果求和,得到所述像素點(diǎn)對(duì)應(yīng)的光強(qiáng)信息;
使用所述像素點(diǎn)對(duì)應(yīng)的光強(qiáng)信息,對(duì)所述虛擬物體的表面上相應(yīng)像素點(diǎn)進(jìn)行渲染。
一種終端,包括上述的實(shí)時(shí)渲染次表面散射的裝置。
在本發(fā)明實(shí)施例中,三維模型上的像素點(diǎn)會(huì)對(duì)應(yīng)多個(gè)基于散射原理確定的光線入射點(diǎn),并基于各入射點(diǎn)與像素點(diǎn)之間的光線傳播距離進(jìn)行衰減求和。與現(xiàn)有方式中只基于一個(gè)入射點(diǎn)對(duì)光強(qiáng)進(jìn)行衰減相比,其精準(zhǔn)度大大提高了。
同時(shí),本發(fā)明實(shí)施例中,光線從光源出發(fā)、經(jīng)M個(gè)光線入射點(diǎn)入射再?gòu)脑撓袼攸c(diǎn)出射的過程,模擬的是光線進(jìn)入物體內(nèi)部的散射(漫反射)過程。而光線進(jìn)入物體內(nèi)部的散射過程是真實(shí)環(huán)境下的物理現(xiàn)象,因此,本發(fā)明實(shí)施例的次表面散射效果更合理,更貼近真實(shí)環(huán)境,與現(xiàn)有技術(shù)相比,次表面散射效果的精確度大大提高了。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1a為深度映射原理示例圖;
圖1b為本發(fā)明實(shí)施例提供的虛擬物體的像素點(diǎn)與三維模型表面的像素點(diǎn)的映射示例圖;
圖2a為本發(fā)明實(shí)施例提供的應(yīng)用場(chǎng)景示例圖;
圖2b為本發(fā)明實(shí)施例提供的終端的計(jì)算機(jī)架構(gòu)示例圖;
圖3、圖5、圖6a、圖6b、圖8為本發(fā)明實(shí)施例提供的實(shí)時(shí)渲染次表面散射的方法的示例性流程圖;
圖4a和圖4b為本發(fā)明實(shí)施例提供的散射示意圖;
圖4c為本發(fā)明實(shí)施例提供的投影紋理映射示意圖;
圖7a為本發(fā)明實(shí)施例提供的劃分示意圖;
圖7b、圖9a-圖9d為本發(fā)明實(shí)施例提供的光線追蹤示意圖;
圖7c為本發(fā)明實(shí)施例提供的矢量示意圖;
圖10為本發(fā)明實(shí)施例提供的渲染裝置的示例性結(jié)構(gòu)圖。
具體實(shí)施方式
本發(fā)明可能使用的技術(shù)名詞、簡(jiǎn)寫或縮寫如下:
實(shí)時(shí)渲染:以圖形處理器(GPU)為處理器,每秒鐘達(dá)到24幀以上的畫面渲染速度,被認(rèn)為與操作者進(jìn)行有效的交互;
光線追蹤:ray tracing。也叫光束投射法,是在二維(2D)屏幕上呈現(xiàn)三維(3D)圖像的方法。當(dāng)光線照射到物體表面時(shí),光線會(huì)經(jīng)過一系列的衰減最后進(jìn)入人眼,光線追蹤就是要計(jì)算出光線發(fā)出后經(jīng)過一系列衰減再進(jìn)入人眼時(shí)的情況。光線跟蹤程序數(shù)學(xué)地確定和復(fù)制光線的路線,但是方向相反(從眼睛返回光源),光線跟蹤技術(shù)現(xiàn)被廣泛用于計(jì)算機(jī)游戲和動(dòng)畫中;
渲染預(yù)計(jì)算:在進(jìn)行大量的離線計(jì)算,得到一些渲染用的常量,用于實(shí)時(shí)渲染計(jì)算。
本發(fā)明提供的實(shí)時(shí)渲染次表面散射的方法及相關(guān)裝置(實(shí)時(shí)渲染裝置、終端)可應(yīng)用于虛擬現(xiàn)實(shí)領(lǐng)域、計(jì)算機(jī)圖形學(xué)、計(jì)算機(jī)動(dòng)畫等領(lǐng)域。
例如,可應(yīng)用于計(jì)算機(jī)動(dòng)畫領(lǐng)域游戲的實(shí)時(shí)渲染場(chǎng)景。
上述實(shí)時(shí)渲染裝置可以軟件的形式應(yīng)用于上述終端(諸如臺(tái)式機(jī)、移動(dòng)終端、ipad、平板電腦等)中,或以硬件(例如具體可為終端的控制器/處理器)的形式作為上述設(shè)備的組成部分。
當(dāng)以軟件形式存在時(shí),上述實(shí)時(shí)渲染裝置具體可為一應(yīng)用程序,例如手機(jī)APP、終端應(yīng)用程序等,也可作為某應(yīng)用程序或操作系統(tǒng)的組件。
此外,實(shí)時(shí)渲染裝置可應(yīng)用于如圖2a所示的應(yīng)用場(chǎng)景,包括服務(wù)器101和終端102。其中,服務(wù)器101可用于提供游戲安裝包,在游戲安裝包中包括本文后續(xù)介紹的表面紋理,終端102可從服務(wù)器101處下載游戲安裝包予以安裝,并在游戲運(yùn)行中,進(jìn)行實(shí)時(shí)渲染。當(dāng)然,終端102還可通過服務(wù)器101與其他終端交互,或者從服務(wù)器101中獲取游戲運(yùn)行過程中需要的數(shù)據(jù)。
圖2b示出了上述實(shí)時(shí)渲染裝置或終端的一種通用計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)。
上述計(jì)算機(jī)系統(tǒng)可包括總線、處理器1、存儲(chǔ)器2、通信接口3、輸入設(shè)備4和輸出設(shè)備5。處理器1、存儲(chǔ)器2、通信接口3、輸入設(shè)備4和輸出設(shè)備5通過總線相互連接。其中:
總線可包括一通路,在計(jì)算機(jī)系統(tǒng)各個(gè)掛件之間傳送信息。
處理器1可以是通用處理器,例如通用中央處理器(CPU)、網(wǎng)絡(luò)處理器(Network Processor,簡(jiǎn)稱NP)、微處理器等,也可以是特定應(yīng)用集成電路(application-specific integrated circuit,ASIC),或一個(gè)或多個(gè)用于控制本發(fā)明方案程序執(zhí)行的集成電路。還可以是數(shù)字信號(hào)處理器(DSP)、專用集成電路(ASIC)、現(xiàn)成可編程門陣列(FPGA)或者其他可編程邏輯器件、分立門或者晶體管邏輯器件、分立硬件組件。
處理器1可包括主處理器(CPU),還可包括顯卡中的圖形處理器(GPU)等。
存儲(chǔ)器2中保存有執(zhí)行本發(fā)明技術(shù)方案的程序,還可以保存有操作系統(tǒng)和其他關(guān)鍵業(yè)務(wù)。具體地,程序可以包括程序代碼,程序代碼包括計(jì)算機(jī)操作指令。更具體的,存儲(chǔ)器2可以包括只讀存儲(chǔ)器(read-only memory,ROM)、可存儲(chǔ)靜態(tài)信息和指令的其他類型的靜態(tài)存儲(chǔ)設(shè)備、隨機(jī)存取存儲(chǔ)器(random access memory,RAM)、可存儲(chǔ)信息和指令的其他類型的動(dòng)態(tài)存儲(chǔ)設(shè)備、磁盤存儲(chǔ)器、flash等等。
輸入設(shè)備4可包括接收用戶輸入的數(shù)據(jù)和信息的裝置,例如鍵盤、鼠標(biāo)、攝像頭、掃描儀、光筆、語音輸入裝置、觸摸屏、計(jì)步器或重力感應(yīng)器等。
輸出設(shè)備5可包括允許輸出信息給用戶的裝置,例如顯示屏、打印機(jī)、揚(yáng)聲器等。
通信接口3可包括使用任何收發(fā)器一類的裝置,以便與其他設(shè)備或通信網(wǎng)絡(luò)通信,如以太網(wǎng),無線接入網(wǎng)(RAN),無線局域網(wǎng)(WLAN)等。
處理器1執(zhí)行存儲(chǔ)器2中所存放的程序,以及調(diào)用其他設(shè)備,可用于實(shí)現(xiàn)本發(fā)明實(shí)施例所提供的方法中的各個(gè)步驟。
在一個(gè)示例中,可由GPU通過執(zhí)行存儲(chǔ)器2中所存放的程序,以及調(diào)用其他設(shè)備,可用于實(shí)現(xiàn)本發(fā)明實(shí)施例所提供的實(shí)時(shí)渲染次表面散射的方法中的各個(gè)步驟。
下面將基于上面的本發(fā)明涉及的共性方面,對(duì)本發(fā)明實(shí)施例進(jìn)一步詳細(xì)說明。
圖3示出了上述實(shí)時(shí)渲染次表面散射的方法的一種示例性流程。圖3所示的方法應(yīng)用上述提及的領(lǐng)域或應(yīng)用場(chǎng)景(例如圖2a)中,由圖2b所示的終端中的GPU與其他部件交互完成。
上述示例性流程包括:
在301部分:在實(shí)時(shí)渲染過程中,終端中的GPU獲取虛擬物體對(duì)應(yīng)的三維(3d)模型的表面紋理。
需要說明的是,本發(fā)明實(shí)施例中的虛擬物體指終端屏幕上的虛擬物體,例如人或物。當(dāng)然,也可以是人的一部分,例如前臂、上臂等。
如圖1b所示,虛擬物體表面上的像素點(diǎn)與3d模型表面上的點(diǎn)(也可稱為像素點(diǎn))有對(duì)應(yīng)關(guān)系。
本發(fā)明中的表面紋理是離線生成的。一個(gè)3d模型對(duì)應(yīng)一個(gè)表面紋理。
表面紋理的內(nèi)容可包括上述3d模型表面上的像素點(diǎn)的次表面散射紋理信息。
需要說明的是,并不是3d模型表面上的每一像素點(diǎn)都會(huì)對(duì)應(yīng)次表面散射紋理信息。而是以人眼為視點(diǎn)的場(chǎng)景中,3d模型表面相對(duì)于視點(diǎn)可見的像素點(diǎn)。
為簡(jiǎn)單起見,本文以3d模型表面的一個(gè)像素點(diǎn)為例進(jìn)行說明,可以理解的是,對(duì)3d模型表面上相對(duì)于視點(diǎn)可見的每一像素點(diǎn),都可使用本發(fā)明提供的實(shí)時(shí)渲染方法對(duì)其進(jìn)行渲染。
以3d模型表面的像素點(diǎn)A為例,其次表面散射紋理信息包括:像素點(diǎn)A作為光線出射點(diǎn)時(shí)對(duì)應(yīng)的M個(gè)光線入射點(diǎn)(也可叫為追蹤點(diǎn))的空間信息,以及,每一光線入射點(diǎn)與像素點(diǎn)A之間的光線傳播距離(也可稱為追蹤路徑長(zhǎng)度信息);
其中,上述光線入射點(diǎn)位于三維模型的表面(相對(duì)于視點(diǎn)不可見)。
并且,上述M個(gè)光線入射點(diǎn)基于散射原理確定,M為大于1的正整數(shù)。
請(qǐng)參見圖4a,光線從某一點(diǎn)進(jìn)入物體后,會(huì)發(fā)生散射,圖4a中的小圈點(diǎn)是假定產(chǎn)生散射的點(diǎn)(可簡(jiǎn)稱為散射點(diǎn)),散射點(diǎn)在理論上是無窮的。
則請(qǐng)參見圖4b,從多個(gè)光線入射點(diǎn)(理論上有無數(shù)個(gè))入射的光線,經(jīng)散射后從同一出射點(diǎn)出射。
因此,本發(fā)明實(shí)施例次表面散射紋理信息中要包含M個(gè)光線入射點(diǎn)。
M的取值可根據(jù)精度需要進(jìn)行設(shè)置,若精度要求高,M的取值相對(duì)較高,精度要求低,M的取值相對(duì)較低。
在302部分:根據(jù)上述光線入射點(diǎn)的空間信息,計(jì)算得到上述每一光線入射點(diǎn)對(duì)應(yīng)的光強(qiáng)信息;
上述空間信息可光線入射點(diǎn)包括位置信息和法線。
這里的位置信息指的光線入射點(diǎn)的坐標(biāo),其坐標(biāo)系是是以人眼為視點(diǎn),構(gòu)建的場(chǎng)景空間對(duì)應(yīng)的坐標(biāo)系。場(chǎng)景空間包括人眼、三維模型和光源。
可采用通用光照模型例如phone光照模型,計(jì)算光線入射點(diǎn)對(duì)應(yīng)的光強(qiáng)信息。
在303部分:根據(jù)每一光線入射點(diǎn)對(duì)應(yīng)的光強(qiáng)信息以及其與像素點(diǎn)A之間的光線傳播距離進(jìn)行光線衰減,得到每一光線入射點(diǎn)對(duì)應(yīng)的衰減結(jié)果。
傳播距離越長(zhǎng),光強(qiáng)衰減越大。
衰減結(jié)果也為光強(qiáng)。
在304部分:對(duì)各光線入射點(diǎn)對(duì)應(yīng)的衰減結(jié)果求和,得到像素點(diǎn)A對(duì)應(yīng)的光強(qiáng)信息;
假定,共有三個(gè)光線入射點(diǎn),其對(duì)應(yīng)于像素A的衰減結(jié)果分別是I0、I1、I2,則像素A的光強(qiáng)IA=I0+I1+I2。
在305部分:使用像素點(diǎn)A對(duì)應(yīng)的光強(qiáng)信息,對(duì)上述虛擬物體的表面上相應(yīng)像素點(diǎn)進(jìn)行渲染。
請(qǐng)參見圖4c,假定像素點(diǎn)A與虛擬物體的像素點(diǎn)B存在對(duì)應(yīng)關(guān)系,則可通過投影紋理映射,將定像素點(diǎn)A的光強(qiáng)映射給像素點(diǎn)B,作為像素點(diǎn)B的光強(qiáng)。
更具體的,在進(jìn)行實(shí)時(shí)渲染的時(shí)候,可獲取像素點(diǎn)A對(duì)應(yīng)的M個(gè)光線入射點(diǎn)的位置信息、法線信息和追蹤路徑長(zhǎng)度信息,對(duì)光線入射點(diǎn)以光源進(jìn)行著色,再根據(jù)其追蹤路程長(zhǎng)度信息進(jìn)行光線強(qiáng)度進(jìn)行衰減,對(duì)衰減結(jié)果求和后添加到像素點(diǎn)A的顏色上。
可見,在本發(fā)明實(shí)施例中,三維模型上的像素點(diǎn)會(huì)對(duì)應(yīng)多個(gè)基于散射原理確定的光線入射點(diǎn),并基于各入射點(diǎn)與像素點(diǎn)之間的光線傳播距離進(jìn)行衰減求和。與現(xiàn)有方式中只基于一個(gè)入射點(diǎn)對(duì)光強(qiáng)進(jìn)行衰減相比,其精準(zhǔn)度大大提高了。
同時(shí),本發(fā)明實(shí)施例中,光線從光源出發(fā)、經(jīng)M個(gè)光線入射點(diǎn)入射再?gòu)脑撓袼攸c(diǎn)出射的過程,模擬的是光線進(jìn)入物體內(nèi)部的散射(漫反射)過程。而光線進(jìn)入物體內(nèi)部的散射過程是真實(shí)環(huán)境下的物理現(xiàn)象,因此,本發(fā)明實(shí)施例的次表面散射效果更合理,更貼近真實(shí)環(huán)境,與現(xiàn)有技術(shù)相比,次表面散射效果的精確度大大提高了。
下面將重點(diǎn)介紹如何生成表面紋理。
圖5示出了生成表面紋理的一種示例性流程,圖5所示的方法應(yīng)用上述提及的領(lǐng)域或應(yīng)用場(chǎng)景(例如圖2a)中,由圖2b所示的終端中的GPU完成,或由服務(wù)器完成。
該示例性流程包括:
在500部分:基于三維模型表面上的像素點(diǎn)進(jìn)行遞歸光線追蹤,得到光線追蹤結(jié)果。
以像素點(diǎn)A為例,其光線追蹤結(jié)果可包括像素點(diǎn)A對(duì)應(yīng)的多個(gè)表面散射點(diǎn),上述多個(gè)表面散射點(diǎn)均位于上述三維模型表面上。
光線追蹤結(jié)果可存放于任意可被處理器1訪問的存儲(chǔ)介質(zhì)上,例如內(nèi)存。
在501部分:從上述多個(gè)表面散射點(diǎn)中確定出M個(gè)光線入射點(diǎn)。
由于理論上可有無數(shù)個(gè)表面散射點(diǎn),所以需要從中選取出M個(gè)來作為光線入射點(diǎn)。
在502部分:存儲(chǔ)每一光線入射點(diǎn)的空間信息,以及,每一光線入射點(diǎn)與像素點(diǎn)A之間的光線傳播距離。
空間信息的介紹可參見前述實(shí)施例302部分的記載,在此不作贅述。
知道了空間信息,尤其是位置信息,則可確定出光線入射點(diǎn)與像素點(diǎn)A之間的距離,也即光線傳播距離。
下面將對(duì)遞歸光線追蹤進(jìn)行詳細(xì)的介紹。
請(qǐng)參見圖6a,在進(jìn)行遞歸光線追蹤之前,需要做如下準(zhǔn)備:
在600部分:構(gòu)建可完全包圍虛擬物體對(duì)應(yīng)的三維模型的包圍盒。
如圖7a所示,包圍盒一般為長(zhǎng)方體。
在601部分:使用由多個(gè)切割面構(gòu)成的網(wǎng)格對(duì)上述包圍盒進(jìn)行劃分。
如圖7a所示,劃分的目的是將包圍盒中的空間劃分為更小的連續(xù)空間。
在602部分:獲取光線追蹤參數(shù)。
具體的光線追蹤參數(shù)包括:散射方向個(gè)數(shù)m和矢量,m為大于1的正整數(shù)。
由于本發(fā)明實(shí)施例模擬的是內(nèi)部散射,所以需要確定散射方向個(gè)數(shù)和矢量。
m的取值可根據(jù)精度需要進(jìn)行設(shè)置,若精度要求高,m的取值相對(duì)較高,精度要求低,m的取值相對(duì)較低。例如,請(qǐng)參見圖7b,圖7b示出了m=3時(shí),由散射方向個(gè)數(shù)和矢量確定的散射光線。
矢量決定了從哪個(gè)方向散射,更具體的可由空間上一點(diǎn)的位置來表征矢量。以像素點(diǎn)A為例,像素點(diǎn)A與空間上一點(diǎn)的連線就決定了一個(gè)矢量。
也可認(rèn)為600-602部分是遞歸光線追蹤的初始化部分。
圖6b示出了第i次遞歸光線追蹤的示例性流程,圖6所示的方法應(yīng)用上述提及的領(lǐng)域或應(yīng)用場(chǎng)景(例如圖2a)中,由圖2b所示的終端中的GPU完成,或由服務(wù)器完成。
在603部分:使用602部分獲取的光線追蹤參數(shù)生成m條散射光線,上述m條散射光線相交于目標(biāo)點(diǎn)。
需要說明的是,請(qǐng)參見圖7b,在第0次遞歸光線追蹤中的目標(biāo)點(diǎn)為三維模型表面上的像素點(diǎn)A。
在604部分:確定上述m條散射光線中第j條散射光線在本次遞歸光線追蹤中對(duì)應(yīng)的散射點(diǎn)。
其中,i為小于N的整數(shù),上述N為最大遞歸次數(shù);j為小于m的整數(shù)。
請(qǐng)參見圖7b,在第0次遞歸光線追蹤中,散射點(diǎn)一般位于三維模型內(nèi)。
在605部分:判斷散射點(diǎn)是否位于三維模型表面,若是,進(jìn)入606部分,否則進(jìn)入607部分。
在606部分:將上述散射點(diǎn)作為表面散射點(diǎn);
需要說明的是,由于m大于1,所以散射點(diǎn)個(gè)數(shù)也為m,對(duì)每一個(gè)散射點(diǎn)都會(huì)判斷其是否位于三維模型表面上。
在607部分:將散射點(diǎn)作為下一遞歸光線追蹤中的目標(biāo)點(diǎn),返回603部分;
在608部分:從上述多個(gè)表面散射點(diǎn)中確定出M個(gè)光線入射點(diǎn)。
608-609部分與前述的501-502部分相同,在此不作贅述。
圖8示出了第i次遞歸光線追蹤的更詳細(xì)的流程,圖8所示的方法應(yīng)用上述提及的領(lǐng)域或應(yīng)用場(chǎng)景(例如圖2a)中,由圖2b所示的終端中的GPU完成,或由服務(wù)器完成。
在800部分:在第i次遞歸光線追蹤中,使用光線追蹤參數(shù)生成m條散射光線,上述m條散射光線相交于目標(biāo)點(diǎn)。
為簡(jiǎn)便起見,省略了遞歸光線追蹤的初始化部分。
800部分與603部分相類似,在此不作贅述。
在801部分:確定m條散射光線中第j條散射光線與目標(biāo)切割面的第一交點(diǎn),以及第j條散射光線和上述三維模型表面的第二交點(diǎn)。
需要說明的是,上述目標(biāo)切割面為與目標(biāo)點(diǎn)的法向夾角最大的切割面集合中、離目標(biāo)點(diǎn)最近的切割面。
請(qǐng)參見圖9a,以第0次遞歸為例,與目標(biāo)點(diǎn)(像素點(diǎn)A)法向夾角最大的切割面集合包括切割面1和切割面2。而切割面1與切割面2相比,切割面1與像素點(diǎn)A距離最近,所以切割面1是目標(biāo)切割面。
m=3時(shí),各散射光線與切割面1共有3個(gè)第一交點(diǎn)。
在802部分:將第一交點(diǎn)和第二交點(diǎn)中更接近上述目標(biāo)點(diǎn)的交點(diǎn)作為第j條散射光線對(duì)應(yīng)的散射點(diǎn)。
而以圖9a為例,第一交點(diǎn)相較于第二交點(diǎn)更接近像素點(diǎn)A(目標(biāo)點(diǎn)),則將第一交點(diǎn)為散射點(diǎn)以及下一次遞歸的目標(biāo)點(diǎn)(因?yàn)闆]到表面)。
以圖9b為例,若3d模型內(nèi)部有凹陷的話,第j散射光線可與凹陷的表面存在第二交點(diǎn)。并且,該第二交點(diǎn)比第一交點(diǎn)更接近像素點(diǎn)A(目標(biāo)點(diǎn)),則以第二交點(diǎn)為散射點(diǎn),但后續(xù)并不會(huì)以該點(diǎn)繼續(xù)作為目標(biāo)點(diǎn)進(jìn)行遞歸,因?yàn)橐呀?jīng)到達(dá)了表面。
在803部分:判斷散射點(diǎn)是否位于三維模型表面,若是,進(jìn)入804部分,否則進(jìn)入805部分。
803部分與前述的605部分相類似,在此不作贅述。
在804部分:將上述散射點(diǎn)作為表面散射點(diǎn);
在805部分:將上述散射點(diǎn)作為下一遞歸光線追蹤中的目標(biāo)點(diǎn),返回800部分。
請(qǐng)參見圖9c,其示例性得展示了第一次迭代得到的(部分)散射點(diǎn)。請(qǐng)參見圖9d,其示例性得展示了第二次迭代得到的(部分)表面散射點(diǎn)。
在806部分:獲取各表面散射點(diǎn)與像素點(diǎn)A之間的光線傳播距離;
確定了各表面散射點(diǎn),則可根據(jù)其坐標(biāo)計(jì)算光線傳播距離。
807部分:按光線傳播距離由小到大對(duì)上述多個(gè)表面散射點(diǎn)進(jìn)行排序,選擇前M個(gè)表面散射點(diǎn)作為像素點(diǎn)A的光線入射點(diǎn)。
因光線傳播距離越小,光線衰減越小,對(duì)像素點(diǎn)A光強(qiáng)的影響就越大,所以要按傳播距離從小到大進(jìn)行排序,并選擇前M個(gè)作為光線入射點(diǎn)。
至此,對(duì)于像素A的M個(gè)光線入射點(diǎn)就確定出來了。
在808部分:存儲(chǔ)每一光線入射點(diǎn)的空間信息,以及,每一光線入射點(diǎn)與像素點(diǎn)A之間的光線傳播距離。
可采用各種壓縮方式進(jìn)行存儲(chǔ),在此不作贅述。
需要說明的是,最大遞歸次數(shù)N可與切割面集合中切割面的個(gè)數(shù)S相同,也可小于其個(gè)數(shù)。
例如,S=4,也即切割面集合中共4個(gè)切割面,N可等于4,也可小于4。
當(dāng)N小于4時(shí),假定S-4=a,在迭代時(shí),可忽略其中a個(gè)切割面。
綜上,本發(fā)明所提供的技術(shù)方案具有如下優(yōu)點(diǎn):
基于物理原理計(jì)算,可達(dá)到更高的精度;
可以處理凹陷的物體,現(xiàn)有深度映射方式則無法處理;
基于像素進(jìn)行采樣著色,達(dá)到極高的精度;
可以動(dòng)態(tài)調(diào)整光線入射點(diǎn)個(gè)數(shù)和遞歸次數(shù),實(shí)時(shí)實(shí)現(xiàn)精度和速度的平衡。
圖10示出了渲染裝置的一種可能的結(jié)構(gòu)示意圖,包括:
獲取單元1001,用于在實(shí)時(shí)渲染過程中,獲取虛擬物體對(duì)應(yīng)的三維模型的表面紋理;所述表面紋理包括所述三維模型表面上的像素點(diǎn)的次表面散射紋理信息,所述次表面散射紋理信息包括所述像素點(diǎn)作為光線出射點(diǎn)時(shí)對(duì)應(yīng)的M個(gè)光線入射點(diǎn)的空間信息,以及,每一光線入射點(diǎn)與所述像素點(diǎn)之間的光線傳播距離;所述光線入射點(diǎn)位于所述三維模型的表面,所述M個(gè)光線入射點(diǎn)基于散射原理確定;M為大于1的正整數(shù);
渲染單元1002,用于:
根據(jù)所述光線入射點(diǎn)的空間信息,計(jì)算得到所述每一光線入射點(diǎn)對(duì)應(yīng)的光強(qiáng)信息;
根據(jù)每一光線入射點(diǎn)對(duì)應(yīng)的光強(qiáng)信息以及其與所述像素點(diǎn)之間的光線傳播距離進(jìn)行光線衰減,得到每一光線入射點(diǎn)對(duì)應(yīng)的衰減結(jié)果;
對(duì)各光線入射點(diǎn)對(duì)應(yīng)的衰減結(jié)果求和,得到所述像素點(diǎn)對(duì)應(yīng)的光強(qiáng)信息;
使用所述像素點(diǎn)對(duì)應(yīng)的光強(qiáng)信息,對(duì)所述虛擬物體的表面上相應(yīng)像素點(diǎn)進(jìn)行渲染。
此外,在本發(fā)明其他實(shí)施例中,還可包括生成單元1003,用于生成所述表面紋理。
其中,獲取單元1001可用于執(zhí)行圖3所示實(shí)施例的301部分,以及,圖5a和圖5b所示實(shí)施例的501-502部分。
渲染單元1002可用于執(zhí)行圖3所示實(shí)施例的302-305部分。
生成單元1003可用于執(zhí)行圖5所示實(shí)施例的500-502部分,圖6a所示實(shí)施例的600-602部分、圖6b所示實(shí)施例的603-609部分,圖8所示實(shí)施例的800-808部分。
本說明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見即可。對(duì)于實(shí)施例公開的裝置而言,由于其與實(shí)施例公開的方法相對(duì)應(yīng),所以描述的比較簡(jiǎn)單,之處參見方法部分說明即可。
專業(yè)人員還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(RAM)、內(nèi)存、只讀存儲(chǔ)器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動(dòng)磁盤、WD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。
對(duì)所公開的實(shí)施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。