Google ARCore と Apple ARKit を Unity上で統合して、マルチプラットフォームでARアプリを開発できるフレームワーク Unity AR Foundation。
これを簡単に理解できるように、いくつものシーンを含んだサンプルプロジェクトがGitHubにあります。
前回その「FaceTracking」に関するシーンでARCoreに対応したものを紹介しました。
【Unity AR Foundation のサンプルを試してみた(FaceTracking)Part.1】
今回はその中の「ARCoreFaceRegions」の詳細情報と応用方法を紹介します。

【ARCoreFaceRegionsの説明】
「ARCoreFaceRegions」は認識した顔の特定の場所情報を提供します。左右の眉毛の位置と方向、鼻の位置と方向を表示します。フロントカメラを使用します。
そのシーンの中には以下のようなオブジェクトが含まれています。

[実行画面]
【AR Session オブジェクト】

AR Sessionクラス:
AR Foundationの AR としての基本機能(デバイスのトラッキングや、平面の認識)を AR Sessionと呼び、本Game Objectがその機能を担っています。このコンポーネントを付けたGame ObjectをSceneに必ず含める必要があります。
「Attempt Update」をチェックすると、もし可能であればARソフトを自動でインストールする設定となります。
AR Input Managerクラス:
このコンポーネントはデバイスで現実世界をトラッキングするのに必要となります。実際はScene上のどこにあっても良い。

AR Session Originクラス:
Session Spaceと言う ARの座標と Unity Space:Unityの座標の変換を行います。ARデバイスを起動した位置を Session Spaceの原点(0,0,0)として位置の計算をします。
AR Cameraを配下に持っています。また、表示する Game Objectはこの AR Session Originオブジェクト配下に作られる。
AR Face Managerクラス:
人間の顔のみ認識する。顔認識にはフロントカメラが必要となり、AR Foundationにある平面認識(Plane Tracking)、イメージ認識(Image Tracking)、物体認識(Object Tracking)、環境認識(Environment Probes)のような機能は無効化しておく必要がある。
AR Core Face Region Managerクラス:
認識された顔のパーツの位置にゲームオブジェクトを表示する。
[ゲームオブジェクトを表示する部分の説明]

71-84行:検索した顔のパーツ分だけ繰り返す。
78行:まだ3Dモデルの Prefabを AR表示させていない場合、表示させる。
82、83行:表示した Prefabの位置と向きを、認識した顔のパーツに合わせて調整。
73行の regionType は以下のような0から2の整数が入る。

【応用編:変更法】
応用編として、このサンプルを少しだけ変更して最初の画面のようにします。要は、顔認識時に左右の眉毛の位置、鼻の位置に表示する GameObjectを変更します。
これを簡単に理解できるように、いくつものシーンを含んだサンプルプロジェクトがGitHubにあります。
前回その「FaceTracking」に関するシーンでARCoreに対応したものを紹介しました。
【Unity AR Foundation のサンプルを試してみた(FaceTracking)Part.1】
今回はその中の「ARCoreFaceRegions」の詳細情報と応用方法を紹介します。

【ARCoreFaceRegionsの説明】
「ARCoreFaceRegions」は認識した顔の特定の場所情報を提供します。左右の眉毛の位置と方向、鼻の位置と方向を表示します。フロントカメラを使用します。
そのシーンの中には以下のようなオブジェクトが含まれています。

[実行画面]

【AR Session オブジェクト】

AR Sessionクラス:
AR Foundationの AR としての基本機能(デバイスのトラッキングや、平面の認識)を AR Sessionと呼び、本Game Objectがその機能を担っています。このコンポーネントを付けたGame ObjectをSceneに必ず含める必要があります。
「Attempt Update」をチェックすると、もし可能であればARソフトを自動でインストールする設定となります。
AR Input Managerクラス:
このコンポーネントはデバイスで現実世界をトラッキングするのに必要となります。実際はScene上のどこにあっても良い。
【AR Session Origin オブジェクト】

AR Session Originクラス:
Session Spaceと言う ARの座標と Unity Space:Unityの座標の変換を行います。ARデバイスを起動した位置を Session Spaceの原点(0,0,0)として位置の計算をします。
AR Cameraを配下に持っています。また、表示する Game Objectはこの AR Session Originオブジェクト配下に作られる。
AR Face Managerクラス:
人間の顔のみ認識する。顔認識にはフロントカメラが必要となり、AR Foundationにある平面認識(Plane Tracking)、イメージ認識(Image Tracking)、物体認識(Object Tracking)、環境認識(Environment Probes)のような機能は無効化しておく必要がある。
AR Core Face Region Managerクラス:
認識された顔のパーツの位置にゲームオブジェクトを表示する。
[ゲームオブジェクトを表示する部分の説明]

71-84行:検索した顔のパーツ分だけ繰り返す。
78行:まだ3Dモデルの Prefabを AR表示させていない場合、表示させる。
82、83行:表示した Prefabの位置と向きを、認識した顔のパーツに合わせて調整。
73行の regionType は以下のような0から2の整数が入る。

【応用編:変更法】
応用編として、このサンプルを少しだけ変更して最初の画面のようにします。要は、顔認識時に左右の眉毛の位置、鼻の位置に表示する GameObjectを変更します。
Inspector上から AR Core Face Region Managerクラスの「Pre_1」と「Pre_2」に Prefabをセットします。


[Prefabの用意]
もちろん、上記の様に「Pre_1」「Pre_2」に Prefabをセットする前に、表示するメガネと鼻の GameObjectを用意しておく必要があります。
メガネの GameObjectについて。大きさ(Scale)や位置(Position)、方向(Rotation)を、元のサンプルの GameObjectを参考に調整しておきます。

鼻の GameObjectも。大きさ(Scale)や位置(Position)を実際に表示される大きさを見ながら調整しておきます。(この例の場合、球なので方向は関係ないです。)

[実行画面]

以上、左右の眉毛の位置と方向、鼻の位置と方向を認識する「ARCoreFaceRegions」に関して、詳細説明と応用方法の紹介でした。
メガネの GameObjectについて。大きさ(Scale)や位置(Position)、方向(Rotation)を、元のサンプルの GameObjectを参考に調整しておきます。

鼻の GameObjectも。大きさ(Scale)や位置(Position)を実際に表示される大きさを見ながら調整しておきます。(この例の場合、球なので方向は関係ないです。)

[実行画面]

以上、左右の眉毛の位置と方向、鼻の位置と方向を認識する「ARCoreFaceRegions」に関して、詳細説明と応用方法の紹介でした。
次回は、認識した顔に Mesh Rendererをかぶせ、特定の Textureを顔に表示させる「FaceMesh」に関して、詳細説明と応用方法を紹介します。
Sponsored Link
なかなかできません・・・。