Three.js: Laden Sie die Mixamo-Animation

Erstellt am 11. Feb. 2015  ·  67Kommentare  ·  Quelle: mrdoob/three.js

Hey, ich manipuliere und animiere meinen Charakter mit Mixamo ... dann importiere ich sie über FBX in den Mixer ... dann exportiere ich sie mit deinem Exporteur nach JS (habe jeden Exporteur ausprobiert ... jeden).

Das Ergebnis ist hier:
http://instagram.com/p/y8NQjQkk9-/?modal=true

es sieht immer so verzerrt aus und ich kann es nicht verstehen ... es sind immer die Hände ... Liegt es an der Anzahl der Knochen. mixamo hat 16 oder etw. und die marine_anim aus den Beispielen mehr als 50.

Bitte helfen Sie einem Bruder ... nach drei Tagen bin ich am Ende meiner Weisheit

Question

Hilfreichster Kommentar

Alternativ können Sie einfach als FBX aus Mixamo exportieren und direkt mit dem FBXLoader laden.
Ab der letzten Version (R89) sollte es sehr reibungslos funktionieren.

Alle 67 Kommentare

Nachdem diese PR https://github.com/mrdoob/three.js/pull/6052 zusammengeführt wurde, schlage ich vor, den Exporter aus der Entwicklungsabteilung zu versuchen. Es gibt 2 verschiedene Pose-Positionsoptionen für POSE und REST . Stellen Sie Ihren Anker auf den einen oder anderen ein und stellen Sie dann beim Export sicher, dass die Eigenschaft Skeletal animation übereinstimmt. Probieren Sie beide aus und sehen Sie, ob beides hilft. Für einige Leute funktioniert POSE , für andere REST .

hmm so exportiert mit Skelettanimation Rest und im Pose-Modus ...

Dies sind meine Dateien http://we.tl/CNM5qEmBMs
einschließlich Originalfinale und beide Exporte ...

Ruhemodus = überhaupt keine Bewegung
Pose-Modus = seltsame Verzerrungen

u sagte "Es hat 2 verschiedene Pose Position Optionen für POSE und REST. Stellen Sie Ihren Anker auf den einen oder anderen" ... Ich weiß nicht, wie ich meine Amature auf Pose oder Ruhe einstellen soll ... Ich möchte Mixer nur als verwenden übersetzer von mixamo nach threejs ... sorry wenn meine frage zu noob ist

Meinten Sie die Bearbeitungsmodi Pose und Bearbeitungsmodus für Objekte?

Ok Pose-Modus --- gleiche Verzerrungen
Bearbeitungsmodus das folgende Fehlerprotokoll:

error

Dieser Fehler kann nicht wiederhergestellt werden, aber ich habe festgestellt, dass Sie sich beim Betrachten der Zeilennummern im Traceback möglicherweise nicht auf derselben (neuesten) Version befinden, die in dev . Stellen Sie außerdem sicher, dass Sie mit diesem Asset keinen Scene -Export durchführen. Führen Sie vorerst nur einzelne Geometrieexporte durch (da ObjectLoader noch nicht mit enthäuteten Netzen funktioniert).

Was kaputte Animationen betrifft; Ich kann sowohl die fehlerhafte Animation als auch das fehlende Animationsproblem neu erstellen. Es gibt Leute, die funktionierende Animationen exportieren (Beispiel https://github.com/mrdoob/three.js/issues/5582#issuecomment-73444737), daher bin ich misstrauisch, dass es einige Probleme mit dem FBX-Importprozess gibt. Es ist sehr schwer festzustellen, ob es sich um den Exporteur oder den FBX-Import handelt. Ich habe mich gefragt, ob es Transformationen gibt, die auf die Knochen angewendet werden müssen, aber ich weiß es noch nicht.

Hey Mann, vielen Dank für deine Zeit und deinen Einblick!

Sie sind möglicherweise nicht auf der gleichen (neuesten) Version wie in dev.

Ich denke, ich arbeite mit der neuesten Version, weil ich Pose und Ruhe auswählen kann:
"Die Animationsoption ist jetzt eine Aufzählung, bei der ein Benutzer zwischen POSE und REST wählen muss."

da ObjectLoader noch nicht mit enthäuteten Netzen funktioniert

Aus meiner Erfahrung ist es nicht wütender ... Ich habe Geometrien und Szenen mit dem Objektlader in drei geladen. Der folgende Fehler wird mit Objectloader erstellt und führt zu demselben Ergebnis wie bei früheren Geometrie-Exporten.
newerror

Ich kann sowohl die fehlerhafte Animation als auch das fehlende Animationsproblem neu erstellen.

Es wäre wirklich interessant, wenn Sie das Problem NICHT neu erstellen könnten ...
Sehen Sie daher eine Möglichkeit, das Modell nach drei zu exportieren ...

Es ist im Allgemeinen interessant, da es ein Modellexport von mixamo ist. Wenn dieses Modell funktioniert, würde jedes Mixamo-Modell funktionieren. (in der Theorie ;))

Trotzdem danke, dass du es dir angesehen hast.

Mit der aktuellen Version von Blender und nur Geometrien und ohne Szenenexport komme ich in den Pose-Modus:

poseterror

und im Ruhemodus

resterror

Ich kann die Geometrie nur exportieren, wenn ich die Lochszene exportiere

