Lieber ein Mesh, oder mehrere kleine?

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

mpreu

Betreff: Lieber ein Mesh, oder mehrere kleine?

BeitragDi, Jul 23, 2013 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich jetzt einen Level bestehend aus Mauern bauen möchte, wäre es dann performancemässig ratsamer ein einzelnes mesh zu machen, oder macht es keinen großen unterschied ob ich ein Mauer "tile" einfach immer wieder setze?

Bzw. einen Level lieber aus mehreren einzelteilen bauen oder komplett am stück?
Das thema LOD spielt dabei erstmal keine Rolle.

Xeres

Moderator

BeitragDi, Jul 23, 2013 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Je größer desto besser, denn jeder Mesh besitzt ein eigenes Surface das die Grafikkarte abarbeiten muss.
Am Performantesten geht es mit einem SingleSurface System - könnte für simple Gebilde leicht genug selbst gebaut werden. Die Forensuche sollte zum Thema was ausspucken.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

mpreu

BeitragDi, Jul 23, 2013 18:16
Antworten mit Zitat
Benutzer-Profile anzeigen
aber ich könnte auch z.b. zwei türme aus mauern die nicht direkt nebeneinander stehen als ein objekt basteln und dieses würde ja ebenso als ein mesh bearbeitet.
ich möchte betreffs der texturen möglichst viele einzelteile haben
 

PhillipK

BeitragDi, Jul 23, 2013 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Xeres antwort ist in soweit richtig, aber:

1) Ist alles aufm bildschirm? Dann siehe Xeres!
2) Ist es ein verdammt großes level // ist weniger als sagen wir... 1/6 der map gleichzeitig zu sehen? Siehe weiter unten ^^


Eine surface ist eine sammlung von Vertices und Faces. Diese surfaces werden immer im ganzen an die grafikkarte geschickt und gerendert // im ganzen in den ram der grafikkarte geladen.
Wichtig ist es zu wissen, wie groß die surfaces werden.
Mit der größe meine ich die anzahl faces (-> sichtbare dreiecke / vierecke sowie unsichtbare dreiecke / vierecke)

Planst du mauern mit 4 flächen, solltest du diese immer batzenweise zusammenfügen, dh in eine Surface.
Beispiel Minecraft: Minecraft hat 3434534 blöcke. Es ist immer nur ein bruchteil zu sehen. Würde jeder block der sichtbar ist, als eigene Surface an die Graka geschickt werden, läge selbst der beste rechner nicht annäherng an 20 fps.
Hier sind die einzelnen blöcke in teilabschnitte zusammengefasst. In minecraft "chunks" genannt
ein Chunk ist 16x16 (x und z) groß, geht von "ganz oben" bis "ganz unten" und dort ist nur das sichtbare auch wirklich in der surface. -> Single surface -> hohe performance.

Soviel zum exkurs.

Für dich gilt zu entscheiden, wieviel zu rendern ist. Sind es nur 5-6 mauern, bleib bei einzelmeshes und render es öfters.
Reden wir hier von 64*64 oder mehr mauern, dann solltest du dir Singlesurface tatsächlich anschauen. Und auch hier gilt: Nicht ALLES in eine Surface, das kann die leistung ebenso drücken.
Ein guter mittelwert liegt bspw. bei 32x32 tiles pro sektor aka chunk aka single-surface (bei meinem rechner). Es kann aber auch, je nach Sichtbarem, besser sein, die tiles etwas größer zu machen.


Wichtige infos deinerseits wären zb:

1) Wie groß ist eine "Mauer" in einheiten? (sprich x-y-z koordinaten differenzen -> breite / höhe / tiefe)
2) Welche ansicht möchtest du haben? (Perspektivisch, Orthografisch)
3) Wie komplex sind die mauern? 4 faces, 2000 faces?
4) Hast du ein beispielbild oder sonstwas?
5) Wie ist das ganze aufgebaut? Kachelmäßig oder nen schnikes terrain mit frei platzierbaren meshes?

Nachtrag:

Deine antwort gibt mir noch was anzumerken:

Du könntest zb dein level aus einzelmesh zusammenbauen und zu laufzeit pro "teilstück" der map diverse teile zusammenfassen.

Grobe logik:
Es beginnt damit, das du dir eine geeignete größe für solche singlesurfaces suchst. Beispiel: 64x64 ingame-meter (einheiten)
Zu jedem geladenen mesh suchst du dir nun das zentrum und schaust, in welchem teilstück es liegt. Im folgenden sektor genannt.
Hast du den sektor gefunden, ordnest du gleiche materialien den gleichen surfaces zu, solange die vertexcount < 32.000 ist (grobe zahl). Dann fängst du an, die meshes in die entsprechende sektorsurface für das entsprechende material zu kopieren.
So wird jede mauer-wand in einem sektor zu jeder anderen mauerwand kopiert. Die böden und das dach landen jeweils in anderen surfaces, da sie eine andere textur haben.
Aber: Alle wände sind in der gleichen surace.
Alle böden sind in der gleichen surface.
Alle dächer sind in der gleichen surface.
Alle XYZ sind in der gleichen surface.

So erreichst du einen guten mittelwert zwischen flexibilität, performance editierbarkeit da erst zu laufzeit die daten zusammengeschustert sind.

Du musst im grunde nur ein paar dinge beachten:
1) Zuviele kleine eigene objekte (-> surfaces) sind zu vermeiden.
2) Jede surface kann nur ein material haben
3) Zu große surfaces sind auch mist. Du hast 30.000 türme in einer surface, welche immer alle gerendert werden müssen, weil nur eine kleine kante im bild zu sehen ist.. Daher: kleinere teilstück, pro material und gut ist Smile
 

mpreu

BeitragDi, Jul 23, 2013 18:35
Antworten mit Zitat
Benutzer-Profile anzeigen
vielen danke erstmal für eure antworten.
also mir gehts im moment also bei meinem beispiel um das sichtbare.
also ein level im überschaubaren rahmen, welcher zur laufzeit gerendert werden soll.

andere teile des levels werden später erst geladen bzw. erst dann eingefügt....abgesehen vom terrain....welches aber grob ist und nicht viel performance frisst.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group