creater关于blend,关于预乘premultiply alpha,关于图片白边灰边的几点疑问

谢谢回复。

我觉得cocos默认使用BlendFunc::ALPHA_PREMULTIPLIED是在cpu上计算混合,所以先预乘一下。
一般混合是{SRC_ALPHA,ONE_MINUS_ALPHA}交给openGL利用gpu后乘(对应预乘)处理最终的颜色。
所以预乘跟显示效果是有关系的。

最后我问的白边问题,我是觉得按理说不管预乘与否都不应该出现白边啊,因为边界的alpha是0或者是1啊。
难道我用的图片边界都有半透明?

这张图没有预乘也没有白边。。。

http://forum.cocos.com/uploads/default/original/2X/5/5e22fce09b3f9f888d802687afdf3df32456533f.png

理解不了了。。。

1.边界alpha是0或1?谁告诉你的,你自己画个没有白边的图看边缘像素?你为什么不拿有白边的图看边缘,有问题就拿有问题的东西研究,别自己画个其他的东西就得出结论
2.像素显示是一个一个矩形色块,曲线实际上也是若干直线组成,你放大图片,就会有锯齿,怎么解决锯齿问题,你画个圆,看看边缘你就知道了
3.什么cpu,gpu,什么就“什么什么了”就“所以”了,完全不知道你在说啥,别你觉得是啥就说啥,贴资料,贴数据
4.我没说预乘和最终效果没关系,我说没有必然关系,因为决定最终显示是数据,怎么算得到的数据是根本,图片本身存储数据,引擎和底层渲染处理数据,传给gpu渲染,所以我说“不同混合运算,最终效果自然不同”

使用cocos create 2.0.5 遇到同一问题,图片输出premultiply alpha 设为true勾上,sprite src blend :ONE,dst blend :ONE_MINUS_SRC_ALPHA 搞定了,感谢楼主

1赞

老哥。。。最新版本的creator,TP预乘打图,引擎设置one,图片能正常显示,但是设置节点透明度后,图片就开变亮变白而不透明,这个是有bug么

修正一下是有透明,但是会变亮变白

你是说 255 时正常,透明度低于 255 就变亮变白?

恩。。。255是正常的,低于255就变亮变白,之前看有篇帖子说这个是bug已经解决了。。。但是这边不知道为什么还是出现,我的引擎版本是2.3.0-rc1。。。。。。。。。。。。。。。。。。。。。。。

common.zip (12.1 KB)
劳烦查收一下…

抱歉,现在这个引擎确实不支持了,参考一下这篇帖子,有两种实现方式,需要改引擎: BUG:预乘模式blend(ONE,ONE)时,透明度无效
我们会再讨论一下是否要开放支持。

!!!!!感谢解答,有参考确实是解决了,不过我们用了一种特殊的方案,把materials新增了文章所说的材质球,但是是放在了res下面,依然能使用,请问这种方式会不会有什么额问题呢。

没什么问题,只要能加载到

恩,另外再咨询您一下,目前creator支持使用多边形打包么

支持,导进来直接用就行

您好,想追加问一句,如果说我想把DragonBones里制作好的龙骨动画导入到cocos里,采用dragonBones组件时,并不像sprite一样可以修改blend模式为1,图片白边灰边依然还是存在。是否有什么解决方法可以实现对dragonBones制作的动画也采取预乘+blend为One的方式来消除边际呢?谢谢!

图片资源和动画都勾选预乘模式就好了,设置完后重启下编辑器。

2赞

请给一个 demo

creator版本:2.4.3
electron版本:15.3.0

chrome上 不做预乘会有黑边 预乘后正常
electorn上 不做预乘会有白边 预乘后正常
image
游戏项目已上线 大量bundle资源 将全部素材做预乘然后全部设置one已经不考虑
怎么能保证在electron上达到跟chrome一样的显示效果呢?
同样的内核 造成显示不同的原因是啥?
还有 我现在理解修改引擎源码 读取图片时做预乘,sprite默认使用one 是否能达到2d-x的效果呢?
麻烦引擎大大们看见回复一下