Search Unity

最近公開された「ARKit」と「iPhoneX」を Unity と組み合わせれば、デベロッパーは、美しく表情豊かなキャラクターを簡単に作成できるツールを手にすることができます。近日公開のショートアニメーションフィルム『Windup』(Yibing Jiang 監督)におけるキャラクターのリアルタイム操作の魔法のような世界も、これによって可能となりました。

『Windup』の立役者であるチームと Unity Labs とが協力して、シネマティックキャラクターのフェイシャルアニメーションのリアルタイムキャプチャーにおける Unity 性能の限界に挑みました。また、Beast House FX 社の Roja Huchez 氏からブレンドシェイプのモデリングとリギング関連での協力を得たことで、キャラクターの表情に命が吹き込まれました。

このチームは「Facial AR Remote」を開発しました。これは、接続されたデバイスを使用して直接 Unity エディター内にパフォーマンスをキャプチャーするための低オーバーヘッドな方法です。Facial AR Remote のワークフローを使用すると Unity で独自の Animoji(アニ文字)や Memoji(ミー文字)タイプのインタラクションを効率的にビルドできるので、アニメーションの作成のみならず、キャラクターやブレンドシェイプのモデリングやリギングにも役立ちます。モデルのイテレーションをエディター内で行え、毎回デバイス用にビルドする必要がなくなるので、時間を節約することができます。

Facial AR Remote 開発の理由

私達は今回、映画プロジェクト用の新しいアニメーションツールをビルドすることが、Unity のリアルタイムアニメーションの未来を開拓することに繋がると考えました。また、アニメーションの作成に AR ツールを使用するという「ワクワク要素」があっただけでなく、Unity のリアルタイムレンダリングの限界を押し上げられる絶好の機会でもありました。基本的な仕組みが一旦機能し、携帯端末からエディターにデータが取り込まれ始めると、チームメンバーだけでなく周りにいた全員が、キャラクター操作の楽しさに時間を忘れて夢中になってしまいました。私達は、この種の技術が秘めた大きな可能性を体験することができました。単純な実験的な試みでしたが、楽しくて役に立つものであることがすぐに証明されたのです ― そして、このプロジェクトが急ピッチで発展し、Facial AR Remote とその機能セットが開発されました。

 

チームは、Unity の目標である「開発の民主化」を念頭に、プロジェクトの拡大に乗り出しました。AR ブレンドシェイプアニメーション周りのツールとワークフローを、現在入手可能な従来のモーションキャプチャー方法より更に使いやすく、より多くの方に使用していただけるものにしたかったのです。Facial Remote を使用すると、ブレンドシェイプのイテレーションをエディター内で行えるツールをビルドでき、メッシュの変更をデバイスで確認するためだけに新しいビルドを作成する必要がなくなります。つまり、役者の顔のキャプチャーを Unity 内に記録できるということです。そして、キャラクターモデルのイテレーションや更新を行ったり別のキャラクターへアニメーションをリターゲティングする際に、そのキャプチャーデータを固定ポイントとして使用できるので、役者を使ったキャプチャーセッションをやり直さなくて済みます。このワークフローは、キャラクターの表情や個々のブレンドシェイプの微調整に非常に役立ちました。

Facial AR Remote の機能する仕組み

Facial AR Remote は、スマートフォンで動くクライアントアプリと、Unity エディター内でサーバーとして機能するストリームリーダーによって構成されます。クライアントは軽量なアプリとなっており、このアプリは ARKit の最新追加機能を活用してネットワーク経由でそのデータを Stream Reader ゲームオブジェクトの Network Stream Source に送ることができます。単純な TCP/IP ソケットと固定サイズのバイトストリームを使用して、毎フレームのブレンドシェイプとカメラとヘッドポーズデータがデバイスからエディターに送られます。そしてエディターがストリームをデコードし、リグの付いたキャラクターをリアルタイムで更新します。ストリームリーダーは、エディターとスマートフォンの間に(必然的に)ラグが生じるのに備えて、重要なフレームの調整可能なバッファを保持します ― これにより、ネットワークの待ち時間によるジッターが平滑化されます。これは、実際の役者の現在のポーズと出来るだけ近い形を維持しながらプレビューキャラクターの見た目を滑らかに保つに当たって、極めて重要な機能です。ネットワーク状況が悪い場合、プレビューのフレームは(最新の状態に追い付かせるため)所々飛ばされることがありますが、データは元々のデバイスからのタイムスタンプも含めて全て記録されます。

