凹みTips

C++、JavaScript、Unity、ガジェット等の Tips について雑多に書いています。

uLipSync で 2D キャラクタ向けにテクスチャや UV を変更できるコンポーネントを作った

はじめに

Unity でリアルタイム / 事前解析対応のリップシンクを行うためのプラグインである uLipSync ですが、これまでは付属スクリプトとしては BlendShape を操作するものしかありませんでした。テクスチャを使った立ち絵などをリップシンクさせたい場合は、自分で Custom Event の仕組みを使って作る必要がありました。

github.com

しかしながらこういったユースケースへの要望を時折見かけたので、テクスチャ更新向けのスクリプトを作成することにしました。

なお、uLipSync の基本的な使い方については以下のエントリをご参照ください。

tips.hecomi.com

コード

github.com

執筆時点では v2.4.0 が最新となります。Sprite の対応やタイルテクスチャを使った UV のためにアニメーション作成機能も追々作成していきます。

デモ

こんにちは、と喋っています。

使い方

08. Texture に含まれているシーンがサンプルになります。uLipSyncTexture というコンポーネントBody > Mouth にアタッチされています。

テクスチャを差し替えるパターン

タイルテクスチャで UV を変更するパターン

このようにテクスチャ差し替え及び UV 変更それぞれに対して、割り当てたいテクスチャを画像で確認しながらセットできます(ハイブリッドも出来ます)。

  • Update Method
    • 更新を呼ぶタイミングです。Late UpdateUpdate、また LipSync の解析が終わったタイミング(Lip Sync Update Event) と言ったようないくつかのタイミングの中から選ぶことが出来ます。アニメーションと併用しないのであれば基本的には Update で問題ないと思います。
  • Renderer
    • 更新したい対象の Renderer を指定します。内部的にはマテリアルが実行時に複製され、メインテクスチャが更新されます。
  • Parameters
    • Min Volume
      • 更新する最低のボリューム値(Log10)です。
    • Min Duration
      • この時間は少なくとも同じ口の形をキープします
  • Textures
    • ここで割り当てたいテクスチャの選択をします
    • Phoneme -Profile に対応する音素(e.g. 「A」「I」)を記入します。
      • 空文字列("")の場合は音声入力がないときの設定として扱われます。
    • Texture
      • 変更したいテクスチャを指定します
      • 無指定の場合はマテリアルにセットされている初期テクスチャが利用されます
    • UV Scale
      • UV のスケールです。タイルテクスチャの場合は指定してください。
    • UV Offset
      • UV のオフセットです。タイルテクスチャの場合は指定してください。

おわりに

その他、Animator 更新機能のプルリクも頂いたので、引き続き機能を拡充していきたいと思います。