Polygonreduktion bei wiederkehrenden Formen und Anordnungen

scottatacama

Mitglied
Guten Morgen,

folgendes Problem: beim Erstellen einer Szene mit max7 bin ich etwas sorglos gewesen und habe eine große Anzahl wiederkehrender Muster mit Mesh-Objekten erstellt. Mir war zu Beginn leider nicht bewußt, welchen Umfang die Datei einnehmen würde. Auch das bereits angedachte nachträgliche Reduzieren und Verbinden einzelner Elemente werde ich Mangels Zeitnot kaum noch realisieren können.

die Fakten: ca. 4.5 Millionen Polygone, davon ca. 90 Prozent in Netzen a 208 Polygonen (abgerundete Quader mit 3er-Teilung, fast alle besitzen die gleiche Grundfläche, jedoch verschiedene Höhen und Abstände im Raster); ca. 50 Prozent dieser Körper sind zwei- oder dreiseitig von "Ihresgleichen" eingeschlossen. Das manuelle Löschen jedes einzelnen der nicht benötigten Polygone kommt leider nicht mehr in Frage, da Montag Abgabe ist. Das Hauptproblem: benötigt wird ein Ausgabeformat von ca. 12000 x 4500 Pixeln (entspricht dann 300 dpi bei 100cm Länge und 40cm Breite). Beleuchtung und Effekte sind vernachlässigbar (drei bis vier Lichtquellen, Schattenart steht noch zur Disposition). Alle Objekte sind mit zwei bis fünf ID's belegt, denen jeweils nur recht simple Streufarben-Maps zugewiesen sind. Dezeit erreiche ich mit meinem Einzelplatz-Rechner (Windows 32-bit, daher nur 3,08GB RAM möglich) leider nur um die 5000 x 2000 Punkte. Darüber hinaus verabschiedet sich max7.

Ich freue mich, falls jemand eine Lösung parat hat, wie ich in weniger als 24 Stunden Arbeitszeit aus dem Dilemma komme. Vielleicht sieht ja jemand anhand obiger Schilderung bereits einen Ausweg. Lohnt es sich, in Gruppen auftretende benachbarte Objekte zu verbinden (was auch schon mehrerer Stunden Arbeit bedarf)? Gibt es fertige Tools die allseitig verdeckte Polygone automatisch eliminieren oder besitzt jemand eine Skript-Idee? Bin für jeden Vorschlag dankbar! (nur "Optimieren" oder "vorher überlegen" kann ich gerade nicht gebrauchen :))

Vielen Dank
André
 
Wenn es alles gleiche Objekte sind, die sich nur in Skalierung unterscheiden, dann solltest du Instanzen benutzen. Du kannst ja per script durch alle deine Objekte iterieren, erkennen, ob es ein entsprechendes Objekt ist (vielleicht am Namen, oder am verwendeten Material oder was auch immer) und es dann durch eine gleich platzierte und skalierte Instanz ersetzen.

Wenn das Problem nur an der Rendergrösse liegt, dann Teil deine Kamera einfach in 9 Kameras, deren Kamerawinkel bei allen 1/3 des Hauptkamerawinkels beträgt, Platziere sie alle auf der Hauptkamera und dreh sie so (rechnen ;) ), dass die FOV's bündig sind. Dann kannst du 9 4000x1500 Bilder rendern und die dann in Photoshop zusammenfügen. Bei mehr Kameras machst du's am besten per script. Hab ich auch schon gemacht - funktioniert gut.
 
Danke!

Ich fürchte nur, ich habe Verständnisschwierigkeiten. Was nutzt mir die gescriptete Umwandlung zu Instanzen? Die Anzahl der zu rendernden Polygone ändert sich doch dadurch nicht. Oder wie soll ich das verstehen?

Zu Deinem Kameratrick: Klingt gut und wäre im Moment die effektivste Lösung. Reduzieren muss ich die Scene eh, nur dafür kann ich mir später etwas mehr Zeit lassen. Ich verstehe nur leider auch hier nicht, wie Du es konkret meinst. Wenn ich den Winkel (=Brennweite) auf 1/3 reduziere erhalte ich automatisch eine ganz andere Perspektivwirkung in jedem der neun neuen Sichtfelder. Und was soll ich drehen, die (freie?) Kamera oder Aug- oder Zielpunkt? Egal wie ich's mache, dabei ändert sich doch zwangsläufig die Projektionsebene und damit der Horizontwinkel an den FOV-Grenzen. Naja, vielleicht stelle ich mich einfach zu blöd an, Deine Tipp's zu verstehen. Du schreibst ja, dass Du es selbst schon probiert hast. Dann muss es ja eigentlich auch so funktionieren. Freue mich deshalb über ein paar Konkretisierungen. Danke.
 
