【Blender】セルルック・2Dアニメ風の表現を実装するためのテクニック・ワークフロー

メモ

参考

【Blender2.9】簡単セルルックでアニメ風の表現をマスターしよう | CGbox
こんにちは! 今回はBlenderを使って、セルアニメ風のシェーダを作る方法についてまとめていきます。 始めてシェーダを作成する方でもわかりやすいような内容ですので、是非挑戦してみてください! 記事の最後では簡単にシェーダ―が作れるアドオン

モデリング

線を描写 / 唇や鼻を線で婉曲的に表現する

アニメ調をやるとき、唇や鼻の存在をはっきり色や形で描写するのではなく、線でそれとなく表現することがある。
方法としては線をメッシュで造形するというものと、線を出したい箇所に シャープを入れる・Mark Sharpを設定するものが簡単。

シャープの入れ方は、EditModeで入れたい辺を選択、Ctrol + E でメニューを出し、MarkSharpを選択する。
入れた箇所が水色になっていればOK(シャープの解除はClearSharp)

シェーディング / Material / Toon Shader

見た目を規定する。
ただ最近色々やってみて思うのが、どこまで2D風にするかの調整が重要だと思う。3DCGであるからこそできるような表現が結構あるはずなので、あまりかっつり2D風をやりすぎてしまうのももったいなく感じる。

自分の置きに入りの方法は、下記記事のトゥーンシェーダー2色Ver というやつ。軽くてシンプル

事前準備

①環境光を切る。
ShaderEditorのWorldからデフォルトで設定されているノードを切断するか、ノードのStrengthをゼロにしておく。

2️⃣ライトを出す。
ライトのShadowのチェックを外しておく。

③これは別段やらなくてもよい。
デフォルトのカラーマネジメントのViewTransformがAgxやらFilmicになっている。
セルルックをやる場合はここをStandardに変えておくということをやるようだが、これは場合によると考える。
というのも、セルルックはキャラと背景でシェーディングの仕方がだいぶ違う。ここの設定で一括でカラーマネジメントをやるのではなく、コンポジットとかでシーンごとに調整した方が細やかに調整できるので、そちらを推奨したい。

↓↓ change

ノード

自作するか、配布されているのを使うか

自作する

色々な方法がある。この記事のやり方よりリンク先のほうを推奨。

基本は、以下のようにノードを繋いで作っていく。

左からDiffuseBSDF – ShadertoRGB – ColorRamp – Invert – MixRGB と繋いでいく。

ColorRampの補完の部分はConstant (一定)に設定。右のつまみの位置で影の領域を調整する。

MixRGBの合成モードは MIXのままの事例とMultiply(乗算)の事例があった。今回はMultiplyを使用。

Invertを挿入することで、MixRGBのAが基本の色(明るい部分)、Bが影の部分を担当する。なのでテクスチャを利用する場合はAの箇所にImageTextureノードを接続する。

この時点での表示はこんな感じ。まだアウトラインはなし。

配布されているトゥーンシェーダーを利用する

テクスチャペイント

①UV展開とかは済ましておく。

②1枚のテクスチャに書き込んでいくスキルがないので、ベースの肌色の上に影や頬などの色を重ねるというスタイルでいく

重ね方で簡単なのはMixColorノードで合成する方法。

上のImageTextureノードはベースカラーの色テクスチャ(別に画像を使わず色指定でもよい)

下のは重ねるようの画像。こちらはとりあえず全透過の状態で配置しておく
透過画像は適当に作ったテクスチャをEraseAlphaブラシで全塗りして透明にするか、テクスチャを作るときにAlphaを指定して作る。

あとはOverlayテクスチャの方に塗っていく

もう一つはMixColorのFactor用に頂点カラーを作成し合成する方法。塗った箇所だけテクスチャA、塗ってない場所はテクスチャBのような感じにできる。

アウトライン(縁取り)の設定

