Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
Moin!
Ich habe mal eine Frage aus reinem Interesse, da ja jetzt von CoolCat die Instance-Geschichte ins Wiki eingeführt wurde. Was genau geschieht beim Instancing auf der Grafikkarte und kann mir jemand ein Beispiel geben, was man damit anstellen kann? Im großen und ganzen weiß ich halt, dass man damit einen Berg von ähnlichen/gleichen Geometrien zeichen kann, aber wie genau müsste man das anstellen und wie weit ist das dann nützlich?
Was genau geschieht beim Instancing auf der Grafikkarte
Ich kopiere einfach mal den Pseudocode zu glDrawArraysInstancedARB aus dem Artikel. Im wesentlichen ist das ganze nichts weiter als eine for-Schleife um ein glDrawArrays. Die Schleife läuft halt auf der Grafikkarte und du kannst im Shader via gl_InstanceIDARB auf den Schleifen-Index zugreifen:
//(ich hoffe ich habe die Delphi/Pascal-Syntax so halbwegs getroffen...)
Zitat:
und kann mir jemand ein Beispiel geben, was man damit anstellen kann?
Ok, nehmen wir mal an du willst bei einem Partikelsystem statt gewöhnlichen PointSprites einfach mal Kugeln, oder vielleicht auch kleine Steine rendern. Du würdest nun einen VBO erzeugen der eben eine Kugel bzw. einen Stein enthält und diesen wie folgt rendern:
Das alleine bringt jetzt erstmal nicht soviel, da alle Objekte mit der gleichen ModelView-Matrix transformiert werden. Im Vertexshader erzeugst du nun abhängig von gl_InstanceIDARB für jedes Objekt eine eigene ModelView-Matrix. Im Falle der Partikel würde man die Partikelpositionen bespielsweise als TBO (=TextureBufferObject) an den Shader übergeben. Ein TBO ist nichts weiter eine eindimensionale Textur auf die du mit Integer-Texcoords zugreifen kannst. Es findet also keine Interpolation zwischen den Texeln statt => schneller. Desweiteren darf so ein TBO auch wesentlich größer als eine 1D-Textur sein. Letztlich könnte man aber natürlich auch eine normale Textur verwenden.
So ein Shader könnte etwa so aussehen:
[glsl]#extension GL_EXT_gpu_shader4 : enable
#extension GL_ARB_draw_instanced: enable
Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.