【Unity Shader入門精要】— 高階篇
內容會持續更新,有錯誤的地方歡迎指正,謝謝!
引言
本書還有高階篇、擴充套件篇,這篇文章我們來說說高階篇。考慮到內容較多,我在高階篇、擴充套件篇部落格裡只列一些提綱和我自己的一些總結、領悟,具體實現方法,希望各位看客,購買樂樂女神的書,好好琢磨研究~
螢幕後處理效果
螢幕後處理,通常指的是在渲染完整場景得到螢幕影象後,再對這個影象進行一系列操作,實現各種螢幕特效。可以為遊戲畫面新增更多藝術效果。可實現低階的邊緣檢測、高斯模糊、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.再談幀偵錯程式
相關文章
- Unity Shader 入門精要 筆記(1)Unity筆記
- 《Unity Shader入門精要》自學筆記(五)第八章 透明效果Unity筆記
- Re:《Unity Shader入門精要》13.3全域性霧效--如何從深度紋理重構世界座標Unity
- .NET高階除錯系列-Windbg除錯入門篇高階除錯
- 高階篇:獨立開發者 5 分鐘入門 ASO
- Unity Shader 00 - 梳理 Unity Shader 的基本結構Unity
- 學習筆記|AS入門(五) 高階控制元件篇(下)筆記控制元件
- 學習筆記|AS入門(五) 高階控制元件篇(中)筆記控制元件
- 學習筆記|AS入門(五) 高階控制元件篇(上)筆記控制元件
- JavaScript 高階函式快速入門JavaScript函式
- .NET 入門到高階路線
- React 高階元件(HOC)入門指南React元件
- Elm入門實踐(三)——進階篇
- unity 統一替換shaderUnity
- 【Unity3D Shader程式設計】之二 雪山飛狐篇:Unity的基本Shader框架寫法&顏色、光照與材質Unity3D程式設計框架
- React高階元件入門與常用用法React元件
- Java 高階 --- 多執行緒快速入門Java執行緒
- springCloud+docker從入門到高階SpringGCCloudDocker
- 【更新中】DOS命令從入門到高階
- [譯] 強化學習入門篇:Simmer 模擬平臺高階使用技巧強化學習
- unity shader 溶解,上下左右,cutoffUnity
- nginx高階篇rewriteNginx
- SparkStreaming入門教程(三)高階輸入源:Flume、KaSpark
- Unity3D高階-AssetBundle使用Unity3D
- Tessellation Shader的GLSL入門實現: 平面
- Gradle入門系列(二)——groovy高階語法Gradle
- iOS Storyboard入門及一些高階使用iOS
- Java 從入門到高階學習路線Java
- Django 自定義管理命令:從入門到高階Django
- unity之入門經驗Unity
- Unity3D入門Unity3D
- Jmeter(五十一) - 從入門到精通高階篇 - jmeter之運動戰(詳解教程)JMeter
- 【Unity Shaders】Mobile Shader Adjustment—— 什麼是高效的ShaderUnity
- Linux Capabilities 入門教程:進階實戰篇Linux
- Shader從入門到跑路:自定義紋理輸入
- Unity 的 Surface Shader有關記錄Unity
- Unity3D 透明物體ShaderUnity3D
- MySQL 高階特性篇教程MySql