ok, ich glaube ich habe es gefunden ... es ist ein Fehler in der Referenz zwischen den Eckpunkten der Geometrie und den animierten Knochen ... Netz und Skelett sind ausgeschaltet

Nachdem Sie das Netz manuell skaliert und wie folgt in Richtung Skelett gedreht haben

for (var i = 0; i < geometry.children[0].geometry.vertices.length; i++) {
                vector = geometry.children[0].geometry.vertices[i];
                var axis = new THREE.Vector3(0, 1, 0);
                var angle = Math.PI / 2;
                geometry.children[0].geometry.vertices[i].applyAxisAngle(axis, angle);
                geometry.children[0].geometry.vertices[i].multiplyScalar(0.01);
 }

Ich habe ein ganz gutes Ergebnis erzielt.

Also zuerst - warum muss ich das Netz drehen ... ich erinnere mich beim Importieren in Mixamo, dass ich mein Modell genau um 90 Grad drehen musste ... es liegt an der -z-Richtung
Warum skalieren? keine Ahnung...

Jetzt kommt das Buggy-Ding, mein Modell hatte nicht die perfekten TPos ... die Arme waren zu niedrig ... ich habe es in Mixamo montiert und es war danach immer noch perfekt ... ich habe es im Mixer gesehen ... und es war perfekt dazu ... sah es in max war auch perfekt.
DANN wurde der Export nach Threejs und die Zuordnung zwischen Knochen und Körper auf den ursprünglich erstellten Körper in max.

tpose

Daher gibt es einen mathematischen Fehler beim Verweisen auf Scheitelpunkte und Knochen in ihrer Transformationsmatrix.

Ich frage mich, ob es tatsächlich ein Fehler oder stattdessen eine optionale Funktion ist. Dies könnte das Problem, das Sie haben, sehr gut beheben, aber die Exporte für jemanden unterbrechen, der keine FBX-Assets importieren muss (etwas, das ich bereits mit POSE- und REST-Animationen gesehen habe). Die verwendete Logik (für Knochen und Eckpunkte) ist seit einer Weile vorhanden (vom alten Exporteur kopiert) und ich sage nicht, dass sie perfekt oder fehlerfrei ist, aber wenn dies ein Fehler in der Mathematik wäre, hätten wir es wahrscheinlich gesehen mehr Probleme. Sie müssen Ihr Codebeispiel auf den Exporter anwenden und dann viele Tests für viele Testfälle ausführen (was ich nicht herumliegen habe).

Ich habe ähnliche Probleme in der Produktion gesehen, bei denen ein Vermögenswert mehrere Reisen durch mehrere Programme und Exporteure unternimmt. Fügen Sie dieser Gleichung Neuausrichtungen der Achse hinzu, und Sie haben ein Rezept für zertifizierbare Spielereien. Wenn ich herausfinden kann, wie dies in den Exporteur implementiert werden kann, ist dies nur dann eine Option, wenn weitaus mehr Sicherheit besteht, dass es tatsächlich für alle Benutzer und nicht für Eckfälle gilt.

Mit der aktuellen Version von Blender und nur Geometrien und ohne Szenenexport komme ich in den Pose-Modus:

Der Fehler lautet speziell "Kein gültiges Netzobjekt". Geometrieexporte basieren auf Auswahl und Sie haben höchstwahrscheinlich den Anker ausgewählt und nicht das Netz.

Hey Mann, nochmals vielen Dank, dass Sie sich damit befasst haben.
Ich wollte nicht sagen, dass mein Code in den Exporter gelangen soll. Ich wollte darauf hinweisen, dass innerhalb der Kette von Max über Mixamo bis Blender alles so zugewiesen wird, wie es sein sollte. Sobald drei Js erreicht sind, tritt ein einfacher Transformationsversatz auf (in meinem Fall Rot und Skalierung), der den Fehler verursacht. Diese Transformation bezieht sich auf das ursprüngliche Netz, das einmal erstellt wurde (wo immer) und im Mixer ignoriert wird und mixamo ... aber während des Exports wiederbelebt.

Leider muss ich zugeben, dass ich kein Matrixmagier bin - sonst würde ich gerne helfen, da ihr super hart arbeitet. Vielen Dank für Ihre Erkenntnisse.

Ich habe Mixamo nie benutzt. Verwendet es Y-up? Ich frage mich, was passiert ist, dass wenn maximo Y-up ist, der FBX-Import das Asset auf Z-up neu ausrichten müsste und der Exporteur dann erneut für Y-up auf three . Ich frage mich, ob die Transformationen des Assets beim Import in Blender angewendet werden müssten, wenn dies dann korrekt in three exportiert würde.

Das Übersetzen von Rigs von einer Plattform / einem Format auf ein anderes wird nach mehr als ein paar Iterationen hässlich. Selbst in einigen der fortschrittlichsten Pipelines und Tools, mit denen ich je gearbeitet habe, gab es immer Grenzen, wie ein manipulierter Vermögenswert durchgesetzt werden konnte. Es gibt vielleicht eine Lösung, die für Sie und alle funktioniert, aber es ist sicherlich nicht sofort klar, was es ist.

Ich wollte nicht sagen, dass mein Code in den Exporter gelangen soll.

Und ich bezog mich allgemeiner auf etwas, das versuchen würde, Achsenwinkel auf Scheitelpunktpositionen anzuwenden.

