【UE5 Niagara】Skeletal Mesh Locationだけじゃない!「シルエット型抜き」で作るディゾルブ表現のアプローチ

こんにちは!
ゲームを遊んでいると、敵を倒した時などにキャラクターがパーティクルとなって消え去る「ディゾルブ(消失)エフェクト」を見かけることがあります。あれ、作りたくなりますよね。

最終的な作例です!

皆さんは、これをUE5のNiagaraで実装する際、どのようなアプローチをとっていますか?

おそらく、一番お手軽な「Skeletal Mesh Locationモジュール」を使っている方が多いのではないでしょうか。
もちろんこの方法は王道で便利なんですが……「あんまり綺麗にならない(泣)」と悩んだことはありませんか?

今回は、エフェクト制作の引き出しをもう一つ増やすための、「Screen Space(画面空間)」と「Stencil Mask(ステンシルマスク)」を使ったディゾルブ表現のアプローチについてシェアしたいと思います!

なぜ「Skeletal Mesh Location」以外の方法も知っておくべきなの?

Skeletal Mesh Locationは、キャラクターの3Dモデル(ポリゴン)の表面から直接パーティクルを発生させる機能です。

サクッと作れるのが魅力ですが、実は以下のような弱点(手間)もあります。

Skeletal Mesh Locationでキャラクターの表面からパーティクルを発生させた状態。髪や手の輪郭に粒が集まり、胴体は粒がまばらになっている
Skeletal Mesh Locationで発生させたパーティクル。髪や腕の輪郭に粒が集中する一方、胴体や脚は粒がまばらになっている
  1. メッシュの構造(ポリゴンの密度)に影響されてしまう
    顔の周りなどポリゴンが細かいところはパーティクルが濃くなり、逆に胴体などポリゴンが少ないところはスッカスカになってしまうなど、見た目のコントロールが難しいことがあります。
  2. Niagara側でもディゾルブを実装する「二度手間」が発生する
    キャラクターが消えていく表現を作る際、マテリアル側でディゾルブ(透過)させるだけでなく、「消えた部分からはパーティクルを出さないようにする」といった制御をNiagara側でも組む必要があり、実装の手間が増えてしまいます。

「もっと均一で綺麗なシルエットのエフェクトを作りたい」「アプローチを変えてみたい」
そんな時に役立つのが、今回紹介するもう一つの手法です。

新手法!「Screen Space」×「Stencil Mask」の考え方

このアプローチの最大のポイントは、「キャラクターのモデルから発生させるのではなく、カメラから見える画面に合わせてパーティクルを発生させて、キャラクターの形で切り抜く」という考え方です。

手順は大きく3つのステップです。

ステップ1:キャラクターの「画面上の枠(Screen Bounds)」を見つける

キャラクターが画面上に映っている範囲を、赤い半透明の四角形で表示したところ
キャラクターが画面上に映っている範囲(Screen Bounds)を赤い四角で表示したところ
講義スライド。キャラクターを囲む赤い四角の中の点Pの位置を、Right Direction VectorとUp Direction Vectorの組み合わせで表している
講義スライドより。枠の中の位置は、枠の右方向・上方向のベクトルを使って表す

3D空間の情報を、私たちがモニターで見ている2Dの画面座標(Screen Space)に変換します。キャラクターが画面の「どの範囲」に映っているか、その四角い枠(Screen Bounds)を計算して割り出します。

ステップ2:枠の中にパーティクルを敷き詰める

キャラクターの位置に、白いパーティクルが四角い板状に敷き詰められている
Screen Boundsの枠の中にパーティクルを敷き詰めた状態(型抜き前)

先ほど見つけた四角い枠の中に、パーティクルを発生させます。この時点では、キャラクターの手前に「四角いパーティクルの壁」ができている状態ですね。

ステップ3:ステンシル(Custom Stencil)で「型抜き」する!

