2017-12-03 19:15:31 qq_39574690 阅读数 3638

随便上网找一张图片,找个Unity3d支持的格式,例如:.png格式(jpg格式不能经过下面的抠图去掉背景)

然后直接把图片拖动到Unity3d里面,可用一个文件保存这些图片资源,修改Texture Types为Sprite(2D and UI),下面Wrap Mode为Clamp即可。

可是,一般是可以直接这样就OK了,但有一种图片,例如:

类似于这种图片,是有的吧?导入进去后,这个圆形外面的白色和灰色的背景很碍眼,如何将这些去掉呢,只剩下一个圆形的图片。

使用简易版PS或者美图秀秀软件可将它们去掉,这种技术叫抠图,就是将需要的图片内容拿出来变成新的一张图片,这样白色和灰色的背景就不见了。再见

注意:.jpg图片不知道为何在抠图之后背景图还是一样存在,换了一种格式.png就可以了,-_-||

2016-12-27 12:48:32 xmousez 阅读数 17531

在上一篇文章里 Unity3D - 你导入的资源,并不是Unity使用的资源 介绍过,Unity使用的资源是你无法直接操作的,那么对于图片资源,我们应该如何去处理和优化工作流程呢?

图片资源的分类

在Unity中,图片一般可以分为两种:贴图(Texture)和精灵(Sprite)。我们可以简单的理解为3D(模型使用的)图片和2D(UI使用的)图片。在可以直接选择Texture Type去更改你的导入方式。

  • Texture
    • Texture一般作为3D模型上的贴图,需要有对应的材质球并关联到相应3D网格模型去使用。一般来说Texture会是一个长宽像素都是2的n次方的正方形,这也是大部分建模软件(如maya)规定的POT(Power Of Tow)。
    • 不过并不是说非POT图片就不能使用,只是在Unity的压缩上会很吃亏,而且你导入后Unity仍然会以POT方式去生成对应的图片。
    • POT实际上可以是长方形,只要长宽都是POT就可以,但是大部分建模软件上都会使用正方形。
  • Sprite
    • Sprite一般作为UI上的图片,一般不会去制作对应的材质球。在UGUI上一般是拖动到相应的控件上就可以了。
    • Sprite是一个资源导入的方式,一个资源导入后并非只能是单个Sprite,在Sprite Mode选项上可以选择Multiple去生成多个Sprite,不过需要在Sprite Editor选项上对图片进行切割,通常需要美术参与。
    • Sprite一般对大小不会做限制,UI需要多大就用多大,但是Unity在压缩上,对4的倍数分辨率的图片支持上会更好一点(应该是方便图片在POT下的位置计算),所以在制作时可以对PS的画布大小进行适当调整。
    • Sprite在导入设置完成后建议使用 Sprite Packer 进行打包,如果你确定不打包。。。那么建议你做成POT。。。
    • 在使用 Sprite Packer 打包图集后你会发现,Unity生成的图片都是POT的。

MiniMap

图片资源在导入为Sprite后,我们可以看到一个MiniMap选项,该选项是生成该图片的低分辨图片(1/2,1/4,1/8。。。),这些小图会使生成的资源文件变大1/3,但是在3D渲染时Unity会根据物体显示的大小(或者距离?)自动选择不同的分辨率以提高渲染效率。
一般来说,Sprite不会有这种需求,所以关闭这个选项可以减少包体的大小。

而对于Texture,同样可以取消。Texture和Sprite实际上只是Unity的两种预设,当你在Texture Mode上选择Advance时,你会有很完全的导入选项。如果你确定你的3D物体不会有很多的远近变化时,选择Advance,取消MiniMap会是一个很正确的选择。而对于一般的3D物体,MiniMap带来的效率提高是值得你和用户去花费这点储存空间的。

资源的源文件格式

既然Unity可以使用PSD,那么你何必让美术去导出png呢?
PSD在导入速度上不比png和jpg慢(理论上应该会快,没测试),不过文件大小确实会变大。但是如果直接使用PSD,并要求美术直接在项目目录里进行资源管理和维护,实际上是在团队流程中省出了所有不必要的压缩格式文件(再次强调,导入资源使用的文件大小并不会影响最终的包体大小 )。
当然如果经常出现美术破坏项目目录结构的情况(上传非必要文件,命名不规范等),还是把文件发给程序比较好,而这种情况使用psd还是png那就见仁见智了,psd没有预览还是很难受的。(一般程序猿学PSD的基本操作比美术学SVN或者Unity都要快的多)

Sprite Packer + AssetBundle的注意事项

