我對像素遊戲情有獨鐘。
小時候最早接觸的遊戲機就是山寨俄羅斯方塊遊戲機,印象裡除瞭俄羅斯方塊還可以開坦克,開賽車和青蛙過河之類的。如此抽象的表現形式在小時候的我看起來充滿瞭無窮的趣味。一直到現在我都很喜歡像素風,高中的時候購買瞭一臺二手java索愛手機,大學大一上學期偷偷攢錢買瞭psp,3ds,switch。哦對瞭,還有一個特殊的“遊戲機”,是一個圖形計算器,可以下載別人編寫好的遊戲遊玩。
Ti-92+遊玩馬裡奧http://www.icpchaxun.com/video/1531518058615476224
所以步入正題,我要寫一段像素風格的shader。
首先從原理入手。
像素風格我的理解是模仿早期設備低分辨率的條件,做出的一種抽象的畫風。早期設備是迫不得已才做成像素風格的,然而我們現有的設備不是2k高清屏幕就是視網膜屏,類似於蔚藍這樣的遊戲都是高清馬賽克。
The Last Night,完美結合3d光影和2d像素
而以三渲二的方式來表現像素風格的遊戲可以有效減少繪制2d幀動畫的工作量,把3d的光,動畫,角度切換應用到2d上去。有幸接觸到瞭一個Unity插件pixelizer,看到瞭作者所給的講解,在此記錄研究的過程。
總體上像素化原理就像這個視頻裡展示的一樣:原來圖片是這樣壓縮的_嗶哩嗶哩_bilibili
方法一:不用任何代碼,利用Render texture,然後降低分辨率,將其添加到Quad上,用另外一個camera調整好角度對準Quad。
9b79fa8b0f549e868189f8259767ecee原始圖像http://www.icpchaxun.com/video/153246949681559552098f689bd3a18b242ab741d697da570b0使用render texture後(128*128)http://www.icpchaxun.com/video/1532469857115545600
這個是unity商店裡的免費模型,由於沒有硬陰影,所以看起來還不是很‘2d’這種方法最終效果很像以前的怪物獵人,特別是3ds上的怪物獵人,可以看出是有不錯的像素化效果的。但是這種風法局限性也很大,因為這相當於降低瞭物理分辨率。而且這樣的渲染每次都需要額外的camera,當有大量物體時性能很捉急,隻能用在小場景裡。
方法二:剔除像素 + 全屏後處理
首先進行剔除像素代碼。原理就是,設置一個固定的數值d,然後每隔d個像素保留該位置的像素點,然後其餘的剔除。
268308bfebee399ab14d26d2c7933f7c原始的剔除像素之後,這裡每隔5個保留一個像素
ps.有種透明的做法就是和這個差不多,前後遮擋的時候剔除像素。
最後寫一個屏幕後處理,對於每個屏幕像素,搜索周圍5個像素(因為間隔為5),取不透明的那個。
最後的效果可以成功渲染成像素風格http://www.icpchaxun.com/video/1533548277492703232
當然還存才一些問題,比如正反體尖銳邊緣會有一些不規則的顏色,因為這個材質貼圖在棱處有一條黃邊。
還有像素風格光照處理問題等。這個後續討論。
宝子们,赶上双11,一年才一次,不管你打算买啥,咱先领了红包,薅了羊毛,再考虑别的~