ETH官方钱包

前往
大廳
主題

【Unity * Render Pipeline 學(xué)習(xí)筆記】從0做出自定義Render Pipeline,意外學(xué)到partial class

%%鼠 拒收病婿 | 2021-11-20 03:00:06 | 巴幣 1322 | 人氣 727

前言:
最近太忙了,抽出一天來讀自己喜歡的東西。

這篇文章算是再複習(xí)一次,筆記有些疑問,希望有興趣的桐學(xué)能幫忙解惑


基本的Skybox:

1.創(chuàng)建asset的類別,類似做scriptableObject,可以產(chǎn)生asset檔:

在自定義的RP中,實(shí)作介面的Render方法:
Render會(huì)在畫面刷新時(shí)候呼叫,例如點(diǎn)一下滑鼠或移動(dòng)畫面物件時(shí)。

CameraRenderer是我們自定義的類別:
ScriptableRenderContext :用來安排渲染狀態(tài)。

若沒 context.SetupCameraProperties(camera) ,則畫面內(nèi)容不會(huì)套用camera的tramsfrom等資訊。

結(jié)果:(因?yàn)橛蠸etupCameraProperties,所以才能套用正確的camera旋轉(zhuǎn)。)


加入Frame  Debug


成功出現(xiàn)在frame debug清單上:
*此為frame debug,若是要出現(xiàn)在profiler清單上:
(此為記錄讀取camera.name的記憶體分配,上圖106B來自取得camera.name 的記憶體分配。)
疑問:為什麼讀取也會(huì)有記憶體分配掉?

Cull

為了節(jié)省效能,我們只需要渲染畫面上看得到得物件,其他則cull掉。

渲染基本幾何體:

使用ref得好處在於避免函數(shù)傳遞參數(shù)時(shí)需要再copy一份。

*透明物體會(huì)被skybox遮擋因?yàn)橥该魑矬w不會(huì)寫進(jìn)深度buffer,所以他們無法遮蔽身後的物體。所以將不透明跟透明的分開render:


注意不透明體是 front-to-back ,透明體是back-to-front  。因?yàn)橥该黧w沒有寫進(jìn)z-buffer,所以透明體沒辦法用深度做判斷。一般使用物體中心位置為比較依據(jù),從遠(yuǎn)到近渲染才能有blend的效果。但物體若太大,則可能造成距離判斷的錯(cuò)誤,所以建議將大型幾何體拆塊。


支援渲染其他shader類型:

在上面我們用static ShaderTagId unlitShaderTagId = new ShaderTagId("SRPDefaultUnlit"); 指定輸出的shader類型為SRPDefaultUnlit,因此其他類型的材質(zhì)不會(huì)顯示:

渲染不支援的shader tag
上圖shader tagids[]應(yīng)該已經(jīng)過時(shí),可以參考其他tagid類型

不支援的材質(zhì)將會(huì)是純黑色的:

用常見的紫色error材質(zhì)替代:

疑惑:每次new DrawingSettings會(huì)不會(huì)浪費(fèi)空間?



Partial Class

將一個(gè)類別分拆成許多檔案,典型的使用案例是將自動(dòng)產(chǎn)生的程式碼與人工撰寫的部分分開。這裡是將editor的部分與實(shí)際渲染的部分分開。

此處將CameraRenderer拆成兩個(gè),其中一個(gè)專門for editor:
程式碼有點(diǎn)長就不截圖了,值得注意的是像DrawUnsupportedShaders方法現(xiàn)在只存在editor模式下,這樣build會(huì)在另一個(gè)腳本呼叫時(shí)出錯(cuò),因此在外宣告方法避免error,類似於抽象方法宣告。

渲染UI

當(dāng)camera 的render mode是overlay時(shí),UI並非透過我們的RP顯示。

將canvas render mode設(shè)成 screen space -camera,就能將UI視為透明幾何體透過指定camera渲染。


screen座標(biāo)無法顯示UI:



多個(gè)相機(jī):

在場(chǎng)景上加上第二個(gè)鏡頭,secondary camera。目前有2個(gè)相機(jī),但只會(huì)顯示最後一個(gè)渲染的結(jié)果,要結(jié)合兩個(gè)相機(jī)的內(nèi)容需修改程式碼:
main camera會(huì)先渲染,再來是secondary camera,因此若secondary camera的clear flag選skybox或color則會(huì)覆蓋掉main camera的內(nèi)容。應(yīng)當(dāng)選depth。


後記:
要準(zhǔn)備研究所推甄變得很忙,因?yàn)椴惶胨雷x書考試,所以會(huì)想拚其他成績當(dāng)書審資料,不知道有沒有大佬能提供升學(xué)經(jīng)驗(yàn)談。
送禮物贊助創(chuàng)作者 !
0
留言

創(chuàng)作回應(yīng)

落雨空空AoiSora
2021-11-20 08:09:44
??求出處學(xué)術(shù)用??
2021-11-20 10:41:55
追蹤 創(chuàng)作集

作者相關(guān)創(chuàng)作

相關(guān)創(chuàng)作

更多創(chuàng)作