Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/chigirits/BlendShapeCombiner

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

avatar unity unityeditor vrchat

Last synced: 3 months ago
JSON representation

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

Awesome Lists containing this project

README

        

# BlendShapeCombiner

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

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

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

![image](https://repository-images.githubusercontent.com/285993854/facec380-fc27-11ea-9588-d9cd6b608ba7)

## 動作環境

Unity 2019.4 以降

## インポート手順

### unitypackageをインポートする方法

[Releasesページ](https://github.com/chigirits/BlendShapeCombiner/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](https://github.com/chigirits/BlendShapeCombiner/assets/61717977/aad1394a-a1da-41fd-a76a-b5c5c6c548bf)
4. `New Keys` リストタブから一つの行(ここでは `new_key`)を選択すると、選択中の新規シェイプキーの詳細設定が下部(Detail of selected New Key)に表示されます。`Name` テキストフィールド(デフォルト値 `new_key` が入力されている箇所)を、これから作成したい新規シェイプキーの名前に変更してください。次に、その下の各プルダウンから合成元のシェイプキーを選択してください。

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

![usage-02](https://github.com/chigirits/BlendShapeCombiner/assets/61717977/69ebd372-0373-49ad-aa61-4581eefcf533)
5. `Process And Save As...` ボタンを押して、生成された新しいメッシュを保存してください。

![usage-03](https://github.com/chigirits/BlendShapeCombiner/assets/61717977/ee8b5c66-e57f-476b-8543-5c4aea387f42)

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

![usage-04](https://github.com/chigirits/BlendShapeCombiner/assets/61717977/b1c78320-b1ef-4987-8e04-fd154015b9ff)

## 全体オプション詳細

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

### Use Text Field

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

### Use Percentage

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

### Clear Existing Keys

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

### Overwrite Existing Keys

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

### Clear Normal/Tangent

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

### Don't Clear Regex

`Clear Existing Keys` で既存シェイプキーを削除するとき、ここに指定した正規表現に合致する名前のシェイプキーは削除せずに残します。

### GroupBy Regex

合成元シェイプキーをグループ分けし、新しく生成されるシェイプキーも同じ数だけグループ分けして出力します。キャプチャ名付きの正規表現を指定することで、マッチしたキャプチャ名をグループ名とするようにグループ分けされます(マッチしなかった場合はデフォルトと同じ名前になります)。
たとえば新規シェイプキー `Smile` が定義されているとき、この項目に `(?^mouth)` と指定して新しいメッシュを生成すると、`mouth` で始まるシェイプキーのみを合成した `Smile__Mouth` と、それ以外のシェイプキーのみを合成した `Smile` の2つの新規シェイプキーが生成されます。

## 新規シェイプキーのオプション詳細

### For Animation

`Create Animation Clips` ボタン押下時にアニメーションクリップの出力対象とするかどうかを設定します。

## 合成元シェイプキーのオプション詳細

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

### 合成元シェイプキー

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

### LRプルダウン

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

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

### スケール係数

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

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

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

## ボタン機能

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

### Capture/Extract ボタン

`Capture` ボタンを押すと、`Target` のメッシュに現在設定されているすべてのブレンドシェイプ値を合成する新規シェイプキーが追加されます(`Capture(Overwrite)` も同様ですが、選択中の新規シェイプキーに上書きします)。

逆に `Extract` ボタンを押すと、現在選択中の新規シェイプキーに設定されているすべての合成元ブレンドシェイプ値を、`Target` のメッシュに個別に反映します。このとき、LRプルダウンの内容は反映されないことにご注意ください。

### Sort Sources ボタン

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

### Round Scale ボタン

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

### Merge Down ボタン

選択中の新規シェイプキーに含まれる合成元シェイプキーのリストを、すぐ下にある新規シェイプキーの同リストに合成します。選択中だった新規シェイプキーは削除されます。

### Create VRC Shape Keys ボタン

`Source Mesh` に定義されている `vrc.` で始まる名前の全シェイプキーを、新規シェイプキーとして再定義します。たとえば、`vrc.v_aa` のみを合成元とする同名の新規シェイプキーが追加されますので、スケール係数を変更することにより「あ」列発声時のリップシンクによる口の開き具合を調整することができます。この機能は、`Clear Existing Keys` または `Overwrite Existing Keys` と併用する必要があります。

### Create Animation Clips

新規シェイプキーのそれぞれを表情アニメーションとして使用するためのアニメーションクリップを自動生成します。ボタン押下後に表示されるダイアログで、保存先のフォルダを指定してください。出力されるファイル名は、それぞれの新規シェイプキーと同一です。`For Animation` がONの新規シェイプキーのみが出力対象となります。

## ライセンス

[MIT License](./LICENSE)

©2020 TSUTSUMI Chigiri

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

## 更新履歴

- v1.5.0
- UIの改善
- リスト下の+ボタン押下時に、末尾ではなく選択中の位置の次に新規レコードを追加
- 長すぎるリストのスクロール表示
- Expert機能のFoldout
- 新機能オプションの追加
- Bake Into Base
- For Animation
- Don't Clear Regex
- GroupBy Regex
- 新機能ボタンの追加
- Capture(Overwrite)
- Merge Down
- Create VRC Shape Keys
- Create Animation Clips
- 他
- LRプルダウンが正しく機能しない問題を修正
- 一部機能がUndoできない問題を修正
- 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
- 初回リリース