HairDeck: 1枚のキャラクター画像からヘアカードとスプリングボーンを生成
HairDeckは1枚の画像からスタイライズドヘアカードをセットとして生成し、それらをアニメートするスプリングボーンのチェーンを追加して、GLBまたはVRMアバターとしてエクスポートします。
髪は、image-to-3Dパイプラインが最も頻繁に失敗する3Dキャラクターの部位です。ストランド再構成はレンダリング負荷の高いリアルなグルームを生成し、メッシュ再構成はアーティストが櫛で整えることも、スタイルを変えることも、アニメートすることもできない1つの融合した塊を生成します。カードヘアスタイルはスタイライズド制作で実際に出荷されるものであり、1本のリボンずつ手作業で作られます。
HairDeckはヘアスタイルを、アーティストにとっての本来の姿、つまり順序のないプリミティブの集合として扱います。各ヘアカードは1つのトークンであり、セット拡散Transformerがすべてのカードをまとめてデノイズするため、モデルは髪がどの順序で来るかを決める必要がありません。結果は、カードごとのUVを持つ個別のカードと、それらを動かすスプリングボーンのチェーンを保持します。
パイプライン: ヘアカードトークン、画像またはポイントクラウドで条件付けられたセット拡散、そしてスプリングボーンのチェーンを備えた生成済みカード。
カードを集合として扱う
スタイライズドヘアカードの唯一の先行生成器であるCHARMは、ヘアスタイルを制御点の1つの長いシーケンスとして自己回帰的にデコードします。そのためシーケンスの順序が重要になり、シーケンスの早い段階での誤りが髪の残りの部分へ伝播します。
HairDeckはこれを逆転させます。カードVAEが各カードをトークンにエンコードし、セットTransformerがそれらすべてを一度に参照し、カードVAEが各トークンを独自のUV座標を持つジオメトリへデコードします。カードはデフォルトでは画像で条件付けられ、4番目に公開されたモデルを通じてポイントクラウドでも条件付けられます。
スプリングボーンは髪と一緒に生成される
ジオメトリだけではアセットになりません。ゲームエンジンやVRMアバターのカードヘアスタイルが生き生きと見えるのは、スプリングボーンが少しの物理演算で各カードを引っ張るからであり、そうしたチェーンは通常、メッシュの完成後に手作業で構築されウェイトペイントされます。
チェーン拡散モデルがカードトークンで条件付けられてそれらを直接生成するため、エクスポートにはジオメトリだけでなくスキニングも含まれます。1枚の画像を入力すると、出力されるのは揺れるヘアスタイルです。
プロジェクトのデモの1フレーム: 提供されたアバターの体に適用された生成済みカード。
プロジェクトのデモ動画: 1枚の入力画像、4つの生成バリエーション、そしてVRMの首振りプレビュー。
提供されるもの
| モデル | 役割 | チェックポイント |
|---|---|---|
| Image DiT | 画像で条件付けられたカードトークンを生成 | ckpt/image_model/model.safetensors |
| Card VAE | カードトークンの潜在をカードジオメトリにデコード | ckpt/card_vae/model.safetensors |
| Chain DiT | カードトークンで条件付けられたスプリングボーンのチェーンを生成 | ckpt/chain_model/model.safetensors |
| Point-cloud DiT | ポイントクラウドで条件付けられたカードトークンを生成 | ckpt/pointcloud_model/model.safetensors |
画像パスではImage DiT、Card VAE、Chain DiTを実行します。ポイントクラウドモデルは、ポイントクラウドの生成と評価のパスで使用されます。リポジトリには、正規化統計、標準ヘッドフレーム、VRMエクスポート用のVRoid Studioテンプレートアバター、およびオリジナルのカードジオメトリ付きの100件のテストケースも含まれているため、トレーニングセットなしで評価を再現できます。
推論にはLinux x86-64、Python 3.12、NVIDIA CUDA GPU 1基が必要で、PyTorch 2.8とCUDA 12.8でテストされています。前処理スタックはモデル本体よりも重く、SAM 3とDINOv3 ViT-L/16はライセンスへの同意が必要なゲート付きダウンロードであり、切り抜きはBiRefNet-mattingが処理し、VRMエクスポートはVRMアドオンを備えたBlender 4.2 LTSを操作します(セットアップスクリプトが単独で取得できます)。VRMパスは依然としてPythonとBlenderのパイプラインであり、ComfyUIのカスタムノードではありません。
1つのコマンドで1~4個のバリエーションを生成でき、カードだけが必要な場合は--no-chainsでスプリングボーンモデルを省略できます:
python scripts/image_to_hair.py character.png --out results/my_character --n 4
python -m hairdeck.vrm.export results/my_character/character 0論文の数値
CHARM自身のテストセットにおいて、HairDeckはチャンファー距離を44%削減し、カードの向きの誤差を半分以下にしつつ、33倍高速に動作すると報告しています。単一画像からの場合、著者らはCHARM、image-to-3Dパイプライン、ストランドベース手法を上回ると報告しており、これはレンダリング済みではなく生成済みのキャラクターを入力する人にとって重要な比較です。
入手方法
- Hugging Faceのhyz317/HairDeck: 4つのチェックポイント、サポートデータ、100件のテストケース、Apache-2.0
- GitHubのhyz317/HairDeck: 推論、ローカルデモ、評価、トレーニングのコード、現在唯一サポートされている手段
- ブラウザから髪を生成してVRMをエクスポートするホスト型のSpaceデモ
- ファーストパーティのComfyUI統合はありません。非常に新しいコミュニティパックFengLairh/ComfyUI-HairDeckは、同じチェックポイントを3つのノード(ロード、生成、保存)にラップし、ComfyUI自身のPythonプロセス内で実行して、VRMエクスポート用のポータブルBlenderを準備します。2026年11月1日に登場したもので、ここでは検証されていません
コメント
GitHubでサインインしてディスカッションに参加しましょう。