雖然用了unity工作很久了,但是我一般很少關心工作以外的事,即使是工作內容上,也是一樣,一直比較專注於應用層的編寫,對於特效,材質什么的除了比較基礎的內容,對底層都漠不關心。但是最近打算研究下shader grap,然后被渲染管線等一堆內容搞的頭暈眼花,所以這幾天決定整理一下思路與內容。這里借一張圖(侵刪)
1.渲染管線和shader的關系.
這里我關於shader和材質的關系,我想對unity有經驗人都知道,不再贅述。
我們都知道渲染管線,它是一個物體從獲取數據到渲染到屏幕的整個流水線過程過程。這中間要經過光源頂點等一堆數據,坐標換算等一堆過程。而我們的shader則是其中頂點渲染部分和光柵化部分的計算。這中間還有,Forward等(比如forwardMode),我目前是這么理解。這里我們稱處理整個過程的處理程序為渲染器,shader則是這整個過程的最終部分,shader能夠處理的東西依賴於渲染管線在shader處理之前能為其提供的東西(暫時這么理解)。因此,當配置unity的新的渲染管線之后,以前的默認材質就會失效,就是因為以前的默認材質的shader和當前的渲染管線不對應。這里比如投影,我們和光照等,在頂點函數下我們並不知道,而這些都是由前面的流程提供,因此前面流程提供的東西越多,這個shader能做的事就越多。當然這里是粗淺理解,因為有些精確的效果本身就是可以通過編寫shader來做到。這取決於渲染管線是否能做到。這里比如在屏幕上渲染某些東西,這可以用渲染管線編程得到(比如cookie),然而這也可以用shader來做到。總之就是可編程渲染管線使得開發者可以自定義某些配置化和模塊化的東西,從而減少在shader上花費的精力。
2.渲染管線來源。
unity提供了幾個渲染管線,內置渲染管線,URP(通用渲染管線,原來稱LWRP)和HDRP(高清渲染管線),SRP是unity的支持的渲染管線特性(可編寫),URP和HDRP是unity官方自己用SRP特性編寫的兩個不同配置需求的渲染管線。如果沒有使用其他渲染管線,那么默認就是內置渲染管線,比如一般情況下建立的3D項目。當前,這里也可利用SRP特新編寫自定義的渲染管線,具體如何編寫,可以看官方文檔(文檔好少),如果要上嗶哩嗶哩上看的話,艱難了,搜到的結果都是介紹如何使用URP和HDRP。
但是目前的話由於精力有限,和沒有這方面的需求,我決定打住,不再深究如何編寫渲染管線,僅限於如何使用內置RP,URP,HDRP,使用原來的渲染效果。