Unreal Engine 5.5.6
はじめに
詳しく解説されたブレンドモードの記事が無かったので、"エフェクト目線" で内容をまとめました。
情報が間違っていたら教えてください。
結論
先に結論です。
エフェクトを扱うにあたって基本的にはTranslucent(半透明)でいいが、場合によっては他のブレンドモードが最適の時もある。
理由や検証結果は下記に記しています。
ブレンドモードとは?
↓ まずは公式の説明(リンク)
ブレンド モードは、現在のマテリアルの出力と描画済みの背景とのブレンド方法を表します。 技術的には、マテリアルを他のピクセルの前面にレンダリングする際に、マテリアル (ソース カラー) とすでにフレーム バッファ (Dest カラー) にあるものをエンジンでどのように組み合わせるかを制御できるようになります。
まぁ、つまりは、
マテリアル側(シェーダー側)で設定できる描画方法のことです。加算、不透明、半透明等々...

それぞれブレンドモードの特徴も公式サイトに記載されていますが、少し情報が足りないし分かりにくい部分があります。
そのため、それぞれのブレンドモードの性質をエフェクト目線でまとめてみました。
Opaque (不透明)
言わずもがな普通の不透明ブレンドモードです。
描画処理も軽い。
エフェクトだとあんまり使わないが、
石やプロップ(キャラの小物をエフェクト側で制御するとき)などに使う。
Masked (アルファクリップ)
不透明部分と透明部分を分けることができます。
透明にする部分はアルファが完全に0(半透明処理が入らない)になるのでその分描画処理も軽くなります。
エフェクトだと葉っぱなどに使うかな?

Transrusent (半透明)
エフェクトを作るにあたって基本的なブレンドモードです。これを選んでおけば間違いない
ただしMasked (アルファクリップ)と違ってTransrusent (半透明)は、アルファを0(完全な透明)にしても描画するときに半透明処理が行われるので少し処理が重いです。
⇒ アルファを0にしてもエフェクトが存在していることになる。
そのため、重なりやオーバードローに気を付けましょう。
あと上記で紹介したように不要な部分のメッシュは削りましょう。
Additive (加算)
加算処理するブレンドモードです。
重なれば重なるほど明るくなります。

画像引用:マテリアルのブレンド モード
エフェクトを作成していると光らせるためについつい使いがちですが、できるだけAdditive (加算)は使用しない方がよいです。
使用を控える理由は、「使いすぎると白飛びしてしまうから」 です。
あと、「背景が白いと加算を使用しているエフェクトが見えなくなってしまう」のも理由の一つです。
じゃあ「どういう時に使うのか」というと、
"レンズフレア" や一瞬の "フラッシュ" に加算を使用します。
逆に、それらにTransrusent (半透明)を使用すると見栄えが悪くなります。
Modulate (乗算)
乗算みたいなブレンドモードです。
正直あまり使わない。人によっては使っているかも?

画像引用:マテリアルのブレンド モード
エフェクトを複数重ねて白飛びしそうな時に、上からModulate (乗算)のエフェクトを重ねると色が引き締まる(色のコントラストができる)ので、そういう時に使っている。
あまり良い参考例が無くて申し訳ない。
こういった白飛びしそうなエフェクトの上に乗算エフェクトを重ねると画面が引き締まって良くなるはず。

Alpha Composite (Premultiplied Alpha)
公式の説明
AlphaComposite ブレンド モードでは、マテリアルの一部がどのようにブレンドされるかを制御できます。 いくつかのマテリアルの設定とロジックを使えば、加算的にブレンドされる部分と、マテリアルの不透明度入力を使用して半透明にブレンドされる部分を制御できます。 AlphaComposite は、ベースとなるシーンの色をマテリアルのオパシティの逆数で乗算することによって機能します。そのため、マテリアルがシーン カラーに追加されると、不透明度の高い領域は、より不透明な領域よりも彩度が高く充実しているように見えます。
ちょっとこいつは曲者です。
公式の説明も理解不能です。
そのため少し難しくなりますが、できるだけわかりやすく、詳しく、説明します。
まず、
Alpha Composite は Transrusent (半透明)と似たような挙動をします。
じゃあどこが違うのか?
というと、描画処理の仕方が微妙に違います。
Translucent
$Result=Src×α+Dst×(1−α)$
Src = エフェクトのRGB
α = アルファ
Dst = 背景の色
Alpha Composite
$Result=Src+Dst×(1−α)$
Src = エフェクトのRGB × α ←シェーダー側で事前にアルファを処理してる
α = アルファ
Dst = 背景の色
シェーダー側でアルファを処理することでどう結果がかわるのか?
Alpha Composite はシェーダー側で事前にアルファを計算することで、アルファが0の部分は色も0になります。⇒ つまり透明部分に不要な色が残らない
反対に、Transrusent (半透明)はアルファが0の部分でも色味の情報は残ったままです。

Alpha Composite はアルファが0の部分に色が存在しないことによって、Transrusent(半透明)よりアルファの境界が綺麗になり描画が安定する。
じゃあTransrusent(半透明)ではなくAlpha Compositeでいいじゃん。
となるかもしれないが、AlphaComposite は「アルファを0」かつ「色を0」にしないとエフェクトが消えないので使い勝手が悪い。
そのためAlpha Compositeは「模様」「魔法の花」「魔法陣」など、アルファをあまりいじらず描画を安定させたい半透明エフェクトに使用するとよいかも。
AlphaHoldout
エフェクトをマスクすることができるBlendModeです。
公式の説明がわかりやすかったので引用します。
- カメラ
-
AlphaHoldoutのオブジェクト(エフェクト) -
Opaque以外のオブジェクト(Translucent?を使用したレンガの壁) - 穴を通して見えるシーンの背景
カメラの視点からは、穴が開いて背後のオブジェクトが見えます。

このブレンドモードは、ワープエフェクトなどの空間を切り取りたい時やエフェクトをマスクしたい時に使用するかな?
処理負荷について
重い← Translucent, Modulate ≒ Additive, AlphaComposite > Masked > Opaque →軽い
となっていますが、シェーダーによる負荷は微々たるものです。
そんなこと気にするなら「オーバードロー」と「パーティクル数」を減らした方が圧倒的に処理が軽くなります。
あと、
処理負荷はプロジェクトの環境によって全然ちがいます!!!
なので私じゃなく隣にいるエンジニアさんの意見が100%正しいです。
描画処理ってプロジェクトによって全然違うんでね。
最後に
ニッチすぎた気がします。
AlphaCompositeについてもっと詳しく知りたい方は、下記のフォーラムを参考にしてみるとよいです。





