Modular Character Design_ Morph Targets vs Animation

  • Hallo
    Die letzte große Hürde, die ich für mein Charactersystem nehmen muss, ist die Einstellung der Proportionen in einem Charactereditor.
    Nach vielem herumprobieren und langer Recherche bin ich zu dem Entschluss gekommen, Morph Targets sind für den Charaktereditor nicht uneingeschränkt geeignet.
    Pro Shape Key addieren sich die Vertexzahlen der verwendeten Morph Targets auf, auch wenn sie sich nur im Ruhezustand befinden. Da kommen bei einem Low Poly Mesh mit fünftausend Vertices schon mal dreissigtausend Vertexinformationen zusammen, die nutzlos mitberechnet werden müssen.


    Mein neues Ziel ist, je nach Bedarf, anstatt der Morph Targets Animationen als Speicherplatz zu verwenden.
    Das heißt, Veränderungen in Körper und Gesicht sollen als einmalige Animation ohne Loop oder Wiederholung gespeichert werden.
    Beispiel:
    Ich füge dem Rig eine gewisse Anzahl von Bones hinzu, die nur für die Umsetzung der animierten Shape Keys verwendet werden.
    Bisher habe ich für einen kompletten Character mit anspruchsvollem Gesicht und Statur etwa hundert Shape Keys benötigt.
    Das streiche ich zusammen und reduziere das Morphing des Gesichts auf wenige, hervorstechende Merkmale. Fehlende Feinheiten werden durch Normal Maps ersetzt.
    Übertragen auf ein Rig würde das etwa zwanzig Bones mehr bedeuten. Das liegt noch sehr weit unter dem Bone Limit.
    UE4 unterstützt bis zu 255 Bones.
    Die Engine akzeptiert vier Bone uses per Vertex entsprechend der Anzahl der Bones ohne signifikanten Performanceverlust. Das muss man justieren.
    Soweit so gut.
    Ich stelle in meinem Charctereditor mittels der animierten Bones die Figur und Gesichtsmerkmale ein.
    Die Animation wird beim Laden einmal ausgeführt und dann eingefroren. Das müsste Funktionieren.


    Hier stellen sich eine ganze Menge Fragen.
    Wie kann man die verschiedenen Stellungen der Bones und der daraus resultierenden Animationen, etwa in einem Anim Blueprint, zusammenzufassen und in ein HUD übertragen?
    Ich denke, das ist eine interessante Aufgabenstellung.


    Über Eure Hilfe würde ich mich sehr freuen.
    Was draus wird, wird sich ergeben.
    Falls ein Programmierer eine Idee hat, wie man Morph Targets applien kann....?
    Laut einem UE4 Developer existiert ein solcher Code bisher nicht.
    Mir ist klar, dass professionelle Spieleschmieden für das alles eine Lösung haben. Große Firmen engagieren allein dafür einen ganzen Stab aus Programmierern.


    Gruß
    Michael

  • Hi,
    an was ähnlichen hatte ich schon mal mit Unity gewerkelt. Für Proportionen hatten ich ein paar zusätzliche Bones/ Joints genommen und richtig gewichtet da auch in Unity bis zu 4 Bones pro Vertice unterstützt werden.


    Als Beispiel Bauch vergrößern und ggf bissl hängen lassen:
    Dafür hatte ich einen zusätzlichen Bone am Spine der ein wenig nach vorn ging. Also trotzdem vertikal, aber vom Spine Richtung Bauch. Das ordentlich gewichtet...


    Einstellungen des Bauches via Slider:
    1. Bauch vergrößern-> Alle Achsen bis auf die Längsachse des Bones bis zum beliebigen Punkt skalieren und Werte festlegen(kann man auch schon vorher in der Modellierungsumgebung bestimmen)
    2. Bauch normal oder hängend-> lokale Bewegung des Bones an der Längsachse entlang(hoch/ runter).


    Damit das ganze noch geschmeidig aussieht via Skript(Unity, keine Ahnung momentan wie das in der Unreal geht) oder auch mit der Animation in Verbindung gebracht. Beim nach hinten "beugen" des Oberkörpers den Bone Längs länger skalieren und leicht Richtung innen drehen/ kippen. Beim nach vorn beugen den Bone stauchen(längs kleiner skalieren) und leicht nach außen, also Richtung Bauchdecke kippen...


    Sah wunderbar aus und ich war sehr zufrieden mit dem Ergebnis. Das sah sogar noch gut und "realistisch" aus wenn der Torso herran ge-zoomt war, das er so groß wie der Bildschirm hoch war.


    Zum Gesicht:
    Da funzt es auch mit zusätzlichen Bones. Nur machen dort die wirklichen Charakterzüge die Falten, Hauttint usw aus. Also beim Menschen zumindest.



    MfG Felix

  • Ja danke für den Tipp
    So in etwa stelle ich mir das auch vor.
    Ich habe bereits etwas herumprobiert und habe meinen Anfangsthread dementsprechend etwas editiert.
    Manches geht mit den obengenannten Techniken ganz gut, anderes stellt sich als ziemlich problematisch heraus. Wie bei allem anderen, was ich bisher gemacht habe, wird es wohl auf eine wohldosierte Mischung hinausgehen.
    Einen Haupmorph werde ich wohl mindestens behalten.
    Den etwa 1700 Vertices mehr steht die enorme Bandbreite von Möglichkeiten entgegen, die sich daraus ergeben.
    Ausserdem bleibt ja die Anzahl der zu rendernden Flächen gleich.
    Ein Shape Key der vom Basismodell ausgeht bis +Muskulös bis -Mager als Basis wäre deshalb wohl zu vertreten. Die Möglichkeit mehr als einen Wert vo 0-1 zu verwenden bietet hier viele Möglichkeiten.
    Gruß

  • Reden wir hier von einem Multiplayer Spiel, also mit hunderten von Spielercharakteren, die alle mit einem Charakter Editor erstellt wurden, wie man es aus MMOs kennt oder geht es hier nur um den eigenen Charakter ala Fallout/Mass Effect/The Witcher etc.?


    Bei letzterem fallen 1700 Vertices nicht wirklich großartig ins Gewicht und selbst bei einem kleinen Multiplayer mit 3-4 Spielern, spielt das kaum eine große Rolle.


    Ich weiß jetzt nicht ob es da irgend einen groben Wert gibt, aber in einer komplexen Scene sind leicht Millionen von Vertices im Bild.

  • Weiß nicht genau. Multiplayer fähig sollte er schon sein.
    Ich spare halt wo ich kann. Es fühlt sich nur ein bisschen blöd an, wenn ich dieselbe Verticezahl, die mein Character hat dann um ein vielfaches für Morphing verballere.
    Aber du hast recht, so bis zweitausend werde ich wohl ins Morphing investieren.
    Alles weitere versuche ich dann mit bones zu machen. Mal sehen obs das wirklich bringt.
    Gruß

  • Hallo
    Ich habe in den letzten Tagen diverse Meshes erstellt und die Daten der Engine angeschaut.
    1. Mesh ohne Morph ohne Textur.
    2.Mesh mit einfachem Morph ohne Textur.
    3. Mesh mit einfachem Morph mit Textur.
    4. Mesh mit multiplem Morph ohne Textur.
    5. Mesh mit multiplem Morph mit Textur.
    Den Unterschied in der Vertexzahl, der noch vor Monaten mit jedem Morph in die höhe geschnellt ist, bleibt gleich.
    Seltsam ist, dass das Mesh 2 weniger Speicherplatz verbraucht als die Nr1.
    Der Unterschied in Memory entspricht dem Einsatz der Texturen.
    Mit Substances kann ich den Textur Speicherplatz um drei Viertel minimieren.
    Fazit:
    Der Einsatz von Morph Targets hat keinen nennenswerten Einfluss auf die Performance des Meshes.
    Das Setup mit Morph Target Nodes und Master Pose Components lässt bei allen Versuchsaufbauten keinen Unterschied erkennen.
    Die Vertexzahl ist in der analyse nicht angegeben, bzw bleibt im Character Editor trotz multipler shape Keys gleich. Die Tri Zahl bleibt in allen Fällen Gleich und der Rechenaufwand scheint mehr der Kameradrehung geschuldet als der Konstruktion der Meshes.
    Der Verbrauch von Speicherplatz rechnet sich sowohl bei einem single Mes als auch bei einem Mesh mit drei Meshes mit master pose komponent nicht auf. Hier scheint die Instanzierung durch das Blueprint zu greifen.
    Der verbrauch von Texturspeicher dagegen schlägt wirklich ins Kontor.
    Ich benutze die Analysetools von UE4 und die Console Werte.
    Dabei bleibt die Dateigröße mit 15 MB per Charakter immer konstant.
    Zum Vegleich dazu liegt das Mannequin Mesh mit 4k um ein fünffaches höher als mein Mesh inclusive aller Morph Targets.
    Die Performance scheint mehr von den verwendeten Texturen abzuhängen als von reinen Tri werten.
    Also... das ist ein erster Überblick. Demnächst mehr...
    Gruß

  • Hi danke für die Auswertung. Das ist super das Du das gemacht hast. Wichtig für Spiele mit vielen Figuren.


    Ich selbst hab jetzt noch nicht so eine Auswertung gemacht.
    Wollte ich mal machen, aber seit einiger Zeit steht das Wort Performance ganz weit hinten. Wenn nicht sogar zuletzt und wenn das Projekt richtig geplant ist wird das Wort nicht mal erwähnt.


    Es gibt sicher Leute die mein geschriebenes sicher nicht toll finden. Aber ich sag es mal so: Engines stellen Frameworks bereit die das Arbeiten/ Entwickeln vereinfachen. Dahinter stecken Algorithmen die gewährleisten das es funktioniert und das möglichst schnell/performant. Es gehört schon eine Menge dazu das ein Spiel in der Entwicklung ruckelt. Meistens liegt es an der Grafiklast. Die Anzahl der Polygone/ Vertice einer Figur spielt fast keine Rolle für die CPU. Okay, wenn jetzt eine Figur 1 Mio Vertices hat evtl schon, aber da sollte man sich vielleicht mal Gedanken machen warum das so ist und nicht warum es in der Engine ruckelt. Wie relevant die Vertices sind, kann man nur mit einer Milchmädchenrechnung ermitteln oder man kennt den der das Framework entwickelt hat und eingebunden hat. Wie gesagt, Polygone und Vertices können die Berechnung für die Grafikkarte belasten, da pro Polygone mit Material und/ oder Textur mehrere Berechnungen durchgeführt werden. Ich dachte es waren bis zu 7, bin mir gerade nicht sicher, da müsste ich nochmal nachschlagen.


    Wie gesagt, ist alles gut gemeint und finde es super das es Leute gibt die sich damit beschäftigen. Nur muss man eben wissen was das persönliche Ziel ist. Ein Spiel entwickeln oder die Last der Engine ermitteln. Wie gesagt, wenn etwas in einer Game-Engine funktioniert und als Framework bereit gestellt wird, kann man fast damit rechnen das es auch performant genug ist. Logisch, Optimierungen gibt es immer.


    Daumen hoch für deine Analyse. Und immer vor Augen halten: Auch das Tool zur Messung von Perfomance verbraucht Performance.

  • Ja
    Es scheint, als hätte sich die Verarbeitung der Vertice Dateien in 4.9 wesentlich geändert. Für ein Mesh mir einigen Morphs für den ganzen Körper, für das ich bisher die Verticezahl von 19K angezeigt bekommen habe, stehen jetzt die ursprünglichen 3600 Vertices. Auch in allen Tools scheinen die die Morphs nicht mehr extra berechnet zu werden.
    Da ich ja ein oder zwei Bodymorphs behalten wollte, wollte ich abchecken welche Kosten sie genau verursachen und siehe da, das Ganze scheint sich grundlegend verändert zu haben. Ich werde heute mal die Releasenotes durchgehen, vielleicht findet sich da ja was.
    Auch die Verarbeitung der Module hat mich überrascht. Sie scheinen neben den zusätzlichen Draw calls keine bemerkbaren Kosten mehr zu verursachen.
    Und ich dachte letzte Woche noch ich müsste meine Ganze Arbeit des letzten Jahres wieder in die Tonne treten und von vorne anfangen. Es scheint alles zu schön um wahr zu sein.


    (Ein gutes hat die Sache dann doch. Ich habe endlich damit begonnen, mich in sowohl in Blender als auch UE4 weiter in das Animations System einzuarbeiten, was ich bisher immer vermieden habe <X )


    Und ich muss DJ EKI ausnahmsweise mal recht geben. Mehr ausprobieren, weniger nachdenken.


    Auch das neue Blender UE4 Tool hält nicht das, was es verspricht.
    Das Rig ist vollgepackt mit undurchsichtigen Funktionen, hat überhaupt eine etwas eigenwillige Bonekonstruktion und eignet sich scheinbar nur für das Mesh in das es verbaut ist.
    Da ist der liebe Garcia wohl etwas über das Ziel hinaus geschossen.


    Mein eigenes Rig wird besser und unkomplizierter.
    Auf das extra weighting Rig bin ich besonders Stolz. Es ermöglicht mir, meine Figuren mit ein paar Klicks und ein paar kleinen Weight-Paintings an den Oberschenkeln und Schultern zu riggen. Alle UE4 Mannequin Animationen laufen darauf. Leider hat es noch keine Animationsfunktionen. (Constraints, IK rig bones, Shapes etc.) .
    Das ist auch etwas, das ich bisher vor mir her geschoben habe. (Ich hasse es, Hände zu riggen :cursing: )
    Sobald ich das Rig fertig habe werde ich es der Community zur Verfügung stellen. Vielleicht mache ich ja einen kleinen Film dazu.
    By the Way... Nach einigem herumprobieren mein Tip... Bandycam.
    Spielfilme will ich eh keine drehen und das Wasserzeichen stört mich nicht. Die Performance und die einfache Bedienbarkeit sind einfach umwerfend.
    Nun zu der Diskussion von neulich über die Proportionen.
    Ja. Die Hände waren tatsächlich zu groß, wenn auch nur unwesentlich, die übrigen Proportionen stimmen aber. Epic hat sich da wirklich Mühe gegeben. (Kopf ist sieben bis acht mal Körpergröße usw.,)
    Zugegebenermaßen ist die Armlänge bis auf das letzte ausgereizt. Ich denke aber, die Leute von Epic werden sich schon etwas dabei gedacht haben. Da will ich als Ei nicht schlauer sein als die Henne.
    Man kann das Ding somit einfach mit allen verfügbaren Mannequin Animationen benutzen ohne jedes mal nachjustieren zu müssen.
    Heute nochmal ein paar Probeläufe, dann verdrücke ich mich auf eine andere Baustelle.
    Es langt mir momentan mit dem ganzen Morphing und Rigging Kram...
    Gruß

  • Hallo
    Bemmi
    Danke für dein Feedback.
    Für mich ist es wichtig, die Gesamtzahl zu berechnen, da ich meine Figur ja auch Multiplayer tauglich machen will. Das ist halt mein persönlicher Ehrgeiz und kommt noch aus der Zeit als auch ich noch ein MMo
    entwickeln wollte :D
    Zum einen die Vertex bzw Tri Zahlen.
    Meine Charactere sollen nur so um die Zehn K Tris besitzen. Dementsprechend auch eine kleine zu berechnende Anzahl von Flächen.
    Mein Modulares Baukastensystem besteht zudem aus mehrere Skeletal Meshes mit den entsprechenden Draw Calls.
    Auch möchte ich Apex implementieren. Da will ich auch die genaue Performance Last noch ermitteln.
    Die Texturen werden durch Substances und die Verwendung von 8 Bit, bzw JPEG Texturen auf ein Minimum reduziert.
    Ich habe auch vor, diverse Alpha Bestandteile einzubauen.
    Da summiert sich doch im Endeffekt einiges, bei dem kleine Optimierungen sich doch rechnen.
    Ich möchte das alles gerne selber ausprobieren und wissen, da man sich über die Aussagen über Performance oder Benutzbarkeit, gerade was einen Game-Character und speziell die modulare Bauweise eines solchen angeht, auf die Foren eigentlich nicht verlassen kann.
    Der worst Case wäre der, dass ich nach einem oder gar mehreren Jahren Arbeit alles verwerfen müsste. Gerade im Modularen Bereich greifen so viele Rädchen ineinander, dass ich mir keine Fehler erlauben kann.
    Auch soll sich der User keine Gedanken mehr über die Funktionalität meiner Charactere machen müssen. Drag and Play bei optimalen Werten ist hier mein Ziel.
    Gruß

  • Mein Rig wird ja auch eine FBX Datei. Ich denke es kann problemlos auch in anderen Programmen eingesetzt werden. Dauert aber noch ein Bisschen.
    Ach ja... zu den niedrigen Vertexzahlen.... Die Meshes sollen möglichst ohne LODs laufen.
    Denn wie du schon im Vergleich mit der Performance von Testtools bemerkt hast.
    Auch das Auswechseln von LODs kostet Rechenleistung und Speicherplatz.

  • Klingt alles sehr interessant.
    Wollte mich auch mal mit Morphs beschäftigen, habe aber bisher noch keine Zeit dafür gefunden.
    Es gibt noch so viele Sachen die ich noch nicht ausprobiert habe in der UE4, ich weiß gar nicht wann ich das alles machen soll ^^


    Modular ist aber immer gut Artful3D aber es steckt mega viel Arbeit darin wenn man es einigermaßen qualifiziert umsetzen will.


    Das Thema Rigg/Mocap und Retargeting habe ich schon in Unity ausprobiert gehabt und war eigentlich sehr angenehm überrascht von dem Komfort der Umsetzung in Unity.
    Ich wollte sowas auch mal in der UE4 ausprobieren, am besten mit meinem Assassin Char den ich gerade verwende, denke das ist ein gutes Beispiel.


    Wenn das alles angenehm umzusetzen ist mit Mocaps, dann kann man bestimmt auch super mit den Mocap Bibliotheken von Unity arbeiten, die haben 2 Packs im Store mit massig an Animationen wovon man einige wirklich gut verwenden kann. Da die Packs kostenlos sind, könnte man auf dem Weg sich schön alle Animationen zusammen stellen die man benötigt ohne selbst großartig zu animieren, es sei denn man braucht was bestimmtes.


    Ich erzähl den ganzen Kram weil es vielleicht auch für dich interessant sein könnte auf diese Packs zurück zu greifen, denn so wie ich dich verstanden habe möchtest du ja auch zum Teil ein Retargeting durchführen oder ?

  • Klar ist richtig. Wie gesagt: Planung ist alles :D .


    10k pro Char ist doch voll in Ordnung. Da ist nach oben noch Luft. Deine Modelle sollen ja bestimmt stimmig zum Spiel wirken und nicht alla "keine Ahnung". Z.B.: bei WoW sind die Chars auch "Lowpoly", aber durch das Design und die gewollte "Grafik" sieht das alles super aus. Kommt halt drauf an was man machen will, gelle.


    Kannst ja mal mehrere von dein Chars in 1 Level packen und mal testen. Also das sie im sichtbaren Bereich der Kamera liegen. Ich weiß leider noch nicht wie das in der Unreal gehandhabt wird. Nach dem Motto: Seh ich dich, berechne ich dich. Oder ob auch dynamische Objekte nach den Konzept Oculus Culling berechnet werden.


    Weißt Du das? Das würde mich mal interessieren.


    Ich komm in beiden Modellierungsumgebungen zurecht. Ich mag nur einige Sachen lieber mit Cinema 4D machen, auch wenn da manches Komplexer als in Blender ist.



    @Harlyk die Animationen sollten eigentlich passen aus den Anim-Pack. Sofern ich glaube zu verstehen was ihr/Du vorhabt.


    Hier mal ein Beispiel: Ich hab mal einen Basketball gebastelt(Unity). Er besteht aus einer Standardkugel mit 800 Poly/ 762 Vertices. Sicher es gehen weniger, aber er soll ja auch von nahen Rund aussehen. Und ja die kleinen Nippelchen sind noch nicht korrekt. Da muss ich nochmal Hand anlegen. Also an den Nippeln 8o
    http://www.bilder-upload.eu/sh…ile=890faa-1443461180.png

  • Steh grad etwas auf den Schlauch was das Retargeting von Animationen mit dem Basketball zu tun hat ^^ Oder gehörte das zum Text weiter oben ?


    Aber du hast recht Bemmi, es sollte eigentlich nichts dagegen sprechen das die Animationen aus dem Mocap Pack auch in UE4 funktionieren, Mocap ist Mocap.
    Ich würde nur gerne wissen wie einfach das Retargeting ist, ob man einfach wie in Unity sein Mesh lädt und er automatisch die Bones erkennt und anpasst oder ob man da manuell noch Bones benennen muss etc.
    Hab mich halt noch nicht damit beschäftigt

  • @Harlyk Der Ball hat mit den eigentlichen Thema nix zu tun. Nur das man auch mit wenig Poly gutes Aussehen erreichen kann. Ja das sollte passen, das Rigg da ist auch so ein "Game-Ready-Rigg". Also auf die Bone-Topologie bezogen.
    Mit den 2. teren hab ich mich auch noch nicht richtig beschäftigt. Hab aber irgendwo gelesen das es ähnlich funktioniert solang sich das Rigg im Bezug auf das Mesh nicht geändert hat. Also in der Anzahl der Bones usw.(Angabe leider ohne Gewähr, da selbst nicht getestet.)

  • Werde das bald testen, der Ball sieht übrigens sehr gut aus, das Material könnte nur etwas mehr nach Gummi aussehen (vielleicht ein ticken mehr Glanz rein).


    Was das Morphing und Apex angeht, da habe ich momentan auch noch nichts mit gemacht, das klingt sehr interessant, schade das du kaum Bilder / Videos von der Einbindung des ganzen gemacht hast Artful3D.
    Sicherlich gibt es da was auf Youtube, aber so direkt von User zu User ist es angenehmer da man dann drüber sprechen kann.


    Besonders Apex finde ich höchst interessant, ich würde gerne mal einen Charakter mit Lendenschurz oder einen Umhang erstellen und dann dort dieses Apex einsetzen.
    Auch Motion Capturing per Kinect steht noch auf meiner TODO Liste, es ist echt Schlimm das es so viele Bereiche mit so cooler Technik gibt, ich muss noch so vieles ausprobieren und weiß einfach nicht wo ich anfangen soll.

  • Da kommt auch schon die nächste Frage
    Könnte man in einem Character Editor einen Bone mit der Maus anfassen und verschieben?
    https://www.youtube.com/watch?v=_476tPEP7WU ab etwa minute 15.
    Das ist hier glaub ich so gemacht.
    Die animierten Shape keys sind kein Problem. Die sind in Blender über shape Key Driver leicht zu erstellen.
    So kann ich einen Shape Key über einen Bone über mehrere Achsen animieren.
    Die Morph Targets sind dann mit Animationen verknüpft.
    Die Frage ist halt die, ob das mit dem Maus anfassen umsetzbar ist.
    Gruß