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

stef

Treue Seele

  • »stef« ist der Autor dieses Themas

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

1

05.10.2020, 16:48

Vulkan: dynamic UBO == instanced rendering ?

Hallo Forum

Schön mal wieder hier zu sein.
Kurze Frage zu Vulkan und dynamischen Uniform Buffern.
Ist das Benutzen von dyn. UBO, mit Offset beim Descriptor binden, das Selbe wie Instanced Rendering unter OpenGL ?

Gruss

stef
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

06.10.2020, 09:41

Nach kurzem Durchlesen der Beschreibung hier würde ich sagen: Ja.

stef

Treue Seele

  • »stef« ist der Autor dieses Themas

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

3

06.10.2020, 13:41

Nach kurzem Durchlesen der Beschreibung hier würde ich sagen: Ja.

Hallo David

Lustig das du genau das Beispiel gefunden hast was der Grund für meine Frage war.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
for (uint32_t j = 0; j < OBJECT_INSTANCES; j++)
{
  // One dynamic offset per dynamic descriptor to offset into the ubo containing all model matrices
  uint32_t dynamicOffset = j * static_cast<uint32_t>(dynamicAlignment);
  // Bind the descriptor set for rendering a mesh using the dynamic offset
  vkCmdBindDescriptorSets(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout, 0, 1, &descriptorSet, 1, &dynamicOffset);

  vkCmdDrawIndexed(drawCmdBuffers[i], indexCount, 1, 0, 0, 0);
}


Hier kannst du sehen das eine Schleife über die Anzahl der zu Zeichnenden Objekte programmiert ist und
der dritte Parameter von vkCmdDrawIndexed (instanceCount) auf 1 steht.
Bei richtigem Instanced Rendering sollte hier meiner Meinung nach OBJECT_INSTANCES übergeben werden und
das Ganze ohne Schleife in einem Call erledigt sein.
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

06.10.2020, 13:54

Allerdings muss diese Schleife nur einmal ausgeführt werden, oder? Also nicht für jedes Rendern. Da wird ja ein Command Buffer befüllt. Anschließend sollte es doch ausreichen diesen Command Buffer auszuführen. Und den UBO mit den Matrizen kann man zwischendurch beliebig verändern, um die Objekte zu bewegen. (Ich frage mich nur, wie man nachträglich noch die Anzahl der Objekte verändern könnte ...)
Ich kenne mich nicht mit Vulkan aus, also ist das mit Vorsicht zu genießen ;)

stef

Treue Seele

  • »stef« ist der Autor dieses Themas

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

5

29.10.2020, 20:37

Nach einigem probieren und forschen hier die Antwort:
Dynamic UBO und instanced rendering haben NICHTS miteinander zutun !

Anbei ein kleines Demo mit echtem instanced rendering ...
»stef« hat folgende Datei angehängt:
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

Werbeanzeige