BlExFoS

E

Ehemaliger Benutzer

Gast
Nachdem ich nun schon auf Grund einer Anfrage nun schon etwas am Werkeln bin und mich weitere Anfragen erreichten:


BlExFos - Blender Exporter For Skyrim*



Momentan geschieht das auf Basis von Automatisierung. Das bedeutet, dass die Programme dazu geöffnet sein müssen und sich die Maus in Teilen des Prozesses von allein bewegt.

Bei Blender lässt sich das meinerseits leider nicht ändern, da ich keine Zeit habe, mich in Python einzuarbeiten, und das Blender-Interface leider auch keine nutzbaren Controls zur Verfügung stellt. Das bedeutet leider, dass man einen Einstellungsmarathon durchlaufen muss, damit mein Exporter die Koordinaten der Schaltflächen weiß. Danach darf an der zu nutzenden Blender-Version auch nichts mehr geändert werden! War Blender bei der Konfiguration im Vollbild auf Monitor eins, muss es auch beim Export so sein, da die Schaltflächen-Koordinaten sonst abweichen! Momentan probiere ich die Koordinaten abhängig von der Fensterposition zu machen, aber das war bisher nicht von Erfolg gekrönt.

NifSkope hingegen sollte sich nahezu unauffällig automatisieren lassen. Unter Umständen kann ich hier die Änderungen sogar direkt an der jeweiligen nif-Datei vornehmen, sodass NifSkope nicht geöffnet sein muss.


Geplante Features:


  • Kompletter Export: Blender + NifSkope
  • Blender-Export: Lediglich der Export aus Blender wird ausgeführt
  • Nif-Anpassungen: Lediglich die Anpassungen in NifSkope werden ausgeführt
  • Stapelverarbeitung: Unbeaufsichtigte Bearbeitung mehrerer Dateien hintereinander

Getestet wird bereits (ausführlich) mit Modellen von AlbiTheReal und Schmelz - Danke dafür.

Allerdings bräuchte ich noch einen sinnvollen oder wenigstens gut klingenden Namen für das Programm, da mich der Projektname irgendwie an schwarze Füße erinnert. :roll:

*Es handelt sich dabei lediglich um den Projektname! Dieser sollte (und wird es hoffentlich) sich bis zum Release noch ändern.


 
Zuletzt bearbeitet von einem Moderator:
Klingt sehr interessant.

Für mich als alten Hasen, würde ich mal behaupten, ist der Blender Teil nicht so wichtig.
Viel mehr interessiert mich die Arbeit in Nifskope. Wie wird sich das Verhalten mit den Dismemberment Part die ja alle ihren eigenen Nummern Code haben.
Und mit unterschiedlicher Anzahl an NiTriShapes?
 
Danke; freut mich, dass du dich der Aufgabe so umfassend annimmst!
Wenn ich dir irgendwie helfen kann, stehe ich natürlich weiterhin zur Verfügung!

Ich spiele mal noch den Dienstboten für Growlf: (Am Ende eines langen Beitrags, über das Aussterben des Moddings durch fehlende nifscripts...)
Insofern hoffe ich, daß DICE mitspielt. Würde mich sogar zu einer Spende aufraffen. Sagen wir einen Fuffi mindestens wäre mir ein Ein- Klick- Programm wert. Bitte weitersagen.
 
Danke. Ich vermute mal, daß eine gewisse finanzielle Anerkennung die Arbeit sehr beflügeln kann. Daher wäre es sicherlich wünschenswert, wenn sich noch mehr Leute dafür einklinken.

Wie Malo schon sagte: mit Blender kommen wir klar. Das Nervige ist das NIFskope- Gefummel mit dem Umstellen auf FO3- Standards vor dem Import nach Blender und zurück auf Skyrim- Standards nach dem Export aus Blender.
Das schreckt sowas von ab, zumal wenn man noch die eigentliche Blender- Arbeit dazurechnet, wie das Herstellen eines überhaupt erstmal ordentlich weightpainteten Bodies als Grundlage jeder halbwegs vernünftigen Klamotte, sowie das Umbennenen aller paarigen Bones nach der Syntax BONENAME.R bzw. .L für das Benutzen von X- MIRROR beim Weightpainten (so umbenannte Bones werden beim Bearbeiten z.B. der rechten Seite links simultan mit weightpainted).
Was da auf dem Nexus an randlosen und extrem clippenden Klamotten geboten wird, beruht nicht zuletzt auf den mistigen Körper- Vorlagen und erfüllt mich immer wieder mit Grausen.

