FaceBlendshape とは
顔の各部位の状態を取得できるAPIのこと。
取得した各部位の値を元にして顔の位置に配置した3Dモデルの表情を動かしたり、
コントローラーの代わりにすることができる。
Note. 顔の各部位の状態は取得できるが、各部位の位置の取得はできない?
iOS ARKitのリファレンス
Unity ARKitPlugin Blog
Unity ARKitPlugin でのBlendshapeの取得方法
Start() で UnityARSessionNativeInterface.ARFaceAnchorUpdatedEvent にメソッドを登録
void Start() {
(略)
UnityARSessionNativeInterface.ARFaceAnchorUpdatedEvent += FaceUpdated;
}
登録したメソッドでFaceトラッキングの変更通知を受け取り、ARFaceAnchorからblendShapeを取得
void FaceUpdated(ARFaceAnchor anchorData) {
Dictionary<string, float> currentBlendShapes = anchorData.blendShapes;
}
取得したDictionaryに下記のパラメータキーでそれぞれの値がとれる。
パラメータについての注
L,Rはカメラに写った像の右左に対するパラメーター。
ARKitでディスプレイに表示される映像は鏡に写ったように表示されるので、実際の右左とは逆のパラメーターになる
In the naming of blend shape coefficients, the left and right directions are relative to the face. That is, the eyeBlinkRight coefficient refers to the face's right eye. ARKit views running a face-tracking session mirror the camera image, so the face's right eye appears on the right side in the view.
眉
パラメーターキー | 顔の部位 | ARKit | 備考 |
---|---|---|---|
browInnerUp | 両眉の内側部分の上方向への動き | 詳細 | |
browOuterUp_L | 左眉の外側の上方向への動き | 詳細 | |
browOuterUp_R | 右眉の外側の上方向への動き | 詳細 | |
browDown_L | 左眉の外側の下方向への動き | 詳細 | |
browDown_R | 右眉の外側の下方向への動き | 詳細 |
眼
パラメーターキー | 顔の部位 | ARKit | 備考 |
---|---|---|---|
eyeBlink_L | 左目瞬き | 詳細 | 開いていると0(に近づき),閉じていると1(に近づく) |
eyeBlink_R | 右目瞬き | 詳細 | 開いていると0(に近づき),閉じていると1(に近づく) |
eyeWide_L | 左の瞼の広がり→左眼の開き具合 | 詳細 | |
eyeWide_R | 右の瞼の広がり→右目の開き具合 | 詳細 | |
eyeLookDown_L | 左目の下方向への視線 | 詳細 | |
eyeLookDown_R | 右目の下方向への視線 | 詳細 | |
eyeLookIn_L | 左目の右方向への視線 | 詳細 | |
eyeLookIn_R | 右目の左方向への視線 | 詳細 | |
eyeLookOut_L | 左目の左方向への視線 | 詳細 | |
eyeLookOut_R | 右目の右方向への視線 | 詳細 | |
eyeSquint_L | 左目周辺の顔の収縮具合 | 詳細 | |
eyeSquint_R | 右目周辺の顔の収縮具合 | 詳細 | |
eyeLookUp_L | 左目の上方向への視線 | 詳細 | |
eyeLookUp_R | 右目の上方向への視線 | 詳細 |
鼻
パラメーターキー | 顔の部位 | ARKit | 備考 |
---|---|---|---|
noseSneer_L | 左の鼻孔周辺の上方向への移動 | 詳細 | |
noseSneer_R | 右の鼻孔周辺の上方向への移動 | 詳細 |
頬
パラメーターキー | 顔の部位 | ARKit | 備考 |
---|---|---|---|
cheekPuff | 両頬の外側への動き | 詳細 | |
cheekSquint_L | 左頬の周辺の上方向への移動 | 詳細 | |
cheekSquint_R | 右頬の周辺の上方向への移動 | 詳細 |
口
パラメーターキー | 顔の部位 | ARKit | 備考 |
---|---|---|---|
mouthRollLower | 下唇の口内への動き | 詳細 | |
mouthRollUpper | 上唇の口内への動き | 詳細 | |
mouthPucker | 唇の収縮 | 詳細 | |
mouthShrugLower | 下唇の外側への動き | 詳細 | |
mouthShrugUpper | 上唇の外側への動き | 詳細 | |
mouthClose | 唇の開閉(顎の位置に依存しない) | 詳細 | |
mouthFunnel | 開いた口の収縮 | 詳細 | |
mouthLowerDown_L | 左側の下唇の下方向への動き | 詳細 | |
mouthLowerDown_R | 左側の下唇の下方向への動き | 詳細 | |
mouthUpperUp_L | 左側の上唇の上方向への動き | 詳細 | |
mouthUpperUp_R | 左側の上唇の上方向への動き | 詳細 | |
mouthDimple_L | 口の最左端の後方への移動 | 詳細 | |
mouthDimple_R | 口の最右端の後方への移動 | 詳細 | |
mouthPress_L | 左側の下唇の上方向への収縮(移動) | 詳細 | |
mouthPress_R | 右側の下唇の上方向への収縮(移動) | 詳細 | |
mouthStretch_L | 口の最左端の左方向への動き | 詳細 | |
mouthStretch_R | 口の最右端の右方向への動き | 詳細 | |
mouthLeft | 唇の左方向への動き | 詳細 | |
mouthRight | 唇の右方向への動き | 詳細 | |
mouthSmile_L | 口の最左端の上方向への動き | 詳細 | |
mouthSmile_R | 口の最右端の上方向への動き | 詳細 | |
mouthFrown_L | 口の最左端の下方向への動き | 詳細 | |
mouthFrown_R | 口の最右端の下方向への動き | 詳細 |
顎
パラメーターキー | 顔の部位 | ARKit | 備考 |
---|---|---|---|
jawOpen | 下顎の開閉 | 詳細 | |
jawForward | 下顎の前方向への動き | 詳細 | |
jawLeft | 下顎の左方向への動き | 詳細 | |
jawRight | 下顎の右方向への動き | 詳細 |
メモ
ARKitのリファレンスでは
ranging from 0.0 (neutral) to 1.0 (maximum movement).
とあるが、どう頑張っても1にならないパラメータがある。
顔の作りによって取得できやすいパラメータがあるのかもしれない。