0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Next2DAdvent Calendar 2021

Day 5

Next2D NoCode ToolのBlendModeを利用する

Last updated at Posted at 2021-12-04

今日はBlendModeの機能と効果を紹介したいと思います。
PhotoShopなどを利用する方は既にご存知かもしれませんが、最後まで読んでもらえると嬉しいです。

BlendModeを使用すると、指定したDisplayObjectと背景色の合成を行う事ができます。
ブレンドモードの種類は以下の14パターンです。

normal(標準)

ブレンドを使用していない通常の状態。

layer(レイヤー)

DisplayObjectに関する透明度グループを強制的に作成します。
複数のレイヤーを持つDisplayObjectを半透明にすると、以下のように表示されます。
レイヤーごとに半透明が適用されるので、重なる部分が透けて表示されます。
※2021年12月現在、layer,alpha,eraseはプレビュー時にしか表示確認ができません。

[normal alpha50%]

[layer alpha50%]

darken(比較(暗))

DisplayObjectのカラー値と背景色のうち暗い色(値が小さい方)を選択します。

変換式

新しい赤色 = (DisplayObjectの赤色 < 背景の赤色) ? DisplayObjectの赤色 : 背景の赤色;
新しい緑色 = (DisplayObjectの緑色 < 背景の緑色) ? DisplayObjectの緑色 : 背景の緑色;
新しい青色 = (DisplayObjectの青色 < 背景の青色) ? DisplayObjectの青色 : 背景の青色;

multiply(乗算)

DisplayObjectのカラー値と背景色のカラー値を乗算した後、0xffで割って正規化し、色を暗くします。

変換式

新しい赤色 = (DisplayObjectの赤色 / 0xff) * 背景の赤色;
新しい緑色 = (DisplayObjectの緑色 / 0xff) * 背景の緑色;
新しい青色 = (DisplayObjectの青色 / 0xff) * 背景の青色;

lighten(比較(明))

背景色とDisplayObjectのカラー値を比較して、明るい色大きい(値が大きい方)を選択します。

変換式

新しい赤色 = (DisplayObjectの赤色 > 背景の赤色) ? DisplayObjectの赤色 : 背景の赤色;
新しい緑色 = (DisplayObjectの緑色 > 背景の緑色) ? DisplayObjectの緑色 : 背景の緑色;
新しい青色 = (DisplayObjectの青色 > 背景の青色) ? DisplayObjectの青色 : 背景の青色;

screen(スクリーン)

DisplayObjectのカラー値の補数(逆)と背景色の補数を乗算して、ブリーチ効果を得ます。

変換式

新しい赤色 = DisplayObjectの赤色 + 背景の赤色 - DisplayObjectの赤色 * 背景の赤色 / 0xff;
新しい緑色 = DisplayObjectの赤色 + 背景の赤色 - DisplayObjectの赤色 * 背景の赤色 / 0xff;
新しい青色 = DisplayObjectの赤色 + 背景の赤色 - DisplayObjectの赤色 * 背景の赤色 / 0xff;

overlay(オーバーレイ)

背景色が127以下であれば、乗算として動作します。
背景色が129以上であれば、スクリーンとして動作します。

変換式

if (背景の赤色 > 129) {
    新しい赤色 = -255 + 2 * (DisplayObjectの赤色 + 背景の赤色) - DisplayObjectスの赤色 * 背景の赤色 / 127.5;
} else if (背景の赤色 < 127) {
    新しい赤色 = (DisplayObjectの赤色 / 127.5) * 背景の赤色;
} else {
    新しい赤色 = DisplayObjectの赤色;
}

