某所で公開してたBlender・EEVEE専用ToonShaderの解説です。
公開はpixivとMisskey3DCGすきー!で細々後悔してます(誤字ではない)
BlenderVer4.X以上で動作します、それ以下の動作は保証いたしません。
1:基本NodeGroup
このグループはtexture作るのだるいな・UV展開だるいなと言うものぐさ時に使用します、接続nodeはshadeが必要な場合はgeometry(ジオメトリ)のnormal(ノーマル)とincoming(入射)が必須です。 既にtextureが設定されてるモデルでは使う必要はないです。
shade付きと、ベースカラーのみの二種類があります、必要に応じて使い分けてください。各パラメーターは日本語で書かれている通りです適当にいじって見てください。
nodeの構築構成例は下記の画像の通りです、textureか頂点ペイントを用いて予めグレースケールの影面と明るい面のグラデーション塗り分けを用意して、影テクスチャ/影頂点ペイント入力に接続してください。 textureの場合はpaint baseをアドオン等からベイクしたものでもある程度は大丈夫です。
2:RGBカラーパーツマスク
RGBで色分けしたパーツに乗算(内部を書き換えれば他も可)で色を乗せれます、入力は頂点ペイントもしくはtextureでRGB色を利用してください。又、処理の都合色が混じると正しく色分けできません、RGBで色分けする際は混じらないように留意してください。
3:MatCap/スフィアマップ
MatCap(MMD等で言うところのスフィアマップ)を使う際の基本部分のnode groupです、単体では機能しません。使用の際は、必ずtexture nodeに接続しMatCap textureを選択した上で、colorMix等で他の出力と合成してください。
4:顔用IDマスクshade用
shadeが顔で汚くなる場合、頂点カラー(もしくはtexture)を利用し法線に介入します、あらかじめ顔の中央から縁にかけて白から黒のグラデーションを設定し、このNode Groupに接続します。 出力はgeometryのnormalの代わりに使用します。又、この方法ではモデル自体の法線を変更しない為、Subdivisionモディファイアを使用していてもGPUSubdivisionのオプションが切れない為、動作が重くなりません。
5:疑似影設定パーツ
光源に依存しない影を生成します。
fake shadow 3 maskとfake shadow bis2はカメラの入射角度により疑似影を生成します、カメラの動きにより影が有る程度移動します、アニメーションや多方位からモデルを見る場合に有効です。fake shadow 3 maskは最大3か所にマスクを設定しマスク箇所ごとに影の影響度を指定できます、マスクは白黒の頂点ペイントかtextureを利用してください。fake shadow bis2はマスク機能をオミットしたものです。
fake shadow select object typeは指定した疑似光源オブジェクトを起点に疑似影を生成します、使用の際にはテクスチャ座標nodeのオブジェクトoutを接続しテクスチャ座標から疑似光源オブジェクトをセットする必要があります。
6:Signed Distance Fieldパーツ
EEVEE上でSigned Distance Field(符号付距離場)を実装するNode Groupです、Signed Distance Fieldって何ぞ?って方もいらっしゃるとは思いますが、いーじーに言うとゲーム「原神」や「崩壊シリーズ」等で用いられている顔等の影のつくり方とざっくり理解して頂ければ…。
Signed Distance Field用のテクスチャを用意する必要があります、作り方についてはココでは解説いたしません、下記の動画等から学習してください、下記の動画ではpngを1bitにするように解説していますが動画のURLから入手できるルーツは現行では8bitのモノクロpngにのみ対応しているのでご注意ください。
Nodeの解説と接続
SDF select object typは疑似光源の座標で影を移動させます。SDFを適応するオブジェクトと疑似光源のオブジェクトをテクスチャ座標nodeを介して接続します、内部処理はatan2関数を代替計算式で無理やり再現しているため挙動が怪しいです…。 又、2点間の座標差(x1x2、y1y2)でZ軸の角度を導き出しているため、モデルと疑似光源の距離が近すぎると表示がおかしくなります。
SDF select object typの挙動が余りに不安定な為、Var1.03からEEVEE Very Easy Toon SDF select object type X coordinateを追加しました。指定した疑似光源オブジェクトのX座標が-1m 0m 1mで影の入れ替わりができるようにしたタイプです。頭部のボーン・顔オブジェクトとチルドレン関係かボーンで子にすることで扱いやすいく狙った位置にSDFの影を生成できると思います。
最後に、SDF select object type同様にNode Group内でtextureを入れ替える必要があります。
SDF set light Z axis rotationは光源のZ軸の値を参照値に影の入れ替えを行います、Shader内から光源のZ軸の値を参照するためにドライバを使う必要があります。
ドライバーの変更箇所
- タイプをスプリクト型の式に変更
- 式を
(rotation_euler-var)/pi
と書き換える - +入力値を追加押し新しいクラスを追加
- 新しいクラスのプロバティでSDFを適応するオブジェクト(顔)を選択
- パスに
rotation_euler.z
を追加
最後に、SDF select object type同様にNode Group内でtextureを入れ替える必要があります。
7:光源影・リムライト設定パーツ
光源由来の影とリムライトを設定します、Sun light shadow bisは光源由来の影を生成します”ディフュースBSDF”と”シェーダーをRPG化”を使用していますつまりベイクできません、リムライトはモデル縁に光を入れます。rim lightは光源由来の影生成を無くしリムライト機能だけにしたものです、双方ともに放射強度とリムライトだけの放射強度の設定が可能です。 BlenderのEEVEE側の設定でブルームをオンにした場合値相応の輝きを再現します。 Sun light shadow bisは光源が無い場合は不要です(疑似光源・疑似影のみで完結するなら不要)rim lightだけで良いでしょう。
以上が現状のEEVEE Very Easy Toon Shaderのセット内容です、必要に合わせてGroupをつないで必要な質感を再現してください。