Eevee のセルルック技法まとめ
目次
カラーマネジメント
法線のコンポジット出力
陰影なし表示
ライトの設定
基本
2影
テクスチャを使う
テクスチャで影を制御する
リムライト
透過
反射
頂点色の取得
任意の場所に影を作る
輪郭抽出
ライトの検出
背景の影響力を消す
手動ライティング
アドオン
外部リンク
カラーマネジメント
Blender 2.80 からビュー変換の Filmic が既定値になった。Filmic はダイナミックレンジが広がるため、フォトリアルなルックでは重要だ。しかしアーティストが直接色を指定するセルルックでは、コントラストの低下や色の変化が起こるため推奨しない。セルルックではビュー変換を「標準」にした方がよい。


法線のコンポジット出力
Eevee はマテリアル出力に色をそのまま出力できる。これは Cycles との互換性がなくなるうえに、コンポジットで法線が取得できなくなる。なのでセルルックであっても放射(Emission)ノードを介することを推奨する。

最後のノードに放射ノードではなくプリンシプル BSDF も使える。プリンシプル BSDF はアルファや SSS パスを使ってコンポジットする場合に便利だ。プリンシプル BSDF を使う場合はベースカラーを黒にして、スペキュラーを0に設定する。
陰影なし表示
陰影なし表示はカラーマネジメントの設定を無視して表示される。
Eevee
3Dビューのシェーディングをフラットにして、マテリアルかテクスチャを選択する。この設定はレンダリングに反映されない。

Workbench
照明をフラットにして、カラーのマテリアルかテクスチャを選択する。この設定はレンダリングに反映される。

ライトの設定
サンライトとそれ以外のライト(ポイント・スポット・エリア)では影の生成方法が違う。サンライトはシーン全体をライティングする用途で使われるため、ひとつの光源に対し複数のシャドウマップを使うカスケードシャドウマップを使用して影が生成される。そのためサンライトはGPUのメモリ使用量が多く、描画負荷も高い。
サンライト
サンライトの強みは距離減衰がないこととライトの向きだけで影の形をコントロールできることだ。
サンライトはライトの向きが影の形に影響を与えるが、それ以外のライトはライトの位置も影の形に影響を与える。サンライトでないライトをオブジェクトの近くに配置すると、広い領域が影になるため複数のライトを配置する必要がある。サンライトでないライトをオブジェクトの遠くに配置すると影になる領域は小さくなるが、距離減衰があるため影の領域の調整がシビアになる。加えてオブジェクトから遠いライトはビューポートで選択しづらい。
サンライトの解像度を上げる
影のカスケードサイズをあげ、ライトの角度を0にする。ビューポートのサンプル数を増やすと影にアンチエイリアスがかかる。

最大距離をシーンに合わせて最適化する方法もある。

下:最大距離 1,000m(デフォルト値)
外部リンク
#b3d 2.7のときの雰囲気を2.8で再現できそう。すべての肝となったのがシェーダーや仕込みではなく、ライト(Sun)の設定でした。Blender Internal Renderっぽく使うためにはこの辺りの設定を詰めれば行ける! pic.twitter.com/OnTLw5IUVL
— ʞɘiiɔʜiiƨozɒʞi (@keiichiisozaki) February 22, 2020
コンタクトシャドウ
Eevee は影の生成にシャドウマップを使用している。この方法は高速だが、テクスチャの精度の問題で厚みが薄かったりディティールの細かい部分では光が漏れる。コンタクトシャドウを有効にすると、そのような場所でも影を生成してくれる。ただしこれはスクリーン空間エフェクトなので視点によっては機能しないことがある。

ソフトシャドウ(2.81)
ライトの半径を0にして、ソフトシャドウを有効にすると影にアンチエイリアスがかかる。

基本
ボケ量をコントロールする
追加で影の位置を、パワーでボケ量をコントロールできる。
2陰
ミックスを使う場合
RGB ノードで色を指定できるようにする
以下のノードのカラーランプの明るさは、明るい順に 1.0, 0.9, 0.8, 0.0 だ。しかし数式ノードでフィルターする場合はガンマ補正が必要になるので、それぞれの値を 2.2 乗した値を数式ノードに入力する必要がある。
テクスチャを使う
以下のノードでは陰色の作成に「色相/彩度」を使用しているが、陰色のテクスチャを使うこともできる。
1枚のテクスチャに影色を含める
以下のように上下に色を配置したテクスチャを使い、UV をずらすことで影色を取得する。上下左右を使えば、2影やハイライトなども1枚のテクスチャで表現可能。

