其實Cocoscreator游戲排行榜的問題并不復雜,但是又很多的朋友都不太了解一個操作讓游戲內存立減50+%-CocosCreator性能優化之壓縮紋理,因此呢,今天小編就來為大家分享Cocoscreator游戲排行榜的一些知識,希望可以幫助到大家,下面我們一起來看看這個問題的分析吧!
本文從降低計算或設計分辨率來分如何提升性能,僅提供一些可參考的思路。
本文鏈接 CocosCreator游戲性能優化(3):GPU優化之降低計算分辨率
相關鏈接 CocosCreator游戲性能優化(1):性能分析工具
CocosCreator游戲性能優化(2):合批渲染之RenderToTarget
GPU的Fragment Shader即片元著色器程序在執行的時候,會并行每個像素(嚴格定義是光柵化后的每個片元,也即resolution)都執行一次。
此時主要的性能小號取決于兩方面:
1、片元著色器程序內部邏輯的復雜度和計算量。
現在我們從削減片元數量的角度來提升性能
假設我們的圖片TextureA。應用了ShaderA。
TextureA的寬高分別是1920和1080。
此時我們的片元著色器程序執行次數calcCount= 1920*1080= 2,073,600次。即200萬次。
這在很多普通機器上是可能存在性能問題的,即便shader邏輯不復雜。
因此我們TextureA的寬高減半,傳入片元著色器程序。計算后的calcCount= 960*540= 518,400次。即50萬次。
執行完shader后通過線性拉伸來使用該處理過后地textureA,如下。
我們發現計算量降低為原來的1/4,而圖的精度值僅降低了1/2.
因此,我們我們在對圖的渲染精度要求不高或不需要的情況下,應盡可能地降低其計算分辨率,來提升性能。
通過上述分析啟發,我們做游戲時,最初在決定設計分辨率的時候,應該預先考慮到這個問題。
在使用GPU渲染到紋理時,可以盡量減小目標紋理分辨率。使片元數量降低,從而降低計算量。
離屏渲染,和目標FrameBuffer分辨率有關。如果目標紋理分辨率能夠降低,那么游戲中大部分對象的分辨率都會比較低,因而會帶來非常可觀的性能效率提升。
最后將RenderTexture傳入節點進行scale拉伸,得到我們需要的實際顯示效果。
本文鏈接 CocosCreator游戲性能優化(3):GPU優化之降低計算分辨率
相關鏈接 CocosCreator游戲性能優化(1):性能分析工具
CocosCreator游戲性能優化(2):合批渲染之RenderToTarget
1、文件路徑問題:文件路徑有問題會導致cocoscreator開發第一個游戲節點都保存不了,需要確保項目文件夾位于可訪問的位置,并且沒有出現路徑錯誤或不存在的情況。
2、編輯器問題:CocosCreator編輯器本身出現問題,導致開發第一個游戲節點都保存不了,可以重新啟動編輯器,或者在不同的計算機上打開項目。
2、游戲開始時可以通過游戲界面的設置按鈕進行游戲幫助的訪問。
3、通過使用鍵盤操控主角完成一系列動作,消滅敵人,獲取經驗值。
4、敵人消失獲取經驗值升級表示游戲挑戰成功,血量和生命值消耗為0表示挑戰失敗,退出游戲進行重置。
5、點擊游戲界面的設置按鈕,彈出退出游戲的按鍵,就可以返回游戲的主界面中進行游戲的重新進入。
在游戲中,紋理不僅占據大量的包體,也占據了大量的內存。傳統的圖片壓縮格式(如JPEG、PNG等)雖能減少資源大小,但是不能被GPU直接識別,還是需要先加載到內存通過CPU解碼,轉換成RGB/RGBA等能被GPU識別的格式,才能傳送到GPU進行渲染。
為避免這些問題,壓縮紋理,指的是一種針對GPU的紋理壓縮方案,使紋理能夠直接被GPU識別并進行渲染,它具有以下優點。
傳統的圖片壓縮主要目的是存儲和傳輸,為了盡可能的高效壓縮,使用了可變的壓縮比率,因此在解壓時需要解壓更多的像素位才能讀取某個像素的位置,不適合隨機和快速讀取,也發揮不了GPU的并行處理優勢。
而壓縮紋理使用一個固定的壓縮比率,將紋理劃分成多個像素塊,每個像素塊包含 2*2或 4*4個像素,然后對每個像素塊進行壓縮,被壓縮的像素信息存儲在一個像素集合中,每個像素塊的索引位置存儲在一個塊索引圖中。讀取時,首先將紋理坐標轉化為塊索引值,然后在像素集合中查找對應的像素塊,最后在這個像素塊中找到紋理顏色值。
因為采用了固定的壓縮比率,GPU內部可以并行處理,從而快速的解壓縮。與之相對的是,紋理的壓縮過程發生在程序運行之前,并不在意編碼速度,因此在壓縮時會遍歷所有可能性,找到和原始像素差值最小的編碼,這也是紋理壓縮耗時較久的原因。
順便說一下,普通圖片格式中,PNG是無損壓縮,JPEG是有損壓縮。而壓縮紋理都是有損壓縮,只是在絕大部分情況下,手機上看不出來而已。
手機上使用壓縮紋理依賴于OpenGL ES的支持,OpenGL ES 2.0本身并沒有定義任何紋理壓縮格式,它僅提供 glCompressTexImage2D()方法供應用程序上傳壓縮紋理,壓縮紋理的格式由各個GPU廠商定義和實現。
OpenGL ES 3.0提供了壓縮紋理標準,使各個平臺都可以使用同一種壓縮紋理,但市面上的設備還需要很長時間才會全部過渡到OpenGL ES 3.0。因此,仍然需要對不同的平臺和設備使用不同的壓縮紋理格式。
ETC1把 4*4的像素塊壓縮成固定的64位編碼(8個字節), 4*4像素塊是16個像素,每個像素4字節,一共占64個字節,所以壓縮比是 64/8=8。但是ETC1只能存儲RGB信息,不適用帶透明度的紋理,為解決這個問題,Creator在ETC1文件中額外寫入了透明度信息,即ETC1+A格式,它的壓縮比是 64/16=4。
ETC1/ETC1+A需要OpenGL ES 2.0(對應WebGL 1.0)環境,目前幾乎所有Android手機都支持ETC1,但是iOS不支持。
ETC1/ETC1+A紋理的長寬可以不相等,但要求是2的冪次方。
ETC2是ETC1的擴展,壓縮比率一樣,但壓縮質量更高,而且支持透明通道,能完整存儲RGBA信息。
ETC2需要OpenGL ES 3.0(對應WebGL 2.0)環境,目前還有不少低端Android手機不兼容,iOS方面從 iPhone5S開始都支持OpenGL ES 3.0。
ETC2和ETC1一樣,長寬可以不相等,但要求是2的冪次方。
Creator中常用的是PVRTC4+A,壓縮比和ETC一樣,iOS全系列支持,但是Android不支持。另外PVR要求紋理長寬相等(正方形)且是2的冪次方,例如 1280*720的PNG圖片,轉換后變成 2048*2048,這一點會大大增加內存消耗。在實測中還發現轉換后的圖片質量不如ETC1,存在模糊、毛邊現象,對畫面要求高的游戲不適合。
壓縮紋理的使用非常簡單,根據構建平臺添加需要的格式即可,具體參見Creator官方文檔,本文不再重復了。
Creator編輯器還提供了轉換壓縮紋理的選項,根據轉換速度分為Fast、Slow等好幾檔,速度越慢則畫面質量越好。但不管選哪個,只影響顯示效果和轉換時長,顯存占用都是一樣的。一般情況下,顯存占用就是壓縮紋理的文件大小,例如文件大小是1.5M,則它占用的顯存也是1.5M。
在設置壓縮紋理格式時,目前Creator 2.x版本還需手動一個一個設置。如果想一次性設置所有或部分資源,自己寫個腳本遍歷修改對應的.meta文件也比較方便,這里是一個我寫好的腳本一鍵自動化設置壓縮紋理格式
在實際項目中的測試結果是,單圖、自動圖集、TexturePack合圖加起來超過兩千張圖片的Creator工程,使用PNG時打出來的apk包大小近500M,內存占用1.3G。采用壓縮紋理后,包體大小降到150M,內存占用降到600M。
好了,關于Cocoscreator游戲排行榜和一個操作讓游戲內存立減50+%-CocosCreator性能優化之壓縮紋理的問題到這里結束啦,希望可以解決您的問題哈!
上一篇:cn游戲排行榜
下一篇:cocos引擎游戲排行榜