BlenderとUnityで作ったものをVR(Meta Quest/Oculus Link)で動かします

ブログの女の子を作る #101 TimelineとCinemachineでLiella!の「始まりは君の空」を「踊ってみた」イベントシーンを作る【Unity】

2022.05.03(投稿日:2022.04.27)

3 comments

 
前回はVery Animationでモーションを作って踊ってみました。
 
今回は、Unityの TimelineCinemachine を使って、ブログの女の子がLiella!の「始まりは君の空」を「踊ってみた」という感じのイベントシーンを作ってみました。女の子の音声は VOICEPEAK で作成し、リップシンクを凹様の uLipSync で対応してみました!



開発環境

・Blender 3.0.0
・Unity 2021.3.0f1
・CPU:AMD Ryzen 7 3700X
・グラボ:ASUS ROG-STRIX-RTX2060S-O8G-GAMING
 

(1) Timelineにトラックを設定する

タイムラインを使うと、モーションや音声、オブジェクトの表示・非表示など様々なイベントをまとめて管理することができます。
 
今回作成した Timeline です。
画面下部の赤枠が Timelineの設定エリア、横に長い棒が Track です。
 
今回は、以下のトラックを使いました。
・Activation Track(オブジェクトの表示・非表示)
・Animation Track(モーションを実行)
・Audio Track(音声を再生)
・Signal Track(任意の位置でプログラム実行)
・Cinemachine Track(複数台のカメラを管理)
・uLipSync.Timeline(リップシンク)
 
使いたいトラックを設定エリアに追加していく感じですね。
 

Activation Track

Scene内に配置したオブジェクトを表示・非表示できます。
 
これを使って、女の子が持ってるスマホを途中から消したり、逆にソファー上で非表示にしておいたスマホを表示したりしてます。
 
単純に表示・非表示だけならプログラムでもできますが、「ある時間に表示して、ある時間に非表示にする」処理はコルーチンなどを使う必要があり、やや面倒です。Timelineのトラックを使うと、トラックの長さを変えるだけで直感的にタイミングを指定できます。便利!
 
[作業時のメモ]
・このトラックで「コンポーネントのオン/オフ」が制御できればもっと便利なのですが。。。
 

Animation Track

ソファーに座る、スマホ操作する、歩く、音楽に合わせて踊るなどのモーションを設定します。
 
踊るモーションは、前回の記事で作成しました。
 
Very Animation というアセットを使って、モーション作成してます。
 
[作業時のメモ]
・ソファーで足を動かすモーションは、3フレームくらいのモーションを作ってループしてます。
・ソファーから立ち上がる挙動が不自然だったので、立ち上がる途中のモーションを作り、「座る」と「立つ」モーションの間に挟んでます。
・モーションのトラックとは別に、キャラクターの位置や回転を制御するため、Overrideのトラックを使用しました。
・Keyを打った後の修正が面倒。というか、基本は「削除して再度登録」なんでしょうか?
 

Audio Track

女の子の声や曲の一部など、音声を再生します。
 
最初は曲なしで動画を作っていたのですが、やはり音があるのと無いのではまったく違いました。今回は、踊ってみた動画という形で、曲の20秒間をお借りさせていただきました。
 
ラブライブ!スーパースター!!の「Liella!」のデビューシングル、「始まりは君の空」です。
とても良い曲ですのでぜひ!
 
[作業時のメモ]
・無音の音声ファイルを作成して、曲の最後につなげるとフェードアウトになります。
 

Signal Track

任意の位置でプログラムを実行できます。
 
今回はこれを使って、キャラクターのオブジェクトに設定した uLipSync と FinalIK コンポーネントをオン/オフしてます。
using UnityEngine;
using uLipSync;
using RootMotion.FinalIK;

public class Chara_Operate : MonoBehaviour
{
    void Start()
    {
        // 開始時にコンポーネントオン
        GetComponent<LookAtIK>().enabled = true;
    }
    public void On_uLip()
    {
        GetComponent<uLipSyncBlendShape>().enabled = true;
    }
    public void Off_uLip()
    {
        GetComponent<uLipSyncBlendShape>().enabled = false;
    }
    public void On_Look()
    {
        GetComponent<LookAtIK>().enabled = true;
    }
    public void Off_Look()
    {
        GetComponent<LookAtIK>().enabled = false;
    }
}
 
[作業時のメモ]
・今回のコーディングはここだけ。ほぼノーコーディングで動画が作れるのは素晴らしい。
 


(2) カメラと会話、視線制御を設定する

今回の動画ではキャラクターが踊るだけでなく、会話パートも作成してみました。
踊る前後に女の子がしゃべります。
 

Cinemachine

複数のカメラの挙動を自由に設定できます。
 
今回は5台のカメラを使って、「瞬時に切り替える・少しずつカメラが動く」などの動きを制御してます。
「歯車+赤いカメラのアイコン」が Cinemacine の Virtual Camera ですね。
 
