Eevee のセルルック技法まとめ
目次
- カラーマネジメント
- 法線のコンポジット出力
- 陰影なし表示
- ライト
- 基本
- 2影
- テクスチャを使う
- テクスチャで影を制御する
- リムライト
- 透過
- 描画順のコントロール
- 反射
- 頂点色の取得
- 任意の場所に影を作る
- 輪郭抽出
- 背景の影響力を消す
カラーマネジメント
Blender 4.0 からビュー変換の AgX が既定値になった。AgX はダイナミックレンジが広がるため、フォトリアルなルックでは重要だ。しかしアーティストが直接色を指定するセルルックでは、コントラストの低下や色の変化が起こるため推奨しない。セルルックではビュー変換を「標準」にした方がよい。
4.0 以前の情報
Blender 2.80 からビュー変換の Filmic が既定値になった。Filmic はダイナミックレンジが広がるため、フォトリアルなルックでは重要だ。しかしアーティストが直接色を指定するセルルックでは、コントラストの低下や色の変化が起こるため推奨しない。セルルックではビュー変換を「標準」にした方がよい。
法線のコンポジット出力
Eevee はマテリアル出力に色をそのまま出力できる。これは Cycles との互換性がなくなるうえに、コンポジットで法線が取得できなくなる。なのでセルルックであっても放射(Emission)ノードを介することを推奨する。
最後のノードに放射ノードではなくプリンシプル BSDF も使える。プリンシプル BSDF はアルファが使えるのが強みだ。プリンシプル 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.83)
ソフトシャドウを有効にすると影にアンチエイリアスがかかる。
ライトの検出
シェーダから RGB へノードはシェーディング結果を RGB へ変換するためライトの情報は取得できない。しかしライトの色を RGB に割り当てれば3灯までのライトを自在にコントロールできる。
任意の場所にグラデーションの照り返しを追加するにはこの方法しかない。
基本
ボケ量をコントロールする
追加で影の位置を、パワーでボケ量をコントロールできる。
ライトの色で影の量を変えない
Maintain falloff with different light hue
Shader to RGB をグレースケール化すると、ライトの色によって影の輪郭位置が変化する。これを避けるには HSV 分離ノードの V から明るさを取得する。
2陰
ミックスを使う場合
RGB ノードで色を指定できるようにする
以下のノードのカラーランプの明るさは、明るい順に 1.0, 0.9, 0.8, 0.0 だ。しかし数式ノードでフィルターする場合はガンマ補正が必要になるので、それぞれの値を 2.2 乗した値を数式ノードに入力する必要がある。
テクスチャを使う
以下のノードでは陰色の作成に「色相/彩度」を使用しているが、陰色のテクスチャを使うこともできる。
1枚のテクスチャに影色を含める
以下のように上下に色を配置したテクスチャを使い、UV をずらすことで影色を取得する。上下左右を使えば、2影やハイライトなども1枚のテクスチャで表現可能。
テクスチャで影を制御する
陰になってほしくない場所を指定したテクスチャがあれば、陰が落ちない場所を作れる。マスクテクスチャの画像ファイルの色空間を非カラーデータにするのを忘れないようにする。
リムライト
テクスチャで影を制御すると同様のノードでリムライトが不要な部分をテクスチャで指定することもできる。
輪郭抽出の補助としても使える。
フレネルを使う方法もある
透過
シェーダーからRGBへノードはスクリーン空間屈折を処理できる。
描画順のコントロール
アルファブレンドマテリアルの特徴
アルファブレンドマテリアルはほかのマテリアルと以下の点で異なっている。
- カメラから見て奥にあるオブジェクトから順に描画される
- アルファブレンドマテリアルは他のアルファブレンドマテリアルで隠面消去されない
アルファブレンドマテリアルは他のアルファブレンドマテリアルで隠面消去されないので、描画順を制御すれば奥にあるオブジェクトを手前に表示できる。
マテリアルの位置でコントロールする方法
同一オブジェクト内のメッシュはマテリアル順に描画される。なので前後関係のあるメッシュのマテリアルのブレンドモードをすべてアルファブレンドにし、手前に表示したいマテリアルをマテリアルリストの下方に配置することで最前面に表示させられる。必要ならばマテリアルのバックフェイスカリングは off にする。
オブジェクト名で操作する方法
描画順をコントロールしたいメッシュが別オブジェクトの時にこの方法が使える。描画順をコントロールしたいメッシュを以下のように設定する。
- 原点を一致させる
- マテリアルをアルファブレンドにする
- 後から描画したいメッシュをアウトライナ上で下に配置する
アウトライナ内でオブジェクトの位置を変更する方法は2つある。
1. オブジェクト名の頭に 01_ 等の接頭辞をつける
2. アルファベット順にソートオプションを切って、オブジェクトを並び替える
オブジェクトごとにコレクションに入れておくと、アウトライナ上での位置をドラッグで変更できる。
もしくは「アルファベット順にソート」オプションを切った状態でコレクション内にオブジェクトをドラッグすると、コレクションの一番下にオブジェクトが追加される仕様を利用して並び替える。
原点を操作する方法
描画順をコントロールしたいメッシュが別オブジェクトの時にこの方法が使える。
アルファブレンドマテリアルはカメラから見て奥にあるオブジェクトから順に描画される。そしてソートの基準となる位置はオブジェクトの原点だ。なので手前に表示したいオブジェクトの原点を前の方へ移動させることで、奥にあるにもかかわらず手前のオブジェクトよりも後に描画できる。
後は前後関係のあるオブジェクトのマテリアルのブレンドモードをアルファブレンドにする。
この方法はカメラが後方へ回ると破綻するが、前面に表示したいオブジェクトに位置コピーコンストレイントをつけることで対処できる。ターゲットはカメラ、影響力 0.01 程度、空間はワールド―ワールド。
透過オブジェクトを隠す
描画順を制御して目を手前に表示したとき、鼻で隠された奥側の目も表示されてしまう。このような場合は、ホールドアウトマテリアルを適用した仕切り板を顔の中に埋め込むことで、奥側の目を隠せる。
背面法で輪郭線をつけたオブジェクトを透過
膜のマスク、膜アウトライン、体アウトラインが、表裏反転のポリゴンです
— dadadan3D (@DDadadan3) June 29, 2023
膜のマスクは完全透明で「背景を表示」のチェックを外してあり、これによりZバッファに書き込んでいるので、ほかの半透明な物との重なり順を(ちょっとだけ)改善できますが、なくて良いです
反射
シェーダーからRGBへはスクリーン空間反射を編集できないが、環境テクスチャは編集できる。設定方法は、ワールドの「サーフェスを背景」にし「カラーを環境テクスチャ」にする。
頂点色の取得
属性(Attribute)ノードに名前を指定することで頂点色を取得できる。頂点色をアルファと解釈して、毛先や服の装飾を透過させるといった使い道がある。RGB 分離(Separate RGB)ノードを使えば、頂点色の各チャンネルにさまざまな情報を格納できる。
バージョン 2.81 からは頂点カラーノードを使うことで頂点色を取得できる。
頂点ペイント作業を効率化する Vertex Color Master for Blender アドオンがある。
任意の場所に影をつくる
任意の場所に影をつくる方法は任意の場所に影を作るを参照。
輪郭抽出
輪郭抽出は輪郭抽出法まとめを参照。
背景の影響力を消す
メッシュのマテリアルまたはワールドマテリアルに、ライトパスノードのカメラレイか? を適用する。ワールドマテリアルを変更する方法はすべてのマテリアルから背景の影響力を除去できるが、光沢 BSDF 等で環境テクスチャの反射が映らなくなるのが欠点だ。
メッシュのマテリアルを編集する方法
Isolate materials from world color
ワールドマテリアルを変更する方法
【Eevee】Blender2.8でトゥーンシェーダーを作る!の続き・背景色の影響を受けないようにする
この方法はすべてのマテリアルから背景の影響力を除去できるが、光沢 BSDF 等で環境テクスチャの反射が映らなくなるのが欠点だ。反射が必要な背景マテリアルがある場合は、個別にマテリアルを設定するか、シーンを分けてレンダリングしてコンポジットで合成する必要がある。
手動ライティング
光源のワールド位置をドライバーで設定すると手動で陰を計算できる。ただし影が落ちないことに注意する必要がある。
ハーフランバート
通常のランバートは球の半球がライティングされないので光源を複数用意する必要があった。ハーフランバートは球の全体をライティングするため編集が容易になる。以下のノードは正確な実装ではない。ハーフランバートの正確な式は正規化Half-Lambertを参照。
ハーフランバートをそのまま使う場合はパワーを追加するとよい。
Phongの反射モデル
光沢BSDFでも似た効果が得られる。
外部リンク
プロジェクトスタジオQ流 BlenderでつくるアニメCG 第2回:トゥーンシェーダのつくり方(前篇)
Tip for those looking for a simple but effective stylized toon shader in Blender - a small amount of gradient goes a long way. pic.twitter.com/mxB4U3TpwD
— Allen (EKS) (@EpicKStudios) June 16, 2021
モデル
アドオン
無料
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+)
Genshin Impact Character Shader for EEVEE($2~$35)