首页 > 其他分享 >Unity纹理压缩

Unity纹理压缩

时间:2024-10-15 13:49:58浏览次数:7  
标签:1024 压缩 像素 Unity 纹理 Alpha bit 512

1、贴图,texture和atlas

TextureType贴图类型

  1. Default: 普通贴图,这是所有纹理最常用的设置。
  2. Normal map: 法线贴图,选择此选项可将颜色通道转换为适合实时法线贴图的格式。
  3. Editor GUI and Legacy GUI: UI贴图,把Texture 用在 HUD or GUI controls.上。
  4. Sprite(2D and UI): 精灵图
  5. Cursor: 鼠标指针,如果您使用纹理作为自定义光标,请选择此选项。
  6. Cookie: 遮罩贴图
  7. Lightmap: 烘焙贴图
  8. Directional Lightmap: 烘焙贴图
  9. Shadownmask:
  10. Single Channel:如果你只需要纹理中的一个通道,选择这个。

sRGB(Color Texture):纹理颜色预处理
Alpha Source(α源):默认选择Input Texture Alpha就好,如果确定不使用原图中的Alpha通过,可以选择None。另外From Gray Scale一般不会选用。
Alpha Is Transparency:指定Alpha通道是否开启半透明,如果位图像素不关心是否要半透明可以不开启此选项。这样Alpha信息只需要占1bit。节省内存

Warp Mode:选择纹理平铺时的行为方式。默认选项为 Repeat。 All Texture Types

  1. Repeat:重复,在区块中重复纹理。
  2. Clamp:不重复,拉伸纹理的边缘。
  3. Mirror: 镜像,在每个整数边界上镜像纹理以创建重复图案。
  4. Mirror Once:镜像纹理一次,然后将其钳制到边缘像素。
  5. Per-axis:轴对称

FilterMode(决定纹理拉伸时采样哪种滤波模式):

  1. Point (no filter):最近邻滤波,缩放是采样像素数目只有一个;纹理在靠近时变为块状。
  2. Bilinear:使用线性滤波,找到四个近邻像素,然后进行线性插值混合得到,图像模糊了;纹理在靠近时变得模糊。
  3. Trilinear:几乎和Bilinear一样,只是如果开启多级渐远纹理技术,那就会在多级渐远纹理之间进行混合;与 Bilinear 类似,但纹理也在不同的 MIP 级别之间模糊。

官方文档https://docs.unity3d.com/cn/2019.4/Manual/class-TextureImporter.html

2、atlas优化

优化前1024x1024*32/8/1024/1024=RGBA32Bit=4MB

优化后 91278832/8/1024/1024=RGBA32Bit=2.7MB

不是说贴图必须2的幂吗?,unity支持ASTC格式后,可以不用是2的幂了;
所以,912x788的一张图,在ASTC4x4,内存应该是多大?

912 * 788 * 8 / 8/1024/1024=ASTC4x4=0.68MB ~= 0.7MB

3、贴图内存计算

一张图在内存中占用的大小计算公式为:

图片占用内存的计算公式:图片高度 * 图片宽度 * 一个像素占用的内存大小 = 总byte

RGBA32 bit : 表示每个像素占用32位(bit)储存,1byte=8bit,32bit / 8 = 4byte字节 ,
内存大小 1024 x 1024 x 4 / (1024x1024) = 4M
512x512x4=1,048,576 byte
1,048,576 byte / 1024=1024kb
1024kb / 1024 = 1mb


(1):全平台,RGB和RGBA

RGBA32是R,G,B,A 使用32位来表示一个像素, 32 / 8=4 个字bit大小,带Alpha通道
RGBA16是R,G,B,A 使用16位来表示一个像素,16 / 8=2个字bit大小,带Alpha通道;
RGB24是R,G,B 使用24位来表示一个像素,24/8=3bit,不带Alpha通道;
RGB16是R,G,B 使用16位来表示一个像素,16/8=2bit,不带Alpha通道;

例如一张512x512的图,所占内存公式:

内存大小 = 宽 * 高 *(单个像素位 / 8一位8bit字节=单个像素占用bit字节)/ 1024(kb) / 1024(m)

