女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文梳理LWRP渲染流程

電子設(shè)計(jì) ? 來源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2021-01-20 23:04 ? 次閱讀

渲染應(yīng)用階段

LWRP現(xiàn)在再unity2019已經(jīng)成為默認(rèn)的管線了,替代了原來的builtin管線,我當(dāng)前項(xiàng)目用的還是2018.4的lwrp,使用了一段時(shí)間,覺得還是想總結(jié)下lwrp的渲染流程。總結(jié)過程中也學(xué)到了不少東西,所以想在這里分享下我了解的lwrp管線

執(zhí)行應(yīng)用階段流程順序如下:

pIYBAGAIReWAKyi-AACfdwZ_mIg724.png

o4YBAGAIRi2Aepe2AAC4oK-Sqo8957.png

pIYBAGAIRmuASPEGAAARGfP7fTs383.png

lwrp從結(jié)果來看就是前向渲染的流程,沒有g(shù)buffer保存幾何信息。他實(shí)現(xiàn)原理是將不透明渲染,天空盒渲染,透明渲染加入CommandBuffer里,最終一次性提交渲染。其中如果需要Depth或Opaque圖片則可以拷貝到rt輸出到指定全局變量給開發(fā)用。

下面我想說下我了解的lwrp的詳細(xì)流程,設(shè)計(jì)的東西會(huì)比較多。也是看代碼的過程中學(xué)習(xí)了很多東西。

下面分享下:

lwrp整個(gè)渲染的主入口在LightweightRenderPipeline,他繼承的RenderPipeline,是rsp的渲染流程關(guān)鍵類

首先是構(gòu)造函數(shù)

PipelineSettings:這里會(huì)獲取LightweightRenderPipelineAsset(也就是我們外部傳入的管線的參數(shù))

ScriptableRenderer:srp渲染器,需要把LightweightRenderPipelineAsset傳給他。他是渲染核心,他會(huì)收集所有當(dāng)前幀要渲染的pass,以及他會(huì)擁有渲染相關(guān)的燈光和后處理等執(zhí)行方法。

PerFrameBuffer:每幀設(shè)置的緩存數(shù)據(jù)

_GlossyEnvironmentColor:主要用于PBR這塊的全局光照的顏色,在Lighting.hlsl的GlossyEnvironmentReflection,可以看到他主要是全局光照的高光部分顏色。

_SubtractiveShadowColor:主要用在除了主光源外的lightmap計(jì)算的陰影顏色。在SubtractDirectMainLightFromLightmap里使用

PerCameraBuffer:每幀攝像機(jī)的緩存數(shù)據(jù)

_InvCameraViewProj:視圖空間到投影空間的轉(zhuǎn)置矩陣,如果用原始矩陣乘以反向矩陣結(jié)果為identity矩陣。如果一些矩陣以一個(gè)特定的方式變換向量,反向矩陣可以將他們變換回去。例如worldToLoclaMatrix和localToWorldMatrix是互逆的。

_ScaledScreenParams:屏幕縮放參數(shù)

antiAliasing從asset中獲取msaaSampleCount

Shader.globalRenderPipeline = "LightweightPipeline";設(shè)置全局管線為LightweightPipeline

lightsDelegate:全局光照的回調(diào)

執(zhí)行到Render中執(zhí)行具體渲染流程:

SetupPerFrameShaderConstants:設(shè)置全局光照的數(shù)據(jù),設(shè)置PerFrameBuffer中的_GlossyEnvironmentColor和_SubtractiveShadowColor。

其中_GlossyEnvironmentColor是通過球形諧波方程決定顏色的,最后要轉(zhuǎn)到當(dāng)前顏色空間(gamma空間或線性空間)

_SubtractiveShadowColor則是直接賦值具體的除去主光源后的陰影顏色,只是也有最后轉(zhuǎn)到當(dāng)前顏色空間的轉(zhuǎn)換。

