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

BlazeX

Alter Hase

  • »BlazeX« ist der Autor dieses Themas

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

1

19.10.2008, 22:15

[Erledigt] Nach was sollte ich vorrangig sortieren?

Hi Leute!

Ihr kennt doch sicher das Problem mit der Performance bei vielen Objekten.
Also die Objekte der Reihe nach ordnen, um nicht andauernd VertexBuffer, IndexBuffer, Texturen, Shader, etc. wechseln zu müssen.

Aber nach was sollte man vorrangig sortieren?
Texturen? Meshes?

Was denkt ihr, was ist schneller?

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

2

19.10.2008, 22:28

Grundsätzlich eher nach Meshes sortieren würde ich mal behaupten. Gleiche Meshes dann materialweise rendern, also das erste Material von allen durch, dann das zweite Material von allen usw. so dass jedes Material nur einmal gesetzt wird.

Das ganze ist natürlich sehr Fallbedingt. Aber so wie oben vorgeschlagen hat man i.d.R. am wenigsten Wechsel, da gleiche Texturen meistens eh nur in gleichen Meshes auftauchen.

Ich glaube, dass die aufwandsreihenfolge ungefähr so ist (hoch nach niedrig):
VB, IB, Shader, Textur, Renderstates

Ist aber auch sicher vom Gebrauch, Speichertyp und Hardware abhängig.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

3

19.10.2008, 22:47

Zitat von »"Wümpftlbrümpftl"«

Ist aber auch sicher vom Gebrauch, Speichertyp und Hardware abhängig.


daher hilft meitens nur profilern. wobei imho die reihenfolge schon recht gut is.

4

19.10.2008, 22:48

Cool wäre halt, wenn man schonmal grundsätzlich nur die sichtbaren Objekte rendert. Also gegebenenfalls erstmal n Octree draufknallen.

Das nächste ist, Drwacalls zu minimieren. Ich denke, nicht das ändern der Textur oder so ist de Knackpunkt, sondern, dass man jedesmal wieder einen DrawCall machen muss.
Dafür gibt es was, das nennt sich instancing, ich kenne bisher nur die grobe Theorie, aber es ist cool, wenn man viele "gleiche" Objekte hat.
Lieber dumm fragen, als dumm bleiben!

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

5

20.10.2008, 09:44

Zitat von »"Jonathan_Klein"«


Dafür gibt es was, das nennt sich instancing, ich kenne bisher nur die grobe Theorie, aber es ist cool, wenn man viele "gleiche" Objekte hat.


Instancing ist recht cool. Je grösser das Objekt ist, desto brauchbarer ist es. :). Respektive es ist so ziemlich egal, ob dein Mesh 4 oder 4000 Vertices hast, wenn du lediglich die Obektdaten weitergeben musst ist das in etwa das gleiche. (Habs mal für Sprites Implementiert. Hat sich nicht wirklich gelohnt, da ein Sprite nun mal nicht soo viele Vertices hat und somit nicht wirklich was eingespart werden konnte. :()

CodingCat

1x Contest-Sieger

Beiträge: 420

Beruf: Student (KIT)

  • Private Nachricht senden

6

20.10.2008, 15:24

Der größte Aufwand sind definitiv Shader- und Textur-Wechsel (Render Targets sind natürlich auch ganz vorne dabei, solltest du die wechseln wollen). Problematisch dabei ist vor allem, dass das Sortieren nach Texturen und Shadern gleichzeitig schwer fällt. Prinzipiell solltest du wohl den Shadern den Vorzug geben, also primär nach Shadern sortieren und sekundär nach Texturen, soweit möglich. Nach Vertex / Index Buffern musst du in der Regel nicht explizit sortieren, renderst du mehrere Objekte, die sich dieselben Buffer Teilen, macht natürlich Gruppierung nach Buffern Sinn, bzw. nach Möglichkeit sollte hier auf Instancing zurückgegriffen werden.

Weiterführende Links
http://download.nvidia.com/developer/pre…ptimization.pdf
http://msdn.microsoft.com/en-us/library/bb172234.aspx
http://www.gamedev.net/community/forums/…topic_id=183462
alphanew.net (last updated 2011-06-26) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite

BlazeX

Alter Hase

  • »BlazeX« ist der Autor dieses Themas

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

7

21.10.2008, 09:47

Danke euch allen!

Werbeanzeige