Automatisierte Änderung v. Mapobjekten [v0.1 24.02.12]

  • Das sollte eigentlich so hinhauen:


    Code
    //Variablen eintragen
    str tagName = "Shape"; // suche in XML-Tag z.B. Shape
    str attributeFind = "clipDistance"; // zu suchendes Attribut
    str attributeValueFind = "1000"; // zu suchender Attribut-Wert
    str attributeChange = "clipDistance"; // zu änderndes Attribut
    str attributeValue = "500"; // neuer Wert
    //Ende Variablen eintragen
  • Nettes PDF, leider fehlt ein Link zur angehängten "collision.foal"
    Da solle man eventuell noch einen externen Link basteln und den mit in die PDF packen.
    Also so, wie beim Foxe...

    Die Rechtschreibung ist Freeware. Du darfst sie kostenlos nutzen.
    Sie ist aber nicht OpenSource, d.h. Du sollst sie nicht verändern oder in veränderter Form veröffentlichen.

  • Danke für dieses geniale Script und die noch genialere Anleitung.


    Eine Frage hätte ich. Angenommen ich möchte bei den Shapes "ashTree" "birchTree" und "oakTree" die clipDistance ändern. Nun könnte ich ja jedes mal das Script ändern und 3 Durchgänge laufen lassen. Dazwischen muss ich aber immer das geänderte Dokument aus dem Ausgabe Fenster speichern und neu laden.


    Könnte man in dem Script auch mehrere Funktionen aneinander hängen?



    Gruß Patrick

  • Jo, geht. Musst nur drauf achten, dass die Variablen eindeutig sind. Ansonsten macht der nur Murks.
    Also ganz vereinfacht dargestellt so:
    main(xmlDoc){
    vars = "blah";
    xmlDoc1 = funktion(xmlDoc, vars);
    vars1 = "blah1";
    xmlDoc2 = funktion(xmlDoc1, vars1);
    return xmlDoc2;
    }



    Handelt es sich da um die Standardbäume? Da kannst du auch übers Material arbeiten. Das ist nämlich bei allen Bäumen gleich, nur fürs LOD ist das anders. Da aber eh nur die CD beim LOD wichtig ist braucht man da also nur einmal das ganze Gedöns.

  • Danke, so ganz habe ich es allerdings nicht verstanden in Bezug auf das Script.


    Würde das dann so ausschauen?



    Das mit dem Material habe ich nicht ganz verstanden, sorry.




    Und ja es geht um die Standardbäume. Und da gleich noch eine Frage.
    Ich habe beispielsweise den oakTree. Der hat eine ClipDistance von 600.000, die LOD von dem Baum 1.000.000.
    Auf der Standard Map hat der Baum 400, wieviel die LOD hat weiß ich grade nicht.


    Welcher Wert sollte da nun geändert werden, bzw. wirkt sich auf die Performance im Spiel aus?


    Gruß Patrick

  • Fast richtig:
    Die erste change_collision bekommt xmlDoc als parameter und gibt xmlDoc1 zurück (nicht 2),
    die zweite change_collision bekommt xmlDoc1 als Parameter (nicht 2) und gibt xmlDoc2 zurück,
    die dritte change_collision bekommt xmlDoc2 als Parameter (nicht 3) und gibt xmlDoc3 zurück
    Und am Ende wird beim return xmlDoc3 ausgegeben (nicht xmlDoc).



    Du verwendest zum suchen jetzt jeweils den Namen der Bäume. Hier kannst du aber das Material (die ID) verwenden, weil die bei alle Bäume die Gleiche ist. Die Baumtexturen sind halt alle auf einer UV-Map drauf.
    Das letzte LOD-Element vom Baum bekommt die CD, die anderen brauchen den nicht (entspricht dann ein Defaultwert von 1mio).
    Solange du nur die maximale sichtbare Entfernung des letzten LOD-Elements veränderst und nicht die tatsächlichen LOD-Werte wird man das in der Performance kaum bemerken. Nur wenn man ganz viele Bäume hat wird die Anzahl der gerenderten Objekte entsprechend höher, was dann irgendwann schon mehr oder weniger stark auf die fps drückt.

  • Uh. Kompliziert.


    Zunächst die Clipdistance:


    Das schaut ja ungefähr so aus, das ist jetzt aus einer SampleModMap:



    Da ist jetzt bei der zu ändernden Map in der ersten Zeile bei clipDistance 60000 drin. Die wollte ich ändern, weil ich Hoffnung hatte das würde sich auf die Performance auswirken.


    Und das mit dem Script habe ich jetzt nicht ganz verstanden, sorry.


    P.S.: Ja, ich kenne Dein Performance Tutorial, das ist auch in meinen Lesezeichen enthalten. ;) Deshalb befasse ich mich ja gerade mit den CD.



    Gruß Patrick

  • Zitat

    <Shape name="oakTree_lod2" clipDistance="400" nodeId="2317" materialIds="180" shapeId="42" receiveShadows="true"/>


    Das ist die einzig wichtige Zeile um die CDs bei den Standardbäumen zu ändern. Die anderen beiden Teile des LODs werden durch das LOD selbst schon quasi mit einer CD versehen ( 80 für *_lod0 und 150 für *_lod1 ).


    CDs brauchst du also nur für *_lod2 setzen. Da die Standardbäume alle, wie schon erwähnt, das gleiche Material verwenden geht das ersetzen ganz einfach:


    Damit brauchst du den Code nur einmal und setzt damit die CDs bei alle Bäume, egal ob Esche, Eiche oder Birke. Wenn ich mich recht erinnere gibts sogar noch mehr verschiedene Bäume.

  • Kommt drauf an. Wenn die CD jetzt auf 400 steht und du auf 1000 stellst sollte sich erstmal aus theoretischer Sicht nicht viel an der Performance ändern, die lod2 Teile haben ja nur 8 Polys. Problematisch wird es nur, wenn du sehr viele Objekte hast. Bei zuvielen Objekten kommt die CPU nämlich nicht mehr hinterher und du hast FPS-Einbrüche. Auch wenn der eigentliche Polycount noch sehr gering ist.
    Andersrum wenn du die CD verringerst kannst du bei vielen Objekten durchaus eine bessere Performance bekommen, weil die CPU da dann weniger zu tun hat.

Jetzt mitmachen!

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