Unity纹理优化:缩小包体

这篇具有很好参考价值的文章主要介绍了Unity纹理优化:缩小包体。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Android打包apk大小约:475M
查看打包日志:Console→Open Editor Log;
或者依赖第三方插件:build reports tool(在unity store里可以下载);

定位问题

经过排查后,发现项目中纹理占比很高(82.8%),而且美术说图片从tga换成了更小的png,包体理应会变小,但是替换后并没有变化,甚至还大了3M,就开始查一下是什么原因;

找了一张较大的贴图测试,在资源管理器中大小为0.7M,但是在Unity中却变成了5.3M,经查证后得出结论,图片进入unity后会根据一定格式进行压缩,导致两方大小不一致:

  • 贴图导入unity后会自动设置成压缩格式,它会先判断贴图是否有透明通道。

  • Android:不带透明通道压缩成ETC1,带透明通道压缩成ETC2,不被4整除的回退到RGBA32

  • IOS: 不带透明通道压缩成RGB PVRTC,带透明通道压缩成RGBA PVRTC ,不是2的整数次幂回退到RGBA32

  • 所以,最终编译入包的大小和图片本身格式、大小关系都不大,而是取决于限制分辨率下的信息复杂度。

经排查后发现,这个项目中纹理大多是RGB16、RGBA 16、RGB32、RGBA32、ETC、ETC 2格式压缩的,而且很多贴图的size用的都是2048、4096,这太浪费了,导致纹理占比这么大。

解决方案

一:压缩方式换成ASTC
找出影响较大的图片,将压缩格式改为ASTC。
ASTC是在OpenGL ES3.0出现后在2012年中产生的一种业界领先的纹理压缩格式,它的压缩分块从4x4到12x12最终可以压缩到每个像素占用1bit以下,压缩比例有多种可选。ASTC格式支持RGBA,且适用于2的幂次方长宽等比尺寸和无尺寸要求的NPOT(非2的幂次方)纹理。

经测试,最后使用的ASTC方式:
(1)法线贴图:4x4即可,避免丢失过多数据
(2)细节处的贴图:大部分6x6,并没发现明显失真;一小部分追求细节的图片用的4x4
(3)一般的贴图:选择6x6或8x8
(4)无关紧要,但是尺寸特别大的图:可以考虑8x8,10x10,12x12,不然打包出来太大
(5)Sprite(UI):6x6即可

适配机型
iOS
苹果从A8处理器开始支持 ASTC,iPhone6(包含)、iPad mini 4(包含)以上iOS设备支持,2014年的iPhone 5s及iPad mini 3以前的设备不支持。

安卓
安卓主流压缩格式正在从ETC2转向ASTC,Unity官方对ASTC格式支持的说明( 跳转官方文档 )中提到GPU对ASTC的支持情况:所有支持OpenGL ES 3.1和部分支持OpenGL ES 3.0的GPU(截止到2021年GooglePlay上统计的支持ASTC的设备已有77%,国内可能更高,个人角度看ASTC压缩格式是可以普及使用的。)

二:修改图片 Size
项目中贴图的size基本都是2048的,一张就好几兆
Unity纹理优化:缩小包体
但实际上移动平台并不用这么大就可以,改成了1024,经测试后发现,大部分图片都可以,有几张模糊的再改成2048即可。
Unity纹理优化:缩小包体

优化后打出的apk大小:352M,这只是针对较大的纹理做出的处理,如果统一优化一下效果会更好。

结论

  • 尽量让美术出的图使用2的幂大小,以便于提高性能节省内存。否则平台或GPU不支持NPOT纹理带,Unity会对纹理进行缩放和填充已达到下一个2的幂的大小。
  • 纹理压缩方式可根据情况,改用ASTC压缩。
  • 减小 Max Size,视觉上可接受的结果的最低设置,可以更快的降低纹理内存。
  • 对于法线贴图,ETC2 4bits的压缩效果比ASTC 5x5好;而有透明通道的贴图,ETC2 8 Bits比ASTC 4x4更优的情况,根据实际情况进行选择;
  • 制作纹理图集 :将多个纹理放置到单个纹理中,可以减少绘制调用和加快渲染速度。使用 Unity 精灵图集 或第三方 Texture Packer 可以制作纹理图集。
  • 关闭 Read/Write Enabled 选项 :如果启用,此选项在 CPU 和 GPU 可寻址内存中都会创建副本,纹理会占用双倍内存。大多数情况下,应保持此选项为禁用状态。如果要在运行时生成纹理,请通过 Texture2D.Apply 强制执行,并且传入设置为 true 的 makeNoLongerReadable。
  • 禁用不必要的 Mip Map :对于在屏幕上大小保持不变的纹理(如 2D 精灵和 UI 图形),Mip Map 不是必需的,对于与摄像机的距离会变化的 3D 模型,请保留 Mip Map为启用状态。

相关资料:
unity 纹理压缩格式
ASTC纹理压缩格式详解
游戏中的纹理压缩格式文章来源地址https://www.toymoban.com/news/detail-416519.html