左はSkeletal Mesh Locationのパーティクル、右はステンシルでキャラクターの形に切り抜いたパーティクル。右は粒が均一に詰まっている
左:Skeletal Mesh Location/右:ステンシルで型抜きしたパーティクル。右はシルエット全体に粒が均一に詰まっている
講義スライド。画面上の座標ごとにステンシルの値を読み取ると、キャラクターの外は0、キャラクターの上は1になることを示している
講義スライドより。画面上の位置ごとにステンシルの値を読み取り、キャラクターの外は0、キャラクターの上は1になる

ここが一番のポイントです!
UEのレンダリング機能(Custom Depth-Stencil)を使って、キャラクターのモデルに「特別な番号(例えば1)」を割り当てます。

そしてNiagara側で、「画面上で番号が1の場所(=キャラクターが映っている場所)のパーティクルだけを残して、それ以外は消す!」という処理を行います。

クッキーの生地(ステップ2)を、キャラクターの型(ステップ3)でスポン!と抜くようなイメージですね。
これなら、ポリゴンの密度に影響されない、綺麗なシルエットのエフェクトを作ることができます。

とはいえ、実装には「ちょっとした壁」があります……

ここまで読んでいただいて、「そんなアプローチがあるのか!」と思っていただけたかもしれません。

ただ……正直にお伝えすると、これを実際にNiagaraで組もうとすると、既存のモジュールをポンと置くだけでは作れません。

「Scratch Pad(スクラッチパッド)」を開いて、自分だけの独自のモジュールを組む必要があります。

NiagaraのScratch Pad。Screen Boundsの位置・サイズ・方向ベクトルを読み取るノードから、掛け算や足し算のノードへ線がつながっている
Scratch Padで、Screen Boundsの位置・サイズ・方向ベクトルからパーティクルの位置を計算しているところ
  • Particle Attribute Readerを使ってデータを渡す
  • カメラの「前方ベクトル」や「上方向ベクトル」を取得する
  • UV座標と内積を使って、画面上にパーティクルを展開する計算式を組む
  • G-Bufferから正確なDepth(深度)とステンシルの値を読み取る

などなど、少し「数学的な計算」と「Niagaraの深い知識」が必要になってきます。


【実践編】この仕組みをゼロからしっかり学びたい方へ!

「理屈は分かったけど、具体的にどうノードを繋げばいいの?」
「Scratch Padでのベクトル計算、ちゃんと理解して使いこなせるようになりたい!」

そんな方に向けて、この「画面空間とステンシルを使ったディゾルブ表現」の実装方法を、ゼロから一緒に手を動かしながら学べるオンライン講座をColosoから出しています!

🔽 Coloso講座:仕組みから学ぶNiagara×Materialの高度VFX表現
https://coloso.jp/products/vfxartist-heyyo-jp

この講座では、今回解説した理論をベースに、単なる「ノードの写経」ではなく「なぜこの計算が必要なのか?」を基礎から丁寧に解説しています。

もちろん、今回の解説に使用している完成プロジェクトデータも講座に付属していますので、実際にデータに触れながら学習を進めることができますよ!

「とりあえずデータだけ手っ取り早く欲しい!」という方へ

「講座をじっくり見る時間がない……」
「完成した仕組みを自分のプロジェクトですぐに使いたい!」
「データの中身を自分で解剖してみたい!」

という方向けに、Gumroadにてプロジェクトデータ単体での販売も行っています。

🔽 Gumroad:ディゾルブエフェクト プロジェクトデータ販売
https://heyyohanashima.gumroad.com/l/lvmte


この「シルエット型抜き」の仕組みをマスターすれば、ディゾルブ表現だけでなく、ホログラムエフェクトなどNiagaraでの表現の幅が爆発的に広がります!

「Skeletal Mesh Location以外の表現の引き出しをもっと増やしたい!」という方は、講座やデータを通じてぜひ実践してみてくださいね!

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です