Optimierung - viele Surfaces (Haus)

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

onkelz89

Betreff: Optimierung - viele Surfaces (Haus)

BeitragDo, März 27, 2008 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

habe ein Problem Rolling Eyes

Ich erstelle in meinem eigenen Editor Häuser aus einzelteilen (diese sind in C4D erstellt) wie zB. eine Tür, einen Wandteil, Treppen, Fenster usw.

Die haben in verschiedenen Räumen auch unterschiedliche Texturen. Ein Objekt zB die Tür besteht dann aus Wandteil, Rahmen und der Tür selbst. Sind dann Childs (auch unterschiedliche Texturen).

So...

Wenn ich das nun in meinem Hauseditor speichere und in dem Mapeditor lade - geht alles klar.

Nur das jedes Objekt min. ein Surface benutzt, was den Editor nach schon wenigen Häusern extrem lahm werden lässt.

Ich möchte jetzt wenn möglich die Teile (pro Haus) zusammenfügen.

AddMesh geht schonmal nicht wegen den vielen verschiedenen Texturen und ich benutze auch eigentlich nur Entity und keine Mesh Befehle...


Ein weiteres Problem ist, dass es möglichst schnell sein müsste, weil Ingame später sollte man die netten kleinen Häuser zerstören können. Dann müsste ich (dacht ich mir) das Große eine Objekt wieder löschen, dann die Hausdatei neu laden (alle Hausteile), dort schauen was verändert wird, dann wieder alles zusammenfügen ^^

Hoffe ich habs deutlich genug geschrieben.

Vielen Dank im Vorraus und fürs lesen!!!


mfG Onkelz

Markus2

BeitragFr, März 28, 2008 13:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal sollte CopyEntity helfen wenn du immer die gleichen Teile benutzt
wir nur ein Verweis auf das original Mesh erstellt und du kannst trotzdem
Pos./Scale/Rotate benutzen etc.

Wenn sich das Mesh von so nem Haus dann verformen soll mußte
es als echte kopie erstellen .

In C4D solltest du möglichst viel an den Flächen optimieren
das keine unnötigen polygone mehr drin sind bzw. wenn es
geht welche zusammen fassen .
 

onkelz89

BeitragFr, März 28, 2008 16:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Also das mit Copy Entity mache ich schon.
Und die Polyzahl ist auf das minimal mögliche bei den Objekten gesenkt, das habe ich mir schon oft angeschaut und am Anfang konnte ich da auch noch ein paar entfernen.

Zitat:
Wenn sich das Mesh von so nem Haus dann verformen soll mußte
es als echte kopie erstellen .


Was meintest du damit? Das Haus besteht ja noch aus vielen Teilen und ich kann somit jedes ansprechen. Aber später wenn das Haus ein Teil ist dann würde ich es komplett löschen und neu bauen lassen, damit ich wieder auf jedes Teil zugreifen und es verändern kann.

Das Problem ist, diese Hausteile sind von der Größer her alle wie eine Tür+Rahmen also ca. 1,5 Meter oder so.

Wenn ich also nun ein Mittelständiges Einfamilienhaus baue... da kommen richtig viele Objekte zusammen. UND die Objekte haben mehrere Childs (2-3) und das ganze wird zur Ruckelparty Sad

Ich hoffe ihr könnt mir helfen

Markus2

BeitragFr, März 28, 2008 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Aber später wenn das Haus ein Teil ist dann würde ich es komplett löschen und neu bauen lassen


Wann ist später ?
 

onkelz89

BeitragFr, März 28, 2008 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich wollte erst das haus laden (einzelteile) und zusammenfügen.

Damit ich in einem dorfteil (zb 8 häuser) wenig surfaces habe.


Wenn jetz ein haus zb durch ne bombe "berührt wird" , wird dieses gelöscht und wieder in den einzelteilen aufgebaut - dadurch habe ich wieder zugriff auf die einzelnen stellen.

Dann prüfen wo die Bombe einschlägt und wie groß der Radius ist - demnach diese Teile löschen oder verändern (je nach Stärke der Explosion) und die übrig gebliebenen Teile wieder zu einem zusammenfügen (das meinte ich mit später)...

