最近太忙了,抽出一天來讀自己喜歡的東西。這篇文章算是再複習(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ì)顯示:(see:其他tagid類型)渲染不支援的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)談。