Phonetische Sprachanimationen (aka. Lippensynchron)

  • #1, by SuroFriday, 07. January 2011, 20:35 15 years ago
    Ich wollte hier mal eine Disskusion starten um zu sehen ob und wie man Lippensynchrone Sprachanimation in Visionaire verwirklichen kann. Zwar kann ich so ein Feature noch nicht in Visionaire sehen, aber eventuell besteht ja hoffnung das es implementiert wird grin Dies ist vor allem sinnvoll wenn man, wie ich, plant nicht die Figuren sprechen zu lassen, sondern vergrößerte Portraits der Charaktere.

    Wenn ich von Lippensynchron spreche, meine ich selbstredent nicht, das für jeden gesprochenen Satz im Spiel nun eine eigene Animation gezeichnet werden muss. Stattdessen halte ich es für sinnvoll ein Set für die Buchstaben anzulegen. Wenn man sich nun mal beim Sprechen im Spiegel anschaut, wird man bemerken das es nichtmal notwendig ist ein Frame für jeden Buchstaben anzulegen. Bei Puzzle Agents (http://www.telltalegames.com/puzzleagent) z.b. hat es völlig ausgereicht nur für einige Buchstaben Frames zu zeichnen. Ich bin mir nicht mehr sicher welche das waren, aber ich gehe davon aus es waren unter anderem: A, O, I, M, N, S

    Alleine aus diesen Frames kann man schon eine Menge Sätze bilden:

    Hallo mein Name ist Hase. ALO MAIN NAMA IS ASA. Während es sich verdammt dähmlich liest, würde es in einer abgespielten Animation, zeitlich passend zum Ton, Sinn machen.

    Diese Technik ist nicht neu: http://www.youtube.com/watch?v=EKE4YExWcy8

    Die Frage ist allerdings ob und wie man soetwas in Visionaire umsetzen kann.

    Newbie

    36 Posts


  • #2, by BrokenClawSaturday, 08. January 2011, 01:12 15 years ago
    Ich halte das System wie du es Vorschlägst für etwas zu aufwendig. Allein schon weil die meisten Menschen nicht Lippenlesen können und sowieso die Synchronisation aus dem TV gewohnt sind. Bis jetzt habe ich auch noch keinen Zeichentrickfilm gesehen, bei dem die Lippen auch nur annähernd synchron verlaufen würden. Liegt allein schon daran, da die wenigsten Zeichentrickfilme aus dem deutschsprachigen Raum stammen und somit sowieso schon aus dem englischen sychronisiert wurden. Negativ aufgefallen ist es mir bis jetzt noch nicht, nicht einmal wenn rotoscoping eingesetzt wurde. Die meisten Animes sind sogar noch minimalistischer. Da gibt es meist nur die Zustände "Mund zu", "Mund viertel offen" "Mund halb offen" "Mund offen", die abwechselnd durchlaufen werden. An verschiedene Mundformen ist hier nicht zu denken. Auch hier: man merkt es die meiste Zeit nicht einmal. Das einzige was richtig stört ist, wenn der Charakter spricht und sich der Mund erst zu spät bewegt, oder der Charakter nicht spricht und trotzdem Lippenbewegungen erzeugt. Daran kränkeln zum Teil aber auch noch 3D-Spiele. (Und schlechte Synchros von Filmen. Oh wie ich das Hasse ...)

    Ich würde mir eine Sprachanimation folgendermaßen vorstellen: Während Ton vom Soundfile abgespielt wird, werden Sprites mit zufälligen Lippenformen auf den Bildschirm projeziert. Sobald im Soundfile eine Pause erreicht wird, das heißt der Ton unterhalb einer bestimmten Amplitude fällt (irgendein Hintergrundrauschen wird man wohl immer haben), wird das Standartbild mit versiegelten Lippen angezeigt. In der Engine kann man maximal den Wert dieser Amplitude einstellen, eventuell in Abhängigkeit zur Durchschnitssamplitude im Soundfile. Ich glaube so etwas wäre noch am einfachsten zu implementieren. Falls kein Soundfile vorhanden ist, könnte man immer noch den eingegebenen Text als Berechnungsgrundlage für die Unterbrechungen verwenden....

    Newbie

    0 Posts

  • #3, by SuroSaturday, 08. January 2011, 04:52 15 years ago
    Deine Herangehensweise ist auch nicht schlecht. Allerdings bin ich nach wie vor der Meinung das es einen Gewaltigen Unterschied macht ob eine Sprech-Loop-Animation abläuft, oder ob ein minimaler aufwand getrieben wurde das gesprochene Lippensynchron zu machen. Wobei man jetzt "Lippensynchron" nicht verwechseln soll mit der Lippensynchronität von 3D spielen. Dazu müsste man wesentlich mehr Frames hinzubasteln grin

    Ich glaube gerade in dem Space Quest Video sieht man sehr schön wie sehr es mit der Stimme das Schauspielers harmonisiert. Z.B. wenn Wilco "Aaaaah.... Yah?" sagt. Würde hier der animationsloop spielen, wäre die Wirkung irgendwie nicht so schön.

    Eine Idee die ich hätte wäre ein "spezielles" Sprachfenster. Es ist im Prinzip wie der jetzige Dialogeditor, allerdings mit der zusätzlichen Option eine Timeline zu aktivieren in der man manuel die verschiedenen Frames setzen kann. Wird ein Frame abgespielt bleibt er einfach solange aktiv bis ein anderer Frame kommt (eine Art Phonetische tabelle müsste natürlich dementsprechend angelegt werden, damit die engine versteht welcher Frame gespielt werden muss). Besser wäre natürlich eine Art Spracherkennung die minimal erkennt um welche Laute es sich handelt. Wie schon gesagt, es muss nicht perfekt sein, aber so ein kleines Detail kann einen gewaltigen Unterschied machen.

    Newbie

    36 Posts

  • #4, by BrokenClawSaturday, 08. January 2011, 13:34 15 years ago
    Es ist im Prinzip wie der jetzige Dialogeditor, allerdings mit der zusätzlichen Option eine Timeline zu aktivieren in der man manuel die verschiedenen Frames setzen kann.
    Und wie sähe dann der Workflow in dem Hasenbeispiel aus? Man müsste dann ja für jeden Laut den man Mappen will die Zeit herausfinden für diese dann einen Keyframe in Visionaire anlegen und diesem dann eine Mundform zuweisen. In deinem Hasenbeispiel wären das schon 20 Laute, wenn man die Pause mitzählt, für einen mickrigen Satz. Wieviel Zeit würde man brauchen, um all das einzugeben, für einen kleinen Satz, den man in 10s hingeschrieben hat? Und den ganzen Spaß kann man dann für die englische Synchro nochmal machen.... oO Das Resultat wäre zugegebenermaßen Qualitativ hochwertigst. Ist es aber auch den Aufwand wert? An welchen anderen Ecken müssen dann Abstriche gemacht werden, nur für Lipsync?

    Besser wäre natürlich eine Art Spracherkennung die minimal erkennt um welche Laute es sich handelt.
    Das wäre natürlich die beste Methode, auch da man sehr Fehlertollerant arbeiten könnte, anders als bei einer echten Spracherkennung. Trotzdem dürfte es abartig kompliziert sein schon so etwas zu programmieren und ich bezweifle auch, dass man ohne Fachwissen zu ordentlichen Ergebnissen kommt. Hab allerdings zu diesem Thema im Netz nichts großes gefunden. Anyone?

    Newbie

    0 Posts

  • #5, by mowrenSaturday, 08. January 2011, 15:26 15 years ago
    @BrokenClaw Beim timen von Animationsvideos wird es in der Tat auch noch per Hand so gemacht weil z.b. ein Plugin für AfterEffects, welches dies automatisch könnte mit 3.800€ einfach viel zu teuer ist wenn man kein Trickfilmstudio führt. Für die zehntausenden Soundfiles eines Spiels ist das natürlich keine Option.

    Ein Lautstärkenerkennung um den Mund bei Stille geschlossen zu halten würde der Atmosphäre eines Spiels schon helfen. Allerdings wirkt es immer noch "billig" im Vergleich zu echtem Lipsync.

    Es gibt einige Middlewarelösungen für z.b. die Unreal Engine die Lipsync in Echtzeit ermöglichen aber meist zuviel Rechenleistung fordern oder so teuer sind das es sich nicht lohnt. Es gibt allerdings auch Software zur Sprachanalyse von denen einige sogar für Animationen gedacht sind. Zu IBM Via Voice hatte ich gesehen das es eine freie API zum erkennen von 4 Phonemen gibt. Allerdings wüsste ich nicht ob sich das implementieren ließe und wie gut das wirklich aussehen würde. Die meisten Animationsstudios verwenden 8-12 Frames für die häufigsten Phoneme, bei 3D Animation um die 30. Software wie Lipsync Tool 4 ist in der Lage Soundfiles im Batch zu analysieren und die Timing Daten für eine Liste von Mundbewegungen zu erstellen. Man könnte also einmal alle Soundfiles abarbeiten lassen und könnte die Daten dann zur Animationssteuerung in Visionaire verwenden. Eine Echtzeitanalyse ist in kaum einem Adventure Notwendig aber echtes Lipsync wäre ein enormer Qualitätssprung.

    Allerdings sind weder Via Voice noch Lipsync Tool günstige Software. Also eigentlich nur für kommerzielle Spiele eine Option.

    Newbie

    10 Posts

  • #6, by SuroSaturday, 08. January 2011, 20:22 15 years ago
    Es gibt kostenlose lipsync tools, ich habe mir allerdings noch nicht die Lizenzen angekuckt:

    Papagayo: http://www.lostmarble.com/papagayo/index.shtml Papagayo is licensed under the GPL (GNU General Public License). This means that you are free to download the source code to Papagayo and make modifications to the program itself (as log as you can do a little Python programming). You are free to redistribute these modifications as long as you allow anyone else access to your modified code. Download the Papagayo source code below:

    Pamela: http://users.monash.edu.au/~myless/catnap/pamela3/index.html What it costs This software is freeware and open source, for personal, educational, corporate, and/or commercial use. Due to the GPL license of the sound toolkit used, PAMELA is also covered by the GPL license.

    Drüben beim AGS forum werden noch einige mehr genannt, allerdings sind die kostenpflichtig (alleine schon in der anschaffung).

    Edit: Hätte das hier doch lieber in "Verbesserungswünsche" reinschreiben sollen grin

    Newbie

    36 Posts

  • #7, by SuroSaturday, 08. January 2011, 20:46 15 years ago
    Eine andere Idee wie man das "einfacher" implementieren kann:

    Ähnlich wie die Untertitel einer DVD:

    1
    00:00:13,637 --> 00:00:15,036
    Thank you! Thank you, thank you!

    2 00:00:15,117 --> 00:00:17,756 ROBBIE: That's an incredibly bloody stupid thing to do.

    3 00:00:17,877 --> 00:00:19,196 - BRIONY: I wanted you to save me. - Don't you know

    4 00:00:19,277 --> 00:00:20,869 how easily you could have drowned?

    5 00:00:21,197 --> 00:00:23,916 - You saved me. - Stupid child!

    Könnte man eine txt datei schreiben:

    
    1
    00:00:00,920
    M.png

    2 00:00:01,230 O.png

    3 00:00:02,329 M.png

    Anstatt einer Timeline ladet man einfach die Sounddatei in die Engine. Wenn eine TXT datei mit selben Namen exisitiert, wird sie verwendet um den lipsync zu generieren. Wenn es nicht existiert wird ein normaler sprachloop benutzt.

    Diese datei kann eventuell mit so einem lipsync tool generiert werden. Aber ich glaube dass man dazu im sourcecode herumpfuschen müsste.

    Newbie

    36 Posts

  • #8, by mowrenSaturday, 08. January 2011, 23:15 15 years ago
    Papageyo und Pamala funktionieren leider nur richtig für englische Sprachanalyse. Mit Deutsch bekommt man zwar halbwegs brauchbare Resultate aber z.b. für Französisch oder Polnisch sind die Programme leider nahezu unbrauchbar. Es fehlen die Analysekriterien für andere Sprachen. Dennoch ist es immer noch besser als kein Lipsync.

    Die Überlegung mit der externen Datei mit den Timingdaten ist auch meiner Meinung nach der sinnvollste Weg. Eine Editoroberfläche für die Einstellungen wäre wohl nur umständlich und auch nicht sonderlich effektiv nutzbar. Allerdings sollte eher die Framenummer einer Talkanimation angesprungen werden anstatt eine Grafik zu referenzieren. Dann wäre es flexibler für verschiedene Charaktere nutzbar weil dann einfach die aktive Animation gesteuert werden könnte. Man müsste sich dann auch nur einmal für eine Reihenfolge der Phoneme in der Talkanimation entscheiden, die dann beibehalten wird.

    Ich hatte mich aber gerade gefragt ob das ganze mit etwas Lua Script nicht jetzt schon funktionieren könnte. Leider kann man wohl die Pausenlänge eines Frames nicht scripten. Ständig VAnimationCalledTime abzufragen um dann nach der, aus einer externen Lua Table ausgelesenen Dauer den Frame zu wechseln belastet nur unnötig das System. Den Dateinamen aus VTextLanguageSound des aktuellen Texts sollte man auch bekommen können, die aktuelle Talkanimation sowieso.

    Newbie

    10 Posts