当你在使用AssetBundle时,你的Sprite引用实际上是Sprite Packer生成的图集的引用。所以在AssetBundle上,即便你只使用到一个图集中的一个小像素,Unity也会将该图集完整地打入AssetBundle中。所以Sprite尽量在Bundle的分包基础上去分图集。

2017-05-17 16:17:00 yongh701 阅读数 3632

Unity3D改变鼠标样式很简单,直接就封装好方法,以满足在游戏里面定制自己的鼠标样式的需求。下面举一个例子来说明这个问题。我需要将光标改成如下的形状:


注意这张图片是经过处理的png,白色的地方都用photoshop抠成透明了。

要在游戏里面实现如下的效果:


将a.png导入Unity3D,可以在主摄像机挂载如下的脚本CursorChange.cs:

using UnityEngine;
using System.Collections;

public class CursorChange : MonoBehaviour
{
    public Texture2D cursorTexture;
    void Start()
    {
        Cursor.SetCursor(cursorTexture, Vector2.zero, CursorMode.Auto);
    }
}
之后将导入的a.png设置为不压缩、完全保真:


再赋予给CursorChange.cs中的Texture2D cursorTexture即可:

这里脚本就一行,就要是3个参数,第1个参数cursorTexture大家已经知道是什么了,第2个参数Vector2.zero,也就是二维坐标(0,0)是指取材质图片a.png的左上角作为点击点:


第3个参数CursorMode.Auto是指渲染形式,Audo为平台自适应显示,支持此样式则显示,不支持不显示。ForceSoftware强制平台显示此样式。这东西发布到安卓平台应该会隐藏的。

2016-09-27 14:17:50 fengda2870 阅读数 8512
在透明贴图的边缘,离透明通道的边缘太近,而透明通道又没有切的那么确切,所以搞了半个背景的颜色在里面,而背景一般都是白色(按说png透明的部分就是透明,Photoshop怎么给填充的,我真不知道,估计是白色填充),所以白边就出来了。
一般都是因为压缩算法的缘故。
解决方案有好几个,一个是在最下面一层,搞一个透明度为1%,颜色是纯黑的图层,这样Photoshop算的时候,就吧透明部分直接搞成了黑色。于是白边变成了黑边,就没那么明显了。
还有一个是因为unity的透明算法,带alpha通道的图压缩起来都很蛋疼。于是png本身不用切透明贴图,吧alpha通道单独做一张灰度图。也可以搞定。


作者:David Dong
链接:http://www.zhihu.com/question/32087433/answer/56080214
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
2015-11-18 19:20:18 heyuchang666 阅读数 3831

Unity3d 支持的图形格式和大小优化

主要参考了官方文档,Unity3D支持的图形文件格式有 PSD, TIFF, JPG, TGA, PNG, GIF,

     BMP, IFF, PICT(但根据本人的亲手测试,Unity3D对高压缩游戏贴图DDS是具有良好的解析功能的,

    但DDS具体也分很多格式类型,我仅对游戏中提取出的DDS进行了测试)。

        PSD中层在导入Unity之后将会自动合并,但原PSD文件的层则作为保留,不必介意在PSD里面存放有多个图层。

        纹理尺寸是一个重点注意事项,因为非2的幂次尺寸纹理用于GUI纹理时使用会非常好,然而,在其他方面,该纹理将被转化为一个非压缩的RGBA32位格式,这会占用更多的显存,并且大大降低加载速度。但非2的幂次尺寸纹理可以在导入设置中使用Scale NonPower2 Sizes Up将非2的幂次纹理资源放大到2的幂次。

       这样可以让该图形被当作其他2的幂次尺寸纹理那样使用,被压缩之后占用较小的显存空间,并有较快的加载速度!

        还有作为性能的考虑,模型贴图要尽量使用Mip Maps。使用该Mip maps将多使用33%的内存,

    但能带来很大的性能上的优势。距离相机较远的物体将使用较小的纹理。

MIP map(有时候拼写成mipmap):是一种电脑图形图像技术,用于在三维图像的二维代替物中达到立体感效应。MIP map技术与材质帖图技术结合,根据距观看者远近距离的不同,以不同的分辨率将单一的材质帖图以多重图像的形式表现出来并代表平面纹理:尺寸最大的图像放在前面显著的位置,而相对较小的图像则后退到背景区域。每一个不同的尺寸等级定义成一个MIP map水平。MIP map技术帮助避免了不想要的锯齿边缘(称为锯齿状图形)在图像中出现,这种锯齿状图形可能是由于在不同分辨率下使用bit map图像产生的。

        最后在非地面和地板模型对象上,尽量不要使用Anisotropic filtering


没有更多推荐了,返回首页