内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

unity3d中如何使用屏幕空間改善shadowmap漏光

這篇文章主要介紹了unity3d中如何使用屏幕空間改善shadowmap漏光,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

成都創(chuàng)新互聯(lián)專注于湖南企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城開發(fā)。湖南網(wǎng)站建設(shè)公司,為湖南等地區(qū)提供建站服務(wù)。全流程按需策劃設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

前因

自從實(shí)時(shí)陰影發(fā)展到了shadowmap時(shí)代,漏光和 Shadow Acne就形影不離。除非你可以無(wú)腦極大提升shadowmap精度 或可以做到很短距離的實(shí)時(shí)陰影 否則并不好解決這常見問題。如下圖

unity3d中如何使用屏幕空間改善shadowmap漏光  
bias調(diào)大就漏光 ,bias調(diào)小就自陰影出錯(cuò)

動(dòng)態(tài)bias方案

我早年在網(wǎng)易引擎部面試的時(shí)候 總監(jiān)大佬問過我這問題。我當(dāng)年很得意,告訴他我自創(chuàng)并實(shí)現(xiàn)過demo的做法,計(jì)算shadowmap 不僅寫入深度 也寫入 投影表面的世界法線(或投影表面的SV_PrimitiveID 這個(gè)更省空間),這樣繪制陰影的時(shí)候就能根據(jù)自己表面的世界法線 是否與投影表面接近來判斷 是否自己投影給自己 如果是bias算的大些 否則算的小些。因?yàn)榧热籦ias 固定數(shù)值都不行,那就實(shí)現(xiàn)動(dòng)態(tài)bias,這樣邏輯上就成立。大佬冷靜的說,shadowmap本身就精度不足 你同尺寸數(shù)據(jù)也不能提升太多。(實(shí)際測(cè)試確實(shí)提升不太大),他接著小心翼翼地問道:你就不能在屏幕空間想想辦法?當(dāng)年的我除了ssao模仿的實(shí)現(xiàn)一次 根本沒靈活掌握各種其他SS技巧而且也沒經(jīng)驗(yàn),于是答不出來。但是看得出他的小心翼翼 仿佛再問一句就會(huì)泄露做法一般,我就印象深刻的記下:這個(gè)點(diǎn)可能很容易想出來有時(shí)間了就去嘗試?,F(xiàn)在剛好是時(shí)候了。

屏幕空間改善漏光方案

我想到屏幕空間上一個(gè)像素可以根據(jù)深度圖去檢查,他往光線方向上短距離內(nèi)是否有遮擋物,如果有那么應(yīng)該有陰影。于是我選擇把bias調(diào)大,如上圖左圖,然后想辦法去把漏的光補(bǔ)上。沒有選自陰影出錯(cuò)然后 把陰影消去是因?yàn)?,投影者不一定就在附近所以不能?jiǎn)單的消去陰影。但是 漏光處如果有投影一定是在附近所以更好查詢。先看效果很不錯(cuò)。

unity3d中如何使用屏幕空間改善shadowmap漏光  

 
屏幕空間優(yōu)化后 比2個(gè)bias最好效果結(jié)合一起還好  


這么大的提升 代碼量居然只要6句 采樣的也是已有的深度圖性能基本沒問題.代碼直接帶詳細(xì)說明。簡(jiǎn)單測(cè)試函數(shù)就寫在了 LightingMyStandard_GI 內(nèi),根據(jù)實(shí)際項(xiàng)目可放屏幕陰影計(jì)算shader,任何地方只要能獲取世界坐標(biāo)就可以

void LightingMyStandard_GI( SurfaceOutputStandard s, UnityGIInput data,inout UnityGI gi)    {              //當(dāng)前位置 往光線方向移動(dòng)0.1米 定位虛擬投影物 看看那里是否真有物體 如果有就算遮擋      float4 casterWpos =float4( data.worldPos +  data.light.dir * 0.1f,1);       //轉(zhuǎn)到裁剪空間      float4 casterNdc = mul(UNITY_MATRIX_VP, casterWpos);                        //轉(zhuǎn)到ndc空間      casterNdc /= casterNdc.w;                       //轉(zhuǎn)到采樣坐標(biāo)去看看這里實(shí)際屏幕深度多少      float2 samplePos = casterNdc.xy * 0.5 + 0.5;                        //獲得虛擬投影物位置實(shí)際深度      float depth = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, samplePos);             // 如果虛擬投影物 被遮擋 就算真有遮擋物 陰影為黑色 //實(shí)際項(xiàng)目 最好轉(zhuǎn)到 Linear01Depth(depth) * _ProjectionParams.z 比較真實(shí)距離 和 有效范圍內(nèi)才算遮擋                              if (depth > casterNdc.z) data.atten = 0;                           //以下為函數(shù)原內(nèi)容                         #if defined(UNITY_PASS_DEFERRED) && UNITY_ENABLE_REFLECTION_BUFFERS         gi = UnityGlobalIllumination(data, s.Occlusion, s.Normal);                        #else      Unity_GlossyEnvironmentData g = UnityGlossyEnvironmentSetup(s.Smoothness, data.worldViewDir, s.Normal, lerp(unity_ColorSpaceDielectricSpec.rgb, s.Albedo, s.Metallic));        gi = UnityGlobalIllumination(data, s.Occlusion, s.Normal, g);                        #endif          }

如果虛擬投影物 被遮擋 就算真有遮擋物 陰影為黑色 ,實(shí)際項(xiàng)目 最好轉(zhuǎn)到 Linear01Depth(depth) * _ProjectionParams.z 比較真實(shí)距離 和 有效范圍內(nèi)才算遮擋

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“unity3d中如何使用屏幕空間改善shadowmap漏光”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

網(wǎng)頁(yè)標(biāo)題:unity3d中如何使用屏幕空間改善shadowmap漏光
網(wǎng)頁(yè)路徑:http://www.rwnh.cn/article40/ihjieo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、域名注冊(cè)、網(wǎng)站設(shè)計(jì)、建站公司、定制開發(fā)營(yíng)銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
绥德县| 沈阳市| 呼和浩特市| 江北区| 桃源县| 和林格尔县| 霍邱县| 阿荣旗| 江安县| 平邑县| 津市市| 文成县| 封丘县| 登封市| 繁峙县| 博白县| 锡林浩特市| 红原县| 灌阳县| 郴州市| 文化| 延津县| 吉首市| 伊川县| 东乡族自治县| 蚌埠市| 同江市| 巩留县| 高平市| 巴南区| 阿拉善右旗| 建平县| 界首市| 永福县| 通渭县| 汤原县| 承德县| 定兴县| 响水县| 万宁市| 凤庆县|