gamemaker吧 关注:13,656贴子:95,212
  • 5回复贴,共1

为什么有的颜色使用part_type_blend时没有效果?

只看楼主收藏回复

我用gml粒子写了一个小特效,其中使用了part_type_blend
这个函数,按理说,会让重叠的粒子亮度叠加,直到呈白色。
其他参数都一样,alpha都是从1衰减到0.75,只有颜色不同。会发现只有那个自定义黄色叠加出了白色,c_green也多多少少有点叠加的感觉,其他颜色都没有什么效果,为什么呢?
(图片上的三行文字分别是c_lime、自定义浅黄色、c_green的颜色参数,格式为:明度RxxGxxBxx)
附图:
》》颜色为c_lime的效果是下面这样:

》》颜色为一个自定义浅黄色的效果是下面这样:

》》颜色为c_green的效果是下面这样:

》》颜色为c_yellow的效果是下面这样:


IP属地:河北1楼2019-01-07 14:08回复
    c_lime和自定义浅黄色的明度(亮度)都是255。


    IP属地:河北2楼2019-01-07 14:17
    回复
      基础知识1:part_type_blend相当于blend mode里的bm_add,这个绘制模式不是“绘制当前色彩”,而是“使用当前色彩进行增亮”,具体算法是RGB三通道的结果亮度是背景亮度+当前绘制亮度(溢出取最大值)。用0到255范围来表示就是MIN(背景亮度+前景亮度,255)。
      基础知识2:使用DEBUG或者什么其他模式方法可以查看c_lime这个内置变量(也许应该说是常量)的实际值,是65280,也就是十六进制的00FF00,和标准绿色完全一致。
      那么计算一下为什么LZ的4个颜色叠加只有自定义的浅黄叠加出了白色:
      实验一:c_lime,上文已经说到了,这个颜色是红0、绿255、蓝0。当两个粒子显示区域重合时,新红=0+0=0、新绿=255+255→512→溢出取255→255、新蓝=0+0=0。叠加结果仍然是0,255,0,当然看不出效果。
      实验二:自定义浅黄,红255,绿255,蓝128。叠加计算是红255+255→255、绿255+255→255、蓝128+128→255。准确说是三个通道都溢出得到的白色。顺便如果LZ选择的是蓝255,255,127的浅黄,叠加结果是255,255,254也会很接近白色。
      实验三:c_green,数值和实验一完全一致。
      实验四:c_yellow,红255,绿255,蓝0。和实验一数值不一致但有一个相同结果,那就是叠加后的颜色和原本的颜色完全一致。
      所以,如果想有一些视觉上明显的效果,需要在色彩选择上避免使用满通道255或者空通道0来拼凑颜色。


      IP属地:北京3楼2019-01-07 22:06
      收起回复
        这里的绿色的RGB值为0、255、0,0无论叠加多少次都不会增加,255到了最大值,也不会增加。所以应该增加红蓝通道的值


        IP属地:江苏4楼2019-01-08 22:00
        收起回复