vector = geometry.children[0].geometry.vertices[i];
var axis = new THREE.Vector3(0, 1, 0);
var angle = Math.PI / 2;
geometry.children[0].geometry.vertices[i].applyAxisAngle(axis, angle); <-- would need something like this as well

aber ich begreife auch ein bisschen, und vielleicht versucht dies, den Exporteur dazu zu bringen, zu viele Variablen zu verarbeiten

Interessanter Kommentar hier zu FBX
https://github.com/mrdoob/three.js/issues/2803#issuecomment -11458920

Haben Sie die Drehung, die Sie wahrscheinlich vorgenommen haben, auf Ihr Modell und den Anker in der Mixer-Datei angewendet? Sie wissen, mit Strg + A> Drehung und Skalierung im Objektmodus. Ich habe sehr ähnliche Dinge gesehen, weil ich das nicht getan habe. @princemio

Mein Netz ist ständig verzerrt oder es treten Fehler auf und ich kann nicht mehrere Animationen exportieren. Zurück zum r69-Exporter gewechselt, der auch in Blender 2.73a gut zu funktionieren scheint

@ bitte-warte ... nein eigentlich habe ich nicht ... aber vielleicht von mixamo bis mixer ...
@kimasendorf Haben Sie versucht, das Netz manuell in drei Sekunden neu zu erstellen?

Das Netz wurde in Blender modelliert. Obwohl es sich um ein Low-Poly-Zeichen handelt, ist es sicherlich zu komplex, das Netz manuell in drei Sekunden neu zu erstellen. Und wie könnte das helfen?

In meinem Fall waren Netz und Knochen nicht miteinander ausgerichtet ... daher die Modellbiegung, die versucht, die Knochen zu passen ... Wenn Sie keine Knochen haben, hat dies nichts damit zu tun ...

Übrigens ... ich meine nicht "neu erstellen" lol ... es tut mir leid, dass ich versucht habe, das Modell "neu auszurichten" ...

Ich hatte ähnliche Probleme mit jedem komplexeren Skelett, das ich bisher ausprobiert habe. Einschließlich der Marine in three.js Repo enthalten und in den Beispielen vorgestellt. Folgendes bekomme ich mit dem Pose-Schalter:

Marine in Pose:
https://antont.github.io/three.js/examples/webgl_animation_skinning.html

Dieser Export ist in:
https://github.com/antont/three.js/blob/blenderexport_buggy_marineskinning/examples/models/skinned/marine/marine_anims-pose.json

Das minimale Beispiel aus Exportertests funktioniert. Der Skelett-Helfer passt zum Modell, wenn er dort den Pose-Modus verwendet.

Ich werde (einige) dieser Tricks aus der bereits geschlossenen anderen Ausgabe (# 4660) als nächstes ausprobieren:

  1. Sie benötigen Keyframes für jeden Bone, den Sie exportieren möchten.
  2. Das Netz muss sich in der T-Pose befinden. Hier sind zwei Möglichkeiten, dies zu tun: a. Haben Sie eine T-Pose-Aktion. Diese Aktion benötigt einen Rahmen, in dem alle Knochen Transformationen gelöscht haben. Dies sollte der aktuelle Frame sein, wenn der Exporteur ausgewählt wird. b. Löschen Sie den Modifikator "Anker" unmittelbar vor dem Export aus dem Netz. Machen Sie nach dem Exportieren der Datei die letzte Aktion rückgängig, um den Modifikator wiederherzustellen.

und:

Ich konnte dies nur zum Laufen bringen, wenn ich den Modifikator "Anker" beibehalten, aber sowohl Scheitelpunktgruppen als auch Knochenhüllen deaktiviert (nach dem Export wieder aktiviert) habe. In meinem Fall hat das Löschen des Modifikators nicht geholfen.

vielleicht auch:

Haben Sie die Drehung, die Sie wahrscheinlich vorgenommen haben, auf Ihr Modell und den Anker in der Mixer-Datei angewendet? Sie wissen, mit Strg + A> Drehung und Skalierung im Objektmodus.

Wenn mich jemand schlägt, um einen funktionierenden Export aus dieser Beispielmischung zu erhalten, und sagt, was benötigt wurde. Vielen Dank! :) Ich verwende diese Mischung: https://github.com/mrdoob/three.js/blob/master/examples/models/skinned/marine/marine_anims.blend

Ok, es funktioniert jetzt, aktualisiert https://antont.github.io/three.js/examples/webgl_animation_skinning.html (wenn jemand die fehlerhafte Version früher gesehen hat, stellen Sie sicher, dass Sie sie jetzt nicht aus dem Cache erhalten)

Versuchte eine Menge Dinge hin und her, überprüfte, ob alle Knochen verschlüsselt waren, sowohl die Rest- als auch die Pose-Optionen usw., aber am Ende schien es nur so, als hätte ich apply modifiers auf die seltsame Verformung bekommen. Sinnvoll, da dann der Ankermodifikator beim Export auf das Basis-Geom angewendet und dann durch die Skel-Animation in three.js weiter deformiert wurde.

Es gibt also einen funktionierenden Export der unveränderten Meeresmischung mit dem neuen Exporteur unter: https://github.com/antont/three.js/blob/example_skinning/examples/models/skinned/marine/marine_anims.json

Ich denke, es hat nur eine der Animationen, muss als nächstes herausfinden, wie alle Animationen mit dem neuen Export exportiert werden.

