blender-stylized-npr について
BlenderでNPRのトゥーンシェーディングや輪郭線を設定するスキルです。キャラクターやシーンを制作するアーティスト向けで、色階調や照明、複数の輪郭手法を調整し、元のマテリアル接続も復元できます。
主な機能
- 01トゥーン階調と影色の設定
- 02リムライトとハイライトの設定
- 03反転ハルやLine Artによる輪郭線
- 04エンジン用輪郭シェーダーの法線生成
- 05元のマテリアル接続の記録と復元
活用シーン
- 01キャラクターにアニメ風の陰影を付ける
- 023Dモデルに輪郭線を加える
- 03キーライトで影の形を調整する
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ el4cteo/ blender-skills --skill blender-stylized-nprインストール後、Claude Code で/blender-stylized-nprを入力して読み込まれたか確認します。
同梱ファイルscripts/_bpyx.pyscripts/toon_setup.py
詳細
スタイライズド/NPR
実行モデルは blender-core にあります。ベースカラーは引き続き blender-pbr-materials/blender-texturing から取得します。このスキルは、ベースカラーのライティング方法を置き換えます。
それぞれ一度呼び出す
scripts/toon_setup.py -- --objects Hero Sword --bands 2 --rim 0.4 --outline 0.004
scripts/toon_setup.py -- --objects Hero --bands 3 --spec 0.3 --smooth-normals # + engine outline data
scripts/toon_setup.py -- --objects Hero --lighting scene # EEVEE: all lights + cast shadows
scripts/toon_setup.py -- --line-art --outline 0 # scene-wide Line Art
scripts/toon_setup.py -- --objects Hero Sword --remove --line-art # exact restore
toon_setup.py
- 各マテリアルの Principled ベースカラーと出力の間に
NPR_Toonエミッショングループを挿入し、--remove用に元のサーフェスリンクを記録します。再実行すると、値がその場で更新されます。 --lighting key(デフォルト、Cycles + EEVEE):シェーディングは、1 つの太陽光(--light。存在しない場合はNPR_Keyを作成)に対する N·L です。ドライバーは太陽光の回転に追従するため、太陽光を回転させて影の形を演出できます。これはエンジンのトゥーンシェーダーと同じ仕組みで、エクスポート後も見た目が一致します。--lighting scene:白いディフューズに対する Shader to RGB を使うため、すべてのライトと落ちる影がバンドの形に反映されます。EEVEE 専用です。 実測:Cycles では Shader to RGB は光にかかわらず一定の値を返します(太陽光が 0、3、10 W/m² の場合もレンダー結果は同一です)。- バンド数:2(明部/影、クラシックなアニメ調)または 3(
--thresholdより 0.45 上に中間バンドを追加)。--softness(0.02)はバンドの境界の半幅なので、0 にするとエイリアスが発生します。--shadow-tintはベースカラーに乗算されます。グレーや黒ではなく、彩度の高い寒色(0.6, 0.55, 0.75)を使ってください。グレーの影は汚れたように見えるためです。 --rim(0~1)は明部側にリムライトを追加し、--spec(0~1)は硬い Blinn ハイライトの円形の光を追加します(髪や金属には 0.2~0.4、肌には 0)。- view transform Standard に設定します。AgX/Filmic ではフラットな色の彩度が下がり、圧縮されるため、選んだアルベドがそのままピクセルに反映されるのは Standard の場合だけです。元の設定は
--removeで復元されます。
アウトライン(プロは複数の手法を併用します)
| 方法 | 対応環境 | 備考 |
|---|---|---|
反転ハル(--outline、m) | Cycles、EEVEE、エンジン | Solidify で外側に押し出し、法線を反転させ、アウトラインスロットを設定し、Backfacing を透過にします。高さ 1.75 m のキャラクターでは幅を 2~6 mm にします。--outline-group は幅を制御する頂点グループです(先端に向けて細くし、口の内側では 0 にします)。 |
--smooth-normals | エンジンのアウトラインシェーダー | NPR_OutlineNormal のコーナーカラーは、接続位置を基準にした接線空間の法線(0.5 + 0.5n)です。ハードエッジや UV の分割部分に隙間ができなくなります。n = TBN·(c·2−1) としてデコードします。 |
Line Art(--line-art、Grease Pencil) | レンダー | カメラから見た輪郭、折り目、交差部分を生成します。シーンカメラが必要です。--line-radius(m) |
| Freestyle | レンダー | scene.render.use_freestyle = True、line_thickness は px 単位です。最も遅いですが、設定項目が最も豊富です。 |
ハルの既知の制限:交差部分や内側の折り目の線は生成されません(レンダーでは Line Art を使ってください)。また、ハードエッジのメッシュではハルが分割されます。Blender では Solidify の前に距離でマージしてください。エンジンでは --smooth-normals を使ってください。 |
アニメ調の顔と髪
- 実際の法線による顔の影は、まだらに見えます。シンプルな楕円体プロキシからカスタム法線を転送します。Data Transfer モディファイアで
use_loop_data=True、data_types_loops={'CUSTOM_NORMAL'}、loop_mapping='POLYINTERP_NEAREST'を設定し、顔の頂点グループでマスクします(4.1 以降は自動スムーズが不要です)。エンジンはカスタム法線をインポートします(FBX/glTF は法線をエクスポートします)。 - スタイライズドな鼻や頬の影には、多くのゲームで、エンジン内でライトの角度を使ってサンプリングする SDF 顔影テクスチャを使用します。ノードツリーではなく、グレースケールのしきい値マップとして作成してください。
- 髪:強めの
--specと、ベースカラーテクスチャに手描きしたハイライトバンド(「エンジェルリング」)を組み合わせます。
Grease Pencil(5.x API)
gp = bpy.data.grease_pencils.new("Ink"); ob = bpy.data.objects.new("Ink", gp); scene.collection.objects.link(ob)
mat = bpy.data.materials.new("Ink"); bpy.data.materials.create_gpencil_data(mat); gp.materials.append(mat)
drawing = gp.layers.new("Lines").frames.new(1).drawing
drawing.add_strokes([3]); s = drawing.strokes[0]
for i, p in enumerate(s.points): p.position, p.radius = (i * 0.5, 0, 0), 0.01 # radius in m
ストロークには cyclic、material_index、fill_id、hide_stroke が公開されています。生の属性は drawing.attributes(position、radius)です。GreasePencilv3/grease_pencils_v3 は廃止されました(5.0)。5.2 の Line Art では塗りつぶしストロークを生成できます(fill_strokes)。
ゲームエンジン向け
ノードによるトゥーンシェーディングはエクスポートされません。ベースカラーのテクスチャをエクスポートし、同じ太陽の向きを使って、エンジン内でトゥーンランプを再構築します(UE のマテリアル/ポストプロセス、Unity URP のトゥーンシェーダー、Godot の ShaderMaterial)。船体は 2 つ目のマテリアルスロットとして出荷する(モディファイアーを適用する)か、シェーダーのアウトラインパス用に NPR_OutlineNormal として出荷します。
glTF のフラットな非ライティングアセットには、Background シェーダーを使用するか、Light Path の Is Camera Ray で Transparent→Background をミックスします。どちらも KHR_materials_unlit としてエクスポートされます。Emission は非ライティングではなく、黒いベースのエミッシブとしてエクスポートされます(実測)。
注意点
--outlineの前にスケールを適用してください。Solidify の厚みはオブジェクト空間で指定されます。- ブルームと AO はフラットな見た目を損ないます。ワールドを暗く均一に保ち、キーライトを 1 つ、必要に応じてリムライトを 1 つ使います。
--lighting sceneの階調はライトのエネルギーに応じて変化します(輝度 0.3 ≈ しきい値 0)。ライトのパワーではなく、--thresholdを上げるか下げて調整してください。