多光源下的全局光照繪制方法及裝置的制造方法
【技術領域】
[0001] 本發明涉及光照繪制領域,尤其涉及一種多光源下的全局光照繪制方法及裝置。
【背景技術】
[0002] 全局光照是常用的渲染技術,用于生成軟影、間接折射等光照效果,以加強渲染效 果的真實感。基于大量點光源(Many Point Lights)的方法是生成全局光照效果的技術之 一,其原理是在場景中生成大量虛擬點光源(Virtual Point Light, VPL),通過分別計算各 視角采樣點(Sample)被這些虛擬點光源照亮的程度,來獲得全局光照效果。Wald等人發明 了基于大量點光源框架的光割(Lightcuts)方法,根據虛擬點光源建立層次結構樹并使用 層次結構樹的一個割集代表所有虛擬點光源,以減少運算量和加快運算速度。隨著光割方 法的不斷完善,大量點光源框架在實現全局光照方法中效率較高。但是由于現有的光割技 術是一種全局方法,需要把所有點光源構建起統一的光樹,并在上面進行光割的選取。在求 取光割的過程中,每次計算割中節點的誤差,還需要使用全局的幾何數據進行求交運算。當 進行大規模、高精度的場景繪制時,大量的虛擬點光源及幾何數據都有可能超過了內存或 者顯存的限制,因而無法應用于外存(Out-of-core)復雜場景的繪制,無法構建全局的光 樹,以及進行全局求交運算。
【發明內容】
[0003] 摶術問是頁
[0004] 有鑒于此,本發明要解決的技術問題是,如何對包含若干個物體的大規模的場景 進行全局光照繪制。
[0005] 解決方案
[0006] 為了解決上述技術問題,根據本發明的一實施例,第一方面,提供了一種多光源下 的全局光照繪制方法,用于對包含若干個物體的場景進行全局光照繪制,所述物體由幾何 面片來描述,所述方法由具有內存并耦接至外存的系統來執行,所述方法包括:
[0007] 對所述場景中的幾何面片和虛擬點光源分別基于位置信息進行處理,得到第一數 量的幾何塊以及第二數量的光源塊;
[0008] 以所述場景中的所有采樣點為行坐標,以所有虛擬點光源為列坐標建立光傳遞矩 陣;
[0009] 將所述光傳遞矩陣劃分為所述第二數量的列,每一列對應一個所述光源塊,將所 述光傳遞矩陣劃分為第三數量的行,每一行與每一列相交構成為一個子矩陣,所述第三數 量為所述采樣點的聚類數量;
[0010] 將所述子矩陣和幾何塊從所述外存調入到所述內存中,根據所述虛擬點光源的材 質屬性、衰減屬性、可見性以及光強度,計算對應子矩陣中的虛擬點光源對采樣點的亮度貢 獻值;
[0011] 將可見性為可見的所述虛擬點光源對采樣點的亮度貢獻值累加到對應的采樣點 上,并輸出所述采樣點的總亮度。
[0012] 結合第一方面,在第一種可能的實現方式中,所述對所述場景中的幾何面片和虛 擬點光源分別基于位置信息進行處理,得到第一數量的幾何塊以及第二數量的光源塊,包 括:
[0013] 分別計算所述幾何面片的重心和所述虛擬點光源的重心在X軸、y軸和Z軸上的 位置碼,所述幾何面片的重心構成所述幾何面片的位置信息,所述虛擬點光源的重心構成 所述虛擬點光源的位置信息;
[0014] 根據所述幾何面片重心的位置碼計算第一莫頓碼,根據所述虛擬點光源重心的位 置碼計算第二莫頓碼;
[0015] 根據所述第一莫頓碼對所述幾何面片進行排序和劃分,得到第一順序和第一數量 的幾何塊,根據所述第二莫頓碼對所述虛擬點光源進行排序和劃分,得到第二順序和第二 數量的光源塊。
[0016] 結合第一方面,在第二種可能的實現方式中,所述將所述光傳遞矩陣劃分為所述 第二數量的列,每一列對應一個所述光源塊,將所述光傳遞矩陣劃分為第三數量的行,每一 行與每一列相交構成為一個子矩陣之后,還包括:
[0017] 將所述子矩陣中的所有所述虛擬點光源和采樣點的連線包含在第一空間包圍盒 中,每一個子矩陣對應一個第一空間包圍盒,
[0018] 其中,所述第一空間包圍盒包括兩個球體及連接所述兩個球體的側面,一個球體 為包含所述子矩陣中所有采樣點的最小球體,另一個球體為包含所述子矩陣中所有虛擬點 光源的最小球體,通過在所述兩個球體上分別截取過球心并與所述兩個球體的球心連線垂 直的切面,將所得到的兩個切面與所述兩個球體相交的邊分別連接構成所述側面。
[0019] 結合第一方面的第二種可能的實現方式,在第三種可能的實現方式中,所述將所 述光傳遞矩陣劃分為所述第二數量的列,每一列對應一個所述光源塊,將所述光傳遞矩陣 劃分為第三數量的行,每一行與每一列相交構成為一個子矩陣之后,還包括:
[0020] 將所述幾何塊的所有幾何面片包含在第二空間包圍盒中,每一個幾何塊對應一個 第二空間包圍盒,
[0021] 其中,所述第二空間包圍盒由包含所述幾何塊中所有幾何面片的最小軸對齊長方 體構成。
[0022] 結合第一方面的第三種可能的實現方式,在第四種可能的實現方式中,所述將所 述子矩陣和幾何塊從所述外存調入到所述內存中之前,還包括:
[0023] 判斷所述第一空間包圍盒的中軸到所述第二空間包圍盒的最短距離是否不大于 所述第一空間包圍盒中較大球體的半徑,是則判斷為對應的子矩陣和幾何塊需要進行可見 性測試,否則判斷為對應的子矩陣和幾何塊不需要進行可見性測試,并將所述子矩陣中的 虛擬點光源標記為對采樣點可見。
[0024] 結合第一方面的第四種可能的實現方式,在第五種可能的實現方式中,所述將所 述子矩陣和幾何塊從所述外存調入到所述內存中,根據所述虛擬點光源的材質屬性、衰減 屬性、可見性以及光強度,計算對應子矩陣中的虛擬點光源對采樣點的亮度貢獻值,包括:
[0025] 將判斷為需要進行可見性測試的子矩陣及幾何塊從所述外存調入到所述內存 中;
[0026] 對調入的所述子矩陣和幾何塊進行可見性測試;
[0027] 根據所述子矩陣中虛擬點光源的材質屬性、衰減屬性、可見性以及光強度,計算所 述子矩陣中可見性為可見的虛擬點光源對采樣點亮度貢獻值,所述可見性為可見的虛擬點 光源包括所述可見性測試的結果為可見的虛擬點光源以及所述標記為可見的虛擬點光源。
[0028] 結合第一方面的第五種可能的實現方式,在第六種可能的實現方式中,所述對調 入的所述子矩陣和幾何塊進行可見性測試,包括:
[0029] 對于所述子矩陣中的每條虛擬點光源和采樣點的連線,分別與所述幾何塊中的幾 何面片進行求交運算,如果運算結果為相交,則判斷為所述虛擬點光源對采樣點不可見;如 果運算結果為不相交,則判斷為所述虛擬點光源對采樣點可見。
[0030] 結合第一方面的第五種可能的實現方式,在第七種可能的實現方式中,所述將所 述子矩陣和幾何塊從所述外存調入到所述內存中,包括:
[0031] 根據所述幾何塊的所述第一順序,將判斷為需要進行可見性測試的子矩陣對應的 幾何塊從所述外存調入到所述內存中。
[0032] 結合第一方面的第五種可能的實現方式,在第八種可能的實現方式中,所述將所 述子矩陣和幾何塊從所述外存調入到所述內存中,包括:
[0033] 將所有子矩陣分別與對應的需要進行可見性測試的幾何塊組合為節點,以由一個 節點到另一個節點需要進行的數據讀寫量作為連接所述兩個節點的邊的權值,將所有節點 連接構成一張圖,計算能夠遍歷所述圖中所有節點,并且所述遍歷所通過的邊的總權值最 小的路徑,選擇所述路徑,并根據所述路徑上各節點的遍歷順序將對應的子矩陣及幾何塊 從所述外存調入到所述內存中。
[0034] 為了解決上述技術問題,根據本發明的另一實施例,第二方面,提供了一種多光源 下的全局光照繪制裝置,用于對包含若干個物體的場景進行全局光照繪制,所述物體由幾 何面片來描述,所述方法由具有內存并耦接至外存的系統來執行,所述裝置包括:
[0035] 塊處理模塊,用于對所述場景中的幾何面片和虛擬點光源分別基于位置信息進行 處理,得到第一數量的幾何塊以及第二數量的光源塊;
[0036] 光傳遞矩陣建立模塊,用于以所述場景中的所有采樣點為行坐標,以所有虛擬點 光源為列坐標建立光傳遞矩陣;
[0037] 子矩陣劃分模塊,用于并將所述光傳遞矩陣劃分為所述第二數量的列,每一列對 應一個所述光源塊,將所述光傳遞矩陣劃分為第三數量的行,每一行與每一列相交構成為 一個子矩陣,所述第三數量為所述采樣點的聚類數量;
[0038] 亮度貢獻值計算模塊,用于將所述子矩陣和幾何塊從所述外存調入到所述內存 中,根據所述虛擬點光源的材質屬性、衰減屬性、可見性以及光強度,計算對應子矩陣中的 虛擬點光源對采樣點的亮度貢獻值;
[0039] 輸出模塊,將可見性為可見的所述虛擬點光源對采樣點的亮度貢獻值累加到對應 的采樣點上,并輸出所述采樣點的總亮度。
[0040] 結合第二方面,在第一種可能的實現方式中,所述塊處理模塊被配置為:
[0041] 分別計算所述幾何面片的重心和所述虛擬點光源的重心在X軸、y軸和Z軸上的 位置碼,所述幾何面片的重心構成所述幾何面片的位置信息,所述虛擬點光源的重心構成 所述虛擬點光源的位置信息;
[0042] 根據所述幾何面片重心的位置碼計算第一莫頓碼,根據所述虛擬點光源重心的位 置碼計算第二莫頓碼;
[0043] 根據所述第一莫頓碼對所述幾何面片進行排序和劃分,得到第一順序和第一數量 的幾何塊,根據所述第二莫頓碼對所述虛擬點光源進行排序和劃分,得到第二順序和第二 數量的光源塊。
[0044] 結合第二方面,在第二種可能的實現方式中,還包括:
[0045] 空間包圍盒建立模塊,用于建立第一空間包圍盒,將所述子矩陣中的所有所述虛 擬點光源和采樣點的連線包含在第一空間包圍盒中,每一個子矩陣對應一個第一空間包圍 盒,
[0046] 其中,所述第一空間包圍盒包括兩個球體及連接所述兩個球體的側面,一個球體 為包含所述子矩陣中所有采樣點的最小球體,另一個球體為包含所述子矩陣中所有虛擬點 光源的最小球體,通過在所述兩個球體上分別截取過球心并與所述兩個球體