物理材質與光線追蹤的關係?
問一下各位大佬,我們常說的物理材質與光線追蹤有什麼關係,是說物理材質就一定使用光線追蹤演算法來實現的嗎,我有個同事說沒有光線追蹤就不是物理材質,這種說法是對的嗎?
這兩個概念沒有直接的相關性!
在圖形渲染中,如果架構抽象的比較好的,我們可以將整個渲染流程劃分為三個相對比較獨立的部分:
- 光源(lighting):主要是光源的表述,例如是點光源還是面積等光源,使用輻射強度還是直接使用輻射亮度來表述光源發出的光。
- 光照傳輸(Integrating,或light transport):就是光在場景中是怎麼傳輸的,例如離線渲染中的光線追蹤演算法,它能模擬比較真實的光子傳輸行為,就是說能覆蓋全部光子傳輸路徑(或空間),但是在實時渲染中使用的一些近似方法也是表述光照傳輸的,雖然它可能省略掉了一些不重要的路徑,但是這仍然是一種光照傳輸演算法。光柵化的整個過程也是模擬了直接光照的傳輸。
- 著色(shading):就是光與表面相交時發生的光學交互,比如反射和折射等。
例如從以下RenderMan的文檔中就可以看出這個架構:
由此可以看出,光照傳輸和著色計算是相對比較獨立的,這裡光照傳輸可以對應你所說的「光線追蹤」演算法,而著色計算則對應你所說的「物理材質」。
那麼物理材質是指什麼,「材質」其實就是光在與某個特定表面交互時需要的所有光學交互的參數,例如法線,紋理,或者你說的BRDF,也就是說,材質定義了最終表面接受光照後的視覺特徵。對於物體表面視覺特徵的定義,根據尺寸粒度可以劃分為三級:
- 基於網格頂點的表述,這種就是只對網格頂點的著色進行描述,然後中間的表面像素則通過插值來計算。
- 基於像素點的紋理貼圖,這就是最常見的各種貼圖,它們能表述像素級別的視覺特徵。
- 基於微觀粒子的微面元表述。
上述前兩種視覺表述是比較常見的,也是早期使用的一些技術。然而這兩種表述遠遠不能描述物體表面的視覺特徵,這是因為一個像素的尺寸遠遠大於物體表面上微觀粒子的尺寸,而光實際上是作用在這些微觀粒子上的,所以你可以看到早期的一些圖形渲染結果表面會比較光滑那種,反應不出真實物體表面的微觀細節,所以這些技術都可以稱為不是基於物理的材質。
然而,要怎麼表述這麼微小的微觀粒子的行為呢?顯然我們不可能像紋理那樣對每個微觀粒子使用一個紋素進行表述,那樣我們的計算機的內容將遠遠不夠存儲這種級別的紋理,所以人們提出了Microfacet BRDF理論,它使用一個法線概率分布函數,來模擬微觀粒子的法線分布特徵,這樣就能夠表述物體表面的微觀特徵,從而接近物理真實,所以稱為基於物理的材質表述。
那頂點和像素級別的紋理可以存儲在一張紋理圖片中,這種表述怎麼存儲呢?前面已經說過這個級別的表述是無法精確定義和存儲的,所以我們將這個概率密度分布直接寫進shader中,因為shader也是材質的一部分。
從上可知,不管你使不使用光線追蹤,都可以使用物理材質,這就是為什麼離線渲染和實時渲染都可以使用基於物理的材質,因為它只涉及光與表面的交互,與光的傳輸過程無關。
這也是為什麼近幾年實時渲染的遊戲品質有了很大提升,實時渲染與離線渲染的最大不同在於光照的傳輸過程,實時渲染省略或者近似了很多路徑,但是在光與表面的交互上,它只涉及一個公式的計算,並不會對性能造成太大影響,所以可以很容易地集成進來。不過實踐中,實時渲染使用的概率密度分布函數要比影視中使用的計算量要簡單一些,這只是在質量上稍有差異,但是不影響它表述微觀粒子視覺特徵的能力。
最近我參與《硬影像》播客錄製了一起節目,裡面有關於光線追蹤和基於物理渲染的更多討論,歡迎收聽!
收聽地址:全局光照:實時與離線渲染
文字版本:在《硬影像》與羅登導演聊渲染技術
應該說是沒有光線就不是物理材質吧。物理材質的核心演算法brdf就是基於光線計算的。而光線追蹤是更加真實的光線,主要還是用於離線渲染。實時渲染(遊戲)沒怎麼見過有用光線追蹤的(計算量大)。但是遊戲中用pbr的倒是不少。。
推薦閱讀:
※windows平台下有類似framebuffer的東西嗎?
※為什麼虛幻4的渲染要比unity強,強在哪裡了,想知道底層原理解釋?
※軟體渲染有沒有辦法提高紋理採樣速度?
※在遊戲引擎中常用的光照模型有哪些?