Bei instanzierung müssen zwar gleich viele Polygone gerendert, aber viel weniger Daten geladen werden. Warum dein Max abschmiert, weiss ich nicht - aber es ist möglich, dass es daran liegt.
Du kannst auch ein Occlusion-culling algorithmus in maxscript implementieren - auf gamedev.net findest du genügend infos dazu - aber wenns eilt, wird dir das in unmittelbarer Zeit kaum ne Hilfe sein.

Sofern du keine Kamerashader verwendest, welche per Raytracing eine reale Linse simulieren, funktioniert das mit der Aufteilung der Kamera.
Stell dir einfach vor, du 9-telst deine Renderausgabe. Jede der 9 kameras guckt in die Mitte eines dieser neuntel und der kamera winkel entspricht 1/3 des gesammtkamerawinkels.

Die Kamera für den neuntel oben links musst du z.b. um horizontalerkamerawinkel/3 nach links und dann (im lokalen space der Hauptkamera) um vertikalkamerawinkel/3 nach oben drehen.
 
Zuletzt bearbeitet:
Danke! Jetzt hab' ich's kapiert. Funktioniert prima. Die Beschreibung bezog sich offenbar auf eine freie Kamera. Mit Zielkameras klappt es so nicht.
 
Genau! Wollt ich eigentlich noch anmerken dass du Freie Kameras einfacher drehen kannst, habs dann aber wohl vergessen :) sorry
 
Was mir beim Aufteilen der Kamera in Einzelfelder noch (zumindest bei max7) aufgefallen ist: die im Kamera-Menü angegebenen Winkel für das horizontale und vertikale Blickfeld weichen von der Realität um ein paar Dezimalstellen ab. Klingt nach nicht viel, macht sich jedoch natürlich beim späteren Zusammensetzen sofort bemerkbar. Ich empfehle also, in einer Dimension einen möglichst "runden", gut teilbaren Betrag einzugeben (sofern der AG keine exakten Brennweiten vorgibt) und die andere Dimension dann gemäß des Ausgabe-Seitenverhältnisses manuell zu berechnen.
 
Übrigens kann Backburner das Bild auch automatisch in beliebig viele Streifen zerlegen, die dann einzeln gerendert und anschließen in einem zusätzlichen Pass wieder
zusammengesetzt werden. Dazu muß man lediglich bei der Auftragszuweisung "Scanlinien aufteilen" aktivieren.
 
Klingt auch klasse. Dazu muss ich nur noch rausbekommen, wie backburner ohne Netzwerk funktioniert.

Zur Kameraaufteilung: Kommando zurück! Was bei "kleineren" Testdateien auf den ersten und zweiten Blick wunderbar funktionierte, klappt bei sei großen 5x5 Teilungen leider überhaupt nicht mehr, ohne jedes einzelne Teilbild nachträglich aufwändig zu verzerren.

Beispiel: Ausgabeformat 15000 x 7500 (2:1), Blickwinkel H 75°, V37,5°, unterteilt in fünf freie Kameras á 15°/7,5° und um die jeweils gleichen Werte lokal verdreht sieht bei mir an den Stößen wie ein eilig geklebtes Bahnhofsplakat aus. Die Abweichungen in der Montage betragen an den Rändern bis zu 200 Pixel. Nur die direkt um die mittlere Kamera gruppierten Ausschnitte scheinen dem Auge nach korrekt verbunden zu sein. Nach aussen hin wird's daramatisch. Was mache ich falsch?

Und was bezwecken eigentlich die unterschiedlich positionierten Gizmos an freien Kameras? Je nach dem, ob individuelle oder gemeinsame Schwerpunkte gewählt wurden (bei Einzelobjekten) liegen diese mal im Kamerazentrum und mal davor.
 
Backburner ohne Netzwerk ist überhaupt kein Problem. Dazu musst Du einfach nur auf Deinem Rechner Manager und Server starten.
 
Zurück