【Unity】内存优化之— —Texture的MaxTextureSize以及Format压缩格式

这篇具有很好参考价值的文章主要介绍了【Unity】内存优化之— —Texture的MaxTextureSize以及Format压缩格式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本人才疏学浅,只是近期略看了一下Texture的内存,如有不对的地方,还望大佬指正。

参考文章:

你所需要了解的几种纹理压缩格式原理

1.说一说图片占用的内存

关于图片的内存,是怎么算的呢,就是图片的长乘以宽,乘以每个像素点占的byte大小。

MaxTextureSize,影响的就是基础的长和宽。

图片的压缩格式,影响的就是每个像素点占的byte大小。

就举一个最基础的例子,1024X1024大小,格式是RGBA32的图片

那其内存就为1024x1024x32/8=4x(1024x1024)=4MB。

我们知道1024x1024就是1M(bit),除以8换算为M(Byte),乘以32则是RGBA32中的那个单个像素占的大小,就是32,合起来就是4MB的大小。


2.聊聊MaxTextureSize

而MaxTextureSize,影响的就是图片分辨率。也就是图片在内存中的长宽。

不过也有个前提:当MaxTextureSize大于图片的实际大小时,仍会使用原图片的大小。

当然,也有个需要注意的地方:图片的大小不能超过SystemInfo.maxTextureSize的大小。


3.说一下压缩格式

关于压缩格式。介绍起来就很多了,如果你打开unity当中的图片,然后打开format可能就会惊恐的发现这个图

【Unity】内存优化之— —Texture的MaxTextureSize以及Format压缩格式

哇,有这么多格式,只看上一眼便要叫人生出敬畏之心。

莫慌,慢慢来。

这些格式,仔细看一眼,就可以发现,大概分为几类:ASTC、ETC、DXT、PVRTC、以及不采用压缩格式的RGBA。

关于这些格式的原理有兴趣的可以看这个大佬写的文章。链接:https://zhuanlan.zhihu.com/p/237940807

我这里只做一个简单粗暴的我自己使用的压缩格式:

如果目标是电脑PC

性能最优的情况下,使用RGBA32

兼容低性能的情况下,可以选择ARGB16

如果你还想更极限一点,把图片的宽高设置为4的倍数,然后使用DTX1(不支持Alpha)/DTX5

如果目标是安卓手机

ASTC使用: 4X4 5X5 6X6 8X8(ASTC任意图片的宽高)

ETC2使用:Crunched 100/80(ETC2需要图片的宽高为四的倍数)

不支持的情况下使用ETC (ETC需要图片的宽高为2的幂数,并且不支持alpha通道)

如果目标是iOS手机

ASTC使用: 4X4 5X5 6X6 8X8

不支持ASTC的情况下使用PVRTC(PVRTC需要图片的宽高为2的幂数)

然后Override ETC2 fallback:高质量统一选择32bit,低质量统一选择16bit

Normal map类型的默认按照高质量来,如果你想极限的话,按照低质量也不是什么问题

注:

Crunched的实际运行时内存占用与普通的内存占用一样,只是更加节省存储。

Crunched的图片就是压缩之后再次被crunched压缩一下,所以Crunched之后的图片,在使用时会再次解压缩为相对应的图。

ASTC 4X4 5X5 对应的是高质量的RGBA和RGB图片

ASTC 6X6 8X8 对应的是低质量的RGBA和RGB图片

如果图片很糊也不影响并且内存急需的情况下,可以使用ASTC的10X10、12X12(图片本身在游戏中占的像素越小越好)

如果是3D使用的纹理有远近变化的,建议统一开启MipMap,虽然会增加大约1/3的内存,但是效果确实好。


顺便举一个1024X1024图片的例子:

图片格式 图片大小
RGBA32 4M
RGBA16 2M
ASTC4X4 1M
ASTC5X5 0.6M
ASTC6X6 456.9KB
ETC2(8bit) 1M
ETC(4bit) 0.5M
PVRTC(4bit) 0.5M

至于怎么算的:就是1024X1024=1Mb,然后除以8乘以每像素占用内存,就是当前图片的大小。文章来源地址https://www.toymoban.com/news/detail-838516.html

