无法复制某些混合淡出效果。 (游戏制作人:Studio 1)

Trouble replicating certain blend fadeout effect. (Game Maker: Studio 1)

我正在尝试重现 Playstation 1 游戏 Megaman X6 的某种淡出效果。屏幕变暗,较暗的颜色先变黑,然后较浅的颜色在淡入淡出时变黑。这就像使用 bm_add 一样,但用于使事物变暗而不是变亮。我试过使用 bm_subtract,但它与绘制一个逐渐增加其在整个屏幕上的不透明度的黑色矩形相同。所有颜色同时变成全黑。我之前几乎没有颜色混合的经验,而且我还没有完全理解它,所以我不确定该怎么做。我尝试过的所有混合模式都不起作用,我的互联网搜索也没有任何结果。我真的很沮丧,如果有人能告诉我我需要做什么,我将不胜感激。

我当前的代码(sprDot 只是一个白色像素的 1x1 图像,fadeAlpha 保持在 0 和 1 之间):

draw_set_blend_mode(bm_subtract);
draw_sprite_ext(sprDot, 0, view_xview[0], view_yview[0], view_wview[0], view_hview[0], 0, make_color_rgb(fadeAlpha * 255, fadeAlpha * 255, fadeAlpha * 255), 1);
draw_set_blend_mode(bm_normal);

我的游戏画面没有淡入淡出:https://i.imgur.com/uM6KIDK.png

我的游戏画面部分褪色:https://i.imgur.com/xGT4KPI.png

原版游戏画面不褪色:https://i.imgur.com/fcGvsaV.png

原版游戏画面部分褪色:https://i.imgur.com/W5wtVMG.png

原作的褪色绝对不像bm_subtract那么简单-我会说它最接近于颜色加深。这是在 PDN 中完成的模型:

考虑到这一点,解决该问题的最佳方法是编写一个 [片段] 着色器。这样的着色器非常简单,只需要一个统一(淡入淡出系数在 0..1 范围内),但您需要根据该统一的值使用一个公式来修改输出颜色。