概述

之前写过一个关于2DMMO优化的分享,有些人问到其中的压缩纹理要怎么做。其实实施起来很简单,很多看过cocos2dx的人都知道怎么做,这篇分享主要针对对这块不是太了解的新同学。

我假定对这篇分享有兴趣的同学都知道压缩纹理是什么,有什么好处和坏处。如果不大了解,可以先看一下pvr, etc相关的知识。

在手游中使用压缩纹理是很常见的需求,通常:

  • IOS会使用PVR来压缩,IOS要求图片高宽必须是2的幂,且必须是正方形。
  • Android会使用ETC1,由于ETC1不能支持透明通道,对于有透明的图,一般也会用ETC1+Alpha的做法。

使用工具

生成压缩纹理当然是使用现成的工具了:

IOS

使用PVRTexTool,在这里下载29,具体的使用方法可能要参考工具的文档,下面是一个简单的例子:

PVRTexToolCLI -i $(infile) -o $(outfile) -square + -pot + -q pvrtcbest -f PVRTC1_4,UBN,lRGB

其中$(infile)$(outfile)分别是原图片名和压缩后的图片名,如果图片没有透明,PVRTC1_4换成PVRTC1_4_RGB

Android

使用Mali Texture Compression Tool,在这里下载28,这个工具可以生成ETC1和带透明通道的ETC1

  1. # 原始格式
  2. etcpack ${infile} ${outfile} -c etc1
  3. # 带透明通道
  4. etcpack ${infile} ${outfile} -c etc1 -aa

带透明通道的ETC1其实就是将图片和遮罩合成一张图,最终的图片高度是原始图片的2倍。而要正确显示图片,则需要用Shader把遮罩部分作为Alpha值加到原图上。Shader如下所示:

  1. attribute vec4 a_position;
  2. attribute vec2 a_texCoord;
  3. attribute vec4 a_color;
  4. varying vec4 v_fragmentColor;
  5. varying vec2 v_texCoord;
  6. varying vec2 v_alphaCoord;
  7. void main()
  8. {
  9. gl_Position = CC_PMatrix * a_position;
  10. v_fragmentColor = a_color;
  11. v_texCoord = a_texCoord;
  12. }
  13. precision lowp float;
  14. varying vec4 v_fragmentColor;
  15. varying vec2 v_texCoord;
  16. varying vec2 v_alphaCoord;
  17. void main()
  18. {
  19. vec4 v4Colour = texture2D(CC_Texture0, v_texCoord);
  20. v4Colour.a = texture2D(CC_Texture0, vec2(0.0, 0.5) + v_texCoord).r;
  21. gl_FragColor = v_fragmentColor * v4Colour;
  22. }

兼容Web和Native

现在知道如何生成和使用压缩纹理了,要怎么整合进Creator呢?

  • 在开发阶段,我们还是正常使用png, jpg,这样在浏览器和模拟器都能正常显示。
  • 在构建阶段,分成三步走:
    • 用Creator命令行生成原生工程。
    • 调用我们自己的脚本,将工程中的图片转成压缩纹理,但要注意转换后的图片名不要变,比如a.jpg转换后仍然叫a.jpg,只不过内容已经是压缩纹理了
    • 用Creator命令行编译安装包。

这样打出来的包,在手机中是可以正常显示的,原因是cocos-2dx并不是以文件后缀来判断类型的,它是根据文件内容的头几个字节来判断的。

cocos-2dx其实还支持gzip压缩格式的,也就是我们将图片转换成pvretc1后,还可以再压缩成gzip,最终还是可以正常解析出来。但由于文件大小小了很多,加载速度会变快。

要完成这样的构建流程,你可能需要用一个脚本来实现自动化,我比较推荐python,它的库实在太强大和方便了。

另外,并不是所有的图片都适合用压缩纹理,比如UI图片压缩后会有明显的锯齿,像场景, 特效这类就比较适合。总之,在使用压缩纹理之前,你可能需要对图片类型进行一些规范化。

