URP從原理到應用 基礎篇

2022-06-07 12:12:11 字數 2531 閱讀 9494

unity目前已經支援了將近30個遊戲平台,這就意味著內建渲染管線必須同時支援所有平台,平台之間的差異性導致內建管線越來越臃腫不堪。引擎每次對特定平台的管線修改都必須考慮其他平台的相容性(肯定會用到各種if else條件,或者巨集預編譯判斷),內建渲染管線無法對開發者提供一些定製化修改介面,普通開發者無法去學習渲染管線,導致大部分開發者對這塊知識都很匱乏,不利於個人成長。

unity自2018推出srp(可程式設計渲染管線),從它誕生那一天起就被貼上了高效能、高拓展性、高定製化的標籤,這是具有跨時代意義的。unity在c++開放出更底層的渲染介面是srp的根基,繼續對外開出c#介面讓使用者可以充分定製,這裡的使用者也包括引擎開發者,將**從c++中剝離到packagemanager中不僅可以對引擎做乙個**,如果出現bug也不需要重新發布引擎,只需要重新發布urp的package包即可。另外,移動端和主機晶元從設計上就截然不同,強行把它們揉在一起用一套渲染管線,無法充分兼顧效能與效果。在srp的加持下unity推出了面向通用平台的urp渲染管線,和面向主機平台的hdrp高畫質渲染管線,進一步讓開發者對管線進行充分定製與優化。

為了讓目標平台充分發揮效能與效果,unity自2018版本提供了srp全稱scriptable render pipeline(可程式設計渲染管線),unity將c++呼叫渲染api (如:opengl es)的介面盡可能做到淺封裝並且對外開放c#呼叫介面,這樣就可以編寫c#指令碼來控制unity渲染的每一幀。srp並沒有直接提供類似對接opengl es的介面,所以並不能為所欲為,有些東西依然是做不到的。

基於srp技術,unity開發了urp(通用渲染管線)和hdrp(高畫質渲染管線),這樣在效能高階的pc主機上可以使用更好的渲染效果。未來在手機上也可以支援hdrp,hdrp上的好效果也可以自行移植到urp,渲染管線是跑在cpu上的而非gpu,gpu硬體也有一套自己的渲染管線,兩者是不同的。這兩年手遊上也有基於gpu driven的渲染管線裁減技術的案例,有興趣的朋友可以去網際網路上找找。

hdrp的目標是為高階平台,如主機、pc平台提供震撼的視覺效果,高階的效果必然對硬體的算力有一定要求,它同時支援前向渲染和延遲渲染技術,內建了大量3a遊戲的渲染效果體積光、體積霧、大氣散射、光線追蹤、次表面散射和ssao等,所用到的技術包括visual effect graph特效編輯器、shader graph視覺化著色器編輯器、timeline、cinemachine以及post processing stacks後處理,基本是應有盡有。hdrp未來也會支援移動裝置,移動裝置也分高階機和低端機,在高階機或vr上也可以使用hdrp的一些高階效果。

urp的目標平台並不完全是移動裝置,而是所有平台。最開始被稱為輕量渲染管線--light weight render pipeline,簡稱lwrp。很多開發者就會有誤解,lwrp是不是就意味著效能更強勁,其實這個結論不完全正確,甚至使用不當有可能還不如內建渲染管線。 

後來unity將lwrp更名universal render pipeline,簡稱urp。自unity 2021版本後,內建渲染管線將不再進行維護,將使用urp完全代替它。市場上的開發者要想完全切換urp可能還得一段時間,比如asset store上的外掛程式,大量渲染教程,這些大多都還是基於內建管線的。

urp提供的渲染效果也沒有hdrp多,比如體積光、體積霧、大氣散射、光線追蹤、次表面散射等目前都沒有提供,在新版本urp中已經提供了ssao和shadow mask功能。而且hdrp提供了效果也可以自行移植到urp中來, urp從設計上拋棄了很多內建管線的缺陷,這也導致了一些原本內建管線有的東西卻在urp上實現不了,我相信隨著版本的迭代,這些都不會是問題。最重要的是urp和hdrp的c#部分**都是開源的,開發者也可以基於srp實現一套獨有的渲染管線,這樣效能與效果就可以達到最佳平衡。

在正式進入學習之前我們先來致敬一下unity的首席圖形渲染大佬phli_lira(費利佩·里拉),他是urp和shader graph的作者,我在學習urp的過程中谷歌搜尋問題,每次都能看到他的詳細回答,在論壇裡他和大量開發者交流,解答了很多人心中的疑惑。

大佬自己開源了一套自己基於urp的工程:

這個例子非常適合初學者學習,它並不像unity內建的lit.shader那樣相互關聯了一大堆檔案看起來會非常費勁,而是從少到多一點點加的。都是從最基礎基於urp的shader拓展出來的,包括自發光、陰影、matcap環境反射、螢幕空間uv、lit pbr、車漆。

2023年11月我在北京uug上分享了案例《srp到urp從原理到應用》,可惜當時沒有錄影,

《urp從原理到應用——基礎篇》全文可戳此閱讀

AdaBoost 從原理到實現

對於adaboost,可以說是久聞大名,據說在deep learning出來之前,svm和adaboost是效果最好的 兩個演算法,而adaboost是提公升樹 boosting tree 所謂 提公升樹 就是把 弱學習演算法 提公升 boost 為 強學習演算法 語自 統計學習方法 而其中最具代表...

KNN從原理到實現

引文 決策樹和基於規則的分類器都是積極學習方法 eager learner 的例子,因為一旦訓練資料可用,他們就開始學習從輸入屬性到類標號的對映模型。乙個相反的策略是推遲對訓練資料的建模,直到需要分類測試樣例時再進行。採用這種策略的技術被稱為消極學習法 lazy learner 最近鄰分類器就是這樣...

AdaBoost 從原理到實現

對於adaboost,可以說是久聞大名,據說在deep learning出來之前,svm和adaboost是效果最好的 兩個演算法,而adaboost是提公升樹 boosting tree 所謂 提公升樹 就是把 弱學習演算法 提公升 boost 為 強學習演算法 語自 統計學習方法 而其中最具代表...