PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Aufruf Vertex-Shader


Früchtemüsli
2013-09-06, 16:24:30
Hi :)

Ich habe mir gerade http://video2.virtuos.uni-osnabrueck.de:8080/engage/ui/watch.html?id=2023c23c-ebe6-484e-819e-fae6add6f803 angeschaut. Da sind einige Frage übriggeblieben.

Mich würde interessieren, wie oft und von wem der Vertex-Shader aufgerufen wird.

Angenommen, ich haben einen scene-graph. Dieser kann diverse Transformations-Knoten beinhalten. Jedes Blatt des scene-graphs hat die folgenden beiden Informationen:

- die eigentlichen Daten (Vertices) zu einer Instanz eines im local-space modellierten Objekts
- die für ihn gültige globale Transformations-Matrix, um die Daten von den local-space in den world-space zu transformieren

Ruft jetzt jedes Blatt dieses scene-graph den Vertex-Shader auf?

Coda
2013-09-06, 17:11:27
Drawcall der Applikation -> GPU führt den Vertex Shader für jeden Eckpunkt (Vertex) aus.

Der Scene Graph hat damit sehr wenig zu tun, das ist ganz anderes Abstraktions-Level darüber.

Ganon
2013-09-07, 12:20:41
Der Scene Graph hat damit sehr wenig zu tun, das ist ganz anderes Abstraktions-Level darüber.

Hab das Video oben jetzt nicht gesehen, aber in gängigen Tutorials wirkt es zumindest weit weniger wie ein Abstraktionlayer. Dort hat dann jede Node z.B. eine render-Methode in der auch gleich der passende Rendercode drin steht. Anschließend ruft man an der Wurzel nur "render" auf und die latscht dann rekursiv durch den Graphen und ruft überall render auf (entsprechend meist ohne Sortierung dadurch). Ist für Anfänger auch weit leichter zu verstehen, als erst mal mit Graph/Baum Theorie anzufangen.

Ich weiß, mit "Professionell" haben die meist nichts zu tun, wollte es nur mal erwähnen ;)

Coda
2013-09-07, 13:06:18
Wer Vertex-Shader zum Scene-Graph zählt hat's nicht verstanden. Ganz egal wie die Implementierung aussieht.

PatkIllA
2013-09-07, 13:21:03
Ist für Anfänger auch weit leichter zu verstehen, als erst mal mit Graph/Baum Theorie anzufangen.Vertex Shader gehen auch komplett ohne SceneGraph.
Ich hab in der Diplomarbeit mit Grafikkarten 2D Material visualisiert und da hatte ich das gar nicht. Da war der Vertexshader allerdings nur dafür da, die Ansicht zu drehen, skalieren, kippen oder Dinge hervorzuheben. Da war auch nichts mit Verdeckung oder sonst was und auszuschließen was sichtbar war ging auch ziemlich einfach.

Genauso passte die ganze Abstraktion mit Material usw überhaupt nicht und trotzdem hatte ich Textuteren und Pixelshader.

Früchtemüsli
2013-09-07, 13:55:16
Würde schon gern auch einen scene-graph verwenden :)

Was macht denn dann diese render-Methode?

Die muss sich doch dann darum kümmern, die globale Transformations-Matrix auf die Geometrie-Objekte, also deren Vertices, anzuwenden, oder?

Und das ist doch die Aufgabe vom Vertex-Shader. Der bekommt die Transformations-Matrix und die Vertices übergeben.

Darum hatte ich mir das so vorgestellt, dass ich je leaf dieses scene-graph dann für alle Vertices des Geometrie-Objekts den Vertex-Shader aufrufe.

Ist das falsch?

PatkIllA
2013-09-07, 14:14:16
Das Transformieren in den Screenspace ist die Minimalaufgabe. Beleuchtung der Eckpunkte gehört auch zur Standardaufgabe.
Im Prinzip kannst du mit den Daten der Vertices aber machen was du willst. Dafür sind die ja programmierbar. Nur weglassen oder neue erzeugen geht nicht.

Früchtemüsli
2013-09-07, 14:22:36
Im Prinzip kannst du mit den Daten der Vertices aber machen was du willst. Dafür sind die ja programmierbar. Nur weglassen oder neue erzeugen geht nicht.
Quatsch. Vertices wegzulassen oder hinzuzufügen ist ganz normal. Nennt sich clipping/culling.

PatkIllA
2013-09-07, 14:28:34
Quatsch. Vertices wegzulassen oder hinzuzufügen ist ganz normal. Nennt sich clipping/culling.Aber eben nicht im Vertex Shader.
Du kannst die Daten dort so manipulieren, dass Oberflächen (und nicht die Vertices) in einer späteren Stufe aussortiert werden, aber für jeden Punkt der reingeht, geht auch einer raus.

Früchtemüsli
2013-09-07, 15:47:19
Achso, ja, das ist klar :)