creator pvr etc相关推荐

  1. creator中pvr使用呢

    概述 之前写过一个关于2DMMO优化的分享,有些人问到其中的压缩纹理要怎么做.其实实施起来很简单,很多看过cocos2dx的人都知道怎么做,这篇分享主要针对对这块不是太了解的新同学. 我假定对这篇分享 ...

  2. 得物技术Filament Creator材质编辑工具的实现

    对于PBR材质来说,想要通过PBR属性还原真实的渲染效果,需要有一定的材质编辑能力.材质编辑工具通过提供实时编辑材质并且实时预览效果的能力,降低PBR材质编辑的门槛. 背景 在得物3D空间改用fila ...

  3. 最全的Creator游戏优化方案(一)

    今天下午闲下来也来写写creator中的优化方案.欢迎各位拍砖,过程中会使用到一些别人的图片还请见谅! 1.加载速度优化 1.避免使用单像素的大图,尽量使用9宫方式进行拉升. 在我们加载的时候降低游戏 ...

  4. Cocos Creator 预制的使用模板(一般用于UI)

    Cocos Creator里绑定properties @property(cc.Prefab)XXUIPrefab: cc.Prefab = null; 在预制上挂脚本 import { Consta ...

  5. Cocos Creator 的 动作(Action)系统:moveBy的使用

    Cocos Creator 快速上手:制作第一个游戏 可以在这里感受一下这款游戏的完成形态: http://fbdemos.leanapp.cn/star-catcher/ 准备项目和资源 我们已经为 ...

  6. ubuntu kylin 18.04 安装 Qt Creator 5.11

    首先,去官网(https://download.qt.io/official_releases/qt/ )下载Qt Creator的安装包. 我下载的是5.11.1版本文件:qt-opensource ...

  7. 【Qt】Qt Creator中文输入设置

    #[Qt]Qt Creator中文输入设置 一.ubuntu中文输入法的设置 1.在终端中输入: $ ibus-setup 弹出界面如图: 2.选择中文输入法 3.点击右上角设置–>选择系统设置 ...

  8. cocos creator 安卓原生平台环境_竞技对抗小游戏单挑篮球开发历程 | Cocos技术派第12期...

    本文来自于"Cocos 荣耀讲师"征稿活动第1期,最先发表于 Cocos 中文社区,作者 ID:蟹老板,2017年加入社区,文章作品包括<猎头专家的开发历程>等. Co ...

  9. linux下QT Creator常见错误及解决办法

    最近因为在做一个关于linux下计算机取证的小项目,需要写一个图形界面,所以想到了用QT来写,选用了linux下的集成开发环境QT Creator5.5.1,但刚刚安装好,竟然连一个"hel ...

  10. QT Creator 版本大全及下载地址

    2019独角兽企业重金招聘Python工程师标准>>> 直接跳过输入账号,选择所需版本. 1.所有版本QT下载地址 : http://download.qt.io/archive/q ...

最新文章

  1. Transformer又出新变体∞-former:无限长期记忆,任意长度上下文
  2. FortiGate SSH管理认证问题安全公告
  3. php引用类失败,php – 致命错误:调用未定义的方法stdClass
  4. 处理被中断的系统调用
  5. 【杂谈】循序渐进,有三AI不得不看的技术综述(超过100篇核心干货)
  6. 一次失败的尝试,h5+Api 结合 react,webpack,同时生成android 、ios、h5端代码
  7. pytorch Dataset, DataLoader产生自定义的训练数据
  8. LuckyDraw app使用CosmosDB的成本分析
  9. 使用RxJava和SseEmitter进行服务器发送的事件
  10. 希尔排序 最坏时间_排序算法(2)
  11. [转帖]九句英语闯天下
  12. (day 32 - 位运算 )剑指 Offer 56 - I. 数组中数字出现的次数
  13. mysql blob 乱码_「数据库」MySQL高性能优化规范建议,速度收藏
  14. 计算机表格应用试题及答案,2016年职称计算机考试EXCEL练习试题及答案
  15. 读《我怎样设计飞机》
  16. 【Unity3D开发小游戏】《超级马里奥游戏》Unity开发教程
  17. matlab 与 mathmatica 编程对比(Vyi个人学习笔记)
  18. 在XP上同时运行IE6,IE7,IE8,IE9
  19. ardupilot/arduplane/attitude.cpp 姿态控制解析
  20. 计算机存储器组成结构,计算机组成原理——存储器内部组成

热门文章

  1. struck.unpack
  2. 杨韬的Python/Jupyter学习笔记
  3. 剑指Offer对答如流系列 - 把数字翻译成字符串
  4. linux创建sudo用户组,如何将用户添加到sudo组
  5. 2021 HTML面试题(最新)不定时更新
  6. [TCP灵魂之问]TCP 的拥塞控制、慢启动、慢启动阈值、拥塞避免、快速重传和快速恢复
  7. 验收测试:α测试、β测试
  8. 台式机没声音怎么样才能解决
  9. Python print语句输出重定向到网页前端
  10. git reset --soft命令的使用