Tool um Model mesh optimierung und Polygon reduction für 3DS files



  • @hellihjb : Hmm ja hat sich einiges geändert:) die polygon reduzierung die ich aus c in .NET portiert habe, funktioniert ja auch.. aber mit nem exteren Tool hab ich vll. noch paar möglichkeiten etc.

    Mir is aufgefallen das ein Model das ich verwenden will 800.000 Polygone hat! Rein 3D Perfomance technisch ist das viel zu viel oder?


  • Mod

    hellihjb schrieb:

    Hat sich an Deinem Problem seit letztem Mal igendwas veraendert?

    scheinbar dass er nach 2 monaten gemerkt hat, dass es doch nicht so einfach ist es selbst zu implementieren.
    jetzt wird er also alle moeglichen libs nehmen, dann muss er sehen, ob ihm der qualitaetsverlust die sache wert ist.

    Boris, wenn du mal ein screenshot zeigen wuerdest, damit man sich in etwa vorstellen kann was du machst, wuerde den leuten vielleicht eher was hilfreiches einfallen.

    Waere auch gut zu wissen um welche datenmengen und performance es sich bei dir zZ handelt.



  • Ich kenne zwar Deine Modelle nicht, aber ein generelles Problem bei technischen Zeichnungen sind Normteile die an jeder erdenklichen Stelle Bohrungen fuer irgendwelche Schrauben haben.
    Hier zur Verdeutlichung ein Screenshot.
    Wie ich schon an anderer Stelle schrieb sind solche Details fuer die Darstellung der eigentlichen Konstruktion irrelevant aber werden von den ueblichen Optimierer erst als allerletztes entfernt weil der Winkel zwischen den anliegenden Polygonen maximal ist.
    Um derartige Bohrungen zu entfernen kann man die Kanten zwischen jeweils zwei 90-Grad-Polygonen verfolgen. Bilden diese einen Kreis mit entsprechend kleinem Radius wird das "Loch" geschlossen und die uebrigen Polygone entfernt.



  • @raspo: Ne ich habs es doch erfolrei implementiert, und es erfüll auch seinen zweck.. ich recheriere gerade welche optimierungen noch vorgenommen werden könnten bspw "polygon merge algorithm" ...

    das problem liegt an .NET WPF 3D framework nehm ich an, das ding is nich dafür gedacht komplexe modelle effizient darzustellen vorallem flüssig!!


  • Mod

    BorisDieKlinge schrieb:

    @raspo: Ne ich habs es doch erfolrei implementiert, und es erfüll auch seinen zweck.. ich recheriere gerade welche optimierungen noch vorgenommen werden könnten bspw "polygon merge algorithm" ...

    sollte das nicht teil deiner lib sein 😉

    das problem liegt an .NET WPF 3D framework nehm ich an, das ding is nich dafür gedacht komplexe modelle effizient darzustellen vorallem flüssig!!

    zum teil haengt es aber auch sehr von den personen ab die das benutzen, also, wie ist die performance und was musst du genau zeichnen und wie?



  • naja ich hab nen gewöhnlichen Viewport3D , darin kann man ja lichter, cameras, und eben 3d modelle /Geometrien darstellen etc.!

    Naja ich lade komplette modelle aus 3d Files, weche z.t. schon 100.000 polygone haben können! Der typischen wpf 3d Scenengraph welcher aus Model3D/Model3DGroup/GeomertyModel3D objecten bestellt, wrappe ich in ElementUI3DModel Objecte, damit ich damit interaktiv arbeiten kann! Zudem lade ich mehere Modelle (die ins sicher selber ja aus nem szenengraph bstehen) und gliedere diese in in in den globalen graphen ein.. das alles geht etc.!! naja was soll ich sagen, wie könnte man es anderes machen? so wird es nunmal in wpf 3d beschrieben!!



  • Wieviele Knoten (Render-Calls) hat Dein Graph ?


  • Mod

    100k polys ist echt wenig, das schafft man ja mit einem software rasterizer fluessig. nur so zum vergleich, auf einer psp schaffe ich in normalen szenen mit texturen usw ca 2Mio tri/s. das waeren 20fps bei deinem model.
    Du bist vermutlich wirklich nur cpu limitiert, am objekt zu optimieren sollte an sich nichts bringen sofern du damit nicht drawcalls an sich reduzieren kannst.

    unter 400 dreiecken solltest du nicht wirklich anfangen zu zeichnen zu wollen.



  • @hellihjb: Wieviele Knoten (Render-Calls) hat Dein Graph ? Meinst du damit alle Modelgruppen vom Root bis zu den eigentlioche geometrien?

    @rapso: 3Ghz 1GB ram, MSI 512 Graka... ein Model mit 30.000 polys in einer rotationanimation = 10fps.. das kann doch net sein , ! das ganze .NET framework ist wohl der flaschen hals, wobei WPF 3D nicht für sowas gemacht ihdenk ich!!

    was würde ihr mir noch vorschlagen?



  • Meinst du damit alle Modelgruppen vom Root bis zu den eigentlioche geometrien?

    "Alle" und "alle mit Geometrie drin".

    MSI 512 Graka...

    Soso.

    ein Model mit 30.000 polys in einer rotationanimation = 10fps..

    Da machst Du irgendwas falsch.
    Geht's mit weniger Polygonen schneller?
    Eine Vermutung waere, dass Du pro Frame VertexBuffer oder Texturen neu erzeugst.

    was würde ihr mir noch vorschlagen?

    Direct3D-Debug installieren, GPU-Profiler verwenden.



  • Hey, also folgendes hab jetzt mal das ganze Model genommen dasi ich brauche

    Grafikkarte: MSI NX6200AX (NVIDIA GeForce 6200AX)

    Model Scene Gesamt:

    Gruppen Knoten: 44
    Geometry Knoten 1.784
    Texture Coordinaten 1.261.177 (hab aber keine texturen drin???)
    3Point Koordinaten 1.263.461
    Triangle Indicies 4.046.146
    Entspricht Polygonen 1.348.714

    Ein Point light, keine shader.. bzw. standart shader (kenn mich da nich aus)

    Framerate jetzt ca. 0.5 f/s 😉

    Das gane Direct3D debugging etc. damit kann ich ja nich viel machen.. hab ja groß keine einfluss darauf was das .NET Framework alles macht von DirectX bis zum 3D Viewport in der WPF Apllikation!?

    Ja es geht schneller wenn ich weniger Polygone habe!

    Grüße



  • Geometry Knoten 1.784

    Das bedeutet auch dementsprechend viele Render-Calls.
    Du solltest versuchen Sub-Trees die statische Geometrie bilden zu einem Knoten zusammenzufassen.



  • @hellihjb : Wie soll ich diese Konten zusammenfassen? Nehmen wir an jeder dieser Geometry knoten wäre ein Würfel, wie soll ich die zusammenenfallen? Soll ich da zwei würfel irgendwie verschmelzen? Ich komm da nich ganz mit:(



  • Ja genau, anstatt zB zehn Mal einen Wuerfel zu Rendern, renderst Du einmal zehn Wuerfel um den Pipeline-Fluss nicht staendig unnoetig zu unterbrechen.
    Du erzeugst also einen Vertex-Buffer in dem die Vertices bereits mit ihrer relativen Matrix vortransformiert abgelegt sind.
    Und, sofern vorhanden, einen Index-Buffer in dem die Indices entsprechend des Offsets des zugehoerigen Vertex-Buffers verschoben sind.

    Da Du aber erwaehntest dass ein *einzelnes* Objekt bereits unangemessen langsam sei, liegt Dein eigentliches Problem moeglicherweise ganz woanders.



  • hmm ok, gibts er verfahren, algorithmen tools, dir mir knoten bzw, meshes auf der gleichen ebene im szenengrafph verschmetzen??



  • Ne GeForce 6200 ist allerdings auch nicht so der Hit ^^
    Und zeig doch mal den Sourcecode, sonst hat das hier sowieso keinen Sinn


Anmelden zum Antworten