基本グリースペンシルがおすすめ

OutlineHelperを使う

OutlineHelperというアドオンを使うと楽で精度も高いので推奨。

Outline Helper for Blender 2.8/2.9/3.0+
The Outline Helper Addon for Blender 2.8 helps you to quickly set up inverted hulls for multiple objects simultaneously! You can find its feature set right here...

オブジェクトごとにアウトラインを出しわける

複数のオブジェクトに同じアウトラインを割り当てるなら特に問題はないが、個々に割り当てたい場合注意が必要。
一端アウトラインマテリアルを外して、Add しようとしても、先に作ったOH_Outline的なマテリアルが割り当てられてしまう。

これはマテリアルの名前を変更することで回避できる。

自作する場合 –背面法

まず新規にマテリアルを作る(Bodyが上でやった陰影のマテリアル。ここで作るのはOutline。この順序が逆にならないように注意)

ノードはデフォルトのPrincipleBSDFでもいいが、より無駄を省くならRGBノードを繋ぐ。

MaterialPropertyのSettingsで BackfaceCulling にチェックを入れる。

枠線の対象となるオブジェクトを選択し、Solidifyモディファイアを加える。

NormalsのFlipにチェックを入れ、MaterialOffsetを1にする。

あとはThicknessで枠線の太さを調整する。(マイナスにしないとうまく表示されないことがある)

Thickness

Thicknessの値がプラスだとうまくいかないことがあった。その場合はマイナスにして調整してみよう。

プラスだとこんな感じになる

マイナスにするこう

この時点での表示はこんな感じ。

GrreasePaint機能を使う

上のやり方だと一個ずつやらないとだけなので、コレクション単位でアウトラインを描写できる。

Normalを調整して影を制御する / 影の調整 / 法線の調整

ノーマルを調整してからメッシュをいじると、再度法線調整しないといけないので注意!
メッシュの編集を終えてからやる

手っ取り早い法線転写

プレビューモードをレンダリングモードにし、ライトを設定して実際にどうレンダリングされるか確認してみる。

と、画像のように陰影が少し込み入っており、もう少しアニメに寄せたい。

UV球を出しShadeSmoothを実行。

UV球を移動させ体を覆えるくらいのサイズにする。

EditModeに移動し、球の下半分の頂点を削除する。

一番下の頂点をループ選択して、E – z で下に押し出す。

Ctrl + R でループカットする。ホイールで数調整。

球オブジェクトにSubdivisionSurfaceモディファイアを設定し、Applyする。レベルは両方とも6に。

これがすごく重いので注意(非表示にしてやる方法もある)

次に頭オブジェクトなど転写先となるオブジェクトを選択し、DataTransferモディファイアを割り当てる。

Sourceのスポイトでをヒエラルキー内にあるUV球を選択し、FaceCornerDataにチェックを入れ、CustomNormalをアクティブにする。

そしてObjectDataPropertyのNormalsにあるAutoSmoothにチェックを入れる。これで転写された状態でプレビューされているはずなので、問題がないならDataTransferモディファイアをApplyする(Applyしなくても作業は可能だが、animationなどで重くなるので注意)。

表示はこんな感じになる。

この転写された法線データをもとに戻したい場合はObjectDataPropertyのGeometryDataにあるClearCustomSplitNormalsDataのバツボタン。

これで影のラインはきれいになったが、GreasePencilを当てると線が出てほしくない箇所に線が出るようになってしまうことがあったので注意!

顔にだけ法線転写

UVSphereを出し、頭を覆うように配置する。
SphereにShadeSmoothをかけ、それからSubdivisionSurfaceを当てて細分化する。

人物モデルに、DataTransferモディファイアを当て、SourceにUVSphereを割り当てる。
FaceCornerDataをアクティブにして、CustomNormalを押す。

これで見た目は変わるものの、顔だけに転写したいので、当てたい箇所を頂点グループに登録する。

