LoginSignup
13
10

More than 1 year has passed since last update.

【UE5】ToonでもVirtual Shadow Mapsしたい!

Last updated at Posted at 2022-12-10

まえがき

UE5の影描画ってキレイですね。
Toon描画も、この恩恵にあずかりたいなぁ… エンジン無改造で!

というわけで、UE5のキレイな影を利用する手法を紹介します。ネタとしてどうぞ。あまり実用的じゃないかも。。

こんな感じの処理ができます。

←完成した絵、陰影なし、影マスク→
3.png

モデルはNecoMaidさん
https://booth.pm/ja/items/4252664

ポーズは VRM Posing Desktop
https://store.steampowered.com/app/1895630/VRM/

よりお借りしています。感謝!

従来のToonの影のアプローチ

従来手法:PostProcessを使う

PostProcessでBaseColorと比較します。定番手法です。
お手軽かつ見栄えの良い絵を出すことができます。
ただ画面を一律で処理するため柔軟性がなく、痒いところに手が届きません。

詳しくはこちら ↓
https://www.raywenderlich.com/146-unreal-engine-4-cel-shading-tutorial

従来手法:自前シャドウマップを使う

自前でShadowMapを作る方法です。
キャストシャドウを判別しつつ、マテリアル個別の処理もできます。
ただ影の解像度が足りなかったり負荷が高かったりで、イマイチです。

詳しくはこちら(数年前に書いた記事です) ↓
https://qiita.com/ruyo/items/71a3f2f694d2853b3f1e

今回の手法:Translucentを利用した影の判別

従来手法を良いとこ取りした、Translucentを利用するToon影処理です。

モデルを2度、重ねて描画します。
実際の絵はこちら。

1回目の描画 シンプルな白
0_sc.png 0_mat.png
2回目の描画。同じモデルを重ね描きしている。
光の当たる箇所が赤、陰が青
Translucentで描画。SceneColorの明度で2値化している
1_sc.png 1_mat.png

不透明の白で描画した後、同じモデルを半透明で重ね描きします。
下地の明度から 陰影を判別します。

キャストシャドウの判別も可能
2.png

これにて、影を判別できるようになりました。(正確には単に暗い部分を検出してるだけなので、AOやGIの影響も受けます…)
あとは好きな色に塗り分けましょう。マテリアル内で柔軟に処理ができます。
パーツ毎に、階調やハイライトも設定できます。

なお、2度目の描画ではSceneColor以外にもNormalとDepthを参照することができます。
工夫次第で面白い効果を出せます。(簡易的なコンタクトシャドウとか、ドロップシャドウなど)

ハイライト対応、影色を調整した例
4.png

あとがき

むりやり影を利用する方法を紹介しました。

内部のShadowMaskTextureにアクセスできれば もっとシンプルに対応できるのですが… このあたりは、まだまだエンジン改造の必要がありますね。
なにか良い抜け穴を知っている方がいたら教えてください…

なお、この手法は VRM4Uプラグイン でお手軽に利用できます(宣伝)
興味ある方はお試しくださいー

おしまい。

13
10
3

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
13
10