blender-facial-shapekeys について
Blenderで顔のリグやシェイプキーを作成するアーティスト向けのスキルです。ARKitやビゼーム、補正シェイプ、各種形式へのエクスポートを扱います。
主な機能
- 01ARKit 52とOculusビゼームの作成
- 02シェイプキーの分割とミラー
- 03未完成キーのレポート
- 04任意のコントローラープロパティとドライバー
- 05補正シェイプと組み合わせシェイプ
- 06エンジン別のエクスポート案内
活用シーン
- 01ゲームやVTuber用の表情作成
- 02モーションキャプチャ用ブレンドシェイプの作成
- 03Blenderでの映画向けフェイシャルリグ構築
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ el4cteo/ blender-skills --skill blender-facial-shapekeysインストール後、Claude Code で/blender-facial-shapekeysを入力して読み込まれたか確認します。
同梱ファイルscripts/_bpyx.pyscripts/shapekeys.py
詳細
フェイシャルリグとシェイプキー
実行モデルについては blender-core をご覧ください。ボディリグについては blender-character-rigging をご覧ください。
アプローチを選ぶ
| アプローチ | 用途 | 備考 |
|---|---|---|
| ブレンドシェイプ(ARKit 52) | ゲーム、VTuber、モーションキャプチャ(iPhone/Live Link Face)、Web/VRM | 業界標準の交換用セットです。各シェイプをスカルプトします |
| ボーン(顎、目、まぶた、眉、唇) | スタイライズされた表現、低メモリ、モバイル | 顎と目をボーンで表現するのは、ほぼ常に適切です |
| ハイブリッド | ほとんどの商用ゲーム用の頭部 | 顎/目/舌はボーンで、それ以外の柔らかい部分にはブレンドシェイプを使います |
Rigify face(human メタリグ) | Blender 内での映画品質のキーフレームアニメーション | 顔のボーンが100本以上あり、ゲームエンジンには負荷が大きいです |
手順(ブレンドシェイプ)
- 頭部メッシュの目と口の周りには、きれいなループが必要です(
blender-retopology-uv)。目、歯、舌は別オブジェクトにし、ボーンにペアレントするか、ウェイトを設定します。 scripts/shapekeys.py -- --mesh Head --create arkit(15種類のOculusビゼームの場合は--create visemes)を実行すると、適切な名前が付いた空のキーが作成されます。- 各キーをスカルプトします(ライブの場合は、アクティブなキーでスカルプトモードを使用し、
use_shape_key_edit_modeを設定します)。左右対称の表情は片側だけスカルプトし、その後--split eyeBlinkを実行すると、X=0をまたいで滑らかにブレンドされるeyeBlinkLeft/Rightが作成されます(--falloffm)。 --mirror browDownLeftを実行すると、browDownRightが作成されます(トポロジーに依存しないミラー)。--reportを実行すると、未スカルプトのキー、キーごとの最大オフセット、不足しているARKit名が一覧表示されます。すべてのキーが動き、余分なものが残っていない場合にのみ、シェイプは完成です。- オプション:
--drivers FaceCtrlを実行すると、各キーを駆動する0~1のカスタムプロパティを持つコントローラーが追加され、Blenderでキーフレームを設定できるようになります。 lookで極端な値と組み合わせ(jawOpen + mouthSmile、eyeBlink + eyeSquint)を確認します。2つのキーの積で駆動する補正用の組み合わせキーで修正します。
シェイプキーのルール
- シェイプは Basisからの差分 です。キーを作成した後にBasisのトポロジーを変更しないでください(頂点を追加または削除すると、すべてのキーが壊れます)。
- 1つのキーにつき動作は1つです。フェイスキーに頭部や首の動きを含めないでください(それらはボーンで動かします)。まぶたは眼球の表面に沿って滑らせ、眼球を突き抜けないようにします(まぶたと眼球のZファイティングは
blender-asset-qaで確認します)。 - 範囲は0~1です。誇張した表現には
slider_maxを大きくできますが、エンジンでは0~1にクランプされます。 - 相対キー(デフォルトの
use_relative=True)のみがエクスポートされます。 - 仕様に従って正確な名前を付けます(大文字と小文字を区別します)。
EyeBlink_LではなくeyeBlinkLeftを使います。エンジンは名前でマッピングします。 - サブディビジョンを適用したメッシュのキーは、レベル0でスカルプトし、サブディビジョンモディファイアーはシェイプキーの後に維持します(いずれにせよ、先に評価されます)。
- シェイプキーがあるメッシュにはモディファイアーを適用できません。変形モディファイアーには
modifier_apply_as_shapekeyを使うか、キーの作成前に適用します。
補正シェイプと組み合わせシェイプ
- ボーンポーズの補正:ポーズを付けた状態でスカルプトし、
TRANSFORMS変数(ROT_X、LOCAL_SPACE、0~1にマッピング)で駆動します。 - 組み合わせ:ドライバーの
SCRIPTED式a*bを使い、2つのキーの値(SINGLE_PROPkey_blocks["jawOpen"].value)から駆動するキーjawOpen_mouthSmileを作成します。単純な式ではPythonの自動実行は不要です。
エンジンに関する注意
- Unity:FBXブレンドシェイプを使います。Model importerで Blend Shape Normals を Calculate に設定します(または、スムージングがエクスポートされている場合は Import に設定します)。ARKit名はAR Foundationの顔トラッキングサンプルにマッピングされます。
- Unreal:モーフターゲット("Import Morph Targets")を使います。Live Link Face/MetaHuman AnimatorはARKit名を使用し、Pose Assetがカーブをマッピングします。リーフボーンは使いません。
- Roblox dynamic heads:Roblox固有の名前を使ったFACSベースのポーズを、ヘッドリグのアニメーションフレームとして作成します(Creator Hub「Dynamic heads」の仕様)。公式Blenderテンプレートから作成します。ARKitスカルプトは、名前を変更またはマッピングして再利用できます。頭部は4,000トライアングル以下にします。
- VRM/Web(three-vrm、ReadyPlayerMe風):ARKit 52とビゼームをglTFモーフターゲットとして使います(
export_morph=True)。シェーディングに必要な場合のみモーフノーマルのエクスポートを有効にします(サイズが2倍になります)。 - エクスポート前に未使用のキーを削除します。頂点ごとにキーの分だけメモリを消費します(glTFのスパースアクセサーが役立ちます)。
注意点
ob.shape_key_add(from_mix=False)は Basis をコピーします。from_mix=Trueは現在のミックスを焼き込みます(組み合わせには便利ですが、意図せず実行すると危険です)。shape_key_mirror(use_topology=False)には、X 軸に対称なメッシュが必要です。アクティブなキーに対して実行してください(スクリプトが処理します)。- シェイプキーのドライバー変数では、メッシュではなく Key ID(
ob.data.shape_keys)を使います。fc = kb.driver_add("value")。
コメント
Markdown 対応