Du bist nicht angemeldet.

Werbeanzeige

stef

Treue Seele

  • »stef« ist der Autor dieses Themas

Beiträge: 240

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 282

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: 240

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 282

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 ;)

Werbeanzeige