Unity导入图片时,通过设置属性快速实现资源的压缩

是在学习tilemap绘制世界地图的时候发现的这个功能。

之前一直只是粗略的知道这部分是对应图片资源的压缩的。比如Compression是指的压缩质量,想要完全不压缩就设置None,会导致图片资源会大一些。

在我的例子工程中,其他图片资源的尺寸都是64x64,在tilemap的调色板中放入是没有任何异常的。但是这个作为瀑布的图片,原图尺寸是640x256,如果按照64比例会生成10*4的图:

但是从图片细节上来看,并不需要切割成这么小的方块。所以,切割时对64x64等比例放大,成为128x128,这样,既能不缺少更多细节,又不至于切割的过于零碎,不好使用。

当然,还可以继续放大。但是如果继续放大,纵方向是256个像素,就无法区分瀑布底部和瀑布上面,不利于扩展使用。

由此,我得到了10张128x128的图片;0-4张可以形成瀑布上方的动画;5-10可以形成瀑布下方的动画。

但是将这个作为Tile之后,我发现,这个Tile和其他的tile之间,如果同时放入调色盘中,会有明显的不适,因为该tile会比其他的tile大了一圈,如图所示:

 一个解决方法是,专门为这个tile创建一个单独的调色板,设置对应的尺寸,这样就能够正常使用了。

但是查看示例工程,将64x64的tile和这个128x128的tile,放到一个调色板,看着没有任何的违和感。

原因是瀑布图切割成128x128,但是有一个Pixels Per Unit,其他图设置为64,表示一个单元格渲染64像素,将这个128x128的Pixels Per Unit设置成128,就表示对于这一张图,一个单元大小的格子,渲染这张图片时渲染128个像素,最终效果就是如上图所示,虽然是同样的格子,原图尺寸不一样,但是对于我们逻辑上来说,都是一个格子。在项目工程中是统一的。

通过Pixels Per Unit,就能够把不同分辨率的图,通过设置每单位像素数,令其在逻辑上大小一致,最终效果如图所示:

一开始以为是压缩导致,以下是在调查这个问题的时候,发现的关于素材压缩的一些配置。之前对于压缩设置只是有个概念,没有具体研究其影响。

查看发现,这个128x128的sprite,在示例工程中实际是51x51。

 那么这个51x51是怎么来的?我们明明知道png素材的尺寸是640x256。

为什么不使用64x64,而是51x51?

如图所示。设置了“Max Size” = 256.

这个是设置了图片导入工程后,对图片进行怎样的一个压缩处理:

设置max size为256后,原本640x256的图片,就会被等比例缩小为256x(256/640*256),也就是256x102.4.

这个时候,虽然我们进入sprite editer中,切图还是按照640x256进行切割的,但是我们最终得到的可供工程所使用的“Sprite”素材,已经变成了128 * (256/640) = 51.2。

所以,这就是我们的sprite的最终尺寸了。

这个地方,实际上并不是设置sprite素材的属性,而是导入图片后,对素材做怎样的压缩处理,甚至其大小也会做对应的变化。

如:

设置了maxsize= 256后,图片的尺寸为256x102,大小为76.5KB。

如果设置的maxsize高于原图的最长宽或者高,那么图片尺寸为原图尺寸

640x256,并且大小也会做相应的变化,成为80.0KB . 

如果再次基础上,我们修改Compression属性,也就是修改压缩程度:

比如选择“High Quality”,可以看到,图片的颜色格式也变成了RGBA,多了一个alpha通道,并且,图片大小变成了160.0KB 。

 之前虽然知道这个地方是设置图片导入工程后的压缩算法的,但是没有这么直观的感受到。原来这里的修改是会直接影响到后面所有的使用者。

当然,不要忘记那个filter mode,设置为point(no filter)。

猜你喜欢

转载自blog.csdn.net/grf123/article/details/132198957
今日推荐