RGBA32 = 512 x 512 x (32 / 8) / 1024 / 1024 = 1M
RGBA16 = 512 x 512 x (16 / 8) / 1024 / 1024 = 0.5M
RGB24 = 512 x 512 x (24 / 8) / 1024 / 1024 = 0.75M
RGB16 = 512 x 512 x (16 / 8) / 1024 / 1024 = 0.5M
ALPHA_8:只有 A 通道,占 8 位,1 个字节。每个像素点占用 1 个字节的大小

(2):Android,ETC和ETC2

ETC只能用于Android手机,长宽是2的幂,ETC是基于block块的纹理压缩格式,图像被分成4×4的块,每个块使用64位编码。
RGB-ETC 4bits是使用4位来表示一个像素, 4 / 8= 0.5bit,无Alpha通道
RGB-ETC2 4bits是使用8位来表示一个像素, 4 / 8=0.5bit,带Alpha通道
RGBA-ETC2 8bits是使用8位来表示一个像素, 8 / 8=1bit,无Alpha通道
RGB ETC 4bits = 512 x 512 x (4 / 8) / 1024 / 1024 = 0.125M
RGB ETC2 4bits = 512 x 512 x (4 / 8) / 1024 / 1024 = 0.125M
RGBA ETC2 8bits = 512 x 512 x (8 / 8) / 1024 / 1024 = 0.25M

(3):IOS,PVRTC

PVRTC只能用于ios手机,长宽正方形且2的幂
RGB PVRTC 2bits:使用2位来表示一个像素, 2 / 8=0.25bit,无Alpha通道
RGBA PVRTC 2bits:使用2位来表示一个像素, 2 / 8=0.25bit,有Alpha通道
RGB PVRTC 4bits:使用4位来表示一个像素, 4 / 8=0.5bit,无Alpha通道
RGBA PVRTC 4bits:使用4位来表示一个像素, 4 / 8=0.5bit,有Alpha通道
RGB PVRTC 2bits = 512 x 512 x (2/ 8) / 1024 / 1024 = 0.06M
RGBA PVRTC 2bits = 512 x 512 x (2/ 8) / 1024 / 1024 = 0.06M
RGB PVRTC 4bits = 512 x 512 x (4/ 8) / 1024 / 1024 = 0.125M
RGBA PVRTC 4bits = 512 x 512 x (4/ 8) / 1024 / 1024 = 0.125M

(4):全平台,ASTC(自适应可缩放纹理压缩)

ASTC是一种基于block块的有损纹理压缩格式,由ARM2012年推出的自适应可缩放纹理压缩方式。
像素大小 = 16-bytes / 分块宽高 * 8-bit;
压缩率 = 原始像素大小(32-bit) / 像素大小;
图像大小 = 原始图片大小 / 压缩率;
图片大小(MB)=长x宽x像素大小(bits)/8/1024/1024

unity2018之前,A通道独立

unity2019之后 A通道合并

RGB ASTC 4X4 block:使用8位来表示一个像素, 8 / 8=1bit ,无Alpha通道
RGB ASTC 4X4 block = 512 x 512 x (8/ 8) / 1024 / 1024 = 0.256M

RGBA ASTC 6X6 block:使用3.56bit来表示一个像素, 3.56 /8 =0.445bit ,无Alpha通道
RGB ASTC 8X8 block = 512 x 512 x (2 / 8) / 1024 / 1024 = 0.111M

(5):桌面端,PC

DXT是一种有损纹理压缩算法,基本思想是把4x4的像素块压缩成一个64或128位的数据块

RGB Compressed DXT1:使用4位来表示一个像素, 4 / 8=0.5bit ,无Alpha通道
RGB Compressed DXT1 = 512 x 512 x (4/ 8) / 1024 / 1024 = 0.125M
RGBA Compressed DXT5:使用8位来表示一个像素, 8 / 8=1bit ,有Alpha通道,
RGBA Compressed DXT5 = 512 x 512 x (8/ 8) / 1024 / 1024 = 0.25M

标签:1024,压缩,像素,Unity,纹理,Alpha,bit,512
From: https://www.cnblogs.com/comradexiao/p/18467346

