欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種面向可編程著色器的多光源加速方法

文檔序號:6633790閱讀:289來源:國知局
一種面向可編程著色器的多光源加速方法
【專利摘要】本發(fā)明提供了一種面向可編程著色器的多光源加速方法,在可編程著色器環(huán)境下實(shí)現(xiàn)了Lightcuts算法,通過將光源聚類成樹形結(jié)構(gòu),然后再對光源樹進(jìn)行裁剪,減少實(shí)際渲染的光源數(shù)目,能夠?qū)秩緯r間與光源數(shù)目的關(guān)系降為亞線性,而且穩(wěn)定性比較好,在大部分情況下都能有良好的加速效果。其次,實(shí)驗發(fā)現(xiàn)對于場景中陰影部分的渲染,算法的加速效果并不理想,針對此問題進(jìn)行優(yōu)化。最后,本發(fā)明將同一物體上相近的點(diǎn)分組進(jìn)行渲染,進(jìn)一步提高效率。
【專利說明】一種面向可編程著色器的多光源加速方法

【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及圖形學(xué)真實(shí)感渲染領(lǐng)域,具體涉及一種典型的基于層次結(jié)構(gòu)的多光源 加速方法。

【背景技術(shù)】
[0002] 在大規(guī)模場景的渲染中,光源數(shù)目的增長會導(dǎo)致渲染時間隨之線性增長,對于一 些復(fù)雜的光照效果,這樣的渲染時間是不能接受的。本發(fā)明屬于真實(shí)感渲染系統(tǒng)中渲染引 擎研發(fā)部分的工作,引擎在渲染多光源場景時,并沒有對多光源進(jìn)行優(yōu)化處理,導(dǎo)致渲染速 度難以接受。為了節(jié)約成本,提高效率,本發(fā)明針對基于Renderman規(guī)范的渲染引擎,實(shí)現(xiàn) 了多光源場景的加速方案。
[0003] 對于多光源場景渲染的優(yōu)化有多種方法,文章 [A general version of crow' s shadow volumes]中Bergeron提出了為光源設(shè)置一個影響半徑的方法,在影響半徑內(nèi)的物 體會受到光源照射,否則不去考慮該光源的影響,這樣會導(dǎo)致大量低亮度光源產(chǎn)生的光照 效果被忽視;文章 [Adaptive shadow testing for ray tracing]中 Ward 提出了為所有 光源建立一個貢獻(xiàn)表,只考慮貢獻(xiàn)比較大的光源。當(dāng)光源的數(shù)目很多的時候,求貢獻(xiàn)值將 耗費(fèi)大量時間;文章 [Monte carlo techniques for direct lighting calculation]中 Shirley把光源根據(jù)影響半徑分為重要和不重要兩類,對兩類光源分別采樣,不過采樣數(shù) 量不合適會帶來走樣的問題;文章 [A light hierarchy for fast rendering of scenes with many lights]中Paquette提出了基于樹形層次結(jié)構(gòu)的優(yōu)化算法,但是并不支持陰影 效果,極大的限制了其使用范圍。
[0004] 文章 [Lightcuts in blender]中 Davide 對 Lightcuts 算法在 Blender 引擎中的 實(shí)現(xiàn)方式和應(yīng)用范圍作出了簡要的介紹。但是Blender引擎的著色器是內(nèi)置的,不如可編 程著色器靈活易用。文獻(xiàn)中并沒有提出在可編程著色器環(huán)境下的算法的實(shí)現(xiàn)方案。而且文 獻(xiàn)也提出Blender中實(shí)現(xiàn)的Lightcuts算法在實(shí)際應(yīng)用中加速效果并不如預(yù)想的明顯。
[0005] 本發(fā)明在分析和對比了多種多光源優(yōu)化算法后,選擇了基于層級結(jié)構(gòu)的 Lightcuts算法作為研究基礎(chǔ)。該算法是基于二叉樹結(jié)構(gòu)的光源聚類優(yōu)化方法,具有良好的 加速效果,而且算法的普適性較強(qiáng),對大多數(shù)場景的渲染都可以優(yōu)化。算法能夠通過錯誤閾 值參數(shù)的調(diào)節(jié)來對優(yōu)化程度進(jìn)行控制,便于實(shí)際工程使用。
[0006] Lightcuts算法基礎(chǔ)是韋伯原理,即人類可以感知到的最小的亮度變化大概為當(dāng) 前亮度的1 %,算法中一般選取〇. 02作為誤差閾值的參數(shù),光源集合產(chǎn)生的光照小于0. 02 倍的總亮度則可以認(rèn)為能夠簡化計算。算法在每兩個光源之間計算一個權(quán)值,該權(quán)值與兩 光源距離和亮度相關(guān)。然后根據(jù)權(quán)值把光源聚類成一棵二叉樹。在對點(diǎn)進(jìn)行渲染時,從光 源樹的根節(jié)點(diǎn)開始,根據(jù)韋伯原理判斷是否對節(jié)點(diǎn)進(jìn)行分裂:如果當(dāng)前節(jié)點(diǎn)對渲染點(diǎn)亮度 的貢獻(xiàn)值大于誤差閾值而且其存在葉子節(jié)點(diǎn),則將該節(jié)點(diǎn)向下分裂為兩個子節(jié)點(diǎn),否則停 止分裂。當(dāng)所有路徑都停止分裂后,得到的所有節(jié)點(diǎn)的集合,就是一個光源割。之后的渲染 過程使用光源割代替原始光源進(jìn)行渲染。


【發(fā)明內(nèi)容】

[0007] 本發(fā)明的目的就是為了解決上述問題,提出了一種面向可編程著色器的多光源加 速方法,該方法首先在可編程著色器環(huán)境下實(shí)現(xiàn)了 Lightcuts算法,通過將光源聚類成樹 形結(jié)構(gòu),然后再對光源樹進(jìn)行裁剪,減少實(shí)際渲染的光源數(shù)目,能夠?qū)秩緯r間與光源數(shù)目 的關(guān)系降為亞線性,而且穩(wěn)定性比較好,在大部分情況下都能有良好的加速效果。
[0008] 為了實(shí)現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:
[0009] -種面向可編程著色器的多光源加速方法,包括:
[0010] (1)渲染引擎讀取場景文件中的光源信息,提取Lightcuts算法所需光照參數(shù),存 入光源鏈表;
[0011] (2)渲染場景前,利用Lightcuts算法對光源進(jìn)行聚類,遍歷光源鏈表,對每類光 源構(gòu)建全局的光源樹;
[0012] (3)渲染過程中,將幾何表面上待渲染點(diǎn)放置于緩沖區(qū)中;對緩沖區(qū)中的渲染點(diǎn) 聚類:同一物體上相近的點(diǎn)有相同材質(zhì),受相同的光源影響,因此下一步對同一物體上相近 的一組渲染點(diǎn)求一個公共的光源割,進(jìn)行渲染;
[0013] (4)對于每一組的渲染點(diǎn),利用全局的光源樹,對渲染點(diǎn)分組計算光源割;
[0014] (5)設(shè)定陰影域參數(shù)和背景亮度參數(shù)的值,如果當(dāng)前光源節(jié)點(diǎn)亮度L。小于陰影域 參數(shù)值,則取其背景亮度參數(shù)值作為當(dāng)前光源節(jié)點(diǎn)亮度的估計值,進(jìn)行求光源割的計算;
[0015] (6)渲染引擎識別此光源割中的著色器文件,使用光源割代替原始光源進(jìn)行照 明;
[0016] (7)重復(fù)渲染過程,直到所有渲染點(diǎn)渲染完成,輸出渲染結(jié)果圖像。
[0017] 所述步驟(3)中,對同一物體上相近的渲染點(diǎn)求公共光源割的具體方法如下:
[0018] a.每一組渲染點(diǎn)共享一個存儲光源割的堆棧;設(shè)置標(biāo)記位,標(biāo)記所執(zhí)行的是否為 該組渲染點(diǎn)的第一個點(diǎn);
[0019] b.如果執(zhí)行的是第一個點(diǎn),則正常執(zhí)行求光源割,結(jié)果存儲到堆棧;如果不是第 一個點(diǎn),則從堆棧中的上一次計算的光源割開始,執(zhí)行當(dāng)前點(diǎn)的求光源割過程,結(jié)果仍存放 在堆棧中;
[0020] c.不斷循環(huán)執(zhí)行步驟b,直到該組渲染點(diǎn)全部執(zhí)行完畢,堆棧中的結(jié)果就是該組 渲染點(diǎn)的公共光源割。
[0021] 所述步驟(4)中,對渲染點(diǎn)分組計算光源割的具體方法為:
[0022] 1)預(yù)估光源樹中光源節(jié)點(diǎn)的兩個值:L。和upperbound ;所述L。表示一個光源聚類 實(shí)際照射到渲染點(diǎn)的亮度的預(yù)估;upperbound表示理論上光源節(jié)點(diǎn)所代表的光源聚類照 射到渲染點(diǎn)產(chǎn)生的亮度的預(yù)計最大值;
[0023] 2)如果maxupperbound〈0· 02* Σ Lc,說明堆棧內(nèi)所有光源節(jié)點(diǎn)的upperbound值 都滿足小于〇. 02* Σ L。的條件,則堆棧內(nèi)光源節(jié)點(diǎn)即為最后求得的光源節(jié)點(diǎn),計算完畢;其 中,maxupperbound為棧內(nèi)所有節(jié)點(diǎn)的upperbound的最大值,0· 02為韋伯參數(shù);
[0024] 否則,分裂該光源節(jié)點(diǎn),將被分裂的節(jié)點(diǎn)出棧,其子節(jié)點(diǎn)入棧;計算新入棧節(jié)點(diǎn)的 upperbound 和 Lc〇
[0025] 所述步驟(5)中,如果使用了背景亮度后,在之后的計算過程中,預(yù)估的光源節(jié)點(diǎn) 亮度L。值又大于或等于了陰影域參數(shù)值時,則恢復(fù)使用預(yù)估光源節(jié)點(diǎn)亮度L。進(jìn)行求光源割 的計算。
[0026] 所述陰影域參數(shù)默認(rèn)取絕對感覺閾限的中值0. 05,所述背景亮度參數(shù)大于或等于 陰影域參數(shù)值,默認(rèn)取絕對感覺閾限〇. 1。
[0027] 所述步驟(3)中對緩沖區(qū)中的渲染點(diǎn)聚類的方法為:
[0028] 第1步:對于同一組光源的集合,尋找其中權(quán)重最小的兩個光源;
[0029] 第2步:為權(quán)重最小的兩個光源構(gòu)建一個父節(jié)點(diǎn),在兩光源中隨機(jī)選擇一個光源 作為其代表光源,記錄包圍盒信息和總亮度值;
[0030] 第3步:將父節(jié)點(diǎn)加入光源集合,兩個子節(jié)點(diǎn)從光源集合中刪除;
[0031] 第4步:跳到第1步執(zhí)行,直到該組光源的集合中只剩一個節(jié)點(diǎn),即根節(jié)點(diǎn),光源樹 構(gòu)建完成;其中葉子節(jié)點(diǎn)為實(shí)際光源,內(nèi)部節(jié)點(diǎn)為代表光源。
[0032] 所述第1步中權(quán)重的計算方法如下式所示:
[0033] W = Ic (ac2+c2 (I - cos β c)2)
[0034] 其中,I。為兩個光源亮度的和,a。為兩光源軸對齊包圍盒的對角線長度;對于點(diǎn)光 源和平行光c的值為0,對于聚光燈,c是一個聯(lián)系空間大小和聚光燈方向的常量,與場景包 圍盒的對角線長度相關(guān);β。為這兩個光源綁定角的1/2。
[0035] 本發(fā)明的有益效果
[0036] 1.本發(fā)明針對Lightcuts算法對于場景中陰影部分的渲染加速效果并不理想這 一問題進(jìn)行了分析并改進(jìn)算法,提出了陰影域和背景亮度兩個參數(shù),對陰影部分的渲染過 程進(jìn)行控制,避免一些不必要的計算,加速了陰影處渲染的效率。
[0037] 2.本發(fā)明采用渲染點(diǎn)聚類的方法,對一組同材質(zhì)、空間距離近的渲染點(diǎn)求取 Lightcuts,減少的光源割的構(gòu)建時間,提升渲染效率。
[0038] 3.為了使算法支持可編程著色器下的渲染流程,本發(fā)明設(shè)計了相關(guān)的接口,使其 支持商業(yè)渲染普遍采用的可編程著色器,提高了算法可用性。

