0

我正在尝试重现 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

4

1 回答 1

1

原版的淡入淡出绝对不像 bm_subtract 那样简单——我会说它最像 Color Burn。这是在 PDN 中完成的模型:

在此处输入图像描述

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

于 2019-10-04T14:19:02.363 回答