配布するアニメーション・シーンは個人的な使用に留めるようにしてください。
第三者への再配布やモーションを利用したと思われる動画が外部に公開されていることが確認された場合怒ります。
許可行為
個人的にUnity上で使用すること
個人的な利用に限りVRSNS等にアップロードすること
※アバター・ワールド・外部読み込みに関わらず第三者が観覧・使用可能な状態にしないことを厳守してください。
※各モデル・VRSNS等の利用規約は厳守するようにしてください。
禁止行為
配布するファイル・内部データの第三者への再配布、ソフトウェアへの組み込み
本モーションを用いた映像を第三者が観覧出来る場に公開すること
というか許可行為に書いていないこと
大前提として配布されるものは
・アニメーションクリップ(モーション・表情等)
・TimelineのPlayable Director
・シーン配置用Prefab
┗アバターや各アセットのPrefab(持ってないとmissingになるやつ)
となります。アバター、音声、ワールド、揺れ物やメッシュ移動などのアセットは入っていません。
最低限アバターを持っていたら無料のアセットを入れるだけでほぼ同じモーション・映像が再現出来る状況にしておりますが、いくつか注意点があります。
触手・ポータルなど特殊なアセットで作成されているものはそのアセットが無ければその部分が再現できません。基本的な再現に別途有料アセットが必要な場合、以下のようにタイトルに記載しておきます。
【モーション配布】新しい姉妹と仲良しえっち
【モーション配布】【要: Curvy Splines 8】プールと触手と・・
【モーション配布】【要: Fluid Seamless Portals - Full】不思議な穴
ちーずかつかれーぷらんに入る前に一つの指標にしてください。
制作したアニメーションは、PlayModeの際にFinalIKや色んなスクリプトで固定・微調整が行われています。そのため本来はそれらのアセットが無ければ動画と同じアニメーションになりません。
そのため配布するアニメーションはそれらの後処理が終わったあとのポーズを別のアニメーションクリップにベイクしたものにしています。
瞬き/リップシンクはスクリプトで制御していますが、表情のブレンドシェイプアニメーションに書き込んで以下の2種類で配布します。
※一部の動画はスクリプト制御じゃないのでそのまま配布します。
・リップシンクの無い瞬きと表情のみのアニメーション
・上記にリップシンクをベイクしているアニメーション
前者を使用すれば後述するuLipSyncなどを用いて好きな声を当てる事ができます。
後者を使用すれば動画とほぼ同じ表情になります。
ただし、細かい眼球運動はブレンドシェイプではなくボーンをスクリプト制御しており、HumanoidAnimationとして録画されなかったため、実現するには後述するEyes Animatorなどのアセットが必要となります。
サンプルとして 真冬ちゃん・桔梗ちゃん・マヌカちゃん を適当に動かすTimelineデータを配布しますので、「出来るか不安だな~」という方は良ければ以下を元に環境構築・再現が行えるかお試しください。
𝙐𝙣𝙞𝙩𝙮
バージョンは好きなものをお使いください。
ただし、Prefab Replace機能を使うことで簡単にアバターの切り替えを行えるため2022.2以降を使用することを推奨します。
Timeline
Cinemachine
Unity Registryからインポートしてください
シーンで使用されているアバター/ワールドモデル
→Humanoid Animationとして出力しているため別のアバターでも可能、ただし身長差がある場合後述する方法により手足の位置調整が必要
使用しているアバターは配布先に個別記載しています。
0.パッケージのインポート
上記必須アセット・モデル、配布unitypackageをインポートします。
他に揺れ物系アセットや表現アセット、改変等導入するものがあればインポートしてください。
FinalIK等のプラグインを制御するために書いたスクリプトは当該プラグインが無いとコンパイルエラーとなります。
そのためそれらのプラグインを導入しない場合、スクリプトを削除してください。
1.任意のシーンを開く
空のシーンや配置したいシーンを開いてください。
2.Prefabの配置
\Assets\Sequences\[適当な名前] 配下にPlayable Directorやアニメーションクリップ、Prefab等があります。
[適当な名前]_dist.prefab をHierarchyにD&Dします。
※触手系のプロジェクトではオブジェクトが無効化されていますが、有効化は以下Prefab Unpack後に行ってください。
スプラインは毎フレーム毎にメッシュをオブジェクトごと再生成します。
Prefabを展開後、そのままオブジェクトを有効化するとPrefab状態でオブジェクトの削除が行われようとしエラーを起こします。
その後、シーン上に展開したPrefabをUnpackします。
これはPrefab配下のアバターPrefabをリプレースする際、Prefab配下だとPrefab編集へ遷移しなければリプレースが行えずまあちょっと面倒だからです。
3.各種ウィンドウを開く
ツールバーからTimelineウィンドウとAnimationウィンドウを開きます。
「Windows > Animation > Animation」
「Windows > Sequencing > Timeline」
「2.Prefabの配置」にて配置したPrefabを選択すると、TimelineウィンドウにPlayable Directorの内容が表示されるので、Timelineをロックします。
これにより、他のオブジェクトを選択しても選択したTimelineを有効化し続けてくれます。
アバターによっては動画制作の際にデフォルトのマテリアルとは別のものを指定しており、上記のようにマテリアルエラーになっている場合があります。
正常なマテリアルに変更するか、後述するPrefab Replaceで他のPrefabインスタンスに変更することで解消できます。
また、モデルを編集したりアセットによりメッシュが変更されている場合変更後のメッシュが指定されている場合があります。この場合元のアバターメッシュを指定するか、Previewを外した上でメッシュをRevertすることで元のメッシュが指定される想定です。
4.Prefabのリプレース(任意)
アバターを別のアバターにしたり改変したアバターにする場合、Prefab replace機能を利用すればPlayable Directorのバインド関連や、オーバーライドしている小物やIK・Constraintの参照先を維持したままPrefabを切り替えることが可能です。
Prefab replace機能を使用する際はリプレース前のPrefabとリプレース後のPrefabで、正常に保存が行える状態(missing component等が無い)にする必要があります。
動画作成のプロジェクトでは色々スクリプトを使用しており、その残骸が残っているのでそれらを解消する必要がありますが、一番手っ取り早いのはスクリプトを用いてmissingとなっているコンポーネントを削除することです。(もしくはアセットを導入してmissingを解決する)
手動で削除するか、そこら辺を調べてスクリプトを持ってくるか、適当なスクリプトを以下に置いておくので好きな方法でどうにかしてください。
例として、サンプルプロジェクトの桔梗ちゃんを真冬ちゃんにリプレースするまでの流れを説明します。
4.1.missingとなっているコンポーネントを削除する。(Prefabオーバーライド)
ここでは、上記エディタ拡張を使用してみます。
実行対象のPrefabを右クリックし「Remove missing components」を押下します。
4.2.missingとなっているコンポーネントを削除する。(Prefabインスタンス)
※サンプルの桔梗ちゃんはデフォルトのPrefabインスタンスを指定しているため問題ない想定
Prefabにオーバーライドされているコンポーネントではなく、Prefabインスタンスにコンポーネントを追加している場合、インスタンスのエラーを解消する必要があります。
以下のようにPrefabインスタンスにもエラーが発生していないかご確認ください。
※Prefabインスタンスに対する本スクリプトの実行はUndoが動かないため注意!
4.3Prefabのリプレース
※リプレース先のPrefabがMAを用いている場合「Modular Avatar等のNDMFを使用している場合」を先にご確認ください。
リプレースするPrefabを右クリックし Prefab > Replace and Leep Overrides から任意のPrefabインスタンスを選択します。
以下のようにオーバーライドされたオブジェクトやTimelineのバインドが維持されたままアバターが切り替わります。
なお全く別のアバターにリプレースする場合、BlendShape名が違うことで表情が変わらない・変になることや、身長・手足の長さなどの差異により手足が浮いたり埋まったりします。
表情に関してはどうしようもないため新しくアニメーションクリップを作成したり既存のアニメーションクリップを編集しオーバーライド先のアバターに合わせるようにしてください。
身長・手足の長さ問題については後述する「手足位置の調整方法」及び「アニメーションの位置調整方法」をご確認ください。
また、アバター本体のサイズを変更していて全体的に場所がズレる場合は後述する「アバター本体のサイズを変更している場合の調整方法」をご確認ください。
動画で複数のアバター差分がある場合、そのアバター用のFacialオーバーライドがTimelineにあるため切り替えて対応可能です。
5.ぶいちゃ関連コンポーネント(VRC Avatar Descriptor)の削除
別途VRCSDKを導入している上でモデルに当該コンポーネントがある場合、Playモードに入った際にAnimatorコントローラーが切り替わり、Timelineにて正常に再生されなくなります。
そのため本コンポーネントは削除してください。
6.再生!
お疲れ様でした。Timelineを再生するかPlayモードに移管すると正常にアニメーションする想定です。
カメラ映像はGame Windowに表示されます。
MAはVRC Avatar Descriptorが無ければ動作しません。
そして当該コンポーネントがあると上記理由によりTimelineは動きません。
なので先に結合させておく必要があります。
以下のようにmanual bake avatarを実行し結合後のアバターをPrefab化し、リプレースを行ってください。
アニメーションはHipsの位置をRootとしてワールド座標が設定されているため、アバター本体のScaleを変更している場合以下のように原点に引っ張られます。
アバターのRoot Scaleは1,1,1にして、Hipsを変更すると正常な位置になります。
なお、スケールに応じて手足の長さ・位置が変わるためアニメーションによってはその修正が必要になります。
→参考: 手足位置の調整方法
→参考: アニメーションの位置調整方法
身長差のある別アバターに変更した場合や改変で元のアバターからサイズが変わっていると、アニメーションとズレが起こります。
少し距離が遠い・近いであれば後述する「アニメーションの位置調整方法」で調整できますが、手足を掴んでいる・腰に手を添えているようなポーズでは不自然になってしまいます。
これはFinalIKを導入するとmissingのスクリプトが生き返って勝手に手足が想定位置に追従するようになります。
(未導入だとPrefabリプレース前のRemove missing componentで吹き飛ばしているので注意)
IKターゲットオブジェクトの親ボーンとの距離やアバターの服・ムチムチ具合によってはまだズレるのでPlayモードに映ってターゲットオブジェクトを移動させて調整してください。
「いちいちPlayモードで調整→コピペするの面倒だよ~」な人は[ExecuteAlways]アトリビュートをFullBodyBipedIKに追加するといいかもしれません。
導入前
導入後
導入+ターゲットオブジェクト調整後
アバターのサイズによっては距離が近すぎたり遠すぎたり、背が足りなかったりします。
その場合、Timelineのアニメーションクリップを選択し、Clip Transform Offsetsを変更することでアニメーションのRootPositionを変更することが可能です。
FinalIK(有料)
特定の位置に手足を固定化したり特定の方向に体を向けたりできます。
これを用いることでアニメーションを上書きして手足の位置を変更できます。
女の子の腰や頭に手を固定したり、拘束具に固定したりする際に使用しており、Prefab配下で固定に使用したオブジェクトが残っています。
動画と違うアバターや改変で身長差がある場合、アニメーションを上書きして好きな位置に手足を固定化することができます。
Zibra Liquid(有料)
精液とか液体の表現ができます。
ただし、私が使用しているものはすでにdeprecatedになったZibra Liquidsで↑には無い機能(Unity Render)で撮影しているため同じ結果にはなりません。
Zibra Effectsでは本機能があるようですが、月額サブスクとなっています。
Eyes Animator(有料)
眼球運動、瞬きを導入できます。
Lattice Modifier for Unity(有料)
格子に沿ってメッシュを変形させることができます。
上下のお口をよりダイナミックに動かしたり、腹ボコ・腹ボテさせたりできます。
Curvy Splines 8(有料)
スプラインで物を配置したり、メッシュを作成したりできます。
触手表現に使ってます。
uLipSync(無料)
音声を解析してリップシンクさせることが出来るようになります。