【專利附圖】

【附圖說明】
[0039] 圖1為四個光源的聚類過程示意圖;
[0040] 圖2為四個光源的求光源割過程示意圖;
[0041] 圖3為本發(fā)明實(shí)施例渲染時間對比柱狀圖。

【具體實(shí)施方式】
[0042] 下面結(jié)合具體實(shí)施例與附圖對本發(fā)明作進(jìn)一步說明。
[0043] Lightcuts算法主要分為光源聚類和求取光源割兩個部分。
[0044] a.光源聚類:
[0045] 光源聚類過程將場景中的光源聚類成為一棵二叉樹,如圖1所示。步驟如下:
[0046] 1)對于所有同類光源的集合,尋找其中權(quán)重最小的兩個光源,權(quán)重的計算方法如 公式⑴所示:
[0047] W = Ic (ac2+c2 (I - cos β c)2) 公式(I)
[0048] 其中I。為兩個光源亮度的和,a。為兩光源軸對齊包圍盒的對角線長度。對于點(diǎn)光 源和平行光C的值為0。對于聚光燈,c是一個聯(lián)系空間大小和聚光燈方向的常量,與場景 包圍盒的對角線長度相關(guān),β。為這兩個光源綁定角的1/2。
[0049] 2)為權(quán)重最小的兩個光源構(gòu)建一個父節(jié)點(diǎn),在兩光源中隨機(jī)選擇一個光源作為其 代表光源,記錄包圍盒信息和總亮度值。包圍盒的意思是用體積稍大且特性簡單的幾何體 來近似地代替復(fù)雜的幾何對象。
[0050] 3)將父節(jié)點(diǎn)加入光源集合,兩個子節(jié)點(diǎn)從光源集合中刪除。
[0051] 4)跳到第一步執(zhí)行,直到光源集合中只剩一個節(jié)點(diǎn),即根節(jié)點(diǎn),光源樹構(gòu)建完成。 其中葉子節(jié)點(diǎn)為實(shí)際光源,內(nèi)部節(jié)點(diǎn)為代表光源。
[0052] b.求光源割:
[0053] 要在保證渲染結(jié)果質(zhì)量的前提下進(jìn)行多光源的簡化,在求解光源割的過程中就需 要按照韋伯原理分裂節(jié)點(diǎn)。分裂過程中,對于光源樹中的代表光源節(jié)點(diǎn),都有兩個值:L。和 upperbound。這兩個值在查找到節(jié)點(diǎn)時才進(jìn)行計算:
[0054] L。表示一個光源聚類實(shí)際照射到渲染點(diǎn)的亮度的預(yù)估。其計算公式(2)如下:
[0055] Lc(x,w) ~ Mj(x,w)Gj(x)Vj(x) Σ iec Ii 公式⑵
[0056] 其中集合C表不一個光源聚類,X表不渲染點(diǎn)(包含位置,法向等信息),w表不視 點(diǎn)方向,M表不材質(zhì)因子,G表不幾何因子,V表不可見性,I表不光源亮度。i代表實(shí)際光 源,j是當(dāng)前聚類的代表光源。upperbound表示理論上節(jié)點(diǎn)所代表的光源聚類照射到渲染 點(diǎn)產(chǎn)生的亮度的預(yù)計最大值(假設(shè)光源全部可見)。其計算公式與L。的公式相同,只是計 算過程中材質(zhì)因子M、幾何因子G以及可見性因子V要取上限值。
[0057] 具體的求光源割的過程如圖2所示,包括:
[0058] 1)設(shè)立一個堆棧來存放結(jié)果。首先將根節(jié)點(diǎn)入棧,計算根節(jié)點(diǎn)的upperbound和 Lc。
[0059] 2)如果 maxupperbouncKO. 02* Σ Lc (maxupperbound 為棧內(nèi)所有節(jié)點(diǎn)的 upperbound的最大值,0. 02為韋伯參數(shù)),說明棧內(nèi)所有節(jié)點(diǎn)的upperbound值都滿足小于 0. 02* EL。的條件,則棧內(nèi)節(jié)點(diǎn)即為最后求得的節(jié)點(diǎn),計算完畢。否則分裂該節(jié)點(diǎn)(如果存 在子節(jié)點(diǎn)),將被分裂的節(jié)點(diǎn)出棧,其子節(jié)點(diǎn)入棧。計算新入棧節(jié)點(diǎn)的upperbound和L。。
[0060] 最終堆棧中存儲的就是經(jīng)過Lightcuts算法簡化后的結(jié)果,即一個光源割。
[0061] 原始Lightcuts算法在場景中陰影較多的地方執(zhí)行效率比較低,在大量光源都 被遮擋的陰影處,光源割內(nèi)光源的數(shù)目基本等于實(shí)際光源數(shù)。這些陰影處預(yù)估亮度L。 很?。ㄓ锌赡転椹?,從而韋伯參數(shù)〇. 02與L。的乘積也很小,而代表光源的上限估計值 upperbound由于不考慮遮擋,一般都會大于0. 02*L。。導(dǎo)致求光源割過程中節(jié)點(diǎn)不斷分裂, 直到葉子節(jié)點(diǎn)。
[0062] 為了加快實(shí)際渲染效率,本發(fā)明提出了陰影域和背景亮度兩個可選經(jīng)驗參數(shù)。在 計算執(zhí)行的光源時候,當(dāng)預(yù)估的總光照值L。小于陰影域參數(shù)值(為保證渲染效果,中和預(yù) 估總光照時帶來的誤差,默認(rèn)取絕對感覺閾限的中值0.05)時,認(rèn)為該渲染點(diǎn)處于陰影內(nèi), 對其取背景亮度參數(shù)值(一般大于或等于陰影域參數(shù)值,默認(rèn)為絕對感覺閾限〇. 1)作為當(dāng) 前預(yù)估亮度L。的值,進(jìn)行求光源割的計算。如果使用了背景亮度后,在之后的計算過程中, 預(yù)估的總光照值又大于或等于了陰影域參數(shù)值,則恢復(fù)使用預(yù)估亮度L。進(jìn)行計算,確保準(zhǔn) 確性。
[0063] 經(jīng)過適當(dāng)?shù)脑黾雨幱皡^(qū)域內(nèi)渲染點(diǎn)的預(yù)估亮度,可以合理減少光源割內(nèi)光源總 數(shù),提高陰影處渲染的效率,實(shí)際渲染的結(jié)果也符合預(yù)期,而且可以保證的圖像質(zhì)量。
[0064] 為了提高效率,將同一物體上相近的點(diǎn)分組進(jìn)行渲染,只需要執(zhí)行一遍材質(zhì) shader,就可以渲染最多256個點(diǎn)。相近的點(diǎn)一般法向和位置相差不大,計算得到的光源割 也大致相同,所以根據(jù)這個特點(diǎn),采用增量計算公共光源割的方法來適應(yīng)引擎對渲染點(diǎn)分 組處理的流程,并且加快了求光源割的速度。
[0065] 可編程著色器在渲染中被廣泛使用,但傳統(tǒng)Lightcuts算法普遍不支持可編程著 色器描述的光源。本發(fā)明從提取光源著色器提取Lightcuts算法所必要的參數(shù)進(jìn)行傳遞, 從而支持可編程著色器。提取的信息主要包括:光源類型、光源亮度、衰減模式、光源位置、 方向、照射范圍。
[0066] 在渲染引擎中實(shí)現(xiàn)Lightcuts算法,首先必須獲取光源信息,以建立光源樹。而且 建立光源樹的過程必須在渲染每個點(diǎn)之前進(jìn)行,建樹過程可以看做是一種預(yù)處理,全局只 執(zhí)行一次。渲染引擎會遍歷所有光源來計算渲染點(diǎn)處的光照值。要應(yīng)用Lightcuts算法進(jìn) 行加速,需要在遍歷之前加入求光源割的過程,用得到的光源割去取代原來的光源進(jìn)行渲 染,達(dá)到加速的目的。
[0067] 本發(fā)明的面向可編程著色器的多光源加速方法包括以下步驟:
[0068] 1)渲染引擎讀取場景文件中光源信息,Lightcuts解析提取所需光照參數(shù),存入 光源鏈表。
[0069] 2)渲染場景前,Lightcuts算法對光源進(jìn)行聚類,遍歷光源鏈表,對每類光源構(gòu)建 全局的光源樹。
[0070] 3)渲染過程中,渲染引擎計算點(diǎn)的光照時,執(zhí)行Lightcuts算法:
[0071] 3. 1)渲染點(diǎn)的時候,將待渲染點(diǎn)放置于緩沖區(qū)中。
[0072] 3. 2)對緩沖區(qū)中的渲染點(diǎn)聚類,同一物體上相近的點(diǎn)有相同材質(zhì),受相同的光源 影響,將其聚類,進(jìn)行渲染。
[0073] 3.3) -組256個渲染點(diǎn),利用全局光源樹,求解一個光源割。
[0074] 3. 4)對光源割內(nèi)的光源進(jìn)行遍歷,根據(jù)陰影域或者背景亮度參數(shù)估算光源對場景 影響,忽略無影響光源。提交渲染執(zhí)行光源著色器
[0075] 4)渲染引擎執(zhí)行對應(yīng)的光源著色器,計算光照結(jié)果。選取下一批點(diǎn),重復(fù)步驟2, 直到渲染完成,輸出渲染結(jié)果圖像。
[0076] 實(shí)現(xiàn)細(xì)節(jié):
[0077] 1)可編程著色器定義的光源shader和材質(zhì)shader有很大靈活性,需要定義與 Lightcuts算法相配套的接口進(jìn)行約束。接口設(shè)計時只提取出必要的參數(shù)進(jìn)行傳遞,避免多 余的計算,同時也防止接口參數(shù)對著色器約束過多,影響可編程著色器的靈活性。
[0078] 在上述的設(shè)計方案中,求光源割需要預(yù)估直接光照的值(L。),這與材質(zhì)中直接光 照部分的計算有很多是重復(fù)的,兩遍計算導(dǎo)致效率降低。經(jīng)過實(shí)驗證實(shí)重復(fù)計算中90%以 上的工作量源于可見性V的求解??梢娦缘挠嬎闵婕暗疥幱熬€與整個場景求交(trace函 數(shù)),與場景中面片數(shù)目相關(guān),復(fù)雜度很高。所以設(shè)計了 tracejeuse接口參數(shù),將渲染引擎 計算Lc過程中得到的求交結(jié)果傳遞給材質(zhì)shader重用,提高加速效果。
[0079] 2)引擎渲染流程中,為了提高效率,將同一物體上相近的點(diǎn)分組進(jìn)行渲染,這樣只 需要執(zhí)行一遍材質(zhì)著色器,就可以渲染最多256個點(diǎn)。相近的點(diǎn)一般法向和位置相差不大, 計算得到的光源割也大致相同。根據(jù)這個特點(diǎn),本發(fā)明采用增量計算公共光源割的方法,對 渲染點(diǎn)分組計算光源割,加快了求光源割的速度。計算方法如下:
[0080] 1. 一組點(diǎn)共享一個存儲光源割的堆棧。設(shè)置標(biāo)記位,標(biāo)記所執(zhí)行的是否為一組點(diǎn) 的第一個點(diǎn)。
[0081] 2.如果執(zhí)行的是第一個點(diǎn),則正常執(zhí)行求光源割,結(jié)果存儲到堆棧。如果不是第一 個點(diǎn),則從堆棧中的上一次計算的光源割開始,執(zhí)行當(dāng)前點(diǎn)的求光源割過程,結(jié)果仍存放在 堆棧中。
[0082] 3.不斷循環(huán)執(zhí)行第二步,直到一組點(diǎn)全部執(zhí)行完畢,堆棧中的結(jié)果就是這組點(diǎn)的 公共光源割。
[0083] 對于一個渲染算法,即是將一個三維場景轉(zhuǎn)化為圖片的過程,場景中包括了攝像 機(jī),幾何體,光源,材質(zhì),貼圖紋理等信息。在渲染任務(wù)開始前,將一個三維場景在建模軟件 中的表達(dá)轉(zhuǎn)化為渲染引擎可以讀取和識別的數(shù)據(jù)表達(dá)方式,在轉(zhuǎn)化程序里,按照本發(fā)明所 述,在可編程著色器中實(shí)現(xiàn)Lightcuts算法以及相關(guān)改進(jìn)。之后用戶提交一個包含完整信 息的場景數(shù)據(jù)文件包,渲染引擎可以識別這些文件中所描述的攝像機(jī),幾何體,光源等信 息。在將整個場景數(shù)據(jù)讀入后,開始渲染,著色過程中執(zhí)行算法,輸出圖像。
[0084] 浦東夜色場景是一個渲染實(shí)例,該場景包含11萬三角面片,724個光源,所有幾何 體、光源、材質(zhì)均采用符合Renderman規(guī)范,光源、材質(zhì)使用可編程著色器描述。具體場景信 息數(shù)據(jù)如表1所示
[0085] 表 1

