海島奇兵中海邊的浪花是如何實現的,使用shader還是序列幀動畫?

效果如圖:

波浪時上時下。


用shader做的~先安利之前博客介紹過的工具 Adreno Profiler分析任意安卓遊戲特效+抓取資源

===================

評論區有人指出直接貼別人的代碼不太好,想想還是刪掉了原答案,就留個博客地址騙流量了


Unity Web Player

我認真研究了這個問題,結論是,很多種方式可以實現,我上面的demo是這樣做的。

用頂點顏色信息配合shader,實現3張貼圖混合。一張浪花圖,一張水面波浪細節圖,一張大波浪圖。在沿海的地方,海面mesh刷頂點顏色,來顯示浪花,頂點顏色alpha通道來淡入淡出。用shader讀取頂點顏色來做貼圖混合。


你所說的浪花大概在實現里用foam一詞更為精確,而模擬的方法也遠比想像的簡單,gamedev有一篇國外開發者寫的有關水渲染的文章,他把這類浪花叫做coast foam,也就是海岸邊的泡沫,正如它的名字,這類浪花統統出現在"海岸"附近,所謂海岸可以理解為淺水區,這類位置只需要根據水深結合其法線和浪花顏色,水的顏色做一個簡單的線性插值就能得到不錯的模擬效果


解壓apk包就能看到他的shader實現了,他有一張他起名為lightmap的圖,其中紅色通道表示泡沫貼圖的量


海島的水是基於網格(非法線)的fft波,所以面夠多。基於手機性能限制,簡單的做法是:4x遍歷所有與地形相交的面,貼一張帶uv動畫的紋理,紋理方向朝向交點平均一下就ok了。


不是序列幀。這個遊戲的資源是沒加密的,解壓apk就能找到這個shader和貼圖。


推薦閱讀:

手遊程序員想學習圖形學知識,圖形學、GL/DX、Shader這些有什麼合適的學習順序嗎?
主流的遊戲引擎都是如何解決Alpha Blending問題的呢?
計算機視覺和圖像處理方向前景如何?
計算機圖形學的裁剪演算法,實現任意多邊形與直線、圓的裁剪?
256位元組3D程序是如何實現3D引擎的呢?

TAG:遊戲開發 | 計算機圖形學 | shader |