kb10uy 流 Avatars 3.0 セットアップと罠とか Tips とか (2021/03)
AV3 リリースほぼ直後に書いた以下の記事が各所で好評なようで何よりです。とはいえ当時から変わった場所や個人的に改善した手順・テクニックなども段々たまってきたので、 それらを改めて記事にしようじゃないかという企画です。もちろん以下の記事も依然として役に立つのでぜひ……
kb10uy 流セットアップ
僕は個人的にこれを「第 2 世代」と呼んでます。
アバターモデルの準備
服を着せたり顔をちょっといじる改変については基本的に全部 Blender 上で行っています。発売元が対応してないアバターにも色々な服を着せることができますが、ウェイトの調整や頂点グループ名の編集などは面倒ですね、やっぱり。 Unity 上でやるなら Armature の GameObject を入れ子にするだけですし、何ならキセテネという神ツールがほとんど対応してくれるのでまずはそれを使うのをおすすめします。 僕がわざわざ Blender でやってるのは主に命名規則が混ざってるとなんかやだとか GameObject がいっぱいあると見づらいとか主にお気持ちの面が強いです。
とはいっても Blender で作業しなければ満足に着せられなかったであろう服もありました。これです。
鳴耶ちゃんの服を全部ミントちゃんに着せてます。これ何がしんどいってエチャイエチャイなケツの紐をぴったり合わせるのが本当に大変だったんですよね。
肌の露出が多い服については結局 Blender でやらざるを得ないのかなあ、とか思ったり。
カメラ拡張
最近は専ら VRCLens 使ってます。セットアップスクリプトがかなり進化しててびっくりしました。Write Defaults 対応とかもされててえらいなあって感じですね。
FX Layer の構成
基本的には Write Defaults オフで運用していて、レイヤーはこんな感じになってます。そうそう、SDK の付属 AnimatorController は FX Layer でだけ使っていません。
DEFAULT レイヤー
これは表情で変わりうる BlendShape を全て 0 にセットするアニメーションを常に再生しておくやつです。めかにゃんこさんの記事を読んでこれでいいじゃんってなって実装しました。
Eye/Mouth Tracking Control レイヤー
VRC Animator Tracking Control ビヘイビアでまばたきやリップシンクの干渉を防止するレイヤーですね。こういう感じの簡単なグラフを入れておくだけです。
目・口の切り替えが発生したときに Animation に、デフォルトに戻ったときに Tracking に切り替えるようになっています。
Eyebrows, Eyelids, Pupils, Mouth レイヤー
顔の各パーツを個別に動かしているレイヤーです。これを書くのがまあめんどいですね。とはいっても Any State から生やすだけなので複雑なステートマシンを書かなくてもなんとかなるのは救いですが……
レイヤーを分ける基準ですが、口と眉はそのままです。まぶたと瞳についてもそのままっちゃそのままなんですが、「VRChat 側のまばたきと干渉する目の形」は Eyelids に、「まばたきしながらでも使える目の形」は Pupils に入れてます。 例えば「はぅ」目とかは前者、「しいたけ」目は後者になりますね。
Face **** レイヤー
主に頬周辺で出し入れするパーツを 1 パーツ 1 レイヤーで管理します。 少し前のアップデートで Expression Parameters に Bool 値を持たせることができるようになったので、頬染めと涙を同時に出すというようなことができるようになりました。 しかも消費が多くの場合で減るんですよ。ありがたいことこの上ないですね。
おまけ: フォルダー構成
罠
AnimatorController を編集してると突然遷移条件の設定 UI が消える
Unity 2018 のバグらしいです。 VRChat が Unity 2019 に移行したら多分このバグともおさらばできると思います。現状の解決策は Unity 再起動しかない?
AnimatorController のレイヤーのウェイトとかマスクを編集してるとレイヤー一覧がよくわからなくなる
Unity のバグというか多分仕様です。 新しいレイヤーを作ったりレイヤーのプロパティを編集したときになぜかレイヤー一覧が最上部までスクロールされてしまうという謎挙動があるのですが、これはなんと Unity 2019 でも直ってませんでした。どうかしてるだろ。
Gesture Layer でけもみみとかしっぽが動かせない
VRChat のバグ。 たぶんこれで相当困ってる人も多いんじゃないでしょうか。
Write Defaults オフで組んでいる状態で Gesture Layer に Humanoid リグ以外のボーンのアニメーションを仕込んでも動かないという問題です。 回避策については Ryuban さんの以下のドキュメントに書いてあるので詳しくは割愛しますが、要約するとこうです。
- FX Layer に全部の Transform を止めるマスクを全レイヤーに適用する
- FX Layer で Humanoid リグ以外の Transform を動かす
- Write Defaults オンで運用する
公式の推奨に従うならば 1. しかないですが、あまりにも地獄の作業となってしまいます。特に VirtualLens2 や VRCLens を入れている場合には。 もっと言うと VRCLens は 1. の回避策を使うとドローンモードが動かなくなるので実質封じられていると言ってよいでしょう。 個人的には 3. が簡単でよいと思います。
Tips
表情を全部作るシェイプキーから特定パーツだけを抽出する
あんまり無いと思いますが、1 つのシェイプキー(BlendShape)を動かすと表情全体が作られるように設定されているアバターがあります。
もしこういうシェイプキーしかなかった場合にどうにかして顔のパーツごとに分離したいと思うことがあるかもしれません。それをなんとか実現してやるための方法。 あ、 Blender 使うのでそこはご容赦を……
1. 合成済みシェイプキーをコピーしておく
顔のパーツ数だけ表情のシェイプキーをコピーします。コピー専用のメニュー項目なんてものはないので、シェイプキーを合成する機能を使います。
2. Edit Mode で抽出したいパーツ以外を選択する
Edit Mode で頂点選択モードにし、さっきコピーしたシェイプキーを選択しておきます。すると 3D ビューで表情が切り替わるはずです。 まずは抽出したいパーツ近辺の頂点を選択します。 X-Ray などをうまく使って、例として口を抽出してみましょう。
そうしたら Ctrl+I で選択を反転します。デフォルトに戻したい頂点が選択されることになりますね。
3. Blend from Shape を実行する
ここが肝心です。 Vertex メニューから Blend from Shape を実行します。そうすると設定ウィンドウが出てくるはずなので、このように設定しましょう。
こうすることにより、「口だけが変化するシェイプキー」が完成します。