到了这里,关于【Unity】内存优化之— —Texture的MaxTextureSize以及Format压缩格式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 中app内存压缩优化(一):R版本

    版本基于: Android R Android Q 中新增了framework 端app 内存回收优化方案。当app 的 oom adj 发生特定变化时,framework 端会对应用的内存进行处理。随着版本的演变,这部分优化工作也一直在完善,笔者将针对 Android R 和 Android S 对该部分的优化流程分别进行详细地剖析。 本文针对

    2024年02月16日
    浏览(40)
  • 【研发日记】Matlab/Simulink软件优化(一)——动态内存负荷压缩

    文章目录 背景介绍 初始代码 优化代码 分析和应用 总结         在一个嵌入式软件开发项目中,有一个使用 MATLAB Function 编写的算法模块,功能是从一个较大的数组中提取一段数据,然后求均值输出,示例如下:         一开始算法开发的思路非常简单,按照功能需

    2024年04月17日
    浏览(38)
  • 图片转Svg格式以及压缩优化方法

    除了文中方法,还可以使用 svgo 工具对svg图片进行压缩:可参考svgo 前端有些时候需要把像png、jpg等格式的图片转为svg格式的矢量图使用,但是直接去一些网站里转换,得到的svg代码往往因为冗余信息实在太多,大得离谱 看着都头疼 以至于cv到QQ里都发不出去 所以查了一波资

    2024年02月05日
    浏览(48)
  • 【Unity编辑器扩展】包体优化神器,图片压缩,批量生成图集/图集变体,动画压缩

    功能介绍: 1. 压缩工具支持对图片原文件压缩(支持png/jpg),也支持使用Unity内置图片压缩批量对图片设置压缩参数。 2. 支持以文件夹或及其子文件夹为单位批量生成图集(SpriteAtlas), 支持同时生成图集变体(SpriteAtlas Variant),支持忽略像素宽高大于限定值的图片打进图集。 3. 批

    2023年04月10日
    浏览(46)
  • Unity内存优化技巧

            当涉及到Unity游戏的开发和优化时,内存管理是一个非常重要的方面。合理地管理和优化内存可以显著提高游戏性能并减少资源消耗。在本篇博客中,我们将探讨一些Unity内存优化的技术,并附带代码实现和注释,以帮助你更好地理解这些概念。         在游戏

    2024年02月07日
    浏览(48)
  • SpringBoot 项目启动内存占用过高优化以及内存查看

    在使用SpringBoot 开发过程中,发现不管是本地还是测试环境只要一启动,动不动就占用1G内存,然而本地和测试环境的访问量却并没有多少,导致资源浪费; 2.1、启动命令示例(具体配置可根实际情况调整) nohup java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -Xms128m -Xmx128m -Xmn

    2024年02月03日
    浏览(46)
  • Unity 性能优化二:内存问题

    目录 策略导致的内存问题 GFX内存 纹理资源 压缩格式 Mipmap 网格资源 Read/Write 顶点数据 骨骼 静态合批 Shader资源 Reserved Memory RenderTexture 动画资源 音频资源  字体资源 粒子系统资源 Mono堆内存 1. Assetbundle 打包的时候,单个资源被重复打包,可以把依赖的资源,单个打包,通过

    2024年02月15日
    浏览(42)
  • Unity UI内存泄漏优化

    项目一运行,占用的内存越来越多,不会释放,导致GC越来越频繁,越来越慢,这些都是为什么呢,今天从UI方面谈起。 首先让我们来聊聊什么是内存泄漏呢? 一般来讲内存泄漏就是指我们的应用向内存申请了一块地址,然后这块地址的相关引用全部丢失了,这块内存无法再

    2024年02月12日
    浏览(45)
  • Unity内存分析与优化实践

    在移动端项目中,内存占用是一项非常重要的指标,一般都会被严格控制其大小,否则会导致内存占用过大而影响其他功能的使用。而在移动端Unity中,由于嵌入了Unity引擎,内存占用会一下子飙升,如果控制不好内存的增长,恐怕许多项目都不会允许Unity嵌入到移动端中,在

    2024年02月13日
    浏览(50)
  • unity emgucv Texture2D转Mat / Mat转Texture2D / Texture 转 Texture2D

    Mat是emgucv的类,需要导入dll 首先需要导入emgucv要用的dll 免积分下载 这些不需要emgucv的dll,什么都不需要额外导入

    2024年02月15日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包