Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

06.11.2011, 01:37

Optimieren der FPS bei vielen 3D Modellen

Hallo, ich habe in meinem Spiel ne menge 3D-Objekte als zb Grass auf dem boden gesetzt. Funktioniert auch alles so wie es soll.

Nur habe ich das Problem das ich je nach dem wo ich als Spieler stehe manchmal mehrere Tausend 3D Objekte rendern muss.

Frustum Culling habe ich bereits eingebaut allerdings funktioniert das leider nicht wenn ich ein weiteres Sichtfeld habe.

Hat jemand eine Idee wie ich erreichen kann das ich eine bessere FPS erreiche?

Ich habe bereits versucht ab einem bestimmten abstand die Modelle nicht Rendern zu lassen allerdings sieht man das was sehr unschön ist.

2

06.11.2011, 02:17

Ab einer bestimmtem Distanz die Objekte mit weniger Polygonen rendern wäre eine Möglichkeit die mir spontan einfallen würde.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

06.11.2011, 02:35

Ich denke dein Problem ist in erster Linie, dass du jedes Grassprite mit einem einzelnen Aufruf von DrawPrimitive() renderst!?

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

4

06.11.2011, 10:50

Jap, Objekte zusammenfassen, z.B. Gras, das ist doch eh statisch.

5

06.11.2011, 11:59

Wie genau meint ihr das? wie soll ich das Grass zb zusammen fassen?

Im Augenblick ist jedes Objekt ein einzelnes 3d-Object (*.Obj)

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

6

06.11.2011, 12:26

die Vertex-, Texturkoordinaten, ... jeweils in ein größeres array schreiben und einen neuen Buffer dafür erstellen. Dann hast du deutlich weniger draw calls und die Daten werden nur einmal an die Graka gesendet.

7

06.11.2011, 12:45

Hmm ich bin mir nicht ganz sicher wie ich das hinbekommen soll..

ich müsste also eine art 3d modell machen wo bereits alle grass modelle drin sind?

hmm das wird kompliziert ^^

BlazeX

Alter Hase

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

8

06.11.2011, 12:55

Oder per Instancing.

9

06.11.2011, 13:31

Krieg ich den trotz des Instancings es noch hin die Objekte zu sortieren? sonst kriege ich wieder probleme mit der Transparenz...

DarioFrodo

Treue Seele

Beiträge: 349

Wohnort: Kerkau, 100km nördlich von Magdeburg

Beruf: Selbstständig

  • Private Nachricht senden

10

06.11.2011, 22:01

Na klar.. wenn du Modell sauber vom View trennst :)
Also wenn du für deine Objekte die sich im Spiel befinden jeweils eine klasse hast welche die Koordinaten und so der einzelnen Objekte speichert und eine Klasse in dem sich alles befindet was du zum rendern der Objekte benötigst. Was gleich aussieht kann mit den selben Geometriedaten gerendert werden, nur halt um die entsprechende Position verschoben.
Erst wenn der letzte Fluss vergiftet,
der letzte Baum gefällt,
der letzte Fisch gefangen,
dann werdet ihr merken, dass man Geld nicht essen kann

Man verkauft die Erde nicht, auf der die Menschen wandeln.

- Indianerweisheiten

Ich bin auch ein einhornimmond ;)

Werbeanzeige