最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

URP管線自定義后處理組件

2023-06-21 23:23 作者:RRRidah  | 我要投稿

(用于實習(xí),不是為了給大伙講懂,所以沒有展現(xiàn)完整的腳本和實現(xiàn)思路!抱歉)

自定義后處理的終極目標就是適配于內(nèi)置的volume組件中。因為volume功能完善,還有局部后處理的效果,非常強大。在volume組件中添加自定義的后處理,首先就是需要繼承VolumeComponent類,才能夠在volume下拉菜單中添加自己想要實現(xiàn)的后處理效果。

自定義命名空間中添加一個抽象類
繼承該抽象類,為自定義組件命名

光是繼承VolumeComponent是遠遠不夠的,我們后處理的核心邏輯還沒有實現(xiàn)。在內(nèi)置管線中我們可以通過void OnRenderImage()函數(shù)實現(xiàn)后處理。而對于非built-in管線,unity提供了RenderFeature腳本,一個更加靈活,可操作性更高,為SRP而生的后處理框架。因為只提供了這一種方法,我們繞不開這座大山。RenderFeature里有兩個類,創(chuàng)建兩個腳本分別管理這兩個類。

第一個類里有兩個函數(shù)。首先我們需要自己聲明第二個類的字段(把第二個類當(dāng)做成一個RenderPass)。Create()里初始化我們聲明的字段,需要為RenderPass設(shè)置RenderPassEvent,也可以設(shè)置一些自定義的屬性。?AddRenderPasses()主要調(diào)用renderer.EnqueuePass()將我們聲明的字段(RenderPass)添加到渲染序列當(dāng)中去。

第二個類里,OnCameraSetup()用于配置一些渲染數(shù)據(jù),為命令緩沖提前創(chuàng)建temporaryRT。OnCameraCleanup()是在該RenderPass調(diào)用完成后,清除所有分配的資源。?配置好所需要的渲染環(huán)境,最終在Execute()實現(xiàn)我們的后處理邏輯。主要實現(xiàn)流程是:通過CommandBufferPool.Get()調(diào)用一個CommandBuffer(cb),給cb設(shè)置渲染目標(也就是當(dāng)前攝像機的RenderTexture)。然后調(diào)用volumeComp.Render(cb, renderingData.cameraData, source, renderTarget)。volumeComp是我們自定義的后處理腳本!通過下圖獲得。

需要我們在最開始的PostProcessVolumeComponent類里實現(xiàn)Render抽象函數(shù)。這樣在我們自定義的后處理腳本里,繼承PostProcessVolumeComponent類,重寫Render函數(shù)。就可以直接在重寫的Render()方法里寫我們自己的后處理邏輯。

現(xiàn)在來介紹此方法相比于常規(guī)在renderfeature中寫后處理的優(yōu)勢。主要體現(xiàn)在?在Execute()函數(shù)里,我們并不是只實現(xiàn)一個后處理效果,而是先獲取我們所有激活的后處理,添加到自己聲明的List<PostProcessVolumeComponent>。

然后通過先前介紹過的volumeComp.Render方法渲染所有添加到list里的后處理組件。

通過上下文提交cb指令,才能做到真正的調(diào)用

這樣一來,我們就不需要重復(fù)改寫RenderFeature冗雜的代碼。而是簡單創(chuàng)建一個腳本,繼承PostProcessVolumeComponent,重寫里面的抽象方法,在Render里自定義后處理!當(dāng)然還有很多細節(jié)需要考慮,比如各種參數(shù),材質(zhì),渲染隊列,平臺兼容性等等。

這是一個簡單的例子。DrawFullScreenTriangle是自定義的一個usility類中的方法,內(nèi)部是通過cb.DrawProcedural實現(xiàn)的。DrawProcedural是HDRP中一個更加高效且優(yōu)化的draw方法,相比于DrawDynamic會少使用一個 Vertices,雖然調(diào)用的drawcall還是不變。。但跟著unity前進的步伐,還是將所有cb.Blit改成cb.DrawProcedural了。??
同一腳本內(nèi),可以自定義編輯器,跟常規(guī)編輯器一樣,調(diào)用OnInspectorGUI()

內(nèi)置管線中學(xué)習(xí)后處理,基本上只需要涉及到shader。在SRP中,后處理是渲染管線里可以自由支配的一部分。學(xué)習(xí)過程中會自我提升很多?,包括對渲染管線更深入的了解,對frame?debug的使用,對unity提供的后處理組件內(nèi)部也有更全面的認識。最后展示一下自己實現(xiàn)的一些效果。

實現(xiàn)編輯器自由!
景深,比urp自帶的景深?多很多功能!
幾種邊緣檢測算法
兩種電影顆粒效果!
基于物理的Bloom
優(yōu)化后的模糊效果

展示了一些需要基本功底的后處理效果。部分效果實現(xiàn)起來還是挺復(fù)雜的!感謝觀看。

URP管線自定義后處理組件的評論 (共 條)

分享到微博請遵守國家法律
中牟县| 正安县| 霍邱县| 泰顺县| 永寿县| 淳安县| 西青区| 平阴县| 仙游县| 文化| 泸水县| 镇坪县| 沙雅县| 百色市| 南平市| 德清县| 苍梧县| 教育| 安塞县| 家居| 隆昌县| 吴川市| 长泰县| 滦平县| 海林市| 桐乡市| 灵台县| 富宁县| 澄城县| 云林县| 白玉县| 会昌县| 天长市| 铁力市| 颍上县| 鲜城| 无为县| 金溪县| 临漳县| 正阳县| 宣恩县|