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

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

URP | 物體多光源

2022-01-11 11:58 作者:那個人真狗  | 我要投稿

實(shí)現(xiàn)效果

效果

制作思路

默認(rèn)管線

使用多光源計(jì)算,需要倆個Pass渲染光照效果,第一個Pass計(jì)算平行光,第二個Pass計(jì)算點(diǎn)光源,然后第二個Pass疊加到前面。

注意:平行光是沒有光的是衰減,點(diǎn)光源需要考慮光的衰減


URP管線

多光源處理方式大改,不再像Built-in管線那樣死板,全部由Unity的光照路徑?jīng)Q定。

現(xiàn)如今是由URP管線的函數(shù)收集好場景中所有的光照信息,(多個燈的信息)

再傳輸給Pass,由我們開發(fā)者在Pass中決定采用那些光源進(jìn)行光照計(jì)算 ,

計(jì)算完在疊加到光源結(jié)果上。


優(yōu)點(diǎn):

URP這樣處理確實(shí)會降低drawcall來提升明顯的性能 ,雖然會打破合批,但總體來說性能肯定更好

URP管線使用到函數(shù)

  1. 我們使用上面學(xué)習(xí)到的獲取光照函數(shù),GetMainLight()函數(shù)獲取主光源

  2. 使用 GetAdditionalLightsCount() 函數(shù) 獲取副光源個數(shù)

  3. GetAdditionalLight(index,WS_Pos)函數(shù) ? 獲取其它的副光源世界位置

    iindex為燈光id編號,i.positionWS 頂點(diǎn)世界位置。

制作過程

標(biāo)簽管線

使用上面的漫反射Shader

  1. 修改渲染層級

2. 增加變量屬性

公用變量

注意: 第一個知識點(diǎn) ? HLSLINCLUDE ?的使用

3. 使用 HLSLINCLUDE 語法 ?把公共字段放進(jìn)去,包括 CBuffer

詳細(xì) 語法 查看

URP | 基礎(chǔ)CG和HLSL區(qū)別


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

4. 頂點(diǎn)著色器階段,輸入信息頂點(diǎn)結(jié)構(gòu)體,輸出片元結(jié)構(gòu)體


擴(kuò)展 ?Core函數(shù)

VertexPositionInputs ?VertexNormalInputs 核心的函數(shù)

在 Core 函數(shù)庫里 ?有倆個結(jié)構(gòu)體,是官方給我們創(chuàng)建的好的,

看一下結(jié)構(gòu)體里有那些內(nèi)容

  • 第一個函數(shù) 獲取頂點(diǎn)位置信息,輸出世界空間位置,視圖空間等等。

  • 第二個函數(shù) 獲取頂點(diǎn)法線信息,輸出 世界空間下法線信息,

這里有倆個函數(shù)

輸入 ?法線信息,和 切線信息

輸出 ? 世界空間下法線信息, ? 世界空間下切線信息,世界空間下副切線信息。

下圖是詳細(xì)介紹,是那些空間關(guān)系

資料參考

https://blog.csdn.net/kan464872327/article/details/109605639

頂點(diǎn)階段

注意 : 第二個 關(guān)鍵知識點(diǎn) VertexPositionInputs ? ? VertexNormalInputs

5. 在頂點(diǎn)階段計(jì)算出片元結(jié)構(gòu)體的信息,使用上面介紹的函數(shù)

計(jì)算完成


片元著色器階段

在片元著色器階段是正式開始計(jì)算。

  • 前把頂點(diǎn)著色器階段的數(shù)據(jù)傳入。

  • 采樣貼圖

  • 下面計(jì)算 主光漫反射 效果

漫反射 = ? 主光的顏色,顏色貼圖,漫反射顏色,以及 NdaotL。

  • 在計(jì)算高光部分

輸出顏色

  • 效果

多光源計(jì)算

  • 場景多增加幾個點(diǎn)光源,

現(xiàn)在還是沒有效果,

  • 現(xiàn)在需要我們的開關(guān),增加開關(guān) 變量

  • 使用判斷的語句,如果開啟就執(zhí)行多光源計(jì)算

????前獲取 有多少個副光源,顏色就疊加幾次使用for循環(huán)

????這部分獲取其他副光源的世界空間的位置信息。

  • 計(jì)算漫反射和高光

    這一部分和上面的一樣。

注意 : light.distanceAttenuation * light.shadowAttenuation 這一部分是計(jì)算點(diǎn)光源的距離衰減和陰影衰減

在計(jì)算高光。

  • 計(jì)算完的顏色與原來的顏色疊加就可以了,

  • 看一下切換多光源的效果

原代碼

現(xiàn)在這個計(jì)算有倆部分代碼是重復(fù)的。優(yōu)化可以把重復(fù)的使用函數(shù)調(diào)用。


總結(jié)

  • HLSLINCLUDE ?的使用 ?這一部分是一開始知道,沒有深入理解,

  • HLSLINCLUDE的使用,可以把公共變量放進(jìn)去,或者公共結(jié)構(gòu)體等,如果多個pass這個方法很好用。

  • Core函數(shù) 的使用,里面給我們封裝好了函數(shù),直接調(diào)用就可以。

  • 詳細(xì)參考

    https://blog.csdn.net/kan464872327/article/details/109605639

  • 多光源效果計(jì)算,主要是獲取其他光源的位置信息,每個燈光在計(jì)算一次。

    主要有倆個函數(shù)

    GetAdditionalLight()

    GetAdditionalLightsCount()

問題: 場景中增加多個點(diǎn)光源的時候出現(xiàn)錯誤,

注意事項(xiàng)

URP管線中,點(diǎn)光源不支持實(shí)時陰影,如果想實(shí)現(xiàn)點(diǎn)光源陰影采用光照烘焙

注意 :點(diǎn)光源和聚光燈都不支持間接反射陰影。


想要副光源也能夠產(chǎn)生陰影,需要先在URP管線的Inspector面板下為Additional Lights勾選上Cast Shadows。

下一篇解決。


URP | 物體多光源的評論 (共 條)

分享到微博請遵守國家法律
商丘市| 上高县| 海兴县| 芦溪县| 双辽市| 屏山县| 菏泽市| 确山县| 德阳市| 金湖县| 皋兰县| 汶上县| 淳安县| 彭阳县| 衡阳县| 高安市| 油尖旺区| 淮阳县| 中江县| 府谷县| 望江县| 永靖县| 蛟河市| 中方县| 锡林浩特市| 达拉特旗| 南漳县| 本溪市| 郓城县| 六枝特区| 乌兰察布市| 汪清县| 永嘉县| 怀化市| 阳城县| 云和县| 开封县| 叶城县| 麦盖提县| 白沙| 岫岩|