對(duì)當(dāng)前Render給過來當(dāng)前有哪些相機(jī)渲染的數(shù)據(jù)來進(jìn)行每個(gè)相機(jī)的渲染RenderSingleCamera。

每個(gè)相機(jī)中的渲染步驟如下:

CullResults.GetCullingParameters:獲取相機(jī)下的裁剪參數(shù),如果返回false說明沒有聶榮,不需要渲染這個(gè)相機(jī)。如果需要考慮到類似vr等情況需要區(qū)分左右眼的攝像機(jī)時(shí)需要把stereoAware設(shè)置為true。

CommandBuffer cmd = CommandBufferPool.Get(k_RenderCameraTag):這里從命令緩存池中獲取一個(gè)gl命令緩存,CommandBuffer主要用于收集一系列g(shù)l指令,然后之后執(zhí)行。

ProfilingSample是對(duì)指定名字做性能采樣。

InitializeCameraData:初始化攝像機(jī)數(shù)據(jù)。

cameraData.msaaSamples:如果數(shù)量大于1說明需要多重采樣

cameraData.isSceneViewCamera:這個(gè)是查看當(dāng)前要渲染的是否在unity的scene視圖

cameraData.isOffscreenRender:屏幕外渲染,如果攝像機(jī)的targettexture存在并且不是scene視圖則這個(gè)為true。

cameraData.isStereoEnabled:就是左右眼做區(qū)別的攝像機(jī),用于vr等

cameraData.isHdrEnabled:是否支持hdr,也就是高動(dòng)態(tài)范圍圖像,就是可以在高光情況下能看清一些光照細(xì)節(jié),提高細(xì)節(jié)渲染。

cameraData.postProcessLayer:后處理

cameraData.postProcessEnabled:是否開啟后處理

cameraData.renderScale:渲染縮放比例

cameraData.opaqueTextureDownsampling:降采樣

cameraData.isDefaultViewport:如果是正常的(0,0,1,1)則是默認(rèn)的

cameraData.maxShadowDistance:最大陰影范圍

cameraData.requiresDepthTexture:是否啟用深度紋理

cameraData.requiresOpaqueTexture:是否保存非透明顏色信息

cameraData.defaultOpaqueSortFlags:默認(rèn)的非透明渲染順序

SetupPerCameraShaderConstants

PerCameraBuffer._ScaledScreenParams:是一個(gè)vector4,包括相機(jī)像素的長寬和紋素

PerCameraBuffer._InvCameraViewProj:設(shè)置攝像機(jī)視角的逆矩陣,通過GL.GetGPUProjectionMatrix獲取到當(dāng)前gpu正確坐標(biāo)系的投影矩陣,再跟camera.worldToCameraMatrix視圖矩陣相乘得到視圖到投影的矩陣,再用Matrix4x4.Inverse獲取逆矩陣。

cullingParameters.shadowDistance:設(shè)置陰影距離,這里會(huì)根據(jù)攝像機(jī)最遠(yuǎn)渲染距離來獲得最遠(yuǎn)可達(dá)到的距離。

ScriptableRenderContext.ExecuteCommandBuffer(cmd):執(zhí)行命令緩存

cmd.Clear();清除緩存數(shù)據(jù)

CullResults.Cull:根據(jù)裁剪的參數(shù)cullingParameters和context指定的渲染指令得到裁剪的燈光,物體等。

InitializeRenderingData:初始化渲染相關(guān)數(shù)據(jù)

GetMainLight:獲取主光源,如果是直線光并且mainLightRenderingMode不為LightRenderingMode.PerPixel就是主光源

mainLightCastShadows:如果可見光存在而且陰影設(shè)置存在則為true

additionalLightsCastShadows:如果additionalLightsRenderingMode是LightRenderingMode.PerPixel并且可見光存在并且lightType是LightType.Spot且陰影存在則為true

