基於物理的渲染-Specular IBL-PrefilteredEnvironmentMap

2021-02-08 內核觀察

官方網站:https://edu.battlefire.cn


簡介


我們先前已經實現了對漫反射部分的光線影響力做積分了,接下來我們要對鏡面反射部分進行積分,鏡面反射部分由於影響因子有兩個,一個是入射光線的角度,另一個是觀察視角,所以我們不能按照漫反射的那種做法來做。在這裡,我們依然不講解那些高端的原理,我們先講代碼怎麼碼,碼完代碼再去對照那些資料上的高端原理,我們先碼代碼看效果,show you the code。


參考資料不限於:

https://learnopengl.com/PBR/IBL/Specular-IBL


回顧漫反射


在介紹Diffuse Irradiance的時候,我們介紹了,為了對漫反射部分實現積分,我們把公式拆分成了這樣 


至於為什麼可以這麼做,這是Epic Game研究出來的一套被稱為Split Sum Approximation的理論,作為一個碼農,如果你想知道這些,我們後面再慢慢講,我們先把公式碼成代碼再說。


PrefilteredEnvironmentMap


對於左邊的這一坨,我們需要進行ImportanceSampling,也就是給一個pdf函數,並且這個pdf函數是一個變種pdf函數,它帶有一個偏移,也就是以這個偏移為基準,在此基礎上對隨機採樣。那麼我們究竟怎麼把公式碼成代碼呢?

我們知道,我們需要對環境中的光線進行採樣對吧,所以我們需要入射光線,反射光線,法線。在我們的的代碼裡,我們把法線、觀察視線、反射光線都幹成一條線,也就是你垂直盯著某個玩意看,ViewDir、Normal、ReflectDir都是一樣的。至於為什麼我們這麼幹,那就是背後的Epic Game大佬研究的理論基礎了,我們在生成這個PrefilteredEnvironmentMap的時候這麼幹就可以了。


然後此處為何引入蒙特卡洛的那個pdf函數呢?那是因為,首先我們的反射光線具備這樣的特性,根據模型表面的粗糙程度,它的反射範圍是呈現下面這樣一撮一撮的那幢狀態,所以只有在這個範圍內才會有反射光線,因此其他地方大概率沒有高光。


如果你依然不清楚這些,那也沒關係,你只要知道,由於我們使用了這招,所以我們不用像Diffuse Irradiance裡面那樣採用黎曼和的方式對整個半球進行積分,而是通過少數幾個隨機的向量來實現對鏡面反射光線的描述。我們根據粗糙程度,來生成不同mipmap level的PrefilteredEnvironmentMap,並在後續的PBR渲染中,使用粗糙程度去在這些mipmap level之間選擇合適的數據出來渲染模型。


如果我們結合蒙特卡洛的思想,如何去積分出這個PrefilteredEnvironmentMap呢?我們可以這麼做:

隨機出來一個vec2

結合roughness和vec2這個隨機數通過φ和θ的方式來求得一個笛卡爾坐標(x,y,z)

這個(x,y,z)就是我們的隨機向量了,然後我們通過normal來把它從tangent空間轉到世界坐標系裡去叫G

轉完後,我們用ViewDir對G求反射,也就是reflect(-ViewDir,G),這個結果記做LightDir

我們用這個LightDir去從CubeMap中取顏色,並用上pdf對它進行處理


同志們,這就出來了,隨機數有了、pdf有了,剩下的就是蒙特卡洛一頓操作了。哇咔咔。然後那個權重嘛(1/pdf),我們就用LightDir和normal的點積來表示。

採樣總次數嘛,咱們就可以隨便,用個1024或者2048都可以。總之次數越多,數據越精確。最後還有一個在glsl中生成隨機數的函數怎麼辦呢?這個也有成熟的算法,比如Hammersley Sequence隨機算法。好了,現在所有的知識點都對上號了,上代碼:

上效果圖:

roughness分別是:0.0、0.25、0.5、0.75、1.0


完結、撒花,下一篇我們看看LUT怎麼弄