Screenshot der verwendeten Optionen:
threejs-skelexport-marineoptions

@antont danke für die Recherche!

Ich habe einen Slack-Team-Kanal für three.js eingerichtet, hauptsächlich um Animationsprobleme zu lösen, aber er kann für alle drei verwandten Zwecke verwendet werden. Dies ist ein privater Teamkanal, sodass Personen nur auf Einladung beitreten können. Ich suche nach:

  • Leute, die Python kennen
  • Menschen mit einem soliden Verständnis der Takelage in Blender
  • Menschen mit Animationserfahrungen und Szenen, die bereit sind zu teilen

Dies ist keine elitäre Sache. Ich bin zeitlich begrenzt und habe keine Bandbreite, um jemandem Python oder Blender beizubringen. Ich entschuldige mich, wenn dies nicht für Neulinge geeignet erscheint (dafür ist IRC gedacht). Dies ist für diejenigen, die dies tatsächlich in den Hintern drücken möchten und einige nützliche Fähigkeiten haben, um dazu beizutragen. IRC nervt mich und selbst Github-Threads sind nicht mein Lieblingsort für die Zusammenarbeit. Ich habe Slack mit anderen Gruppen benutzt und es war großartig.

Senden Sie mir eine E-Mail (und beachten Sie bitte auch Ihr Github-Handle) für eine Einladung
ed [dot] caspersen [at] gmail [dot] com

Ich denke, eine Änderung in den neuesten Blender-APIs hat die Methode gebrochen, mit der der Exporteur die Aktion auf dem Netz auswählt.

Das Verhalten, das ich sehe (nicht vollständig bestätigt), ist, dass der Exporteur exportiert:

  1. Die Aktion, die für den Anker ausgewählt wird, der das übergeordnete Element des ausgewählten Netzes ist ...
  2. Der Versuch, die anderen nicht ausgewählten Animationen zu exportieren, schlägt fehl, wenn versucht wird, die Animation auf dem Anker einzustellen, um die Aktions-Keyframes zu durchlaufen. Das Ergebnis ist, dass die Animation aus Schritt 1 wiederholt unter den verschiedenen Aktionsnamen exportiert wird ... Die Dauer scheint jedoch unter den verschiedenen Aktionen korrekt zu sein.

Ich denke, eine kürzliche Änderung in Blender erfordert nun, dass der Anker das tatsächlich ausgewählte Objekt in der 3D-Ansicht ist, damit die Änderung der Aktion tatsächlich wirksam wird.

Dies könnte gelöst werden, indem der Exporter so geändert wird, dass anstelle des Netzes der Anker für den Export ausgewählt werden muss, und die im Skript durchgeführte Aktionsänderung möglicherweise funktioniert.

Lassen Sie mich wissen, wenn Sie weitere Hilfe mit dem Blender-Exporteur benötigen. Ich habe einen anständigen Hintergrund in der Skripterstellung für Pre 2.6.

Ein weiteres Problem war, dass ich die richtige Kombination von "Rest" sowohl in den Skriptparametern als auch auf dem Anker auswählen musste. Das scheint spröde ..

Ein weiteres Problem sind die "Apply Modifiers" ...
Soweit ich weiß, sollte dies unter normalen Umständen beim Exportieren eines enthäuteten Netzes niemals der Fall sein und standardmäßig deaktiviert sein oder einen separaten Schalter zum Ausschließen von enthäuteten Netzen haben.
Durch Anwenden von Modifikatoren transformiert der Anker das Netz in den Rahmen, auf den es derzeit eingestellt ist.
Dies führt die Bindung für das Netz aus und zeigt die Probleme, die an anderer Stelle in diesem Thread gezeigt werden.

Es wäre schön, einen Weg zu finden, um diese Schritte zu rationalisieren.

Ich habe gerade einige Tests durchgeführt und bestätigt, dass der Exporteur für jede exportierte Animation die Frames derselben Animation exportiert ...

Also, da ich mein Netz mit der ausgewählten Aktion "Gehen" exportiert habe ...
Alle Animationen in der Datei sind Kopien der "Walk" -Animation unter verschiedenen Namen und mit unterschiedlichen Längen.

Ich bin überrascht, dass der Exporter nicht sofort abstürzt, wenn Sie eine Aktion mit mehr Frames als die anderen Animationen in der Datei haben.

Eine kurze Beschreibung dieses Fehlers:

Alle exportierten Animations-Keyframes sind die der ausgewählten Animation anstelle ihrer eigenen Keyframes.

Ich habe zumindest eine teilweise Lösung dafür gefunden ...

In "io_three \ exporter \ api \ animation.py"

am Anfang von "parse_pose_action" (um Zeile 183)

einfügen:

context.scene.objects.active = armature

Mit dieser Änderung werden jetzt einzigartige Animationen exportiert ...

Hallo, danke für dieses Feedback + Fix. Ich habe die empfohlene Änderung vorgenommen und mit "Pose" und "Apply Modifier" = off exportiert und das funktioniert super !!
Vielen Dank

context.scene.objects.active = Anker

Ich freue mich darauf, dies zu versuchen.

Hatte die gleichen Probleme, die ich angesprochen habe:

https://github.com/mrdoob/three.js/issues/7165

Die Arbeit hat für mich funktioniert, ich bin froh, dass ich tatsächlich mehrere Animationen in Gang bringen kann. Dank dafür!

