Sprechen Sie mit einem KI-gestützten, detaillierten 3D-Avatar. Nutzen Sie Large Language Model (LLM), Text-to-Speech (TTS), Unity-Game-Engine und Lippensynchronisation, um den Charakter zum Leben zu erwecken.
Im Video fragen wir die Figur: „Wer ist Michael Jordan?“. Der Avatar „antwortet“ die Frage nach einer kurzen Verzögerung. Wenn wir die vorherigen Nachrichten als Kontext verwenden, können wir ganze Gespräche führen. Beachten Sie die Haarphysik und das Blinzeln!
Präsentation von Remote-Ereignissen, die über einen Webbrowser ausgelöst werden. Nach Auswahl jedes VFX wird das jeweilige Partikelsystem abgespielt. Eine beliebte Verwendung ist ein Feuerwerkspartikeleffekt, wenn jemand 5 US-Dollar auf Twitch usw. spendet. Bei Regen-VFX bemerken Sie möglicherweise sogar Spritzer und Abpraller, wenn ein Tropfen mit dem Charakter interagiert (Oberseite der Haare).
Die Kernfunktionalität ist ein benutzerdefiniertes 3D-Modell, das „spricht“. Es sendet eine Stimme aus und nutzt die Lippensynchronisationsbibliothek von Oculus, um einen (hoffentlich überzeugenden) Eindruck zu hinterlassen. Hier ist ein Funktionsumfang:
Der Ablauf ist nicht auf eine bestimmte Implementierung angewiesen. Fühlen Sie sich frei, LLMs, TTSs oder andere geeignete 3D-Modelle zu kombinieren (erfordert spezielle Formschlüssel). Wie Sie vielleicht bemerken, bietet uns diese Architektur ultimative Flexibilität. Wie Sie sich vorstellen können, ist der vorherige Satz eine Untertreibung.
Es gibt keine Spracherkennung, die Eingabeaufforderung besteht nur aus Text. Es wäre trivial, diese Funktion mit Whisper Fast hinzuzufügen. Anweisungen finden Sie weiter unten. TL;DR sendet GET oder POST an
/prompt
Endpunkt.
Wenn ich TTS mit Streaming und DeepSpeed verwende, erhalte ich normalerweise eine Antwort von weniger als 4 Sekunden (vom Senden der Aufforderung bis zum ersten Ton). Es ist klein genug, dass sich die Konversation in Echtzeit anfühlt. An diesem Punkt ist der Engpass das LLM. Auf einer einzelnen GPU können Sie LLM und TTS nicht gleichzeitig ausführen (ich habe es versucht, schauen Sie sich die FAQ zur Konfigurationsoption tts.chunk_size
an). Wir müssen zunächst alle Text-Token generieren und erst dann den Ton erzeugen. Ich habe versucht, TTS auf die CPU auszulagern, aber auch das ist schwierig.
Streaming bedeutet, dass wir den generierten Text in kleinere Teile aufteilen. Es gibt eine kleine Überblendung, um Chunk-Übergänge zu maskieren. Ein kleiner erster Teil bedeutet eine schnelle Zeit bis zum ersten Ton. DeepSpeed ist eine Microsoft-Bibliothek zur Beschleunigung der GPT-Inferenz. Sowohl Streaming als auch DeepSpeed sind optional, werden aber empfohlen.
Die erste Frage nach dem Serverstart dauert immer am längsten (~10s), da der Server die KI-Modelle laden muss. Bei Verwendung im Unity-Editor kommt es selten zu einer Garbage-Collection-Pause (bemerkbar bei Audio). Aber es würde mich wundern, wenn im Produktions-Build tatsächlich ein GC-Problem auftreten würde.
Ich muss sagen, ich bin amüsiert. Ich habe mit einigen Problemen gerechnet, wenn ich dieselbe GPU sowohl für das Unity-Rendering als auch für die KI verwende. Ich wusste, dass eine Android-/iOS-App ein einfacher Ersatz wäre, um die Unity-Kosten auf ein separates Gerät zu verlagern. Aber es ist auf meiner Hardware nicht notwendig. Es ist etwas unerwartet, dass es reibungslos funktioniert. Ich werde mich nicht beschweren. Ich habe Unity auch auf 30 FPS beschränkt (nur für den Fall).
Wenn Sie zum Kontrollfeld gehen, sehen Sie die Zeitvorgaben für jede Reaktionsphase. Verwenden Sie für Unity den integrierten Profiler.
Siehe INSTALL_AND_USAGE.md. Es enthält auch Anweisungen zur Nutzung/Erweiterung aktueller Funktionen.
Die folgenden Fragen beziehen sich auf die allgemeine Philosophie dieser App. Weitere nutzungsorientierte FAQ finden Sie unter INSTALL_AND_USAGE.md.
Diese App zeigt, dass wir bereits über die Technologie verfügen, einen detaillierten 3D-Avatar zu rendern und ein paar neutrale Netze auf einer einzigen Consumer-GPU in Echtzeit auszuführen. Es ist anpassbar und benötigt keine Internetverbindung. Es kann auch in einer Client-Server-Architektur arbeiten, um beispielsweise das Rendern auf mobilen Geräten zu erleichtern.
Ich hätte das Standardmodell von Sintel verwenden können. Ich habe meinen eigenen Charakter geschaffen, weil ich es kann. Vom Ziehen der Eckpunkte über das Malen der Texturen, das Animieren des Mundes und das Anpassen der Haarphysik bis hin zu einem „sprechenden“ 3D-Avatar. Ein recht angenehmer Zeitvertreib, wenn ich das so sagen darf.
Ich wollte auch die Textur-Neuprojektion anhand eines stabilen, durch Diffusion erzeugten Bildes testen. Sie können beispielsweise „kahl“ zur positiven Eingabeaufforderung und „Haare“ zur negativen Eingabeaufforderung hinzufügen. Es beschleunigt den Arbeitsablauf erheblich. Leider müssen bei der Neuprojektion Glanzlichter usw. manuell entfernt werden.
Ich habe Sintel als Basisnetz verwendet, da es bereits über grundlegende Formschlüssel verfügt. Insbesondere um jeden Teil des Mundes zu kontrollieren – fügen Sie einfach Blender 4.0-kompatible Treiber hinzu. Dies machte es trivial, Mundbildschlüssel zu erstellen. Ich habe das Modell von Sintel in der Vergangenheit schon oft verwendet, daher war es für dieses Projekt eine Selbstverständlichkeit.
PS. Ich hasse Manipulationen.
Sie haben wahrscheinlich „sprechende“ in Echtzeit stabile, durch Diffusion erzeugte virtuelle Charaktere gesehen. Es handelt sich um ein statisches Bild, bei dem der Mundbereich bei jedem Bild basierend auf dem Ton neu generiert wird. Sie werden feststellen, dass es instabil ist. Wenn Sie die Zähne in jedem Bild verteilen, verschieben sie sich ständig. Ich habe oft stabile Diffusion verwendet. Ich habe eine Menge verstümmelter Körperteile (Hände!) gesehen. Es macht sich...an den Zähnen bemerkbar. Eine beliebte Implementierung ist SadTalker. Es verfügt sogar über eine Stable Diffusion-Web-UI-Erweiterung.
Stattdessen nutzt meine App langweilige alte Technologie, die es schon seit Jahren in Videospielen gibt. Wenn Sie Hunderte von Stunden an Dialogen haben (Baldur's Gate 3, Cyberpunk 2077 usw.), können Sie nicht alles von Hand animieren. Systeme wie JALI werden in jedem großen Titel verwendet.
Wenn Sie in Echtzeit animierte Charaktere wünschen, warum sollten Sie dann ausschließlich KI verwenden? Warum nicht nach Lösungen suchen, die im größten Unterhaltungssektor der Welt zum Einsatz kommen? Zumindest könnten Sie es als Basis für img2img verwenden. In den letzten Jahren hatten wir auch VTuber, die jeden Tag neue Maßstäbe setzen. Vieles davon basiert auf Technologien, die von Hatsune Miku-Fans entwickelt wurden.
Neuro-sama ist ein beliebter virtueller Streamer. Es handelt sich um einen KI-gesteuerten Charakter, der Videospiele spielt und mit seinem Schöpfer Vedal spricht. So schneidet meine App dagegen ab:
Diese App enthält Quellcode/Assets, die von anderen Personen erstellt wurden. Jede dieser Instanzen verfügt in ihrem Unterordner über eine eigene README.md, in der die Lizenzierung erläutert wird. Ich habe mich beispielsweise für diesen Repo-Quellcode für die „Oculus Lipsync“-Bibliothek entschieden, die über eine eigene Lizenz verfügt (akzeptieren Sie diese vor der Verwendung!). XTTS v2.0 ist ebenfalls nur für die nichtkommerzielle Nutzung bestimmt. Die folgenden Absätze betreffen nur Dinge, die von mir erstellt wurden.
Es ist GPLv3. Es handelt sich um eine Copyleft-Lizenz. GPL/Copyleft-Lizenzen dürften den meisten Programmierern aus Blender oder dem Linux-Kernel bekannt sein. Es ist ziemlich extrem, aber es hängt von der Natur der App ab. Und vor allem eine der möglichen Verwendungsmöglichkeiten.
Kürzlich habe ich „Apple's $3500 Nightmare“ von Eddy Burback gesehen. Es ist eine Rezension des 3500 $ (!) teuren Apple Vision Pro. Eine der vorgestellten Apps ermöglicht es dem Benutzer, mit einer KI-„Freundin“ auszugehen. Die Schnittstelle hat auf der linken Seite ein stabiles, durch Diffusion erzeugtes Bild (ich rieche PastelDiffusedMix mit Seraphine LoRA?). Text-Chat rechts. Ist das der Stand der Technik für diese Art von Software? Es ist faul.
Ofc. Die mobilen Dating-Apps waren von Anfang an voller Kontroversen. Tinder und Co. wollen keine Stammkunden verlieren. Betrug in Hülle und Fülle, bevor wir überhaupt zum maschinellen Lernen kommen. Es gibt Millionen von KI-Profilen auf Tinder. Und beim reinen KI-Dating ist das ein ganz anderes Problem.
Sie können jedes beliebige Modell verwenden. Die Lippensynchronisation verwendet Formschlüssel, die den Mundbildern von ovrlipsync entsprechen. Mit der Tech-Demo „Enemies“ hat Unity bewiesen, dass es realistische Menschen darstellen kann.
Persönlich würde ich den Metahuman der Unreal Engine verwenden. Sie müssten meinen Unity-Code neu schreiben. Für diesen Aufwand erhalten Sie ein hochmodernes Rig und ein kostenloses High-Fidelity-Asset. Sie könnten auch versuchen, Metahuman in Unity zu importieren.
Aus irgendeinem Grund verfügt Unity nicht über eine integrierte Pipeline für menschliche Charaktere. Selbst bei der Erstellung des oben verlinkten Films „Enemies“ haben sie sich nicht die Mühe gemacht, ihn für die Community nutzbar zu machen. Es handelt sich um einen benutzerdefinierten Satz von Tools, die auf Autodesk Maya zugeschnitten sind. Und ich habe noch nie vom 4D-Clip-Dateiformat gehört. Herzlichen Glückwunsch an den Projektleiter! Es ist eine verblüffende Entscheidung. Sie haben zum Beispiel ihren HairFX für die Haardarstellung und -simulation. Es basiert auf TressFX. Ich habe TressFX auf OpenGL, WebGL und Vulkan portiert. Ich verstehe es ganz gut. Und doch verwendet diese App Haarkarten! Original Sintel hat Splines-basiertes Haar, dies hätte ein einfacher Exportvorgang sein sollen. Diese Systeme benötigen eine ordnungsgemäße Dokumentation.
Letztendlich ist das Werkzeug nur ein Werkzeug. Ich wünschte, Unity hätte ihre Prioritäten geordnet. Ich würde sagen, dass es auf dem heutigen Markt sehr wichtig ist, Menschen zu vermitteln.
Ja, aber stellen Sie sicher, dass Sie verstehen, warum Sie eine 3D-Engine für eine 2D-Rendering-Technik verwenden möchten. Für Guilty Gear Xrd mussten die Autoren die Normalen pro Frame anpassen. Auch heute noch ist 3D bei Anime-Fans verpönt. Die einzige Ausnahme (soweit ich weiß) ist Land of the Lustrous. Und dazu trägt auch die erstaunliche Bildkomposition bei.
Wenn wir uns westliche Echtzeitanimationen ansehen, haben wir zum Beispiel Borderlands. Es reproduziert den Comic-Stil mit flacher Beleuchtung, gedämpften Farben und dicken Tintenlinien. Auf YouTube gibt es unzählige Tutorials für flache Schattierungen, aber Sie werden kein realistisches Ergebnis erzielen, wenn Sie nicht gut im Malen von Texturen sind.
Auch wenn das vielleicht entmutigend klingt, möchte ich, dass Sie über Ihr Ziel nachdenken. Es gibt einen Grund, warum alle anderen VTubeStudio und Live2D verwenden. Das Erstellen von Modellen für 2D und 3D ist unvergleichlich komplex, es ist nicht einmal die gleiche Kunstform.
Ignorieren Sie alles, was ich oben gesagt habe, wenn Sie für Riot Games, Fortiche, Disney/Pixar DreamWorks oder Sony Pictures Animation arbeiten.
Die Unity-Installationsgröße ist kleiner. Es richtet sich an Bastler. Sie können einfach ein C#-Skript schreiben und es auf einem Objekt ablegen, um neues Verhalten hinzuzufügen. Während die UX allgegenwärtig sein kann, ist sie in Kernaspekten reibungslos.
Unity übertrifft UE5 hinsichtlich Benutzerfreundlichkeit und Iterationszeit. Der Hauptgrund für den Wechsel zu UE5 wäre eine metahumane (!), virtuelle Produktion oder ein branchenübliches Mocap.
Hängt vom LLM-Modell ab. Der Standardwert gemma:2b-instruct
ist winzig (3 Milliarden Parameter). Es kann zusammenhängende Sätze bilden, aber so weit kann es meistens auch gehen. Wenn Sie ein hochmodernes 7B-Modell (sogar mit Quantisierung) oder etwas Größeres verwenden können, entscheiden Sie sich dafür. Sie können es jederzeit auch gegen ChatGPT austauschen. Oder verwenden Sie ein Multi-GPU-Setup. Oder führen Sie Unity auf einem Mobiltelefon aus, TTS auf einem Raspberry PI und verfügen Sie über den vollen VRAM für LLM.
Ich habe das nicht hinzugefügt. Es müssten Sonderfälle zum 3D-Modell hinzugefügt werden. Beispielsweise kann es schwierig sein, den Mund während der Lippensynchronisation zu animieren. Das Erröten mit 3D-Avataren erfolgt normalerweise durch das Mischen spezieller Texturen in einem Shader-Diagramm.
Doch die grundlegende Technologie ist bereits vorhanden. Wenn Sie Emotionen in Texten erkennen möchten, können Sie LLM zur Stimmungsanalyse verwenden. Ich habe auch die Technologie hinzugefügt, um die Ereignisse mithilfe von WebSocket auszulösen. ATM löst einen Partikeleffekt aus. Die Hälfte des C#-Codes befasst sich mit dem Auslösen von Formschlüsseln. Blinken ist eine Funktion, die alle paar Sekunden aufgerufen wird. Sobald Sie eine Interaktion am 3D-Modell erstellt haben, können Sie diese jederzeit starten. Die Erstellung ist einfach zeitaufwändig.
Ja, ich habe es versucht (nicht zu diesem Repo hinzugefügt). Der ursprüngliche Plan bestand darin, den gerenderten Rahmen stilistisch in ein stabiles, durch Diffusion erzeugtes Bild zu übertragen. Aus meinen schnellen Experimenten geht hervor, dass die einfachsten Lösungen neben Leistungsproblemen nicht die erforderliche Qualität oder zeitliche Stabilität aufweisen.
Wir haben kein Leistungsbudget für die Durchführung von VGG16/19. Dies schließt die „originalen“ Techniken wie „A Neural Algorithm of Artistic Style“ [Gatys2015] oder „Perceptual Losses for Real-Time Style Transfer and Super-Resolution“ [Johnson2016] aus. Keiner von ihnen sah auch ein Flackern an. Sie wurden nur für statische Bilder und nicht für Videos entwickelt. Es gab weitere Arbeiten, die sich mit diesem Problem befassten: [Jamriska2019], [Texler2020].
Ich weiß, dass Unity im Jahr 2020 auch die Echtzeit-Stilübertragung versucht hat: „Echtzeit-Stilübertragung in Unity mithilfe tiefer neuronaler Netze“.
Danach befinden wir uns im Transformers-Territorium (Überraschung!). Letztes Jahr nutzte „Data AugmenTation with diffUsion Models (DATUM)“ [CVPR-W 2023] Diffusion (wieder Überraschung!). Wenn Sie den neuesten Stand der Technik verfolgen möchten, gibt es die Kategorie „Artikel mit Code“ namens „Synthetic-to-Real Translation“.
An diesem Punkt bin ich zu dem Schluss gekommen, dass es ein Feature-Creep war, zu versuchen, dies in die App zu integrieren.
Es gab eine Folge von Two Minute Papers, in der es um ähnliche Techniken ging: „Intels Videospiel sieht aus wie Realität!“. Basierend auf Intels „Enhancing Photorealism Enhancement“ [Richter2021].
Ja, überprüfen Sie .fbx in Unity-Project/Assets/Sintel.
Alle meine Projekte haben nützliche Namen. Dieses Mal wollte ich etwas Deutlicheres. Iris ist eine lila-blaue Blume. Iris ist ein Teil des Auges. Schien passend? Vor allem, da Augen und Haare bei CG-Charakteren die Probleme darstellen.