【權(quán)利要求】
1. 一種面向可編程著色器的多光源加速方法,其特征是,包括: (1) 撞染引擎讀取場景文件中的光源信息,提取Li曲tcuts算法所需光照參數(shù),存入光 源鏈表; (2) 撞染場景前,利用Li曲tcuts算法對光源進(jìn)行聚類,遍歷光源鏈表,對每類光源構(gòu) 建全局的光源樹; (3) 撞染過程中,將幾何表面上待撞染點(diǎn)放置于緩沖區(qū)中;對緩沖區(qū)中的撞染點(diǎn)聚類: 同一物體上相近的點(diǎn)有相同材質(zhì),受相同的光源影響,因此下一步對同一物體上相近的一 組撞染點(diǎn)求一個公共的光源割,進(jìn)行撞染; (4) 對于每一組的撞染點(diǎn),利用全局的光源樹,對撞染點(diǎn)分組計算光源割; (5) 設(shè)定陰影域參數(shù)和背景亮度參數(shù)的值,如果當(dāng)前光源節(jié)點(diǎn)亮度L。小于陰影域參數(shù) 值,則取其背景亮度參數(shù)值作為當(dāng)前光源節(jié)點(diǎn)亮度的估計值,進(jìn)行求光源割的計算; (6) 撞染引擎識別此光源割中的著色器文件,使用光源割代替原始光源進(jìn)行照明; (7) 重復(fù)撞染過程,直到所有撞染點(diǎn)撞染完成,輸出撞染結(jié)果圖像。
2. 如權(quán)利要求1所述的一種面向可編程著色器的多光源加速方法,其特征是,所述步 驟(3)中,對同一物體上相近的撞染點(diǎn)求公共光源割的具體方法如下: a. 每一組撞染點(diǎn)共享一個存儲光源割的堆找;設(shè)置標(biāo)記位,標(biāo)記所執(zhí)行的是否為該組 撞染點(diǎn)的第一個點(diǎn); b. 如果執(zhí)行的是第一個點(diǎn),則正常執(zhí)行求光源割,結(jié)果存儲到堆找;如果不是第一個 點(diǎn),則從堆找中的上一次計算的光源割開始,執(zhí)行當(dāng)前點(diǎn)的求光源割過程,結(jié)果仍存放在堆 找中; C.不斷循環(huán)執(zhí)行步驟b,直到該組撞染點(diǎn)全部執(zhí)行完畢,堆找中的結(jié)果就是該組撞染 點(diǎn)的公共光源割。
3. 如權(quán)利要求1所述的一種面向可編程著色器的多光源加速方法,其特征是,所述步 驟(4)中,對撞染點(diǎn)分組計算光源割的具體方法為: 1) 預(yù)估光源樹中光源節(jié)點(diǎn)的兩個值;L。和upperbound ;所述L。表示一個光源聚類實(shí)際 照射到撞染點(diǎn)的亮度的預(yù)估;upperbound表示理論上光源節(jié)點(diǎn)所代表的光源聚類照射到 撞染點(diǎn)產(chǎn)生的亮度的預(yù)計最大值; 2) 如果maxupperbouncKO. 02* E L。,說明堆找內(nèi)所有光源節(jié)點(diǎn)的upperbound值都滿 足小于0.02* E L。的條件,則堆找內(nèi)光源節(jié)點(diǎn)即為最后求得的光源節(jié)點(diǎn),計算完畢;其中, maxupperbound為找內(nèi)所有節(jié)點(diǎn)的upperbound的最大值,0. 02為韋伯參數(shù); 否則,分裂該光源節(jié)點(diǎn),將被分裂的節(jié)點(diǎn)出找,其子節(jié)點(diǎn)入找;計算新入找節(jié)點(diǎn)的 upperbound 和Lcd
4. 如權(quán)利要求1所述的一種面向可編程著色器的多光源加速方法,其特征是,所述步 驟巧)中,如果使用了背景亮度后,在之后的計算過程中,預(yù)估的光源節(jié)點(diǎn)亮度L。值又大于 或等于了陰影域參數(shù)值時,則恢復(fù)使用預(yù)估光源節(jié)點(diǎn)亮度L。進(jìn)行求光源割的計算。
5. 如權(quán)利要求4所述的一種面向可編程著色器的多光源加速方法,其特征是,所述陰 影域參數(shù)默認(rèn)取絕對感覺闊限的中值0.05,所述背景亮度參數(shù)大于或等于陰影域參數(shù)值, 默認(rèn)取絕對感覺闊限0.1。
6. 如權(quán)利要求1所述的一種面向可編程著色器的多光源加速方法,其特征是,所述步 驟(3)中對緩沖區(qū)中的撞染點(diǎn)聚類的方法為: 第1步:對于同一組光源的集合,尋找其中權(quán)重最小的兩個光源; 第2步;為權(quán)重最小的兩個光源構(gòu)建一個父節(jié)點(diǎn),在兩光源中隨機(jī)選擇一個光源作為 其代表光源,記錄包圍盒信息和總亮度值; 第3步:將父節(jié)點(diǎn)加入光源集合,兩個子節(jié)點(diǎn)從光源集合中刪除; 第4步:跳到第1步執(zhí)行,直到該組光源的集合中只剩一個節(jié)點(diǎn),即根節(jié)點(diǎn),光源樹構(gòu)建 完成;其中葉子節(jié)點(diǎn)為實(shí)際光源,內(nèi)部節(jié)點(diǎn)為代表光源。
7.如權(quán)利要求6所述的一種面向可編程著色器的多光源加速方法,其特征是,所述第1 步中權(quán)重的計算方法如下式所示: W = I。(3。2+。2 (1 - cos 目 C) 2) 其中,I。為兩個光源亮度的和,a。為兩光源軸對齊包圍盒的對角線長度;對于點(diǎn)光源和 平行光C的值為0,對于聚光燈,C是一個聯(lián)系空間大小和聚光燈方向的常量,與場景包圍盒 的對角線長度相關(guān);目。為該兩個光源綁定角的1/2。
【文檔編號】G06T15/50GK104463943SQ201410636581
【公開日】2015年3月25日 申請日期:2014年11月12日 優(yōu)先權(quán)日:2014年11月12日
【發(fā)明者】孟祥雨, 王璐, 徐延寧 申請人:山東地緯數(shù)碼科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
万全县| 六安市| 青海省| 东安县| 和龙市| 宜城市| 改则县| 伊川县| 铜鼓县| 新和县| 绍兴县| 楚雄市| 绥棱县| 济宁市| 策勒县| 崇义县| 同心县| 海原县| 贡觉县| 潢川县| 荔波县| 冀州市| 三江| 淳安县| 武平县| 都匀市| 承德市| 兴义市| 始兴县| 承德县| 无为县| 开江县| 塔河县| 陇川县| 新龙县| 卢湾区| 景德镇市| 道孚县| 新晃| 黄梅县| 忻州市|