Seite 1 von 1

Instancing Performancegewinn auf GPU

Verfasst: 02.09.2019, 10:12
von Matthias Gubisch
Hallo Leute

Ich hab mal eine Frage an die Experten zum Thema Performancegewinn durch Instancing.
Unter DirectX11 war Instancing ja noetig weil DrawCalls unendlich viel CPU Zeit verschlungen haben.

Jetzt mit DirectX12 geht das durch pralleles Zusammenbauen der CommandLists, Bundels und Asynchrones Rendering ja deutlich entspannter vonstatten und Instancing ist eigentlich (zumindest fuer meine aktuelle Anwedung) so nicht noetig da ich CPU Zeit ohne Ende uebrig hab, aber die GPU Zeit langsam knapp wird.


Mein aktueller Renderer faengt so ab 10k gleiche Objekte an, dass die Render Zeit auf der GPU zu lange wird.
Jetzt die eigentliche Frage: hat jemand Erfahrungswerte ob Instancing auch die Ausfuehrungszeit auf der GPU verkuerzt, ich hier also noch ein paar Prozent Performance herauskitzeln kann?

Das Ziel sind aktuell so um die 50k Objekte in der Scene, davon werden immer Bloecke in der groesse 3k -4k gleiche Objekte sein.

Re: Instancing Performancegewinn auf GPU

Verfasst: 02.09.2019, 14:30
von Schrompf
Meine Erfahrungen noch zu DX9-Zeiten waren, dass Instancing gar nicht sooo viel bringt, solange die Anzahl nur ein paar Dutzend ist. Bei ein paar tausend Instanzen würde ich aber schon auf drastische Zuwächse tippen, selbst unter DX12. Ab ein paar hunderttausend sehr primitiven Instanzen kann es sich dann wieder lohnen, anderweitige Methoden zu finden, um die DrawCalls zusammen zu fassen. Mein VoxelRenderer hat die vierfache Framerate erreicht, nachdem ich ne halbe Million Instanzen eines Quads auf ein paar tausend VertexBuffer mit jeweils x Quads umgebaut habe.

Re: Instancing Performancegewinn auf GPU

Verfasst: 03.09.2019, 10:23
von Matthias Gubisch
Pro Objekt existiert aktuell nur 1VB/IB/TextrueSet, das sich alle Instanzen teilen
Auf der CPU hab ich wie gesagt kein Problem aktuell, wenn ich das hochinterpoliere gehe ich davon aus dass ich so ca 100k Drawcalls pro Frame unterbringe.

Die Frage ist ob die GPU (der GPU Scheduler) besser optimieren kann wenn ich einen Drawcall per Instancing schicke anstatt viele viele Einzeldrawcalls in der Commandlist, und wenn ja in welcher Groessenordnung der Performancegewinn da zu erwarten ist.

Hat da jemand Erfahrung damit?

Weniger groessere VertexBuffer ist noch eine weiter Idee.

Sobald die Baustelle Renderer Performace abgeschlossen ist kann ich wieder am Content basteln. Dann gibts hoffentlich auch Bilder hier ;)

Re: Instancing Performancegewinn auf GPU

Verfasst: 03.09.2019, 17:37
von Krishty
Matthias Gubisch hat geschrieben: 03.09.2019, 10:23Hat da jemand Erfahrung damit?
Leider nicht. Ich habe ähnliche Anforderungen, aber mein Umstieg auf Vulkan steht noch aus. Dann werde ich Instancing aber definitiv ausprobieren – ich brauche es für pro-Objekt-Zugriff auf die dynamischen Transformationsmatrizen.