法線をより細やかに調整する / 手動

法線を調整したいオブジェクトを選択し、EditModeに入り、Normalを表示する。

デフォルトだとノーマルの向きが細やかなので、セルルックっぽいツルッとした感じならない。

今回はとりあえず顔だけ調整することにする。調整したい部分を選択してShift + H で選択箇所以外を非表示にしておく。
また今回使用するモデルはミラーモディファイアがあたっている状態なので半分

EditModeのまま、Shift + A からPanelを追加する。
X軸を回転させてノーマルが正面を向くようにする。
そしたらそれを複製し、R – Z- 30 と30度ずつ回転させ、合計4つのパネルを配置する(ただしこれはあくまで今回の場合。各自もっと増やしたり減らしたりしよう)

今回はまず正面向きのパネルの法線をコピーする。頂点を選択して Alt + N – CopyVector(上のメニューから Mesh – Normals – Copy Vector)を実行する。

少し面倒なのでQuickFavorites機能を使うと作業の能率が少し上がる。方法はCopyVectorsの文字の上で右クリックをするとAdd to QuickFavoritesと表示されるはずなのでそれを選択して登録。あとはQキーを押せば登録した操作を呼び出せる

ペーストは顔の頂点を選択して Alt + N – Paste Vector でおこなう。
とりあえず最初は顔の頂点全部を選択してペースとしてみる

次にサイドのノーマルを調整する。
真横向きパネルのVectorをコピーしておく。
顔の頂点の横向きにしたい箇所を選択していく(WキーでCircle選択を使ったりすると楽。どこまでをサイドとして扱うかは難しいのでとりあえず大雑把にやってみてあとから微調整する)

でそこにPasteVectorを実行する。

斜めの部分も同様にやっていく。

ライトを配置し(Shadowはオフにすること!)、ViewPortの表示をRenderPreviewにして作業すれば、より詳しく影の表示を確認しながら調整できる。

真横、斜め、正面の3つのコピペをとりあえずやったらこんな感じ。ライトの照射角度を変えて確認していくとこんな感じになる。

まだ入り組んでギザっている箇所があるのでこれを調整していく。
頂点をスライドさせたり、ナイフツールで新しく辺を作って影のつき方を調整する。

例えば下のようにへこんでしまうのを直線にしたいという場合

大雑把にナイフツールで面を割り、さらに頂点をスライドさせて微調整して対処する。

Mirrorモディファイアを当てた状態で編集している場合、真ん中の部分に影が出てしまうので注意。
モディファイアをApplyして法線がおかしくなっている箇所を編集することで対処する。

アニメーション・アクションで気をつける点

コマ調整 ・コマ落とし/ ヌルヌル動きすぎてしまう / SteppedInterpolation

Mixamoのモーションを利用させてもらうことが多いが、ぬるぬる動きすぎなのを抑えたいと思うことがある。
日本のアニメだとLimitedAnimationという手法が取られることが多いらしい。1秒24コマでも24枚の画を使って動かすのではなくある程度コマ数を落として、3コマに1枚、一秒なら8枚といった作り方をするとのこと。
同時に重要なのは背景やカメラは24コマで取らないとカクつく印象を与えてしまうらしい。

動きすぎ問題を制御しようと、はじめBLenderで動画をレンダリングした後、動画編集ソフトでコマを落とす・抜くことをやろうとしたが、これだと背景やらカメラもいっしょに抜いてしまう問題に突き当たった。キャラだけコマ落とししたい。

一番楽なのは、GraphEditorを開いてSteppedInterpolationモディファイアを割り当てる方法。
当てると下の画像のようにいくつかのフレームを飛ばした表現が可能になる。
何個Stepがいいのかは、実際レンダリングしながら試してみる。

補間モードをConstantに変え、キーを抜くという方法もある。が、これは少し大変だと思う。が細かく制御する必要があるならこっち

コメント

タイトルとURLをコピーしました