扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 123|回复: 0

[转载发布] 关于MV的BlendMode问题

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    2025-2-4 02:05
  • 签到天数: 110 天

    连续签到: 2 天

    [LV.6]常住居民II

    2327

    主题

    395

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    10465
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    13215

    灌水之王

    发表于 2024-2-20 10:24:43 | 显示全部楼层 |阅读模式
    一直以来RM的BlendMode的数量都很少(正常,加法,减法)。这次MV实际上是CEF + WebGl,我想应该通用的BlendMode都能支持了吧?

    翻翻帮助文档。有几个假惺惺的方法canUseDifferenceBlend 、canUseSaturationBlend 。但是并没有用,默认提供的BlendMode只有四种:BLEND_ADD BLEND_MULTIPLY  BLEND_NORMAL BLEND_SCREEN
    整整增加了一种!真是感天动地!感谢娇喘!感谢Chunsoft!

    我趴在地上冷静了一下,考虑到MV操作WebGl实际上是通过pixi库,这些枚举也是pixi库的alias,是不是查找一下pixi库里面的blendMode的枚举会有更多呢?
    搜了一下,高兴地跳起来
    1.   BLEND_MODES: {        NORMAL:         0,        ADD:            1,        MULTIPLY:       2,        SCREEN:         3,        OVERLAY:        4,        DARKEN:         5,        LIGHTEN:        6,        COLOR_DODGE:    7,        COLOR_BURN:     8,        HARD_LIGHT:     9,        SOFT_LIGHT:     10,        DIFFERENCE:     11,        EXCLUSION:      12,        HUE:            13,        SATURATION:     14,        COLOR:          15,        LUMINOSITY:     16    },复制代码
    复制代码
    真的常见的都有了。
    赶紧写段代码测试一下:
    1. bit2 = new Bitmap(640,480);bit2.fillAll("#FFFFFF");sp2 = new Sprite(bit2);sp2.blendMode = 11;//11是差值模式SceneManager._scene.addChild(sp2);复制代码
    复制代码
    测试结果是: 0 1 2 3都有效果  后面的都和0一样,什么鬼。
    继续找代码,发现了pixi坑爹的地方:
    1.         PIXI.blendModesWebGL[PIXI.blendModes.NORMAL]        = [gl.ONE,       gl.ONE_MINUS_SRC_ALPHA];        PIXI.blendModesWebGL[PIXI.blendModes.ADD]           = [gl.SRC_ALPHA, gl.DST_ALPHA];        PIXI.blendModesWebGL[PIXI.blendModes.MULTIPLY]      = [gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA];        PIXI.blendModesWebGL[PIXI.blendModes.SCREEN]        = [gl.SRC_ALPHA, gl.ONE];        PIXI.blendModesWebGL[PIXI.blendModes.OVERLAY]       = [gl.ONE,       gl.ONE_MINUS_SRC_ALPHA];        PIXI.blendModesWebGL[PIXI.blendModes.DARKEN]        = [gl.ONE,       gl.ONE_MINUS_SRC_ALPHA];        PIXI.blendModesWebGL[PIXI.blendModes.LIGHTEN]       = [gl.ONE,       gl.ONE_MINUS_SRC_ALPHA];        PIXI.blendModesWebGL[PIXI.blendModes.COLOR_DODGE]   = [gl.ONE,       gl.ONE_MINUS_SRC_ALPHA];        PIXI.blendModesWebGL[PIXI.blendModes.COLOR_BURN]    = [gl.ONE,       gl.ONE_MINUS_SRC_ALPHA];        PIXI.blendModesWebGL[PIXI.blendModes.HARD_LIGHT]    = [gl.ONE,       gl.ONE_MINUS_SRC_ALPHA];        PIXI.blendModesWebGL[PIXI.blendModes.SOFT_LIGHT]    = [gl.ONE,       gl.ONE_MINUS_SRC_ALPHA];        PIXI.blendModesWebGL[PIXI.blendModes.DIFFERENCE]    = [gl.ONE,       gl.ONE_MINUS_SRC_ALPHA];        PIXI.blendModesWebGL[PIXI.blendModes.EXCLUSION]     = [gl.ONE,       gl.ONE_MINUS_SRC_ALPHA];        PIXI.blendModesWebGL[PIXI.blendModes.HUE]           = [gl.ONE,       gl.ONE_MINUS_SRC_ALPHA];        PIXI.blendModesWebGL[PIXI.blendModes.SATURATION]    = [gl.ONE,       gl.ONE_MINUS_SRC_ALPHA];        PIXI.blendModesWebGL[PIXI.blendModes.COLOR]         = [gl.ONE,       gl.ONE_MINUS_SRC_ALPHA];        PIXI.blendModesWebGL[PIXI.blendModes.LUMINOSITY]    = [gl.ONE,       gl.ONE_MINUS_SRC_ALPHA];复制代码
    复制代码
    可以看出后面的数组是WebGL的blendFunc的参数。这3后面的都和第一个一样,pixi挖了坑居然不填!
    于是我打算自己改一改。就拿11,Difference来说。通过http://www.andersriggelsen.dk/glblendfunc.php这个页面可以测试blendFunc参数的效果。按照测试差值模式应该是
    1. PIXI.blendModesWebGL[PIXI.blendModes.DIFFERENCE] = [gl.ONE_MINUS_DEST_COLOR, gl.ONE_MINUS_SRC_COLOR];复制代码
    复制代码
    我以为就万事大吉了,没想到,pixi的挖坑不填是有原因的。
    这么改了之后确实是有效果,然而结果并不是和背景合成,而是和一个白色画布进行合成直接叠加在背景上
    举个例子:
    和背景合成应该是这样:

    和白色画布合成就会变成这样:

    查了一下资料,blend的时候是新图和buffer进行计算,可能是渲染合成的时候没有保留之前渲染的背景,直接用默认底色进行的合成。但是pixi的渲染代码实在是看不懂,也不知道怎么改比较好。
    希望比较熟悉js和pixi以及webgl的各位大大指点一下

    ps 这次好像没有截图的方法了,大大的差评
                 本帖来自P1论坛作者trentswd,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=384578  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2025-3-10 16:15 , Processed in 0.094866 second(s), 54 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表