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

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

Unity 輕量級渲染管線LWRP/URP詳解

2021-07-16 13:16 作者:博毅創(chuàng)為  | 我要投稿

Unity 可編程渲染管線, LWRP輕量級渲染管線(Light Weight Render Pipeline)出來有一段時間了, 今天寫一遍文章,詳細的介紹一下可編程渲染管線與LWRP輕量級渲染管線相關(guān)內(nèi)容,幫助大家搞懂這些概念,并建立起一個學(xué)習(xí)可編程渲染管線/輕量級渲染管線的思維。整個文章我將會分成4個部分來個大家講解:

???(1): 什么是渲染管線與向前渲染;

???(2): 什么是可編程渲染管線;

???(3): 輕量級渲染管線與它的基本使用;

???(4): 輕量級渲染管線Shader 模板結(jié)構(gòu);

每個Unity版本,實現(xiàn)的輕量級渲染管線LWRP的代碼可能都不一樣,但是思路原理基本都差不多。

1: 什么是渲染管線與向前渲染

???我本人非常反對高大上的概念包裝,唯獨游戲中的"渲染"是例外之一。通俗點說渲染就是烘托出相應(yīng)的環(huán)境(光照,陰影,遮擋,反射,折射等),把物體在特定的環(huán)境中繪制出來。Unity引擎里把引擎中完成整個游戲場景,人物, 環(huán)境,光照等游戲畫面繪制相關(guān),最終把畫面繪制到屏幕上的整套邏輯與相關(guān)代碼(普通代碼與Shader代碼)稱為渲染管線。

??Unity引擎的渲染管線主要分為"渲染核心庫"與"渲染策略"兩個部分, “渲染核心庫”是Unity把基于OpenGL/DirectX把渲染相關(guān)的接口函數(shù)封裝成API,這部分Unity引擎寫好后作為核心的API渲染庫?!变秩静呗浴敝傅氖荱nity引擎繪制整個游戲場景的時候,如何處理多相機,多光源,陰影投射,物體繪制,霧,自發(fā)光等。這個就叫做渲染策略,渲染管線基于一種渲染策略,調(diào)用渲染核心庫中的API,把整個游戲場景繪制出來。

??早期的Unity引擎,把整個渲染管線都內(nèi)置在引擎里面,沒有開放給開發(fā)者,只有少數(shù)的一些大廠,獲得了Unity引擎源碼授權(quán),能修改和定制里面的渲染管線相關(guān)代碼。Unity內(nèi)置的渲染管線有: 向前渲染,延時渲染等,目前這兩種用的比較多。Unity引擎默認(rèn)使用"向前渲染"。接下來我說一下向前渲染管線中的一個渲染策略,為了后面對比輕量級渲染管線做好鋪墊。向前渲染管線可以處理任意多的光源,處理多光源的時候,每個重要光源,都會調(diào)用一次Shader里面的Pass來完成渲染,有幾個重要光源就會渲染幾次,這樣大大降低了多光源時候的繪制效率。所以之前我們很多手機游戲上面都用靜態(tài)光照來渲染場景,獲得逼真的光照效果,因為向前渲染管線多光源的實時計算開銷實在太大。靜態(tài)光照有一個問題就是無法獲得實時光照的效果。

?

2: 什么是可編程渲染管線

??前面?zhèn)€講解了渲染管線與內(nèi)置的先前渲染管線,我們會發(fā)現(xiàn)內(nèi)置的渲染管線的策略有時候不滿足我們的要求,比如我們需要實時光照,又需要好的性能,那么向前渲染每個光照都走一次Pass顯然不合適,做手機游戲,可能只要4個光源就可以了,不用支持任意多的光源,隨著unity可以開發(fā)越來越多的游戲平臺,不同平臺,不同類型的游戲越來越需要能修改渲染管線相關(guān)的策略,到達好的效果,同時有好的性能。Unity新版本推出了可編程渲染管線,把渲染管線里面的渲染API核心庫開放給開發(fā)者,允許開發(fā)者自己定制渲染策略。Unity引擎提供了一整套可以定制渲染管線的機制,所以叫做可編程渲染管線SRP(Scriptable Render Pipeline)。

3: 輕量級渲染管線與它的基本使用

??內(nèi)置的渲染管線是針對通用情況,比如支持任意數(shù)目的光源等,所以很多策略并不是特定的環(huán)境下,針對特定應(yīng)用場景而得到的最佳的策略,現(xiàn)在手機游戲非常的廣泛,還有很多其它的游戲平臺,需要好的渲染效果的同時,需要一個好的性能。比如我就希望有多光源的實時光照,我的角色到了光源附近能渲染出光的效果出來,而不是使用靜態(tài)光照那樣。同時我們又不需要任意多的光源,只要限定一個光源數(shù)目即可,比如4個。這樣就可以通過定制渲染管線,提升性能,比如我們最多支持4個光源,我把所有光源的計算一起放到一個Pass里面,這樣提升性能的同時,又獲得實時的光照,雖然對光源的數(shù)目做了一些限制(輕量化),卻獲得了效果和性能的一個靈活的平衡。Unity 針對手游等應(yīng)用領(lǐng)域,開發(fā)了輕量級渲染管線(LWRP),后來基于輕量級渲染管線又衍生出來另外一個渲染管線Universal Render Pipeline(URP,這邊文章我們用的是URP的代碼)。

