Polygonzahl und Performance

  • Hallihallo


    Also. Ich habe inzwischen herausgefunden, dass es zwischen den "Polygons rendered" und den komischen Verwischeffekten einen Zusammenhang gibt. Und auch welchen. Sobald die gerenderten Polygone die 1000-Grenze überschreiten, tauchen eklige Effekte auf, die an den "Sturz ins Nichts"-Moment erinnern.


    So weit so gut


    Aber woran hängt die Polygonzahl eigentlich?
    Geiwsse Objekte scheinen von denen eine Menge zu haben. Nachdem ich einen DetTree2Summer eingefügt habe, ist die Zahl um gute 200 hochgeschraubt (und damit über die 1000). Wie sind denn dann aber ganze Wälder entstanden, mit gleich _mehreren_ Bäumen UND großen Räumen und so.


    Es muss doch da irgendwo ein Optimierungsknöpfchen geben oder sowas. Naja. Optimize hab ich schon gemacht (was macht das eigentlich genau?), das hat nicht wirklich geholfen.


    Woher kommt die hohe Polygonzahl, was kann man dagegen machen und wie kann ich solchen Quatsch in Zkunft verhindern? ?(


    Gruß
    Vogelfrei

    • Offizieller Beitrag

    na ja, die polygonzahl wird größtenteils durch große flächen und objekte (auch ais) in die höhe getrieben. wir haben bei uns im download-center ein tutorial wie man diese auf geschickte weiße minimieren kann (ggf. die suche dort anwerfen ;)).


    mal zu den polygonen allgemein. eine game engine (wie die dark engine) ist dazu da, bestimmte komplexe (gebäude, personen, usw) zu errechnen. eine engine teil sich den gesamten zu rendernden bereich in sogenannte partikel - die renderpartikel ein. für jeden partikel braucht die engine eine gewisse zeit, um diesen zu errechnen. je mehr partikel umso länger wird also gebraucht. die partikel kann man in diesem fall auch mit den polygonen gleich setzen (in ziemlich neuen engines können polygone auch eine zweite bedeutung haben, welches aber eine geschichte für sich ist)! allem anschein nach haben die entwickler von lgs bei der dark engine dafür gesorgt das ab einer bestimmten polygonen anzahl gewisse details (vorallem beim texturrendering) einfach ausgelassen werden. man merkt das auch ganz gut wenn man einen langen gang hat und am ende eine ai hinstellt und die auf sich zukommen lässt. am anfang sieht man die ai so gut wie nicht - sie fällt in das weggelassene detail. wenn du aber die gleiche länge real hättest und am anderen ende würde z.b. deine freundin stehen würdest du die (vorrausgesetzt deine augen sind noch gut und du bist nicht kurzsichtig) auf anhieb als solche indexieren können. merke also in diesem fall - baue in dromed nie zu übertrieben (ich habe da selbst erfahrungen gemacht)!


    die bäume in dromed haben, da sie sehr viele ecken und rundungen benötigen daher eine höhere polygonzahl als z.b. ein stuhl oder ein tisch ...


    Zitat

    Original von masterthief
    Um die Polygonzahl zu verringern mach alles was mit Airbrushes geht mit denen.


    den sinn verstehe ich jetzt nicht ganz ... meinst du nicht solid brushes ?

  • Hm... Also dem Tut von Camelhammer (und Madbull#34, Übersetzung) entnehme ich bisher nur so viel, dass ich hier tatsächlich eine Problemzone gebaut habe, mit 800 oder mehr Polygonen.


    Weiterhin ist auch hier die Rede von Solids.
    Die erhöhen den Polycount, indem sie irgendwas mit der Ansicht machen (aufsplittern), sobald sie auf einer Oberfläche stehen:


    Zitat

    Es ist eine wenig bekannte Tatsache, dass wenn ein Brush auf einer Oberfläche steht, die Ansicht nicht in mehrere, kleinere Ansichten gesplittet wird.


    Die Lösung ist die:


    Zitat

    Ich habe herausgefunden, dass wenn man den Gridsize auf 12 stellt, den Brush danach vertikal um die kleinstmögliche Einheit verkleinert und danach Optimize macht, dass die Dark Engine die flache Ebene nicht mehr in kleinere Teile splittet.


    Das Anwendungsbeispiel lautet:


    Zitat

    Ich habe einen 50 Fuß langen Gang mit 8 10-seitigen Säulen gebaut und danach Optimize gemacht. In einer Ecke stehend hatte der Gang 200 sichtbare Polygone. Für die meisten Orte ist das inakzeptabel.
    Als nächstes habe ich den Gridsize auf 12 gesenkt, und setzte die Zylinder-Brushes auf den Boden auf. Nach einem schnellen Optimize ging ich in den Game-Mode und stellte herraus, dass der Polycount sich auf 80 reduziert hatte!
    Die Anzahl hätte noch weiter verringert werden könne, hätte ich die Texturengröße erhöht, aber meine Ergebnisse reichten aus, meine Theorie zu bestätigen: Die Brushes auf die Ebenen aufzusetzen erringert den Polycount.


    Das verstehe ich jetzt nicht. Erstens wird hier nichts vertikal um die kleinstmögliche Einheit verkleinert - und zweitens berühren die Solids (die auf dem Boden stehen!) immer noch eine Oberfläche. oO
    Weiterhin arbeite ich ohnehin mit Gridsize 12 und habe keine deckenhohen Solid Brushes.


    Hier mal zwei Screens (nicht schreien, ist mein erster DromEd Versuch ^^"").
    Screen 1, Polycount unter 80 (irgendwie hat er die Stats nicht mitgeshottet... im Testmode hab ich sie gesehen, hm). oO
    Screen 2, wir gucken in die entgegengesetzte Richtung und der Polycount verzehnfacht sich.


    XD. Und die sind schon drastisch aufgehellt. O_o


    Ich denke, es liegt tatsächlich an den Solids. Der Bogen über dem Durchgang, der in die Gasse hinausragt, ist ein Solid, ebenso die Holzleisten, die unteren Ecken und die Abgrenzungen in der Mitte der Wand.


    Hm.


    Ich muss mal ausprobieren, das alles mit kleineren und größeren Air Brushes zu lösen. Mich wundert nur, dass so viel mehr Air Brushes so viel weniger Polygone haben sollen als ein paar Solids oO. Außerdem... die Arbeit! Allein an der kleinen Gasse hab ich über zwei Stunden gesessen. Inklusive mehrmaligem Nicht-Speichern der Gamesys ^^. Und jetzt alles nochmal mit Airs zu machen... ohweh.


    Hm. Naja. Auf in den Kampf!

    • Offizieller Beitrag

    Hm, also das mit der kleinstmöglichen Einheit kann ich dir vielleicht erklären:


    Das Tut meint folgendes:
    Wenn man einen normalen Gang bastelt, denkt DromEd "Hm, da isn Gang". Wenn ich aber in die Mitte eine Säule reinmache, dann denkt DromEd "Hm, da isn Gang bis zu ersten Säule, aber dann geht ein Weg rechts herum und ein Weg links herum", was mehr Polys verursacht. Wenn man aber die Säule (is normalerweise dann ein Solid-Brush) um die kleinstmögliche Einheit verringert, sodass diese nicht mehr die Decke berührt (merkt eh kein Mensch), so denkt DromEd noch den ersten Gedankengang und nicht den zweiten, was weniger Polys verursacht. Vielleicht hätte ich es ein wenig anders beschrieben, aber wenn ich übersetze, dann nur 1:1.

  • Ahh, verstehe! Kästchendenken. Wenn die Säule sowohl Boden als auch Decke berührt, ist der Air Brush quasi unterbrochen und wird in gar viele einzelne, um die Säule herumliegende, aufgeteilt. Ergo: Rechnen, rechnen, rechnen. Etwa so?


    Aber irgendwie muss es doch immer noch schlimm sein, auch wenn die Decke nicht berührt wird. Alle meine Solids sind nämlich klein - und kommen sowieso nicht bis da oben.
    Alle meine Solids berühren allerdings auch mindestens eine Seite eines Airbrushes. Eine Berührung reicht also scheinbar, der Quader muss nicht "unterbrochen" sein.


    Ich hab mal versucht, ein paar der Soliden von ihren Airbrushs abzukratzen. Das sah ziemlich doof aus (und hat keine wirklichen Auswirkungen gehabt... war aber auch nur die bottom-Seite). Die schwebten dann 0.5 Einheiten über dem Boden, von nah nicht zu erkennen, aber aus etwas Entfernung schon. Was ist denn die kleinste Einheit? 0.01? Eigentilch soll man ja in 0.5er, allerhöchstens 0.25er Schritten gehen, weil sonst DromEd nicht mehr froh wird?


    Ich hab den Eindruck, es ist ziemlich schwierig, DromEd nicht unglücklich zu machen. Na warte, du. Dich bändige ich schon noch.

  • @ Vogelfrei
    Nein, so ist das nicht gemeint. Deine Häuser und Säulen und was auch immer sollen ja nicht in der Luft schweben. Das ist nicht nur unrealistisch (:D) sondern kann auch noch Probleme bereiten, wenn du zum Beispiel Innenräume baust. Aber z. B. die Häuser in der großen Stadtmission in Thief 2 wurde ja nicht in einen riesigen Airbrush gesetzt, sondern es gibt viele kleine Gebiete aus Airbrushes, die miteinander verbunden sind. Das siehst du sehr gut, wenn du dir mal in die Unstripped Missionen (findest du auf der Thief2-CD) anschaust. Die sind nämlich im Gegensatz zu den Missionen, die du im Dark2-Verzeichnis findest, nicht komprimiert, soll heißen, sie besitzen noch ihre Brushes. Aus diesen Missionen kann man sowieso viel Lernen.


    Aber zurück zu den in der Luft schwebenden Gebäuden: In meiner zweiten Mission (im Moment noch in Arbeit), habe ich am Anfang auch ein kleines Stadtgebiet. Obwohl es nicht sehr groß ist, hab ich mich bemüht, es dreimal um die Ecke zu bauen, damit man nicht so große, lange Flächen hat, die man sieht. Außerdem habe ich die meisten Häuser ganz an den Rand der Airbrushes gestellt, sodass sie in DromEd nur 10 Einheiten tief sind, obwohl sie im Spiel viel größer Aussehen.
    Ich kann auf deinen Screenshots leider recht wenig erkennen (schalte mal light_bright an), aber eigentlich dürften da keine Polygonprobleme auftreten. In meiner zweiten Mission habe ich eine große Halle, mit mehreren Säulen (zwar nicht 10eckig) und zylindrischem Gewölbe (Screenshot). Ich habe von keiner Seite Probleme. Ich weiß nicht, ob du schon die Befehle hilight_check_snap und hilight_do_snap kennst, aber mit denen findet (erste Befehl) DromEd nicht eingerastete Brushes und beseitigt (zweiter Befehl) sie. Allerdings sollte dein Grid nicht kleiner als 12 und nicht großer als 14 sein, weil sonst dein ganzes Level auseinander gerissen wird. Nicht eingerastete Brushes sind beim Beginn eines Levels recht egal, aber sobald du mal ein paar mehr Brushes hast (und das geht ganz schön schnell!), werden sie zu einem ernsthaften Problem, weil sie eben auch Anzeigefehler (wie das Verwischen) verursachen.

  • Es liegt schon am Polycount und der ist wirklich über 1000. :scratch:
    Grid Snap hab ich als erstes überprüft, sowohl manuell übers Eingabefenster wie auch über das KoMaG Extramenü. "no matching brushes". Ich arbeite eigentlich grundsätzlich auf zwölf, für gröbere Sachen auf vierzehn.


    Habe die Screens mal heller gemacht. (Screen 1, Screen 2) Mein Problem ist glaube ich einfach, dass eben hier und da Sachen über- und abstehen, um das Ganze realistischer und weniger "platt" aussehen zu lassen. Dieser Bogen, der in Screen 2 in die Gasse ragt, und die Holzleiste, zum Beispiel. Die hab ich alle mit Fill Solids gemacht, weils eben einfacher und vor allem schneller war, als drei Airbrushes mit verschiedenen Größen zu stapeln.
    Es ist einfach ein anderer "Baustil". Wahrscheinlich ist es besser, einfach alles, was nur irgendwie geht, mit Fill Airs zu veranstalten.


    In LotP hab ich auf solche Details noch nicht geachtet. Spiele die Mission aber sowieso gerade, da sehe ich mich mal etwas genauer um.


    Dein Screenshot, Kamon, wird bei mir übrigens nicht (mehr?) angezeigt. Keine Ahnung, woran das liegt. oO Auf thief-union.de funktioniert der Link zu den Screens aber auch nicht. Hm.

  • @ Vogelfrei
    Sorry, aber ich kann auf deinen Screens am besten Willen nicht erkennen, wie da eine Polygonzahl von 1000 zusammenkommen kann. Aber vielleicht solltest du es wirklich mit "Airbrushes übereinander stapeln" versuchen ;)
    Der Screenshot funktioniert nicht mehr, weil ich heute meine Seite ein wenig umgekrempelt habe und in den News auf Thief-Union steht auch, dass die Screenshot-Galerie erst in einiger Zeit wieder verfügbar sein wird. Hier ist trotzdem der funktionierende Link: Klick!

  • Wow, also da ist doch einiges mehr los. (Hehe, ich fange langsam an, überall Brushes zu sehen, von ganz alleine, nicht nur wenn ich wirklich Formen suche. oO)


    Ich hab mal einen neuen Screen gemacht, diesmal hat er die Logs mitangezeigt. Es ist natürlich nicht über 1000 da, aber sobald man halt den Baum ins Beet setzt, der rund 200 beisteuert, übertritt es diese magische Grenze. ;(


    Screen
    Die Logs nochmal lesbar


    Bin immer noch nicht dazu gekommen, das zu ändern, setze mich jetzt ne halbe Stunde dran und geh dann schlafen. =_= Das Wochenende war doch etwas lang und morgen fängt der Quatsch wieder an. ^^"

  • Ahja, jetzt erkenne ich auch dein Problem. Dieser Solidbrush in der Mitte der Gebäude, der diese Umrandung bildet, schaut etwas hinaus. Setz ihn halt so, dass die Mauer eine glatte Fläche bildet. Das gleiche machst du für den Vorsprung bei dem Durchgang. Ich hab solche Sachen auch (z.B. in meiner ersten Mission), aber da bin ich auch immer hart an der Grenze.
    Und achja: Pflanz halt einfach ein paar Büsche anstatt der Bäume... ;)

  • hallo,


    Ich habe eine Frage, und zwar, will ich einen grossen Airbrush ziehen, um dann darin solidbrushes etvc. zu machen, jedoch wenn ich ein qwuadrat ziehe, und portalize macehn will, kommt die meldung to many polygon per polyhedron. Ist der Airbrush zu gross, und muss ich mehrere machen, oder gibt es einfach eine grenze bei der grösse von Airbrushes?


    Grüsse


    Mayar

  • Sollte man einen Airbrush nicht größer als 400x400 ziehen, oder das gesamte Level sollte unter 1000x1000 sein?

    Denn so viele bauen heute ohne Achtung vor dem großen Erbauer.


    Die Stadt trägt sein Zeichen nicht mehr


    und ewig sucht der Makel des Schwindlers sich Zutritt zu verschaffen.

  • Hallo,


    Meine Mission, an der ich gerade dran bin, ist nicht mal zur hälfte fertig gemacht, und schon habe ich 500 Polygons als errechnet!


    Wie das,iCh bin erst gerade fertig geworden mit meinem kleinen Stätdchen, und ein paar Airbrushes (ca. acht) in Zylinderform ( Breite: 6 Höhe: 6 Länge: 60)


    Vorher war alles noch ok! Und wen ich optimize mache, dann kommt eine Fehlermeldung:


    ERROR: "SplitPortalPolyhedronByPlane: Polyhedron didn't cross plane"


    (yes to trap, No to exit, Cancel to ignore)


    Was ist da gemeint?


    Aber eben meine Polys sind schon bei 500 an machnen Bereichen, in manchen gehen sie wieder zurück auf 80, 100 , oder 200!


    Bin aber erst am Anfang meines Leves, und es sollte eigentlich kaum grösser werden, als evtl 5 MB)!