InitializeLightData:初始化燈光數(shù)據(jù),這里設(shè)置了mainLightIndex(也就是GetMainLight獲取的),設(shè)置additionalLightsCount獲取疊加光源的數(shù)量,maxPerObjectAdditionalLightsCount最大疊加光源數(shù)量,shadeAdditionalLightsPerVertex就是是否是疊加光源,visibleLights可視光源,supportsMixedLighting支持混合光源

InitializeShadowData:初始化陰影數(shù)據(jù),如果有多光源會(huì)添加LWRPAdditionalLightData到光源的gameobject上,m_ShadowBiasData會(huì)設(shè)置陰影偏移和陰影發(fā)現(xiàn)偏移,主要用于解決自陰影的問題。supportsMainLightShadows支持主光源陰影 。mainLightShadowCascadesCount是陰影的級(jí)聯(lián)個(gè)數(shù),(mainLightShadowmapWidth、mainLightShadowmapHeight)主光源陰影貼圖的寬高。mainLightShadowCascadesSplit是陰影的級(jí)聯(lián)分割,supportsAdditionalLightShadows是否支持多光源陰影。additionalLightsShadowmapWidth、additionalLightsShadowmapHeight是多光源陰影貼圖的寬和高都是additionalLightsShadowmapResolution。supportsSoftShadows支持軟陰影

supportsDynamicBatching:是否支持動(dòng)態(tài)批處理,這個(gè)是lwrp的動(dòng)態(tài)批處理

設(shè)置完渲染數(shù)據(jù)后就是開始設(shè)置渲染的順序了:

renderer.Clear():再設(shè)置之前需要清理renderer的數(shù)據(jù),不然前一幀渲染的dc是不會(huì)清掉的,dc就會(huì)越來越高。

setupToUse.Setup(renderer, ref renderingData):默認(rèn)lwrp是用DefaultRendererSetup來設(shè)置的,當(dāng)然你也可以實(shí)現(xiàn)IRendererSetup然后傳入Render來自己實(shí)現(xiàn)。

DefaultRendererSetup:lwrp默認(rèn)會(huì)有一系列渲染過程。會(huì)再Setup中確定渲染的先后。

SetupPerObjectLightIndices設(shè)置每個(gè)對(duì)象光照信息

CreateRenderTextureDescriptor創(chuàng)建rt數(shù)據(jù)信息

GetCameraClearFlag獲取當(dāng)前攝像機(jī)清理方式,lwrp對(duì)這層做了一些處理,主要是對(duì)深度剔除做了一些選項(xiàng)

如果是渲染到紋理則用CreateLightweightRenderTexturesPass這個(gè)pass執(zhí)行一次渲染。

如果有渲染前要執(zhí)行的pass要實(shí)現(xiàn)IBeforeRender接口,并且可以多個(gè)pass

如果支持主光源陰影投放則執(zhí)行MainLightShadowCasterPass的pass

如果支持多光源陰影投放則執(zhí)行AdditionalLightsShadowCasterPass

之后執(zhí)行SetupForwardRenderingPass,這個(gè)pass是必然執(zhí)行的,設(shè)置攝像機(jī)到context里

如果支持深度貼圖獲取的話會(huì)執(zhí)行DepthOnlyPass(requiresDepthPrepass決定是否執(zhí)行他),這里會(huì)用一個(gè)rt保存深度貼圖新消息

如果支持屏幕空間陰影獲取,則會(huì)執(zhí)行ScreenSpaceShadowResolvePass,這里會(huì)用一個(gè)rt記錄屏幕空間中的陰影貼圖

然后執(zhí)行SetupLightweightConstanstPass,主要設(shè)置主光源和其他光源的顏色,位置以及其他屬性。如果不設(shè)置則會(huì)是默認(rèn)顏色和位置等信息。

然后執(zhí)行RenderOpaqueForwardPass,這個(gè)pass定義了兩個(gè)pass名,LightweightForward和SRPDefaultUnlit。然后再Execute申請(qǐng)cmd來做不透明渲染。