??渲染管線的渲染策略被定制了,渲染的時候需要Shader來配合最終繪制物體出來,所以不同的渲染管線Shader會不一樣,我們之前學(xué)習(xí)的Shader開發(fā)都是針對向前渲染管線的,比如輕量級渲染管線所有光照計算都在一個Pass,那么之前向前渲染的Shader肯定就不能直接使用了。所以當(dāng)我們定制了新的渲染管線以后,還要基于新的渲染管線的策略重新開發(fā)一個Shader包(PBR Shader, 粒子,?霧,天空盒等),這個Shader包能滿足大部分的3D游戲開發(fā)的需求,同時我們也可以基于新的渲染管線的策略來開發(fā)自己的Shader。

???總結(jié)一下定制渲染管線的主要的3個點:

??????(1) 渲染核心功能的API,由引擎開放給開發(fā)者調(diào)用;

??????(2) 定制渲染策略,開發(fā)者根據(jù)自己游戲的情況來定制自己的渲染管線,達到最好性能;

????(3) 基于渲染管線的渲染策略,開發(fā)出對應(yīng)的Shader包;


完全從頭到尾定制一個渲染管線并不容易,幸運的是Unity引擎為我們做好了輕量級的渲染管線,滿足我們做手機游戲的絕大部分的需求。我們只要使用就可以了,如何使用輕量級渲染管線,這里我們已URP為例:

????(1) 安裝URP的相關(guān)的Unity Package, 不同的Unity的版本可能URP的代碼版本不一樣。

(2) 使用URP渲染管線來代替內(nèi)置的渲染管線。先創(chuàng)建一個渲染管線的Asset文件,配置好相關(guān)數(shù)據(jù),創(chuàng)建成功后,在Grpahics下面的Scriptable Render Pipeline選擇這個Asset文件,切換渲染管線成功。系統(tǒng)會根據(jù)Asset文件的描述來創(chuàng)建出渲染管線出來。如圖:

(3) 創(chuàng)建角色,場景,創(chuàng)建材質(zhì)的時候,使用渲染URP渲染管線相關(guān)的Shader;

?

???4: 輕量級渲染管線Shader 模板結(jié)構(gòu)

???Unity可編程渲染管線(包括輕量級渲染管線)的Shader開發(fā)仍然使用的是ShaderLab的語法結(jié)構(gòu),開發(fā)語言和普通的Shader開發(fā)不一樣,使用的是HLSL編程語言。同時有些渲染管線還支持Shader Graphic開發(fā)。作為程序員,我個人還是建議自己手寫代碼,比起生成的Shader的代碼,手寫代碼能減少冗余,更高效。我們打開URP渲染管線里面 PBR Shader如下圖:

? ?

仍然是基于ShaderLab, 和普通的Shader結(jié)構(gòu),沒有區(qū)別。

?我們來看幾個重要的Pass, 體會一下和向前渲染管線的不同。先來看主要的繪制Pass,處理光照計算的,正如紅線標(biāo)注的一樣,所有的光源在一個Pass里面計算完成。


看下陰影投射的Pass:?

看下HLSL代碼,和Cg差不多,所以學(xué)習(xí)的時候不用由心里負(fù)擔(dān), 打開LitForwardPass.hlsl,這個文件就是URP里面PBR Shader具體實現(xiàn)的代碼。截圖如下,數(shù)據(jù)結(jié)構(gòu)這些和Cg沒有太大的差別,如圖:

由于篇幅有限,沒有辦法把Shader詳細代碼的講解一遍,為此我還提供了本文對應(yīng)的代碼與視頻講解(里面詳細講解了Shader結(jié)構(gòu)),需要的可以關(guān)注公眾號,回復(fù)"LWRP",來學(xué)習(xí)免費學(xué)習(xí)視頻教程,并獲取課程源碼。 URP渲染管線效果截圖如下:

附視頻教程 點擊可直接學(xué)習(xí)

Unity游戲開發(fā)課程 / Shader專題進階

Unity輕量級渲染管線LWRP核心解密

https://bycwedu.vipwan.cn/promotion_channels/1976877263


為視頻教程制作者Blake老師打CALL? 作者:博毅創(chuàng)為 https://www.bilibili.com/read/cv11426552 出處:bilibili



Unity 輕量級渲染管線LWRP/URP詳解的評論 (共 條)

分享到微博請遵守國家法律
沙雅县| 波密县| 通辽市| 双桥区| 绥芬河市| 莎车县| 健康| 新和县| 虞城县| 静乐县| 安义县| 茌平县| 东兴市| 来宾市| 汉寿县| 阳江市| 应城市| 辉县市| 无棣县| 望奎县| 枝江市| 天峻县| 开阳县| 台北县| 陇南市| 中江县| 上高县| 耒阳市| 龙岩市| 宁津县| 迁西县| 湖北省| 绥江县| 金塔县| 永安市| 东海县| 克什克腾旗| 南部县| 额尔古纳市| 荔波县| 大石桥市|