在Unity中做一个淡入式的屏幕虚化
屏幕虛化是非常簡單的屏幕后處理特效之一,它的基本做法是對圖片中的像素進行加權平均,也就是讓每個像素的顏色都或多或少的受到周圍像素顏色的影響,進而模糊畫面,產生擼多了的效果,網上屏幕虛化的教程很多,在此就不再贅述了。
?
相較傳統的“咔嚓虛化”,“淡入式虛化”的差別是:
1、前戲足,過渡自然,不生硬。
?
?
2、分擔了下GPU的DrawCall,將DC的峰值稍稍降低了些。
?
?
?
當然,“咔嚓虛化”和“淡入式虛化”這個名字是我起的,知道意思就行,不用較真。
________________________________________
其實,“淡入式虛化”與“咔嚓虛化”本質上沒有區別,只是把多次虛化的動作放在了Coroutine中,大概流程是這樣的:
OnRenderImage函數調用時,保存一張屏幕截圖,并激活淡入式虛化。
↓
在Coroutine中,按照預設的頻次迭代虛化屏幕截圖。
↓
達到預設的虛化次數后,停止虛化并結束Coroutine。
到這里就講完了,實現過屏幕虛化的朋友肯定已經明白了,再見。
?
如果對于屏幕虛化還不甚了解,或者自己以后年紀大了忘了思路,可到后面看一下幾個關鍵點來輔助回憶,請吧。
本文討論的兩種虛化,有以下幾個特點:
相同點:
1、通過適當的縮小截屏后的圖片,可在提升效率的基礎上加強模糊效果。這是因為縮小圖片尺寸等于減少需要處理的像素點,因此效率更高;且圖片先縮小,丟掉部分像素信息后再拉伸回原尺寸也能起到一定模糊的效果(因為使用了Bilinear的過濾方式)。
?
截屏時減小圖片尺寸的虛化結果比對(迭代10次,采樣半徑1.2)
(注:這里所謂的“截屏”就是將相機渲染結果的顏色信息取出。后面的虛化處理就是對這個拷貝出來的顏色信息而做的。截屏是通過OnRenderImage函數完成的,這個函數調用的時機可參看Unity函數生命周期或上篇文章《ClearFlags 與 OnRenderImage》。)
2、多次迭代虛化圖片,即每次都在上一次虛化的基礎上再次虛化,可以提升虛化品質。
?
整迭代次數的虛化結果比對(采樣半徑1.2,降采樣2倍)
3、合理調整虛化半徑,賣二手手機號平臺可以提升虛化品質。
?
?
調整采樣半徑的虛化比對(迭代20次,降采樣1倍)
注:如果虛化半徑調的過高,會讓圖片變得“瓷磚化”,正所謂過猶不及,適合自己的才是最好的。
4、使用兩個Pass通道,分橫縱兩次進行虛化,減少DrawCall時的采樣次數。
?
?
不同點:
“咔嚓虛化”的虛化動作直接放在OnRenderImage中。因此若迭代次數較高,這一渲染幀的DrawCall必然高。
“淡入式虛化”在OnRenderImage中僅做截屏操作,虛化動作則放在Coroutine中,即根據虛化強度及時間平均在各渲染幀中。
?
關鍵部分代碼:
?
?
?
?
?
?
?
?
?
最后值得注意一個地方:
要對保存虛化圖片的Texture2D進行些屬性設置:
?
總結
以上是生活随笔為你收集整理的在Unity中做一个淡入式的屏幕虚化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Photon多人游戏开发教程
- 下一篇: Machinations——可视化游戏设