五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

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

Unity--Unity--URP渲染管線核心機(jī)制分析(4)URP渲染管線Shader機(jī)制剖析

2022-08-31 16:26 作者:博毅創(chuàng)為  | 我要投稿

上一節(jié)通過剖析URP 光源機(jī)制,本節(jié)來分析URP的Shader機(jī)制,不同的渲染管線渲染處理的基礎(chǔ)與策略是不一樣的,所以Shader的寫法是不同的,在URP渲染管線下不能使用之前的標(biāo)準(zhǔn)向前渲染管線的Shader,當(dāng)然向前渲染管線也不能使用URP的shader。URP 渲染管線的Shader采用的是HLSL開發(fā),普通標(biāo)準(zhǔn)的Shader是采用Cg來開發(fā)。URP Shader實現(xiàn)了游戲開發(fā)中常用的一些Shader,并提供源碼,方便我們參考學(xué)習(xí)URP Shader開發(fā)。URP渲染管線的Shader源碼在Packages/Universal RP/Shaders目錄下,如圖1.4-1所示:

?

圖1.4-1 URP Shader

URP 渲染管線實現(xiàn)了內(nèi)置的PBR, Unlit , 地形等游戲開發(fā)中常用的Shader。

1: URP Ulit Shader

我們先來分析一下URP 的Unlit Shader的模板,創(chuàng)建一個材質(zhì)球,選“Universal Render Pipeline/Unlit” Shader模板,在場景中創(chuàng)建一個Cube,把材質(zhì)球關(guān)聯(lián)到Cube上。如圖1.4-2所示:

Unlit Shader還是采用的Unity經(jīng)典的ShaderLab語法,還是熟悉的配方熟悉的味道。主要結(jié)構(gòu)依然是Shader{ SubShader { pass{} pass{} }, SubShader {}, FallBack }與標(biāo)準(zhǔn)的Unity Shader開發(fā)不同的是 URP Shader內(nèi)嵌HLSL的代碼,標(biāo)準(zhǔn)的是Cg的代碼,其它的差不多。

對于Unlit Shader有兩個SubShader,通過”ShaderModel”的版本來進(jìn)行區(qū)分 (我這邊的版本是4.5與2.0)。每個SubShader有3個Pass, Unlit Pass, Depth Only Pass, Meta Pass

Unlit Pass:?Unlit Shader用來繪制3D物體的主要pass;

Depth Only Pass:?Unlit Shader 用來做深度測試的Pass;

Meta Pass:?繪制物體的時候不會執(zhí)行,只有在做靜態(tài)光照烘焙的時候才會執(zhí)行;

?

2: URP PBR Shader 如何處理光照

分析完URP的Unlit Shader后,接下來分析PBR Shader, PBR Shader基于物理的光照,支持金屬度與粗超度美術(shù)工作流,反射與光澤度工作流,這些參數(shù)和標(biāo)準(zhǔn)PBR Shader一樣,來看下URP的PBR Shader。如圖1.4-4:

相比標(biāo)準(zhǔn)的PBR Shader而言,他整理的更清晰和規(guī)范,參數(shù)的意義都和標(biāo)準(zhǔn)的PBR一樣。和標(biāo)準(zhǔn)PBR Shader不同的是,它把兩種美術(shù)工作流放一起了。Workflow Mode來設(shè)置。接下來看下PBR Shader的結(jié)構(gòu),打開Lit.shader, 仍然也是ShaderLab語法內(nèi)嵌HLSL的Shader編程語言,結(jié)構(gòu)如下,如圖1.4-5所示:

圖1.4-5

與Unlit一樣Lit也是根據(jù)ShaderModel版本來選擇SubShader。Lit 每一個SubShader里面有7個pass, 作用如下:

ForwardLit Pass:?渲染3D物體, UniversalRenderPipeline.cs里面會根據(jù)名字來調(diào)用該P(yáng)ass, 所有的光照計算都會在這個Pass里面調(diào)用(GI + emission + Fog);

ShadowCaster Pass:?陰影投射Pass, 主要是用來做陰影計算;

GBuffer Pass:?當(dāng)采用延時渲染的時候會走的Pass, UniversalRenderPipeline.cs里面會根據(jù)名字來調(diào)用該P(yáng)ass。

Depth Only Pass:?Lit Shader 用來做深度測試的Pass;

DepthNormals Pass:?用戶繪制_CameraNormalTexture紋理的Pass;

Meta Pass:?繪制物體的時候不會執(zhí)行,只有在做靜態(tài)光照烘焙的時候才會執(zhí)行;

Universal2D Pass:?用于2D的向前渲染Pass;

?

URP 渲染管線內(nèi)部實現(xiàn)了(向前+延時)渲染管線,每次繪制的時候,來走不同的Pass,從這里看出來,和標(biāo)準(zhǔn)渲染管線不同,所有的光照都在一個pass里面計算完成了。接下來看下PBR Shader中的光照計算的代碼,打開LitForwardPass.hlsl, 主要PBR邏輯如下:

Step1: 初始化雙向分布函數(shù)BRDF:

Step2: 計算主光源MainLight 光照;

Step3: 計算處理GI;

Step4: 計算處理附加光源光照;

Step5: 處理自發(fā)光;

具體代碼大家可以到源碼中閱讀,本期的URP的干貨內(nèi)容暫時告一段落,更多的URP實戰(zhàn)與底層原理,我們會在VIP的視頻教程中有消息講解。關(guān)注我們,持續(xù)給大家分享一些架構(gòu)師進(jìn)階,渲染管線進(jìn)階的干貨內(nèi)容。



Unity--Unity--URP渲染管線核心機(jī)制分析(4)URP渲染管線Shader機(jī)制剖析的評論 (共 條)

分享到微博請遵守國家法律
广丰县| 宜良县| 台北市| 方正县| 汉阴县| 平顶山市| 丹江口市| 马龙县| 长丰县| 达孜县| 通海县| 珠海市| 贡觉县| 四会市| 南陵县| 普格县| 镇安县| 清水河县| 乳源| 肇庆市| 祁连县| 德庆县| 麟游县| 瓮安县| 南江县| 韶关市| 隆化县| 阿瓦提县| 平舆县| 克东县| 明光市| 江城| 丰宁| 大厂| 萍乡市| 南康市| 安丘市| 德庆县| 台州市| 太原市| 大化|