Ogre3D ich will diese Funktion...

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

dllfreak2001 hat geschrieben:Wie läuft das denn nun heutzutage mit den Lichtern bzw. Shadern.

Sind das Lightmaps die in Echtzeit von der Grafikkarte berechnet werden,
oder wird da auf die Textur in Echtzeit für jeden Pixel ein Helligkeitswert berechnet.
Wie kann man eigentlich die Shafder Programmieren? Kann man das so in PB überhaupt machen oder braucht man da irgendwas anderes?
Wegen Lightmaps: Ich kenn kaum noch Leute die darauf wert legen. Das wird alles in Echtzeit für jeden Pixel oder Vertex berechnet.

Shader Programmiert man in GLSL/HLSL/Cg/Assembler mit so Tools wie FXComposer (Wobei GLSL und HLSL aktuell sind und Assembler/Cg Shader wohl in den nächsten Jahren immer mehr an Bedeutung verliert).

Durch ein OGRE Materialscript kannst du das mit PB OGRE nutzen.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

Achso, Lightmaps habe ich immer für eine interessante Technik gehalten.
Ich glaub die Source-Engine rendert diese auch nicht komplett in Echtzeit...

Zu den Schadern:

Da muss ich den aber für jedes Modell dazuliefern, oder?

Außerdem wie isn das sind die Ogre-Lichter dann absolut nutzlos und man muss alles mit dem Shaderprogramm machen?
I´a dllfreak2001
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

dllfreak2001 hat geschrieben:Achso, Lightmaps habe ich immer für eine interessante Technik gehalten.
Ich glaub die Source-Engine rendert diese auch nicht komplett in Echtzeit...


Da muss ich den aber für jedes Modell dazuliefern, oder?

Außerdem wie isn das sind die Ogre-Lichter dann absolut nutzlos und man muss alles mit dem Shaderprogramm machen?
Das Materialscript kannst du "vererben" in OGRE. Dann brauchst du es nur einmal schreiben und bei allen anderen Meshes mit dem Material kannst du es mit reinnehmen.

Über die OGRE Lichter kannst du momentan (in PureBasic) die Position übergeben an den Shader. Und die sind auch nicht sinnlos, weil genau darüber bekommt der Shader seine Infos.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

Achso, aber hier wirds dann auch wieder hakelig wegen der Reichweite der Lichter, könnte ich mir so vorstellen. Weil das mal wieder äußerst relevant ist.
I´a dllfreak2001
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

dllfreak2001 hat geschrieben:Achso, aber hier wirds dann auch wieder hakelig wegen der Reichweite der Lichter, könnte ich mir so vorstellen. Weil das mal wieder äußerst relevant ist.
Solange die Reichweite statisch ist geht es, ansonsten wirds schwer.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

Also normalerweise haben einfache Punktlichter ja keine unendliche Reichweite. Deshalb wäre es sinnvoll wenn das Shaderprogramm dies auch aus den Lichtern herauskriegt.

Nebenbei, wie werden die Schatten per Shader denn berechnet?
Das wird dann nicht wie bei der statischen Lightmap-Erzeugung per Raycasting/Radiocity passieren, oder etwa doch?
I´a dllfreak2001
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

dllfreak2001 hat geschrieben:Also normalerweise haben einfache Punktlichter ja keine unendliche Reichweite. Deshalb wäre es sinnvoll wenn das Shaderprogramm dies auch aus den Lichtern herauskriegt.

Nebenbei, wie werden die Schatten per Shader denn berechnet?
Das wird dann nicht wie bei der statischen Lightmap-Erzeugung per Raycasting/Radiocity passieren, oder etwa doch?
Die Reichweite kannst du in PureBasic nur in den Materialscripts oder den Shadern direkt definieren (Es gibt noch keine Funktionen zum kommunizieren mit den Shadern durch PureBasic für sowas).

Zu den Schatten:
Es kommt drauf an welche Methode du verwendest um Schatten zu erzeugen. In PureBasic ist die wohl einzig mögliche Stencil Shadows (Rendering to texture geht nicht, sonst wären noch Shadowmaps machbar). Wie man diese in den Shader handelt? - da hab ich mir noch kaum Gedanken gemacht, denn Stencil Shadows sind ein weiterer Renderingpass in PBOgre. Man müsste allerdings mal schauen wie dieser Pass sich auf das Endbild auswirkt (Sonst wird der Schatten eventuell rot bei nem Roten Licht). Es gibt allerdings auch im Materialscript die Möglichkeit Schattendaten zu übergeben.

[EDIT]
Kannst dir ja mal das hier anschauen:
http://forums.purebasic.com/german/view ... normalmaps

Da werden die Lichter ja auch verwendet.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

Jo, stimmt in deinem Beispiel verwendest du ja auch die Lichter.
Aber funzt auf meinem Laptop mit ATI-Karte das nicht richtig... welches Shadermodel nutzt denn das? (Habe mal ein Bild von dem Grafikfehler in deinen Thread verlinkt)

Ich habe immer gedacht heutzutage wird viel kombiniert.
Große Szenen mit statischem Licht werden per Lightmaps beleuchtet, die Models werden per Vertexlightning eingeleuchtet über die dann ein Shaderprogramm die Schatten berechnet.


Die PB-eigenen Stencil Schatten sind recht Performance fressend je mehr sie von der Szene verdecken. (ist zumindest bei mir so)

Allerdings sind die auch etwas komisch, du kannst doch dieses Flackern zweier hintereinander sehr nah liegender Polygone. Dies sehe ich auch bei den PB-Schatten, spricht das nicht gegen die These, dass die per Shader realisiert werden?
I´a dllfreak2001
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

dllfreak2001 hat geschrieben:Jo, stimmt in deinem Beispiel verwendest du ja auch die Lichter.
Aber funzt auf meinem Laptop mit ATI-Karte nicht... welches Shadermodel nutzt denn das?

Ich habe immer gedacht heutzutage wird viel kombiniert.
Große Szenen mit statischem Licht werden per Lightmaps beleuchtet, die Models werden per Vertexlightning eingeleuchtet über die dann ein Shaderprogramm die Schatten berechnet.


Die PB-eigenen Stencil Schatten sind recht Performance fressend je mehr sie von der Szene verdecken. (ist zumindest bei mir so)

Allerdings sind die auch etwas komisch, du kannst doch dieses Flackern zweier hintereinander sehr nah liegender Polygone. Dies sehe ich auch bei den PB-Schatten, spricht das nicht gegen die These, dass die per Shader realisiert werden?
Shadermodell... k.A. hab diese Versionierung noch nie wirklich verstanden bzw. gebraucht. Du brauchst highlevel shaders (DirectX HLSL) mit VertexShader 1.1 und PixelShader 2.0.

Im OGRE.log steht die Fehlermeldung wenns eine gibt.

Die OGRE Stencil Shadows sind extrem langsam.
Das mit dem Tiefentest Problem ist normal, das hängt nicht von Shadern ab (Kann man auch nur einschränken, nicht aber komplett verhindern). Ich hab auch nicht gesagt, dass die per Shader realisiert werden. Ich hab nur gesagt, dass man sie einfach mit zusätzlichen Renderingpasses in denen Shader verwendet werden kombinieren kann.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

Da müssten dein Programm eigentlich normal funzen, hab mal ein Bild in deinen Thread verlinkt.
Erzeugt die gleichen Grafikfehler auf meinem Desktop mit 9800Pro (die kann auch SM2.0).

Bild

Auf meinem anderen Rechner mit der NV-Karte drin funzt es perfekt.

Aber das ist ja hier auch egal.
I´a dllfreak2001
Antworten