如果支持后處理則會(huì)執(zhí)行OpaquePostProcessPass,里面是申請(qǐng)一個(gè)臨時(shí)rt做相關(guān)不透明的后處理。

如果是相機(jī)是天空盒清除方式的話并且天空盒不是空的話則執(zhí)行DrawSkyboxPass,里面會(huì)繪制天空盒

如果需要天空盒處理之后執(zhí)行的話需要繼承IAfterSkyboxPass實(shí)現(xiàn)相關(guān)pass

如果是支持深度貼圖的話并且沒有執(zhí)行requiresDepthPrepass的話(就是前面執(zhí)行DepthOnlyPass的判斷)則會(huì)執(zhí)行CopyDepthPass,這里主要是拷貝深度貼圖到全局變量_CameraDepthAttachment中,shader可以直接獲取這個(gè)變量(如果有開深度貼圖獲取)

如果開啟了接收不透明貼圖的話則執(zhí)行CopyColorPass,這里主要是把不透明渲染后的顏色輸出到臨時(shí)rt中。

然后執(zhí)行RenderTransparentForwardPass,透明渲染方式

如果支持后處理則執(zhí)行TransparentPostProcessPass,也是一樣申請(qǐng)一個(gè)臨時(shí)rt做相關(guān)透明渲染的后處理。如果不需要并且不支持屏幕外渲染并且不是渲染到紋理的則要執(zhí)行FinalBlitPass,這里主要設(shè)置貼圖到全局變量_BlitTex,然后把顏色blit到內(nèi)置rt中

然后如果攝像機(jī)有IAfterRender的mono則會(huì)執(zhí)行pass中的GetPassToEnqueue方法。

最后還會(huì)有一個(gè)EndXRRenderingPass的渲染,這個(gè)是支持立體攝像機(jī)的情況下執(zhí)行的,主要是停止立體攝像機(jī)渲染

然后再到外面renderer.Execute(context, ref renderingData);也就是把所有pass都執(zhí)行一次。(前面只是加入到列表中,并沒有執(zhí)行每個(gè)pass的execute)

最后需要context.Submit來提交渲染,這時(shí)相應(yīng)的gpu才會(huì)根據(jù)cmd來執(zhí)行所有的pass

這樣整個(gè)渲染流程的應(yīng)用階段就算完成了,但是其實(shí)每個(gè)pass里面還有一些處理過程,我還是分到下一章再總結(jié)了!

來源:電子創(chuàng)新網(wǎng)