エディター側では、ストリームデータを使用して、プレビュー用のキャラクターを動かしたりアニメーションクリップのベイキングが行われます。スマートフォン端末からの raw ストリームをディスクに保存するので、このデータをキャラクター上で再生し続けながらブレンドシェイプの微調整を行えます。また、セーブデータはスマートフォンからの 1 本の raw ストリームなので、別のキャラクターにモーションをリターゲティングすることも可能です。満足の行くストリームがキャプチャできたら、そのストリームをキャラクターのアニメーションクリップにベイクできます。作成したクリップは、Unity のその他のアニメーション同様、Mecanim や Timeline でキャラクターを動かしたり、その他様々な形で利用することができるので、非常に便利です。

『Windup』のアニメーションのデモ

以前制作された『Windup』レンダリング技術デモでは、チームは高画質アセットを使用してアニメーションの探索を開始することができました。基本的な仕組みは割と短期間で機能させることができたので、開発中のツールでブレンドシェイプのイテレーションを行う時間がたっぷり取れました。開始ほどなくして、ジッター、平滑化、シェイプ調整がこのプロジェクトの主要な焦点となりました。ジッターの解決方法は、フレームレートとフレーム処理中のラグとの関係を解明したこと、そしてプレイバックからカメラの動きを削除したことで改善されました。カメラを動かす機能を削除したことで、ユーザーがブレンドシェイプのキャプチャーにしっかり集中できるようになっただけでなく、端末をスタンドに設置できるようになりました。

ブレンドシェイプを理解して ARKit 内でブレンドシェイプアンカーを最大活用するに当たっては最も多くのイテレーションを要しました。各種シェイプの詳細をドキュメンテーションから理解するのは困難です。最終的な表情の大部分は、キャラクターの様式化と、各種シェイプの一般的な組み合わせによってもたらされました。目/頬の「すぼめ」のシェイプや口の「伸ばし」のシェイプなどは、ブレンドシェイプの変化による影響を、顔の特定の領域において制限することで改善されました。例えば、頬のすぼめは下瞼にはほとんど影響を及ぼさないようにし、すぼめ状態の下瞼は頬にほとんど影響を及ぼさないようにするなどです。また、mouthClosed シェイプは jawOpen シェイプが 100% の場合に唇を閉じるように補正するポーズですが、残念なことに最初はこれに気が付きませんでした。

Skinned Mesh Renderer の情報を使って特定のフレームの表情を作っている値を確認した上で、それらの値を上下させて確認するという方法が、ブレンドシェイプ調整に非常に役立ちました。手軽に現在のブレンドシェイプの値を上下させて確認し、修正が必要なブレンドシェイプがあるかどうか、またどの程度の修正が必要かを判断することができました。これは「適切なキャラクターをキーポーズに設定する(このデモで言えば女の子を笑顔にする)」という特に困難な作業を行う上で役立ちました。特定のポーズがどのシェイプによって構成されているか把握できることが非常に有利に働きました。この場合は、笑顔の「口の左右方向への伸ばし」を調整することで最終的なシェイプが実現されました。スマートフォンから提供されたシェイプは、(それ単独で作られる人間の顔のポーズではなく)小さな構成要素として考えると理解しやすくなります。

デモのアート制作の最終段階で私達は、キャラクターの一部のアニメーションを向上させるための実験的な試みを行いたいと考えました。ARKit から学んだブレンドシェイプに関する知識を踏まえ、キャラクターの基本のニュートラルポーズの修正を試みました。この女の子キャラクターは、そのアートスタイルゆえに、基本ポーズの目の開きが大き過ぎ、顔の基本の笑みも大き過ぎると思われました。このせいで、目の「大開き」と「基本」の間の差分が小さ過ぎ、「基本」と「閉じ」の間の差分が大き過ぎる状態でした。また、「すぼめ」のブレンドシェイプの割合も改善する必要がありました。「すぼめ」に関しては、私達の行ったテストでは、操作者が目を閉じると常に 60 ~ 70% になるという結果が出ました。このニュートラルポーズの修正と、その他様々な作業が功を奏して、結果的に表情豊かな活き活きしたキャラクターが完成しました。