Großartig! Froh, dass ich helfen konnte!

Ich habe einige andere Fehler, die Manifestationen davon sein könnten, mit diesem Thread verknüpft.

@manthrax (mit Ihrer teilweisen Korrektur) Es funktioniert gut, wenn ich 'Skelettanimationen: Pose' exportiere und 'Modifikator beim Rendern verwenden' im
image

Eine Demo eines Charakters mit 3 Animationen> http://unboring.net/lab/6326/hero_72/

Glauben Sie, dass es möglich / einfach wäre, Animationen mit dem 'Rest-Modus' korrekt zu exportieren und auszuführen?
In diesem Fall schreibt der Exporter nur die Keyframes, nicht jeden Frame, und die JSON-Datei hat 873 KB bis 174 KB

Einige Slack-Einladungen verschickt. Ich bin mir nicht sicher, welche Zeit ich morgen haben werde, sollte aber am Sonntag ein paar Stunden haben.

@arturitu Ich kann das untersuchen ... Wie ist das Verhalten für rest_mode Pose im Moment, das falsch ist?
Scheint es das gleiche Problem zu sein?

@repsac :

Das Exportieren auf meinem Computer dauert derzeit sehr lange für große Animationen ...

Es stellt sich heraus, dass die überwiegende Mehrheit der Zeit auf Spam zurückzuführen ist ...

Und wenn Sie den Logger einfach ausschalten, wird dies wahrscheinlich nicht behoben. Ich hatte dieses Problem mit Python-Skripten in der Vergangenheit ... Auch wenn die Protokollausgabe deaktiviert ist, findet die Zeichenfolgenkonstruktion in den Protokollierungsanweisungen statt.
Das Skript muss neu geschrieben werden, um etwas wie "if (logging) log.debug (" blah ");" bei allen Protokollierungsanweisungen, um nicht den Aufwand für die Formatierung aller Nachrichten zu verursachen.

Durch einfaches Auskommentieren der Protokollierungsnachrichten, die ich beim Export von Animationen / Keyframes gesehen habe, stieg meine Exportzeit von 2 Minuten auf etwa 5 Sekunden.

@arturitu Ich habe den Rest_pose-Export versucht ... Ich habe eine kleinere Datei erhalten, aber die Skelettbindungen sind beim Wiedergabeversuch durcheinander geraten ... Irgendwelche Ideen?

Ich teste mit der Marine-Blend-Datei, die an ein anderes Netz gebunden ist ...

image

Skelettanimationen: Ruhe

image

Skelettanimationen: Pose

@manthrax Ich denke, in Rest gibt es ein Problem mit dem Bones-Teil in JSON, da viele von ihnen viele "Eltern" haben: null, während in Pose die Bones den korrekten übergeordneten Wert haben. Und die Anzahl der Knochen ist unterschiedlich (in meinem Fall in Pose schreibe 38 und in Rest nur 28)

Aber ich weiß nicht, ob es notwendig wäre, eine andere Art von BlendCharacter.js zu verwenden, um eine korrekte Animation anzuzeigen

Das Skript muss neu geschrieben werden, um etwas wie "if (logging) log.debug (" blah ");" bei allen Protokollierungsanweisungen, um nicht den Aufwand für die Formatierung aller Nachrichten zu verursachen.

Wahrscheinlich nicht, dies kann innerhalb des Protokollierungsmoduls selbst adressierbar sein. Schau dir das jetzt an

Ein weiteres Problem war, dass ich die richtige Kombination von "Rest" sowohl in den Skriptparametern als auch auf dem Anker auswählen musste. Das scheint spröde ..

Es ist so, und ich hatte in der Vergangenheit versucht, dies zu lösen. Es gibt auskommentierte Abschnitte mit

armature.data.pose_position =

überall. Beim Ausprobieren in Blenders Shell hat es funktioniert, aber beim Export nicht. Ich habe es in den letzten Blender-Versionen nicht versucht, daher wurde dies möglicherweise behoben (bis es wieder kaputt ist).

Mit dieser Änderung werden jetzt einzigartige Animationen exportiert ...

Guter Fang. Blenders kontextuelles Bewusstsein, das es erfordert, ist manchmal so implizit, dass es nur noch verrückt wird, damit umzugehen.

Das Deaktivieren des Protokolls war einfach. Da das Repo von drei einfach zu blutig groß ist, habe ich ein temporäres Repo erstellt, das nur den Exporteur betrifft. Alles wird irgendwann wieder zusammengeführt.
https://github.com/repsac/io_three

Soweit ich weiß, sollte dies unter normalen Umständen beim Exportieren eines enthäuteten Netzes niemals der Fall sein und standardmäßig deaktiviert sein oder einen separaten Schalter zum Ausschließen von enthäuteten Netzen haben.

Wenn kein guter Fall gemacht werden kann, warum er eingeschaltet bleiben soll, würde ich ihn auf False wenn Animationen aktiviert sind. Das einzige Problem kann bei Szenenexporten sein, die ich auf dem Zaun habe, wenn Szenenexporte sowieso Animationen unterstützen sollten. Habe Probleme damit gehabt, wie Blender Aktionen unter der Haube handhabt, die es sehr zerbrechlich erscheinen lassen.