Aber zurück zum Zusammenhang scene graph - vertex shader.

Was sagt ihr zum Beitrag #6?

Coda
2013-09-07, 23:45:07
Vertex Shader gehen auch komplett ohne SceneGraph.
O'rly?

Birnen gehen auch komplett ohne Rasenmäher.

Aber zurück zum Zusammenhang scene graph - vertex shader.
Du würfelst da zwei Konzepte zusammen die wage etwas miteinander zu tun haben. Die Fragestellung sagt mir schon, dass du auf dem falschen Weg bist.

Bitte schreib dir erstmal ein simples Demo-Program mit einem Vertex-Shader der paar Meshes zeichnet und wie die Grafikpipeline und API mit allen Stufen damit interagiert, dann kannst du dich danach um Dinge kümmern wie ein Scene Graph. So hat das keinen Zweck, das sind viel zu viele Abstraktionsebenen auf einmal.

del_4901
2013-09-09, 09:24:39
@Ganon: Visitor ist das Antipattern schlechthin.
Persönlich finde ich einen Scenegraph im klassischen Sinn für überbewertet, da schlecht parallelsierbar.

Früchtemüsli
2013-09-09, 16:38:17
da schlecht parallelsierbar.
Eigentlich ist mir das in diesem Fall echt wurscht, weil ich nur herumexperimentiere und einen Software-Renderer programmieren will. Aber davor brauch ich noch Infos, damit ich keinen totalen Mist programmiere :)

Aber trotzdem interessiert mich, was genau du damit eigentlich meinst. Ich weiß, dass das parallele Ausführen von Codes (Shadern) eine Stärke von OpenGL ist. Aber inwievern ist da ein scene-graph schlecht? Weil der dann öfters Daten an die Shader übertragen muss, d. h. weil er nicht komplett alles auf einmal übergeben kann?

PatkIllA
2013-09-09, 21:05:57
O'rly?

Birnen gehen auch komplett ohne Rasenmäher.Scheint aber nicht unüblich zu sein. Ein kommilitione hat mich auch gefragt wo ich denn den Scenegraph hätte und mich komisch angeschaut als ich keinen hatte.
Eigentlich ist mir das in diesem Fall echt wurscht, weil ich nur herumexperimentiere und einen Software-Renderer programmieren will. Aber davor brauch ich noch Infos, damit ich keinen totalen Mist programmiere :)
Wenn du wirklich einen reinen Renderer und keine Engine programmieren willst, dann hat da sowas wie ein Scenegraph nichts verloren.
Es gibt gute Gründe für die verschiedene Abstraktionsebenen.

Nur aus Neugierde. Warum eigentlich.
Ganz rudimentär was auf den Schirm bringen kriegt man noch hin. Damit produktiv was machen zu können ist eine ganz andere Hausnummer.

Früchtemüsli
2013-09-09, 21:08:48
dann hat da sowas wie ein Scenegraph nichts verloren
Warum darf man in einem Software-Renderer keinen scene graph verwenden??

Nur aus Neugierde. Warum eigentlich.
Just for fun und zum Lernen :)

PatkIllA
2013-09-09, 21:18:40
Ich zitiere einfach mal Coda
Bitte schreib dir erstmal ein simples Demo-Program mit einem Vertex-Shader der paar Meshes zeichnet und wie die Grafikpipeline und API mit allen Stufen damit interagiert, dann kannst du dich danach um Dinge kümmern wie ein Scene Graph. So hat das keinen Zweck, das sind viel zu viele Abstraktionsebenen auf einmal.

Früchtemüsli
2013-09-09, 21:31:21
Der Typ bin ich nicht. Das mach ich nicht. Zuerst will ich mal wissen, was ich warum mache, bevor ich zum Programmieren anfange. Ich weiß, was rauskommt, wenn ich das nicht mache. 1) Großes Chaos, 2) alles landet im Müll, 3) ich fang komplett neu an zu Programmieren :freak:

Wenn ich nicht jetzt schon weiß, wie scene-graph mit vertex-shadern zusammenhängt, kann ich nicht jetzt schon irgendwas vernünftiges programmieren.

Das ist jetzt schon Beitrag#17 und ich bin immer noch keinen einzigen Mikrometer weitergekommen :-/ Haben vielleicht noch andere Leute eine Idee dazu, wie man in einem Software-Renderer einen Zusammenhang zwischen scene-graph und selbst programmierten vertex-shader herstellen könnte?

PatkIllA
2013-09-09, 21:38:02
Der Typ bin ich nicht. Das mach ich nicht. Zuerst will ich mal wissen, was ich warum mache, bevor ich zum Programmieren anfange. Ich weiß, was rauskommt, wenn ich das nicht mache. 1) Großes Chaos, 2) alles landet im Müll, 3) ich fang komplett neu an zu Programmieren :freak:
Bevor du was nachprogrammierst was es schon gibt. solltest du dir schon anschauen, was es schon gibt.
Der zweite Schritt wäre zu verstehen warum was so ist. Wie willst du das verstehen bevor du nicht einmal so was benutzt hast?

