- Beschreibung eines Mods aus dem Jahr 2021, der Deus Ex 1-Lipsync und Blinzelanimationen verbessert
- Der Entwickler stellte fest, dass die Lipsync-Implementierung des Originalspiels schon bei der Auslieferung nicht korrekt funktionierte
- Es wurde analysiert, dass auch in Deus Ex ein Verfahren ähnlich wie in Valves Half-Life 2 zur Phonem-Extraktion und Mundform-Zuordnung verwendet wird
- Durch Korrekturen an einer fehlerhaften Framerate-Prüfung und an Problemen beim Blending-Timing im Unrealscript-Code konnte eine natürlichere Animation umgesetzt werden
- Für eine perfekte Umsetzung muss zusätzlich das Problem der Phonem-Aktualisierungsfrequenz gelöst werden
Einführung und Hintergrund
- Dieser Mod ist ein Projekt zur Verbesserung des Lipsyncs von Charakterdialogen und der Blinzelanimationen in Deus Ex 1
- Im Originalspiel waren Lipsync-Verhalten und Blinzeln seit dem Release fehlerhaft implementiert
- Hier werden die zuvor auf Twitter veröffentlichten Arbeiten gesammelt und vorgestellt
- Der Download des Mods wird über einen separaten Link (ModDB) angeboten
Untersuchung der bisherigen Lipsync-Implementierung
- Während des Spielens wurden Probleme beim Wechsel der Mundformen sowie ungewöhnliche Animationseffekte erkannt
- Verweis auf ein Interview mit Chris Norden (Deus-Ex-Entwickler): Das frühe Lipsync-System war ausgefeilt, wurde aber aus Performance-Gründen vereinfacht
- Es wurde untersucht, wie weit die Implementierung im Unrealscript reicht und was sich daran korrigieren lässt
- Der Quellcode liegt nicht vor, nur die Skripte sind zugänglich
Funktionsweise des Lipsyncs
- Der Autor hatte bereits Erfahrung durch die frühere Analyse des Lipsync-Systems von Half-Life 2
- Valve extrahiert Phoneme aus Sprachdateien, hängt die Sprachinformationen an das Ende der
.wav-Datei an und schaltet zur Laufzeit entsprechend dem Timing die Mundformen (Viseme) um
- Dieses Verfahren hat den Vorteil, durch vorab extrahierte Phoneme die Last zur Laufzeit zu reduzieren
Strukturelle Probleme von Deus Ex
- In Deus Ex werden Phoneminformationen offenbar nirgends gespeichert, weshalb sie möglicherweise zur Laufzeit in Echtzeit extrahiert werden
- Die Analyse von Unrealscript zeigt, dass statt Skelettanimationen Vertex-Animationen verwendet werden; verfügbar sind insgesamt 7 Mundformen und nur 1 Blinzelanimation
- Aus dem externen Audiosystem wird
nextphoneme auf A, E, F, M, O, T, U oder X (geschlossener Mund) gesetzt, und das Charakterskript wechselt daraufhin die Mundform
Bugs und Verbesserungsarbeiten
- Im Originalcode arbeitete die Logik zur Framerate-Erkennung verkehrt herum, sodass die Mundformen selbst bei hoher Framerate sofort umgeschaltet wurden
- Die Blend-Dauer (
tweentime) war mit 0,1 Sekunden zu kurz eingestellt, wodurch natürliche Übergänge verloren gingen
- Die Framerate-Prüfung wurde ignoriert und
tweentime deutlich länger auf 0,35 Sekunden gesetzt
- Dadurch wurde der Lipsync spürbar weicher verbunden
Schließen des Mundes und Blinzelverhalten
- Es wurde zusätzliche Logik eingefügt, damit auch beim Schließen des Mundes nach dem Ende einer Zeile ein natürliches Blending angewendet wird
- Die Animationslogik prüfte zuvor nur
bIsSpeaking, wurde aber so verbessert, dass die Lipsync-Animation immer aktiv bleibt
- Auch die Geschwindigkeit des Blinzelns wurde angepasst, damit sie für Nutzer kontinuierlich wahrnehmbar ist
Strukturelle Grenzen und Schwächen
- Bei der Aktualisierungsfrequenz von
nextphoneme gibt es eine strukturelle Grenze: Sie ist unregelmäßig und wird nicht bei jedem Tick aktualisiert
- Dadurch ist selbst bei korrekt angewendetem Blending kein perfektes Lipsync-Erlebnis möglich
- Würde die Aktualisierung mit konstanter Frequenz erfolgen, könnte die Blend-Geschwindigkeit passend optimiert werden; in der aktuellen Struktur ist das jedoch nicht möglich
- Zusätzlich gibt es ineffizienten Code, etwa weil dieselbe Logik in NPC- und Spielercharakter-Klassen doppelt implementiert ist
Beispielcode der finalen Änderungen
- Im unteren Teil des Artikels wird der vollständige Code der verbesserten Lipsync-Funktion bereitgestellt
- Die wichtigsten Verbesserungen: Framerate-Prüfung ignorieren,
tweentime stark erhöhen, sanftes Schließen des Mundes nach Dialogende sowie Anpassung von Frequenz und Geschwindigkeit des Blinzelns
Fazit
- Mit diesem Mod lassen sich deutlich natürlichere und gegenüber dem Original klar verbesserte Lipsync- und Blinzelanimationen erleben
- Aufgrund struktureller Einschränkungen ist perfekter Lipsync schwierig, aber dies ist derzeit die bestmögliche zugängliche Lösung
Noch keine Kommentare.