Unity3d 图片拼接 混合模式改成点线性过滤

来源:互联网 发布:win10安装ubuntu共存 编辑:程序博客网 时间:2024/06/05 22:59
从效率上来说 点线性过滤 > 二线性过滤 > 三线性过滤。如果点线性过滤好用的话为什么NGUI要用三线性过滤呢?
1.UISprite是可以随便缩放的,如果不缩放的话点线性没问题,可是一旦缩放因为用点像素来填充那么图片必然糙了。。
2.我觉得NGUI是为了支持3D界面所以不得不在生成Atlas后时候勾上了Generate Mip Maps选择三线性来过滤图片。生成MipMaps以后那么在内存中的图片会大很多(MipMaps就是典型的用空间来换时间)所以如果你没有3D界面的话一定要把mipMaps关闭,采取二线性过滤即可。
最后在回到文章的题目,如何解决NGUI图片的拼接问题。
1.不要用奇数图片,保持美术给的图宽高都是偶数。
2.拼接的时候都按偶数像素来拼接。
3.取消Generate Mip Maps ,不生成MipMaps。
4.图片采用点线性过滤模式。
5.采取点线性过滤的话图集上的图片就不能使用NGU的缩放功能了,不然图片会糙的。我觉得可以把需要拼接的图片放在一个图集上,如果拼接的图片不多的话也可以考虑用UITexture 

其实产生黑线的原因就是因为非点线性过滤模式。图片的边缘像素会与周围像素做一定程度的均匀采样,而NGUI做成的图集的空隙处,是用颜色(0,0,0,0)来填充的,被均匀采样的像素会因为空隙的黑色透明而比原来的颜色更暗更透明,所以出现了黑线。所以不只是拼接而成的图片,单张图片也会产生黑边。我的做法是利用为了九宫格图片而设置的border,修改UIBasicSprite的填充函数,增加一个是否渲染边缘(周围8块)的选项,如果不渲染,则不生成边缘的8块mesh的顶点数据。当然,如果需要用到slice模式,只能让美术给图片边缘扩充1-2个像素,颜色与原边缘像素相同。(因为美术太懒,我都是自己PS的……)我还给UIBasicSprite增加了镜像复制的功能,这样我只需要一个角,就能得到一个矩形,当然,用于镜像方向的边界,也是去掉border那么多的像素的

不知道我出现的问题和你的是否一样。美术给了一张过大的图,拆成两张,贴到两个片上放一起中间会有一条线,和你第一张截图表现一样。我是把两张图片的Wrap Mode改为Clamp就能解决这个问题。因为默认是Repeat,就是使用自身循环来补齐像素,这相当于在我们已经结合好的图里加了东西(那条线);而Clamp是拉伸,就不会出现那条线了。不知道我的理解对不对。我在改变Filter Mode的时候对这条线没有影响,而是选择Point的时候是图片近看后出现了像素感,线性过渡的话就比较平滑,没有像素感。

Texture.wrapMode 循环模式
var wrapMode : TextureWrapMode
Description描述
Wrap mode (Repeat or Clamp) of the texture.
循环模式(重复或强制拉伸)
Set the texture to clamp at the borders to avoid warping artifacts with TextureWrapMode.Clamp . Or tile the texture with TextureWrapMode.Repeat
在贴图边界以设置贴图的重复模式的方式避免不真实的情况,使用强制贴图边界拉伸 TextureWrapMode.Clamp 或者贴图重复平铺 TextureWrapMode.Repeat
renderer.material.mainTexture.wrapMode =TextureWrapMode.Clamp;
原创粉丝点击