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

botlin

Treue Seele

  • »botlin« ist der Autor dieses Themas

Beiträge: 139

Wohnort: Berlin

Beruf: Fachinformatiker für Anwendungsentwicklung, Student Internationale Medieninformatik

  • Private Nachricht senden

1

26.09.2011, 20:20

Renderer Aufbau

Hi Leute,

ich hatte heute einen Gedanken und wollte mal ne Meinung von euch.

Es geht um den Aufbau meines Renderers.
Ich Schmeiss dem nen Object zu was er Rendern soll.
Dabei durchläuft das Object Switches und If-Else abfragen um entsprechende Optionen für das Rendern zu nutzen.
Dabei wird unterschieden was das Object ist (Punktwolke,Liniengitter,Flächenmodel,Sprite,...).
Dann wird geschaut ob das Object Texturen hat und je nach dem wie die TExturen vorhanden sind werden auch noch verschiedene Shader genutzt.

In nächster zeit wird wohl noch was hinzu kommen.

Nun bin ich am überlegen ob ich einmal beim Laden(bzw bei einer Änderung) bestimme wie gezeichnet wird und für jede Variante dann eine Renderfunktion schreibe. Oder ob ich meine jetzige weg beibehalte und bei jedem Frame prüfe wie das Object zu zeichnen ist.

Momentan sind es mindestens 5 abfragen und 1 switch je frame und Object.

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

2

27.09.2011, 00:16


Momentan sind es mindestens 5 abfragen und 1 switch je frame und Object.

Ich würde sagen das ist so ziemlich vernachlässigbar.

Premature optimization is the root of all evil. Wenn du mal einen Profiler über den Code laufen lässt vermute ich, dass du feststellen wirst, dass diese 6 Branches kaum einen einfluss auf die Performance haben.
Aber ich kann mich natürlich irren, daher empfehle ich dir einen Profiler zu benutzen und sicher zu gehen, dass du nicht am falschen Ende optimierst.

PS: Ich weiß nicht wie du das momentan löst, eine elegante und übliche Methode um verschiedene Objekttypen zu rendern ist ein Renderable interface, welches für von jedem Objekttyp implementiert, und dann vom Renderer für alle aktiven Objekte aufgerufen wird.

botlin

Treue Seele

  • »botlin« ist der Autor dieses Themas

Beiträge: 139

Wohnort: Berlin

Beruf: Fachinformatiker für Anwendungsentwicklung, Student Internationale Medieninformatik

  • Private Nachricht senden

3

27.09.2011, 09:08

Ja momentan löse ich das ganze über ne Klasse von der ich dann ableite wenn ich nen neuen Typ brauche.
An nen Profiler habe ich auch schon gedacht bis jetzt aber keine gescheite Freeware gefunden.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

27.09.2011, 09:14

Es ist wahrscheinlich wichtiger, dass du Objekte, die mit gleichen Einstellungen gerendert werden müssen, auch zusammen renderst. Dann sparst du dir die Set...-Aufrufe dazwischen. Soweit ich weiß, kann das eine ganze Menge ausmachen. Aber übertreibe es nicht mit der Optimierung. Die GPU sollte niemals "idle" sein, also nichts zu tun haben, bis das Frame fertig ist.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

27.09.2011, 09:29

Hast du überhaupt Performanz-Probleme? Denn wie xardias schon Knuth zitierte:
Premature optimization is the root of all evil.


Ausserdem solltest du ggf mal abstecken was dein Renderer überhaupt leisten soll. In dem meisten Spielen ist es z.B. eher unüblich Liniengitter, Punktewolken usw zu zeichnen, wenn dann mal als Debugprimitiven und die müssen nicht zwangsläufig hoch performant sein.

Als Profiler kann ich z.B. empfehlen:
CodeAnalyst
GlowCode
Vtune

Für die meisten Profiler gibts ja kostenlose Testphasen...
@D13_Dreinig

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

27.09.2011, 09:34

CodeAnalyst ist sogar komplett kostenlos.
Damit hab ich schon einiges aus meinem Blocks-Spiel herausgeholt.
Allerdings hilft der dir nicht dabei, die GPU-Sachen zu profilen. Du merkst damit nur, ob du überhaupt ein GPU-Problem hast (nämlich wenn dein Programm vor dem Present()-Aufruf warten muss, weil die GPU noch nicht fertig mit rendern ist).

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

7

27.09.2011, 09:39

Allerdings hilft der dir nicht dabei, die GPU-Sachen zu profilen


Richtig, dafür sind sehr nett:

NVIDIA PerfKit/PerfHUD
PIX (DirectX SDK)
@D13_Dreinig

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

8

27.09.2011, 10:12

Aber übertreibe es nicht mit der Optimierung. Die GPU sollte niemals "idle" sein, also nichts zu tun haben, bis das Frame fertig ist.

Hm, das interessiert mich. Darf ich fragen wieso?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

botlin

Treue Seele

  • »botlin« ist der Autor dieses Themas

Beiträge: 139

Wohnort: Berlin

Beruf: Fachinformatiker für Anwendungsentwicklung, Student Internationale Medieninformatik

  • Private Nachricht senden

9

27.09.2011, 10:15

CodeAnalyst sieht schon mal nach was aus...

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

10

27.09.2011, 10:15

OK, das war missverständlich. "Nicht übertreiben" war so gemeint:
Du könntest dir einen super aufwändigen Algorithmus ausdenken, der eine 100%ig korrekten Sichtbarkeitstest ausführt, um nur das zu rendern, was sichtbar ist. Wenn dieser Algorithmus aber zu lange braucht, hat die Grafikkarte währenddessen nichts zu tun, und am Ende ist das Ganze vielleicht langsamer als wenn du einen schnelleren, aber nicht ganz so guten Test benutzt hättest und die Grafikkarte ein bisschen mehr Arbeit gehabt hätte.

Werbeanzeige

Ähnliche Themen