[作業時のメモ]
・いつも使っているVR用の OVRCameraRig とは別に設定します。お手軽ですね。
・Sceneビューで見えている内容(位置や角度)を Cinemachine のカメラでも使いたい場合、 CTRL + Shift + Fキーを押す。
・逆に、Cinemachine のカメラで見えてる内容を Sceneビューで同じにしたい場合、「メニュー -> GameObject -> Align View to Selected」を実行する。
 

VOICEPEAK

テキストを入力するだけで、とても自然な声を作ってくれるアプリです。
 
製品版では、アクセントとイントネーション、長さが調整できるのが良いですね。特にイントネーションを調整することでかなり良い感じになります。
 
[VOICEPEAKによる会話内容]
「7月から、ラブライブスーパースターの2期が始まるんだって。」
「いま、リエラの「始まりは君の空」の動画見て、ダンスの練習してるんだ。」
「ちょっとだけなら踊れるよ。見てみる?」
「どうだった?」
「ちゃんと踊れてたかなあ?」
 
[作業時のメモ]
・速さやピッチ、感情(幸せ、楽しみ、怒り、悲しみ)を調整することで、いろんな声色になります。
・製品版には7種類の音声が入ってます。今後、いろんな声が増えることを期待してます!
 

uLipSync

凹様(@hecomi)が作成された、Unityでリップシンクを行うコンポーネントです。
 
VOICEPEAKで作成した音声ファイルをリップシンク用のデータに変換し、それを uLipSync.Timeline に設定しました。これだけで、リアルな口パクでキャラクターが話してくれます。素晴らしい!!!
 
以下の記事を参考にさせていただきました。
 
[作業時のメモ]
・踊ってるモーションでは口パク部分もモーションとして作成してたので、モーション実行中は uLipSync をオフにしてます。
 

Final IK

今回は、視線制御の Look At IK のみ使いました。
 
[作業時のメモ]
・困ったこと1。「なぜか視線がずれて、カメラの方を向いてくれない現象」が起きて数日悩んでました。原因は「いつの間にかTポーズで無くなっていた」でした。実際には、ソファーに座って少し横を見るモーションがデフォルト状態になってました。Timelineのプレビュー機能か Very Animation でモーション作ってる際に、たまたまそうなったようです。Overrides機能で Transform値を元に戻す(Revert)で解決。
・困ったこと2。また視線がずれるようになった。原因は、UnityのPlay実行した時点で「Look At IK がオフ(enabled = false)」の場合に発生するようでした。Timelineの設定で、視線制御は最初はオフ、途中からオンにしてるのですが、オフ状態で再度Play実行したのが問題だったようです。「Play時に Look At IK をオンにするスクリプト」を実行して解決。
 

(3) 動画です

今回作成した動画です。
 
 

オリジナルのフルサイズ版がスゴイ!

4/7に「始まりは君の空」のフルサイズ版が公開されました!
参考にさせていただいた振り付けは、4:15~26あたりです。
やはり本物はスゴイですね。
 


まとめ 

Timeline と Cinemachine を使って、ブログの女の子がLiella!の「始まりは君の空」を踊ってみた、という動画を作ってみました。
 
VOICEPEAK + uLipSync の組み合わせも強いですね。
ゲームのイベントシーンが作れそうです。
 
スポンサーリンク

コメント

  • トラックバックは利用できません。

  • コメント (3)

    • *⋆ஐ maiko ஐ⋆*
    • 2023年 5月 21日

    初めまして!
    視線制御についてご質問です。
    現在mmdの様なライブ映像を作成しておりまして、カメラ目線のオンオフをTimeline上で実行したいと思っております。
    final IKを使用したいのですがだーしゅ様と全く同じ所でつまずいてしまい…
    詳しい方法を教えて頂くことは可能でしょうか…?
    よろしくお願いします(,,ᴗ ᴗ,,)ペコリ

      • だーしゅ
      • 2023年 5月 27日

      コメントありがとうございます。
      「困ったこと1」が原因ならキャラクターのデフォルトポーズ(私のキャラクターの場合、T-POSE)を元に戻す。
      「困ったこと2」であれば「Play時に Look At IK をオンにするスクリプト」実行で対応してます。

      using UnityEngine;
      using RootMotion.FinalIK;

      public class Chara_Operate : MonoBehaviour
      {
      void Start()
      {
      GetComponent().enabled = true;
      }
      }

      このようなスクリプトを作成し、キャラクターに「Add Component」しておくと、Play時にフラグが強制的にオンになります。

        • *⋆ஐ maiko ஐ⋆*
        • 2023年 6月 01日

        お返事ありがとうございます!
        困ったことは2つともでしたので非常に参考になりました。スクリプトありがたいです…!
        視線制御の情報が検索しても出てこなくて困り果てていましたので本当に助かりました(*ᴗˬᴗ)

ブログの女の子を作る #100 Very Animationでモーションを作って踊ってみた!Liella!の「始まりは君の空」のMVを参考にしました【Blender,Unity】

ブログの女の子を作る #102 ビジュアルスクリプティングで「オブジェクトを触るとTimeline実行」を作る【Unity】


最近のコメント

だーしゅ
IT関係のお仕事してます。
3Dモデルの女の子は「ブログノ・スージー」。VRは楽しいですね。

[当ブログについて]