女子高生になりたい。 せや、バーチャルユーチューバーになればええんや!
ということで、VTuber環境を構築したメモです。
成果物はこの記事に置いてます。
使用したもの
[VR Device]
- HTC Vive
[ソフトウェア]
- Unity(開発)
- OBS Studio(動画撮影)
[Unity Plugin]
- MMD4Mecanim
- Finak IK
- OVRLipSync
- SteamVR Plugin
- VIVE Input Utility for Unity
[モデル]
制作
だいたい作り方は Unity+Vive+MMD+VRIKで、キズナアイちゃんになりきりVR - Qiita などに載っています。
流れとしては、
- MMDモデルをUnityで使用可能な形式に変換
- SteamVR PluginのCameraRig, Status, StreamVRをヒエラルキ上に置く
- Final IKの設定をする
- OVRLipSyncの設定をする
- HMDから自分が見えるように鏡を置く
- 腕の角度や足の角度を調節する
- 表情をキーボードやViveコントローラで変えられるようにする
- 撮影
って感じです。
以下はちょっと迷ったところとか、個人的にメモっときたい事を書いときます。
Final IK
IK(= Inverse Kinematics)日本語では逆運動学になります
順運動学は、例えば腕が○度曲がったから手の位置はココ!みたいな計算をします。
それに対し、逆運動学では、手の位置がココだから腕は○度曲がってる!というような計算をします。
Viveにより、頭の位置、手の位置がトラッキングできるので、これで手の角度や足の曲がり具合などをIKにより計算するわけです。
FinalIKの設定で、VRIK Scriptをアタッチした際のReferencesですが、デフォルトでは全てNoneになっていました(自動で参照してくれない)
VRIKのコンポーネント上で右クリックするとAuto-detect Referencesという項目があったので、これで自動選択してくれました。。
ただし、一部自動で設定されない項目や誤っている項目がありました(多分)。最終的に、自分は以下のように設定しました。
OVRLipSync
うまく口が動いてくれない事がありました。 口の動きが小さいからといってGainを極端に大きくしても変わらなかったように見えます。 (しかもキツイノイズが入るようになった)
最終的には、Gain 10くらいでハッキリと口が動くようになりました。
マイク指してGameシーンをPreviewした直後は認識しないのかな?ちょっと待ったら動くようになった気がする・・?
この辺りはよくわかってないです。
表情の変更
表情はキズナアイモデルの、U_Char_1にアタッチされてるSkinned Mesh Rendererの値を操作(1~100)する事で変更可能です。
ScriptではSkinnedMeshRendererコンポーネントのSetBlendShapeWeightで変更できます。
public SkinnedMeshRenderer skinnedMeshRenderer; this.skinnedMeshRenderer.SetBlendShapeWeight (0, 100);
今回、Viewのトリガーボタン、丸いトラックパッドを押した時に表情を変更するようにしました。 ボタン押下中は特定の表情のweightを増加させ、表情を徐々に変化させます。
ViveのボタンはSteamVR_Controller.Inputから取得できます。
var device = SteamVR_Controller.Input ((int)vrTrack.index);
device.GetPress(SteamVR_Controller.ButtonMask.Trigger);
(トリガー押下)
トラックパッドの指の位置はGetAxis()で取れますが、ボタンを押した時のみに反応するには.GetPress(SteamVR_Controller.ButtonMask.Touchpad)と組み合わせる必要があります。
if (device.GetPress(SteamVR_Controller.ButtonMask.Touchpad)){ if(device.GetAxis().y < 0 && device.GetAxis().x > 0){ // something } }
成果物
次の記事で公開します
(イメージ)