mcpField
B
blender-stylized-npr

blender-stylized-npr

github.com/el4cteoクリエイティブ・メディア1.1k302 回インストール今日更新
リポジトリ

blender-stylized-npr について

BlenderでNPRのトゥーンシェーディングや輪郭線を設定するスキルです。キャラクターやシーンを制作するアーティスト向けで、色階調や照明、複数の輪郭手法を調整し、元のマテリアル接続も復元できます。

主な機能

  1. 01トゥーン階調と影色の設定
  2. 02リムライトとハイライトの設定
  3. 03反転ハルやLine Artによる輪郭線
  4. 04エンジン用輪郭シェーダーの法線生成
  5. 05元のマテリアル接続の記録と復元

活用シーン

  1. 01キャラクターにアニメ風の陰影を付ける
  2. 023Dモデルに輪郭線を加える
  3. 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 を上げるか下げて調整してください。

コメント