搜尋部落格文章

2013年10月4日 星期五

[轉] 遊戲貼圖打包工具- TexturePacker

著名軟件TexturePacker ,現在只要是個做遊戲的都知道這個軟件。 如果你說不知道,我只能說你,Unprofessional!
使用TexturePacker最主要的好處是,我們做的遊戲最終要運行在Android手機或者蘋果手機上,而Android或者ios系統使用的是OpenGL ES來渲染。 所以我們要針對OpenGL ES來進行優化。 內存方面,OpenGL ES紋理要求寬和高都是2的n次冪的倍數。 想一想,如果圖片的寬為33,而高為65,那麼圖片加載到內存後的大小為多少? 考慮到寬和高都是2的n次冪,所以加載到內存後的大小是64*128。 所以我們可以考慮將小的圖片拼成到的圖片,然後加載。 渲染速度方面,OpenGL ES要求切換的紋理少,所以將圖片拼成大圖片,這樣就減少了紋理的切換。 所以使用TexturePacker是很有必要的。
TexturePacker所支持的遊戲引擎主要的有以下
Cocos2d - iPhone  Corona(TM) SDK - Cross-platform game development framework  Gideros - Cross-platform game development framework  Sparrow - iPhone  LibGDX - Java (Android + Desktop)  LimeJS - JavaScript / HTML5 framework  Ogre with CEGUI - 3D gaming framework and GUI  Moai - Multiplatform gaming framework  CSS sprites  JSON / Html5
等等。   (太多了,:) )
TexturePacker處理的高品質的色彩還原貼圖
要知道openGL載入紋理圖片的時候,所用內存是會自動擴張到2的n次方的。 比如,如果你的資源素材是10×10px,載入後,將會按16×16規格載入圖片。 如果資源素材是64×65,那麼就會按照64×128載入了。 假設資源是RGBA8888的圖片格式來算,(255,255,255,255)代表(r, g, b, a),一個點就使用了8位×4=32位。 相當於4個byte。 按剛才最後一種情況,你浪費的空間是64×(128-65)×4 /1024 = 15K,別說我的內存你無所謂。   移動設備上的遊戲,內存還是吃緊。 理論上,如果每一張圖的長寬都恰好是2的n次方數值,那很完美,沒有任何浪費。 但是,你懂的。 所以我們需要把很多小圖拼接到一張大圖裡,比如(2048×2048)然後到代碼中取其所需。 這樣,浪費掉的空間就很小了。 如果你使用的是RGBA4444,內存又縮減了50%。
RGBA8888
 
RGBA4444無抖動
 
RGBA4444加抖動
完美解決我們貼圖過大,壓縮效果失真的痛苦
作者:Kurodo 出处:http://Kurodo.cnblogs.com