http://blog.sina.com.cn/s/blog_5b6cb9500102vi6i.html

因为有不少人都问过我压缩格式的问题,今天飞哥又重新提醒了一次。整理一下发个贴,以供大家查阅和讨论。

各种纹理格式,大家参照下U3D MANUAL里面的具体描述介绍,这是官方的东西。但我觉得有一部内容是错的,例如占用内存大小。

http://docs.unity3d.com/Manual/class-TextureImporter.html

基本知识点:

DXT格式是Nvidia Tegra提供的,ETC是安卓原生支持的,OPNEGL2.0都支持。ETC2只有OPENGL3.0支持,PVRTC是Imagination PowerVR提供的,ATC是Qualcomm Snapdragon提供的。一般来说,IOS只支持PVRTC的压缩格式。一旦相应的贴图格式不兼容的时候,U3D会自动将其转换成RGB(A)格式。最好的兼容是针对GPU进行打包,例如针对小米的都用ATC格式,但一般开发做不到太细化的选择。所有设备对RGB 16BITS/ARGB 16BITS/RGB A16BITS/RGB 24BITS/ARGB 32BITS等支持都很好,只是这些格式算是非压缩格式,对内存消耗和渲染消耗非常不友好。

关于压缩后的在储存上的大小,假设高清(ARGB32)大小为1,那么大概数据如下:

RGB PVRTC 4BITS:0.25

ARGB PVRTC 4BITS:0.25

RGB PVRTC 2BITS:0.13

ARGB PVRTC 2BITS:0.13

RGBA ETC2 4BITS:0.25

RGBA ETC2 8BITS:0.25

RGB + 1-bit ALPHA ETC2 8BITS:0.2

DXT1 :0.3

DXT5 : 0.6

ARGB 16BITS:0.33

RGB 16BITS:0.5

RGB 24BITS:0.85

ARGB 32BITS:1

当然每个都是根据图片不一样而不一样的,以上只是大致数据并非准确数据。

测试方法:单独为改为这样贴图格式的文件打成ASSETBUNDLE看大小。

对此抱有比较大疑问的是ARGB 16 和RGB 16,感觉可能这里U3D的BUNDLE有BUG。

内存中的大小,假设高清(ARGB32)大小为1,那么大概数据如下:

RGB PVRTC 2BITS:0.0625

ARGB PVRTC 2BITS:0.0625

RGB PVRTC 4BITS:0.125

ARGB PVRTC 4BITS:0.125

RGBA ETC2 4BITS:0.125

RGBA ETC2 8BITS:0.25

RGB + 1-bit ALPHA ETC2 8BITS:0.125

DXT1 :0.125

DXT5 : 0.25

ARGB 16BITS:0.5

RGB 16BITS:0.5

RGB 24BITS:0.8

ARGB 32BITS:1

建议如下:

一般来说3D游戏我们压缩贴图的时候会把贴图分为UI贴图和场景模型贴图来考虑,主要是因为有多重采样的缘故。3D游戏一般来说都是受摄像机远近大小改变而采取不同的采样大小,假设不设置多重纹理采样的话,在远处会有非常多的白色噪点。

2D游戏的话,所有都不需要勾选多重采样,具有3D性质的贴图,我们都需要勾选上GENERATE MIP MAPS,这样会使贴图大小增加25%这样。

正方贴图与非正方贴图也要区分。非正方贴图只有16位的压缩(相当于真彩色减半),所以最好游戏中都是正方的贴图。以下是个人选择贴图压缩格式遵循的一些规则,大家可以参考下,若有问题可以一起交流一下。

正方贴图:

IOS下:

a.普通不透明:RGB PVRTC 4BITS

b.普通透明:RGBA PVRTC 4BITS

Android下:

a.普通不透明:RGB ETC 4BITS

b.普通透明:

因为没有通用最兼容的格式,所以一般情况是用RGBA 16BIT或有针对性的选择DXT5/ATC8 BITS/ETC2 8BITS。如果有技术支持,可以采用RGB ETC 4BITS加一张ALPHA 8的贴图来实现透明效果。

非正方贴图:

一般采用16位压缩,16位会带来颜色损失,但如果本来美术就是按16BITS画的话,就不会损失,日本好些手游都是按16BITS来画的。这样的游戏一般少渐变艳度高比较容易看出来。

a.不透明贴图: RGB 16BITS

d.透明贴图:RGBA 16BITS

高清不压缩贴图:

RGBA 32BIT

另外:

对于不重要的贴图,模糊度低的贴图,建议不仅要采取像素压缩,还要直接压缩其大小。如光照贴图压到512或256。如背景原本1024的图直接压到256。玩家不注意到就可以了。

