您當前的位置:首頁 > 遊戲

遊戲引擎中的延遲渲染

作者:由 楊振 發表于 遊戲時間:2020-09-10

全球圖形學領域教育的領先者、自研引擎的倡導者、底層技術研究領域的技術公開者,東漢書院在致力於使得更多人群具備核心級競爭力的道路上,將帶給小夥伴們更多的公開技術教學和影片,感謝一路以來有你的支援。我們正在用實際行動來幫助小夥伴們構建一套成體系的圖形學知識架構,你在我們這裡獲得的不止於那些毫無意義的程式碼,我們這裡更多的是程式碼背後的故事,以及精準、透徹的理解。我們不會扔給人們一本書或者給個思路讓人們去自學,我們是親自來設計出好的課程,讓人們明白到底背後還有哪些細節。

簡介

在3D圖形學中,延遲渲染是在1988被一個叫做Michael Deering的人提出來的一種螢幕空間下著色的渲染技術。顧名思義,它之所以被稱為延遲渲染,就是因為在第一個渲染pass中,無論是vertex shader還是fragment shader都不會進行任何著色的操作,著色這一步被延遲到第二個渲染通道中執行了。在延遲渲染中,第一個渲染通道中,只有那些在著色的時候會被使用到的資料會被傳進去,然後第一個通道輸出的資料會有位置、法線以及那些需要被渲染的表面的材質資訊,在我們的演示教程中,對應的就是ColorBuffer。延遲渲染第一個渲染通道的輸出資料會被輸出到圖片中,這些圖片被成為Geometry Buffer,也就是著色的時候需要的幾何資料都在這些buffer裡面,又被簡稱為“G-Buffer”,這裡的G指的是Geometry的縮寫。這裡我們需要使用到RTT技術(Render To Texture技術)。在延遲渲染的第二幀,我們的fragment shader會根據輸入的G-Buffer的資料以及額外的光線資訊,去計算出每一個畫素點上的直接光照和間接光照,並對螢幕空間下的每個畫素進行著色。在我們討論延遲渲染的時候,你可能還會對下面這些技術感興趣。但由於這些不屬於架構級的東西,我們不會放在引擎課程裡面為同學們講解,關於GI、PBS以及RT,我們會在渲染專題課程中,為同學們系統的講解這些知識點。

優點

延遲渲染的最大優點莫過於讓每一次光照計算都變成有效計算,因為延遲渲染的第一個通道會提取整張畫面中能被看見的所有畫素的幾何資訊,第二個通道進行著色的時候,所有的光照計算都是有效的,意思就是說,第二個通道中你所有的光照計算都是可以被使用者的眼睛看見的。如果採用Forward渲染方式的話,很有可能你花費很大力氣渲染出來的某一個表面被別的物體遮擋住了,而不能出現在最終的畫面中,這樣就帶來了計算資源的浪費。

缺點

延遲渲染最主要的毛病在於它無法在它的演算法中去處理好半透明物體的渲染問題。在硬體資源允許的條件下,我們可以使用Depth Peeling演算法來在延遲渲染的框架下實現渲染順序無關的半透明物體渲染。但這樣做了之後會帶來額外的效能上的損耗以及記憶體上的開銷。通常情況下我們在支援OpenGL3以及以上版本的裝置上來實現這樣的演算法會獲得比較快的速度。當我們在延遲渲染中加入了渲染順序無關的透明物體渲染技術了之後,在實現其他的演算法方面,它跟Forward渲染的效能是不相上下的。

另一個延遲渲染比較大的毛病就是,當我們使用了很多材質的時候,我們可能需要豐富的儲存空間去儲存G-Buffer中的資料,這樣一方面帶來的是儲存開銷,另一方面是在執行的時候帶來了資料頻寬方面的壓力。

最後,由於我們延遲渲染的框架下分離了光照和幾何資料資訊,所以硬體級別的AA變得不再可能,但對於AA的處理也並不是完全沒有辦法,我們可以自己使用Post Rendering的方式去實現自己的AA,比如基於邊緣檢測技術的FXAA技術、MLAA技術、SRAA技術以及DLAA技術,我們當然也可以自己去實現MSAA。另外Temprol AA看起來也是一個很不錯的解決方案。

相關最佳化-Tiled Rendering

我們之前說到了延遲渲染屬於螢幕空間下的渲染解決方案,於是乎在參與第二通道渲染的燈光有一些可能是不需要的,我們在第二通道開始之前,可以對燈泡進行分類,然後在需要被渲染的螢幕切塊中給它輸入對應的燈光,不需要的地方就不給它輸入光源,這樣能達到加速第二通道渲染的目的。

相關最佳化-Clustered Rendering

在Tiled渲染的基礎上,我們再思考有沒有更精確的方法能夠對燈光進行剪裁的呢?這時候,我們就想到了Clustered的方式。只不過Clustered的方式在3D空間中對燈光機型剪裁,於是乎,我們實際上可以把這套技術與Forward渲染進行結合。

最佳化參考

所有的演示同學們可以參考引擎課程中的影片內容,至於同學們希望做出怎樣的引擎,同學們可以自己結合自己的專案,來分析一下使用怎樣的技術對你來說是最合適的。

我們核心關注和討論的領域是引擎的底層技術以及商業化方面的資訊,可能並不適合初級入門的同學。另外官方維護兩個公眾號,第一個公眾號是關於我們企業自身產品的資訊與動態的公眾號,如果對我們自身資訊與動態感興趣的同學,可以關注

圖形之心

除此之外,我們為了更頻繁的釋出一些諮詢與文章,我們維護的第二個公眾號是“

核心觀察

”,

核心觀察

提供的主要是一些與我們無關的諮詢與文章。

隻言片語,無法描繪出整套圖形學領域的方方面面,只有成體系的知識結構,才能夠充分理解和掌握一門科學,這是藝術。我們已經為你準備好各式各樣的內容了,東漢書院,等你來玩。

標簽: 渲染  延遲  我們  技術  著色