Automatisierte Mod-Skalierung [update v0.3]

  • Hallo Leute!


    Da ich mich jetzt schon des öfteren mit dem Skalieren von Mods herumgeärgert habe, bin ich das Thema mal von einer anderen Richtung angegangen.
    Da die Modelldaten ja quasi offen als XML-Daten (i3D-Datei) vorliegen, habe ich dort die Vertices und alles was einen Translationswert hat mal manipuliert, sprich die Werte mit einem Faktor x multipliziert.
    Da dies bei einfachen Modellen (Würfel) ohne Probleme geklappt hat, habe ich mich auf die Suche nach einer Möglichkeit gemacht, um dies bei umfangreichen Modellen automatisiert zu erledigen.


    Geendet hat diese Suche bei einem sehr leistungsfähigen XML-Editor namens foxe (firstobject XML Editor). Dieser ist kostenlos und hat ein unschlagbares Feature: er ist programmierbar!


    Mit der freundlichen Unterstützung des Authors habe ich ein paar Funktionen zusammengeklöppelt, die folgende Daten skalieren:


    • p-Attribute der v-Elemente (Vertices, Datei: modname.i3D)
    • translation-Attribute aller Elemente die dieses Attribut haben (Datei: modname.i3D)
    • density-Attribute (Gewicht wird der Verkleinerung angepasst oder bleibt wie vorher, Datei: modname.i3D)
    • radius-Attribute der wheel-Elemente (Datei: modname.xml)
    • centerOfMass-Attribut der component1 (Datei: modname.xml)


    Ich danke den Leuten, die mir einige Mods skaliert haben und ihr Feedback abgegeben haben.


    Suche immer noch Infos, was mit den Normals-Einträgen (n) bei den Vertices passieren muss: auch skalieren? Und was bedeuten die Einträge t0 bis t16?
    Jegliche Hinweise und Verbesserungen sind willkommen.


    Ihr benötigt:
    einen entpackten Mod (von dem ihr natürlich eine Sicherungskopie macht)
    Den XML-Editor foxe: http://www.firstobject.com/dn_editor.htm
    Mein angehängtes Script modscale.foal (Zip entpacken)


    Anleitung:

    • foxe installieren
    • modname.i3d in foxe öffnen
    • modname.xml in foxe öffnen
    • modscale.foal in foxe öffnen
    • im unteren Bereich der modscale.foal können einige Funktionen beeinflusst werden. Erklärung siehe unten*
    • Taste F9 drücken
    • Datei wählen -> OK
    • bei der i3D kann es jetzt etwas dauern, wenn der Cursor wieder blinkt ist er fertig
    • im Ausgabefenster (unten) rechtsklick -> Open in document window
    • Datei entsprechend abspeichern
    • im Menü "Window" wieder zur modscale.foal wechseln
    • wieder F9 drücken
    • diesmal die andere Datei wählen und weiter wie bei der Ersten
    • Testen im GE oder gleich im Game


    *Update 20.02.2012 v0.3:
    Es können jetzt getrennte Werte für X,Y,Z verwendet werden. Lasst euch aber gesagt sein, dass bei Fahrzeugen Eierreifen entstehen, wenn unterschiedliche Werte für Y (Höhe) und Z (Länge) verwendet werden. Idealerweise skaliert man einen Mod, dessen Proportionen stimmen. Ich halte uneinheitliches Skalieren für Pfusch!

    Code
    num scaleFactorX = 0.8; // Skalierungsfaktor X-Wert (Breite)
    num scaleFactorY = 0.8; // Skalierungsfaktor Y-Wert (Höhe)
    num scaleFactorZ = 0.8; // Skalierungsfaktor Z-Wert (Länge)


    Durch das Skalieren ändert sich das Gewicht des Mods drastisch (wird leichter). Um genau zu sein wird es um scaleFactor3 leichter. Um dem entgegen zu wirken, gibt es nun zwei Möglichkeiten, was mit dem Gewicht passieren soll. Entweder es wird um den scaleFactorD leichter, oder es bleibt so wie vor der Skalierung. scaleFactorD MUSS immer angegeben werden und sollte der Modellskalierung entsprechen.
    Mit der Variable densityMethod wird eingestellt, wie gerechnet wird.

    Code
    num scaleFactorD = 0.8; // Skalierungsfaktor für density (Gewichtsberechnung)
    int densityMethod = 1; // 1: Gewicht um scaleFactorD reduzieren, 2: Gewicht wie vor Skalierung


    modname.xml:
    Die Skalierung des Reifenradius verwendet den Wert scaleFactorY
    Wird das Script auf die xml angewendet, sollten grundsätzlich alle Skalierungsfaktoren einheitlich sein.


    Durch den kleineren Reifenumfang werden Fahrzeuge langsamer. Das kann in der XML durch anpassen der Motordaten ausgeglichen werden. Eine genauere Anleitung hierzu folgt evtl. noch.


    Hier das ganze als Video-Tutorial. Ein großes Merci an schwabentutorials aka modelleicher:thumbup:


    English translation:
    [expander]What you need:
    an unpacked mod (keep a copy somewhere)
    the XML-Editor foxe: www.firstobject.com/dn_editor.htm
    my script modscale.foal (unpack zip)


    Instructions:

    • install foxe
    • open modname.i3d in foxe
    • open modname.xml in foxe
    • open modscale.foal in foxe
    • at the end of the modscale.foal you can change some values, like the scale factor. See description below*
    • Press key F9
    • choose file to convert -> OK
    • converting the i3D it may take up to a few minutes; wait until the output window appears or the cursor starts blinking
    • in the output window (normally at the bottom) right klick your mouse -> Open in document window
    • save the converted file, you may overwrite the original directly
    • in the "Window"-menu switch back to modscale.foal
    • press key F9 again
    • choose the other file this time and proceed as with the first
    • test in GE or directly in the game


    *Update 20.02.2012 v0.3:
    It is possible to use different values for scaling X,Y,Z. Be aware that unequal values on Y (height) and Z (length) will result in oval tyres!
    It´s best practice to scale mods wich already have correct proportions.

    Code
    num scaleFactorX = 0.8; // scale factor X-value (width)
    num scaleFactorY = 0.8; // scale factor Y-value (height)
    num scaleFactorZ = 0.8; // scale factor Z-value (length)


    To compensate the huge weight loss due to scaling (weight*scaleFactor3) you have two options. 1: Reduce the weight by the same percentage value as the scaling or leave it like before scaling.
    scaleFactorD MUST be set and should correspond the scale factor.
    The variable densityMethod is used to choose the weight mode.

    Code
    num scaleFactorD = 0.8; // scale factor for density (part of weight in ls)
    int densityMethod = 1; // 1: reduce weight to scaleFactorD, 2: weight like before scaling


    modname.xml:
    Scaling of the wheel radius uses scaleFactorY.
    If you use the script for converting the modname.xml please be sure to use equal scale factors.
    Because of the smaller wheel size vehicles will get slower. This may be changed in the XML->motor rpm. A more detailed instruction may follow.[/expander]

  • Zu deine Fragen:
    Wofür die n-Werte sind weiß ich auch nicht, hab ich mich aber auch schon des Öfteren gefragt.
    Die t0-Werte (die anderent-Werte vermutlich auch, hab ich aber noch nie gesehen) geben an, wo der Punkt auf der Textur liegt. Wenn du die Werte auch skalieren würdest, würdest du deine ganze Textur "kaputt machen". Die solltest du also so lassen, wie sie sind.


    Ich werd das Tool auf jeden Fall mal testen und Feedback geben.

  • Klasse!
    Funktioniert auf den ersten Blick tadelos!
    Hab mal einen von meinen 900er Fendts genommen ... die Felgen hatt er mir auch zerschossen, der Radius der Räder in der .xml muss angepasst werden, ebenso die Motorleistung, da er durch die kleineren Räder wohl etwas langsamer ist ...
    Mit den kleinen Problemchen kann ich gut leben ... :) ist ja blitzschnell geändert.


    Hab mal ein Bild eingefügt, da kann man sehen, dass er jetzt so groß wie ein 700er ist ... auch die zerschossenen Felgen erkennt man.



  • Hier mal mein erster Testbericht:


    Testfahrzeug: Original X720 als Mod mit Bel31.
    Skalierungsfaktor habe ich auf 0.8 gelassen, weil die Modelle von GIANTS ja angeblich ca 1,25-Fach größer sind als die Originalmaße (Fragt sich nur, wieso der X720 nachher kleiner ist als der Fendt 615 vom Eifok-Team der ja angeblich 1:1 ist). Alles wurde ordnungsgemäß skaliert. Durch die kleineren Reifen fährt der auch nur noch 40km/h (was ja logisch ist). Die Positionen der Beleuchtung (Coronas und Lichtquellen) passt super. Die Innenkamera passt auch genau, nur die Außenkamera ist etwas zu niedrig. Durch die Skalierung bedingt passen FH und HH natürlich nicht mehr genau an den Geräten. Wenn man alles gleichmäßig skalieren würde, würde alles natürlich wieder passen.

  • webalizer
    Nein passen nicht mehr, aber egal ... was mir jetzt noch aufgefallen ist, er lässt ein paar Verknüpfungen zu den Texturen verschwinden, in meinem Fall vom vorderen Nummernschildträger und vom Antennenfuss. Ist aber auch schnell zu beheben.




    Kommando zurück!
    Die Texturdateien waren beim Original auch nicht vorhanden :evil:

  • Test 2:


    Diesmal mein JD7810.


    Auch hier klappt alles Einwandfrei. Originalhöhe bei Wikibooks rausgesucht, mit einer TransformGroup die aktuelle Höhe vom Trecker ermittelt und dann über den Dreisatz den Skalierungsfaktor ermittelt. Tecker somit schön 1:1 :thumbsup: Ich konnte keinerlei Fehler feststellen, nur die übliche Sachen bezüglich der Geschwindigkeit und der FH und HH (die ja eh unvermeidlich und logisch sind). Die TrailerAttacher sitzen genau richtig.




    Und wo ich dabei war auch gleich die Originalmaße vom X720 rausgesucht. Den musste ich dann noch wieder ein Stück hochskalieren, um auf 1:1 zu kommen. Auch nach einer erneuten Skalierung gab es hier keine Fehler, außer das mit der Kamera. Die lässt sich ja über den GE schnell wieder platzieren, somit für mich also kein gravierender Fehler.



    Edit:
    4110: Du kannst einfach über "File -> Open" die drei Dateien nacheinander öffnen. Über "Window" kann man zwischen den Dateien wechseln.

  • Hi,


    ich möchte mich ganz herzlich bei dir für diese geniale Idee bedanken. Ich habe große Hoffnung, dass jetzt für mich das stundenlange scalen, Indexe anpassen, Colliboxen ummodelln etc. entfällt. :)
    werde das ganze mal bei Gelegenheit testen. Aufgrund der bisherigen Erfahrungsberichten kann ich da ja dann guter Hoffnung rangehen :thumbup:

  • Hmm, ich habe die modname.i3d, modname.xml und die modscale.foal mit Foxe geöffnet. Den Wert hab ich bei 0.8 gelassen aber wenn ich denn f9 drücke kommt " No document available to serve as function argument" ?( Mach ich irgendwas falsch :?:

  • Hat auch bei mir gut geklappt. Dankeschön für das Super tut.
    Das mit den Felgen teste ich gleich mal mit einem Schlepper wo Felgen und Reifen getrennt sind...

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!