【UE5】SceneTextureノードからアウトラインカラーとマスクを取得できるようにしてみた – Unreal Engine 5.3

Unreal Engine

水ノ茉(こおり)の宣伝

叡智でえっちな同人作品を予定中…

Ci-en R18

同人作品の宣伝

  • 準 備 中 . . .

プラグインの宣伝

  • 準 備 中 . . .
  • 準 備 中 . . .

始まり

アウトラインカラーとマスクをSceneTextureノードから取得できるようにします。

SceneTextureノードとは?

シーンカラーや深度、GBufferなどを取得するノードです。

Scene Texture Id見た目

エンジン改造とは?

ゲームエンジンのコードを書き換える行為をエンジン改造と呼びます。

尚エンジン改造という呼称が正式かは知らんです。

これ以上の真面目な説明はググればヒットするので割愛します。

以下、実際の描画まわりの改造事例です。

前髪を透かしたり

毛先まで綺麗に表現できるポストプロセスなアウトラインを描いたり

キャラと背景を別々のシャドウマップに書き込んでセルフシャドウを抑制したり

髪影を落としたり

頂点IDノードを追加して、それを元に鼻に線を引いたり

独自のトゥーンパス群ですべて描いたり

リポジトリ

最新バージョンのみ保守しています。
過去バージョンが動かないと言われても基本的には知らんがなスタイルです。

実装

めっちゃ簡単。

Engine/Source/Runtime/Engine/Public/MaterialSceneTextureId.h

ESceneTextureId列挙体にPPI_OutlineColorを追加します。

RGBでアウトラインカラー、Alphaにアウトラインマスクを格納するレイアウトです。

githubで実装を見る(L81-L82)

Engine/Source/Runtime/Engine/Public/MaterialShared.h

SceneTextureノードでPPI_OutlineColorが選択された際にGバッファが使用されることをマークしています。

Gバッファにアクセスすることが許容されていないマテリアル(不透明など)で使えないようにするための対応ですね。

githubで実装を見る(L753)

Engine/Shaders/Private/MaterialTemplate.ush

PPI_OutlineColorのシェーダー側の定義です。

IDはMaterialSceneTextureId.h側で定義しているものと一致させておきましょう。

githubで実装を見る(L76)

SceneTextureノードでPPI_OutlineColorを選択された際にアウトラインカラーとマスクを返している箇所です。

githubで実装を見る(L2600)

ポストプロセスマテリアルで使ってみる

以前作成したポストプロセスアウトラインを元に動作確認をしていきます。

アウトラインカラーの反映

髪の毛と肌と衣類で色を別けてみました。

アウトラインカラーの反映
アウトラインカラーの可視化

アウトラインマスクの反映

目元のアウトラインをマスクしてみました。

目元のアウトラインをマスク
アウトラインマスクの可視化

おわり!!!

簡単でしょ。

次回はアウトラインカラーとマスクを可視化するビジュアライザを整備していきます。