相关文章

  • 【Unity】mesh绘制简单图形
    应用使用mesh绘制一个彩虹色三角形、四边形、多四边形瓦片控制mesh移动,实现游戏的对象的身体关节的动作步骤mesh(网格类)Meshmesh=newMesh();vertices:顶点数组,包括mesh中的所有顶点,如三角形三个顶点//三角形三个顶点Vector3[]vertices=newVector3[3];vertices[0......
  • 【XYFrame unity框架使用文档】封装unity小框架工具集 —— XYFrame
    文章目录XYFrame介绍优点获取框架源码引入的第三方插件作者信息技术交流群反馈企鹅裙画饼使用文档导入文件目录启动1、单例模式不继承MonoBehaviour的单例模式基类继承MonoBehaviour的单例模式基类2、Mono管理器3、事件管理系统4、工具类封装unity协程工具,避免GC(垃圾回......
  • 【Unity塔防游戏素材包】Tower Defense Pack - Low Poly 3D Art
    TowerDefensePack-LowPoly3DArt是一个专为塔防类游戏设计的Unity插件,提供丰富的低多边形3D资源,涵盖了塔防游戏所需的各种元素,如塔楼、敌人、环境道具等。这些资源风格统一,兼具简约和精致,非常适合开发具有卡通风格、低多边形风格的塔防游戏。主要功能:多样化的塔......
  • 【Unity寻路插件】A Pathfinding Project Pro
    A*PathfindingProjectPro是一款功能强大且高度优化的路径寻路插件,专为Unity开发者打造。它基于A*算法,广泛应用于游戏AI和实时策略游戏的寻路需求,尤其适合需要高效处理复杂路径计算的大型项目。该插件不仅支持常见的二维和三维场景,还提供多种寻路算法、性能优化工具......
  • 视频如何压缩到100m以下?5种方法教你快速压缩
    视频已成为我们生活中不可或缺的一部分。然而,高清视频往往伴随着庞大的文件体积,给存储和分享带来了诸多不便,这时就需要对视频进行适当的压缩,以达到我们的需求。下面来给大家分享5种超简单的视频压缩方法,不会损坏画质,一起来学习下吧。方法一:迅捷视频转换器这是一款功能强大的......
  • Unity
    函数生命周期点击查看代码Awake->OnEnable->Start->FixedUpdate->Update->LateUpdate->OnDisable->Ondestory;*Awake:场景开始的时候调用一次。*OnEnable:启用对象后调用,可以重复调用。*Start:对象第一次启用是调用,用于初始化。*FixedUpdate:用于更新物理逻辑,频率超......
  • EST 资源表示压缩的基本概念和实现原理
    REST资源表示压缩是一种通过压缩资源表示来提高网络传输效率的技术。在网络传输过程中,资源表示占用了大量的带宽和传输时间。因此,对于大型RESTAPI或者传输内容较多的场景,采用资源表示压缩技术可以显著提高传输速度和效率。本文将从以下几个方面介绍REST资源表示压缩的技术......
  • .NET压缩zip、.NET解压zip
    参考:https://blog.csdn.net/zhaotianff/article/details/141156035usingSystem.IO.Compression;namespaceXCG.Commons{publicclassZipUtil{///<summary>///压缩zip///</summary>///<paramname="......
  • 【Unity】GL绘制图形和网格
    新建GLSquare脚本,绑定主相机。HelperpublicclassGLSquare:MonoBehaviour{ //线材质 privateMaterialm_material; //在摄像机渲染场景后,将调用OnRenderObject。 privatevoidOnRenderObject() { Draw();//调用绘制 } //绘制调用Beginend voidBegi......
  • MySQL(压缩包)配置过程
    1.下载MySQL安装包MySQL::DownloadMySQLCommunityServer2.将下载完成的压缩包解压到某一目录,如:C:\MySQL并在系统环境中添加以上目录。 3.在上述目录下新建my.ini文件,并在文件中输入以下内容:[mysqld]port=3306basedir=C:\MySQLdatadir=C:\MySQL\datamax_connect......