Unity导入图片尺寸大小和压缩格式的问题
文章目录
- 一、前言
- 二、图片导入到Unity中尺寸会变成2的N次方
- 三、为什么非要是2的N次方呢
- 四、常用的压缩格式
- 五、监听资源导入事件,自动化处理压缩格式
一、前言
虽然 Unity
支持许多常见的图像格式作为导入纹理的源文件(例如 JPG、PNG、PSD 和 TGA
),但在3D
图形硬件(如显卡或移动设备)的实时渲染过程中不会使用这些格式。3D
图形硬件要求纹理以专门格式进行压缩,这些格式针对快速纹理采样进行了优化。各种不同的平台和设备都有自己不同的专有格式。
默认情况下,Unity Editor
会自动将纹理转换为最合适的格式,以匹配我们选择的构建目标(如Android、iOS
)。只有转换后的纹理才会包含在我们的构建中;源资源文件保留为原始格式,位于项目的Assets
文件夹中。
我们可以对纹理选择不同的压缩格式(例如,如果使用纹理作为遮罩,只有一个通道,则可以选择使用 BC4
格式来节省空间,同时保持质量)。
二、图片导入到Unity中尺寸会变成2的N次方
如果你将一张图片导入到Unity
中,你会发现默认被转成了2的N次方
大小。
比如下面这张图原图尺寸是640x1138
导入到Unity
中,看到尺寸变成了512x1024
这是因为图片的纹理像素在Unity
中需要遵循2的N次方
,由图形学决定。
我们也可以设置不转换,设置Non-Power of 2
为None
,此时图片就会保持原尺寸了。
不过不推荐这样做,因为最终图片加载到显存中,也会进行转换为2的N次方
,而这个转换比较耗时,所以可能会导致卡顿。
三、为什么非要是2的N次方呢
那么,为什么非要是2的N次方
呢?
打个不是很恰当的比方,现在我们建了一所小学,每间教室最多安排32
个座位。
现在学校招生,如果招的学生数量不是32
的整数倍,那么就会浪费教室。比如招了33
个学生,那么多出来的1
个学生只能安排到另外的一间教室,导致老师上完课还得再跑另外这间教室单独给这个学生再上一次课,这也对资源和时间的一种浪费。
如果学生数量是32
的整数倍,那就不会浪费资源和时间了。
四、常用的压缩格式
纹理压缩格式 | 描述 | 大小(256x256 像素纹理) | 平台支持 |
---|---|---|---|
RGBA 32 位 | 真实色彩,有 Alpha。这是具有 Alpha 通道的纹理的最高质量压缩格式。 | 256KB(32 位/像素) | 所有平台。 |
RGBA 16 位 | 低质量真实色彩。这是具有 Alpha 通道的纹理的默认压缩格式。 | 128KB(16 位/像素) | 所有平台。 |
Alpha 8 | 高质量 Alpha 通道,但没有任何颜色。 | 64KB(8 位/像素) | 所有平台。 |
RGB 16 位 | 65,000 种颜色,没有 Alpha。使用比压缩格式更多的内存,但可能更适合没有渐变的 UI 或清晰纹理。 | 128KB(16 位/像素) | 所有平台。 |
RGBA Compressed PVRTC 4 位 | 压缩 RGB 纹理。高质量纹理,尤其是颜色数据,但可能需要很长时间压缩。 | 32KB(4 位/像素) | Android (PowerVR)、iOS、tvOS。 |
RGB Compressed PVRTC 4 位 | 压缩 RGB 纹理。高质量纹理,尤其是颜色数据,但可能需要很长时间压缩。 | 32KB(4 位/像素) | Android (PowerVR)、iOS、tvOS。 |
RGBA Compressed PVRTC 2 位 | 高压缩 RGBA 纹理。质量低,但较小,因此提高了性能。 | 16KB(2 位/像素) | Android (PowerVR)、iOS、tvOS。 |
RGB Compressed PVRTC 2 位 | 高压缩 RGB 纹理。质量低,但较小,因此提高了性能。 | 16KB(2 位/像素) | Android (PowerVR)、iOS、tvOS。 |
RGB Compressed ETC | 压缩 RGB 纹理。这是适用于 Android 项目的不带 Alpha 通道的纹理的默认纹理压缩格式。 | 32KB(4 位/像素) | Android、iOS、tvOS。注意:ETC1 受到所有 OpenGL ES 2.0 GPU 的支持。它不支持 Alpha。 |
RGB Compressed ETC2 | 压缩 RGB 纹理。 | 32KB(4 位/像素) | Android (OpenGL ES 3.0) 。注意:在不支持 ETC2 的 Android 平台上,纹理在运行时解压缩为 Build Settings 中的 ETC2 fallback 指定的格式。 |
五、监听资源导入事件,自动化处理压缩格式
我们有时候需要在导入资源的时候做一些自动化处理,比如导入图片自动设置压缩格式等,此时我们就需要使用AssetPostprocessor
这个类了。
示例代码如下:代码放入Editor
文件夹下
using UnityEngine;
using System.Collections;
using UnityEditor;
public class MyEditor : AssetPostprocessor {//模型导入之前调用public void OnPreprocessModel(){Debug.Log ("OnPreprocessModel="+this.assetPath);}//模型导入之前调用public void OnPostprocessModel(GameObject go){Debug.Log ("OnPostprocessModel="+go.name);}//纹理导入之前调用,针对导入的纹理进行设置public void OnPreprocessTexture(){Debug.Log ("OnPreProcessTexture="+this.assetPath);TextureImporter impor = this.assetImporter as TextureImporter;impor.textureFormat = TextureImporterFormat.ARGB32;impor.maxTextureSize = 512;impor.textureType = TextureImporterType.Advanced;impor.mipmapEnabled = false;}public void OnPostprocessTexture(Texture2D tex){Debug.Log ("OnPostProcessTexture="+this.assetPath);}public void OnPostprocessAudio(AudioClip clip){}public void OnPreprocessAudio(){AudioImporter audio = this.assetImporter as AudioImporter;audio.format = AudioImporterFormat.Compressed;}//所有的资源的导入,删除,移动,都会调用此方法,注意,这个方法是static的public static void OnPostprocessAllAssets(string[]importedAsset,string[] deletedAssets,string[] movedAssets,string[]movedFromAssetPaths){Debug.Log ("OnPostprocessAllAssets");foreach (string str in importedAsset) {Debug.Log("importedAsset = "+str);}foreach (string str in deletedAssets) {Debug.Log("deletedAssets = "+str);}foreach (string str in movedAssets) {Debug.Log("movedAssets = "+str);}foreach (string str in movedFromAssetPaths) {Debug.Log("movedFromAssetPaths = "+str);}}}
Unity导入图片尺寸大小和压缩格式的问题相关推荐
- 如何扩大图片尺寸大小?图片怎么编辑大小尺寸?
有我们在网上找图片素材的时候,有时候会发现找到的图片尺寸很小,导致无法使用,只能将这张图片扩大尺寸.怎么放大图片尺寸呢?其实我们可以使用图片改大小(在线修改图片尺寸大小工具-压缩图)工具来修改图片大小 ...
- 王者荣耀头像大小怎么调?调整图片尺寸大小工具分享
手游王者荣耀换头像后,发现头像显示不全怎么办?很多小伙伴都发现了如果上传的图片尺寸过大会导致头像只显示一半,这时候需要修改图片大小来调整图片尺寸,怎么才能缩小图片尺寸呢?今天小编就推荐一款图片改大小( ...
- js常用插件(七)之conversion压缩图片(不改变图片尺寸大小)
js常用插件之conversion压缩图片(重点:不改变尺寸大小) 欢迎点击: 个人官网博客 图片压缩只是他的一种功能,更多可以查看官方文档 重点:压缩体积并且图片尺寸大小是不变的 用法很简单: &l ...
- 图片怎么转换大小?怎么调节图片尺寸大小?
在遇到需要改图片大小(https://www.yasuotu.com/size)尺寸时,我们会想要通过ps去修改图片尺寸,但是安装和操作都比较复杂,本文就分享给大家一个图片大小转换的在线图片处理工具, ...
- 电脑如何修改图片尺寸大小?怎么图片改大小?
在电脑如何修改图片尺寸大小?遇到这种情况我们可以使用压缩图的图片改大小功能,可以直接图片改大小在线处理,非常方便,下面来看看具体步骤吧. 1.使用电脑浏览器打开压缩图选择图片改大小. 2.上传需要修 ...
- html 图片比例 js,js自动等比例设置图片尺寸大小
css 图片等比例缩放 首页产品展示的图片都变形了,客户要求图片等比例大小,和产品展示的效果一样: css控制图. 网站的内容页面,经常要放图片,如果图片太大会撑出,影响页面美观. > HTML ...
- nodejs批量裁剪图片尺寸大小
使用 $ node resetImage.js 依赖第三方库 $ npm install --save-dev sharp dotenv 代码 .env # 图片存放的文件夹位置 AVATAR_PAT ...
- 如何调整图片尺寸大小?电脑怎么修改照片大小?
生活和工作时经常遇到图片尺寸大小不合适的情况,尤其是在上传时,需要改图片大小(https://www.yasuotu.com/size),那么如何修改照片大小呢?试试这款在线修改图片工具吧,快速修改图 ...
- 怎么修改图片尺寸大小?图片改大小用什么软件?
怎么修改图片尺寸大小?可以使用压缩啦的图片改大小(图片改大小 在线修改照片大小 图片修改大小工具-压缩啦)工具,不用下载安装就可以在线图片修改,一起来看看怎么操作吧. 1.进入压缩啦点击图片改大小. ...
- 怎样改变图片尺寸大小不变形?如何设置图片尺寸?
怎样改变图片尺寸大小不变形?想要快速完成图片尺寸大小修改,给大家分享一下在线快速图片改大小的操作技巧,使用图片在线编辑工具,即可调整图片大小. 1.上传图片. 2.选择尺寸或自定义宽高,压缩等级输入参 ...
最新文章
- 【java】在分页查询结果中对最后的结果集List进行操作add()或remove()操作,报错:java.lang.UnsupportedOperationException...
- 终端仿真程序_SecureCRT for mac(终端SSH工具)
- PHP的线程安全与非线程(NTS)安全版本的区别
- DNS 正向查找与反向查找
- 对接生态:Logstash 接入日志服务
- pycharm调试GreenOdoo
- 华为手机html查看器,华为手机文件查看管理器
- 架构 - 5种常见的软件架构
- 回溯法(国际象棋八皇后放入棋盘)
- js获取剪切板文字图片方法
- 产品如何取得WFA的WiFi认证(一)总览
- 基于matlab使用合成雷达和无线通信信号训练的语义分割神经网络执行频谱检测
- 直线---科林明伦杯H题
- 中国移动MIFI--CM510,4G TD-LTE MIFI 上网终端开箱及初步体验@上海
- 圣天诺(LDK)加密锁 云授权,不用使用硬件的加密锁(加密狗)
- 1218:取石子游戏(swap)
- 磺酸基-Cy7 叠氮化物 DIPEA(二异丙基乙基胺)盐,Sulfo-Cy7 azide DIPEA (diisopropylethylamine) salt
- ASP.NET Zero 11.1.0
- linux 6to4,在光猫上配置6to4接入IPv6的方法(可用于谷歌、维基等,Android可直接支持)...
- 人脸识别论文——发现微小的脸
热门文章
- Python代码破解路由器config.bin从入门到放弃
- 酒香也怕巷子深,教你一招,轻松让百度收录你的个人站点
- 数据三等分离散python_数据自习室01-描述性统计量
- LPR基准利率BP是什么意思,银行利率bp是什么意思
- Tensorflow-GPU使用时笔记本电脑声音过大的问题
- 算法的衡量:时间复杂度和空间复杂度
- 点菜宝系统服务器无响应,点菜宝系统精典方案介绍
- 唐家三少的新作品《天珠变》的最近评论...
- bh1750采集流程图_基于BH1750的光照度检测)报告方案.doc
- 【数据分析】基于RFM模型的线上零售中的客户细分(二):RFM模型实战