Du willst gerade viel zu viel auf einmal und es fehlen diverse Zwischenschritte.
Wie lange programmierst du denn schon und was waren so die größten Projekte die du gemacht hast?

RLZ
2013-09-09, 21:50:42
Ich weiß, was rauskommt, wenn ich das nicht mache. 1) Großes Chaos, 2) alles landet im Müll, 3) ich fang komplett neu an zu Programmieren :freak:
Genau das wird passieren. Unausweichlich. Egal was du meinst vorher zu wissen.

Das ist jetzt schon Beitrag#17 und ich bin immer noch keinen einzigen Mikrometer weitergekommen :-/
Was an dir liegen könnte. Du hast gefühlt nicht mal eine Ahnung, wo bei einer Schaufel vorne ist, und willst ein Haus bauen.

Haben vielleicht noch andere Leute eine Idee dazu, wie man in einem Software-Renderer einen Zusammenhang zwischen scene-graph und selbst programmierten vertex-shader herstellen könnte?
Sicherlich weiß das jeder, der dir geantwortet hat. Aber wenn man die Grundlagen verstanden hat, ist das auch zu großen Teilen offensichtlich.

Deswegen auch von mir noch mal der Tipp: Lerne erst die Grundlagen und versuche ein paar Dreiecke auf den Bildschirm zu bekommen.

Früchtemüsli
2013-09-09, 23:48:39
Genau das wird passieren. Unausweichlich. Egal was du meinst vorher zu wissen.
Na vielen Dank auch. Diese Aussage bedeutet wohl, dass ich ein Idiot und gar nicht wert bin, hier im Forum eine Frage zu stellen. Ist ja wohl klar, dass dich bei so einer Aussage normalerweise jeder auf igno setzt, oder?

Na egal. Dieses Thema -> Tonne

Marscel
2013-09-10, 05:57:32
Na vielen Dank auch. Diese Aussage bedeutet wohl, dass ich ein Idiot und gar nicht wert bin, hier im Forum eine Frage zu stellen. Ist ja wohl klar, dass dich bei so einer Aussage normalerweise jeder auf igno setzt, oder?


Du wirkst nur etwas Vorschlagsresistent. Und zu dem, was RLZ meint: *Jeder* Programmierer wird in seiner Karriere irgendwann etwas wegen Erkenntnisgewinn komplett in die Tonne getreten haben. Und bei deinem Vorgehen kann man es von außen schon absehen.

urpils
2013-09-10, 08:36:03
Na vielen Dank auch. Diese Aussage bedeutet wohl, dass ich ein Idiot und gar nicht wert bin, hier im Forum eine Frage zu stellen. Ist ja wohl klar, dass dich bei so einer Aussage normalerweise jeder auf igno setzt, oder?

Na egal. Dieses Thema -> Tonne

hallo - scheinbar bist du gerade ziemlich verärgert, das solltest du aber nicht sein. Ich selbst habe auch erst vor kurzem begonnen mich mit der Materie zu beschäftigen und zu verstehen wie es funktioniert. Leider muss ich mich meinen Vorrednern anschließen - ohne die Grundlage wirklich 100% verinnerlicht zu haben und ohne zu zögern vor und zurück abzuspulen, geht da leider gar nix.

je weiter nach oben du in den Abstraktionsebenen kommst, desto eher beginnt man Dinge durcheinanderzuwerfen. Man glaubt zu wissen, dass einem nur eine Information fehlt, um das Puzzle wieder zusammenzufügen, aber dem ist leider nicht so, wenn es an den Grundbausteinen liegt.

Da ich es gerade selber machen und auch da schon an eigentlichen Selbstverständlichkeiten staunend hängenbleibe (kannst ja mal meinen Thread von vor ein paar Wochen ansehen), würde ich dir auch empfehlen vieeel weiter unten zu beginnen und erstmal das simpelst mögliche Programm zu beginnen und dich von da an weiter hochzuarbeiten.

Wenn erstmal ein paar Punkte oder Dreiecke auf dem Bildschirm sind hat man überproportional viel gelernt und verstanden und kommt von dort aus sehr flott weiter - Zähne zusammenbeißen, dann packst du das! :)

RLZ
2013-09-10, 10:24:00
Na vielen Dank auch. Diese Aussage bedeutet wohl, dass ich ein Idiot und gar nicht wert bin, hier im Forum eine Frage zu stellen. Ist ja wohl klar, dass dich bei so einer Aussage normalerweise jeder auf igno setzt, oder?
Das hast du total falsch verstanden. Das ist ganz normales Vorgehen und etwas was, was ich inzwischen bei der Projektplanung fest mit einrechne. Wenn Leute sich in einen neuen Themenbereich einarbeiten, hat der erste Quellcode gefälligst in der Mülltonne zu landen.