[Unity3D]关于U3D贴图格式压缩的更多相关文章

  1. 用gulp-imageisux智图api压缩图片

    ➣ 智图平台是什么? 智图是腾讯ISUX前端团队开发的一个专门用于图片压缩和图片格式转换的平台,其功能包括针对png,jpeg,gif等各类格式图片的压缩,以及为上传图片自动选择最优的图片格式.同时, ...

  2. Unity3D ShaderLab 静态贴图光照模型

    Unity3D ShaderLab 静态贴图光照模型 其实在unity的光照模型中,我们可以把光照讯息烘培进入一个2D贴图,来实现着色器的光照效果. 下面是在unity中关闭灯光和打开灯光的对比效果. ...

  3. Unity3D ShaderLab 使用贴图对模型的高光进行遮罩

    Unity3D ShaderLab 使用贴图对模型的高光进行遮罩 前面研究了高光效果的实现,再说说现很多游戏用到的高光贴图技术,因为它可以让3D美工更容易控制最终的视觉效果. 这也就为我们提供了另外的 ...

  4. Unity3D ShaderLab法线贴图

    Unity3D ShaderLab法线贴图 说到法线贴图,应该算是我们最常使用的一种增强视觉效果的贴图.将法线贴图的各个像素点座位模型的法线,这样我们的光照可以模拟出高分辨率的效果, 同时也保持较低的 ...

  5. Java用ZIP格式压缩和解压缩文件

    转载:java jdk实例宝典 感觉讲的非常好就转载在这保存! java.util.zip包实现了Zip格式相关的类库,使用格式zip格式压缩和解压缩文件的时候,须要导入该包. 使用zipoutput ...

  6. Java对zip格式压缩和解压缩

    Java对zip格式压缩和解压缩 通过使用java的相关类可以实现对文件或文件夹的压缩,以及对压缩文件的解压. 1.1 ZIP和GZIP的区别 gzip是一种文件压缩工具(或该压缩工具产生的压缩文件格 ...

  7. node实现rar格式压缩

    背景 由于公司的CMS系统里,只接受rar格式压缩的文件,所以没法直接使用nodejs里提供的zip压缩组件.只能从winRar软件入手了,但网上没有多少这方面相关的东西,所以下面也是自己尝试着在做. ...

  8. web服务交互中HTTP数据内容GZIP,ZLIB格式压缩与解压缩封装(共享)

    点击下载独立的dll //dll内部封装API格式 //gzip BOOL fnZlibDecompressPacket (__IN_PARAM unsigned char* gZlibDataBuf ...

  9. Unity3D外包(u3d外包)—就找北京动点软件(我们长年承接U3D外包、Maya、3DMax项目外包)

    一.关于动点: 北京动点飞扬软件,因致力于虚拟现实技术的开发而创立,在虚拟现实开发领域有着卓越的技术和领先的思想.   我们为用户专业定制的项目,细分了多种工作流程,软件独立自主研发,编程简化用户操作 ...

随机推荐

  1. asp.net Cookie 用户登陆时记住我

    /// <summary> /// 判断Cookie中存储的数据 /// </summary> protected void CheckUserCookie() { //先判断 ...

  2. Linux Shell编程 sort、wc命令

    sort命令:字符串排序 sort 命令可以依据不同的数据类型来进行排序.sort 将文件的每一行作为一个单位,相互比较.比较原则是从首字符向后,依次按 ASCII 码值进行比较,最后将它们按升序输出 ...

  3. Linux权限管理 ACL权限

    ACL权限简介 在普通权限中,用户对文件只有三种身份ugo,分别为属主(u).属组(g)和其他人(o):每种用户身份拥有读(read).写(write)和执行(execute)三种权限.但是在实际工作 ...

  4. TCP客户端和服务器间传输数据遇到的TypeError: a bytes-like object is required, not 'str'问题

    使用python实现python核心编程3第472页和474页的TCP时间戳服务器和客户端服务器间数据传输编程时遇到TypeError: a bytes-like object is required ...

  5. ios-如何搭建IPv6网络测试环境(转)

    工具/原料   mac一台 iPhone手机2台(一台用于测试,另一台提供网络) 方法/步骤     准备网络.通过数据线连接iPhone和Mac,并将iPhone手机连接的Wi-Fi关闭,使用自己的 ...

  6. kvm初体验——linux之kvm安装及使用qemu工具安装系统【转】

    本文转载自:https://blog.csdn.net/Heimerdinger_Feng/article/details/79119445 一.安装虚拟机之前先升级软件仓库 sudo apt-get ...

  7. C++中substr的用法

    C++中substr函数的用法 #include<string> #include<iostream> using namespace std; void main() { s ...

  8. Sublime 输入中文显示方框问号乱码

     最近使用的sublime 编辑器出现了打开写好的程序,中文显示的确是方框,方框里面是问号,就是不显示中文.     然后再网上查找了一下,大概都是说是需要中文编码插件,比如converttoutf8 ...

  9. 阿里云环境搭建CDN内容分发

    1.创建CDN CNAME 指向CDN云厂商地址 2.使用域名转向到CDN云厂商地址 请求过来 通过cnd 分发到不同的服务器  如果有缓存的话 直接走了 CDN也可以实现安全功能,比如CDN实现防止 ...

  10. 关于Json如何转换成对象及获值问题!

    var result = eval('('+result+')'); result为Json 转换成var result对象,可以 if(result.success){ window.locatio ...