![見出し画像](https://assets.st-note.com/production/uploads/images/73084038/rectangle_large_type_2_95691576e80b4bc745a426936f7af4fc.png?width=1200)
【Blender】コンポジットで髪に重なる顔パーツの描画をモーションブラー時でもやりたい
※この記事では、以前作成したVtuber夜見れなさんのデフォルメモデルを使用して解説している。
キャラクターをレンダリングしたとき、普通にレンダリングしただけでは顔のパーツ(眉やまつ毛、瞳など)に髪がかかっていると、その部分は隠れているのでレンダリングされない。
隠れている部分を前面に出す方法の一つとして、顔パーツのみレンダリングする新しいレイヤーを追加してマスクを作成し、2つのレンダリング結果をミックスするという方法がある。(下記のふか(@fuka_mizno)さんのツイートを参照)
リリースノートにあったAOVとはなんぞやって試してみたらマスク作るのにえらいベンリで、前髪の上に目眉置くヤツがめちゃくちゃシンプルになった
— ふか(メロブ委託中) (@fuka_mizno) March 2, 2021
ということをスグリさんが教えてくれる画像。
用途かぶってそうなCryptomatteよりも使い勝手いいぞ…Cryptomatte心待ちにしてたのにな#b3d pic.twitter.com/Q2FLHTVjWN
上記の方法を使えば綺麗に髪の上に描画されるが、モーションブラーと併用してみると、髪に重なる部分がくっきりと浮き出てしまい、かなり違和感が出てくる。
![](https://assets.st-note.com/production/uploads/images/72960263/picture_pc_24723ce58a02cc7ef30542959b63a72a.gif)
これを解決するために、顔パーツのレイヤーとは別に、新たに髪の毛のみをレンダリングするレイヤーを作成して髪のマスクを作成し、ミックスではなく乗算で描画してみた。
具体的な方法は上記で紹介したツイートとほぼ同じ。
顔と髪の毛をそれぞれ複製して新規レイヤーを作成、複製した顔と髪の毛以外をレイヤーから除外(通常のレイヤー、顔だけ(+ライト)のレイヤー、髪の毛だけ(+ライト)のレイヤーの3つのレイヤーになる)
顔は顔のパーツに、髪の毛は必要に応じて前髪などに頂点カラーを設定する
それぞれのマテリアルで、頂点カラーをAOV出力に設定してマスクを作成
レンダリングする
顔のパーツのマスク、髪(前髪)のマスクを数式ノードで乗算
通常のレンダリングと顔だけのレンダリングをミックスノードで乗算し、係数に前述の数式ノードをつなぐ
以上でできる。
![](https://assets.st-note.com/img/1645851612372-PCBOUHiYp9.png?width=1200)
![](https://assets.st-note.com/img/1645854521221-wmR3aULTbr.png?width=1200)
![](https://assets.st-note.com/img/1645856147631-Jdc4Or4Iu0.png?width=1200)
![](https://assets.st-note.com/production/uploads/images/73073738/picture_pc_6b054141d3fe30e99d57d2580562ac60.gif)
上のgifのとおり、この方法でなら浮き出ずに隠れた部分を描画できる。しかし、この方法は乗算ノードを用いているため、顔のパーツの本来の色が出にくいという欠点がある。神に隠れている部分なので、色が目立たない方が自然といえば自然だが…
やっていることは簡単だが、レイヤーが3つにもなってしまい、さらにコンポジットの処理もあるため、トゥーンシェーダとはいえアニメーションをするとなればすべての出力にはそれなりに時間がかかってしまう。
より効率的な方法が見つかれば追記したい。