
一、一個操作讓游戲內存立減50+%-CocosCreator性能優化之壓縮紋理
紋理不僅占據大量的包體,也占據了大量的內存。傳統的圖片壓縮格式(如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。
二、重構原生化游戲性能,Cocos
Cocos深圳沙龍:多方合力共建引擎生態,與任天堂合作細節曝光
6月11日,Cocos開發者沙龍深圳站如約而至,盡管當日暴雨連連,但是依然抵擋不住開發者的熱情,現場座無虛席,Cocos自然也是做足了準備,與來自中青寶、小愛靈動、TopOn,Liftoff+Vungle等一眾堪稱“業內頂流”的演講嘉賓,為大家貢獻了一場猛料不斷、干貨滿滿的沙龍體驗。
Cocos在會上透露,Cocos Creator v3.6預計將在7月份發布測試版本,而v3.6作為今年的里程碑版本,其在游戲移動平臺的原生化會更徹底,帶來性能提升,降低功耗。
能力層級式躍遷,全面優化開發體驗
此次沙龍由Cocos技術總監Panda開場,他帶大家回顧了今年Cocos Creator重要更新,及引擎后續重點突破方向的展望。
在之前的版本中,Cocos上線了動畫狀態機與子狀態機功能,并持續更新了混合樹與層級系統,讓用戶能更細致地定義角色不同肢體的動作;大幅優化了陰影效果,著重優化了開發中常用的曲面陰影,提供糾正陰影算法和配置的功能模塊,智能剪裁使得大量不必要的渲染工作被省略,大大提高了渲染速度及項目的運行效率;智能材質導入的功能與材質系統的升級,讓開發過程中美術體驗大大增加;還有基于RenderGraph的管線定制、基于Subpass降低IO、內置管線使用Frame Graph等架構層面的更新。
動畫狀態機
在V3.6的預告環節,Panda坦言,這是一個“里程碑級”的更新。V3.6除了前文提到的基礎功能都會再度加強外,開發者最關心的“引擎原生化”也將上線。上線之后,原生化性能相比之前的版本,在3D靜態場景與模型動畫的測試中,性能幾乎翻倍。
多方合力,共建繁榮插件生態
2022年,是 Cocos生態越發完善的一年,許多開發者制作了種類繁多的工具,并將其發布到Cocos Store中,補全了引擎缺失的一些能力。包括但不限于場景工具Easy NavMesh、可視化材質編輯工具、軌道相機時間軸動畫插件CineStation、動態骨骼工具DynamicBone等。
Cocos Store
開發者所貢獻的插件之外,Cocos官方也在更積極地推進與合作更多開發者服務商,集成開放框架、出海服務商、內容創作工具等內容,更高細粒度地去服務每一位開發者地獨特需求,提升開發效率與商業化程度,并幫助開發者們建立高質量的生產與反饋模型,再藉由開發者的成長反哺引擎生態,形成良性循環。
技術釋放想象進軍泛互動內容領域
近兩年,在政策與行業趨勢的雙重推動下,游戲已不是互動內容的唯一選擇,市場廣闊的泛娛樂領域正向越來越多的互動內容開發商伸出橄欖枝。如今人們說起游戲,早已不是簡單的P2W或者打怪升級,甚至不需要點擊APP或者某個圖標;從淘寶雙十一的疊貓貓游戲,到PDD的澆水領水果,游戲的形式以其高互動、高留存、高轉化,已經成為了互動營銷領域的首選工具,而Cocos引擎具有的多端兼容、小包體,以及針對H5或小程序端的性能優化,這些特質都讓Cocos開發的內容天然地更適合不同平臺互動內容的開發。
在演講的Panda還給開發者們帶來了“One more thing”的大驚喜,即Cocos與任天堂的合作。截止今年,任天堂Switch已經成為近十年最暢銷的主機設備,全球銷售突破一億臺;與之相匹配的,遍及全球的大量用戶群。開發者只需簡單的申請,就可以獲得Cocos提供的CreatorSwitch限定版,其內置了Switch的相關配置,開發者便可以快速開發內容并將其上架到Switch,將內容帶給更多用戶。
Cocos官宣將與任天堂合作
基于 Cocos Creator研發的大型 MMO游戲曝光
在演講現場,中青寶項目主美楊甜透露,首個使用 Cocos Creator開發的大型 MMO游戲進入優化階段,不久后就將和大家見面。在引擎的加持下,該游戲具備了 exe、web、apk、H5、主機游戲五端數據互通的能力——這也是其他引擎所無法實現的。楊甜認為,在現今元宇宙概念火熱的背景下,五端數據互通勢必會成為未來的一大趨勢,也給游戲制作和玩家體驗提出了新的探索方向。
中青寶項目主美楊甜
而眾多大佬也從性能優化、多人游戲打造、精細化運營和廣告變現等角度,帶來了豐富的知識分享。資深Cocos技術專家“子龍山人”講解了3D手游性能優化技巧,以及私人珍藏多年的項目開發過程調試/調優小Tips與核心的優化思路。
資深Cocos技術專家“子龍山人”
小愛靈動游戲內容負責人孫晨陽則帶來了多人游戲搭建與性能優化的分享,目前他已基于這套理論,使用Cocos Creator為多個用戶定制了數十款千萬級用戶的ToB產品。
小愛靈動游戲內容負責人孫晨陽
來自TopOn的高級商業化經理溫國能帶來了開發者們都非常關心的收益相關問題,即手游如何通過精細化運營提升收益,并結合現有游戲市場,詳細分析了不同游戲類型的廣告結合策略及數據統計。
TopOn高級商業化經理溫國能
相應的,針對游戲市場,來自Liftoff+Vunlge的Senior Account Manager Burce也從廣告位與挖掘游戲本身潛力的方式入手,以另一個視角解讀了游戲廣告變現的優化方式。
Liftoff+Vunlge的Senior Account Manager Burce
除了演講嘉賓們帶來的分享主題外,現場許多開發者也就自身遇到的問題向嘉賓提問,思維的交鋒,技術的碰撞,將現場氛圍推向高潮。誠如Panda在演講中分享的,開發者生態永遠是Cocos發展中最重要的一環,致力于解決大家在開發過程中遇到的問題,持續為開發者們提供更加好用靠譜的引擎工具,正是Cocos一直堅持的方向。引擎與開發者的關系并不止于產品與用戶,而是共生關系:共同生存,共同成長,共同繁盛;齊心協力,一起創造更加優質的數字內容。
三、cocos2d-x與cocoscreator有什么區別
一、性能不同
COCOS 2DX可控性更強一些,使用C++開發,所以性能非常好。
COCOS CREATOR界面更簡潔,學習更簡單一些,套用UNITY的操作方式,也更符合趨勢。但由于使用JS作為開發語言。所以性能較差。
二、用途
COCOS 2DX可以做一些比較大型的游戲。缺點是學習起來比較費勁。COCOS CREATOR以小游戲為主,不太適合做太大型的游戲。
cocos2dx是cocos2d的C++寫法,但是游戲架構是一樣的,都包含了精靈,導演,場景,動作等概念,他們是一脈相承的東西。
三、引擎不同
平時說的COCOS,指的是COCOS 2DX。COCOS CREATOR是借用UNITY 3D的操作方式,開發的另一個引擎。雖然名字里也帶COCOS,但和COCOS 2DX是兩個不同的引擎,但和COCOS 2DX是兩個不同的引擎,但和COCOS 2DX是兩個不同的引擎。