テクスチャで影を制御する
陰になってほしくない場所を指定したテクスチャがあれば、陰が落ちない場所を作れる。マスクテクスチャの画像ファイルの色空間を非カラーデータにするのを忘れないようにする。

リムライト
テクスチャで影を制御すると同様のノードでリムライトが不要な部分をテクスチャで指定することもできる。
輪郭抽出の補助としても使える。
フレネルを使う方法もある
透過
Shader to RGB ノードはスクリーン空間屈折を処理できる。

前髪の上に眉毛を描画する
マテリアルの位置でコントロールする方法
同一オブジェクト内のメッシュはマテリアル順に描画される。なので前髪と眉とのマテリアル両方のブレンドモードをアルファブレンドにし、眉のマテリアルを前髪のマテリアルの後方に配置することで前髪の上に眉を描画できる。眉のバックフェイスカリングは off にする。
原点を操作する方法
眉と前髪とが別オブジェクトの時にこの方法が使える。
アルファブレンドマテリアルはカメラから見て奥にあるオブジェクトから順に描画される。そしてソートの基準となる位置はオブジェクトの原点だ。なので手前に表示したいオブジェクトの原点を前の方へ移動させることで、奥にあるにもかかわらず手前のオブジェクトよりも後に描画できる。

後は前髪と眉とのマテリアル両方のブレンドモードをアルファブレンドにする。
この方法はカメラが後方へ回ると破綻するが、眉のオブジェクトに位置コピーコンストレイントをつけることで対処できる。ターゲットはカメラ、影響力 0.01 程度、空間はワールド―ワールド。
反射
Shader to RGB はスクリーン空間反射を編集できないが、環境テクスチャは編集できる。設定方法は、ワールドの「サーフェスを背景」にし「カラーを環境テクスチャ」にする。
頂点色の取得
属性(Attribute)ノードに名前を指定することで頂点色を取得できる。頂点色をアルファと解釈して、毛先や服の装飾を透過させるといった使い道がある。RGB 分離(Separate RGB)ノードを使えば、頂点色の各チャンネルにさまざまな情報を格納できる。
バージョン 2.81 からは頂点カラーノードを使うことで頂点色を取得できる。


頂点ペイント作業を効率化する Vertex Color Master for Blender アドオンがある。
任意の場所に影をつくる
任意の場所に影をつくる方法は任意の場所に影を作るを参照。
輪郭抽出
輪郭抽出は輪郭抽出法まとめを参照。
ライトの検出
シェーダから RGB へノードはシェーディング結果を RGB へ変換するためライトの情報は取得できない。しかしライトの色を RGB に割り当てれば3灯までのライトを自在にコントロールできる。
任意の場所にグラデーションの照り返しを追加するにはこの方法しかない。

背景の影響力を消す
メッシュのマテリアルまたはワールドマテリアルに、ライトパスノードのカメラレイか? を適用する。ワールドマテリアルを変更する方法はすべてのマテリアルから背景の影響力を除去できるが、光沢 BSDF 等で環境テクスチャの反射が映らなくなるのが欠点だ。
メッシュのマテリアルを編集する方法
Isolate materials from world color

ワールドマテリアルを変更する方法
【Eevee】Blender2.8でトゥーンシェーダーを作る!の続き・背景色の影響を受けないようにする
この方法はすべてのマテリアルから背景の影響力を除去できるが、光沢 BSDF 等で環境テクスチャの反射が映らなくなるのが欠点だ。反射が必要な背景マテリアルがある場合は、個別にマテリアルを設定するか、シーンを分けてレンダリングしてコンポジットで合成する必要がある。

手動ライティング
光源のワールド位置をドライバーで設定すると手動で陰を計算できる。ただし影が落ちないことに注意する必要がある。
ハーフランバート
通常のランバートは球の半球がライティングされないので光源を複数用意する必要があった。ハーフランバートは球の全体をライティングするため編集が容易になる。以下のノードは正確な実装ではない。ハーフランバートの正確な式は正規化Half-Lambertを参照。
ハーフランバートをそのまま使う場合はパワーを追加するとよい。
Phongの反射モデル

光沢BSDFでも似た効果が得られる。
外部リンク
モデル
アドオン
無料
GloriaTheAnimator's Ultimate Hair Shader for blender($0+)
有料
Manga Shader for Blender 3.5($10)
Toon & Comic Pack ( 2.8 )($20)
[MN toonshade node] blender用シンプルおてがるトゥーンシェーダ(¥0~¥100)
GloriaTheAnimator's Easy Toon Shader for blender($0+)