Auf NIFtools.org wird aktuell auf COLLADA als NIFskope- Exportformat verwiesen. Ich werde heute abend mal testen, ob sich damit in Blender was anstellen läßt.
 
Zuletzt bearbeitet:
Malo schrieb:
Wie wird sich das Verhalten mit den Dismemberment Part die ja alle ihren eigenen Nummern Code haben.
Ich nehme an, Du beziehst dich hierauf? Darüber habe ich mir bisher noch keine Gedanken gemacht. Allerdings besagt die verlinkte Anleitung ja, dass man "nur" die Strings mit den entsprechenden Zahlen ersetzen muss - beispielsweise "BP_LEFTLEG" mit 37.
Theoretisch bräuchte ich also eine Liste mit den möglichen Strings und den Nummern, mit denen sie normalerweise ersetzt werden. Das sollte sich dann mit einer einfachen Ersetzungs-Funktion realisieren lassen.

Malo schrieb:
Und mit unterschiedlicher Anzahl an NiTriShapes?
Die Anzahl der NiTiShapes sollte sich auslesen lassen. Und dann werden die nötigen Änderungen einfach an jedem NiTriShape vorgenommen.
Oder verstehe ich deine Frage jetzt falsch?

Schmelz schrieb:
Danke; freut mich, dass du dich der Aufgabe so umfassend annimmst!
Wenn ich dir irgendwie helfen kann, stehe ich natürlich weiterhin zur Verfügung!
Ok, damit gehört deine Seele mir! :evil:
Im Ernst: Solange ihr meine Rückfragen beantwortet wird alles gut. :lol: Ich bin mit 3D-Modelling für Skyrim absolut nicht vertraut und brauche daher euer Wissen. Ihr wisst, was getan werden muss, ich kann es in ein Programm umsetzen (hoffentlich).

------------------------------------------------------------------------------------------------
Mein Plan sieht momentan so aus:
  1. Die im Video gezeigten Schritte automatisieren (in der Hoffnung, dass es sich dabei wirklich um den Standard-Weg handelt).
  2. So viel wie möglich der NifSkope-Automatisierung in direkte Dateiänderung umwandeln.
  3. Die Sache mit den Dismemberment-Parts angehen. Hier scheint es eine Liste mit den String-Zahlen-Äquivalenten zu geben. Daran werde ich mich mal orientieren.

Weitere Funktionen können gerne gewünscht werden. Ich meine, bei SandraX etwas zum Import in Blender gelesen zu haben. Ich benötige dann allerdings möglichst detaillierte Anleitungen.

Zu den sicherlich nett gemeinten Spenden:
Ich lehne dankend ab! Es freut mich zwar, dass der einen oder anderen Person etwas an meiner freizeitlichen Programmier-Arbeit liegt und bereit wäre, dafür zu zahlen.
Allerdings biete ich meine Programme kostenlos an und will mich auch nicht durch Spenden unter Druck setzen lassen eine bestimmte Funktion einzubauen oder das Projekt einem meiner anderen Projekte vorzuziehen - ohne mit diesem Satz jetzt irgendjemand etwas unterstellen zu wollen.
Ich bitte dies zu akzeptieren.
 
Verdammt... was hast du mit meiner Seele vor?

Wieter Wünsche? Kein Problem, aber belassen wir es vorerst hierbei. (um dich nicht zu entmutigen^^)

Die Zahl der Collisionsboxen ist dann auch egal?
 
Guten Abend,
aufgrund einiger Anfragen auf Youtube und einiger Optimierungen bezüglich des Verfahrens haben wir ein neues Tutorial erstellt.
Unter anderem wird jetzt auch erklärt, wie man die Materialeinstellungen vornimmt, damit Schritte vom Spieler sowie von Charaktären auf dem Modell zu hören sind, sowie die Partikeleffekte wie Rauch oder Funken zu sehen sind, wenn man mit einer Waffe gegen das Modell schlägt. Außerdem wird die gesamte Kollisionsmesh nun in Blender skaliert und die Kollisionseinstellungen nur noch einmal pro Modell vorgenommen, was enorm Zeit spart.

Hier findet ihr das neue Tutorial:
[video=youtube;tCkaHXTnang]http://www.youtube.com/watch?v=tCkaHXTnang[/video]

Vllt. kannst du das dann in dem Exporter berücksichtigen.

Viele Grüße
Albi
 
Ich schließe mich dann mal mit Neuigkeiten an.

Da die aktuelle NifSkope-Version auf Qt setzt ist eine Automatisierung nicht möglich!


Ok, genug Panik und Enttäuschung verbreitet. Ich meine damit eine sinnvolle Automatisierung durch Mausbewegungen, -klicks und simulierten Tastatureingaben.

Eine Automatisierung durch Dateiänderungen ist aber möglich! An dieser wird momentan auch gearbeitet. Der Vorher-Nachher-Vergleich und die Analyse der Änderungen im Hexeditor dauert leider etwas, weshalb bisher "nur" folgende Dinge vollautomatisch geschehen:
  • Reset Block Details
  • Änderung der beiden "User Version"-Einträge
  • Konvertierung von NiNode in BSFadeNode
  • "IntegerData" in BSXFlags zu 138 ändern
  • "Flags" in bhkCollisionObject auf 129 ändern

Aktuelle Vorausstzungen:
Aktuell wird das Teil in AutoIt entwickelt (wegen der Blender-Automatisierung). Eventuell reiche ich auch noch eine mit Qt erstellte Version nach. Diese dürfte nochmal einen Tick schneller sein (weil C++ meistens schneller ist als AutoIt - bei gutem Stil), bringt aber dank benötigter Framework-DLLs anstatt ein paar Kilobyte (AutoIt-Version) mindestens 10 Megabyte auf die Waage. Ich kann natürlich auch auf die Qt-Framework-DLLs verzichten (dann sind es in C++ auch nur ein paar KB), dafür gibt es dann aber kein graphisches Interface in Qt (in AutoIt ist das in den paar KB schon enthalten). Die Qt-Version enthält dann allerdings die Blender-Automatisierung nicht!

Für die bereits geleistete Arbeit dürft ihr mich jetzt loben - oder fertig machen, wenn ihr meint, dass wäre für die vergangene Zeit zu wenig. :lol:
Ansonsten hätte ich gerne ein wenig Feedback zum letzten Absatz. Vor allem im Bezug auf die mögliche Qt-Variante, ein graphisches Interface (oder reicht euch Batch?), ...
 
Hi Dice,
vielen Dank für das bisher geleistete. Ich denke, dass dir keiner böse ist, wenn du dafür ein wenig länger brauchst. ;)

Die Frage wäre, wie du das löst mit der Auswahl der Kollisionen. Wirst du den Benutzern eine Möglichkeit geben, die Materialeinstellungen ihrer Kollisionen über deinen Exporter zu definieren? Wenn ja, wie wäre das ohne grafische Oberfläche benutzerfreundlich möglich? Sollte es eine grafische Oberfläche geben, dann hätte ich kein Problem mit ein paar DLLs sowie einer größeren Datei.

Viele Grüße
Albi
 
Für die bereits geleistete Arbeit dürft ihr mich jetzt loben

Ist hiermit geschehen.
Als "Fan" des Terminals, bzw. der Eingabeaufforderung würde mir eine simple Stapelverarbeitung ausreichen.
Keep it simple eben. :)
 
Wirst du den Benutzern eine Möglichkeit geben, die Materialeinstellungen ihrer Kollisionen über deinen Exporter zu definieren?
Nein, ich bin knallhart und lasse das später manuell anpassen. :p
Wirst du den Benutzern eine Möglichkeit geben, die Materialeinstellungen ihrer Kollisionen über deinen Exporter zu definieren?
Ok, meine erste Antwort war ein Witz. Es wäre natürlich sinnvoll, wenn man die zu nutzenden Materialien irgendwie einstellen kann. Daher werde ich das schon irgendwie umsetzen.
Wenn ja, wie wäre das ohne grafische Oberfläche benutzerfreundlich möglich?
Ohne graphische Oberfläche = Batch/Shell/Terminal/Eingabeaufforderung (nenne es, wie Du willst). Und im gleichen Satz schreibst Du von Benutzerfreundlichkeit? Der Code würde dann möglicherweise so aussehen (Pseudo-Code, frei erfunden):
Code:
blexfos.exe -file "c:\meine nifs\Voll tolle Nif.nif" -mat "material1" -mat "material2"
Hier würde dann die Datei "C:\meine nifs\Voll tolle Nif.nif" angepasst werden. Sie hat zwei mindestens zwei Materialen, wobei das erste auf "material1" und das zweite auf "material2" gesetzt wird. Sollten weitere Materialien enthalten sein, werden diese hier nicht verändert. Für weitere Materialien könnte man natürlich weitere Parameter anhängen.
Für besonders unfreundlich halte ich das System nicht. Allerdings soll es Leute geben, die nicht gerne mit Eingabeaufforderungen arbeiten. Außerdem müsste der Benutzer für jede nif-Datei wissen, wie viele Materialien sie enthält und auf was diese gesetzt werden sollen. Das bedeutet: Nif in NifSkope öffnen -> Materialien zählen und notieren, welches wie gesetzt wird -> Code-Zeile(n) schreiben
Allerdings wäre es graphisch nicht viel anders. Auch hier muss der Benutzer wissen, welcher Materialeintrag auf was gesetzt werden soll. Allerdings könnte man hier eventuell alle vorhandenen Einträge in einer Tabelle anzeigen lassen.
 
Neun Monate sind inzwischen seit meiner letzten Meldung hier vergangen. Neun Monate, in denen einiges passierte.

Der größte Teil der Zeit wurde, ich gebe es zu, für andere Dinge als „BlExFoS“ genutzt. Aber auch in der Zeit, die ich in dieses Projekt investierte, tat sich viel.
Das Projekt, wie es hier bisher beschrieben wurde, existiert nicht mehr! Das ist jetzt kein Grund zur Panik, da es lediglich bedeutet, dass der Blender-Teil des Exports nicht umgesetzt wird.

Nach einigen fehlgeschlagenen Versuchen mit Blender, beschloss ich, den Blender-Teil vorläufig zu ignorieren und widmete mich NifSkope. Aus Zeitgründen sollte es eine einfache Automatisierung durch AutoIt werden. So einfach war es dann halt doch nicht. NifSkope ist ein Qt-Programm, also mit dem Qt-Framework entwickelt, und diese identifizieren sich als ein großes Element - jeder Button, jeder Schriftzug, … alles das selbe Element. Meine Recherche ergab, dass es für dieses Problem leider keine Abhilfe gibt. Eine „saubere“ Automatisierung war damit schon mal nicht mehr möglich und eine „unsaubere“ Automatisierung (Erklärung folgt später) wollte ich nicht.

