AIを活用した詳細な3Dアバターと会話します。大規模言語モデル (LLM)、テキスト読み上げ (TTS)、Unity ゲーム エンジン、リップ シンクを使用して、キャラクターに命を吹き込みます。
ビデオではキャラクターに「マイケル・ジョーダンとは誰ですか?」と質問しています。アバターは少し遅れて質問に「答えます」。前のメッセージをコンテキストとして使用すると、全体の会話を行うことができます。髪の物理学とまばたきに注目してください。
Web ブラウザからトリガーされるリモート イベントのショーケース。各 VFX を選択すると、それぞれのパーティクル システムが再生されます。よく使用されるのは、誰かが Twitch などで 5 ドルを寄付したときの花火のパーティクル エフェクトです。雨の VFX では、液滴がキャラクター (髪の毛の上部) と相互作用するときに飛沫や跳ね返りが発生することに気づくこともあります。
中心となる機能は、「話す」カスタム 3D モデルです。音声を発し、Oculus のリップシンク ライブラリを使用して (できれば説得力のある) 印象を与えます。機能セットは次のとおりです。
このフローは特定の実装に依存しません。 LLM、TTS、または適切な 3D モデル (特定のシェイプ キーが必要) を自由に組み合わせて使用できます。お気づきかと思いますが、このアーキテクチャにより究極の柔軟性が得られます。ご想像のとおり、前の文は控えめな表現です。
音声認識はなく、プロンプトはテキストのみです。 Whisper Fast を使用してこの機能を追加するのは簡単です。手順については以下を参照してください。 TL;DR GET または POST を
/prompt
エンドポイントに送信します。
ストリーミングと DeepSpeed で TTS を使用すると、通常 (プロンプトの送信から最初の音声まで) 4 秒未満の応答が得られます。十分に小さいので、会話はリアルタイムに感じられます。この時点でのボトルネックは LLM です。単一の GPU では、LLM と TTS を同時に実行することはできません (私は試しましたが、 tts.chunk_size
構成オプションに関する FAQ を確認してください)。まずすべてのテキスト トークンを生成し、それからサウンドを生成する必要があります。 TTS を CPU にオフロードしようとしましたが、これも困難です。
ストリーミングとは、生成されたテキストを小さなチャンクに分割することを意味します。チャンクのトランジションをマスクするために小さなクロスフェードがあります。最初のチャンクが小さいということは、最初の音が鳴るまでの時間が短いことを意味します。 DeepSpeed は、GPT 推論を高速化するための Microsoft ライブラリです。ストリーミングと DeepSpeed はどちらもオプションですが、推奨されます。
サーバーが AI モデルをロードする必要があるため、サーバー起動後の最初の質問は常に最も時間がかかります (~10 秒)。 Unity エディターで使用すると、ガベージ コレクションが一時停止することはほとんどありません (オーディオでは多少顕著です)。しかし、実稼働ビルドで実際に GC の問題が発生したとしたら、私は驚くでしょう。
面白いと言わざるを得ません。 Unity レンダリングと AI の両方に同じ GPU を使用すると、いくつかの問題が発生することが予想されました。 Android/iOS アプリは、Unity のコストを別のデバイスにオフロードするための簡単なフォールバックであることはわかっていました。しかし、私のハードウェアでは必要ありません。スムーズに動作するのはちょっと意外です。文句は言わないよ。また、Unity を 30FPS に制限しました (念のため)。
コントロール パネルに移動すると、各応答段階のタイミングが表示されます。 Unity の場合は、組み込みのプロファイラーを使用します。
INSTALL_AND_USAGE.md を参照してください。現在の機能を使用/拡張する方法についての説明も含まれています。
以下の質問は、このアプリの理念全般に関するものです。より詳しい使用方法に関する FAQ については、INSTALL_AND_USAGE.md を参照してください。
このアプリは、詳細な 3D アバターをレンダリングし、単一のコンシューマー グレードの GPU でいくつかのニュートラル ネットをリアルタイムで実行するテクノロジーをすでに持っていることを示しています。カスタマイズ可能で、インターネット接続は必要ありません。また、クライアント/サーバー アーキテクチャでも動作し、モバイル デバイスでのレンダリングなどを容易にすることもできます。
標準の Sintel モデルを使用することもできました。私は自分のキャラクターを作成しました。なぜなら、それができるからです。頂点のドラッグ、テクスチャのペイント、口のアニメーション化、髪の物理調整から「話す」3D アバターまで。自分で言うのもなんですが、とても楽しい娯楽です。
また、安定した拡散生成イメージからのテクスチャ再投影をテストしたいと考えていました。たとえば、ポジティブなプロンプトに「bald」を追加し、ネガティブなプロンプトに「hair」を追加できます。ワークフローが大幅にスピードアップします。残念ながら、再投影には鏡面ハイライトなどが含まれるため、手動で削除する必要があります。
Sintel には基本的なシェイプ キーがすでに備わっているため、Sintel をベース メッシュとして使用しました。特に口の各部分を制御するには、Blender 4.0 互換のドライバーを追加するだけです。これにより、口形素シェイプ キーの作成が簡単になりました。 Sintel のモデルは過去に何度も使用したことがあったので、このプロジェクトでは迷うことはありませんでした。
PS.私は談合が嫌いです。
おそらく、リアルタイムで安定した拡散によって生成された仮想キャラクターが「会話」しているのを見たことがあるでしょう。音声に基づいて口の部分がフレームごとに再生成された静止画像です。不安定であることがわかります。フレームごとに歯を拡散すると、歯は常に移動します。私は安定拡散をよく使いました。私も、体の一部(手!)がめちゃくちゃになっているのを見てきました。それは…歯で目立ちます。人気のある実装は SadTalker です。 Stable Diffusion Web UI 拡張機能もあります。
代わりに、私のアプリは何年もビデオゲームに使われてきた退屈な古いテクノロジーを使用しています。何百時間もの対話がある場合 (Baldur's Gate 3、Cyberpunk 2077 など)、すべてを手作業でアニメーション化することはできません。 JALI のようなシステムは、すべての主要タイトルで使用されています。
リアルタイムのアニメーション キャラクターが必要な場合、なぜ AI のみを使用するのでしょうか?世界最大のエンターテイメント部門で使用されているソリューションを探してみてはいかがでしょうか?少なくとも、img2img のベースとして使用できます。近年ではVTuberも登場し、日々限界に挑戦しています。これらの多くは、初音ミクのファンによって開発された技術に基づいています。
ネウロ様は人気バーチャルストリーマーです。これは、ビデオ ゲームをプレイし、その作成者である Vedal と会話する AI 駆動のキャラクターです。私のアプリがそれに対してどのようにスタックするかは次のとおりです。
このアプリには、他の人が作成したソースコード/アセットが含まれています。このような各インスタンスのサブフォルダーには、ライセンスを説明する専用の README.md があります。たとえば、私は「Oculus Lipsync」ライブラリのこのリポジトリのソース コードにコミットしましたが、これには独自のライセンスがあります (使用する前に同意してください)。 XTTS v2.0 も非営利目的でのみ使用できます。以下の段落は私が作成したものにのみ影響します。
GPLv3です。コピーレフトライセンスの一つです。 GPL/コピーレフト ライセンスは、ほとんどのプログラマーにとって、Blender または Linux カーネルでよく知られているはずです。これはかなり極端ですが、アプリの性質によって決まります。そして特に、考えられる用途の 1 つです。
最近、エディ・バーバック監督の『アップルの3500ドルの悪夢』を観ました。 3500ドル(!)のApple Vision Proのレビューです。提示されたアプリの 1 つは、ユーザーが AI の「ガールフレンド」とデートできるようにします。インターフェースの左側には安定した拡散生成イメージがあります (Seraphine LoRA を使用した PastelDiffusedMix の匂いがします?)。右側にテキストチャット。それはこの種のソフトウェアの最先端ですか?怠惰だ。
オフク。モバイル出会い系アプリは当初から論争に満ちていました。 Tinder and Co はリピーターを失いたくありません。機械学習にたどり着く前に、詐欺が蔓延しています。 Tinder には何百万もの AI プロフィールが存在します。そして、AIによるデートの場合、それはまったく別の問題です。
好きなモデルを使用できます。リップ シンクでは、ovrlipsync の口形素に対応するシェイプ キーを使用します。 「Enemies」技術デモにより、Unity はリアルな人間をレンダリングできることを証明しました。
個人的には、Unreal Engine のメタヒューマンを使用します。私の Unity コードを書き直す必要があります。この取り組みでは、最先端のリグと無料の高忠実度アセットを入手できます。メタヒューマンを Unity にインポートしてみることもできます。
何らかの理由で、Unity には人間のキャラクター用の組み込みパイプラインがありません。上にリンクされている「Enemies」シネマティックを作成したときでさえ、彼らはそれをコミュニティで実行可能なものにすることにわざわざ気を配りませんでした。これは、Autodesk Maya に合わせて調整されたカスタム ツール セットです。 4D クリップ ファイル形式については聞いたことがありません。プロジェクトリーダーおめでとうございます!不可解な決断だ。たとえば、ヘア レンダリングとシミュレーション用の HairFX があります。 TressFX をベースにしています。 TressFX を OpenGL、WebGL、および Vulkan に移植しました。それはよくわかります。それなのに、このアプリはヘアカードを使用しています。オリジナルの Sintel にはスプライン ベースのヘアがあり、これは単純なエクスポート操作であるはずです。これらのシステムには適切な文書が必要です。
結局のところ、ツールは単なるツールです。 Unity が優先順位をきちんとつけてくれればいいのにと思います。今日の市場では、人物をレンダリングすることが非常に重要だと思います。
はい、ただし、2D レンダリング技術に 3D エンジンを使用する理由を必ず理解してください。 Guilty Gear Xrd の場合、作者はフレームごとに法線を調整する必要がありました。今でも、3D はアニメファンから嫌われています。 (私の知る限り)唯一の例外は『宝石の国』です。そしてこれは、その驚くべきショット構成によって助けられています。
西洋のリアルタイム アニメーションを見ると、たとえば『ボーダーランズ』があります。フラットな照明、落ち着いた色、太いインク ラインを使用してコミック スタイルを再現します。 YouTube にはフラット シェーディングのチュートリアルがたくさんありますが、テクスチャのペイントが上手でなければ、それに近い結果は得られません。
落胆するように聞こえるかもしれませんが、自分の目標を考えてほしいと思います。他の人が VTubeStudio と Live2D を使用しているのには理由があります。 2D と 3D のモデルの作成は、その複雑さにおいて比較にならず、同じ芸術形式ですらない。
ライアット ゲームズ、フォルティシュ、ディズニー/ピクサー ドリームワークス、またはソニー ピクチャーズ アニメーションで働いている場合は、私が上で述べたことをすべて無視してください。
Unityのインストールサイズが小さくなりました。愛好家向けです。 C# スクリプトを作成してオブジェクトにドロップするだけで、新しい動作を追加できます。 UX はいたるところに存在する可能性がありますが、核となる部分では摩擦がありません。
Unity は使いやすさと反復時間の点で UE5 を上回っています。 UE5 に切り替える主な理由は、メタヒューマン (!)、バーチャル プロダクション、または業界標準のモーション キャプチャです。
LLM モデルによって異なります。デフォルトのgemma:2b-instruct
非常に小さい (30 億のパラメーター)。一貫した文章を作成することはできますが、それができることはほとんどありません。最先端の 7B モデル (量子化ありでも) またはそれ以上のモデルを使用できる場合は、それを使用してください。いつでも ChatGPT に交換することもできます。または、マルチ GPU セットアップを使用します。または、携帯電話で Unity を実行し、Raspberry PI で TTS を実行し、LLM 用にフル VRAM を使用します。
これは追加していません。 3D モデルに特別なケースを追加する必要があります。たとえば、リップシンク中に口をアニメーション化するのは難しいかもしれません。 3D アバターでの頬紅は、通常、シェーダー グラフで特別なテクスチャをブレンドすることによって行われます。
しかし、基本的な技術はすでに存在しています。テキスト内の感情を検出したい場合は、LLM を使用して感情分析を行うことができます。また、WebSocket を使用してイベントをトリガーする技術も追加しました。 ATM パーティクルエフェクトを開始しています。 C# コードの半分は、シェイプ キーのトリガーを処理します。点滅は数秒ごとに呼び出される機能です。 3D モデルでインタラクションを作成したら、いつでも開始できます。ただ作成するのに時間がかかります。
はい、試してみました (このリポジトリには追加されていません)。当初の計画では、レンダリングされたフレームを安定した拡散生成イメージにスタイル転送することでした。私の簡単な実験によると、パフォーマンスの問題に加えて、最も単純な解決策には必要な品質や時間的安定性がありません。
VGG16/19 を実行するためのパフォーマンス予算がありません。これには、「芸術スタイルのニューラル アルゴリズム」[Gatys2015] や「リアルタイム スタイル転送と超解像度のための知覚損失」[Johnson2016] などの「オリジナル」テクニックは含まれません。ちらつきにも目を向ける人は誰もいませんでした。これらは静止画像のみを対象として設計されており、ビデオではありません。この問題を調査したさらなる研究がありました: [Jamriska2019]、[Texler2020]。
Unity も 2020 年に「ディープ ニューラル ネットワークを使用した Unity でのリアルタイム スタイル転送」というリアルタイム スタイル転送を試みたことを知っています。
その後はトランスフォーマーの領域に入ります(驚き!)。昨年の「Data AugmenTation with diffUsion Models (DATUM)」[CVPR-W 2023] では拡散が使用されました (またしても驚きです!)。最先端の技術を追跡したい場合は、Synthetic-to-Real Translation と呼ばれる Paperwithcode カテゴリがあります。
この時点で、これをアプリに組み込むのは無理な機能だと判断しました。
Two Minute Papers にも同様の技術を調査したエピソードがありました:「Intel のビデオ ゲームは現実のように見える!」。 Intel の「Photorealism Enhancement」[Richter2021] に基づいています。
はい、unity-project/Assets/Sintel 内の .fbx を確認してください。
私のプロジェクトにはすべて実用的な名前が付いています。今回はもっと個性的なものが欲しかったです。アイリスは紫がかった青の花です。虹彩は目の一部です。ぴったりだと思いましたか?特にCGキャラクターでは目と髪が問題になるので。