@repsac Ich wollte nur sagen .. Der Exporteur ist super. Ich hoffe, keiner meiner Kommentare kommt als Kritik heraus ... Ich habe in der Vergangenheit viel primitivere Mixer-Exporteure geschrieben ... aber nichts mit dem Umfang dieses einen, also ist es nicht schwer zu sagen, dass es eine große Leistung ist.

Zu Protokollierung: Ich bin mir immer noch nicht sicher, wie der Aufwand für die Formatierung von Protokollnachrichten durch einfaches Deaktivieren der Ausgabe im Protokollierungsframework beseitigt wird, aber möglicherweise verstehe ich die Nuancen des Frameworks nicht.

Nach allem, was ich sagen kann, führt jede Protokollierung des Formulars "someLoggingFunction (" formatierter Text: xyz ")" IMMER zur Textkonvertierung / -formatierung der Nachricht, auch wenn die Funktion den Text nicht intern ausgibt

Für eine Protokollierung ohne Overhead müssten die Dinge die Form "Logger.log (function () {return SomeFormattedText;}) annehmen, wobei die übergebene Funktion nur aufgerufen wird, wenn die Protokollierung aktiviert ist.

. In einer wirklich kompilierten und optimierten Sprache kann der Compiler möglicherweise erkennen, dass die Funktion ein No-Op ist, und die Formatierungsaufrufe sklp, aber selbst dann können die Formatierungsaufrufe Nebenwirkungen für den Rest des Programms haben, also im Allgemeinen wäre noch enthalten.

re: Szenenexporte unterstützende Animation ...
Ich stimme zu, dass es in naher Zukunft wahrscheinlich zu früh ist, diesen Weg zu gehen, ABER wenn wir an den Punkt kommen, an dem das funktionieren könnte. Es wäre ziemlich erstaunlich, ganze Level mit Animation erstellen und exportieren zu können WYSIWYG bis three.js Windmühlen würden sich drehen ... Flüsse und Wasserfälle könnten UV-animieren ... Plattformen könnten herumfliegen ... alles ohne Code zu schreiben. Eines Tages ...: D.

Nach allem, was ich sagen kann, führt jede Protokollierung des Formulars "someLoggingFunction (" formatierter Text: xyz ")" IMMER zur Textkonvertierung / -formatierung der Nachricht, auch wenn die Funktion den Text nicht intern ausgibt

Nun, jeder Protokollierungsaufruf sollte so formatiert sein:

logger.info("foo bar %s", arg)

Daher wird die Zeichenfolge erst formatiert, wenn die Protokollierungs-API *args unter der Haube übergeben wird. Ich habe die Protokollierungslogik in geändert

https://github.com/repsac/io_three/blob/master/addons/io_three/exporter/__init__.py

        level = options.get(constants.LOGGING, constants.DISABLED)
        version = options.get('addon_version')
        if level != constants.DISABLED:
            logger.init('io_three.export.log', level=level)

https://github.com/repsac/io_three/blob/master/addons/io_three/logger.py

def _logger(func):

    def inner(*args):
        if LOGGER is not None:
            func(*args)

    return inner


<strong i="18">@_logger</strong>
def info(*args):
    LOGGER.info(*args)


<strong i="19">@_logger</strong>
def debug(*args):
    LOGGER.debug(*args)


<strong i="20">@_logger</strong>
def warning(*args):
    LOGGER.warning(*args)


<strong i="21">@_logger</strong>
def error(*args):
    LOGGER.error(*args)


<strong i="22">@_logger</strong>
def critical(*args):
    LOGGER.critical(*args)

Es sollte keine Nachricht formatiert werden. Ich habe keine großen Szenen, daher kann ich das nicht testen, aber theoretisch sollte es so sein, und wenn dies nicht der Fall ist, wird dies zum Grund Nr. 4576, warum ich das Programmieren hasse.

Ich hoffe, keiner meiner Kommentare kommt als Kritik heraus

Nicht selten, zwischen Tech-Unternehmen voller Bro-Grammatiker hier in SF (einschließlich Silicon Valley) und der VFX-Branche, die mir in Interviews noch schlimmer gesagt wurden.

Ich gehe gerade diesen ganzen Thread durch und versuche, eine Aufzählungsliste darüber zusammenzustellen, was konkret getan werden sollte. Werde es posten, wenn ich etwas habe, damit du sehen kannst, ob es in der Nähe ist.

Oh ausgezeichnet! Sieht so aus, als hätten Sie die Protokollierung abgedeckt. Meine Python war etwas schwach, um die Nuancen Ihrer Lösung zu verstehen.

Kleine Welt, ich bin auch in SF!

Sehr cool ... soweit ich das aus diesem Thread entnehmen kann, ist es meistens die einzeilige Korrektur und dann die Auflösung der Mehrdeutigkeit des "Ruhe" -Modus ... Ich bin mir immer noch nicht sicher, welchen Anwendungsfall der Ruhemodus jemals hat .. wenn Sie eines kennen, wäre ich dankbar, es zu verstehen ...

Ich müsste alle alten Themen durchforsten, um Ihnen spezifische Links zu geben, aber um eine schnelle Antwort zu erhalten, ist hier eine Aufschlüsselung:

  • um r66 gab es ein Commit, das die Exporte von REST auf POSE umstellte
  • Um diese Zeit hatte ich meine eigene Version des Exporteurs begonnen, über die wir jetzt sprechen, und meine ursprüngliche Logik auf der REST-Logik aufgebaut
  • Bei R70 war Mine der Ersatz-Exporteur, als die Hölle losbrach
  • Ich habe die Logik durch POSE-Unterstützung ersetzt, wodurch die Exporte für andere Benutzer unterbrochen wurden
  • Ich konnte keinen Sinn ergeben, was zum Teufel los war, also habe ich den Wechsel zwischen den beiden implementiert

