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

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

URP | 多光源陰影-陰影支持SRP Batcher

2022-02-22 12:30 作者:那個人真狗  | 我要投稿

前面?zhèn)z篇是基礎(chǔ),這個是目錄,B站不能增加目錄功能

目的

  • Shader支持SRP Batcher

  • Alpha Test 半透明模式支持陰影渲染問題。

效果

半透明

Alpha Test和Alpha Blending是兩種處理透明的方法。

擴(kuò)展 問 :他們有什么區(qū)別嗎?

Alpha Test

  • Alpha Test是不需要關(guān)閉ZWrite的。

  • 渲染隊列 ? 可以是2000

Alpha Test產(chǎn)生的效果也很極端,要么完全透明,即看不到,要么完全不透明。

  • 效果

Alpha Blending

  • 需要關(guān)閉ZWrite,渲染順序不能亂。

  • 渲染隊列 ? 3000 ?半透明物體

使用一個我們原來制作的一個Shader做的Alpha Blending效果 測試

下圖是關(guān)閉 ZWrite 倆個半透明物體疊加的效果

擴(kuò)展 如果不關(guān)閉出現(xiàn)什么問題?

  • 如果不關(guān)閉ZWrite,那么在進(jìn)行深度檢測的時候,它背后的物體本來是可以透過它被我們看到的,但由于深度檢測時大于它的深度就被剔除了,從而我們就看不到它后面的物體了。因此,我們需要保證物體的渲染順序是從后往前,并且關(guān)閉該半透明對象的ZWrite。

  • 測試結(jié)果

前面的半透明渲染會把后面遮擋住。

  • 因此,我們需要保證物體的渲染順序是從后往前,并且關(guān)閉該半透明對象的ZWrite

特效需要有平滑的過度,大部分使用這個模式。

  • 資料參考

    無法增加連接

【Unity Shaders】Alpha Test和Alpha Blending

使用SRP Batcher

在有就是產(chǎn)生的陰影沒有合并優(yōu)化,我們使用多光源就會渲染多次。


在有就是產(chǎn)生的陰影沒有合并優(yōu)化,我們使用多光源就會渲染多次。

我們使用SRP Batcher來合并渲染。

什么是SRP Batcher

  • SRP Batcher 是一個渲染循環(huán),可加速相同著色器變體的多種材質(zhì)在場景中的CPU渲染速度。

原理

  • Shader中的變體一致

  • 降低Set Pass Call的消耗

SRP Batcher 通過批處理(batching)—— 系列綁定(Bind)和繪制(Draw)GPU 命令,來減少DrawCalls之間的GPU 設(shè)置(工作量)

設(shè)置管線支持SRP Batcher

  • 首先在Pipeline Asset(渲染管線中)里勾選SRP Batcher。

  • 在下方勾選SRP Batcher

Shader 是否支持SRP Batcher

  • 在Shader界面我們可以看到是否支持這個效果,才會起作用。

    not compatible 是不支持

實(shí)現(xiàn)陰影

自定義陰影原理

  • 新建一個Pass 設(shè)置光照模式標(biāo)簽 改成 ?"ShadowCaster”

  • 定義頂點(diǎn)和片元著色器

頂點(diǎn)著色器階段

  • 我們要得到一個以投射專用的裁剪空間坐標(biāo),為了得到這坐標(biāo),

    我們需要模型的世界坐標(biāo),模型的世界法線燈光方向,然后使用函數(shù)

    ApplyShadowBias(float3 positionWS, float3 normalWS, float3 lightDirection)

    來得到的特殊的世界坐標(biāo),然后轉(zhuǎn)換到裁剪空間得到陰影投射專用的裁剪空間坐標(biāo)。

  • 然后確保陰影偏移后的位置不會超出裁剪空間。

擴(kuò)展

  • 其中這個新函數(shù)的是定義在Shadows.hlsl 下的,它的定義如下。

  • 函數(shù)

