无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

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

21.Shader陰影效果

2023-06-11 17:44 作者:機(jī)智的小草yns  | 我要投稿

1.理論基礎(chǔ)

在Unity當(dāng)中,一般會(huì)采用陰影映射紋理(shadow map)實(shí)現(xiàn)陰影效果 。 ?

深度紋理:根據(jù)目標(biāo)與相機(jī)的距離,越近顏色越深,反之越亮。

陰影映射紋理,則是在燈光視角的深度紋理。


101的圖

很多效果可以通過深度圖來實(shí)現(xiàn),比如相交高亮,方向霧效,掃描效果,水體的深度效果等等。


傳統(tǒng)的陰影實(shí)現(xiàn)

把頂點(diǎn)位置變換到光源空間下,然后對(duì)陰影映射紋理進(jìn)行采樣,得到該位置的深度信息。如果紋理的深度<頂點(diǎn)的深度 , 則說明該點(diǎn)位于陰影中。

而在Unity 5中,使用的是屏幕空間的陰影映射技術(shù)(Screenspace Shadow Map)。屏幕空間的陰影映射原本是延遲渲染中產(chǎn)生陰影。(顯卡需要支持MRT)

與傳統(tǒng)陰影差不多,區(qū)別在于是延遲渲染,只計(jì)算屏幕空間內(nèi)陰影。

Unity的屏幕空間的陰影映射技術(shù)

使用ShadowCaster的Pass得到光源的陰影映射紋理以及攝像機(jī)的深度紋理

由兩者映射得到屏幕空間的陰影圖,然后對(duì)陰影圖采樣即可。


陰影映射紋理生成過程:

Unity把攝像機(jī)放到光源的位置上,然后調(diào)用該P(yáng)ass,由頂點(diǎn)變換得到光源空間位置,并保存深度信息到陰影映射紋理中。


屏幕空間的陰影圖生成過程:

從攝像機(jī)的深度紋理里采樣得到該fragment的深度值,利用矩陣變換,

視角空間->世界空間-> 光源空間坐標(biāo), 與對(duì)比光源的陰影紋理的深度對(duì)比。

如果坐標(biāo)深度>紋理深度, 則在陰影中。將陰影顏色記錄在陰影圖中。


以上的步驟,Unity都幫忙封裝好了,我只需要使用它提供的宏, 得到陰影圖,然后進(jìn)行采樣...


2.投射陰影

點(diǎn)光源的需要開啟陰影

生成ShadowMap,固定寫法,模式為ShadowCaster,使用到3個(gè)宏

代碼 前篇的Lighting_mult.shader上修改)


出現(xiàn)點(diǎn)光源的陰影

核心宏

V2F_SHADOW_CASTER
TRANSFER_SHADOW_CASTER_NORMALOFFSET
SHADOW_CASTER_FRAGMENT


3.接收陰影

對(duì)陰影圖采樣即可。

核心代碼

對(duì)于點(diǎn)光源 的陰影, 需要額外修改編譯宏 ,其他的不變


接收到方塊上陰影


核心宏

SHADOW_COORDS(n) ?聲明一個(gè)TEXCOORDn用于陰影采樣坐標(biāo)

TRANSFER_SHADOW(outputStruct o) ? 轉(zhuǎn)換陰影的uv坐標(biāo)

SHADOW_ATTENUATION(inputStruct i) ? 用來計(jì)算陰影值的, 相當(dāng)于亮度值 ?

完整代碼

https://github.com/smartgrass/MyCodes/blob/main/ShaderLearning/Lighting_mult_shadow.shader



21.Shader陰影效果的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
南木林县| 铜鼓县| 内乡县| 昭通市| 浦东新区| 罗城| 都昌县| 全椒县| 错那县| 九龙县| 隆昌县| 靖安县| 澎湖县| 文水县| 灵寿县| 武邑县| 敖汉旗| 鹿邑县| 崇左市| 报价| 深泽县| 潢川县| 霍邱县| 贵定县| 长汀县| 陆川县| 洪江市| 泸水县| 丹凤县| 修武县| 上栗县| 那坡县| 鄂托克前旗| 台北市| 卢氏县| 泸定县| 唐海县| 通山县| 东兴市| 阆中市| 阿图什市|