Bisher scheint es 2 Punkte zu geben, die angesprochen werden müssen:

1) Einstellen des aktiven Kontextes am Anker

context.scene.objects.active = armature

2) Wenden Sie keine Modifikatoren auf enthäutete Netze an

Ich werde die automatische Posenumschaltung erneut testen. Jemand sagte einmal, sie hätten das aus einem anderen Drehbuch herausgefunden, aber diese geheime Sauce schaffte es nicht in den Exporteur.

@manthrax Kannst du meine Filiale
https://github.com/repsac/three.js/tree/anim_fix

Dies funktioniert gut für Animationen im Pose-Modus, solange in Ihrem ersten Keyframe der Anker genauso konfiguriert ist wie in Ihrem Netz. Wenn Sie versuchen, im Pose-Modus Loc / Rot / Scale-Transformationen hinzuzufügen und diese als ersten Keyframe zuzuweisen, wird das Modell verzerrt.

Ich bin auch auf das REST / POSE-Problem gestoßen (aktueller Dev-Zweig). Das Modell hat mehr als 40 Knochen und 7 Aktionen. POSE funktioniert gut, aber die exportierte Datei ist riesig. REST hat Animationen total verzerrt.

Das Problem scheint im exportierten Array _skinIndices_ zu liegen. Ob im POSE- oder REST-Modus, das _skinIndices_-Array ist identisch, aber die Reihenfolge und damit die Indizes im exportierten _bones_-Array sind völlig unterschiedlich. Ich denke, das liegt daran, dass __rest_bones () _armature.data.bones_ verwendet, um die Bones zu indizieren, und __pose_bones_ _armature.pose.bones_ (api / mesh.py) verwendet. Später verwendet __skinning_data () _ unabhängig von der REST / POSE-Einstellung immer _armature.pose.bones_. Ein schneller Test scheint dies zu bestätigen. Wenn Sie _armature.data.bones_ in __skinning_data () verwenden, werden mein Modell und meine Animationen im REST-Modus korrekt exportiert.

Ich kenne three.js nicht gut genug, um dies zu beantworten und einen Fix einzureichen, aber welches ist eigentlich falsch _skinIndices_ oder die Reihenfolge von _bones_? Die Reihenfolge der Knochen in REST scheint mit den Indizes der Blender-Scheitelpunktgruppen identisch zu sein, was wahrscheinlich eine gute Sache ist.

Hallo, diese Ausgabe wurde weder geschlossen noch abgeschlossen, was jetzt ist? Ich habe also ein weiteres Problem mit diesem Thema: Hat jemand das gleichzeitige Abspielen von 2 Animationen erlebt? Meine Versuche funktionieren nicht, aber ich bin mir nicht sicher über die Qualität meines 3D-Objekts. Auf der anderen Seite frage ich mich, ob dies tatsächlich möglich ist.

Um das Problem zu lösen: Erlaubt der Mixer-Exporteur NLA?

@Derived ja mehrere Animationsmischungen und Wiedergabe funktionieren in den letzten drei.js

Nla wird im Allgemeinen nur für Knochen AFAIK unterstützt

Hallo, danke für dieses Feedback. Ja, ich kann mehrere Animationen ausführen, und die Animationen werden "gemischt". Ich benutze v71 aber mit der aktualisierten Blender-Exporter-Version (wie hier oben beschrieben). Aber lassen Sie mich meine Beobachtung besser erklären:

Mein Modell verfügt über 2 manipulierte Animationen: (A1) Hubarm und (A2) Kopf nach links drehen.

1) Spielen Sie (A1) "Arme heben" und halten Sie dann auf halber Strecke der Animation an (Arme sind auf halber Strecke).
2) spielen (A2) "Kopf nach links drehen" => Kopf nach links drehen, ABER die Arme kehren in die Ausgangsposition zurück, anstatt dort zu bleiben, wo sie sind.
3) Wenn ich die 2 zusammen spiele, dreht sich der Kopf nach links und die Arme heben sich, aber nicht so, wie sie sollten, sondern als Mischung aus (A1) (heben) und (A2) (keine Arme bewegen) unter dem Einfluss nicht bewegter Knochen von (A1) zu den beweglichen von (A2) und gegenüber.
Daher habe ich in die JSON-Datei geschaut und kann sehen, dass die Animation die Knochenpositionen für ALLE Knochen in jeder Animation beschreibt. Für (A2) "Kopf nach links drehen" enthält die Animation Knochenpositionen für Arme, die sich einfach nicht ändern (rechts, A2 bewegen sie sich in A2 nicht). Aber wie schätzt three.js, dass diese Knochenpositionen nicht signifikant sind und den Lauf von (A1) nicht beeinflussen sollten?
Hoffe, dieses Beispiel ist verständlich.

Ich verliere den Verstand darüber

Hier ist mein manipuliertes Netz im Mixer:

blender-cycle

Hier ist es in drei Sekunden:

three-cycle

Verbrachte 2 Tage direkt mit dem Export. Neuester Mixer, letzte drei. Wie ist der aktuelle Stand des Exporteurs?

