先に結果です。
前からやってみたいやってみたいと思いつつ、やれていなかったトゥーンシェーダー(あるいはセルルック、セルシェーダー)をblenderのマテリアル芸で実現する方法を学習しました。基本的には最後にまとめた参考サイトを写経した感じになりますが、学びがあったのとやっただけだとどうせ忘れてしまうので記録として残しておきます。
①View Transformの変更
2.8系からデフォルトのColor ManagementのView Transformが"Filmic"になっている。"Filmic"はよりフォトリアルっぽい表現を実現するが今回の場合はむしろその逆なので、これを"Standard"に変更します。
②コンタクトシャドウをON
これはいまいちまだよくわかっていないのですが、Lightの設定からこれをONにしておくとオブジェクト間の細かな部分での影を表現することができます。
③マテリアルシェーダーを組む
一番メインのところですが、意外とシンプルです。
まず、基本的な陰影の2値化を一番左のパートでつけています。(Shadowパート)
ちなみに、ここのRGBを別で作ったテクスチャにすればより表現の幅が広がります。
そしてFrenelパートですが、まずFrenel(反射、効果)とはなんなのでしょうか?
たとえばある球体を見るときの入射角がより垂直に近いと反射が弱いので光沢があまりないのに対して、反対に球体の外側(入射角が平衡に近い方)にいくほど反射が強まり結果光沢が出てツヤがあるように見えるという現象
みたいな認識です。ちょうど前にブログでも紹介した「HOW TO RENDER」にそんなことが書いてありました。 今回はそのノードを利用して2値化することで一旦物体のアウトラインを作ります。
そして次に最初のShadowパートをもう一度、今度は狭い範囲でかけてハイライトを描きます。(Highlightパート)
最後にFrenelを使って最終的なアウトラインを黒く描きます。ただしこの時点ではアウトラインはうまく描けません。モディファイアを使って調整をします。
④Solidifyモディファイアをかける
オブジェクトに対して Solidifyモディファイアをかけます。このときThicknessをマイナス、Normalsを反転させます。
⑤アウトライン用のマテリアルを追加
先程組んだマテリアルとは別に上のようなマテリアルを作成します。 このときマテリアルのSettingsからBlend Modeを"Alpha Blend"にしておく必要があります。
これできれいに黒いアウトラインを描けるようなりました。(太さも先程のThicknessで変えられます。)
※この最後にやったバックフェイスを使ったアウトラインの描く方法を背面法と一般に読んでいるそうです。
そもそもアウトラインを描くのであればFreeStyleの機能を使うこともできますが、レンダリング結果にしか反映されないので細かな調整に時間がかかった印象です。
以上、EEVEEでのトゥーンレンダリングについてまとめましたが、これがCyclesでやるとなるとまた少し制限があるようです。
また、今回はマテリアルそのものを使って表現しましたが、コンポジティングでやるという方法も別であるようです。
ちょっと前にTwitterで見かけたこの手法も今度挑戦してみたいと思います。
それからトゥーンレンダリングについてはアドオンを買ってしまうというのも手として十分にあります。
これなんか良さそうです。
参考
https://tama-chan.jp/2019/02/09/inverted-hull-method/tama-chan.jp