【Unity Shader入門精要】— 高階篇

陳雲佳發表於2017-11-04

內容會持續更新,有錯誤的地方歡迎指正,謝謝!

引言

本書還有高階篇、擴充套件篇,這篇文章我們來說說高階篇。考慮到內容較多,我在高階篇、擴充套件篇部落格裡只列一些提綱和我自己的一些總結、領悟,具體實現方法,希望各位看客,購買樂樂女神的書,好好琢磨研究~

螢幕後處理效果

螢幕後處理,通常指的是在渲染完整場景得到螢幕影象後,再對這個影象進行一系列操作,實現各種螢幕特效。可以為遊戲畫面新增更多藝術效果。可實現低階的邊緣檢測、高斯模糊、Bloom效果(讓螢幕中較亮的區域擴散到周圍的區域中)、低階的運動模糊等效果。

復變中的卷積知識應用於邊緣檢測和高斯模糊。

使用GrabPass命令或OnRederImage函式來獲取當前螢幕影象,Unity會把這個螢幕影象放到一張和螢幕解析度等同的渲染紋理中,下面我們可在自定義的Pass中把它們當成普通的紋理來處理。

使用深度和法線紋理實現特定的螢幕後處理特效

可實現更高階的運動模糊、全域性霧效、高階的邊緣檢測等效果。深度和法線紋理在螢幕特效的實現中往往扮演了重要的角色!

非真實感渲染

使用一些渲染方法,使得畫面達到和某些繪畫風格相似的效果:卡通、水彩效果、素描。

這裡寫圖片描述
卡通風格的渲染效果。

這裡寫圖片描述
卡通風格的渲染效果。

這裡寫圖片描述
素描風格的渲染效果。

使用噪聲

通過噪聲紋理獲得隨機數,可實現消融效果、波光粼粼的水波效果、不均勻霧效。

這裡寫圖片描述
噪聲紋理的一種

這裡寫圖片描述
消融效果常見於遊戲中的角色死亡、地圖燒燬等效果。這這些效果中,消融往往從不同的區域開始,並向看似隨機的方向擴張,最後整個物體都將消失不見

這裡寫圖片描述
在模擬實時水面的過程中,我們往往也會使用噪聲紋理。為了模擬水不斷流動的效果,我們會使用和時間相關的變數來對噪聲紋理進行取樣,當得到法線資訊後,再進行正常的反射+折射計算,得到最後的水面波動效果。我們將使用一個由噪聲紋理得到的法線貼圖,實現一個包含菲涅耳發射的水面效果。

這裡寫圖片描述
可以模擬一種不均勻的霧效,同時讓霧不斷飄動,使霧看起來更加縹緲。

Unity中的渲染優化技術

在做手機遊戲時,一定要時刻把優化謹記在心,不考慮優化,那麼結果會慘不忍睹~

影響效能的因素

我們可以把造成遊戲效能瓶頸的主要原因分成以下幾個方面:
1)CPU
過多的draw call
複雜的指令碼或者物理模擬
2)GPU
頂點處理(過多的頂點、過多的逐頂點計算)
片元處理(過多的片元、過多的逐片元計算)
3)頻寬
使用了尺寸很大且未壓縮的紋理
解析度過高的幀快取(針對圖片而言)

對應的優化技術

具體內容參考樂樂女神的書P314—P324

1)CPU優化
使用批處理技術減少draw call 數目。
2)GPU優化
減少需要處理的頂點數目(優化幾何體、使用模型的LOD技術、使用模型的LOD技術、使用遮擋剔除技術)
減少需要處理的片元數目(控制繪製順序、警惕透明物體、減少實時光照)
減少計算複雜度(使用Shader的LOD技術、程式碼方面優化)
3)節省記憶體頻寬
減少紋理大小
利用解析度縮放
使用模型的LOD技術

Unity中的渲染分析工具

1.渲染統計視窗:也就是點選Game視窗的Stats按鈕會顯示出的視窗
這裡寫圖片描述

這裡寫圖片描述
這裡寫圖片描述
屬性解釋如上表~

2.效能分析器的渲染區域

這裡寫圖片描述

3.再談幀偵錯程式

這裡寫圖片描述

相關文章