アニメ風モデルで使われている技法の小ネタを紹介する。
この記事ではゲーム「原神」公式配布モデルのキャラクター「フィッシュル」を参考に、BlenderのEeveeレンダーのシェーダーで調整する。
もくじ
頬だけ影が乗らないようにする
顔が半分影になっても頬だけ明るくなるような影を作る。
シェーディングのノーマル座標を変更することにより、これを行う。
今回はX座標のノーマルだけをテクスチャによりいじる。
- 画像右上のようなほほ部分をマスクしたテクスチャを用意する。
- ディフューズBSDFをカラーランプで調整して、影のマスクとする。
- 調整用テクスチャが影になっている時だけ作用するように、[追加]数式ノードで①と②を合成する
- テクスチャ座標の[ノーマル]を、一旦XYZ分離して、Xにだけテクスチャで調整を行った後、再度XYZ結合する。
- [乗算]数式ノードで、X座標と③を合成する
参考
【Unity Shader】原神の顔の影の処理の考察 - Qiita
ソリッドモディファイアを利用したライン付け(背面法)
ソリッドモディファイアで付けた厚みの、ふちの面だけが表示されるようにすることで、メッシュの輪郭を得ることができる。これを線画のように使う。
- ソリッドモディファイアを追加
- モディファイアの順番は最後にする。(サブディビジョンよりも上)
- オフセット1.0にして、外側にラインが付くようにする。
- [フィル]を無効化する。(厚みのない板の場合は必要)
- ノーマルの[反転]を有効化する。
- [マテリアル]のインデックスオフセットは99などとすると、一番最後のマテリアルスロットが対象となる。
- [頂点グループ]に後述の頂点グループを設定。線を出したくない部分にラインが出ないようにする。
- ラインのマテリアルを作成
- マテリアルスロットのスロット順番は、一番最後にしておく。
- マテリアルオプションの[裏面を非表示]を有効化する。
- 影モードを[なし]にする。
- 好きなラインの色を設定する。
- 後述の色トレスをすると馴染みやすい。
- 非表示用頂点グループを作成
- 目や口部分、髪のふさの結合部分などのラインを出したくない箇所にウェイトを割り当てる。
色トレス(線画の場所ごとに別々の色を付ける)
塗りと線画をなじませるために、場所ごとに別々の色をつける方法がある。
これを前述のライン付け方法で使うやり方を紹介する。
モデルで分ける
モデルのオブジェクトがそれぞれ分かれていれば、それぞれに別々のマテリアルを設定すればいい。
だが、モデルが1つだったり、服と肌がテクスチャで混在しているような場合はこれができない。
テクスチャで分ける
別々に分けたい部分を塗り分けしたテクスチャを用意して、マスクとするとよい。上画像のキャラクターでは、服と肌がその様になっている。
UVが重複している場合は利用できない。
画像のモデルではオブジェクトが1つであり、UVが1つであり、 顔・髪・身体のUVが重複していて、1つのテクスチャだけでは分けることができない。
頂点カラーで分ける
頂点カラーでのマスク方法は、オブジェクトやUV、マテリアルに依存しないので、上記でマスクできない場合はこれが便利か。
画像のモデルでは頂点カラーをRGB分離でそれぞれほしい部分に分けた。
(ただし、RGB分離ではRGBの3色しかマスクすることができない)
指定の色部分だけをマスクする
3つ以上に分けたい時、指定の色部分だけをマスクする必要がある。
ミックスRGBのブレンドモードの差分で指定の色を除去して、カラーランプで補正、という方法でできる(他の色も差分で削られるため、完全な0.0~1.0にはできない)。
UVによる直線ライン付け
テクスチャ内の直線な線はボケずにはっきりと表示される、という性質を利用したライン描画法。
垂直のラインの所にUVの切れ目を配置する。
UVを歪ませることで強弱も調整することができる。
ギルティギアの例の手法、UV調整によるラインのテスト
- 白黒で分けただけのテクスチャを用意。
- 解像度は4x4くらい低くてもよいが、Blenderの画像エディターでズームしやすいように256x256程度にした。
- そのままではボケるので、画像テクスチャノードのテクスチャ補間の設定を[近接]にする。
- 通常の用途のUVとは別に、ライン用のUVを新規作成する。
- ラインを描きたい部分だけを切り分ける。
- テクスチャの白黒の間にUVを配置し、ラインに強弱が付くようにUV頂点を調整する。
下記リンクでは、カラー用のUVを垂直/水平に展開し、ラインも垂直/水平にまっすぐ描き、ラインを歪ませたい部分だけUV頂点を移動して調整する模様。
西川善司の「試験に出るゲームグラフィックス」(1)「GUILTY GEAR Xrd -SIGN-」で実現された「アニメにしか見えないリアルタイム3Dグラフィックス」の秘密,前編
交差線を出す
Freestyleのような交差線を出せないライン書き出し機能では、ぶっ刺しメッシュやオブジェクト同士の重なりに線をうまく出すことができない。
ラインアートモディファイアを使う
ラインアートモディファイアでは、モデルからグリースペンシルとしてライン生成することができる。交差線も生成でき、モディファイアを分ければラインのタイプごとに調整できる。
リアルタイムにビューポートで見ることができるが、複雑なモデルだと生成が遅い。
- 追加 > グリースペンシル > シーンラインアート
コンポジット(後処理)でラインを出力する
Blenderでは、レンダリングした画像をノードである程度編集することができる。
ノーマルパスとこのコンポジットエディターの処理を利用して、交差線をレンダリングできる。
線の質は低いが、freestyleよりも手軽で高速にラインを出せる。
これで出した素材とFreestyleのラインを重ねれば、ある程度ラインの出力をカバーできる。
ノード
上画像のようなノードでの処理をする。
フィルターノードの[ソーベル]で加工した画像を、カラーランプで白黒にしつつ絞ればラインができる。
(基本構成はこれだけでもよい)
オプションとして、カラーキーで透過させ、インペイントを使えば線を太くすることができる。
ラインを出したくない部分がある場合は、頂点カラーなどでマスクしておく。
頂点ペイントであらかじめ塗っておき、頂点カラーをAOV出力で出して、それを上画像のようにExclusive(排他)ソケットで合成の前に塗りつぶす。
ぶっ刺しメッシュのラインを無理やり出す方法
ぶっ刺しメッシュなら、あえて若干浮かせるとラインを出せる。
データとしては奇妙だし使い道は限られているので、他の方法でラインを出した方がいいかも。
その他ライン出し方法
その他のライン出し方法については、下記リンク先ページが詳しくまとまっている。
部分的に光沢感を付ける
金属部分にのみ光沢を追加する。
- 画像右上のようなマスク用のテクスチャを自分で作る。
- 光沢BSDFをカラーランプで調整して、光沢のマスクとする。
- ディフューズBSDFをカラーランプで調整して、影のマスクとする。
- ①、②、③をすべて合成してマスクとする。
- これらのマスクを使って、元の最終結果と光沢にしたい色を合成する。
- この色は輝度を1より大きい値にすると、ブルームで光らせることができる。
- その際はレンダー設定のブルームのしきい値を1以上にすること。
レンダリング後にレタッチする
3D作業内で直せない問題やよりよくしたい箇所を、レンダリングしたあとに画像編集で加筆する。
厳密にはモデリングに関してのことではないが、最終結果を良くするには重要。
汚い影の修正、加算(発光)でピンクの光を上から落とす、オーバーレイで紫の縦グラデーションを付けて薄く色付け、ふともも・胸の明かりを追加、左ひじの凸形状を追加などを行った。