相關焦點

  • 基於物理的渲染-Specular IBL-LUT Texture
    當我們真正的實時渲染的時候,我們只需要計算出  ,並把roughness當成是紋理坐標的y分量,我們就可以從LUT紋理上取出對應的這個公式積分的部分,然後結合上面的PrefilteredEnvironmentMap,就可以用廉價的方式更逼真的實現PBS或者PBR渲染了
  • 基於物理渲染(PBR)的基礎理論
    也被叫做diffuse和specular。是描述光和物體表面互相作用的最基礎的兩個術語。很多人知道他們在實際應用中是怎麼樣的。但並不知道他們的物理原理是什麼。當光照射到物體的表面時,他會反射一部分,或者說反彈一部分。從表面的一邊反彈到鏡像的另一邊。就像一個球打在地面上並彈起來一樣。在光滑的表面上,會有像鏡子一樣的效果。單詞specular,就是用來描述這種現象的。
  • PBR渲染入門系列(三)材質物理現象解析
    一、基礎物理知識在了解材質的各中屬性之前,我們需要一些基礎理論:(1)我們是如何看到物體的這個想必大家都清楚,畢竟小學就學過的物理常識。光從光源發出,到達物體表面發生一系列的反應,最後到達了我們的眼睛,我們的眼睛和大腦對入射的光進行處理與判定,最終得到一個物體的形象,在CGI中,這個眼睛便是攝像機。
  • 遊戲引擎中的渲染管線
    這篇文章不打算綜述完整的渲染流程,對這個部分比較感興趣的同學,可以看看這兩篇文章[1][2]分別介紹了時下流行的Unity和UE的渲染管線,還有這兩篇文章講述GTA V[3]和巫師3[4]的幀分析。總體來說渲染管線的組成大同小異,本文主要關注直接照明部分的管線差異。一幀由哪些渲染流程組成?
  • Lumion 9 防禿極速渲染指南
    方案設計需要好的效果表達今天為大家帶來的是 Lumion 9 建築外景渲染教程 ▼3.預渲染一張小圖看大致構圖效果。Lumion預覽效果和實際渲染效果是有區別的,為了達到理想的效果,在調整過程中會多次輸出小圖。
  • unity|specular年終結
    上一次的分享有說到,specular的算法主要有三步:首先得到平面上點的法向量N;然後根據光源的方向求得反射光R;最後根據R求得反射光與人眼的夾角θ,θ越小說明人眼與反射光越接近,等到θ等於0的時候,就可以最大化的看到反射光。
  • 《GPU Gems 3》:真實感皮膚渲染技術總結
    在這種複雜性下對散射進行模擬可能是過度和沒有必要的,但是真實的渲染需要在油質層下面建模至少兩個不同的層,因為至少有一個層要用於鏡面反射(specular)項。Donner和Jensen[Donner and Jensen 2005]在2005年證明了單層模型不足以對真實感皮膚進行渲染,並展示了使用三層建模的改進方案。
  • 物理真實渲染的理論基礎知識
    (基於物理的渲染,簡稱PBR)物理忠實呈現-它在實時渲染一個有趣的趨勢。
  • 在 Unity 中實現體積光渲染
    基於物理的 phase function 根據介質中微粒與入射光線波長的相對大小 而對於一些大氣中的雲霧、煙霧,其內部各處的 σt 是不均等的,我們可以利用一個 3D Texture 儲存和表示一個非均勻介質中各處的 σt,也可以基於解析函數實時計算,例如 3D Perlin Noise。Ray-marching在實時渲染中,通常採用 ray-marching 的方式實現介質中散射光的渲染。
  • Environment Blending - UE4 Shaders - Episode 6
    In this episode, we create a shader that allows you to apply environment materials, like snow, sand, and moss to
  • 3dmax效果圖渲染,用VR渲染好還是用CR渲染好?
    基於V-Ray 內核開發的有VRay for 3ds max、Maya、Sketchup、Rhino等諸多版本,為不同領域的優秀3D建模軟體提供了高質量的圖片和動畫渲染。方便使用者渲染各種圖片。5、支持散焦特效的渲染、運動模糊效果的渲染。通過較少的參數控制渲染最終質量。然後,什麼又是Corona Render?Corona Renderer(以下簡稱CR)是一款新的、高性能、無偏差、照片級物理渲染器。
  • 渲染教程:製作3DMax景深效果「著色渲染」
    著色,百萬設計師的首選雲渲染平臺。景深是一個很酷的效果,他可以讓你的視覺焦點集中在關鍵點上,通過模糊背景的方式,營造出空間感、氛圍感。使用3DMax製作景深效果,有三個關鍵因素,如下所示。我將分享景深近程和遠程教程,希望你能有所收穫!
  • 渲染思路做圖像分割:何愷明等人提出PointRend
    引言圖像分割任務涉及到了將從規則的網格中採樣的像素映射到同一網格上的(一個或一組)標籤圖(label map)。對於語義分割任務來說,標籤圖表示對每個像素的預測類別。而在實例分割任務中,每個被檢測對象需要預測二元前景背景圖。這些任務所使用的方法基本上都是基於卷積神經網絡(CNN)構建的。
  • 三星Galaxy A71基於的渲染技巧四後置攝像頭,主要規格也曝光
    根據據稱基於Galaxy A71洩漏的渲染,該手機將配備四後置攝像頭設置和中央定位的打孔器,非常類似於旗艦版Galaxy Note 10二重奏。此外,Galaxy A71可以包裝4,500mAh電池。涉嫌基於Galaxy A71洩漏的渲染(由 CashKaro與@OnLeaks合作提供)顯示,手機在背面裝有四方後置攝像頭設置。