到了这里,关于Unity纹理优化:缩小包体的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • [Unity]将所有 TGA、TIFF、PSD 和 BMP(可自定义)纹理转换为 PNG,以减小项目大小,而不会在 Unity 中造成任何质量损失

    如何使用 只需在“项目”窗口中创建一个名为“编辑器”的文件夹,然后在其中添加此脚本即可。然后,打开窗口-Convert Textures to PNG,配置参数并点击“Convert to PNG! ”。 就我而言,它已将某些 3D 资源的总文件大小从 1.08 GB 减少到 510 MB。 只要禁用“Keep Original Files”或将项

    2024年02月02日
    浏览(46)
  • UE4移动端最小包优化实践

    移动端对于包大小有着严苛的要求,然而UE哪怕是一个空工程打出来也有90+M,本文以一个复杂的工程为例,探索怎么把包大小降低到最小,我这里从200M+减少到了86M 工程包含代码、插件、资源、iOS原生库工程。 官方文档 1、勾选Use Pak File和Create compressed cooked packages

    2024年02月03日
    浏览(31)
  • 缩小ppt文件大小的办法

    之前用别人模版做了个PPT,100多M,文件存在卡顿问题 解决办法: 1.找到ppt中哪个文件过大,针对解决 2.寻找视频/音频文件,减少体积 3.字体文件是不是过多的问题。 一、文件寻找的内容步骤: 步骤: 1.把ppt文件重命名为*.rar文件(或者*.zip文件) 如果你的ppt并没有显示文件

    2024年02月21日
    浏览(35)
  • 电脑C盘空间大小调整 --- 扩容(扩大/缩小)--磁盘分区大小调整/移动

    概述: 此方法适合C盘右边没有可分配空间(空闲空间)的情况,D盘有数据不方便删除D盘分区的情况下,可以使用傲梅分区助手软件进行跨分区调整分区大小,不会损坏数据。反之可直接使用系统的磁盘管理工具进行调整分区大小。 注意: 操作前最好备份一下重要数据,避

    2024年02月16日
    浏览(53)
  • Pycharm-用鼠标滚轮放大缩小字体大小

    1,pycharm 字体放大设置: ①,File — setting — Keymap —在搜寻框中输入:increase — Increase Font Size(双击) — 在弹出的对话框中选择Add Mouse Shortcut ②,在弹出的对话框中按住ctrl 键,鼠标滚轮向上滑动后点击 OK 。 2,Pycharm 字体缩小设置 : ①,File — setting — Keymap —在搜寻框

    2024年02月12日
    浏览(119)
  • 【Unity3D】Android 打包 ④ ( Android 工程打包 | Unity 中导出安卓工程 | Android Studio 打开 Unity 导出的 Android 工程 )

    Android 工程打包 就是将 Unity 项目导出为 Android Studio 项目 , 在 Unity 编辑器中选择 \\\" 菜单栏 | File | Build Settings… \\\" 选项 , 在弹出的 \\\" Build Settings \\\" 对话框中 , 勾选上 \\\" Export Project \\\" 选框 , 然后点击右下角的 \\\" Export \\\" 导出按钮 ; 选择一个导出目录 ; 等待 Android 工程导出 ; 最终导出的

    2023年04月19日
    浏览(54)
  • Unity打包WebGL的优化常用操作?

    如果贴图格式时2048,在不影响画面效果的情况下,改成1024或者5#12,还可以缩小包体。 WebGL打包的时候分三种压缩情况: gzip:比Brotli文件打,但打包快,http和https都支持 Brotli:压缩格式最小,打包慢,只有谷歌和火狐支持。 Disabled:不压缩。 直接打包一份不压缩的版本,在

    2024年02月06日
    浏览(49)
  • 【Unity编辑器扩展】字库裁剪工具, 优化字体文件大小,批量修改文本组件字体

    原理: 1. 扫描项目中用到的字符集; 2. 把字体文件裁剪掉没用到的字符,仅保留项目中用到的字符; 3. 生成裁剪后的字体文件; 工具功能设计: 1. 支持通过拖拽字体文件或文件夹批量选择需要裁剪的字体文件。 2. 扫描工程中使用到的字符集:主要是获取prefab中Text、TextM

    2024年02月15日
    浏览(47)
  • Unity之Android项目的打包

    一 Unity里面配置Android运行环境 1.1 首先unity需要集成android编译环境,点击FIle-Build Settings 1.2 没是否有Android模块,没的话先下载Android模块 1.3 按下面的操作,下载Android支持,SDK,NDK,和JDK 1.4 如果之前AndroidStudio配置有这些,可以不用下载,进行配置就行,Edit-Preferences 1.5 选择

    2024年02月06日
    浏览(42)
  • Unity移动平台相关(一)Android打包设置

    Unity2019及以上 发布Android准备工作 通过UnityHub安装Android平台相关工具 1.Android构建支持 2.Android SDK(安卓软件开发工具包)、NDKTools(本地开发工具包) 3.OpenJDK(Java开发工具包) 注意:Unity支持Android 5.1及以上版本 Unity2019以下版本 1.Android构建支持工具安装(Unity提供下载,安装

    2023年04月14日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包