部分图片在引擎中有黑边并且发糊不清晰

并且经过测试,同等分辨率下,1.10.2 和 2.4.0 清晰程度都是一致的。

目前我们也做了 webGL 的简单渲染测试例子,测试过后发现案例里面没有黑边。

我们已经将此问题列为 p1 级重要处理问题,会持续不断的尽快处理。

@sky068 和你的测试结果之所以不同,估计就是分辨率差别吧。

我们测试时使用 iPhone 5 分辨率,显示效果尺寸是小于原图尺寸的,所以跟你反馈的截图不符。不知道为什么你的截图尺寸那么大。请你自己找找原因吧。
引擎由于多分辨率适配会对尺寸进行拉伸,会对清晰度造成影响,这是正常的。我们只能确保在同一个尺寸上不会因为引擎自身原因引入额外的问题。

我这也是iphone5,的确是分辨率超过设计分辨率就会黑边模糊, 但是同样是iphone5的模拟器,2.4.0版本仍然有黑边模糊,而1.10.2就正常?

iphone5及iphone4因为高度和设计分辨率高度一样所以正常显示(适配模式为适配高度),但是只是1.10.2正常,而2.4.0仍然有黑边模糊问题,这个什么原因呢?上面为2.4.0, 下面为1.10.2, 把图片下载下来看区别很明显的。


我的截图和你们的一样大哦,只是我截的是局部,你们发的图是整个屏幕,单独比较那个黑边icon是一样大的。

要不你约他们远程看看呗,我们也希望能快点有结果~

表示我遇到过图片边缘白边的问题 是美术大大做图的时候加了描边 后面把描边去掉就好了

我去,细思极恐,我也是由于白色一张小图,发现了这个问题。没想到是个大大的问题。。。现在回看了下,果然好多图片其实都偷偷加了边框,原本还以为美工图没切好。。。

我这边都是,原尺寸,RAW,直接放上来的,没有缩放,没有拉伸。小图片问题比较明显,大图片基本上感觉不出来(2.4.2)

请问图片黑边的问题解决了吗?
我现在用的 2.4.3 ,在微信小游戏 中 白色边的 图片在放大之后 会有黑边
我这里应该怎么解决呢

黑白边问题由来已久,根本原因在于图片全透明的像素RGB值为0或1(可以在图片编辑软件中确认),纹理的Filter设置成linear时,半透明和全透明临接处采样时会采样到全透明像素的RGB值,于是就出现了黑边或者白边。设置纹理Filter为nearest,设置预乘改变blend等方式都不是特别好的解决方案,nearest放大会马赛克化,预乘+改blend会使node的半透明无效化。正确的解决方案是对全透明的RGB值做处理,设置成临接的半透明像素的RGB值(alpha还是0),也就是对图片做扩边处理,但要注意的是很多图片压缩优化合图的操作会造成扩展的RGB再次丢失,所以要对生成后的图片做处理。以上处理对h5有效。然后说一下微信的坑爹行为,微信会对png图片做预乘处理,也就是说png图片解码后,即使原图有RGB有值的全透明像素,该像素也会变成全0的透明色,于是黑边再次出现。微信的Image对象有一个文档中没有的premultiplyAlpha属性,在给Image设置url之前设置该值为false可以关闭默认的预乘行为,但是这个属性在某些版本的微信上无效,而且"只能"用在".png"结尾的png图片上,其他格式的图片设置后可能会报错。

10赞

这个问题不知道还会不会被解决,只要是sketch导出的图片cocos都显示不正常,希望3.x版本能解决,不过希望不大,官方似乎不认为这是问题。同一张图片对比过多个引擎,只有cocos显示异常。

你看看前面的聊天记录吧。我们这边帮你测了好多次了,也不止一个人进行验证,都排除了引擎原因,来回沟通成本太高了。会引起图片模糊的原因很多,引擎本质上只是对渲染指令的封装,GPU 的工作原理是硬件决定的,需要开发者首先排除使用问题。

所以我们这边先存档了。之后如果还有更明确的重现方式,会持续跟进的!目前主要还是依据用户反馈的频次来决定优先级。

理解,逻辑和功能都是没问题的。

只是现在用起来不太方便。目前项目发微信小游戏,采取的规避方式是对所有图选预乘和改 blend func(批量选择图片改预乘,批量替换 prefab 文件的字段)每次换图都要改,一不小心漏改就出美术bug。看了这么多,上面那位兄弟提的“解决”,肯定不是说这是功能问题,应该是说这是一个没有达到 让游戏开发更简单 目标的可改进点。

经过我们长时间对这个问题的关注,这不是引擎的技术或者产品使用上的问题。而是不同引擎默认发布的网页背景色不同导致的。

WebGL 测试例或者其它 H5 引擎没有黑边,是因为创建 webgl context 时开启了 alpha 通道,会导致在绘制 webgl 内容的时候会跟 html 元素的背景色进行混合。当网页背景恰好是白色时,会引起白边,如果此时物体边缘比较亮,看起来就刚好合适。

而 Creator 发布的网页,默认背景是黑色的,所以在一些例子中看上去就会有黑边。如果 Creator 开启 alpha,并且网页弄成白色,也就不会看到黑边了。但这只是治标不治本的方法,因为看不到黑边是以产生白边为代价,当场景里的对象是深色时白边就会成为新的可见问题。

更根本的解决方案还是使用前面讨论的正规路线。

Unity的纹理导入有一个Alpha is Transparency选项来做color dilation解决半透明黑边问题,这个希望在cocos的工作流里加上,特别是自动合图之后的纹理,原图还能让美术或者工具处理,自动合出来的图只能处理发布后的资源,有点麻烦

是的,这也就是我前面说的

其实目前在自动图集里,我们已经做了同样的操作了,就是 paddingBleed 选项。之后我们会对所有资源开放同样的功能。这是唯一能彻底解决的方案,而不是像其它引擎那样默认采用预乘。目前 laya/egret,包括 Cocos 老版本都没有类似的方案。