計算過程

  • 前把 官方陰影去掉。

  • 開啟前我們把公用變量屬性放到Pass外, 函數(shù)庫放到外面是因?yàn)槲覀冊诘诙€Pass也需要使用。

  • 連結(jié)構(gòu)體我們也放到Pass外

頂點(diǎn)著色器階段

  • 我們前讓這個Pass 簡單的有陰影。

效果 顯示有陰影了,

在Debug里我們看到陰影已經(jīng)使用SRP Batch了,

但是陰影是有問題的,拉近。

  • 或者使用平面看的明顯

我們要得到一個以投射專用的裁剪空間坐標(biāo)


這個函數(shù)需要三個參數(shù),那我們準(zhǔn)備好這三個參數(shù)。

使用函數(shù)計算出裁剪空間的坐標(biāo)。

然后在計算一下是否需要Z值反向,(比如unity編輯器下是DX11,是有Z反向的 )

來取頂點(diǎn) z值和 頂點(diǎn)w值 在乘 近裁剪面兩者之間取最小值;若未Z反向則取最大值。這樣得到的Z值在傳遞給GPU流水線下一個階段。


  • 效果

完成

完成

優(yōu)化結(jié)果

  • 現(xiàn)在只需要8次

代碼


實(shí)現(xiàn)Alpha Test剔除

屬性

定義一個變量控制Alpha變化過程。

使用_CUT_ON ,來開啟關(guān)閉效果

  • 定義變量

定義變量

定義一個開關(guān)是否開啟AlphaTest 效果

第一個Pass

頂點(diǎn)著色器階段

  • 這個是控制我們的Alpha通道的,對貼圖Alpha通道處理。

Clip 剔除

  • 原來輸出的Alpha通道數(shù)值是1. 現(xiàn)在改成我們貼圖的Alpha值。

  • No模式滑動條可以控制貼圖的顯示,

但是現(xiàn)在陰影沒有產(chǎn)生透過去效果。


陰影支持Alpha模式

這樣的模式很多實(shí)用在半透明物體上,比如樹葉等。

頂點(diǎn)著色器階段

因?yàn)槲覀兪堑诙€Pass里計算陰影,

那需要把我們貼圖的UV信息傳入,這里我們是因?yàn)樯厦姘呀Y(jié)構(gòu)體定義的變量放到Pass為這一個Pass也可以調(diào)用到。

片元著色器階段

使用開關(guān)判斷是否輸出AlphaTex

至此整體shader就完成了,陰影也支持 透明渲染, 它也兼容了SRP Batcher 。

  • 效果

總結(jié)

  • 對Alpha倆種方式的認(rèn)識和使用。倆種疊加方式的使用,

  • SRP Batcher 的學(xué)習(xí)使用,把公共屬性,放到Pass外,這樣第二個Pass使用的時候方便調(diào)用不用定義倆次。

    • 函數(shù)庫


  • 結(jié)構(gòu)體

  • 貼圖數(shù)據(jù)

  • CBUFFER_START

  • 使用第二個Pass制作陰影的時候始終不對,就是因?yàn)榘押甓x放到第一個Pass里了。

  • 陰影Pass實(shí)現(xiàn)過程。


URP | 多光源陰影-陰影支持SRP Batcher的評論 (共 條)

分享到微博請遵守國家法律
临西县| 谢通门县| 龙州县| 阿坝| 彩票| 永顺县| 沁源县| 巍山| 麟游县| 高密市| 宿迁市| 无极县| 互助| 田林县| 翁源县| 阿勒泰市| 柳州市| 宣城市| 小金县| 明水县| 景泰县| 潜江市| 乌拉特后旗| 台江县| 凤城市| 甘孜县| 北宁市| 商丘市| 平利县| 台中市| 柘荣县| 华坪县| 保德县| 岳阳县| 迭部县| 昌都县| 临漳县| 临颍县| 马尔康县| 太白县| 平果县|