unity3d - 为什么图像在导入 Unity 后会变大?
问题描述
我有一大组总大小为 10 mb 的 jpg 图像,但是当我将它们导入统一时,它们的大小会增加几倍!如何保持图像的原始大小?
解决方案
上面的答案是错误的,因此,我决定在这里进一步解释。
请注意,磁盘的大小与 ram/gpu 的大小不同。您在导入设置中找到的是 ram 上的大小。默认值(没有 mip)应该是应用程序大小的最小大小(几乎)。
尽管它在导入设置中显示更大的大小,但您的应用仍会为构建应用和应用安装程序再次压缩它们。
为什么 ram 的大小如此之大? 在图形渲染中,所有图像(无论是 jpg 还是 png)都将被读取和解码。解码结果将是所有像素数组..etc,取决于您的纹理格式(解码后),您的内存大小将不同。但是,您的源图像通常是用于磁盘存储的高度压缩(编码)图像。这就是为什么您在导入 Unity 后会获得更大的尺寸。它计算总共有多少像素。
您仍然可以保留原始大小,前提是您将其保留为单独的资源并在运行时加载它。作为资源文件夹等中的外部资源。但是,它不会减少 RAM 或 GPU 中的内存使用量。
您导入到项目中的任何图像都将按其格式重新采样和编码。您在导入设置中看到的大小,这也是 ram 的大小。
JPEG 或 PNG 只是一种磁盘存储格式。您在 unity 中看到的大小是用于渲染的 Ram 中的大小。尺寸越大,它需要的内存也就越多。
如果您正在寻找更小的应用程序大小,Unity 的默认压缩将是最好的(没有 mipmap)。例如,当您导出为 apk 时,无论如何它都会重新压缩所有资产。
当然,您仍然可以将原始图像保留为外部源并在运行时加载它,但是根据我的经验,使用外部源的整体应用程序大小会非常庞大。
由于资源文件夹中的外部图像不会与应用资产一起压缩。
推荐阅读
- javascript - 使用 Here Places 自动建议查找某些地点时遇到问题
- r - 我有一个 R 函数来找到对之间的最小值吗?
- spring - Spring Boot 2 迁移后未导出 Health Endpoint Metrics
- javascript - 组件名称需要以大写字母开头?
- cassandra - cassandra 中的复制因子和后来的变化
- sql - 使用滞后计算行之间的差异
- automated-tests - 从网页中读取 li 元素并将其存储在 OpenTest 中的数组中以检查重复项
- flutter - 如何像这样显示下一张卡片并在屏幕上只显示一张卡片?(附上 UI 截图)
- c++ - 使用 AVX 对两个 zmm(512 位)寄存器进行异或运算
- javascript - jquery 在 chrome、mozilla 和 IE 中工作,但不能在 safari 中工作