if (背景の緑色 > 129) {
    新しい緑色 = -255 + 2 * (DisplayObjectの緑色 + 背景の緑色) - DisplayObjectの緑色 * 背景の緑色 / 127.5;
} else if (背景の緑色 < 127) {
    新しい緑色 = (DisplayObjectの緑色 / 127.5) * 背景の緑色;
} else {
    新しい緑色 = DisplayObjectの緑色;

if (背景の青色 > 129) {
    新しい青色 = -255 + 2 * (DisplayObjectの青色 + 背景の青色) - DisplayObjectの青色 * 背景の青色 / 127.5;
} else if (背景の青色 < 127) {
    新しい青色 = (DisplayObjectの青色 / 127.5) * 背景の青色;
} else {
    新しい青色 = DisplayObjectの青色;
} 

hardlight(ハードライト)

DisplayObjectのカラーが127以下であれば、乗算として動作します。
DisplayObjectのカラーが129以上であれば、スクリーンとして動作します。

変換式

if (DisplayObjectの赤色 > 129) {
    新しい赤色 = -255 + 2 * (DisplayObjectの赤色 + 背景の赤色) - DisplayObjectの赤色 * 背景の赤色 / 127.5;
} else if (DisplayObjectの赤色 < 127) {
    新しい赤色 = (DisplayObjectの赤色 / 127.5) * 背景の赤色;
} else {
    新しい赤色 = 背景の赤色;
}

if (DisplayObjectの緑色 > 129) {
    新しい緑色 = -255 + 2 * (DisplayObjectの緑色 + 背景の緑色) - DisplayObjectの緑色 * 背景の緑色 / 127.5;
} else if (DisplayObjectの緑色 < 127) {
    新しい緑色 = (DisplayObjectの緑色 / 127.5) * 背景の緑色;
} else {
    新しい緑色 = 背景の緑色;
}

if (DisplayObjectの青色 > 129) {
    新しい青色 = -255 + 2 * (DisplayObject青色 + 背景の青色) - DisplayObjectの青色 * 背景の青色 / 127.5;
} else if (DisplayObjectの青色 < 127) {
    新しい青色 = (DisplayObjectの青色 / 127.5) * 背景の青色;
} else {
    新しい青色 = 背景の青色;
}

add(加算)

DisplayObjectのカラー値を背景色に加算し、その際に上限0xffを適用します。

変換式

新しい赤色 = DisplayObjectの赤色 + 背景の赤色;
新しい緑色 = DisplayObjectの緑色 + 背景の緑色;
新しい青色 = DisplayObjectの青色 + 背景の青色;

subtract(減算)

DisplayObjectのカラー値をその背景色の値から減算します。

変換式

新しい赤色 = 背景の赤色 - DisplayObjectの赤色;
新しい緑色 = 背景の緑色 - DisplayObjectの緑色;
新しい青色 = 背景の青色 - DisplayObjectの青色;

difference(差の絶対値)

背景色とDisplayObjectのカラー値を比較します。
大きい値から小さい値を減算して結果を出力します。

変換式

新しい赤色 = (DisplayObjectの赤色 > 背景の赤色) ? (DisplayObjectの赤色 - 背景の赤色) : (背景の赤色 - DisplayObjectの赤色);
新しい緑色 = (DisplayObjectの緑色 > 背景の緑色) ? (DisplayObjectの緑色 - 背景の緑色) : (背景の緑色 - DisplayObjectの緑色);
新しい青色 = (DisplayObjectの青色 > 背景の青色) ? (DisplayObjectの青色 - 背景の青色) : (背景の青色 - DisplayObjectの青色);

invert(反転)

背景色を反転して結果を出力します。

変換式

新しい赤色 = (0xff - 背景の赤色);
新しい緑色 = (0xff - 背景の緑色);
新しい青色 = (0xff - 背景の青色);

alpha(アルファ)

alphaを動作させるには、親のブレンドモードが、「BlendMode.LAYER (レイヤー)」である必要があります。
背景色の赤,緑,青成分はそのままで、透過成分はDisplayObjectから出力します。
※2021年12月現在、layer,alpha,eraseはプレビュー時にしか表示確認ができません。

変換式

新しい赤色 = 背景の赤色;
新しい緑色 = 背景の緑色;
新しい青色 = 背景の青色;
新しい透過色 = DisplayObjectの透過色;

erase(消去)

alphaを動作させるには、親のブレンドモードが、「BlendMode.LAYER (レイヤー)」である必要があります。
背景色の赤,緑,青成分はそのままで、透過成分はDisplayObjectから反転して出力します。
※2021年12月現在、layer,alpha,eraseはプレビュー時にしか表示確認ができません。

変換式

新しい赤色 = 背景の赤色;
新しい緑色 = 背景の緑色;
新しい青色 = 背景の青色;
新しい透過色 = 255 - DisplayObjectの透過色;

如何だったでしょうか?
もし、この記事を見て、興味が出た方はこちらか動作確認ができます。
NoCode Tool

明日はフィルター機能の紹介ができればと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?