Blenderでセルルックの影が汚くなる原因は主に3つ——法線(ノーマル)の過剰平均化・EEVEEのライティング設定・シェーダーノードの内積反転。この記事では、それぞれの原因と対処を、検証環境で撮った前後の比較つきで解説する(サンライトを回したときの明暗反転だけは再現構成が未確定で、検証中の扱いだ)。
「モデルに影を入れたら汚いグラデーションが出た」「サンライトを回転させると影が逆行する」——Blenderでアニメ調(セルルック)表現に挑戦すると、物理ベースレンダリング(PBR)との衝突で必ずこの壁に当たる。検証環境で法線・ライティング・ノードの3層を順番に対処すると、対処の前後で陰影がはっきり変わることを画素の比較で確かめた(サンライトを回したときの明暗反転だけは、再現する構成を確定できておらず検証中だ)。この記事では初心者でも即実践できるテクニックを網羅的に解説する。
なぜBlenderのセルシェーディングで影が破綻するのか?

根本原因は「物理法則に忠実なPBRエンジン」と「意図的に省略するNPR(非写実的)表現」の思想的対立にある。
Blenderは初期設定で物理的に正しい光の計算を行う。スムースシェード(Smooth Shading)はその典型で、曲面を滑らかに見せる代わりに頂点法線を周囲の面と平均化するため、本来フラットな平面にまで影のグラデーションが波及してアーティファクトを生む。また、EEVEEエンジンはリアルタイム性に優れセルルックに向いているが、ライトの設定次第では半影(ペナンブラ)が出てアニメ特有のくっきりした影にならない。問題を3層に分けて解決することがポイントだ。
【Layer 1】メッシュと法線の最適化——影のアーティファクトを根絶する
ベベル適用後は「法線のハード化」で隣接面を守る

ベベル(面取り)モディファイアーを適用した直後に黒ずみが出る場合、モディファイアーのプロパティ内「シェーディング」セクションにある「法線のハード化(Harden Normals)」が効く。この設定を有効にするとBlenderはベベル面の法線のみを補間し、隣接する大きな平面の法線は面に対して垂直に保つ。
先に「自動スムーズ」を入れる(2026年8月16日 訂正)
検証環境(Blender 3.6.11 / EEVEE)で確認したところ、オブジェクトデータプロパティの「自動スムーズ(Auto Smooth)」が無効のままだと「法線のハード化」は何も起こさない。自動スムーズを切った状態でチェックを入れ外しして同一シーンをレンダリングし、2枚の画素を比較すると変化した画素は0・最大差も0だった。対照として自動スムーズを有効にしたうえで同じ切り替えをすると、ベベル周辺を中心にモデル画素の5.1%が最大21%変化する(立方体+ベベル0.15/4セグメント・自動スムーズ30°・540×540ピクセル描画での実測。2026年8月18日に測り直し。当初は「約8.8%が最大12.5%変化」と書いていたが、同条件で再現しなかったため差し替えた)。「差が無い」側の測定は、差が出る対照とセットでないと測定器の故障と区別できないため、両方を載せている。本記事は当初「チェックを入れるだけで解決できる」と書いていたが、正しくは「自動スムーズを有効にしてから、法線のハード化にチェック」だ。
「重み付き法線」モディファイアーで全体をクリーンアップする

複雑なモデリングやブーリアン演算後に全体的にシェーディングが乱れている場合は、モディファイアースタックの末尾に「重み付き法線(Weighted Normal)」を追加するのがベストプラクティスだ。面積の大きなポリゴンの法線の影響力を強くして頂点法線の向きを自動補正するため、フラットな面は完全に平らに保たれつつ角の丸みだけが滑らかになる。非破壊で全体をクリーンアップできるのが利点だ。なお検証環境で実測できたのは「スタックのどこに置くかで結果が変わる」ところまでで(末尾なら画素の5.1%が変化、ベベルより先だと0.5%=ほぼ効かない)、ブーリアン後のような複雑なモデルで乱れがどれだけ減るかは、単純な立方体では測れていない。
「シャープをマーク」と「面から設定」——手動オーバーライド
特定のエッジだけ影を断ち切りたい場合は編集モードで対象エッジを選択しCtrl+E → シャープをマーク(Mark Sharp)を実行。スムースシェードの影響がそのエッジで停止しアニメ的なシャープな影が生まれる。他ソフトからのインポート時など法線データが完全に狂ってしまった最終手段として、全選択後にAlt+N → 面から設定(Set from Faces)でカスタム法線をリセットして幾何学的に正しい法線を再計算できる。
【Layer 2】EEVEEのライティングを「セルルック仕様」に最適化する
サンライトの「角度(Angle)」を0にする——半影を確実に断つ
サンライトを選択し、オブジェクトデータプロパティの「角度(Angle)」を「0」にすると、光線が完全に平行になり半影(ソフトシャドウ)が原理的に発生しなくなる。セルルックは影の境界がぼけた時点で成立しないので、この設定は入れておいて損がない。
実測: 既定値のままでも半影はほとんど出ない
本記事は当初この既定値を「約11.4度」と記載していたが、検証環境(Blender 3.6.11 / EEVEE)で実測したところサンライトの角度の既定値は0.526度だった。球と床だけのシーンで落ち影の境界の幅を計測すると、角度0度と既定値0.526度の差は540ピクセル中1ピクセルで、見た目では区別がつかない。したがって「既定値のままでは影がぼけてセルルックにならない」とは言えない。角度を大きくすると半影は広がるので、この項目は既定値を直すためではなく、光源を大きくしてしまったときに戻すための設定と理解しておくとよい。(2026年8月16日 実測・訂正)
ポイントライト・エリアライト使用時
ポイントライト等でハードシャドウを得たい場合は「光源サイズ(半径)を極限まで小さく、ワット数を高く」設定する。光源が小さいほど影はシャープになる——これが基本原理だ。
【Layer 3】シェーダーノードで影を数学的にコントロールする
太陽を回すと影の明暗が入れ替わることがある
ライトの方向ベクトルと法線の内積から影を作るトゥーンシェーダーでは、サンライトを回していくと途中で明暗の対応が入れ替わることがある。内積の値は光源の角度に対して単調に増減しないため、ノードの組み方によっては特定の角度を境に明るい面と暗い面が反転してしまう。ターンテーブルやタイムラプスのように光源を回すカットで影が破綻したら、まずここを疑うとよい。
数式ノードで場合分けを挟んで反転を抑える
対処の方向は、内積の値をそのまま使わず数式ノードで場合分けを入れることだ。たとえば「より大きい(Greater Than)・閾値0.5」の出力(0または1)を減算(Subtract)ノードの上側の入力に接続すると、閾値を境に演算が切り替わる。ただし有効な組み方は前段のノード構成に依存するため、この一手だけで必ず直るとは限らない。採用する前に、自分のノードツリーで光源を1回転させて明暗が入れ替わらないことを必ず確認してほしい。
この節は検証中
上記の対処について、検証環境で再現できるノード構成をまだ確定できていない。動作を確認できた時点で、実際のノードグラフを添えて更新する。(2026年8月16日時点)
ハーフランバートで顔の影を半減させる


