[演講筆記][UnrealEngine] UE5中的渲染技術 2022台北遊戲開發者論壇
花了一些時間把EpicChina在2022台北遊戲開發者論壇的演講看完並做了一些筆記。 題目是關於UE5中的渲染技術。 只是看完影片後覺得資訊量太多,腦袋呈現完全爆炸狀態……然後影片結尾聽到講者說這只是很粗淺的介紹後我就崩潰了。 雖然以下筆記很多內容我都還有點消化不良而且可能也有理解錯誤的地方,但不管怎麼樣先分享出來給需要的人。 想更進一步知道細節的推薦大家去看演講,不能只有我崩潰。 https://www.twitch.tv/videos/1533064361 1:54:37秒 開始 1. 在nanite中大小三角形會分別用軟硬體做,大的用硬體做,小的為了避開overshading的問題,他自己用compute shader寫了rasterization。為什麼呢?在三角型在算pixel的顏色時,由於頂點不會剛好在pixel的中間,因此他必須相鄰的4個pixel拉進來,用一個Quad為單位來考慮。當你的三角型很小而且緊密時,某些pixel會一直反覆被拉進去做計算,這情況稱之為Overshading或者是Quad OverDraw。而Nanite為了解決這個問題,因此大的三角型雖然還是靠硬體做,但小的三角型則是自己用軟體做,在Compute Shader中寫rasterization。小的三角型有一些條件需要達成才會被歸類為小三角型。 2. 整套技術的重點在Cluster生成、Culling跟LOD的選擇,為了高效的達成Culling跟LOD的選擇,引擎從4.22開始就把整個render底層換成retained mode,就是說讓GPU去維護整個場景render object的一些狀態。 這邊是GDC2019演講。 3. LOD的生成機制,其實就是先做graph partition演算法做cluster分組,然後不斷的遞迴減半面數,最終生成一個DAG(Directed Acyclic Graph)。Graph partition的分群的給定條件是共享的邊盡可能的少,面積盡可能的均勻。這出來的結果是每下一級LOD都會是最小的變化,也就是說外觀的變化最小。而衡量外觀變化的標準就是使用QEM(Quadric error metric)。 4. QEM這個衡量標準可以保證我們減面後的error會越來越大,從DAG的Root到Leaf Node,記錄在節點中的error值可以幫助我們做LOD的選擇。 5. 每個Cluster的BoundingBox都會再各別對每級的LOD個別生成BVH(BoudingVolumeHierarchy)後,再掛到一個大的BVH root下面,因為這樣gpu的入口會比較一致。每4個Cluster會組成一個cluster group,最終這個nanite模型會是一個cluster的BVH結構。 6. Culling會利用分群後的資訊進行,經過以下步驟: — a. Instance Culling:用上一個frame的HZB做跟BoundingBox來做剔除,得到一個粗略的可能還可見對象的instance。— b. … Continued