本記事はCraft Egg Advent Calendar 2021の12/20の記事です。投稿が遅れてしまい申し訳ございません!
12/19の記事は@ryousangataさんのUnityのCoroutineのつまづきやすいところまとめ
でした。
はじめに
株式会社Craft EggでUnityクライアントエンジニアをしている中垣です。
@arumaniさんのiPhoneで3D空間に入って撮影できる『Unity Virtual Camera』でも紹介されているLiveCaptureのパッケージサンプルにUnityFaceCaptureというものがあるということを知ったので、できることやその精度を確かめてみようと思いました。
※Unity 2021.2.6.f1,MacおよびiPhone12を使用しています。
UnityFaceCaptureとは
UnityおよびUnityFaceCaptureアプリをインストールしたFaceId対応iPhoneを用いてリアルタイムで表情の変化を3Dモデルに反映させることができます。
併せてFace Captureも良い感じ・・ほっぺたふくらますことができた・・。あと舌が若干前後動く!!(笑)
— ぽこぽん丸。@2021年もお世話になりました (@x_pokoponmaru_x) July 30, 2021
こちらもマニュアルに記載されています。
ARKit Face Sampleで試すことができました。#Unity #FaceCapture #HDRP pic.twitter.com/6YFkM50Z7w
また、キャプチャ中の動作を録画することによってアニメーションアセットとして出力することができます。
(キーフレームの量が多いので修正して使うのは大変かもしれません)
導入方法と動作
前述の通り、LiveCaptureのパッケージサンプルですので
https://qiita.com/arumani/items/4b8c3058425031aa4d2f
こちらと同様の導入手順をご参照いただき、加えてLiveCaptureのSamplesプルダウンからARKit Face Sampleをインポートします。
インポートしたアセット内のFaceCaptureSampleシーンを開いておきます。
FaceIDに対応したiOS端末にて
https://apps.apple.com/us/app/unity-face-capture/id1544159771
こちらをダウンロードします。
iOSでアプリを起動しUnityと通信接続するとシーン内の3DモデルがiOSでキャプチャした顔と同期して表情を変化させます。
精度を確かめる
色々な表情をしてみますがかなり正確にトラッキングできています。特にほっぺたを膨らませたりするような動きにも対応できているので対応している表情は多数存在しそうです。
できなかった表情は唇が前後する状態、鼻を動かす状態、舌を左右に動かす状態は表現できませんでした。舌に関しては前後のみ対応しています。
アプリ側の開閉メニューからワイヤーフレーム表示をONにしてみるとどのようにキャプチャしているかが分かりやすいですが、口はカメラでその差を捉えきれていません。鼻は少しワイヤフレームに変化があるものの、その差を表現するブレンドシェイプがないものと推測されます。
VRMモデルを使って遊んでみる
折角のトラッキング精度を他のモデルなどで利用できないか試してみました。
今回使用したモデルはVRoidのサンプルデータです。
VRMのインポートはこちらを参考にさせていただきました。
https://miyagame.net/vroid-unity-unity/
VRMのインポート時に生成されたPrefabにARKitFaceActorをAddします。
SampleHeadMapperを参考にMapperを作成します。
TakeRecorderの子のNew FaceDeviceのActorにインポートしたVRMPrefabを指定すると顔のトラッキングにモデルが反応します。
ただ、ブレンドシェイプが対応していないためか関係のない箇所が動作したり動きすぎてしまったりとそのまま使用することはできないようでした。改良やSampleアセットを参考にモデルを制作することでVTuber的な使用方法も考えられそうではありました。
まとめ
今回はサンプルを触ってみただけの内容ではありましたが、派生した使い方についても考えることができました。
ここまで記事をご覧いただき、ありがとうございました。