@ DelvarWorld Ich denke, Sie müssen den Blender-Exporter im DEV-Zweig verwenden, um korrekt zu funktionieren.

@arturitu Ich bin :(

@ DelvarWorld

Wie ist der aktuelle Stand des Exporteurs?

ich denke das

repsac wurde am 30. Dezember 2015 von mrdoob nicht zugewiesen

könnte das Problem sein. Es braucht offensichtlich etwas Liebe.

Ich könnte auf die Jagd nach den verschiedenen Fehlern gehen, die in letzter Zeit gemeldet wurden. Können Sie eine Datei zur Reproduktion dieses Problems freigeben (je einfacher, desto besser)?

Der Einfachheit halber werde ich dies auch hier posten. Ich habe versucht, ein Testmodell aus @DelvarWorld zu exportieren, und in # 8412 einen Kommentar und einen Screenshot gepostet.

@phfatmonkey
https://github.com/mrdoob/three.js/pull/8412#issuecomment -210675561 dieses?

Großartige Arbeit zur Behebung all dieser Probleme: +1 :!

Wenn Sie mit dem Patchen fertig sind, würde es Ihnen etwas ausmachen, ein neues Ticket mit Beschreibungen oder Links zu den verbleibenden, neu erstellten oder entdeckten Exporterproblemen zu öffnen?

Es ist unglaublich schwierig, den Überblick zu behalten, wenn er irgendwo auf vorhandenen Tickets veröffentlicht wird.

Idealerweise eine pro Fall (falls noch nicht vorhanden) und ein Master "Blender Exporter Issues" (oder ähnliches), der auf alle verweist.

Woran ich mich erinnern kann, ist

  • Normalen fehlte die Rotation (fest)
  • Animationsprobleme beim Exportieren einer Szenenhierarchie. Funktioniert es jetzt?
  • Dann gibt es das Problem der restlichen Pose, das in Ihrem Beitrag erwähnt wird
  • Dann gibt es das Problem mit dem Skinning / Keyframes (Fehlermeldungen?)
  • ... (es gab mehr, denke ich)

Na sicher! Das ist eine tolle Idee. Ich werde versuchen, dieses Wochenende dazu zu kommen,
sonst am Montag, wenn ich wieder ins Büro komme.
Am 15. April 2016, 17:12 Uhr, schrieb "tschw" [email protected] :

@phfatmonkey https://github.com/phfatmonkey

8412 (Kommentar)

https://github.com/mrdoob/three.js/pull/8412#issuecomment -210675561
dieses?

Großartige Arbeit zur Behebung all dieser Probleme [Bild :: +1:]!

Wenn Sie mit dem Patchen fertig sind, würde es Ihnen etwas ausmachen, ein neues Ticket zu öffnen. A.
Beschreibung oder Link zu den verbleibenden, neu erstellten oder entdeckten
Exporteur Probleme?

Es ist unglaublich schwer, den Überblick zu behalten, wenn etwas veröffentlicht wird
irgendwo auf vorhandenen Tickets.

Idealerweise eine pro Fall (falls noch nicht vorhanden) und ein Master "Blender Exporter"
Probleme "(oder ähnliches), die auf alle verweisen.

Woran ich mich erinnern kann, ist

  • Normalen fehlte die Rotation (fest)
  • Animationsprobleme beim Exportieren einer Szenenhierarchie. Funktioniert es jetzt?
  • Dann gibt es das Problem der restlichen Pose, das in Ihrem Beitrag erwähnt wird
  • Dann gibt es das Problem mit dem Skinning / Keyframes (Fehlermeldungen?)
  • ...

- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail oder sieh sie dir auf GitHub an
https://github.com/mrdoob/three.js/issues/6050#issuecomment -210693332

Was ist mit der nichtlinearen Animationsbearbeitung, wie sie in Blender ausgeführt werden kann? Interessiert sich niemand für diese Frage? Ich habe den Punkt in einer früheren Nachricht erklärt, aber keinen Kommentar erhalten?

@derivou
Welche Nachricht?

Wenn es benutzerdefinierten Code benötigt, muss jemand ihn schreiben. Ein Beitrag könnte willkommen sein ...

Hier oben, Nachricht vom 5. Februar, habe ich das Problem beim Kombinieren mehrerer Animationen erklärt.
Ich würde gerne bei der Entwicklung helfen, aber ich denke, es erfordert zunächst einige Diskussionen, um Ideen auszutauschen und darüber zu diskutieren, wie sie umgesetzt werden können. Ich habe daher einen Vorschlagselement "Nichtlineare Animation" # 7913 geöffnet

Dies ist ein langes Problem, und ich muss gestehen, dass ich nicht alles gelesen habe. Wenn das Problem jedoch weiterhin dem vom OP beschriebenen entspricht (dh eine Möglichkeit zum Animieren eines Charakters in Mixamo und zum Laden in three.js erforderlich ist), können Sie dies erreichen Dies mit dem glTF Blender Exporter und THREE.GLTFLoader. Hier ist mein Workflow: https://medium.com/@donmccurdy/creating -animated-gltf-Zeichen-mit-Mixamo-und-Blender-728dc120e678

Alternativ können Sie einfach als FBX aus Mixamo exportieren und direkt mit dem FBXLoader laden.
Ab der letzten Version (R89) sollte es sehr reibungslos funktionieren.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen