在ccc的2.13版本上和下载了2.4版的实验下,在编辑器里加载或者动态加载spine动画,只要json文件里的“blend”:“screen”有这个滤色效果属性,渲染出来的地方就会出问题,表现为那个图片整个为偏红色或者出现矩形边框等,请问有啥解决方案吗,还是ccc里面就只能这样,无法代码解决,但是在cocos2dx里面加载出来是正常的
还真遇到这个问题,我用的是2.1.2,其他版本未知,以下经验供参考。
问题1:黑边问题
如果图片没有预乘,则ccc2.1.2在预览时正确显示,构建后出现黑边问题,因为ccc212构建后,把预乘属性记录给弄丢了,而引擎中的预乘属性默认是true,这导致所有没有预乘的spine图片,构建出来后出现问题。
问题2:滤色(screen问题)
先看滤色的原理:
设:
- s 为源色 (0-1)
- d 为目标色(0-1)
- sa为源透明度(0-1)
则,混合算法为: 结果=s * sa+d * (1-s * sa)
有预乘的情况下, 源色s 已经被算成了s * sa,因此公式变成了
结果=s+d(1-s)*
对应的WebGL blendFunc为:
case spine.BlendMode.Screen:
src = cc.macro.ONE;
dst = cc.macro.ONE_MINUS_SRC_COLOR;
break;
这个渲染模式在有预乘的情况下,是没有问题的(因为预乘过的图片,颜色中已经包含了alpha)。当没有预乘时,这个渲染模式忽略的源图的alpha,就会出现曝光过渡的问题。由于WebGL的限制,我们无法指定在没有预乘的情况下的正确BlendMode。 这个问题结果就是看到一些图片,边缘发白,或者成片的白色。
结论
spine图片导出时全部带上预乘,应该就能避免这些问题。
spine的话,要看从spine工具导出时,是否增加预乘的
如果你不确定的话,可以尝试,在creator中增加或者去掉预乘,看看效果哪种是想要的
212如果图片没有预乘,Creator中预览没问题,构建后才有问题,因此在工具中点击没用。
2.1.2没用过这个版本····现在都是2.4
212这个版本,构建后,把你勾选的那个预乘属性给弄丢了,无论你编辑时是否勾选,运行时,预乘属性永远是true。
让美术修改了spine动画导出的图片,默认是溢出,改成你说的预乘,确实消除了白边和变色,但是好像原先想要的处理了透明度图片的效果就没了,
这个是啥效果?
比如星星闪动的效果,原本应该是这边闪烁几颗,然后下几帧是移动在另外的位置闪烁,在这个过程是有做滤色效果遮住的,结果却变成了滤色做的透明遮罩层不见了直接看见所有的星星闪烁,还有位置的移动直接被展示出来,这个能理解吗,说的有点绕
这个还真没遇到过,你研究研究。
该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。