ブログ@kaorun55

HoloLensやKinectなどのDepthセンサーを中心に書いています。

Intel RealSense SDKで検出した表情をもとにUnityちゃんの顔を動かす

RealSesne SDKでは表情の検出機能があり、目や口の開閉度を取得できます(Kinect SDK v2でも同様の機能があります)。Unityでは3Dモデルに設定されたブレンドシェイプの操作をサポートしています。ブレンドシェイプについてはぐぐってもらうほうが確実ですが、表情をより簡単に調整できる3Dモデルの機能という認識です。

 

このパラメータをUnityのスクリプトから制御できるので、RealSesne SDKで取得したパラメーターと対応させることで、動かすことができます。

 

Unityちゃんの場合、目や眉、口にブレンドシェイプが設定されています。

 

例えばUnityちゃんの「Character1_Reference」を開いていくと「EYE_DEF」という目の定義があります。

 

ここにSkinned Mesh Rendererというのが割り当てられており、「BlendShapes(ブレンドシェイプ)」が定義されています。この数字を変えることでUnityちゃんの表情が変化します。

 f:id:kaorun55:20150529113027p:plain

この値をスクリプトから変化させるにはSkinnedMeshRenderer.SetBlendShapeWeight()を呼び出します。

 

例えばFaceMoveというスクリプトを用意し、次のように記述します。

3つのSkinnedMeshRendererのフィールドを用意し、口と目、眉を設定させます。

Update()ではRealSesne SDKから取得した、口と目の開閉度合いから、それぞれのブレンドシェイプの値を更新します。これによってUnityちゃんの表情が変化します。

gistc17e659deb1ec9ebed50