Polygon Reduktion Algorithmen??


  • Mod

    BorisDieKlinge schrieb:

    ja raspo, wusste nich das es lang gehen kann;)

    wirst du bald sicher merken ;), aber falls es unerwarteterweise dennoch klappt, waere es nett wenn du mal unseren bilderthread damit auffrischt 😉



  • Nun möchte ich die Geometrien etwas "vereinfachen" d.h. die polygon - zahl/auflösung wie man es auch immer nennt runtersetzen!

    Geht es da noch um so CAD-Zeug von dem Du irgendwann mal schriebst?
    Dann waere es ggf sinnvoller, zunaechst mal Objekte zu entfernen die ohnehin niemals sichtbar sind.
    Bei ueblichen Konstruktionen sind das zb Kugeln im Inneren von Kugellagern oder Bolzen und Schrauben zwischen Objekten.
    Die Polygonanzahl bei derartigen Modellen erhoeht sich insbesondere durch Bohrungen. Diese werden aber von Stans Algorithmus kaum angefasst da ein rechter Winkel zwischen den Polygonen liegt.



  • Hm ich habs geschaft den Algorithmus siehe link oben, zu implementieren.. er reduziert nun "wahllos" die anzahl der polygone um die häftel, so kann es passieren das löcher enstehen etc.!! Ja die Model kommen ursprünlich aus CAD .. aber von dem abgstehen, welceh Algorithmen kennt ihr, die polygone intelligent entferen .. bspw. nach ebenen flächen suchen udn da die polygone reduzuieren etc.

    So das die geometietrie "grob" erhalten bleibt .. etc.

    grüße

    EDIT: hab mal gegoogelt, aber hab bisher keine algorithmen mit code etc. gefunden.. wisst ihr vll. was??



  • ROAM! Wird häufig für Terrains benutzt, funktioniert jedoch auch für Modelle. Besonders an diesem Algo ist, dass es auch beachtet wie stark die Reduzierung an bestimmten stellen auffallen sollte.


  • Mod

    roam benutzt niemand mehr, es eignet sich eigentlich auch nur fuer terrain 😉

    soweit ich weiss gibt es keinen algorithmuss der perfekt funktioniert, einfach deswegen weil es keine mathematische moeglichkeit gibt festzustellen, welches vertex fuers optimische empfinden am wenigsten wichtig ist. Am schlimsten bist du dran wenn du viele unabhaengige objekte hast, dann werden wahllos welche verschwinden (z.b. reifen von nem wagen).

    folge Hellis anweisung erstmal ein besseres culling von nicht sichtbaren dingen zu implementieren, das ist schmerzfreier.



  • ok gut,

    d.h. es gibt algorihmen die "nicht sichtaber objekte" erkennen und entfernen? oder muss ich da selber ran??


  • Mod

    hsr, pvs, occlusion queries
    sind deine stichwoerter 😉



  • Wenn die Konstruktionshierarchie noch intakt ist (jedes Konstruktionsteil setzt sich aus einer Anzahl kleinerer Teile zusammen, jedes davon wieder aus kleineren, usw) kannst Du in unterster Ebene leicht eine Menge Kleinteile filtern die fuer die Wahrnehmung der Gesamtkonstruktion irrelevant sind.

    Bei CAD-Konstruktionen kannst Du auch oft schon am Objektnamen erkennen ob es sich um ein Normteil (zb. Schraube, Mutter, Unterlegscheibe, etc) handelt und darauf erstmal grosszuegig verzichten.



  • soweit ich weiss gibt es keinen algorithmuss der perfekt funktioniert, einfach deswegen weil es keine mathematische moeglichkeit gibt festzustellen, welches vertex fuers optimische empfinden am wenigsten wichtig ist.

    Ich denke schon das dies geht! Man kann einfach testen in wie weit sich die Normalen, bzw die Senkrechte zur Ebene der Dreiecke unterscheiden. Reduziert wird dann nur an den stellen wo der unterschied nur sehr gering ist. Ich wüsste auch nicht warum man kein ROAM verwenden soll, ist ja schön das das kaum noch jemand benutzt, aber für seine zwecke ist es einfach optimal, er kann soger in echtzeit eine polygon redutzierung durchführen.



  • Man kann einfach testen in wie weit sich die Normalen, bzw die Senkrechte zur Ebene der Dreiecke unterscheiden. Reduziert wird dann nur an den stellen wo der unterschied nur sehr gering ist.

    Du kannst Dir ja mal durchlesen was der Algorithmus tut den BorisDieKlinge bereits implementiert hat 😉
    Die menschliche Wahrnehmung ist dann aber leider doch noch etwas komplexer als das.


  • Mod

    Code-Walker schrieb:

    soweit ich weiss gibt es keinen algorithmuss der perfekt funktioniert, einfach deswegen weil es keine mathematische moeglichkeit gibt festzustellen, welches vertex fuers optimische empfinden am wenigsten wichtig ist.

    Ich denke schon das dies geht! Man kann einfach testen in wie weit sich die Normalen, bzw die Senkrechte zur Ebene der Dreiecke unterscheiden.

    man macht sogar noch viel komplexere dinge, trotzdem sind die resultate weit aus schlechter als was ein mensch bewerkstelligt und entsprechend hast du nur minderwertige resultate. z.b. eben wenn mehrere objekte zusammenhaengen, ein ball auf einem tisch als beispiel. ein mensch wuerde dafuer sorgene, selbst im low-poly, dass der ball noch auf dem tisch liegt, der algorithmus hingegen weiss davon nichts, bei deiner idee sieht er normalen und wird den rest vom ball schweben lassen. Ein mensch weiss, dass er eher die unterseite vom tisch komplett loescht, als dass er den ball weiter reduziert, dein algorithmus wuerde die eckigen teile am tisch bevorzugen und den ball quadrieren.

    visuelle empfindung ist eben weit mehr, was schon alleine daran zu sehen ist, dass jeder mensch andere dinge als wichtig erachtet bei einem model.

    Ich wüsste auch nicht warum man kein ROAM verwenden soll, ist ja schön das das kaum noch jemand benutzt, aber für seine zwecke ist es einfach optimal, er kann soger in echtzeit eine polygon redutzierung durchführen.

    gibt einige gruende.
    1. ROAM ist kein polygon reduzierungs verfahren, roam ist ein progressive mesh. das mag zwar kleinlich klingen, aber sie haben einen anderen sinn. ROAM baut ein mesh auf, je nachdem wo du bist, aber welche vertices entfernt werden oder nicht, das entscheidet roam nicht, dahinter steckt kein fuer heightmaps spezialisierter algorithmus.
    und deswegen hat man roam nur fuer terrain verwendet, weil man fuer ein terrain sehr sehr einfach feststellen kann welche vertices wichtig sind, aber diese bewertung wird in so ziemlich allen terrainrenderingverfahren gleich gemacht.
    ROAM ist also nur der algorithmus der die meshes "zusammenbaut". einen solchen algorithmen hat der threadsteller ja schon fuer 3d fertig implementiert.
    2. ROAM, wie schon gesagt, ist ein progressive mesh verfahren dass meshes zusammenbaut. das ist sehr viel langsammer heutzutage als ein mesh einfach nur zu rendern. jetzt magst du sagen "er kann es nur einmal zusammenbauen", klar.
    genau das machen all die anderen algorithmen.

    wenn du von roam weder eine gute vertexselektion im 3d raum bekommst, noch die progressive mesh eigenschaften nutzt, dann bleibt leider nicht mehr viel vom algorithmus.



  • Hey Jungs dank schonmal für euere Hilfe:)

    In den CAD Zeichnunegn sind momentan keine schrauen oder sonsitge kram drin.. aber ihr habt recht.. anhand der namen könnte ich schon filter... !
    Ist ne ganz interessante sache das 3D Zeugs:)

    Der Edge-Collapse Algorithmus den ich implemtieert hab, hab ich nun so umgemodelt, das er mesh welche eine bestimmte anzahl von polygonen hat filtert.. so werden bspw. komplexe rohre welche aus tausenden polygonen bestehen grobv granularer und andere nicht.. am ende sieht die zeichnung immer noch sehr gut aus, und sie ist viel viel kleiner;)

    das ROAM effekt ist ja eig. ähnlich wie das edge-Collapse, nur dynamisch zur renderzeit oder.. d.h. weiter entferten opbejte sind groß naha objekte fein..


Anmelden zum Antworten