blender-hair-grooming について
アーティスト向けのBlenderヘアグルーミングスキルです。ストランドのヘア、ファー、ゲーム向けヘアカードを作成できます。モディファイアで設定を編集でき、カーブ数や長さ、根元の接地ギャップを報告します。
主な機能
- 01ガイドと補間ヘアの生成
- 02束化、カール、垂れ、ノイズのモディファイア
- 03ゲーム用ヘアカードとテクスチャアトラスの作成
- 04評価済みカーブをAlembicまたはUSDで書き出し
活用シーン
- 01頂点グループマスクで頭髪をグルーミング
- 02ひげや体毛のグルームを作成
- 03ゲームアセット用のヘアカードアトラスを作成
- 04UE GroomまたはHoudini向けにストランドを出力
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ el4cteo/ blender-skills --skill blender-hair-groomingインストール後、Claude Code で/blender-hair-groomingを入力して読み込まれたか確認します。
同梱ファイルscripts/_bpyx.pyscripts/groom.py
詳細
ヘアグルーミング
実行モデルについては blender-core を参照してください。ヘアの物理シミュレーションの詳細は blender-simulation、ルックデブについては blender-lighting-lookdev を参照してください。
それぞれを1回ずつ呼び出す
scripts/groom.py -- --surface Head --mask Scalp --length 0.15 --children 150000 --clump 0.5
scripts/groom.py -- --surface Head --mask Beard --length 0.02 --droop 0.2 --curl 0.004 --melanin 0.9 --name Beard
scripts/groom.py -- --surface Body --length 0.025 --droop 0.3 --clump 0.3 --name Fur
scripts/groom.py -- --cards Hair --card-count 150 --atlas-res 2048 --out //textures # game hair cards
プロのグルーミング方法
- まずサーフェスを整える:頭皮は、UV(ヘアはUVに沿って付着します)を持つメッシュ(または頭部そのもの)で、ヘアが生える場所にペイントした頂点グループを備えています。このグループが密度マスクになるため、エッジをソフトにすると自然な生え際になります。
- ガイドから子ヘアへ:数百から数千本のガイドで形を作り、補間した数千本の子ヘアでボリュームを出します。スタイリングするのはガイドで、子ヘアは編集しません。
- 層ごとに形を作る:長さ、次に束化(毛束がまとまって房になります)、次にカール/ウェーブ、次に縮れ/ノイズ、最後にプロファイル(細い毛先)の順に設定します。それぞれを個別のモディファイアにして、切り替えられるようにします。
- ヒーローアセットには手作業でコーミングします:Curves Sculpt モードのブラシ(
Comb、Add、Puff、Pinch、Grow/Shrink、Smooth、Slide、Density、Delete、Pull Tips)を使います。プロシージャルな垂れ下がりは、説得力のあるベースにはなりますが、ヘアスタイルにはなりません。 - 最終的なライトの下でルックデブを行います。ヘアの見た目を決めるのは主にスペキュラーと奥行きです(束がハイライトを捉えます)。アルベドではありません。
groom.py
- 5.2 の Add Empty Hair(
object.curves_empty_hair_add)を実行します。サーフェスを親に設定し、surface/surface_uv_mapを設定して、サーフェスにCapture Rest Geometryを追加し、ノードHair Dynamicsモディファイアを追加します(最後に固定、実験的機能)。その後、同梱アセットを次の順で積み重ねます:Generate(--densityガイド/m²)→ Interpolate(--children/m²、--viewportビューポート内の割合)→ Clump → Curl → Displace + Shrinkwrap(--droop× 長さ分だけ下げ、サーフェスから 2 mm 上に維持)→ Noise → Set Hair Curve Profile(--radius、毛先のテーパー)。 - **Clump/Curl のガイド間距離 =
--lengthの 10% です。**アセットのデフォルト値である 0.1 m では、頭全体が数個の房に潰れてしまいます。 - 各アセットはライブ入力を持つモディファイアとして残るため、そこで調整できます。名前による入力指定:
getattr(md.properties.inputs, identifier).value。頂点グループマスクには.type = "ATTRIBUTE"、.attribute_nameを使います。 - カーブ数、平均長さ、サーフェスからの最大ルート間隔(約 0 である必要があります)、モディファイアスタックを報告します。バックグラウンドモードで評価される数には、ビューポートの量を使います。
数値
| 値 | |
|---|---|
| 人間の頭皮 | 約 100–150k 本のヘア、約 200/cm²。CG:レンダリングする毛束 30k–150k 本、ガイド 300–3000 本 |
| 毛束の半径 | 実際は 0.03–0.05 mm。0.05 mm(--radius 0.00005)を使い、毛束の本数が少ない場合は太くします |
| メラニン(Principled Hair、Chiang) | 黒 1.0 · ダークブラウン 0.8 · ブラウン 0.65 · ライトブラウン 0.45 · ブロンド 0.25 · プラチナ 0.1。赤毛:0.5 + 赤み 0.9。白髪:0 + 色味 |
| 粗さ | 0.25–0.35(光沢あり)… 0.5(乾燥)。半径方向の粗さ 0.3 |
| ファー | 長さ 1–5 cm、密度 200k–2M/m²、束化は弱め |
HUANG(4.0 以降)は楕円形の断面をモデル化するため、クローズアップに適しています。CHIANG がリファレンスのデフォルトです。 |
ゲーム用ヘアカード(--cards HAIR)
- 評価済みグルームから、よく分散した
--card-count本の毛束を選びます(最遠点サンプリング)。それぞれに沿ってリボンを作成します:--card-widthm、毛先に向けて幅を 30% まで絞り、サーフェス上に平らに配置します(側面 = 接線 × サーフェス法線)。UV の v は根元 0 → 毛先 1 で、カードごとにアトラスの列を1つ使います(--atlas-columns)。 - 平坦な毛束から Cycles でアトラスをレンダリングします:
T_<name>_BC(根元を暗くし、アルファにカバレッジを格納、Standard ビュー)、およびT_<name>_RootTipとT_<name>_ID(Raw、リニアデータ)。カードのマテリアルでは Dithered アルファを使い、バックフェースカリングは無効にします。 - プロは頭皮から外側へカードを重ねます:頭皮を隠すための、密度が高く幅広で不透明なカード、中間レイヤー、そして最上部の細い浮き毛カードです。予算の目安:ヒーローアセットは 20k–60k トライアングル、NPC は 5k–15k です。カードは平面のままにせず、S 字または C 字に曲げ、あらゆる角度から確認します。エンジンではアルファテスト/ディザリング + 深度プリパスを使用し、暗色化/AO には root-tip、毛束ごとの変化には ID を使います。異方性スペキュラー用に、V に沿ったタンジェント(フロー)マップを追加します。
グルームのエクスポート
UE Groom/Houdini 用のストランドヘア:Alembic(wm.alembic_export)または USD(wm.usd_export(export_curves=True))。どちらも評価済みのカーブを書き出します(実測:246/246 カーブが往復処理されました)。ターゲットがガイドのみを必要とする場合は、最初にモディファイアースタックをベイクしてください。
注意点
- サーフェスに UV がないと、
Generateのアタッチ先がありません。グルーミングの前に UV を追加してください。 - グルーミング後にサーフェスのトポロジーを変更すると、アタッチメントが壊れます。最後にグルーミングするか、再実行してください。
- スケール:頭部のスケールを適用してください。長さと密度の単位はワールドメートルです。
- ビューポート:頭部全体では
--viewportを 0.2 以下にしてください。最終的なストランド数はレンダーでのみ表示されます。 - Hair Dynamics は再生中にシミュレーションを行います。フレーム 1 の静止画では、そのまま通過します。アニメーションをレンダーする前にベイクしてください(
blender-simulation)。
コメント
Markdown 対応