GPU加速Diffuse Cube Map計算

來源:互聯網
上載者:User
GPU加速Diffuse Cube Map計算

Diffuse Cube Map

對於頂點x,我們知道由x反射向ω方向的光亮度

Lo(ω)=∫brdf*Li(ω1)*vis(ω1)*max(0,dot(dω1,N))*dω1

這裡brdf是x點的雙向反射分布函數,Li(ω1)是由ω1方向照射到x的光亮度,vis(ω1)是x點朝ω1方向的可視情況, N是x頂點的法線。

由於這個積分運算式比較複雜,精確的計算相當耗時,我們在使用的時候需要作相應的簡化。首先我們假設我們計算的所有表面都是存Diffuse的,這樣對於brdf我們可以簡單使用ρ/pi,於是上面的計算公式簡化成為

Lo(ω)=(ρ/pi)*∫Li(ω1)*vis(ω1)*max(0,dot(dω1,N))*dω1

接下來我們假設對於任意頂點x來說所有方向的vis都是一致的,也就是和方向無關,那麼我們又能把vis提出積分號

Lo(ω)=(ρ/pi)* vis*∫Li(ω1)*max(0,dot(dω1,N))*dω1

我們看到經過這樣簡化後的運算式對於每個不同的頂點來說只是和頂點的法線N相關了,於是我們可以預計算( ρ/pi)*∫Li(ω1)*max(0,dot(dω1,N))*dω1,儲存在一個Cube Map中,渲染的時候我們使用發現N來索引我們預計算的光照亮度值。最後使用這個光照亮度值乘上我們頂點儲存的vis就能得到我們最後的光照亮度值。

GPU加速Diffuse Cube Map計算

我們在使用CPU預計算(ρ/pi)*∫Li(ω1)*max(0,dot(dω1,N))*dω1的時候採用了蒙特卡羅積分法計算,具體的步驟是

1 產生N個採樣光線,計算每個採樣光線和光照環境Cube Map的交點,得到每條光線的亮度值。

2 對於每個我們需要計算的法線,我們計算出

L(ω)=(ρ/pi)*((4*pi)/N)*∑(Li(ω1)*max(0,dot(dω1,N)))

3 將我們計算出來到亮度值儲存在相應的法線所索引的Diffuse Cube Map的圖素。

我們現在可以使用GPU來加速我們的計算

1 首先還是一樣我們採樣N條光線,其次我們建立兩張FP16/32格式的Texture(能容納N個圖素),設定成我們的渲染對象(使用MRT).接著我們建立出N個point,每個point的法線就是所對應的光線的方向。我們將我們的光照環境Cube Map作為Texture設定好。我們渲染這N個point(保證每個point可以對應螢幕上的一個像素)。在ps中我們使用法線來索引我們設定好的Texture,儲存在C0,將法線儲存在C1。這樣渲染完成後我們開始建立的兩張Texture,其中一張中的每個圖素對應著相應的採樣光線的亮度值Li(ω1),而另一張則儲存了向對應的採樣光線的方向ω1。

2 對於每個我們需要計算出的法線方向(對應於Diffuse Cube Map的每個圖素),我們設定出一個point,它的位置對應於Diffuse Cube Map中的相應的Surface中的圖素的位置,法線就是我們需要計算的法線N也就是從原點到設定的Diffuse Cube Map中的相應的圖素的位置).

3 我們將上面第二步得到的每個point來求亮度值。我們建立一系列類似MipMap的FP16/32格式的Texture,其中最大的一張和我們第一步建立的Texture一樣的大小,首先將最大的一張設定成我們的渲染對象。我們設定好我們第一步得到的兩張貼圖,將我們的我們的point的法線設定到常量寄存器。在ps中,我們對於每個象素計算Li(ω1)*max(0,dot(dω1,N)),然後我們使用Down Sample的方法最終求出(ρ/pi)*((4*pi)/N)*∑(Li(ω1)*max(0,dot(dω1,N)))也就是對應於 1X1的Texture中的圖素。讀取出來儲存在對應的point的顏色屬性中。

4 我們再得到了每個法線方向所對應的亮度值後,最後需要儲存在Diffuse Cube Map中,我們將我們第2步的所有的point分成6份,一份對應Diffuse Cube Map中的一個Surface。這樣我們只需要渲染我們的point的顏色到我們的Diffuse Cube Map的Surface中就完成了我們的計算。

注 :在我們的計算中需要考慮HDR的因素。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.