Alles das in einem Frame natürlich...

Kurzfassung:

- Hausdatei laden > Einzelteile erstellen
- Einzelteile zusammenfügen
- Bombe..
- Großes Haus löschen
- Hausdatei erneut laden
- Einzelteile erstellen
- prüfen welche Teile bei der Explo. verändert / gelöscht werden
- Rest wieder zusammenfügen
 

Dreamora

BeitragFr, März 28, 2008 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Wird nicht funktionieren "in einem Frame" ausser du spielst auf 10 FPS oder weniger.

Da musst du das Original-Einzelteilhaus irgendwo halten im Speicher.

Und zusammenfügen: AddMesh
Brushes mit gleicher Konfiguration werden dabei verschmolzen so das Surfaces die zusammengefügt werden können es auch werden.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Markus2

BeitragFr, März 28, 2008 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie Dreamora schon sagt geht ja der Sinn vom CopyEntity flöten
wenn du alles zusammen setzt .

The_Nici

BeitragFr, März 28, 2008 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Man könnte so ne Art Boolean-Operations machen, so wird einfach wenn die Bombe einschlägt der Krater berechnen.

Markus2

BeitragFr, März 28, 2008 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Über Mesh verformungen würde ich mir erstmal keine Gedanken machen,
man könnte die Einzelteile austauschen gehen welche die Kaputt
aussehen und das wie Bauklötze zusammen fallen lassen .
 

onkelz89

BeitragSa, März 29, 2008 10:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

erstmal vielen Dank für die bisherigen Antworten!!!


Dreamora hat Folgendes geschrieben:
Wird nicht funktionieren "in einem Frame" ausser du spielst auf 10 FPS oder weniger.

Da musst du das Original-Einzelteilhaus irgendwo halten im Speicher.


Naja das laden eines Hauses geht relativ schnell und so ne Bombe die einschlägt und berechnet werden müsste kommt nicht oft vor, ich denke einen kurzen Ruckler darf man da außer Acht lassen wenns nicht anders geht. (Ich hab ma 10 Häuser am Start geladen und wir reden von weit weniger als ne halbe Sekunde.

Dreamora hat Folgendes geschrieben:

Und zusammenfügen: AddMesh
Brushes mit gleicher Konfiguration werden dabei verschmolzen so das Surfaces die zusammengefügt werden können es auch werden.


Verschmelzen... Also so dass alle Texturen usw erhalten bleiben oder das das Objekt (Haus) ab dann mit einer auskommen muss?


Markus2 hat Folgendes geschrieben:
Wie Dreamora schon sagt geht ja der Sinn vom CopyEntity flöten
wenn du alles zusammen setzt .


Nur warum ist es trotz CopyEntity so lahm, das ist doch wegen den vielen Surfaces so oder? Und darum dachte ich mir, wäre zusammenfügen zu einem sinnvoll ?! Ich hoffe ich irre mich und es gibt noch nen einfacheren Weg Wink

Markus2 hat Folgendes geschrieben:

Über Mesh verformungen würde ich mir erstmal keine Gedanken machen,
man könnte die Einzelteile austauschen gehen welche die Kaputt
aussehen und das wie Bauklötze zusammen fallen lassen .


Jep, so wollte ich es auch machen.

Markus2

BeitragSa, März 29, 2008 13:29
Antworten mit Zitat
Benutzer-Profile anzeigen
@onkelz89

vieleicht sind die Texturen zu hochauflösend bei deinen vielen
Einzelteilen .

Oder benutze statt einer Texture nur eine Farbe oder
für ein Objekt eine gesamt Texture und eine Farbe je unter Objekt .

Sinn würde z.B. auch CopyEntity von einem Haus oder direkt
einer Häusergruppe machen nur dann mußte jedes wieder zerlegen
ein einzelobjekte das es zusammen fallen kann .

Zeige doch mal nen Screenshot von dem was gerendert werden soll ,
als Wireframe wäre auch gut .
 

onkelz89

BeitragSa, März 29, 2008 13:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Texturen sind 256x256 alle. Ich brauch auch die Texturen, nur mit Farbe sä es nachher besch..eiden aus Wink

Ich zeig erstmal die Screens:

Normal:
user posted image

Wireframe:
user posted image

Markus2

BeitragSa, März 29, 2008 15:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm,

so wie das im Moment aussieht sind es wirklich zu viele unnütze
Flächen .
Bei den paar Polygonen und wenigen Texturen macht es schon Sinn
Gleiche Texturen auf eine Surface zu bringen .

Das mit dem auseinander Fallen ist dann ein anderes Problem Wink

Ich würde dir Raten ein Haus Entity zu erstellen mit
den Surfaces Wand,Decke,Boden,Fenster,Tür und die Polys aus deinen
einzel Objekten da zu übertragen .
In Cinema kannste Gruppen benutzen und denen Namen geben bis 8 Zeichen und in BB das mit Load Anim Mesh einlesen .
Damit könntest du eine Zuordnung der Flächen machen bzw.
das zusammen basteln .

Schwieig wird es wenn du z.B. 4 sichtbar zusammen liegende Flächen
als eine haben willst . Da wäre es dann einfacher wenn du einfach
größere Deckenplatten direkt in C4D machst .
Bei den Wänden auch .
 

onkelz89

BeitragSo, März 30, 2008 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die gute Hilfe erstmal bisher Wink

Grundlegend verstehe ich wie du das meinst, Problem ist dann wieder (ich weiß ich bin schlimm) dass alle Häuser / viele Häuser ganz anders aussehen und aufgebaut sind - also wo in verschiedenen Räumen andere Texturen als Tapete, Boden, Decke, Außenwand, Fensterbank, Tür ... geben werde.
Dann wäre es schon wieder nicht möglich mit den verschiedenen Fläschen. Auch bei dem Bild (was man dort nicht sieht) sind im innern andere Texturen als Außen.

Wenn ich einfach größere Teile machen würde, könnte ich damit bestimmt einsparen, aber glaube insgesamt werden es doch noch zu viele sein... Sad

Gibt es denn eine Möglichkeit den Surfaces "zu sagen" das sie unverändert bleiben und dadurch weniger Performace ziehen? Ich weiß gar nicht genau woran es bei der Masse, der Objekte scheitert... Beim Rendern, oder weil Blitz iwas im Hintergrund macht?

Markus2

BeitragMi, Apr 02, 2008 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest in deinem Editor pro Abschnitte die Zeit messen
dann wirste wissen woran es liegt bzw. liegen könnte .
Gibt 1000sende Dinge die man falsch machen kann .

Wegen Mauer und Tapete auf einer Wand,
macht dann halt je Haus und Texture eine Surface und
minimaler gehts nicht .

Trotzdem solltest du unsinnige Flächen vermeiden (wie in der Decke im Wireframe Screenshot),
im Auto fährt man auch nicht mit angezogener Handbremse Wink

Waren das eigentlich Screenshots vom Editor ?
Die Bäume im Hintergrund , sind die Low Poly und haste die mit CopyEntity kopiert .


In OpenGl kann man statische Dinge kompilieren , also in BlitzMax
 

onkelz89

BeitragSa, Apr 05, 2008 16:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Tipps. Werde sie alle ausprobieren Smile

Das sind Bilder aus dem Editor, ja. Bäume sind sehr lowpoly und die Blätter halt auch nur sprites. Und alle per CopyEntity.

Blitz Max habe ich nicht nur B3D ist das denn so viel besser?

Mit der Decke muss ich mir nochwas überlegen, wegen späterer Zerstörung der Häuser Ingame, aber naja erstmal viele Dank Wink

Markus2

BeitragSa, Apr 05, 2008 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
B3D ist für dich ausreichend .
 

Dreamora

BeitragSa, Apr 05, 2008 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Für 3D Programmierung wenn du keine Lust hast dich Monate mit den APIs auseinander zu setzen, ist Blitz3D die richtige Wahl.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group