/BlendShapeCombiner

複数のブレンドシェイプを合成した新しいシェイプキーを追加し、新しいメッシュとして保存するUnityエディタ拡張です。Boothでも配布中👇

Primary LanguageC#MIT LicenseMIT

BlendShapeCombiner

複数のブレンドシェイプを合成した新しいシェイプキーを追加し、新しいメッシュとして保存するUnityエディタ拡張です。

係数を指定できるため、たとえば「瞳を小さくする」シェイプキーから「瞳を大きくする」シェイプキーを作ったり、0~100の範囲外に設定したウェイトを正規化することも可能です。

開発経緯としては、VRChat Avatars 3.0 のまばたき用シェイプキーが1つしか指定できない問題への対策が発端ですが、他の用途にも汎用的に用いることができます。

image

動作環境

Unity 2019.4 以降

インポート手順

unitypackageをインポートする方法

Releasesページ より最新版の BlendShapeCombiner-vX.X.X.unitypackage をダウンロードし、Unityにインポートする

パッケージマネージャを用いる方法

  1. インポート先プロジェクトの Packages/manifest.json をテキストエディタ等で開く

  2. dependencies オブジェクト内に以下の要素を追加

    "com.github.chigirits.blendshapecombiner": "https://github.com/chigirits/BlendShapeCombiner.git",
    

使い方

  1. シーンにモデルを配置してください。

  2. 「メニュー/Chigiri/Create BlendShapeCombiner」を選択すると、ヒエラルキーのトップレベルに BlendShapeCombiner が配置されます。

  3. BlendShapeCombiner の Target に、操作対象となる SkinnedMeshRenderer(アバターの表情に適用する場合、一般的には Body オブジェクト)を指定してください。
    このとき、対象にアタッチされているメッシュが Source Mesh に自動的にセットされ、new_key という新規シェイプキーが追加されます。

    usage-01

  4. New Keys リストタブから一つの行(ここでは new_key)を選択すると、選択中の新規シェイプキーの詳細設定が下部(Detail of selected New Key)に表示されます。Name テキストフィールド(デフォルト値 new_key が入力されている箇所)を、これから作成したい新規シェイプキーの名前に変更してください。次に、その下の各プルダウンから合成元のシェイプキーを選択してください。

    • スケール係数(右端にあるテキストボックスの数値)を 1 以外にすることで、効果のかかり具合を調整することができます(後述のスケール係数を参照)。
    • 合成元となるシェイプキーの数を増減するには、Source Keys リストタブの右下にある + - を押してください(削除する際は事前に対象行を選択してください)。
    • 作成する新規シェイプキー自体を増減するには、New Keys リストタブの右下にある + - を押してください(削除する際は事前に対象行を選択してください)。

    usage-02

  5. Process And Save As... ボタンを押して、生成された新しいメッシュを保存してください。

    usage-03

    保存が完了すると、Target の SkinnedMeshRenderer に新しいメッシュがアタッチされます。 この差し替えられたメッシュに追加されている新しいシェイプキーの値を変更してみて、期待どおりの効果がかかることを確認してください。

    usage-04

全体オプション詳細

以下では、インスペクタ上部に一行ずつ並んでいるチェックボックスのオプションについて説明します。

Use Text Field

合成元となるシェイプキーを選択するインタフェースを、プルダウンではなくテキスト入力式にします。 コピー&ペースト等を活用したい場合や、プルダウンが長すぎて不便なときはONにしてみてください。

Use Percentage

スケール係数を百分率で表示・指定します。Skinned Mesh Renderer のブレンドシェイプ値と同様に扱いたい場合はONにしてください(Capture / Extract ボタンを用いる場合に便利です)。

Clear Existing Keys

既存のシェイプキーをすべて削除し、定義されている新規シェイプキーだけを持つメッシュを生成します。

Overwrite Existing Keys

既存のシェイプキーと同名の新規シェイプキーを定義しているとき、既存のものを削除して上書きしたメッシュを生成します。

Clear Normal/Tangent

新規シェイプキーの持つ法線・タンジェントの変化量を強制的に 0 にします。

個別オプション詳細

以下では、Detail of selected New Key 内 Source Keys リストタブの各行の右に並んでいるプルダウンやテキスト入力欄のオプションについて説明します。

合成元シェイプキー

合成元となるシェイプキーを選択します。Use Text Field がONのときは、シェイプキーの名称をテキストで入力できます。

LRプルダウン

LR と表示されているプルダウンから LR を選択すると、合成元シェイプキーが効果を及ぼす対象範囲を左右いずれかのみに限定することができます。

たとえば、両目を閉じるシェイプキーを元として、片目だけを閉じるシェイプキーを作成することができます。

スケール係数

一番右側にあるテキスト入力欄の数値で、合成元のシェイプキーのかかり具合を調節します。1 以外を指定することで、かかり具合を微量または極端にできます(Use Percentage がONのときの通常値は 100)。

マイナスの値を指定することで、かかり具合を逆方向にすることができます。たとえば、瞳を小さくするシェイプキーのスケール係数に -1Use Percentage がONのときは -100)を指定することで、瞳を大きくするシェイプキーを作成することができます。

他にも、たとえば「A:目を閉じる」と「B:目を閉じて口を開く」しかシェイプキーがないモデルに対して、Aの -1 スケール化シェイプキーをBに重ねがけすることで、口だけを開いた表情を作ることができるようになります。

ボタン機能

以下では、インスペクタ下部に並んでいるボタンの機能について説明します。

Capture/Extract ボタン

Capture ボタンを押すと、Target のメッシュに現在設定されているすべてのブレンドシェイプ値を合成する新規シェイプキーが追加されます。

逆に Extract ボタンを押すと、現在選択中の新規シェイプキーに設定されているすべての合成元ブレンドシェイプ値を、Target のメッシュに個別に反映します。

Sort Sources ボタン

選択中の新規シェイプキーについて、合成元シェイプキーを名前順に並べ替えます。

Round Scale ボタン

選択中の新しいシェイプキーのスケール係数を、各ボタンに例示された精度になるよう四捨五入します。

ライセンス

MIT License
©2020 TSUTSUMI Chigiri

  • このソフトウェアは商用・非商用問わず無償で利用できますが、無保証です。利用に際して発生する問題については、作者は一切の責任を負いません。
  • コードを再利用する際は、著作権表示と上記リンク先のライセンス条文を同梱する必要があります。詳しくは条文(英語)をお読みください。

更新履歴

  • v1.4.1
    • UIの改善
      • 指定メッシュにシェイプキーが多いとUIが重くなる問題を修正
    • 新機能オプションの追加
      • Use Percentage
    • 新機能ボタンの追加
      • Round Scale
      • (仕様変更) Sort Sources ボタンの効果を選択中の新規シェイプキーのみに限定
  • v1.3.0
    • 新機能オプションの追加
      • Use Text Field
      • Clear/Overwrite Existing Keys
      • Clear Normal/Tangent
      • LRプルダウン
    • 新機能ボタンの追加
      • Capture/Extract
      • Sort Sources
  • v1.2.1
    • VCC対応
  • v1.2.0
    • UIの改善
      • カスタムUI実装
      • Source Mesh を Target とは独立して保持し、リトライ時の手間を軽減
      • 保存ダイアログの初期ディレクトリを Source Mesh と同一に
      • Revert Target ボタンを追加
      • ツールチップ表示
  • v1.1.0
    • スケール係数プロパティを追加
    • 複数シェイプキーの一括追加に対応
  • v1.0.0
    • 初回リリース