EEVEE のセルルック技法まとめ
目次
- バージョン 4.2 以降
- 重要な変更点
- バンド状の影や細かいノイズがでる
- ソフトシャドウを消す
- 落ち影にノイズがのる
- 落ち影にジャギーがでる
- 半透明の部分にノイズが乗る
- 影を落とさない
- 放射の間接照明を切る
- ブルームがない
- 描画順操作
- ブレンドマテリアルの使いどころ
- コンポジター問題
- カラーマネジメント
- 法線のコンポジット出力
- 陰影なし表示
- ライト
- 基本
- 2影
- テクスチャを使う
- テクスチャで影を制御する
- リムライト
- 透過
- 描画順のコントロール
- 反射
- 頂点色の取得
- 任意の場所に影を作る
- 輪郭抽出
- 背景の影響力を消す
バージョン 4.2 以降
重要な変更点
シェーダの RGB 化でスクリーンスペース屈折の情報が取得できない
シェーダの RGB 化はレイトレースエフェクトを取得できなくなった。その理由はレンダリングオーダーに関係がある。レンダリングは以下の順番で行われる。
- 不透明ディザーマテリアル
- 不透明ディザーマテリアルのレイトレースエフェクト(スクリーンスペース反射など)
- レイトレース伝播にチェックの入っているディザーマテリアル
- レイトレース伝播にチェックの入っているディザーマテリアルのレイトレースエフェクト
- ブレンドマテリアル
シェーダの RGB 化の処理は 1. または 3. で行われ、スクリーンスペース屈折は 4. で処理される。よってシェーダの RGB 化でスクリーンスペース屈折の情報は取得できない。
ガラスや伝播マテリアルにブレンドマテリアルが映らない
レイトレースの後にブレンドマテリアルがレンダリングされるので、ブレンドマテリアルはスクリーンスペース反射・屈折に映らなくなった。
描画順を操作するにはブレンドマテリアルのアルファを1以外にする必要がある
アルファが1のマテリアルは描画順に依存せず正しくレンダリングされるようになり、AO も利用できる。なので描画順を操作したい場合はアルファを 0.999 のような値にする必要がある。
ディザーならアルファと AO を両方利用できるが、描画順は操作できない。
バンド状の影や細かいノイズがでる
EEVEE: Shadow terminator artifacts with custom normals #123595
ソフトシャドウを消す
光源の設定
サンライトは距離減衰がないので使いやすい。
- 「解像度を制限」を小さい値にする
- 角度を0にする(サンライト)
- 半径を小さくする(サン以外のライト)
落ち影にノイズがのる
- マテリアルの「影を透過」のチェックを外す
- 「レンダー > サンプリング > ビューポート > サンプリング」を増やす
落ち影にジャギーがでる
光源のフィルターを設定する。ただし落ち影の輪郭はぼける。
半透明の部分にノイズが乗る
- 「レンダー > サンプリング > ビューポート > サンプリング」を増やす
- マテリアルのレンダー方法を「ブレンド」にする
影を落とさない
オブジェクト単位
可視性 > レイの可視性 > 影のチェックを外す。
マテリアル単位
マテリアルの「影を透過」にチェックを入れ、ライトパスのシャドウレイを使ってシェーダを切り替える。
マテリアルの「影を透過」にチェックを入れ、ライトパスのカメラレイをプリンシプル BSDF のアルファにつなぐ方法でも可能。
マテリアルで影を無効にしたオブジェクトに影をつける
ソリッド化モディフィアをつけて、影を無効にしていないマテリアルをソリッド化メッシュに割り当てる。.blend ファイルダウンロード
関連記事
放射の間接照明を切る
以下の3つの方法がある。
- マテリアルのレンダー方法をブレンドにする
- レイトレース伝播にチェックを入れる
- レイトレースを切る
マテリアルのレンダー方法をブレンドにする
欠点
- レイトレースエフェクトの影響を受けられない
- ライトが大量にあるシーンでは描画負荷が高い
レイトレース伝播
利点:ディザーでレンダリングできる
欠点:レイトレース伝播にチェックの入っているマテリアル間では間接照明が有効になる。
つまり放射ノードを使っているマテリアルのレイトレース伝播にチェック入れても、スクリーンスペース屈折が必要な半透明オブジェクトは放射ノードの影響を受けてしまう。
外部リンク
EEVEE Next: Is Camera Ray does not work with ray tracing #123644
ブルームがない
ビューポートコンポジターでグレアノードのブルームを使う。
描画順操作
バージョン 4.2 以降はアルファが1のブレンドマテリアルは、描画順操作に影響を受けず正しく描画される。なので、描画順を制御する場合はアルファを 0.999 のような値にする必要がある。
プリンシプル BSDF を使いたいくない場合は、透過 BSDF とシェーダーミックスとを使ってアルファを設定できる。
リンク
ブレンドマテリアルの使いどころ
ブレンドマテリアルは光源が大量にあるシーンで描画負荷が高い。なので以下の状況以外では使用しない方がいい。
- 描画順を操作したい
- 半透明マテリアルが放射の影響を受けてほしくない
コンポジター問題
アルファ透過は法線や深度が正しく取得できない。アルファ透過マテリアルの深度や法線を取得したい場合は、旧の EEVEE 同様に、ブレンドと透過とを無効にしてビューレイヤーを使ってレンダリングする必要がある。ブレンドマテリアルは法線が出力されない。
ディザー透過
伝播透過
ディザーで伝播を使って透過すると深度・法線等が正しく取得できる。
アルファ透過
ディザーでアルファを使って透過すると、深度・法線などのパスにノイズがのり、使い物にならない。
ブレンド透過
アルファが1未満のブレンドマテリアルは深度・法線などのパスに出力されない。アルファが1のブレンドマテリアルは深度は出力されるが、法線は出力されない。
外部リンク
Blender 4.2 - EEVEE-Next Feedback
カラーマネジメント
バージョン 2.80 以降はビュー変換の AgX や Filmic が既定値になった。AgX や Filmic はダイナミックレンジが広がるため、フォトリアルなルックでは重要だ。しかしアーティストが直接色を指定するセルルックでは、コントラストの低下や色の変化が起こるため推奨しない。ビュー変換は「標準」にしたほうがいい。
バージョン 4.2 で Khronos PBR Neutral が導入された。これは高輝度な部分がハイライトのみに限定されるような、ライティングが制御されたシーンで使える。AgX に比べて色の変化が少ないが、色の再現性は「標準」には及ばない。
法線のコンポジット出力
EEVEE はマテリアル出力に色をそのまま出力できる。これは Cycles との互換性がなくなるうえに、コンポジットで法線が取得できなくなる。なのでセルルックであっても放射(Emission)ノードを介することを推奨する。
最後のノードに放射ノードではなくプリンシプル BSDF も使える。プリンシプル BSDF はアルファが使えるのが強みだ。プリンシプル BSDF を使う場合はベースカラーを黒にして、スペキュラーを0に設定する。
陰影なし表示
陰影なし表示はカラーマネジメントの設定を無視して表示される。
EEVEE
3Dビューのシェーディングをフラットにして、マテリアルかテクスチャを選択する。この設定はレンダリングに反映されない。
Workbench
照明をフラットにして、カラーのマテリアルかテクスチャを選択する。この設定はレンダリングに反映される。
ライト
ビュー変換が標準のとき、白のサンライトの強さを4にして、白のマテリアルをレンダリングするとちょうど明るさが1になる。
ライトの設定
サンライトとそれ以外のライト(ポイント・スポット・エリア)では影の生成方法が違う。サンライトはシーン全体をライティングする用途で使われるため、ひとつの光源に対し複数のシャドウマップを使うカスケードシャドウマップを使用して影が生成される。そのためサンライトはGPUのメモリ使用量が多く、描画負荷も高い。
サンライト
サンライトの強みは距離減衰がないこととライトの向きだけで影の形をコントロールできることだ。
サンライトはライトの向きが影の形に影響を与えるが、それ以外のライトはライトの位置も影の形に影響を与える。サンライトでないライトをオブジェクトの近くに配置すると、広い領域が影になるため複数のライトを配置する必要がある。サンライトでないライトをオブジェクトの遠くに配置すると影になる領域は小さくなるが、距離減衰があるため影の領域の調整がシビアになる。加えてオブジェクトから遠いライトはビューポートで選択しづらい。
サンライトの解像度を上げる
影のカスケードサイズをあげ、ライトの角度を0にする。ビューポートのサンプル数を増やすと影にアンチエイリアスがかかる。
最大距離をシーンに合わせて最適化する方法もある。
外部リンク
#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枚のテクスチャで表現可能。
テクスチャで影を制御する
陰になってほしくない場所を指定したテクスチャがあれば、陰が落ちない場所を作れる。マスクテクスチャの画像ファイルの色空間を非カラーデータにするのを忘れないようにする。
リムライト
テクスチャで影を制御すると同様のノードでリムライトが不要な部分をテクスチャで指定することもできる。
輪郭抽出の補助としても使える。
フレネルを使う方法もある
透過
バージョン 4.2 以降ではレイトレーシング対応により、シェーダーからRGBへノードはスクリーン空間屈折の情報を利用できなくなった。
バージョン 4.1 以前の EEVEE は「シェーダーからRGBへ」ノードはスクリーン空間屈折を処理できる。
描画順のコントロール
アルファブレンドマテリアルの特徴
アルファブレンドマテリアルはほかのマテリアルと以下の点で異なっている。
- カメラから見て奥にあるオブジェクトから順に描画される
- アルファブレンドマテリアルは他のアルファブレンドマテリアルで隠面消去されない
アルファブレンドマテリアルは他のアルファブレンドマテリアルで隠面消去されないので、描画順を制御すれば奥にあるオブジェクトを手前に表示できる。
バージョン 4.2 以降
バージョン 4.2 以降はアルファが1のブレンドマテリアルは、描画順操作に影響を受けず正しく描画される。なので、描画順を制御する場合はアルファを 0.999 のような値にする必要がある。
プリンシプル BSDF を使いたいくない場合は、透過 BSDF とシェーダーミックスとを使ってアルファを設定できる。
マテリアルの位置でコントロールする方法
同一オブジェクト内のメッシュはマテリアル順に描画される。なので前後関係のあるメッシュのマテリアルのブレンドモードをすべてアルファブレンドにし、手前に表示したいマテリアルをマテリアルリストの下方に配置することで最前面に表示させられる。必要ならばマテリアルのバックフェイスカリングは 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)