Aber:

  1. NifSkope ist ein Qt-Programm.
  2. Ich arbeite selbst ständig mit Qt.
  3. NifSkope ist unter der BSD-Lizenz verfügbar, was eine „Weiterverbreitung und Verwendung in nichtkompilierter oder kompilierter Form, mit oder ohne Veränderung“ (Quelle: http://de.wikipedia.org/wiki/BSD-Lizenz) unter bestimmten Bedingungen ermöglicht.
Eine neue Idee war geboren, eine NifSkope-Variante mit Anpassungen für Skyrim. Ein Knopfdruck und das Nif-Modell wird korrekt angepasst. Na ja, schön wäre es gewesen. Leider war es mir nicht möglich, mich so weit in den Code einzuarbeiten, dass auch nur minimale Anpassungen der Modelle möglich wären – zumindest nicht in der Zeit, die ich bereit war zu opfern.

Das Ende vom Lied: Es wird halt doch eine „unsaubere“ Automatisierung. Was bisher möglich ist, kann dem Info-Video vom 24.08.13 entnommen werden.


Diese beiden Begriffe wurden von mir zur Unterscheidung von Automatisierungstechniken eingeführt.

Bei einer „sauberen“ Automatisierung können einzelne Elemente eines Interfaces direkt angesprochen und genutzt werden. Dies geschieht in AutoIt beispielsweise über die Funktion ControlClick(„title“, „text“, controlID [, button [, clicks [, x [, y]]]]). Mit ihr wird das Element über den Fenstertitel, den Text des Elements sowie die einzigartige ID des Elements eindeutig identifiziert. Optional kann noch angegeben werden mit welchem Maus-Button, wie oft und an welcher Stelle innerhalb des Elements geklickt werden soll. Durch die eindeutige Identifizierung des Elements kann es immer genutzt werden, unabhängig davon, wo es sich auf dem Bildschirm befindet.
Vorteile der „sauberen“ Automatisierung:

  • Sie ist deutlich schneller als der Mensch.
  • Der Computer kann parallel für etwas anderes genutzt werden.

Bei einer „unsauberen“ Automatisierung hingegen können diese Funktionen nicht genutzt werden – im Falle von NifSkope (und vermutlich allen Qt-Programmen) weil das Interface als ein großes Element erkannt wird. In einem solchen Fall wird die Automatiserung dadurch erreicht, indem die Benutzereingaben durch Funktione wie MouseMove(...), MouseClick(...), Send(...) (dient zum Senden von Tastatureingaben) nachgebildet werden.
Allerdings ergibt sich dadurch ein bedeutender Nachteil: Der Computer kann während der Prozess läuft nicht für andere Dinge genutzt werden, da jede Eingabe des Benutzers unweigerlich zu einem Fehler in der Automatisierung führt. Das ist auch der Grund, warum ich gerne auf die „unsaubere“ Automatisierung verzichte.
Vorteile der „unsauberen“ Automatisierung:

  • Sie ist im Normalfall immer noch schneller als der Mensch.


Nachdem ihr euch nun die ganzen Hintergrundinformationen durchgelesen habt (oder auch nicht), will ich euch den aktuellen Stand nicht vorenthalten.

Das im Video gezeigte Modell wurde von AlbiTheReal vom Team Kinetic (http://team-kinetic.de/ bzw. http://www.youtube.com/user/KIneticMods) für die Entwicklung, Tests und Info-Videos zur Verfügung gestellt.

Am Entfernen der einzelnen Properties aus den NiTriShapes arbeite ich momentan.
Wie ich das Setzen des „Has Vertex Colors“-Eintrags umsetzen werde, weiß ich noch nicht. Das Problem dabei ist, dass ich theoretisch die Anzahl der NiTriShapes und den Wert des Eintrags wissen müsste. Er könnte ja bereits auf „yes“ stehen und dürfte somit nicht geändert werden.
Da ich die Anzahl der NiTriShapes für „Update Tangent Space“ aber sowieso benötige, könnte man die eventuell vor der Anpassung vom Benutzer erfragen.

Ein weiteres Problem wird das Kopieren der „BSLightningShaderProperty“ aus einem anderen Modell sein. Die Lösung hierfür ist momentan, dass die Automatisierung nach dem Speichern des Modells endet und der Benutzer die benötigen Branches manuell kopiert.
Die Schritte nach dem Kopieren der Branches sollten sich wieder automatisieren lassen, sodass ich mir eine zweigeteilte Automatisierung als bestmögliche Lösung vorstellen könnte.

Hinweis:
Die langsamen Mausbewegungen und die Stopps werden in den Release-Versionen nahezu nicht mehr wahrnehmbar sein. Das ist momentan nur zu Debug-Zwecken so.

PS: Nachdem der Blender-Teil nun ja nicht mehr automatisiert wird und „BlExFoS“ auch kein Name für ein Release ist, bin ich für Namensvorschläge offen.
 
Zuletzt bearbeitet von einem Moderator:
Sodele, der erste Teil, also bis zur BSShaderPPLightningProperty, ist umgesetzt!

Dazu musste das Interface ein wenig verändert werden. Das Ergebnis ist im Anhang zu sehen. Außerdem habe ich für das Bild mal einen Durchlauf an Albis Modell mit der normalen Geschwindigkeit, also ohne Debug-Pausen und -Bremsen, erstellt. Das Ergebnis: Knappe 77 Sekunden wurden benötigt. (Die eine oder andere Optimierung ist hier eventuell möglich.) Wer von euch schlägt die Zeit? Aber bitte fehlerfrei und das auch nach 20 Dateien noch. :lol:

PS: Ich benötige immer noch einen sinnvollen Name für ein Release.