通常のランバート反射では球体の下半分50%が影になる——キャラクターの顔に使うと暗くなりすぎる。ハーフランバートは内積値(-1〜1)を0.5倍して0.5加算し、0〜1に圧縮する処理だ。カラーランプは入力を0〜1に丸めてしまうため、生の内積をそのまま渡すと負の側(=影の側)の階調が潰れる。先に圧縮しておくことで、影の境界をカラーランプの閾値で自由に動かせるようになる。
圧縮そのものは面積を広げない(2026年8月16日 訂正/2026年8月18日 測定条件つきで再実測)
検証環境で明部の面積を実測すると、生の内積(閾値ほぼ0)で41.8%、ハーフランバート+閾値0.5で41.9%と、差は0.1ポイントだった。つまり0.5倍して0.5加算する操作だけでは、光の当たる面積は変わらない。面積が動くのはその後にカラーランプの閾値をずらしたときで、閾値を0.35まで下げると69.7%まで広がった。本記事は当初「0.5倍して0.5加算することで面積を広げる」と書いていたが、正しくは「圧縮によって閾値を動かせるようになり、閾値を下げると広がる」だ。
測定条件=モンキー(Suzanne・スムーズシェード)/EEVEE/540×540ピクセル/正面カメラ(位置 0, -4.2, 0・回転 90°, 0°, 0°)/内積に与えた光方向ベクトル (0.86, 0.08, 0.50)/明部=モデルの画素のうちR値が200を超える画素。この比率はカメラ位置と「どこから明部と数えるか」で1ポイント前後動く(同じ画像でも二値化のしきい値を変えると41.7〜43.0%/69.7〜71.1%の範囲で動いた)。絶対値ではなく「圧縮では変わらず、閾値で変わる」という関係のほうを見てほしい。なお同じ条件でレンダリングし直すと画素数まで一致することを確認している(同一構成を2回描いた対照の差は0)。
BOOTHの外部シェーダーアセットで制作効率を大幅アップ
ノード構築を毎回ゼロから組み直すのは非効率だ。BOOTHなどで配布されている「お手軽セルルックシェーダー」のようなアセットをAppendで導入すると、ハーフランバートの閾値オフセットがスライダーで直感的に調整できる状態で利用できる。さらに優れたアセットは、影の発生方向とスペキュラー(ハイライト)の方向を別々のライトから独立計算できる「個別ライト方式」を内包しており、カメラ目線のキャッチライトとは別に主光源から影を落とすといったリッチな表現が短時間で実現できる。
バージョン互換性に注意
Blender 3.5で作成されたシェーダーはそれ以前のバージョンでは正常動作しない場合がある。アセット導入前に自分のBlenderバージョンとの互換性を必ず確認しよう。
まとめ:セルルック品質管理チェックリスト
アニメ調レンダリングは「物理法則を数学的・論理的に意図して壊す」作業の連続だ。以下のチェックリストを作業中に随時参照してほしい。
| 確認項目 | 発生条件 | 対処法 |
|---|---|---|
| 法線のハード化 | ベベルモディファイアー使用時 | モディファイアー → シェーディング → Harden Normals ✓ |
| 重み付き法線 | 複雑モデリング・ブーリアン後 | モディファイアースタック末尾にWeighted Normal追加 |
| シャープをマーク | 特定エッジだけ影を断ち切りたい | 編集モード → Ctrl+E → Mark Sharp |
| サンライト角度=0 | EEVEEでハードシャドウが出ない | オブジェクトデータ → Angle → 0 |
| 影の反転防止 | サンライト360度回転時 | Greater Than 0.5 ノードを減算の上部入力に接続 |
| ハーフランバート | 顔の影が広すぎる・暗すぎる | 内積値を0.5倍+0.5加算でカラーランプ前に挿入 |

コメント