• 手游性能之渲染分析1


    声明:本文非原创,来源于各网站、翻译贴。大神勿喷

    1.GPU基本理论概念:

    中文翻译为“图形处理器”。我们通常就叫它显卡。GPU同时也是2D显示卡和3D显示卡的区别依据,2D显示芯片在处理3D图像和特效时主要依赖CPU的处理,称为“软加速”;3D显示芯片是将三维图像和特效处理功能集中在显示芯片内,也即所谓的“硬件加速”功能。GPU和CPU之间通过RAM内存进行数据交换。在手机主板上,GPU芯片一般都是紧挨着CPU芯片的。
    
    
    以前的智能机,基本不带GPU,所有的软件、游戏都是由CPU进行处理,呈现在屏幕上。但是CPU的图形处理能力很低很低,这也导致了传统的智能手机玩稍微大一点的游戏往往力不从心,大型3D游戏更是成为了奢望。
    
    
    GPU不仅仅是负责必要的3D处理,准确地说,它将所有图形显示功能从CPU那里都接管了过来,并且还提供了视频播放、视频录制和照相时的辅助处理,使得CPU被大大解放,可以专心地处理纯指令,而不再需要去负责繁重的图形处理任务了。系统的3D性能得到极大的提升
    
    
    GPU处理的东西 主要是顶点(vertex)和像素(pixel),这两东西一般有四个属性:
    vertex: xyzw,就是坐标了
    pixel:RGBA,就是颜色RGB加上透明度Alpha通道
    

    2.纹理格式(16位):

    纹理的像素格式是图像存储在GPU内存的方式;cocos2d中默认的像素格式是RGBA8888
    16位纹理的不足之处:它由于颜色总量的减少,有一些图片显示起来可能会失真,而且可能会产生“梯度”。
    

    1)RGBA8888:

    红色通道、绿色通道、蓝色通道和alpha 通道各8位。
    
    优点:如果想获得最好的图片质量,使用这种格式是很靠谱的。
    缺点:但它会占用的内存会比16位的纹理多一倍自然的,它的运算速度也是相对较慢的。也就会降低他的FPS
    常用场景:整个场景的背景图片、大量渐变色的图片。
    

    2)RGBA4444:

    红色通道、绿色通道、蓝色通道、alpha通道各4位。
    
    优点:它对每个通道都有不错的支持,还能保证相对良好的速度和内存占用率,并且透明效率与RGBA8888格式的纹理差别不是很大
    缺点:由于颜色总量减少至4096,所以,RBGA4444是16位图片格式里面颜色质量最差的。
    常用场景:图片包含有半透明的区域
    

    3)RGB5A1:

    红、绿、蓝三色通道各5位,Alpha通道仅有1位
    
    优点:它在内存占用和速度上表现不错。
    缺点:图片要么只能全部是透明像素,或者全部是不透明的像素。因为一位的alpha通道的缘故,所以没有中间值。
    常用场景:精灵需要透明度上的表现
    

    4)RGB565:

    红色通道5位,绿色通道6位,蓝色通道5位,没有Alpha通道
    
    优点:对于16位的纹理来说,使用RGB565可以获得最佳颜色质量
    缺点:除非图片是矩形的并且你不需要透明度的支持
    常用场景:游戏中的背景图片和一些矩形的用户控件
    

    3.压缩纹理:

    3.1常用的图像文件格式有BMP,TGA,JPG,GIF,PNG等;

    文件格式是图像为了存储信息而使用的对信息的特殊编码方式,它存储在磁盘中,或者内存中,但是并不能被GPU所识别,因为以向量计算见长的GPU对于这些复杂的计算无能为力。这些文件格式当被游戏读入后,还是需要经过CPU解压成R5G6B5,A4R4G4B4,A1R5G5B5,R8G8B8,A8R8G8B8等像素格式,再传送到GPU端进行使用  
    

    3.2常用的纹理格式有R5G6B5,A4R4G4B4,A1R5G5B5,R8G8B8, A8R8G8B8等。

    纹理格式是能被GPU所识别的像素格式,能被快速寻址并采样。比如说DDS文件是游戏开发中常用的文件格式,它内部可以包含A4R4G4B4的纹理格式,也可以包含A8R8G8B8的纹理格式,甚至可以包含DXT1的纹理格式。在这里DDS文件有点容器的意味。
    

    3.3常见的压缩纹理格式:

    1)ETC1:

    ETC1格式是OpenGL ES图形标准的一部分,并且被所有的Android设备所支持。
    扩展名为: GL_OES_compressed_ETC1_RGB8_texture,不支持透明通道,所以仅能用于不透明纹理。
    当加载压缩纹理时,<internal format>参数支持如下格式:
    a.GL_ETC1_RGB8_OES(RGB,每个像素0.5个字节)
    

    2)PVRTC:

    支持的GPU为Imagination Technologies的PowerVR SGX系列。
    OpenGL ES的扩展名为: GL_IMG_texture_compression_pvrtc。
    当加载压缩纹理时,<internal format>参数支持如下几种格式:
    a.GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG (RGB,每个像素0.5个字节)
    b.GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG (RGB,每个像素0.25个字节)
    c.GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG (RGBA,每个像素0.5个字节)
    d.GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG (RGBA,每个像素0.25个字节)
    

    3)ATITC:

    支持的GPU为Qualcomm的Adreno系列。   
    支持的OpenGL ES扩展名为: GL_ATI_texture_compression_atitc。
    当加载压缩纹理时,<internal format>参数支持如下类型的纹理:
    a.GL_ATC_RGB_AMD (RGB,每个像素0.5个字节)
    b.GL_ATC_RGBA_EXPLICIT_ALPHA_AMD (RGBA,每个像素1个字节)
    c.GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD (RGBA,每个像素1个字节)
    

    4)S3TC:

    也被称为DXTC,在PC上广泛被使用,但是在移动设备上还是属于新鲜事物。支持的GPU为NVIDIA Tegra系列。
    OpenGL ES扩展名为:GL_EXT_texture_compression_dxt1和GL_EXT_texture_compression_s3tc。
    当加载压缩纹理时,<internal format>的参数有如下几种格式:
    a.GL_COMPRESSED_RGB_S3TC_DXT1 (RGB,每个像素0.5个字节)
    b.GL_COMPRESSED_RGBA_S3TC_DXT1 (RGBA,每个像素0.5个字节)
    c.GL_COMPRESSED_RGBA_S3TC_DXT3 (RGBA,每个像素1个字节)
    d.GL_COMPRESSED_RGBA_S3TC_DXT5 (RGBA,每个像素1个字节)
    

    3.4 小结:

    由此可见,Mali系列GPU只支持ETC1格式的压缩纹理,而且该纹理不支持透明通道,有一定局限性。
    
    以上压缩纹理格式每个像素大小相对A8R8G8B8格式的比例,最高压缩比是16:1,最低压缩比是4:1。
    对于减小纹理的数据容量有明显作用,相应在显存带宽上也有明显优势,从而提高游戏的运行效率
    
  • 相关阅读:
    Nginx应用详解及配置
    mongodb复制+分片集原理
    memcached架构及缓存策略
    redis数据类型
    redis数据库安装 redis持久化及主从复制
    shell脚本-正则、grep、sed、awk
    kvm虚拟机管理基础
    kvm热添加和热迁移
    zabbix调用api检索方法
    kubernetes deployment升级和回滚
  • 原文地址:https://www.cnblogs.com/JianXu/p/5158361.html
Copyright © 2020-2023  润新知