用于mic架構協處理器的光子映射并行方法
【技術領域】
[0001]本發明涉及真實感渲染和高性能領域,具體涉及一種用于MIC架構協處理器的光子映射并行方法。
【背景技術】
[0002]真實感渲染是影視動漫制作領域最核心的技術也是最耗時的階段,真是感渲染技術的加入可以增加三維動漫作品的真實性,同時也帶了時間和內存的消耗。真實感渲染技術的實現依賴的是全局光照算法,很多全局光照算法不斷提出,比如基于蒙特卡洛光線跟蹤的各種算法、輻射度算法、光子映射算法和基于點的渲染技術。但是全局光照算法耗時是普遍問題,和高性能領域結合,采用SIMD(單指令多數據)并行化和從核加速的思想是目前提高密集計算效率的有效方案。
[0003]2012 年底,Intel 公司推出了基于 MIC架構(Intel Many Integrated Core 架構)的至強融核協處理。這個產品有超過50個核以上的x86架構的核心,用于解決高度并行計算問題,由于MIC的基本指令集與CPU—樣使MIC架構從核加速更為靈活。Carsten Benthin等人提出一種使用MIC架構協處理器的并行光線追蹤算法,該方法使用offload模式(卸載模式),將光線追蹤中光線和場景樹求交的運算加載到MIC上并行計算60條光線和場景樹求交,并使用四叉樹結構利用MIC的516位的向量計算單元一次性計算一條光線和樹中的4個兄弟節點的求交結果。
[0004]光子映射算法是一種擴展光線跟蹤的全局光照算法。光子映射算法可以直接渲染焦散和色溢,相對于光線追蹤算法,光子映射可以更加便捷地實現全局光照效果。光線追蹤算法從攝像機向屏幕空間發射主光線,并在場景空間遞歸地跟蹤光線,在交點處計算光照,陰影和顏色,信息返回屏幕形成最終圖像。在光子映射算法中,在計算交點的光照時,改變計算方法,使用預渲染一遍保存的光子圖來收集照射信息。光子圖是第一次渲染階段通過從光源處向場景中發射光子并追蹤保存得到的光照緩存數據。在渲染階段,找到距離光線最近的交點,即渲染點最近鄰的K(K ^ I)個光子,累加光子能量估計光源的照射效果。
[0005]中國專利(申請號:CN 201010138101,專利名稱:一種基于光子映射的全局光照方法)中提出了一種將光子映射和光線追蹤結合的方法。為保證精度,需要大量的光子發射和高分辨率,這些會造成光子圖過來和渲染點過多,在光子跟蹤階段和渲染階段都是非常耗時的計算。
[0006]中國專利(申請號:CN 201410341679,專利名稱:一種基于OpenCL的并行化漸進式光子映射方法和裝置)中提出了一種并行化漸進式光子映射的方法。基于OpenCL對視點光線跟蹤、光子跟蹤和場景渲染進行并行化,把工作負載合理設計在對應的處理器上。該方法將任務劃分并行化,并沒有針對光子映射算法的特征做并行改變。
【發明內容】
[0007]針對真實感渲染中光子映射算法計算耗時的問題,本發明提供了一種能夠處理全局光照且并行加速靈活地用于MIC架構協處理器的光子映射并行方法。
[0008]為了實現上述目的,本發明采用以下技術方案:
[0009]一種用于MIC架構協處理器的光子映射并行方法,包括以下步驟:
[0010]步驟(I):開始光子跟蹤階段
[0011]上傳場景數據至MIC架構協處理器端;從光源發射光子,將光子分為多束光子線處理;其中,每束光子線包括若干條光子光線;
[0012]步驟⑵:光子光線求交階段
[0013]每一個線程每次處理一條光線進行求交計算,返回光線交點信息;
[0014]步驟⑶:光子圖生成階段
[0015]根據光線交點信息執行不同的光子碰撞行為,保存碰撞的光子至光子圖,直至追蹤完成所有的光子線束,生成完整的光子圖;
[0016]步驟⑷:開始渲染階段
[0017]上傳光子圖至MIC架構協處理器端,組織若干組渲染點,將每一組的渲染點進行層次聚類;
[0018]步驟(5):最近鄰光子搜索階段
[0019]上傳聚類完畢的渲染點,每一個線程每次處理一個渲染點類,并行計算渲染點類中每個渲染點的最近鄰光子,并求每個渲染點的出射輻射度;
[0020]步驟(6):圖像生成階段
[0021]計算渲染點的顏色,并把每一組渲染點的顏色返回屏幕空間形成最終圖像。
[0022]所述步驟(I)中開始光子跟蹤階段,包括:
[0023]步驟(1.1):將每個線程共享的場景數據上傳給MIC端;
[0024]步驟(1.2):中央處理器CPU端組織光源發射光子,每次綁定一束光子線上傳MIC端計算。
[0025]所述步驟(2)中光子光線求交階段,包括:
[0026]步驟(2.1):選擇一束光子光線數據上傳至MIC架構協處理器端,每一個線程每次處理一條光線,采用動態分配策略為每個線程動態分配處理的光線;
[0027]步驟(2.2):每條光子光線并行求交。
[0028]所述光子光線并行求交的具體過程為:
[0029]求交時組織4叉場景樹的當前要計算的一個層次上的4個兄弟節點的位置向量到一個16位向量寄存器中,把16個浮點數寬度的向量計算單元看成四個模塊,每個模塊存儲場景樹四個孩子中的一個分支,把光線的位置信息復制4份填充16位向量,一次判斷同一層上的4個兄弟節點是否相交。
[0030]所述步驟(3)中光子圖生成階段,包括如下步驟:
[0031]步驟(3.1):MIC架構協處理器將計算的光線交點信息傳遞給CPU ;
[0032]步驟(3.2):CPU根據交點執行不同的光子碰撞行為,重新綁定為一束光子上傳MIC端計算,直到達到最大追蹤深度;
[0033]步驟(3.3):CPU處理全部的光子線束,完成在場景中的傳遞運算,輸出一個緩存的光子圖文件。
[0034]所述步驟(4)中開始渲染階段,包括如下步驟:
[0035]步驟(4.1):將光子圖上傳至MIC端的共享內存中,為每個渲染點類在MIC上遍歷光子圖開辟緩存空間;
[0036]步驟(4.2):按屏幕空間的劃分組織一個grid的渲染點,將渲染點按照的位置和法向的相近關系進行層次聚類。
[0037]所述步驟(4.2)中描述的層次聚類方法為:
[0038]先將每個點看作一類,再將相近的兩個類兩兩聚為一類,然后按照相同的預設規則再次聚類,直到每個類達到預設要求。
[0039]所述步驟(5)中最近鄰光子搜索階段,包括如下步驟:
[0040]步驟(5.1):將聚類好的渲染點信息上傳至MIC架構協處理器端內存,MIC架構協處理器端的一個線程負責一個渲染點類,并行地計算每個渲染點類;
[0041]步驟(5.2):計算每個渲染點的中心點,按照渲染點類的半徑和中心點查找半徑的加和來查找這個范圍內的最近鄰的光子集合;最近鄰的光子集合中包含了渲染點類的每個渲染點周圍的K個最近鄰光子,其中,K多I ;
[0042]步驟(5.3):遍歷最近鄰的光子集合,選取渲染點類的每個渲染點的最近鄰的K個光子,并求每個渲染點的出射輻射度。
[0043]所述步驟(5.3)中選取每個渲染點的最近鄰的K個光子的具體過程為:
[0044]首先,每次取一個渲染點類的16個渲染點,并將這16個渲染點的位置法向組織成16位向量表不,每一位代表一個植染點;再將一個光子的信息復制16份擴展成一個16位向量;最后,將計算的渲染點和光子的距離組織成一個二維的直方圖來選取出每個渲染點距離它第K遠的光子的距離;
[0045]比較渲染點類的每個渲染點分布的第K遠光子的距離,使用向量計算的方式選取每個植染點的分布的K個最近鄰光子。
[0046]所述二維的直方圖形成的具體過程為:
[0047]將每個渲染點與其計算出的最遠光子的距離劃分為若干等份,形成一個二維的距離數組;二維直方圖統計的是每個與渲染點距離小于所述距離劃分范圍的光子的數目,所述二維直方圖的一個維度是距離的劃分,另一個維度是16個不同的渲染點;
[0048]將與每個渲染點距離第K遠的光子所在的距離劃分范圍選取出來,再次劃分這16個距離范圍形成新的直方圖的范圍劃分,如此迭代形成二維直方圖,選出渲染點類中的每個渲染點與其距離第K遠的光子的距離。
[0049]本發明的有益效果為:
[0050](I)本發明提出了一種用于MIC架構協處理器的光子映射并行方法,是光子映射方法在MIC架構協處理器上的首次實現,MIC架構協處理器由于采用X86架構,有較大的共享內存和操作系統調度,能夠處理全局光照且并行加速更加靈活。
[0051](2)本發明在光子追蹤階段和光子搜索階段都利用了單指令多數據向量計算單元,一次可以處理16個光子或渲染點,使單指令多數據向量計算單元的利用更加合理。
[0052](3)本發明采用了 CPU和MIC的主從架構,在MIC端和CPU端使用多線程并行,并使用單指令多數據向量計算,這種多層次的并行相對于CPU原生模式快8-12倍。
[0053](4)本發明針對光子映射中的各個步驟的特點,使用不同的并行策略來實現在MIC架構協處理器上的并行,使本發明中的光子映射并行方法可以完全應用MIC架構協處理器的計算能力,用于提高光子光線求交階段和光子搜索階段的速度。
【附圖說明】
[0054]圖1為用于MIC架構協處理器的光子映射并行方法的總體流程圖;
[0055]圖2a)為四叉場景樹樹的組織模式示意圖;
[0056]圖2b)為四叉場景樹樹的中渲染點的組織位置示意圖。
【具體實施方式】
[0057]下面結合附圖與實施例對本發明做進一步說明:
[0058]MIC架構協處理器被布置在裝有Intel至強處理器的服務器上,服務器硬件具體為:CPU:1ntel Xeon E5-2609 (2.4GHz/8core)和 MIC:1ntel Xeon Phi MICSC7110P(1.lGHz/61core)。
[0059]運行實例時,將渲染引擎和測試實例布置在服務器上,make命令編譯好程序后,使用rndr命令提交渲染任務,渲染準備好的場景文件。場景文件分為兩部分,第一部分用于指導光子的發射,生成光子圖,第二部分用于指導渲染生成最終圖片。此實例中,選取的最近距離光子的搜索數目設為300
[0060]用于MIC架構協處理器的光子映射并行方法,具體步驟如下: