Surface, Mesh und die Brushes ...

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

JPD

Betreff: Surface, Mesh und die Brushes ...

BeitragDo, Jul 24, 2008 23:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

bin gerade an der Optimierung meines kleines Games. Es handelt sich wie in diversen Forenbeiträge vor mir immernoch und das kleine Rennspiel, welches sich aus Tiles aufbaut. Ich bin für meinen Status jetzt soweit, dass ich den Spieleaufbau fertig bekomme, die Fahrzeuge kommen noch.

Da ich meine 3D-Landschaft nicht größer als 120x120 Tiles bringe (ca. 28800 Triangeln), habe ich mir überlegt, die Landschaft in 16x16-Blöcke zu unterteilen. Damit währe dann ja eine unendlichgroße Landschaft möglich.

Vorab lade ich die Brushes in ein Array. Es handelt sich um ca. 50 Texturen. Diese Brushes weiße ich dann den Surfaces des jeweiligen Meshes zu. Nun zur Frage:

Wenn ich ein Spielfeld von 64x64 Tiles habe, ergeben sich daraus genau 16 Teilmeshes. Wenn ich nun jedem Teilmesh die 50 Brushes den Surfaces jenen Meshes zuweise, wird dann das Brush kopiert oder nur eine Referenz erstellt? Im Endeffekt sind die 50 Texturen an die 10 MB groß, das dürfte locker auf die Graka passen. Es geht mir nur darum, würden die Brushes jetzt kopiert, währe ich schon bei 160 MB und mehr ... weiß da jemand bescheid?

Oder: Wie kann ich den belegten Speicherplatz der Grafikkarte auslesen? Ich weiß dass es geht, ich hatte es sogar mal in der Blitz-Hilfe, doch irgendwie finde ich nach 2 Stunden suchen nichts. Währe für jede Hilfe dankbar.

Grüße, Jan

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Jul 25, 2008 1:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Normaler weise lädst du einmal die Texturen mit LoadTexture und dann verteilst du diese auf mehrere Meshes mit EntityTexture. Damit ist die Textur einmal im Speicher, aber auf mehrere Meshes verteilt angewendet.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

JPD

BeitragFr, Jul 25, 2008 12:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, das ist mir durchaus bewust, aber bei meinem Vorhaben wird das Schwierig. In der Blitz-Hilfe steht ja bewusst "You can have as many surfaces as you want" ... daraus schließe ich, dass es egal sein wird, wieviele Surfaces und damit Texturen man auf einem Mesh anwendet.

Würde ich die Kacheln alle in eine Textur reinpacken könnte ich kein Clamp für U und V angeben, ich hätte an den Rändern schon die nächste Textur anliegen, was bei schnellem Mipmapping immer extremer wird. Außerdem macht es sowas nicht gerade einfacher. Wenn ich zum Beispiel ein Kurvenstück habe, dann würde schon das nächste Straßenstück im Kurvenstück sichtbar und das sieht einfach nicht gut aus, sondern total Laienhaft. Außerdem würde ein Texturenpack bei 128x128 Pixel Kachelgröße gleich mal extrem groß und das packen nicht alle Grakas.

Wenn eine umständliche Programmierung im Endeffekt funktioniert und auch noch relativ gut läuft, warum sollte man dann nicht den schwierigeren Weg wählen? Beim bauen der Strecke sind es dann eben 5 Arrays mehr und ein paar For-Next-Schleifen ... das ist ja nicht das Problem. Mit EntityViewRange kann ich dann sogar die Anzeigeleistung "tunen", in dem ich eben die Sichtweite einschränke.

So, damit ich jetzt weiterkomme, hier mal der Ausschnitt, der zeigt wie ich die Tiles aufbaue ...

Code: [AUSKLAPPEN]

Dim bru(50)
Dim sur(50)

Global kollision = CreateMesh()
For i = 1 to CountTextures
bru(i) = LoadBrush("tex/tex"+i+".bmp",49)
sur(i) = CreateSurface(kollision)
PaintSurface sur(i), bru(i)
Next


Ja, das ist im Moment der Teil wie ich die Texturen lade. Ich werde jetzt die Mesh mal in ein 2-Dimensionales Array packen und Testen wie sich Blitz und die Graka verhält. Bin mal gespannt was passiert ...

Ach ja ... Speicherbelastung des Grafikspeichers auslesen? Geht das überhaupt, ich weiß dass ich es mal wo gesehen hatte ...

Grüße, Jan

Thorsten

BeitragFr, Jul 25, 2008 13:50
Antworten mit Zitat
Benutzer-Profile anzeigen
JPD hat Folgendes geschrieben:
Ach ja ... Speicherbelastung des Grafikspeichers auslesen? Geht das überhaupt, ich weiß dass ich es mal wo gesehen hatte ...

AvailVidMem, TotalVidMem

mfG,

Thorsten

Mr.Keks

BeitragFr, Jul 25, 2008 14:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Texturen werden nicht verdoppelt. Und das Gelände zu unterteilen macht auch Sinn. Doof ist allerdings, wenn du so viele verschiedene Surfaces hast... 50*16 = 800 Surfaces auf der kleinsten Map, bei größeren noch deutlich mehr Oo Das lässt sich vielleicht noch ein Stück weit senken, indem du nur die Surfaces für ein Segment erstellst, die benötigt werden, aber es ist trotzdem ne ganz schöne Hausnummer. Mehr Surfaces gehen seeehr zulasten der Renderzeit.
MrKeks.net

JPD

BeitragFr, Jul 25, 2008 14:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Jap ... also ich habe nun das Ganze mal umgesetzt.

Bei einem Feld von 32x32 Meshes, das währen dann folglich:

512 Tiles pro Kante ...
262144 Tiles insgesamt ...
524288 Triangeln, davon werden im Schnitt immer 6000 gerendert - ok

Bei einem Test mit 16x16 Meshes läuft das Ganze noch flüssig.

Nun frage ich mich folgendes: Trotz aus- und einblenden der Meshes und reduzieren der Zahl der gerenderten Triangles ruckelt das Ganze dann doch irgendwann. Liegt das an der Performance von Blitz, des PC's oder einfach an der Programmstruktur? Ich optimiere das Ganze jetzt mal und melde mich mit ersten Screenshots zurück ...

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group