Haare sollten schwingen, nicht zu einem Tentakel werden
Von Oleg Sidorkin, CTO und Mitgründer von Cinevva

Eine Figur dreht den Kopf. Ihr Haar sollte einen Moment später folgen, ein wenig schwingen und dann zur Ruhe kommen. Unsere erste Version tat etwas anderes: Die Spitzen rollten sich nach unten ein, als wollte die Frisur zu einem Tentakel werden.
Die Knochen behielten ihre Längen. Die Simulation blieb stabil. Die von uns beobachteten Messwerte bestanden die Prüfungen. Trotzdem sah die Bewegung falsch aus.
Dies ist der nächste Teil unseres Auto-Riggers: Haare erhalten eigene Gelenke und Sekundärbewegungen. Wir begannen mit einem einfachen Test-Mesh und wechselten dann zu zwei echten Avataren. Das veränderte sowohl die Implementierung als auch unsere Messmethoden.
Zuerst einen echten Pferdeschwanz neu aufbauen
Seed-san hat ein separates Pferdeschwanz-Mesh. Für diesen Test löschten wir die ursprünglichen Skin-Gewichte dieses Meshes, befestigten es am Kopf und ließen unseren geometrischen Fitter eine neue Haarkette mit sechs Gelenken erstellen. Der Rest der Figur behielt sein ursprüngliches Skinning. Auch die sieben kurzen Pony-Ketten behielten ihre von Künstlern erstellten Gewichte.
Der Fitter folgt der verbundenen Haaroberfläche von ihrem Ansatz nach außen, platziert Gelenke entlang dieses Verlaufs und überblendet die Einflüsse benachbarter Gelenke. Ein schmales Band an der Befestigungsstelle bleibt fixiert. Dies ist ein Workflow für ausgewählte Haarpartien: Wir geben an, welches Mesh das Haar ist. Das System erkennt nicht automatisch jede Strähne einer beliebigen Figur.
Probieren Sie den Pferdeschwanz unten aus. Mit Haarbewegung können Sie in einer einzigen Vorschau zwischen dem früheren und dem verbesserten Solver wechseln. Wählen Sie Bewegen, dann auspendeln, um zu beobachten, wie das Haar zur Ruhe kommt. Halten Sie die Wiedergabe an, um eine Pose zu untersuchen, oder ziehen Sie die Vorschau, um die Kamera um die Figur zu bewegen. Die Auswahl Animation bietet alle 260 universellen Animationen. Wählen Sie einen Clip, um den ganzen Körper in Bewegung zu sehen; mit Bildausschnitt → Haar-Nahaufnahme richtet sich die Kamera wieder auf die Strähnen. Kopfdrehungstest kehrt zum kontrollierten Vergleich zurück.
Wir haben Seed-sans separaten Rucksack und Roboterarm in diesen Ansichten ausgeblendet, damit der Pferdeschwanz vollständig sichtbar ist. Körper, Haargeometrie, Skin-Gewichte und Animation bleiben durch diese Sichtbarkeitsänderung unverändert; dies ist keine Korrektur der Rucksackkollision.
Die universelle Animationsbibliothek ausprobieren
Die Animationsauswahl verwendet denselben World-Space-Retargeter wie der Rigger und die Runtime von Cinevva. Wir ordnen die VRM-Humanoid-Metadaten jedes Avatars den vom Retargeter erwarteten Gelenknamen zu, wählen den Körper-Skin statt eines früheren reinen Haar-Skins aus und erfassen die nicht animierte Körperpose, bevor die Haardemonstration beginnt. So verhindern wir, dass ein gedrehter Kopf oder eine geduckte Haltung als Ruhepose der Figur behandelt wird, wenn ein anderer Clip ausgewählt wird.
Ein ausgewählter Clip wird aus der gemeinsamen Universal-Bibliothek abgerufen, einmal retargetet und auf der ausgewählten Figur abgespielt. Horizontale Fortbewegung wird entfernt, damit die Figur im Bild bleibt. In diesen Demos werden alle ausgewählten universellen Animationen als Schleife abgespielt, auch Aktionen, die ursprünglich als einmalige Wiedergabe gekennzeichnet waren. Neu starten spielt die ausgewählte Aktion erneut ab. Die Haarbewegung wird nach der Körperanimation berechnet.
Wir haben alle 260 Clips auf jeden Avatar retargetet: 520 Ausgaben, ohne fehlende erforderliche Körpergelenke, ungültige numerische Tracks oder auf Haargelenke zielende Körperanimations-Tracks. Außerdem haben wir Idle, Walk, Jump, Back Flip, Dance, Crouch Forward und Sitting Idle abgetastet, Körperbewegung und Synchronisierung geprüft und gerenderte Posen untersucht. Diese Prüfungen belegen ein brauchbares Retargeting auf diesen beiden Rigs, nicht visuelle Perfektion in jedem Frame. Ergebnisse der Retargeting-Prüfung.
Auch Kleidung benötigt ihre vorgesehenen Steuerungen. Dieses VRM-Beispiel verwendet Aim- und Twist-Constraints für Ärmel und Gliedmaßenverformung; werden nur Humanoid-Gelenke animiert, bleiben die Ärmel in ihrer ursprünglichen Pose. Die Demo lädt diese Steuerungen nun mit dem offiziellen VRM-Modul für Node-Constraints und aktualisiert sie nach der Körperanimation, aber vor der Haarsimulation. Dadurch bleibt das mitgelieferte Kleidungs-Rig erhalten; eine Stoffsimulation wird nicht hinzugefügt.
Die vollständige Bibliothek steht zur Prüfung bereit, doch die nachfolgenden Messungen von Clipping und Dehnung verwenden weiterhin die kontrollierte Kopfdrehungssequenz. Sie belegen nicht, dass das Haar bei jedem Tanz, Sturz oder Salto kollisionsfrei bleibt.
Der Fehler lag in der Ruheform
Eine Gelenkkette benötigt eine Richtung, in die sie zurückkehren soll. Unser früherer Solver berechnete diese Richtung relativ zum bereits gebogenen darüberliegenden Gelenk. Eine kleine Auslenkung am oberen Ende veränderte daher die Ruherichtung des nächsten Segments, was wiederum die Richtung des darauffolgenden Segments änderte.
Diese Akkumulation erzeugte die Krümmung. Dass jeder Knochen seine korrekte Länge behielt, konnte sie nicht verhindern.
Der neue Solver speichert den ursprünglichen Bogen der Frisur im Koordinatensystem des sich bewegenden Kopfes. Jedes Segment besitzt weiterhin Trägheit und Dämpfung, doch seine Rückstellrichtung stammt aus dieser ursprünglichen Form. Der Kopf kann sich drehen, während das Haar verzögert folgt; diese Verzögerung wird nicht länger zu einer neuen Ruhekurve für alle darunterliegenden Segmente.
Außerdem haben wir die vorhandenen Künstler-Rigs etwas straffer eingestellt und die Dämpfung erhöht. Der Vorher-nachher-Vergleich umfasst auch diese Abstimmung, nicht nur die Änderung des Koordinatensystems.
Ein bewegliches Ziel, das den ursprünglichen Bogen bewahrt
Für Segment
Jeder Schritt kombiniert die Anziehung zu diesem Ziel mit Schwerkraft und exponentieller Dämpfung:
Dabei ist
Anschließend setzen wir den Endpunkt wieder in seinen festen Abstand
Diese Projektion bewahrt die Knochenlänge. Für sich allein bewahrt sie nicht jede Dreieckskante und hält die Strähne auch nicht außerhalb der Kleidung. Wenn die Kandidatenrichtung degeneriert, verwendet die Implementierung die Ruherichtung.
Anschließend eine vollständige Frisur ausprobieren
Der zweite Avatar, ein pixiv-Beispiel, besitzt zwölf Haarketten und 12.868 Haar-Vertices. Hier behalten wir die Gelenke und Gewichte des Künstlers bei und ersetzen das Verhalten der Sekundärbewegung. Dieses Beispiel demonstriert die Animation einer vorhandenen Frisur, nicht die automatische Rekonstruktion ihres zusammenhängenden Haar-Meshes.
Betrachten Sie die Spitzen von der Seite und von hinten. Die verbesserte Version erhält mehr von der beabsichtigten Silhouette und bewahrt zugleich die Bewegung. Bei der früheren Version ziehen sich die Spitzen zu einer deutlicheren Krümmung zusammen.
Echte Modelle machten außerdem einen unauffälligeren Fehler sichtbar: Einige kurze Ponysträhnen enden in einem Node, der selbst kein geskinntes Bone ist. Diese Ketten hatten wir übersprungen. Der Importer akzeptiert diese Endpunkte nun und liest ausdrücklich benannte Kopfhaarketten aus den Spring-Metadaten von VRM 1. Außerdem liest er kugel- und kapselförmige Kollisions-Proxys sowie Kollisionsradien pro Gelenk ein.
Die Spring-Bone-Spezifikation von VRM stellt die Austauschstruktur bereit. Unsere Bewegung verwendet einen eigenen Solver mit abgestimmten Standardwerten und ist keine vollständige Implementierung sämtlicher VRM-Spring-Einstellungen. Die Demos verwenden pixivs MToon-Material-Loader für die vorgegebene Schattierung, die Texturen sowie die Konturen von Gesicht und Kleidung. Wir deaktivieren die aufgeweiteten Haar-Outline-Shells, da sie diese dünnen, geschichteten Oberflächen schneiden. Beide Bewegungseinstellungen verwenden identische Beleuchtung und Materialien. Die Spring-Bone-Implementierung von pixivs three-vrm ist eine etablierte Referenz für dieses Ökosystem.
Warum die vorderen Strähnen durch das Oberteil gingen
Die alleinige Prüfung der Gelenkpositionen übersah einen sichtbaren Fehler: Die Strähne zwischen zwei Gelenken konnte durch eine Schulter verlaufen, obwohl beide Enden außerhalb ihrer Kollisionsform lagen. Außerdem fanden wir einen Indexierungsfehler bei unserer Verarbeitung der VRM-Radien: Durch das Einlesen des Radius des nächsten Gelenks erhielt das letzte Segment einen Radius von null.
Die beiden vorderen Strähnen verwenden nun Kollisionsprüfungen entlang des gesamten Segments. Ein gemeinsamer Fitting-Durchlauf misst die sichtbare Körper- und Kleidungsgeometrie um die vorhandenen Kollisionsformen herum, wobei die Erweiterungsgrenzen von der Körpergröße abhängen. Reichweite, Position und Skin-Gewicht-Zuordnung der Strähnen bestimmen, welche Ketten Segmentprüfungen benötigen. Beide Avatare verwenden nun diesen Algorithmus ohne Regeln für bestimmte Modell- oder Strähnennamen. Die Ausweitung der Kollisionsprüfungen auf die gesamte Frisur erhöhte die Dehnung, weshalb Constraints an der Kopfbefestigung und kurze Ponysträhnen ihre ursprüngliche Behandlung beibehalten.
Wir haben das Ergebnis unabhängig von diesen Proxys am tatsächlich geskinnten Oberteil geprüft. Während eines Kopfdrehungszyklus verdeckte das Oberteil bei der früheren Bewegung bis zu 555 der 1.503 Vertices der vorderen Strähnen. Der automatische Fit verzeichnete sowohl bei 30 als auch bei 120 Frames pro Sekunde keine Treffer oberhalb des Messschwellenwerts von 1 mm. Die zuvor gemessene maximale Tiefe betrug 75,2 mm. Dies ist eine Verdeckungsmessung aus der Vorderansicht, keine Behauptung perfekter Oberflächenkollisionen und keine Garantie für jede Animation. Messdaten der vorderen Strähnen herunterladen.
Die Strähnen außerhalb des Oberteils zu halten, hat einen Nachteil: Die Dehnung der gestuften Frisur im 99. Perzentil stieg durch das Kollisions-Fitting von zuvor 17,1 % auf 18,0 %. Sie bleibt unter den 26,0 % des früheren Solvers; die nachfolgende Tabelle zeigt das aktuelle Ergebnis.
Die Kontaktreaktion erforderte eine separate Korrektur: Das Herausschieben einer Strähne aus der Kleidung wurde in Geschwindigkeit umgewandelt, was im nächsten Schritt zu einem sichtbaren Zurückfedern führte. Wir lösen Überschneidungen nun auf, ohne diesen Impuls hinzuzufügen, entfernen die in den Kontakt gerichtete Bewegung und erhalten die Gleitbewegung. Ein Regressionstest mit einer ruhenden Strähne prüft sowohl den Endpunkt- als auch den vollständigen Segmentkontakt: Die korrigierte Strähne bleibt an der Kontaktposition, statt weggeschleudert zu werden.
Kontakt entlang der Strähne, ohne Rückprallimpuls
Eine Haarverbindung und eine Kapselachse sind beides Liniensegmente. Ihre Punkte werden als
Damit die Positionskorrektur nicht zu einem Rückprall wird, rekonstruieren wir die Geschwindigkeit vor dem Herausschieben des Endpunkts aus dem Kontakt:
Nach einer Kontaktkorrektur ungleich null sei
Die tangentiale Bewegung bleibt erhalten, sodass die Strähne gleiten kann. Die Positionskorrektur selbst wird nicht zur Geschwindigkeit addiert. Anschließend wiederholt der Solver die Kontaktprojektion und entfernt die Geschwindigkeit entlang der radialen Richtung der Verbindung; interagierende Constraints können dennoch Restüberschneidungen hinterlassen.
Back Flip machte eine andere Abdeckungslücke beim neu aufgebauten Pferdeschwanz sichtbar: Sein separater Haar-Skin enthielt keine Rumpfknochen. Die Collider-Erkennung durchsucht nun die Körperhierarchie, und der gemeinsame Fitter fügt eine Rumpfkapsel hinzu, wenn die Abdeckung des Oberkörpers fehlt. Eine sechs Sekunden lange Back-Flip-Prüfung bei 30 und 120 Frames pro Sekunde fand kein abgetastetes Eindringen einer Pferdeschwanzverbindung in diese Kapsel. Dies ist eine Proxy-Kollisionsprüfung, keine Garantie gegen jedes Kleidungsdreieck; die ursprünglichen Verformungsprüfungen der Kopfdrehung werden weiterhin bestanden.
Schnelle Bewegungen erfordern außerdem Prüfungen zwischen den Posen. Die Demo aktualisiert Körper, Kleidungs-Constraints und Haare nun gemeinsam mit 120 Schritten pro Sekunde und prüft die Strähnen zwischen diesen Schritten gegen bewegliche Kugel- und Kapsel-Proxys. Beim Kontakt bleibt seitliches Gleiten erhalten, statt die gesamte Strähne anzuhalten, was andernfalls zum Festkleben der Haare führte. Walk und Back Flip erzeugten bei beiden Avataren in unseren viersekündigen Prüfungen bei 30, 60 und 120 Frames pro Sekunde identische abgetastete Haarpositionen und -geschwindigkeiten. Dies verarbeitet abgetastete Bewegungen primitiver Kollisionsformen; es ist keine kontinuierliche Kollisionserkennung gegen jedes Kleidungsdreieck, und weitere Constraints können weiterhin ungelöste Kontakte hinterlassen. Prüfungen von Framerate und Kontakt herunterladen. Diese Konsistenz hat ihren Preis. Im früheren Benchmark mit zwei Ansichten bei 60 Bildern pro Sekunde lag die gemessene Aktualisierungszeit im 95. Perzentil bei etwa 1 ms für Seed-san und 14–23 ms für das Modell mit mehreren Haarschichten, ohne Rendering. Diese Werte gelten für zwei Figuren, während die Live-Demo inzwischen nur eine rendert. Der Fall mit mehreren Haarschichten muss weiterhin optimiert werden; diese Desktop-Messungen erlauben keine Aussage über die Leistung auf Smartphones.
Die Anpassung verwendet weiterhin anatomische Annahmen und eine begrenzte Ausdehnung. Sie behält die vorgegebenen Einstellungen bei, wenn die erforderlichen Körperrollen oder Geometrien fehlen, und meldet nicht unterstützte Transformationen. Acht zusätzliche Prüfungen decken umbenannte Knochen, Skalierungsänderungen, Kleidungsdicke, ausgeblendete Accessoires und die Wiederherstellung der ursprünglichen Einstellungen ab. Diese beiden Avatare wurden zur Feinabstimmung verwendet; bevor das Ergebnis als allgemein zuverlässig gelten kann, müssen noch unbekannte Frisuren und Kleidungsstücke getestet werden.
Das Mesh messen, nicht nur das Skelett
Ein Knochen kann seine Länge beibehalten, während sich die Dreiecke um ihn herum dehnen. Deshalb haben wir während eines zwölfsekündigen Durchlaufs jede Kante der Haardreiecke gemessen: vier Sekunden Kopfbewegung, gefolgt von acht Sekunden Ausschwingen. Die Simulation läuft mit 120 Schritten pro Sekunde; die Mesh-Messungen werden 30-mal pro Sekunde erfasst.
Für jede Kante erfassen wir ihre stärkste Dehnung während des Durchlaufs. Die Tabelle zeigt das 99. Perzentil dieser Maximalwerte pro Kante: 99 % der Kanten blieben bei oder unter diesem Dehnungswert.
Für die Mesh-Kante
| Test mit realem Modell | Frühere Bewegung | Verbesserte Bewegung |
|---|---|---|
| Seed-san: neu aufgebauter Pferdeschwanz plus ursprünglicher Pony | 8,0 % | 5,0 % |
| Seed-san: ursprüngliches Haar-Rig | 7,6 % | 5,1 % |
| pixiv: ursprüngliches Rig für mehrschichtiges Haar | 26,0 % | 18,0 % |
Auch die am stärksten betroffene einzelne Kante ist relevant. Beim Modell mit mehreren Haarschichten verbesserte sie sich von 102,7 % auf 70,8 % Dehnung – ein verbleibender Fehler, den das Perzentil nicht verbergen darf. Bei Seed-san verbesserte sich die am stärksten betroffene Kante in beiden Fällen von 35,2 % auf 27,8 %. Dies sind Messungen an Entwicklungsbeispielen, die wir zur Feinabstimmung verwendet haben, keine Erfolgsquote für zuvor unbekannte Frisuren.
Die Wurzeln der Ketten blieben fixiert. In den letzten beiden Sekunden lag die gemessene Bewegung der Spitzen zwischen den erfassten Frames in jedem verbesserten Fall unter 0,001 mm. Dreizehn gezielte Tests decken Rigging, fixierte Wurzeln, Formerhaltung, Kollisionen, kurze Endpunkte, Import und Animationszuständigkeit ab. Außerdem haben wir das Anwenden und Rückgängigmachen des Rigs im Viewer sowie den Export von zyklischen und einmalig abgespielten Animationen geprüft.
Messdaten herunterladen. Die Live-Beispiele verwenden denselben Solver-Code wie der Viewer und der Exportpfad des Prototyps. Es handelt sich um interaktive Renderings, nicht um vorab aufgezeichnete Videos.
Was dadurch möglich wird – und was noch nicht gelöst ist
Für einen separaten Pferdeschwanz oder eine einzelne Haarsträhne haben wir nun einen Weg von ausgewählter Geometrie zu Gelenken, Gewichten und Sekundärbewegung. Bei einem vorhandenen kompatiblen Haar-Rig können wir die Arbeit der Artists bewahren und animieren. Wenn eine Animation bereits Spuren für diese Haargelenke enthält, überlässt der prozedurale Solver der vorgegebenen Bewegung den Vorrang, statt eine zweite Bewegung darüberzulegen.
Der numerische Haar-Benchmark verwendet Kopfdrehungen und sanfte Körperverschiebungen. Mit der Universal-Auswahl können Leser andere Aktionen untersuchen, doch diese Messungen belegen nicht die Haarqualität beim Laufen, Springen oder Überschlagen. Kollisions-Proxys sind keine vollständige Kollisionserkennung mit der Körperoberfläche, und Selbstkollisionen der Haare werden noch nicht gelöst. Zöpfe, Locken, zusammenhängende Haarbereiche und die reale Leistung auf Smartphones benötigen eigene Tests.
Die Funktion bleibt experimentell. Doch die Prüfung an realen Figuren hat die Verbesserung greifbar gemacht: Das Haar kann sich bewegen, ohne fortlaufend die Form neu zu schreiben, in die es zurückkehren soll.
Modellnachweise. Seed-san © VirtualCast, Inc., aus der offiziellen VRM-Beispielsammlung. VRM1_Constraint_Twist_Sample © 2022 pixiv Inc., aus den Beispielmodellen von three-vrm. Beide Dateien enthalten Metadaten zur VRM Public License 1.0, die Weitergabe und Änderungen gestatten. Der neu aufgebaute Pferdeschwanz und die benutzerdefinierte Bewegung sind unsere Änderungen. Quell-URLs und Datei-Hashes identifizieren die exakt verwendeten Beispiele.
Animationsnachweise. Die Universal-Clips stammen von Quaternius aus der Universal Animation Library und der Universal Animation Library 2 und werden unter CC0 bereitgestellt.
Als Nächstes: wiederverwendbares Haar für eine generierte Figur
Unser nächster Versuch beginnt mit ungeriggten Meshes aus einer Bibliothek: 46 Frisuren an einen Frosch anpassen und ihre extrahierten Strähnenführungen untersuchen. Das Live-Experiment trennt die Befestigung an der Kopfhaut von der noch zu entwickelnden Physik.