審核編輯黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 渲染
    +關(guān)注

    關(guān)注

    0

    文章

    75

    瀏覽量

    11114
  • Unity
    +關(guān)注

    關(guān)注

    1

    文章

    128

    瀏覽量

    22296
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    CPU渲染、GPU渲染、XPU渲染詳細(xì)對(duì)比:哪個(gè)渲染最快,哪個(gè)效果最好?

    動(dòng)畫渲染動(dòng)畫3D渲染技術(shù)需要應(yīng)對(duì)復(fù)雜的計(jì)算任務(wù)和精細(xì)的圖像處理,作為渲染技術(shù)人員,選擇合適的渲染模式,會(huì)直接影響制作效率和成品質(zhì)量。在主流的渲染
    的頭像 發(fā)表于 04-15 09:28 ?267次閱讀
    CPU<b class='flag-5'>渲染</b>、GPU<b class='flag-5'>渲染</b>、XPU<b class='flag-5'>渲染</b>詳細(xì)對(duì)比:哪個(gè)<b class='flag-5'>渲染</b>最快,哪個(gè)效果最好?

    2D圖形渲染緩慢怎么加快?

    我有個(gè)圖形應(yīng)用程序,它似乎渲染屏幕的速度很慢。按下屏幕后,通常需要相當(dāng)長的時(shí)間來更新,大約 50 或 100 毫秒。 在應(yīng)用程序啟動(dòng)時(shí),我看到條錯(cuò)誤消息“GDK 無法創(chuàng)建 GL 上下文,回退
    發(fā)表于 04-02 06:46

    HarmonyOS應(yīng)用高負(fù)載場(chǎng)景分幀渲染

    ,可以采用分幀渲染技術(shù),將原本在幀內(nèi)加載的數(shù)據(jù)分散到多幀中逐步加載,從而減輕單幀的渲染壓力。不過,分幀渲染需要開發(fā)者精確計(jì)算每幀加載的數(shù)據(jù)量,操作較為復(fù)雜,因此建議僅在性能瓶頸明顯且
    的頭像 發(fā)表于 03-25 10:28 ?392次閱讀
    HarmonyOS應(yīng)用高負(fù)載場(chǎng)景分幀<b class='flag-5'>渲染</b>

    探索物流CEO大屏及供應(yīng)鏈大屏是如何做好雙11保障

    大屏的穩(wěn)定性。 ,供應(yīng)鏈大屏全鏈路流程圖 保障的首要步驟是繪制供應(yīng)鏈大屏全鏈路流程圖。在梳理出概覽圖之后,深入指標(biāo)加工的各個(gè)細(xì)節(jié)去發(fā)現(xiàn)問題,然后是因地制宜的制定保障方案。 下邊是
    的頭像 發(fā)表于 03-12 16:35 ?238次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>探索物流CEO大屏及供應(yīng)鏈大屏是如何做好雙11保障

    從CPU到GPU:渲染技術(shù)的演進(jìn)和趨勢(shì)

    渲染技術(shù)是計(jì)算機(jī)圖形學(xué)的核心內(nèi)容之,它是將三維場(chǎng)景轉(zhuǎn)換為二維圖像的過程。渲染技術(shù)直在不斷演進(jìn),從最初的CPU渲染到后來的GPU
    的頭像 發(fā)表于 02-21 11:11 ?610次閱讀
    從CPU到GPU:<b class='flag-5'>渲染</b>技術(shù)的演進(jìn)和趨勢(shì)

    GPU渲染才是大勢(shì)所趨?CPU渲染與GPU渲染的現(xiàn)狀與未來

    在3D建模和渲染領(lǐng)域,隨著技術(shù)的發(fā)展,CPU渲染和GPU渲染這兩種方法逐漸呈現(xiàn)出各自獨(dú)特的優(yōu)勢(shì),并且在不同的應(yīng)用場(chǎng)景中各有側(cè)重。盡管當(dāng)前我們處在個(gè)CPU
    的頭像 發(fā)表于 02-06 11:04 ?531次閱讀
    GPU<b class='flag-5'>渲染</b>才是大勢(shì)所趨?CPU<b class='flag-5'>渲染</b>與GPU<b class='flag-5'>渲染</b>的現(xiàn)狀與未來

    讀懂芯片半導(dǎo)體梳理解析

    當(dāng)下切都在圍繞國產(chǎn)替代展開,加上高層發(fā)話:推進(jìn)中國式現(xiàn)代化,科技要打頭陣。科技創(chuàng)新是必由之路。那么當(dāng)下市場(chǎng)主線清晰——科技自主可控! 半導(dǎo)體行業(yè)是自主可控最核心的領(lǐng)域,近年來技術(shù)的進(jìn)步日新月異
    的頭像 發(fā)表于 11-27 11:50 ?1345次閱讀

    如何優(yōu)化SSR渲染性能

    服務(wù)器端渲染(SSR)是種將前端頁面在服務(wù)器端生成的技術(shù),它可以提高首屏加載速度,改善SEO,并提供更好的用戶體驗(yàn)。然而,SSR也可能帶來性能挑戰(zhàn),尤其是在處理大量請(qǐng)求時(shí)。以下是些優(yōu)化SSR
    的頭像 發(fā)表于 11-18 11:31 ?849次閱讀

    簡述大前端技術(shù)棧的渲染原理

    應(yīng)用開發(fā):Android、iOS、鴻蒙(HarmonyOS)等; ?Web前端框架:Vue、React、Angular等; ?小程序開發(fā):微信小程序、京東小程序、支付寶小程序等; ?跨平臺(tái)解決方案:React Native、Flutter、Taro、Weex等。 什么是渲染 ?
    的頭像 發(fā)表于 11-07 10:11 ?564次閱讀

    SOLIDWORKS 2025版本使用了全新的渲染引擎

    的革新,其中顯著的變化莫過于其全新引入的渲染引擎。這革命性的技術(shù)更新,不僅大幅提升了渲染的質(zhì)量和速度,更讓設(shè)計(jì)師們能夠以有效作出令人驚艷的視覺效果。
    的頭像 發(fā)表于 10-14 15:42 ?824次閱讀

    動(dòng)畫渲染用GPU還是CPU的選擇思路

    對(duì)話Imagination中國區(qū)董事長:以GPU為支點(diǎn)加強(qiáng)軟硬件協(xié)同,助力數(shù)【白皮書下載】分布式功能安全的創(chuàng)新與突破本文來源:渲染101動(dòng)畫渲染動(dòng)畫渲染個(gè)計(jì)算密集型的過程,需要強(qiáng)大
    的頭像 發(fā)表于 09-28 08:05 ?664次閱讀
    動(dòng)畫<b class='flag-5'>渲染</b>用GPU還是CPU的選擇思路

    講清游戲引擎技術(shù):前向渲染與延遲渲染

    在游戲的絢麗世界中,燈光如同位巧奪天工的畫家,用其獨(dú)特的手法為每個(gè)場(chǎng)景披上神秘而誘人的外衣。不論是在追求真實(shí)質(zhì)感的3A級(jí)大作中,還是在充滿奇幻色彩的非現(xiàn)實(shí)渲染作品中,燈光始終是那不可或缺的魔法之
    的頭像 發(fā)表于 07-26 14:47 ?603次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>講清游戲引擎技術(shù):前向<b class='flag-5'>渲染</b>與延遲<b class='flag-5'>渲染</b>

    串口屏ModBus開發(fā)流程

    這里接前章節(jié),繼續(xù)迪屏的開發(fā),前章主要講解基礎(chǔ)開發(fā)流程,此章節(jié)開始講解迪ModBus協(xié)議棧的使用方法。前文指路:《迪串口屏基礎(chǔ)GUI
    的頭像 發(fā)表于 07-19 08:21 ?1014次閱讀
    迪<b class='flag-5'>文</b>串口屏ModBus開發(fā)<b class='flag-5'>流程</b>

    串口屏基礎(chǔ)GUI開發(fā)流程

    前言手頭有款閑置串口屏,其型號(hào)為,是款7寸800*480分辨率的電容觸摸屏。這款屏幕是支持6~36V供電的,自帶3個(gè)串口輸出,分別是UART2,UART4,UART5。其中UART2
    的頭像 發(fā)表于 07-05 08:21 ?1299次閱讀
    迪<b class='flag-5'>文</b>串口屏基礎(chǔ)GUI開發(fā)<b class='flag-5'>流程</b>

    深入理解渲染引擎:打造逼真圖像的關(guān)鍵

    在數(shù)字世界中,圖像渲染是創(chuàng)造逼真視覺效果的核心技術(shù)。渲染引擎,作為這過程中的關(guān)鍵組件,負(fù)責(zé)將二維或三維的模型、紋理、光照等數(shù)據(jù)轉(zhuǎn)化為人們?nèi)庋劭梢姷亩S圖像。本文將深入探討渲染引擎的工
    的頭像 發(fā)表于 06-29 08:28 ?584次閱讀
    深入理解<b class='flag-5'>渲染</b>引擎:打造逼真圖像的關(guān)鍵