Unity中图片的内存中占用大小、AB占用大小、内存形式

一、为什么有此一问

不同图片或图集在项目中,我们会在右下角看到图片的Format格式和大小:

比如上面这个图集大小是2048×1024,RGBA Compressed ASTC 8×8,在运行时占用的纹理内存大约是 0.5MB(显存),如果是 RGBA32 则约为 8MB。

如果将这个图的格式改成RGBA 32,那么就会是8MB。

为什么不同压缩格式下,占用硬盘空间是不同的?

二、首先先回忆一下计算机中bit byte等的意义和换算

1bit就是0/1.

1byte字节 = 8bit比特。

1kb = 1024byte。

1mb = 1024 kb

三、RGBA 32 和 ASTC N*N

RGBA32

RGBA32 代表,一个像素的R、G、B、A四通道各占8bit,所以一个像素占用4*8 = 32bit = 4byte。那么一个2048*1024的显存大小就是2048*1024*4/1024 /1024 = 8MB。

ASTC N*N

ASTC是一种块压缩算法,将N*N像素记作一块,比如8*8=64个像素记作一个块,这个块一共定死了有128 bit = 16 byte,即:

  • 每块:128 bit = 16 byte

  • 每块:8×8 = 64 像素

那么每个像素占用的Bit大小就是16*8/8*8 = 2Bit/像素,那么一张2048×1024,RGBA Compressed ASTC 8×8,在运行时占用的纹理内存大约是

2048×1024×2 bit / 8=524,288 Byte≈0.5 MB

四、在内存中这张ASTC8*8图会怎么样?

关键在于是否设置了 Read/Write Enabled 打开 / 你调用了 GetPixels 之类 API,

此时Cpu中必须留存一份可读写的副本数据,这个数据通常是解压后的格式,类似RGBA 32,

那么cpu内存中就会留有一份8mb的拷贝数据,GPU内存中只有一份0.5mb的数据。

如果没有设置 Read/Write Enabled 打开 / 你调用了 GetPixels 之类 API,那么cpu内存中就不会留有这个图片的数据,只有在gpu内存中有一份0.5mb的内存。

五、打AB包中,RGBA32与ASTC8*8的体积

ab包中的体积收到图片Format格式和采用的压缩算法2者影响。

比如一个图片的Format格式是RGBA32,压缩算法是LZ4。

假设有一张 2048×1024 的 UI 图集,我们做两个导入方案:

方案 A:RGBA32 + LZ4 AB

  • Texture Format:RGBA32

  • Max Size:2048

  • AssetBundle Compress:LZ4

方案 B:ASTC 8×8 + LZ4 AB

  • Texture Format:RGBA Compressed ASTC 8×8

  • Max Size:2048

  • AssetBundle Compress:LZ4

我们分别算:

  • 原始像素数据大小

  • AB 文件大概多大

经过上面计算过程已经知道,原始像素数据RGBA32是8mb,ASTC8*8是0.5mb。

对于AB包体积:

这里是估算,真实数值会受图片内容 & 压缩算法影响,只看量级。

方案 A:RGBA32 + LZ4

  • 未压缩像素数据:8MB

  • 再被 LZ4 压一遍:

    • 图片有很多空白 / 纯色区域 → 压缩率可能很高

    • 粗略估一下:变成 3~5MB 都很正常

AB 文件大小:大约 3~5MB 这个区间


方案 B:ASTC 8×8 + LZ4

  • ASTC 本身已经压过 → 原始纹理数据 ≈ 0.5MB

  • 再用 LZ4 压一层:

    • 有可能从 0.5MB 变成 0.4MB 左右,也可能差不多

    • 一般不会大很多

AB 文件大小:大约 0.4~0.6MB

格式 原始像素 AB 里存的东西大致 AB 文件大概大小
RGBA32 + LZ4 8MB 可压缩的原始像素 ≈ 3~5MB
ASTC 8×8 + LZ4 0.5MB 已压缩纹理再 LZ4 ≈ 0.4~0.6MB
相关推荐
叶帆15 天前
【YFIOs】用C#开发硬件之设备上云
开发语言·unity·c#
久数君15 天前
AI三维建模工具“造形家”:地理场景三维化的高效解决方案
unity·glb·ai算法·ai三维建模工具·地图框选·造形家·城市建筑模型
会思考的猴子15 天前
Unity VFX 属性 Postion 和 TargetPostion
unity
hai31524754315 天前
九章编程法 · 猜数字游戏 (GW-BASIC 重构版) *
人工智能·microsoft·游戏引擎·游戏程序
心前阳光16 天前
Unity资源导入之自动化资源导入
unity·自动化·游戏引擎
心前阳光16 天前
Unity之2021.3.45f2c1发布安卓程序遇到的问题
android·unity·游戏引擎
纪纯16 天前
PicoVR Unity Integration SDK 3.4 常用交互API
unity·游戏引擎·vr·pico
龙智DevSecOps解决方案16 天前
3A 游戏优化技术栈:如何打通引擎级分析工具与 DevOps 持续集成管线?
unity·性能优化·游戏开发·技术美术·perforce·unrealengine
葛兰岱尔16 天前
从 SolidWorks 到 Three.js,从 Inventor 到 Unity——制造业CAD模型“几何-语义一体化“转换,不再是天方夜谭!
开发语言·javascript·unity
鼎艺创新科技16 天前
三维电子沙盘中OSGB倾斜摄影数据的加载与渲染
游戏引擎·cocos2d