結合Projector和Rendertexture實現(xiàn)實時陰影及軟陰影效果

說到實時陰影的實現(xiàn)烟阐,一般比較容易想到使用ShadowMap,通過投射燈光空間的深度圖掷贾,并在投射物體上進行深度比較,判斷是否處于陰影的范圍荣茫,以此來渲染陰影想帅。深度圖投射到接受陰影的物體上的效果如圖所示:


深度圖投射

你所需要做的就是在燈光空間渲染一張深度紋理,并投射到接受陰影的物體上啡莉,并和接受陰影的物體上對應像素位置的深度(燈光空間)進行比較港准,來確定當前像素是否處于陰影即可旨剥,此外還要考慮深度圖的精度以及以此會造成的ZFighting等,當然這并不是本文討論的重點浅缸。

本文主要介紹一種直接投射燈光空間攝像機的Rendertexture來實現(xiàn)陰影的方法轨帜,并將在稍后將其和projector結合。當然同時熟悉這兩項技術的開發(fā)者應該已經清楚衩椒,使用projector實現(xiàn)陰影意味著你將會消耗額外的drawcall蚌父,實際上被投射projector并且未在shader中使用"IgnoreProjector"="true"的物體都會在自身shader渲染完(也可能是渲染前,具體看自身渲染隊列和projector的shader的渲染隊列的先后順序)后再次使用projector的shader渲染一次毛萌。

首先比較一下這種技術和shadowmap技術苟弛,實際上個人感覺很大程度上兩者的技術其實差不多,都需要用到屏幕投影阁将,只不過shadowmap投射的是深度圖(深度緩沖)膏秫,而本文介紹的是直接投射屏幕紋理(幀緩沖),因此投射的紋理是帶Alpha通道的做盅,


注意燈光空間的攝像機背景顏色的Alpha因為0缤削,否則會把背景色也投射到接受陰影的物體上

和shadowmap不同的是,燈光空間的攝像機應該只看到投射陰影的物體:


此時投射后的效果大致如圖所示:


當然使用這種方式投射rendertexture必然造成的一個問題是言蛇,由于沒有投射接受陰影的平面僻他,導致一旦投射陰影的物體穿透接受陰影的物體時會造成陰影的穿幫:


陰影投射物體穿透陰影接受物體

接受陰影物體Shader主要實現(xiàn)代碼:


其中viewMatrix為燈光空間攝像機的worldToCameraMatrix,projMatrix為燈光空間攝像機的投影矩陣腊尚。

當然使用這種方式實現(xiàn)陰影的不足之處在于需要明確的知道投射陰影的物體和接受陰影的物體吨拗。

接下來將嘗試將其與Projector結合,注意之前已經討論過婿斥,使用projector意味著額外的drawcall劝篷,尤其是場景中物件很多且全部都是分離的物體時,不建議使用這種方式民宿。當然如果場景中只有極少部分物體需要接受陰影娇妓,比如只有主要地形,則不妨可以嘗試使用這種方式活鹰,因為使用projector哈恰,你可以很方便的在shader中加入IgnoreProjector標簽來忽略投影機的作用,或者直接在projector上修改projector影響的層志群。

從unity標準資源包中的projector shader我們大致可以了解着绷,projector shader中需要兩個4階矩陣,分別為_Projector和_ProjectorClip锌云,其中后者主要用于近遠裁面的淡入淡出荠医,并不是必須的。而前者的_Projector,注意這個矩陣應該區(qū)別于攝像機的projection矩陣(盡管攝像機和projector在很多參數(shù)上很相似)彬向,原因是官方的projector shader中直接通過:o.uvShadow = mul (_Projector, vertex);計算得到投影紋理坐標兼贡,這意味著_Projector矩陣應該同時實現(xiàn)將vertex轉換到世界空間,再轉換到projector的局部空間娃胆,最后轉換到projector的投影空間的功能遍希,所以其性質應該類似UNITY_MATRIX_MVP矩陣,所以使用projector實現(xiàn)投射rendertexture的效果缕棵,只需要添加一個腳本孵班,其會創(chuàng)建一個攝像機涉兽,并使用projector的參數(shù)招驴,并將這個攝像機的rendertexture傳遞給projector的material,具體實現(xiàn)如下:


其中_FadeTex是一張表示陰影衰減的貼圖枷畏,其r别厘、g通道效果如下:


這是實現(xiàn)后的陰影效果:


這里由于使用的RT是原始攝像機尺寸的1/2所以陰影質量有所下降

另外由于投射的是帶Alpha通道的Rendertexture,意味著可以方便的對其使用模糊shader完成模糊效果拥诡,這里是我自己編寫的模糊腳本效果圖:


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末触趴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子渴肉,更是在濱河造成了極大的恐慌冗懦,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仇祭,死亡現(xiàn)場離奇詭異披蕉,居然都是意外死亡,警方通過查閱死者的電腦和手機乌奇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門没讲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人礁苗,你說我怎么就攤上這事爬凑。” “怎么了试伙?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵嘁信,是天一觀的道長。 經常有香客問我疏叨,道長潘靖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任考廉,我火速辦了婚禮秘豹,結果婚禮上,老公的妹妹穿的比我還像新娘昌粤。我一直安慰自己既绕,他們只是感情好啄刹,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凄贩,像睡著了一般誓军。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疲扎,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天昵时,我揣著相機與錄音,去河邊找鬼椒丧。 笑死壹甥,一個胖子當著我的面吹牛,可吹牛的內容都是我干的壶熏。 我是一名探鬼主播句柠,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼棒假!你這毒婦竟也來了溯职?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤帽哑,失蹤者是張志新(化名)和其女友劉穎邻寿,沒想到半個月后进鸠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肩袍,經...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡葛账,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了佳头。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹰贵。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖康嘉,靈堂內的尸體忽然破棺而出碉输,到底是詐尸還是另有隱情,我是刑警寧澤亭珍,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布敷钾,位于F島的核電站,受9級特大地震影響肄梨,放射性物質發(fā)生泄漏阻荒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一众羡、第九天 我趴在偏房一處隱蔽的房頂上張望侨赡。 院中可真熱鬧,春花似錦、人聲如沸羊壹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽油猫。三九已至稠茂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間情妖,已是汗流浹背睬关。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留毡证,地道東北人电爹。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像情竹,于是被迫代替她去往敵國和親藐不。 傳聞我的和親對象是個殘疾皇子匀哄,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內容

  • 111. [動畫系統(tǒng)]如何將其他類型的動畫轉換成關鍵幀動畫秦效? 動畫->點緩存->關鍵幀 112. [動畫]Unit...
    胤醚貔貅閱讀 13,014評論 3 90
  • Why Bothers? 為什么已經有ShaderForge這種可視化Shader編輯器涎嚼、為什么Asset Sto...
    DonaldW閱讀 76,117評論 16 183
  • 我們需要的是真正有用的知識阱州。知識改變命運,被大眾所熟知法梯,正因為熟知苔货,大家也并沒有去探求這句話真正的含義。一股腦的學...
    李陽_98d1閱讀 162評論 0 0
  • UIButton共有三個相關屬性:1.contentEdgeInsets2.titleEdgeInsets3.im...
    啃手高手閱讀 15,059評論 22 56
  • 不知道你們有沒有過這種體驗诈茧?每次有一個任務必須要完成的時候,常常在截止時間之前才開始準備捂掰,那個時候感覺自己效率比以...
    尋野見閱讀 426評論 0 5