一種3D實時渲染方法、系統(tǒng)及介質(zhì)與流程
一種3d實時渲染方法、系統(tǒng)及介質(zhì)
技術(shù)領(lǐng)域
1.本發(fā)明涉及光照渲染技術(shù)領(lǐng)域,尤其是一種3d實時渲染方法、系統(tǒng)及介質(zhì)。
背景技術(shù):
2.在定制家具行業(yè),3d設(shè)計軟件是設(shè)計師設(shè)計方案的重要工具。實時渲染作為3d設(shè)計軟件的核心技術(shù),其算法的優(yōu)劣直接影響軟件的設(shè)計效率與設(shè)計效果,同時也影響軟件是否支持跨平臺應(yīng)用。傳統(tǒng)的方法流程中,設(shè)計師采用3dmax、maya等通用設(shè)計軟件進行方案設(shè)計,相關(guān)軟件更多考慮的是靈活性,軟件功能強大,但結(jié)構(gòu)復(fù)雜,不支持web設(shè)計,對機器性能及設(shè)計師水平都提出了較高的要求。
3.目前,雖然也有一些針對定制家具行業(yè)提供支持pc設(shè)計與web設(shè)計的第三方平臺,但這些平臺的更關(guān)注的是功能設(shè)計,實時渲染效果不佳,設(shè)計師通常需要通過多次效果圖渲染才能確認方案的最終效果,降低了設(shè)計效率。
技術(shù)實現(xiàn)要素:
4.有鑒于此,本發(fā)明實施例提供一種3d實時渲染方法、系統(tǒng)及介質(zhì),能夠有效提高光照渲染效果,進而提升設(shè)計效率。
5.一方面,本發(fā)明的實施例提供了一種3d實時渲染方法,包括:
6.獲取目標場景的包圍盒信息,根據(jù)所述包圍盒信息確定目標probe點集;
7.基于所述目標probe點集,計算得到所述目標場景的probe光照信息;所述probe光照信息包括各個probe點的輻照度數(shù)據(jù);
8.獲取待渲染幀緩存信息和一次反彈光幀緩存信息;
9.基于所述待渲染幀緩存信息計算得到待渲染幀緩存著點的直接光照數(shù)據(jù);
10.基于所述一次反彈光幀緩存信息,根據(jù)所述probe光照信息計算一次反彈光幀緩存著點對所述待渲染幀緩存著點的間接光照數(shù)據(jù);
11.根據(jù)所述直接光照數(shù)據(jù)和所述間接光照數(shù)據(jù),完成待渲染幀的全局光照計算。
12.可選地,所述獲取目標場景的包圍盒信息,根據(jù)所述包圍盒信息確定目標probe點集,包括:
13.獲取目標場景的包圍盒的尺寸信息,確定所述包圍盒的中心點和邊界;
14.以所述包圍盒的中心點為起始點,構(gòu)建空間立體坐標系,根據(jù)預(yù)設(shè)步長分別沿著x軸正負方向、y軸正負方向和z軸正負方向均勻設(shè)置probe點,直到probe點覆蓋所述包圍盒的邊界,確定所有的probe點為目標probe點集。
15.可選地,所述基于所述目標probe點集,計算得到所述目標場景的probe光照信息,包括:
16.基于所述目標probe點集,對每個probe點的輻照度、每個probe點與目標采樣點的距離及距離的平方進行計算,得到probe點預(yù)計算信息;
17.將所述probe點預(yù)計算信息以紋理的形式進行存儲得到probe光照信息。
18.可選地,所述獲取待渲染幀緩存信息和一次反彈光幀緩存信息這一步驟,獲取待渲染幀緩存信息包括:
19.通過前向渲染方式,將所述目標場景的模型信息傳遞到渲染管線;
20.對所述渲染管線的所述模型信息進行光柵化處理,確定待渲染幀緩存著點;
21.通過多渲染目標技術(shù),將所述待渲染幀緩存著點的第一目標信息存儲到待渲染緩存,得到待渲染幀緩存信息;所述第一目標信息包括深度信息、法線信息、材質(zhì)信息和運動向量。
22.可選地,所述獲取待渲染幀緩存信息和一次反彈光幀緩存信息這一步驟,獲取一次反彈光幀緩存信息包括:
23.通過光線跟蹤技術(shù),對所述待渲染著點進行場景射線求交計算,確定一次反彈光幀緩存著點;
24.通過多渲染目標技術(shù),將所述一次反彈光幀緩存著點的第二目標信息存儲到一次反彈光幀緩存,得到一次反彈光幀緩存信息;所述第二目標信息包括深度信息、法線信息和材質(zhì)信息。
25.可選地,所述基于所述一次反彈光幀緩存信息,根據(jù)所述probe光照信息計算一次反彈光幀緩存著點對所述待渲染幀緩存著點的間接光照數(shù)據(jù),包括:
26.基于所述一次反彈光幀緩存信息,計算得到第一光照數(shù)據(jù);所述第一光照數(shù)據(jù)為一次反彈光幀緩存著點的直接光照數(shù)據(jù);
27.根據(jù)所述probe光照信息,計算得到第二光照數(shù)據(jù);所述第二光照數(shù)據(jù)為一次反彈光幀緩存著點的間接光照數(shù)據(jù);
28.基于所述第一光照數(shù)據(jù)和所述第二光照數(shù)據(jù),計算得到一次反彈光幀緩存著點對所述待渲染幀緩存著點的間接光照數(shù)據(jù)。
29.可選地,所述根據(jù)所述probe光照信息,計算得到第二光照數(shù)據(jù),包括:
30.基于所述一次反彈光幀緩存著點,根據(jù)預(yù)設(shè)條件確定預(yù)選probe點集;
31.基于所述預(yù)選probe點集的輻照度數(shù)據(jù)進行加權(quán)平均計算,得到第二光照數(shù)據(jù)。
32.另一方面,本發(fā)明的實施例提供了一種3d實時渲染系統(tǒng),包括:
33.第一模塊,用于獲取目標場景的包圍盒信息,根據(jù)所述包圍盒信息確定目標probe點集;
34.第二模塊,用于基于所述目標probe點集,計算得到所述目標場景的probe光照信息;所述probe光照信息包括各個probe點的輻照度數(shù)據(jù);
35.第三模塊,用于獲取待渲染幀緩存信息和一次反彈光幀緩存信息;
36.第四模塊,用于基于所述待渲染幀緩存信息計算得到待渲染幀緩存著點的直接光照數(shù)據(jù);
37.第五模塊,用于基于所述一次反彈光幀緩存信息,根據(jù)所述probe光照信息計算一次反彈光幀緩存著點對所述待渲染幀緩存著點的間接光照數(shù)據(jù);
38.第六模塊,用于根據(jù)所述直接光照數(shù)據(jù)和所述間接光照數(shù)據(jù),完成待渲染幀的全局光照計算。
39.另一方面,本發(fā)明的實施例提供了一種電子設(shè)備,包括處理器以及存儲器;
40.所述存儲器用于存儲程序;
41.所述處理器執(zhí)行所述程序?qū)崿F(xiàn)如前面所述的方法。
42.另一方面,本發(fā)明的實施例提供了一種計算機可讀存儲介質(zhì),所述存儲介質(zhì)存儲有程序,所述程序被處理器執(zhí)行實現(xiàn)如前面所述的方法。
43.本發(fā)明實施例還公開了一種計算機程序產(chǎn)品或計算機程序,該計算機程序產(chǎn)品或計算機程序包括計算機指令,該計算機指令存儲在計算機可讀存儲介質(zhì)中。計算機設(shè)備的處理器可以從計算機可讀存儲介質(zhì)讀取該計算機指令,處理器執(zhí)行該計算機指令,使得該計算機設(shè)備執(zhí)行前面的方法。
44.本發(fā)明實施例首先獲取目標場景的包圍盒信息,根據(jù)所述包圍盒信息確定目標probe點集;然后基于所述目標probe點集,計算得到所述目標場景的probe光照信息;所述probe光照信息包括各個probe點的輻照度數(shù)據(jù);隨后獲取待渲染幀緩存信息和一次反彈光幀緩存信息;之后基于所述待渲染幀緩存信息計算得到待渲染幀緩存著點的直接光照數(shù)據(jù);之后基于所述一次反彈光幀緩存信息,根據(jù)所述probe光照信息計算一次反彈光幀緩存著點對所述待渲染幀緩存著點的間接光照數(shù)據(jù);最終根據(jù)所述直接光照數(shù)據(jù)和所述間接光照數(shù)據(jù),完成待渲染幀的全局光照計算。本發(fā)明通過probe技術(shù)對目標場景的光照信息進行預(yù)計算;然后獲取待渲染幀緩存信息和待渲染幀的一次反彈光幀緩存信息;最后將預(yù)計算的光照信息應(yīng)用于一次反彈光幀緩存的光照計算,并實現(xiàn)待渲染幀緩存的全局光照計算。本發(fā)明基于計算層面改進了光照渲染的計算方式,因此,能夠?qū)崿F(xiàn)跨平臺渲染應(yīng)用,且保持不同平臺渲染效果的一致性,本發(fā)明實施例能夠有效提高光照渲染效果,進而提升設(shè)計效率。
附圖說明
45.為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
46.圖1為本發(fā)明實施例提供的3d實時渲染方法的流程示意圖。
具體實施方式
47.為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
48.一方面,參照圖1,本發(fā)明的實施例提供了一種3d實時渲染方法,包括:
49.獲取目標場景的包圍盒信息,根據(jù)包圍盒信息確定目標probe點集;
50.基于目標probe點集,計算得到目標場景的probe光照信息;probe光照信息包括各個probe點的輻照度數(shù)據(jù);
51.獲取待渲染幀緩存信息和一次反彈光幀緩存信息;
52.基于待渲染幀緩存信息計算得到待渲染幀緩存著點的直接光照數(shù)據(jù);
53.基于一次反彈光幀緩存信息,根據(jù)probe光照信息計算一次反彈光幀緩存著點對待渲染幀緩存著點的間接光照數(shù)據(jù);
54.根據(jù)直接光照數(shù)據(jù)和間接光照數(shù)據(jù),完成待渲染幀的全局光照計算。
55.可選地,獲取目標場景的包圍盒信息,根據(jù)包圍盒信息確定目標probe點集,包括:
56.獲取目標場景的包圍盒的尺寸信息,確定包圍盒的中心點和邊界;
57.以包圍盒的中心點為起始點,構(gòu)建空間立體坐標系,根據(jù)預(yù)設(shè)步長分別沿著x軸正負方向、y軸正負方向和z軸正負方向均勻設(shè)置probe點,直到probe點覆蓋包圍盒的邊界,確定所有的probe點為目標probe點集。
58.可選地,基于目標probe點集,計算得到目標場景的probe光照信息,包括:
59.基于目標probe點集,對每個probe點的輻照度、每個probe點與目標采樣點的距離及距離的平方進行計算,得到probe點預(yù)計算信息;
60.將probe點預(yù)計算信息以紋理的形式進行存儲得到probe光照信息。
61.可選地,獲取待渲染幀緩存信息和一次反彈光幀緩存信息這一步驟,獲取待渲染幀緩存信息包括:
62.通過前向渲染方式,將目標場景的模型信息傳遞到渲染管線;
63.對渲染管線的模型信息進行光柵化處理,確定待渲染幀緩存著點;
64.通過多渲染目標技術(shù),將待渲染幀緩存著點的第一目標信息存儲到待渲染緩存,得到待渲染幀緩存信息;第一目標信息包括深度信息、法線信息、材質(zhì)信息和運動向量。
65.可選地,獲取待渲染幀緩存信息和一次反彈光幀緩存信息這一步驟,獲取一次反彈光幀緩存信息包括:
66.通過光線跟蹤技術(shù),對待渲染著點進行場景射線求交計算,確定一次反彈光幀緩存著點;
67.通過多渲染目標技術(shù),將一次反彈光幀緩存著點的第二目標信息存儲到一次反彈光幀緩存,得到一次反彈光幀緩存信息;第二目標信息包括深度信息、法線信息和材質(zhì)信息。
68.可選地,基于一次反彈光幀緩存信息,根據(jù)probe光照信息計算一次反彈光幀緩存著點對待渲染幀緩存著點的間接光照數(shù)據(jù),包括:
69.基于一次反彈光幀緩存信息,計算得到第一光照數(shù)據(jù);第一光照數(shù)據(jù)為一次反彈光幀緩存著點的直接光照數(shù)據(jù);
70.根據(jù)probe光照信息,計算得到第二光照數(shù)據(jù);第二光照數(shù)據(jù)為一次反彈光幀緩存著點的間接光照數(shù)據(jù);
71.基于第一光照數(shù)據(jù)和第二光照數(shù)據(jù),計算得到一次反彈光幀緩存著點對待渲染幀緩存著點的間接光照數(shù)據(jù)。
72.可選地,根據(jù)probe光照信息,計算得到第二光照數(shù)據(jù),包括:
73.基于一次反彈光幀緩存著點,根據(jù)預(yù)設(shè)條件確定預(yù)選probe點集;
74.基于預(yù)選probe點集的輻照度數(shù)據(jù)進行加權(quán)平均計算,得到第二光照數(shù)據(jù)。
75.另一方面,本發(fā)明的實施例提供了一種3d實時渲染系統(tǒng),包括:
76.第一模塊,用于獲取目標場景的包圍盒信息,根據(jù)包圍盒信息確定目標probe點集;
77.第二模塊,用于基于目標probe點集,計算得到目標場景的probe光照信息;probe光照信息包括各個probe點的輻照度數(shù)據(jù);
78.第三模塊,用于獲取待渲染幀緩存信息和一次反彈光幀緩存信息;
79.第四模塊,用于基于待渲染幀緩存信息計算得到待渲染幀緩存著點的直接光照數(shù)據(jù);
80.第五模塊,用于基于一次反彈光幀緩存信息,根據(jù)probe光照信息計算一次反彈光幀緩存著點對待渲染幀緩存著點的間接光照數(shù)據(jù);
81.第六模塊,用于根據(jù)直接光照數(shù)據(jù)和間接光照數(shù)據(jù),完成待渲染幀的全局光照計算。
82.本發(fā)明方法實施例的內(nèi)容均適用于本系統(tǒng)實施例,本系統(tǒng)實施例所具體實現(xiàn)的功能與上述方法實施例相同,并且達到的有益效果與上述方法達到的有益效果也相同。
83.本發(fā)明實施例的另一方面還提供了一種電子設(shè)備,包括處理器以及存儲器;
84.所述存儲器用于存儲程序;
85.所述處理器執(zhí)行所述程序?qū)崿F(xiàn)如前面所述的方法。
86.本發(fā)明方法實施例的內(nèi)容均適用于本電子設(shè)備實施例,本電子設(shè)備實施例所具體實現(xiàn)的功能與上述方法實施例相同,并且達到的有益效果與上述方法達到的有益效果也相同。
87.本發(fā)明實施例的另一方面還提供了一種計算機可讀存儲介質(zhì),所述存儲介質(zhì)存儲有程序,所述程序被處理器執(zhí)行實現(xiàn)如前面所述的方法。
88.本發(fā)明方法實施例的內(nèi)容均適用于本計算機可讀存儲介質(zhì)實施例,本計算機可讀存儲介質(zhì)實施例所具體實現(xiàn)的功能與上述方法實施例相同,并且達到的有益效果與上述方法達到的有益效果也相同。
89.本發(fā)明實施例還公開了一種計算機程序產(chǎn)品或計算機程序,該計算機程序產(chǎn)品或計算機程序包括計算機指令,該計算機指令存儲在計算機可讀存儲介質(zhì)中。計算機設(shè)備的處理器可以從計算機可讀存儲介質(zhì)讀取該計算機指令,處理器執(zhí)行該計算機指令,使得該計算機設(shè)備執(zhí)行前面的方法。
90.下面結(jié)合一些具體實施例對本發(fā)明進行進一步詳細說明。應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
91.針對傳統(tǒng)設(shè)計軟件對設(shè)計師水平要求高、不支持web設(shè)計;已有第三方設(shè)計平臺實時渲染效果不佳影響設(shè)計效率等問題。本發(fā)明提供了一種3d實時渲染技術(shù),該技術(shù)首先對穿過空間的光照信息進行預(yù)計算;然后通過延遲渲染技術(shù)獲取待渲染幀緩存信息,并基于光線跟蹤技術(shù)獲取待渲染幀的一次反彈光幀緩存信息;最后將預(yù)計算的光照信息應(yīng)用于一次反彈光幀緩存的光照計算,并實現(xiàn)待渲染幀緩存的全局光照計算。該方法技術(shù)能夠?qū)崿F(xiàn)一套算法同時支持pc、web、android等多種平臺應(yīng)用,保證所有平臺實時渲染效果的一致性。此外,采用基于物理真實的光照模型,使得實時渲染的效果與離線渲染效果相近,對設(shè)計師離線渲染燈光布置與參數(shù)調(diào)節(jié)的要求大大降低,有效提高方案的設(shè)計效率。
92.為實現(xiàn)上述目的,本發(fā)明提供的技術(shù)方案為:一種3d實時渲染技術(shù),包括以下部分:
93.1、對穿過空間的光照信息進行預(yù)計算
94.采用probe技術(shù),對來自直接光源并穿過空間的光照信息進行預(yù)計算。其過程為:首先,獲取場景的包圍盒,并在場景包圍盒區(qū)域內(nèi)均勻地分布多個probe點;其次,計算每個
probe點來自任意方向的輻照度、從probe往任意方向最近采樣點的距離及距離的平方等信息;最后,將所有probe點的預(yù)計算信息以紋理的形式進行存儲備用。
95.如上所述,每個probe點來自任意方向w方向的輻照度,其計算公式如下:
96.e(w)=∫
ω
l(wi)cosθdwi97.其中,wi表示w方向上半球表面某一入射光方向;θ表示wi與w的夾角;∫
ω
表示w方向上半球面所有入射光輻射率l(wi)的積分;l(wi)表示從wi方向往probe點的入射光輻射率。
98.如上所述,l(wi)值等于probe點往wi反方向射線交點處采樣點往wi方向的出射輻射率l(wo),其計算公式如下:
99.l(wo)=∫
ω
l(wi){f
diff
(wi,wo)+f
spec
(wi,wo)}cosθdwi100.其中,wi表示采樣點法線方向上半球表面內(nèi)的某一入射光方向;θ表示wi與法線方向的夾角;f
diff
(wi,wo)表示漫反射部分;f
spec
(wi,wo)表示鏡面反射部分;∫
ω
表示采樣點法線方向上半球表面入射光輻射率l(wi)的積分,既包括來自光源的直接光照,也包括周圍其他物體的間接光照,且周圍物體的間接光照計算是基于上一幀預(yù)計算的光照信息,其計算過程將在全局光照計算中一次反彈光間接光照計算給出。
101.如上所述,從probe往任意w方向最近采樣點的距離r(w)及距離的平方r2(w),其計算公式如下:
102.r(w)=∫
ω
d(wi)(cosθ)sdwi103.r2(w)=∫
ω
d2(wi)(cosθ)sdwi104.其中,wi表示w方向上半球表面內(nèi)的某一射線方向;θ表示wi與w的夾角;d(wi)表示w方向到probe點最近采樣點的距離;d2(wi)表示w方向到probe點最近采樣點距離的平方;s表示wi方向距離權(quán)重值的調(diào)節(jié)參數(shù);∫
ω
表示方向上半球面采樣點距離或距離平方的積分。
105.2、獲取待渲染幀緩存及一次反彈光的幀緩存信息
106.采用延時渲染技術(shù),獲取待渲染幀緩存及一次反彈光幀緩存信息。其過程為:首先,通過前向渲染方式將所有的模型信息傳遞到渲染管線,經(jīng)過光柵化處理,保留最終的待渲染著點,同時采用mrt((multiple render targets,多渲染目標)技術(shù),將待渲染著點的深度信息、法線信息、材質(zhì)信息、運動向量等存儲到待渲染幀緩存中。其次,在待渲染幀緩存的基礎(chǔ)上采用光線跟蹤技術(shù)對待渲染幀緩存的每個著點進行場景射線求交計算,獲取一次反彈光線的交點信息,同樣采用mrt技術(shù),將一次反彈光交點處著點的深度信息、法線信息、材質(zhì)信息等存儲到一次反彈光幀緩存中。
107.如上所訴,一次反彈光發(fā)反彈方向由待渲染著點的材質(zhì)特性確定,反彈方向計算方法如下:
108.1)漫反射材質(zhì)著點反彈光方向dir
d-xyz
計算:
109.r=sqrt(u);
[0110][0111][0112][0113][0114]
其中,u和v為[0,1]之間的隨機數(shù),r表示球坐標半徑;表示球坐標的方位角;
sqrt表示開平方函數(shù);dir
d-x
、dir
d-y
、dir
d-z
即為所求向量dir
d-xyz
的三個軸向坐標值。
[0115]
2)鏡面反射材質(zhì)著點反彈光方向dir
s-xyz
計算:
[0116]
θ=atan(r*sqrt(u),sqrt(1.0-u));
[0117][0118][0119][0120]
dir
h-z
=cosθ;
[0121]
dir
s-xyz
=reflect(dir
i-xyz
,dir
h-xyz
)
[0122]
其中,u和v為[0,1]之間的隨機數(shù);r表示著點表面材質(zhì)的粗糙度;θ表示球坐標的天頂角;表示球坐標的方位角;dir
i-xyz
表示入射光方向,由相機位置及著點位置信息計算得出;dir
h-xyz
表示微表面模型下的半程向量,即微表面模型下的法線方向;dir
h-x
、dir
h-y
、dir
h-z
表示dir
h-xyz
向量的三個軸向坐標值;reflect為反射計算函數(shù),通過該函數(shù)計算向量dir
i-xyz
基于向量dir
h-xyz
的反射向量。
[0123]
3、待渲染幀緩存的全局光照計算
[0124]
待渲染幀緩存的全局光照是通過來自光源的直接光照和一次反彈光幀緩存提供的間接光照疊加得出。待渲染幀緩存中任意一個著點的全局光照計算過程為:首先,計算該著點來自光源的直接光照;其次,計算該著點對應(yīng)的一次反彈光著點往該方向的出射輻射率,即為間接光照;最后,將直接光照與間接光照相加,即為所求著點的全局光照信息。
[0125]
如上所述,待渲染幀緩存中任意一個著點直接光照l
direct
參考預(yù)計算部分l(wo)的計算公式可得。一次反彈光著點往待渲染幀緩存著點方向的出射輻射率,其計算過程為:首先,計算該著點來自光源的直接光照;其次,根據(jù)預(yù)計算階段保存的probe光照信息計算該著點的間接光照;最后,將直接光照與間接光照相加,即為所求著點的出射輻射率。
[0126]
如上所述,一次反彈光幀緩存著點的直接光照l
b-direct
參考預(yù)計算部分l(wo)的計算公式可得。一次反彈光幀緩存著點的間接光照l
b-indirect
則采用著點周圍最近8個probe在預(yù)計算獲取的輻照度信息e(w)進行加權(quán)平均計算得到,其計算公式如下:
[0127][0128]
其中,ρ表示著點的表面的顏值;n表示著點的表面法線;e
p
表示著點周圍的某個probe點往該著點方向的預(yù)計算輻照度信息;w
p
表示某個probe點的輻照度信息的權(quán)重值,且相關(guān)權(quán)重值的取值遵循如下規(guī)則:probe點與著點的距離越遠,權(quán)重值越小;probe點與著點表面的法線的夾角越大,權(quán)重值越小;probe點與著點之間被其他物體遮擋的概率越大,權(quán)重值越小。
[0129]
如上所述,一次反彈光幀緩存著點往待渲染幀緩存著點方向的出射輻射率l
bounce
的計算公式如下:
[0130]
l
bounce
=l
b-direct
+l
b-indirect
[0131]
如上所述,待渲染幀緩存的全局光照gi的計算公式如下:
[0132]
gi=l
direct
+l
bounce
[0133]
下面結(jié)合本發(fā)明算法流程的具體實施過程對本發(fā)明的技術(shù)原理作進一步說明。
[0134]
本實施例所述的一種3d實時渲染技術(shù),其算法流程如下:首先,對穿過空間的光照信息進行預(yù)計算;然后,通過延遲渲染技術(shù)獲取待渲染幀緩存信息,并基于光線跟蹤技術(shù)獲取待渲染幀的一次反彈光的幀緩存信息;最后,將預(yù)計算的光照信息應(yīng)用于一次反彈光幀緩存的光照計算,并實現(xiàn)待渲染幀緩存的全局光照計算。其具體實施情況如下:
[0135]
1、對穿過空間的光照信息進行預(yù)計算
[0136]
首先,獲取場景的包圍盒,并在場景包圍盒區(qū)域內(nèi)均勻地分布多個probe點。其實現(xiàn)步驟如下:
[0137]
step1:獲取場景包圍盒長、寬、高及中心點等信息,進而確認包圍盒邊界;
[0138]
step2:以中心點為起始點,分別沿著x軸正負方向、y軸正負方向、z軸正負方向按照一個預(yù)設(shè)的固定步長均勻等距設(shè)置probe采集點,直到所有的probe點剛好覆蓋場景包圍盒的邊界為止。
[0139]
其次,計算每個probe點來自任意方向的輻照度、從probe往任意方向最近采樣點的距離及距離的平方等信息。其步實現(xiàn)驟如下:
[0140]
step1:從每個probe點向以該probe點為中心點的單位球面上隨機的生成多條采樣射線;
[0141]
step2:通過射線求交,獲取每條采樣射線與場景的最近交點,并保存每條射線從probe點到交點處的距離d及距離的平方d2;
[0142]
step3:計算每條射線交點往probe點方向的出射輻射率,其計算公式如下:
[0143]
l(wo)=∫
ω
l(wi){f
diff
(wi,wo)+f
spec
(wi,wo)}cosθdwi[0144]
其中,wi表示采樣點法線方向上半球表面內(nèi)的某一入射光方向;θ表示wi與法線方向的夾角;f
diff
(wi,wo)表示漫反射部分;f
spec
(wi,wo)表示鏡面反射部分;∫
ω
表示采樣點法線方向上半球表面入射光輻射率l(wi)的積分,既包括來自光源的直接光照,也包括周圍其他物體的間接光照,且周圍物體的間接光照計算是基于上一幀預(yù)計算的光照信息,其計算過程將在全局光照計算中一次反彈光間接光照計算給出。
[0145]
step4:計算每個probe點來自任意方向的輻照度,其計算公式如下:
[0146]
e(w)=∫
ω
l(wi)cosθdwi[0147]
其中,wi表示w方向上半球表面某一入射光方向;θ表示wi與w的夾角;∫
ω
表示w方向上半球面所有入射光輻射率l(wi)的積分;l(wi)表示從方向往probe點的入射光輻射率,且l(wi)的值等于step3所求的出射輻射率l(wo)。
[0148]
step5:計算從probe往任意方向最近采樣點的距離及距離的平方,其計算公式如下:
[0149]
r(w)=∫
ω
d(wi)(cosθ)sdwi[0150]
r2(w)=∫
ω
d2(wi)(cosθ)sdwi[0151]
∫
ω
其中,wi表示w方向上半球表面內(nèi)的某一射線方向;θ表示wi與w的夾角;d(wi)為step2所求采樣射線交點到probe點的距離d;d2(wi)為step2所求采樣射線交點到probe點距
離的平方d2;s表示wi方向距離權(quán)重值的調(diào)節(jié)參數(shù);∫
ω
表示w方向上半球面采樣點距離或距離平方的積分。
[0152]
2、獲取待渲染幀緩存及一次反彈光幀緩存信息
[0153]
首先,獲取待渲染幀緩存。其實現(xiàn)步驟如下:
[0154]
step1:遍歷場景模型,獲取所有不透明模型,并將其加入待渲染模型列表;
[0155]
step2:設(shè)置mrt幀緩存并開啟深度緩存,同時綁定相應(yīng)通道到待渲染幀緩存紋理;
[0156]
step3:執(zhí)行正向渲染流程,將step1獲取的模型列表依次執(zhí)行光柵化繪制;
[0157]
step4:在光柵化渲染管線的片段著器中直接將模型頂點的深度信息、法線信息、材質(zhì)信息、運動向量等寫入待渲染幀緩存中,得到待渲染幀緩存信息。
[0158]
其次,獲取一次反彈光幀緩存信息。其實現(xiàn)步驟如下:
[0159]
step1:設(shè)置mrt幀緩存并開啟深度緩存,同時綁定相應(yīng)通道到一次反彈光幀緩存紋理;
[0160]
step2:將待渲染幀緩存紋理綁定到一個2d矩形面模型,執(zhí)行延時渲染流程,對該矩形面進行光柵化處理;
[0161]
step3:在光柵化渲染管線的片段著器中根據(jù)著點的材質(zhì)特性計算從鏡頭到該著點的一次反彈光射線方向,若著點為漫反射材質(zhì),則其反彈光方向dir
d-xyz
的計算公式如下:
[0162]
r=sqrt(u);
[0163][0164][0165][0166][0167]
其中,u和v為[0,1]之間的隨機數(shù),r表示球坐標半徑,表示球坐標的方位角,sqrt表示開平方函數(shù),dir
d-x
、dir
d-y
、dir
d-z
即為所求向量dir
d-xyz
的三個軸向坐標值。
[0168]
若著點為鏡面反射材質(zhì),則反彈光方向dir
s-xyz
的計算公式如下:
[0169][0170][0171][0172][0173]
dir
h-z
=cosθ;
[0174]
dir
s-xyz
=reflect(dir
i-xyz
,dir
h-xyz
)
[0175]
其中,u和v為[0,1]之間的隨機數(shù);r表示著點表面材質(zhì)的粗糙度;θ表示球坐標的天頂角;表示球坐標的方位角;dir
i-xyz
表示入射光方向,由相機位置及著點位置信息計算得出;dir
h-xyz
表示微表面模型下的半程向量,即微表面模型下的法線方向;dir
h-x
、dir
h-y
、dir
h-z
表示dir
h-xyz
向量的三個軸向坐標值;reflect為反射計算函數(shù),通過該函數(shù)計算向量dir
i-xyz
基于向量dir
h-xyz
的反射向量。
[0176]
step4:沿著step3所求的一次反彈光射線方向?qū)φ麄€場景模型進行射線求交,并
獲取交點;
[0177]
step5:將step4交點處模型頂點的深度信息、法線信息、材質(zhì)信息、運動向量等寫入一次反彈光幀緩存中,得到一次反彈光幀緩存信息。
[0178]
3、待渲染幀緩存的全局光照計算
[0179]
待渲染幀緩存的全局光照計算,其實現(xiàn)步驟如下:
[0180]
step1:將待渲染幀緩存紋理、一次反彈光幀緩存紋理綁定到一個2d矩形面模型,執(zhí)行延時渲染流程,對該矩形面進行光柵化處理;需要說明的是,待渲染幀緩存紋理和一次反彈光幀緩存紋理為待渲染幀緩存信息和一次反彈光幀緩存信息以紋理的形式存儲得到;
[0181]
step2:在光柵化渲染管線的片段著器中計算所有光源到待渲染幀緩存著點的直接光照l
direct
,其計算公式參考probe射線交點往probe點方向的出射輻射率l(wo)的計算過程;
[0182]
step3:在光柵化渲染管線的片段著器中計算一次反彈幀緩存著點對待渲染幀緩存著點的間接光照;
[0183]
step4:在光柵化渲染管線的片段著器中將光源到待渲染幀緩存著點的直接光照l
direct
與一次反彈幀緩存著點對待渲染幀緩存著點的間接光照相加,并輸出全局光照計算結(jié)果。
[0184]
所述,一次反彈幀緩存著點對待渲染幀緩存著點的間接光照,其實現(xiàn)步驟如下:
[0185]
step1:在光柵化渲染管線的片段著器中計算所有光源到一次反彈幀緩存著點的直接光照l
b-direct
,其計算公式參考probe射線交點往probe點方向的出射輻射率l(wo)的計算過程;
[0186]
step2:在光柵化渲染管線的片段著器中,取一次反彈幀緩存著點周圍最近8個probe的輻照度信息進行加權(quán)平均,求得該著點的間接光照l
b-indirect
,其計算公式如下:
[0187][0188]
其中,ρ表示著點的表面的顏值;n表示著點的表面法線;e
p
表示著點周圍的某個probe點往該著點方向的預(yù)計算輻照度信息;w
p
表示某個probe點的輻照度信息的權(quán)重值,且相關(guān)權(quán)重值的取值遵循如下規(guī)則:probe點與著點的距離越遠,權(quán)重值越小;probe點與著點表面的法線的夾角越大,權(quán)重值越小;probe點與著點之間被其他物體遮擋的概率越大,權(quán)重值越小。
[0189]
step3:在光柵化渲染管線的片段著器中將光源到一次反彈光幀緩存著點的直接光照l
direct
與probe點對一次反彈光幀緩存著點的間接光照相加,并輸出一次反彈幀緩存著點對待渲染幀緩存著點的間接光照計算結(jié)果。
[0190]
綜上所述,本發(fā)明實施例提供了一種3d實時渲染方法,應(yīng)用本發(fā)明實施例的計算方法,能夠?qū)崿F(xiàn)跨平臺渲染應(yīng)用,且保持不同平臺渲染效果的一致性。采用基于物理的光照模型,使得實時渲染的效果與離線渲染效果相近,對設(shè)計師離線渲染燈光布置與參數(shù)調(diào)節(jié)
的要求大大降低,有效提高方案的設(shè)計效率。
[0191]
在一些可選擇的實施例中,在方框圖中提到的功能/操作可以不按照操作示圖提到的順序發(fā)生。例如,取決于所涉及的功能/操作,連續(xù)示出的兩個方框?qū)嶋H上可以被大體上同時地執(zhí)行或所述方框有時能以相反順序被執(zhí)行。此外,在本發(fā)明的流程圖中所呈現(xiàn)和描述的實施例以示例的方式被提供,目的在于提供對技術(shù)更全面的理解。所公開的方法不限于本文所呈現(xiàn)的操作和邏輯流程。可選擇的實施例是可預(yù)期的,其中各種操作的順序被改變以及其中被描述為較大操作的一部分的子操作被獨立地執(zhí)行。
[0192]
此外,雖然在功能性模塊的背景下描述了本發(fā)明,但應(yīng)當理解的是,除非另有相反說明,所述的功能和/或特征中的一個或多個可以被集成在單個物理裝置和/或軟件模塊中,或者一個或多個功能和/或特征可以在單獨的物理裝置或軟件模塊中被實現(xiàn)。還可以理解的是,有關(guān)每個模塊的實際實現(xiàn)的詳細討論對于理解本發(fā)明是不必要的。更確切地說,考慮到在本文中公開的裝置中各種功能模塊的屬性、功能和內(nèi)部關(guān)系的情況下,在工程師的常規(guī)技術(shù)內(nèi)將會了解該模塊的實際實現(xiàn)。因此,本領(lǐng)域技術(shù)人員運用普通技術(shù)就能夠在無需過度試驗的情況下實現(xiàn)在權(quán)利要求書中所闡明的本發(fā)明。還可以理解的是,所公開的特定概念僅僅是說明性的,并不意在限制本發(fā)明的范圍,本發(fā)明的范圍由所附權(quán)利要求書及其等同方案的全部范圍來決定。
[0193]
所述功能如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質(zhì)中。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:u盤、移動硬盤、只讀存儲器(rom,read-on ly memory)、隨機存取存儲器(ram,random access memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
[0194]
在流程圖中表示或在此以其他方式描述的邏輯和/或步驟,例如,可以被認為是用于實現(xiàn)邏輯功能的可執(zhí)行指令的定序列表,可以具體實現(xiàn)在任何計算機可讀介質(zhì)中,以供指令執(zhí)行裝置、裝置或設(shè)備(如基于計算機的裝置、包括處理器的裝置或其他可以從指令執(zhí)行裝置、裝置或設(shè)備取指令并執(zhí)行指令的裝置)使用,或結(jié)合這些指令執(zhí)行裝置、裝置或設(shè)備而使用。就本說明書而言,“計算機可讀介質(zhì)”可以是任何可以包含、存儲、通信、傳播或傳輸程序以供指令執(zhí)行裝置、裝置或設(shè)備或結(jié)合這些指令執(zhí)行裝置、裝置或設(shè)備而使用的裝置。
[0195]
計算機可讀介質(zhì)的更具體的示例(非窮盡性列表)包括以下:具有一個或多個布線的電連接部(電子裝置),便攜式計算機盤盒(磁裝置),隨機存取存儲器(ram),只讀存儲器(rom),可擦除可編輯只讀存儲器(eprom或閃速存儲器),光纖裝置,以及便攜式光盤只讀存儲器(cdrom)。另外,計算機可讀介質(zhì)甚至可以是可在其上打印所述程序的紙或其他合適的介質(zhì),因為可以例如通過對紙或其他介質(zhì)進行光學掃描,接著進行編輯、解譯或必要時以其他合適方式進行處理來以電子方式獲得所述程序,然后將其存儲在計算機存儲器中。
[0196]
應(yīng)當理解,本發(fā)明的各部分可以用硬件、軟件、固件或它們的組合來實現(xiàn)。在上述實施方式中,多個步驟或方法可以用存儲在存儲器中且由合適的指令執(zhí)行裝置執(zhí)行的軟件或固件來實現(xiàn)。例如,如果用硬件來實現(xiàn),和在另一實施方式中一樣,可用本領(lǐng)域公知的下
列技術(shù)中的任一項或他們的組合來實現(xiàn):具有用于對數(shù)據(jù)信號實現(xiàn)邏輯功能的邏輯門電路的離散邏輯電路,具有合適的組合邏輯門電路的專用集成電路,可編程門陣列(pga),現(xiàn)場可編程門陣列(fpga)等。
[0197]
在本說明書的描述中,參考術(shù)語“一個實施例”、“一些實施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點包含于本發(fā)明的至少一個實施例或示例中。在本說明書中,對上述術(shù)語的示意性表述不一定指的是相同的實施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點可以在任何的一個或多個實施例或示例中以合適的方式結(jié)合。
[0198]
盡管已經(jīng)示出和描述了本發(fā)明的實施例,本領(lǐng)域的普通技術(shù)人員可以理解:在不脫離本發(fā)明的原理和宗旨的情況下可以對這些實施例進行多種變化、修改、替換和變型,本發(fā)明的范圍由權(quán)利要求及其等同物限定。
[0199]
以上是對本發(fā)明的較佳實施進行了具體說明,但本發(fā)明并不限于所述實施例,熟悉本領(lǐng)域的技術(shù)人員在不違背本發(fā)明精神的前提下還可做出種種的等同變形或替換,這些等同的變形或替換均包含在本發(fā)明權(quán)利要求所限定的范圍內(nèi)。
