国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種加速被面光源照射的3d虛擬場景的光線跟蹤的方法

      文檔序號:6334833閱讀:214來源:國知局
      專利名稱:一種加速被面光源照射的3d虛擬場景的光線跟蹤的方法
      技術(shù)領(lǐng)域
      本發(fā)明屬于真實感3D虛擬場景繪制技術(shù)領(lǐng)域,涉及一種加速被面光源照射的3D 虛擬場景的光線跟蹤的方法。
      背景技術(shù)
      真實感3D虛擬場景繪制技術(shù)在數(shù)字娛樂、影視特效、建筑CAD、廣告動畫等領(lǐng)域受 到人們的廣泛關(guān)注。目前3D虛擬場景繪制技術(shù)雖然已經(jīng)得到深入的研究,但是如何快速繪 制具有高度真實感的3D虛擬場景畫面仍然是一個有待進一步解決的難題。傳統(tǒng)的光柵化 技術(shù)不支持全局光照計算,使用其繪制的3D虛擬場景畫面往往缺乏真實感。光線跟蹤方法 能夠繪制出反射、折射、陰影等效果,是一種全局光照算法。使用光線跟蹤繪制得到的3D虛 擬場景畫面比使用光柵化技術(shù)繪制得到的3D虛擬場景畫面的真實感更強。因此光線跟蹤 方法在真實感3D虛擬場景繪制中得到了廣泛應(yīng)用。當(dāng)要求高度的真實感時,3D虛擬場景通常使用面光源而非理想的點光源進行照 射。通常使用蒙特卡洛光線跟蹤方法繪制被面光源照射的3D虛擬場景。蒙特卡洛光線跟蹤 方法通過對面光源進行重要性采樣實現(xiàn)全局光照計算。對每個需要計算光照值的場景點, 該方法都需要計算大量的光源采樣點的可見性,即判斷場景點與光源采樣點之間是否存在 遮擋。在計算每個光源采樣點的可見性時,需要產(chǎn)生一條從場景點出發(fā),射向該光源采樣點 的可見性測試光線,并用此可見性測試光線遍歷場景加速結(jié)構(gòu),以便確定是否有幾何圖元 與此可見性測試光線相交,進而判斷場景點與光源采樣點之間是否存在遮擋。由于光線跟 蹤需要跟蹤大量光線的多次反射(或折射)過程,并且需要計算每個反射(或折射)點的 光照值,因此上述光源采樣點的可見性計算量非常大。這使得蒙特卡洛光線跟蹤的計算效 率并不高,導(dǎo)致繪制一幅3D虛擬場景畫面的時間很長。所以人們迫切需要一種能夠加速被 面光源照射的3D虛擬場景的光線跟蹤的方法。

      發(fā)明內(nèi)容
      本發(fā)明的目的在于提供一種加速被面光源照射的3D虛擬場景的光線跟蹤的方 法。本方法在光線跟蹤之前通過一個預(yù)計算過程獲得面光源照射到的幾何面片的深度數(shù) 據(jù),在光線跟蹤過程中利用這些深度數(shù)據(jù)直接計算每個場景點處的光源采樣點可見性,避 免了可見性測試光線的創(chuàng)建、遍歷、求交測試等運算,提高了光線跟蹤效率。本發(fā)明的方法 所需的設(shè)備及其實現(xiàn)步驟如下1.所需設(shè)備主機系統(tǒng)(101)和GPU計算集群(102);如圖1所示,主機系統(tǒng)(101) 包括CPU (103)、內(nèi)存(104)和磁盤(105)。2.實現(xiàn)步驟本方法(010)部分,得到面光源照射到的幾何面片的深度數(shù)據(jù),具體步驟如下步驟(SOll)將3D虛擬場景模型數(shù)據(jù)(A001)從磁盤(105)加載到內(nèi)存(104)中;步驟(S012)在CPU(103)上計算面光源輪廓線(201)的外切矩形(202);
      步驟(S013)如圖2所示,在外切矩形(202)內(nèi)均勻地選取m行、η列光源采樣點, 得到一個二維采樣點陣列(Α002),將其存放在內(nèi)存(104)中;步驟(S014)在內(nèi)存(104)中創(chuàng)建一個m行、η列的掩模矩陣Μ(Α003),掩模矩陣 Μ(Α003)中的各個元素與二維采樣點陣列(Α002)中的各個光源采樣點一一對應(yīng);掩模矩陣 Μ(Α003)的每個元素的數(shù)據(jù)結(jié)構(gòu)如圖3所示,其包含一個標(biāo)識變量(301)(變量名為tag)、 一個深度圖指針變量(302)(變量名為cbpthMapPtr)和一個坐標(biāo)系變換矩陣變量(303) (變量名為transformMatrix);將掩模矩陣M(A003)的每個元素包含的標(biāo)識變量(301)設(shè) 置為0;步驟(S015)任意選取一個與面光源平面平行的向量作為U方向向量(A004);步驟(S016)把3D虛擬場景模型數(shù)據(jù)(A001)送入GPU計算集群(102)的Global Memory 中;步驟(S017)對二維采樣點陣列(A002)中的每個光源采樣點Su(下標(biāo)i為光源 采樣點Su在二維采樣點陣列(A002)中的行號,下標(biāo)j為光源采樣點Su在二維采樣點陣列 (A002)中的列號),判斷光源采樣ASu是否在面光源輪廓線(201)之內(nèi),如果光源采樣點 Sij在面光源輪廓線(201)之內(nèi),則①將掩模矩陣M(A003)的第i行、j列的元素的標(biāo)識變量(301)設(shè)置為1 ;②以光源采樣點Su為虛擬相機視點,以面光源平面法向量為虛擬相機視軸正方 向(面光源平面法向量與面光源的朝向相同),以U方向向量(A004)為虛擬相機向上方向 向量,根據(jù)3D虛擬場景與面光源的位置關(guān)系設(shè)置合適的虛擬相機視場角(A005),根據(jù)3D 虛擬場景的復(fù)雜程度設(shè)置合適的虛擬相機分辨率(A006),讀取存儲于GPU計算集群(102) 的GlobalMemory中的3D虛擬場景模型數(shù)據(jù)(A001),調(diào)用光柵化圖形API在GPU計算集群 (102)上繪制3D虛擬場景,記錄每個像素的深度值,從而得到以光源采樣點Sij為虛擬相機 視點的深度圖(A007);③把深度圖(A007)傳回內(nèi)存(104),并將深度圖(A007)的內(nèi)存首地址賦值給掩模 矩陣M(A003)的第i行、j列的元素的深度圖指針變量(302)。本方法的(020)部分,根據(jù)二維采樣點陣列(A002)中的每個光源采樣點的位置 及面光源平面法向量,計算從世界坐標(biāo)系到以各光源采樣點為原點的光源采樣點坐標(biāo)系 (B001)的變換矩陣,具體步驟如下步驟(S021):選取面光源平面法向量作為N方向向量(B002),定義V方向向量 (B003)為N方向向量(B002)與U方向向量(A004)的叉乘;步驟(S022)將U方向向量(A004)、N方向向量(B002)和V方向向量(B003)進 行歸一化,得到歸一化的U方向向量(B004)、歸一化的N方向向量(B005)和歸一化的V方 向向量(B006);步驟(S023)對于掩模矩陣M(A003)中的每個元素(B007),判斷元素(B007)的標(biāo) 識變量(301)是否為1,如果為1,則先計算元素(B007)所在的行號i和列號j,再計算二維 采樣點陣列(A002)中第i行、j列光源采樣點Sij在世界坐標(biāo)系下的坐標(biāo)Wij(BOOS),然后 按如下公式計算變換矩陣Tij
      T,,=
      其中Ux、Uy、Uz分別為歸一化的U方向向量
      (B004)的三個分量,Vx、\、Vz分別為歸一化的N萬向向量(B005)的三個分量,Nx, Ny, Nz分 別為歸一化的V方向向量(B006)的三個分量,最后將Tij賦值給元素(B007)的坐標(biāo)系變換 矩陣變量(303)。本方法的(030)部分,在光線跟蹤中利用本方法(010)部分計算出的深度圖 (A007)來加速繪制被面光源照射的3D虛擬場景,具體步驟如下步驟(S031)將掩模矩陣M(A003)及其各元素的深度圖指針變量(302)指向的所 有深度圖(A007)送入GPU計算集群(102)的Global Memory中;步驟(S032)按照正常的光線跟蹤流程,從虛擬相機視點發(fā)射穿過屏幕像素 (C001)的光線(C002),并判斷光線(C002)與3D虛擬場景的幾何面片(C003)是否相交,如 果相交,則計算出交點坐標(biāo)P(C004),并轉(zhuǎn)步驟(S033),否則屏幕像素(C001)的顏色設(shè)置為 背景色(C005),并結(jié)束對光線(C002)的跟蹤;步驟(S033)對掩模矩陣M(A003)中的每個元素(C006),判斷元素(C006)的標(biāo) 識變量(301)是否為1,如果為1,則首先將元素(C006)的坐標(biāo)系變換矩陣變量(303)賦 值給變量T(C007),再計算元素(C006)所在的行號i和列號j,然后讀取二維采樣點陣列 (A002)的第i行、j列光源采樣點Su(COOS),并計算光源采樣點Su(COOS)在世界坐標(biāo)系 下的坐標(biāo)Wij(COOg),最后將光源采樣點Sij(COOS)的行號i與列號j、交點坐標(biāo)P(C004)、坐 標(biāo)Wij(COOg)和變量T(C007)打包成一個結(jié)構(gòu)體變量(C010)送入GPU計算集群(102)的 Global Memory中;統(tǒng)計掩模矩陣M(A003)中標(biāo)識變量(301)為1的元素個數(shù)(COll),將元 素個數(shù)(COll)賦值給變量Ns;步驟(S034)在GPU計算集群(102)上創(chuàng)建Ns個并行線程,各線程分別從GPU計 算集群(102)的Global Memory中讀取一個結(jié)構(gòu)體變量(C010),并行地做以下計算 ①
      UV=τ.PyηPz11
      ,其中PX、PV、Pz分別為存儲于結(jié)構(gòu)體變量(C010)中的交點坐標(biāo)
      ,其中d為步驟(S017)中調(diào)用光柵化圖形API在GPU計算
      P(C004)的x、y、ζ坐標(biāo)分量,T為存儲于結(jié)構(gòu)體變量(C010)中的變量T(C007)
      /^NUV② w — ^ -
      η! αη!a
      集群(102)上繪制3D虛擬場景時的投影面到虛擬相機視點的距離;
      N1 -③ I =
      d ■ tan(6>v /2)
      2
      k =
      I-
      d ■ tan(<9v / 2)
      N2-.
      2
      其中θ v為步驟
      (S017)中調(diào)用光柵化圖形API在GPU計算集群(102)上繪制3D虛擬場景時設(shè)置的虛擬相 機視場角(A005),N1為步驟(S017)中調(diào)用光柵化圖形API在GPU計算集群(102)上繪制 3D虛擬場景時設(shè)置的虛擬相機垂直分辨率,N2為步驟(S017)中調(diào)用光柵化圖形API在GPU 計算集群(102)上繪制3D虛擬場景時設(shè)置的虛擬相機水平分辨率;
      ④根據(jù)結(jié)構(gòu)體變量(C010)中保存的行號i與列號j,讀取存儲于GPU計算集群
      UxUyUz0 \0 0-Wlix
      VxVvVz0 010-Wiiy
      NxNyNzQ 00 \- Wijz
      000100 0 1
      7(102)的Global Memory中的掩模矩陣M(A003)的第i行、j列元素(C012)的深度圖指 針變量(302)指向的深度圖的第1行、k列像素的深度值(C013);計算存儲于結(jié)構(gòu)體變量 (C010)中的交點坐標(biāo)P(C004)與存儲于結(jié)構(gòu)體變量(C010)中的坐標(biāo)Wij(COOg)之間的距 離D(C014);如果深度值(C013)比距離D(C014)小,則表明存儲于結(jié)構(gòu)體變量(C010)中的 交點坐標(biāo)P(C004)處的場景點(C015)不能直接被光源采樣點Sij照射,光源采樣點Sij對場 景點(C015)的直接光照貢獻Ld(COie)為0,否則計算光源采樣點Sij對場景點(C015)的直 接光照貢獻Ld(COie);最后將直接光照貢獻Ld(COie)傳回內(nèi)存(104);步驟(S035)在CPU(103)上將步驟(S034)中的各線程傳回內(nèi)存(104)的所有直 接光照貢獻Ld(COie)相加,以得到面光源對交點坐標(biāo)P(C004)處的場景點的直接光照值;步驟(S036)按照正常的光線跟蹤流程遞歸地跟蹤交點坐標(biāo)P(C004)處的反射光 線(或者折射光線),以便計算交點坐標(biāo)P(C004)處的場景點的間接光照值;在遞歸過程 中,所有場景點處的直接光照值也按上述過程進行計算;最后根據(jù)交點坐標(biāo)P(C004)處的 場景點的直接光照值、間接光照值以及材質(zhì)數(shù)據(jù)計算出屏幕像素(C001)的顏色。有益效果本發(fā)明提供了一種加速被面光源照射的3D虛擬場景的光線跟蹤的方法。本發(fā)明 方法與蒙特卡洛光線跟蹤方法相比,避免了可見性測試光線的創(chuàng)建、遍歷、求交測試等運 算,提高了光線跟蹤效率。由于使用了掩模矩陣,本發(fā)明方法適用于任何輪廓形狀的平面面 光源。另外,本發(fā)明方法利用GPU計算集群并行地計算不同光源采樣點對場景點的直接光 照值,大大地提高了光線跟蹤過程中的光照計算速度。相對于蒙特卡洛光線跟蹤方法,本發(fā) 明方法可使光線跟蹤的速度提高3 4倍。


      圖1是本發(fā)明所需的設(shè)備及其連接方式示意圖;圖2是面光源輪廓線及其外切矩 形與二維光源采樣點陣列示意圖;圖3是掩模矩陣的元素的數(shù)據(jù)結(jié)構(gòu)示意圖。
      具體實施例方式為了使本發(fā)明的特征和優(yōu)點更加清楚明白,下面參照附圖結(jié)合具體實施例對本發(fā) 明作進一步的描述。本實施例中的CPU(103)選擇Intel Xeon CPU 3. 20GHz,內(nèi)存(104)選擇金士頓 8GBDDR3 1333,磁盤(105)選擇 Buffalo HD-CE 1.5 TU2,GPU 計算集群(102)選擇 AMAX Tesla系列GPU計算集群;軟件編程工具選用VC++2008、OpenGL 2. 0和CUDA 2. 0。本方法(010)部分,得到面光源照射到的幾何面片的深度數(shù)據(jù),具體步驟如下步驟(SOll)將3D虛擬場景模型數(shù)據(jù)(A001)從磁盤(105)加載到內(nèi)存(104)中;步驟(S012)在CPU(103)上計算面光源輪廓線(201)的外切矩形(202);步驟(S013)如圖2所示,在外切矩形(202)內(nèi)均勻地選取m行、η列光源采樣點, 得到一個二維采樣點陣列(Α002),將其存放在內(nèi)存(104)中;步驟(S014)在內(nèi)存(104)中創(chuàng)建一個m行、η列的掩模矩陣Μ(Α003),掩模矩陣 Μ(Α003)中的各個元素與二維采樣點陣列(Α002)中的各個光源采樣點一一對應(yīng);掩模矩陣 Μ(Α003)的每個元素的數(shù)據(jù)結(jié)構(gòu)如圖3所示,其包含一個標(biāo)識變量(301)(變量名為tag)、一個深度圖指針變量(302)(變量名為cbpthMapPtr)和一個坐標(biāo)系變換矩陣變量(303) (變量名為transformMatrix);將掩模矩陣M(A003)的每個元素包含的標(biāo)識變量(301)設(shè) 置為0;步驟(S015)任意選取一個與面光源平面平行的向量作為U方向向量(A004);步驟(S016)把3D虛擬場景模型數(shù)據(jù)(A001)送入GPU計算集群(102)的Global Memory 中;步驟(S017)對二維采樣點陣列(A002)中的每個光源采樣點Sij(下標(biāo)i為光源 采樣點Su在二維采樣點陣列(A002)中的行號,下標(biāo)j為光源采樣點Su在二維采樣點陣列 (A002)中的列號),判斷光源采樣ASu是否在面光源輪廓線(201)之內(nèi),如果光源采樣點 Sij在面光源輪廓線(201)之內(nèi),則①將掩模矩陣M(A003)的第i行、j列的元素的標(biāo)識變量(301)設(shè)置為1 ;②以光源采樣點Sij為虛擬相機視點,以面光源平面法向量為虛擬相機視軸正方 向(面光源平面法向量與面光源的朝向相同),以U方向向量(A004)為虛擬相機向上方向 向量,根據(jù)3D虛擬場景與面光源的位置關(guān)系設(shè)置合適的虛擬相機視場角(A005),根據(jù)3D虛 擬場景的復(fù)雜程度設(shè)置合適的虛擬相機分辨率(A006),讀取存儲于GPU計算集群(102)的 GlobalMemory中的3D虛擬場景模型數(shù)據(jù)(A001),調(diào)用OpenGL API在GPU計算集群(102) 上繪制3D虛擬場景,記錄每個像素的深度值,從而得到以光源采樣點Su為虛擬相機視點的 深度圖(A007);③把深度圖(A007)傳回內(nèi)存(104),并將深度圖(A007)的內(nèi)存首地址賦值給掩模 矩陣M(A003)的第i行、j列的元素的深度圖指針變量(302)。本方法的(020)部分,根據(jù)二維采樣點陣列(A002)中的每個光源采樣點的位置 及面光源平面法向量,計算從世界坐標(biāo)系到以各光源采樣點為原點的光源采樣點坐標(biāo)系 (B001)的變換矩陣,具體步驟如下步驟(S021):選取面光源平面法向量作為N方向向量(B002),定義V方向向量 (B003)為N方向向量(B002)與U方向向量(A004)的叉乘;步驟(S022)將U方向向量(A004)、N方向向量(B002)和V方向向量(B003)進 行歸一化,得到歸一化的U方向向量(B004)、歸一化的N方向向量(B005)和歸一化的V方 向向量(B006);步驟(S023)對于掩模矩陣M(A003)中的每個元素(B007),判斷元素(B007)的標(biāo) 識變量(301)是否為1,如果為1,則先計算元素(B007)所在的行號i和列號j,再計算二維 采樣點陣列(A002)中第i行、j列光源采樣點Sij在世界坐標(biāo)系下的坐標(biāo)Wij(BOOS),然后 按如下公式計算變換矩陣Tij
      0_
      UxUyUzVxVyV2NxNyNz000個分量,Vx
      ,其中Ux、Uv、Uz分別為歸一化的U方向向量
      0 0 1
      (B004)的三個分量,Vx、Vy、Vz分別為歸一化的N方向向量(B005)的三個分量,Nx, Ny, Nz分 別為歸一化的V方向向量(B006)的三個分量,最后將Tij賦值給元素(B007)的坐標(biāo)系變換 矩陣變量(303)。
      1 0 0 - Wm
      'Ja
      0 1 0 -Wliy 0 0 1- Wip 0 0 0 1
      9
      本方法的(030)部分,在光線跟蹤中利用本方法(010)部分計算出的深度圖 (A007)來加速繪制被面光源照射的3D虛擬場景,具體步驟如下步驟(S031)將掩模矩陣M(A003)及其各元素的深度圖指針變量(302)指向的所 有深度圖(A007)送入GPU計算集群(102)的Global Memory中;步驟(S032)按照正常的光線跟蹤流程,從虛擬相機視點發(fā)射穿過屏幕像素 (C001)的光線(C002),并判斷光線(C002)與3D虛擬場景的幾何面片(C003)是否相交,如 果相交,則計算出交點坐標(biāo)P (C004),并轉(zhuǎn)步驟(S033),否則屏幕像素(C001)的顏色設(shè)置為 背景色(C005),并結(jié)束對光線(C002)的跟蹤;步驟(S033)對掩模矩陣M(A003)中的每個元素(C006),判斷元素(C006)的標(biāo) 識變量(301)是否為1,如果為1,則首先將元素(C006)的坐標(biāo)系變換矩陣變量(303)賦 值給變量T(C007),再計算元素(C006)所在的行號i和列號j,然后讀取二維采樣點陣列 (A002)的第i行、j列光源采樣點Su(COOS),并計算光源采樣點Su(COOS)在世界坐標(biāo)系 下的坐標(biāo)Wij(COOg),最后將光源采樣點Sij(COOS)的行號i與列號j、交點坐標(biāo)P(C004)、坐 標(biāo)Wij(COOg)和變量T(C007)打包成一個結(jié)構(gòu)體變量(C010)送入GPU計算集群(102)的 Global Memory中;統(tǒng)計掩模矩陣M(A003)中標(biāo)識變量(301)為1的元素個數(shù)(COll),將元 素個數(shù)(COll)賦值給變量Ns;步驟(S034)利用CUDA API在GPU計算集群(102)上創(chuàng)建Ns個并行線程,各線程 分別從GPU計算集群(102)的Global Memory中讀取一個結(jié)構(gòu)體變量(C010),并行地做以 下計算 ①
      權(quán)利要求
      一種加速被面光源照射的3D虛擬場景的光線跟蹤的方法,其特征在于,所需的設(shè)備及實現(xiàn)步驟如下所需設(shè)備主機系統(tǒng)(101)和GPU計算集群(102);主機系統(tǒng)(101)包括CPU(103)、內(nèi)存(104)和磁盤(105);實現(xiàn)步驟本方法(010)部分,得到面光源照射到的幾何面片的深度數(shù)據(jù),具體步驟如下步驟(S011)將3D虛擬場景模型數(shù)據(jù)(A001)從磁盤(105)加載到內(nèi)存(104)中;步驟(S012)在CPU(103)上計算面光源輪廓線(201)的外切矩形(202);步驟(S013)在外切矩形(202)內(nèi)均勻地選取m行、n列光源采樣點,得到一個二維采樣點陣列(A002),將其存放在內(nèi)存(104)中;步驟(S014)在內(nèi)存(104)中創(chuàng)建一個m行、n列的掩模矩陣M(A003),掩模矩陣M(A003)中的各個元素與二維采樣點陣列(A002)中的各個光源采樣點一一對應(yīng);掩模矩陣M(A003)的每個元素包含一個標(biāo)識變量(301)(變量名為tag)、一個深度圖指針變量(302)(變量名為depthMapPtr)和一個坐標(biāo)系變換矩陣變量(303)(變量名為transformMatrix);將掩模矩陣M(A003)的每個元素包含的標(biāo)識變量(301)設(shè)置為0;步驟(S015)任意選取一個與面光源平面平行的向量作為U方向向量(A004);步驟(S016)把3D虛擬場景模型數(shù)據(jù)(A001)送入GPU計算集群(102)的Global Memory中;步驟(S017)對二維采樣點陣列(A002)中的每個光源采樣點Sij(下標(biāo)i為光源采樣點Sij在二維采樣點陣列(A002)中的行號,下標(biāo)j為光源采樣點Sij在二維采樣點陣列(A002)中的列號),判斷光源采樣點Sij是否在面光源輪廓線(201)之內(nèi),如果光源采樣點Sij在面光源輪廓線(201)之內(nèi),則第一,將掩模矩陣M(A003)的第i行、j列的元素的標(biāo)識變量(301)設(shè)置為1;第二,以光源采樣點Sij為虛擬相機視點,以面光源平面法向量為虛擬相機視軸正方向(面光源平面法向量與面光源的朝向相同),以U方向向量(A004)為虛擬相機向上方向向量,根據(jù)3D虛擬場景與面光源的位置關(guān)系設(shè)置合適的虛擬相機視場角(A005),根據(jù)3D虛擬場景的復(fù)雜程度設(shè)置合適的虛擬相機分辨率(A006),讀取存儲于GPU計算集群(102)的Global Memory中的3D虛擬場景模型數(shù)據(jù)(A001),調(diào)用光柵化圖形API在GPU計算集群(102)上繪制3D虛擬場景,記錄每個像素的深度值,從而得到以光源采樣點Sij為虛擬相機視點的深度圖(A007);第三,把深度圖(A007)傳回內(nèi)存(104),并將深度圖(A007)的內(nèi)存首地址賦值給掩模矩陣M(A003)的第i行、j列的元素的深度圖指針變量(302);本方法的(020)部分,根據(jù)二維采樣點陣列(A002)中的每個光源采樣點的位置及面光源平面法向量,計算從世界坐標(biāo)系到以各光源采樣點為原點的光源采樣點坐標(biāo)系(B001)的變換矩陣,具體步驟如下步驟(S021)選取面光源平面法向量作為N方向向量(B002),定義V方向向量(B003)為N方向向量(B002)與U方向向量(A004)的叉乘;步驟(S022)將U方向向量(A004)、N方向向量(B002)和V方向向量(B003)進行歸一化,得到歸一化的U方向向量(B004)、歸一化的N方向向量(B005)和歸一化的V方向向量(B006);步驟(S023)對于掩模矩陣M(A003)中的每個元素(B007),判斷元素(B007)的標(biāo)識變量(301)是否為1,如果為1,則先計算元素(B007)所在的行號i和列號j,再計算二維采樣點陣列(A002)中第i行、j列光源采樣點Sij在世界坐標(biāo)系下的坐標(biāo)Wij(B008),然后按如下公式計算變換矩陣Tij其中Ux、Uy、Uz分別為歸一化的U方向向量(B004)的三個分量,Vx、Vy、Vz分別為歸一化的N方向向量(B005)的三個分量,Nx、Ny、Nz分別為歸一化的V方向向量(B006)的三個分量,最后將Tij賦值給元素(B007)的坐標(biāo)系變換矩陣變量(303);本方法的(030)部分,在光線跟蹤中利用本方法(010)部分計算出的深度圖(A007)來加速繪制被面光源照射的3D虛擬場景,具體步驟如下步驟(S031)將掩模矩陣M(A003)及其各元素的深度圖指針變量(302)指向的所有深度圖(A007)送入GPU計算集群(102)的Global Memory中;步驟(S032)按照正常的光線跟蹤流程,從虛擬相機視點發(fā)射穿過屏幕像素(C001)的光線(C002),并判斷光線(C002)與3D虛擬場景的幾何面片(C003)是否相交,如果相交,則計算出交點坐標(biāo)P(C004),并轉(zhuǎn)步驟(S033),否則屏幕像素(C001)的顏色設(shè)置為背景色(C005),并結(jié)束對光線(C002)的跟蹤;步驟(S033)對掩模矩陣M(A003)中的每個元素(C006),判斷元索(C006)的標(biāo)識變量(301)是否為1,如果為1,則首先將元素(C006)的坐標(biāo)系變換矩陣變量(303)賦值給變量T(C007),再計算元素(C006)所在的行號i和列號j,然后讀取二維采樣點陣列(A002)的第i行、j列光源采樣點Sij(C008),并計算光源采樣點Sij(C008)在世界坐標(biāo)系下的坐標(biāo)Wij(C009),最后將光源采樣點Sij(C008)的行號i與列號j、交點坐標(biāo)P(C004)、坐標(biāo)Wij(C009)和變量T(C007)打包成一個結(jié)構(gòu)體變量(C010)送入GPU計算集群(102)的Global Memory中;統(tǒng)計掩模矩陣M(A003)中標(biāo)識變量(301)為1的元素個數(shù)(C011),將元素個數(shù)(C011)賦值給變量Ns;步驟(S034)在GPU計算集群(102)上創(chuàng)建Ns個并行線程,各線程分別從GPU計算集群(102)的Global Memory中讀取一個結(jié)構(gòu)體變量(C010),并行地做以下計算第一,其中Px、Py、Pz分別為存儲于結(jié)構(gòu)體變量(C010)中的交點坐標(biāo)P(C004)的x、y、z坐標(biāo)分量,T為存儲于結(jié)構(gòu)體變量(C010)中的變量T(C007);第二,其中d為步驟(S017)中調(diào)用光柵化圖形API在GPU計算集群(102)上繪制3D虛擬場景時的投影面到虛擬相機視點的距離;第三,其中θv為步驟(S017)中調(diào)用光柵化圖形API在GPU計算集群(102)上繪制3D虛擬場景時設(shè)置的虛擬相機視場角(A005),N1為步驟(S017)中調(diào)用光柵化圖形API在GPU計算集群(102)上繪制3D虛擬場景時設(shè)置的虛擬相機垂直分辨率,N2為步驟(S017)中調(diào)用光柵化圖形API在GPU計算集群(102)上繪制3D虛擬場景時設(shè)置的虛擬相機水平分辨率;第四,根據(jù)結(jié)構(gòu)體變量(C010)中保存的行號i與列號j,讀取存儲于GPU計算集群(102)的Global Memory中的掩模矩陣M(A003)的第i行、j列元素(C012)的深度圖指針變量(302)指向的深度圖的第l行、k列像素的深度值(C013);計算存儲于結(jié)構(gòu)體變量(C010)中的交點坐標(biāo)P(C004)與存儲于結(jié)構(gòu)體變量(C010)中的坐標(biāo)Wij(C009)之間的距離D(C014);如果深度值(C013)比距離D(C014)小,則表明存儲于結(jié)構(gòu)體變量(C010)中的交點坐標(biāo)P(C004)處的場景點(C015)不能直接被光源采樣點Sij照射,光源采樣點Sij對場景點(C015)的直接光照貢獻Ld(C016)為0,否則計算光源采樣點Sij對場景點(C015)的直接光照貢獻Ld(C016);最后將直接光照貢獻Ld(C016)傳回內(nèi)存(104);步驟(S035)在CPU(103)上將步驟(S034)中的各線程傳回內(nèi)存(104)的所有直接光照貢獻Ld(C016)相加,以得到面光源對交點坐標(biāo)P(C004)處的場景點的直接光照值;步驟(S036)按照正常的光線跟蹤流程遞歸地跟蹤交點坐標(biāo)P(C004)處的反射光線(或者折射光線),以便計算交點坐標(biāo)P(C004)處的場景點的間接光照值;在遞歸過程中,所有場景點處的直接光照值也按上述過程進行計算;最后根據(jù)交點坐標(biāo)P(C004)處的場景點的直接光照值、間接光照值以及材質(zhì)數(shù)據(jù)計算出屏幕像素(C001)的顏色。FSA00000327708300021.tif,FSA00000327708300031.tif,FSA00000327708300032.tif,FSA00000327708300033.tif
      全文摘要
      本發(fā)明公開一種加速被面光源照射的3D虛擬場景的光線跟蹤的方法,屬于真實感3D虛擬場景繪制技術(shù)領(lǐng)域。當(dāng)前常用蒙特卡洛光線跟蹤方法繪制被面光源照射的3D虛擬場景。由于蒙特卡洛光線跟蹤方法需要執(zhí)行大量的光源采樣點可見性計算,因此其計算效率不高。本發(fā)明通過一個預(yù)計算過程獲得面光源照射到的幾何面片的深度數(shù)據(jù),在光線跟蹤過程中利用這些深度數(shù)據(jù)直接計算每個場景點處的光源采樣點可見性,避免了可見性測試光線的創(chuàng)建、遍歷、求交測試等運算,提高了光線跟蹤效率。相對于蒙特卡洛光線跟蹤方法,本發(fā)明方法可使光線跟蹤的速度提高3~4倍。
      文檔編號G06T15/50GK101982838SQ20101052774
      公開日2011年3月2日 申請日期2010年11月2日 優(yōu)先權(quán)日2010年11月2日
      發(fā)明者丁瑩, 從立鋼, 馮欣, 底曉強, 張育力, 曲福恒, 權(quán)巍, 楊華民, 范靜濤, 陳占芳, 陳純毅, 韓成 申請人:長春理工大學(xué)
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1