今後の展望

Facial AR Remote を Unity のその他のツールと併用すれば、どんな素晴らしいアニメーションでも作り出せます!近い将来、誰もがデジタルキャラクターを操作できるようになります。今までにない新しい可能性の扉が開かれます!例えば、子供達は自分の体を使ってお気に入りのキャラクターに付けた動きを保存して友達や家族にシェアしたり、ゲームのストリーマーなら自分のアバターに一層の息吹を吹き込んだり。また、プロでもアマチュアでも、新しい形のアニメーションコンテンツの放送が可能になるでしょう。Unity 2018 をダウンロードして、Facial AR Remote の GitHub でセットアップのインストラクションをご確認ください。ユーザーの皆様が、Facial AR Remote をアーティスティックに、クリエイティブに活用していただけるのを楽しみにしています!

21 コメント

コメントの配信登録

コメント受付を終了しました。

  1. James Arndt

    8月 25, 2018 8:24 pm

    I hope to see this come to Android phones. I won’t be purchasing an Apple device.

  2. This is a really wonderful feature. I was waiting for such a function. Thank you very much.

    However, I saw Github, quick start is too simple to understand.
    If possible, would you please write a more gentle quick start?
    I think that users will increase more by enriching quick start :)

  3. Ist cool you choose what comment it will be show up and you just delete all what is not says “thanks you are best ” – sad.

  4. Guys, this is the first iteration. IPhone have the facil kit already integrated. It is not even finished and you all want the full version for every plataform?

  5. Wow awesome, but i would never buy apple phone, when does it come to Android?

    1. Me too. That’s why I try to use DLib and OpenCV for facial mask on Android. Of course it is not 3D capture but can be used for some applications
      https://www.youtube.com/watch?v=P9AbHQjS1-A

  6. I’ve seen that the iphone app needs to be built and uploaded in the device which means that we also need to be in the apple developer program. But what if we want to create facial animations for desktop games using this? Every penny counts for us indie devs. Do you plan to create a dedicated iphone app that we can download for this use case?

  7. David Salustri

    8月 13, 2018 11:41 pm

    Great job guys! This is truly futuristic technology, stuff that would cost a ton of money and time before this. This is a game changer, literally and figuratively.

  8. Wallace Morais

    8月 13, 2018 11:01 pm

    Had to agree – I’m also want to see this on ARCore

  9. GIFs are the absolute worst way to show off this tech…

    1. Johnathan Newberry

      8月 14, 2018 7:40 pm

      Thanks for the feedback. We have updated the article with higher quality webm videos. You should also checkout the Unite Berlin Keynote where we demo the Facial AR Remote on stage.
      https://youtu.be/3omw9dLkrR8

      1. This looks cool. I think the video links might be broken though.

        1. Damn, didn’t mean to post it there! The youtube video is fine (skip to 33 minutes in by the way) the blog videos seem broken…

  10. Matt Radford

    8月 13, 2018 7:44 pm

    Will we see support for wrinklemaps via this workflow in the future?

    1. Johnathan Newberry

      8月 14, 2018 7:37 pm

      Currently, there are no plane to support wrinklemaps. I will make sure that it gets added to a list for suggested features. In the mean time, if you would like to add them to your project you can look at creating your own implementation of IUsesStreamReader to drive the wrinklemaps in a renderer’s material. Look at how BlendShapesController and CharacterRigController do this to control other attributes of the character.

  11. AdamsImmersive

    8月 13, 2018 6:21 pm

    Great! Can’t wait to experiment with this.

  12. Any plan to make it supports Android phone like Xiaomi Mi 8?

  13. Can this feature use off the shelf depth cameras? Or is it only with the phone’s depth camera?

    1. Johnathan Newberry

      8月 13, 2018 6:53 pm

      The Facial AR Remote makes use of Unity’s ARKit Plugin for facial data provided by iOS and ARKit from the iPhone X to drive the blend shapes in editor.

  14. Could it be ARCore support?

  15. saathvik tully

    8月 13, 2018 4:21 pm

    i hope to see this Facial AR feature on Android phones too :]

    i hate iphone and apple!!