DGL
https://delphigl.com/forum/

Shader verwaltung
https://delphigl.com/forum/viewtopic.php?f=20&t=6660
Seite 1 von 1

Autor:  Aya [ Mo Jun 11, 2007 10:36 ]
Betreff des Beitrags:  Shader verwaltung

Hi,

ich steh mal wieder vor dem problem das ich nicht weiß wie ich meine Shader verwalten soll...

Sagen wir ich habe 10 verschiedene Materialien-Shader.. (Phong, Blinn etc )... von den 10 Shadern muß ich ja dann für jede mögliche anzahl an lichtern eine version erstellen (bei z.B. 8 Lichtern = 10 * 8 = 80 Shader).
Dazu kommt jetzt, das ja auch z.B. 3 PointLights und 2 Spotlights sein können = wieder verschiedene versionen (gut, ich könnte auch die pointlights als Spotlights berechnen, bzw nen if im shader nehmen, aber das wäre ja etwas performance verlust)..

und dann noch solche sonderfälle wie, das manche Objekte Bone Animation haben welche auch über Shader etc gelöst wird...

Hat jemand einen ganz tollen trick sowas zu verwalten?
Bisher ist es bei mir immer in irgendwie 8-Dimensionalen Arrays ausgeartet.. hat zwar funktioniert, war aber irgendwie etwas schwer zu verwalten am ende.. :(

Gibt's tolle tricks? :)


Aya~

Autor:  oc2k1 [ Mo Jun 18, 2007 17:58 ]
Betreff des Beitrags: 

Deferred Renderer... das setzt ein ende zum Schadervariantengenerierungswahn

Autor:  Lord Horazont [ Di Jun 19, 2007 09:30 ]
Betreff des Beitrags: 

Kannst du nicht über die exportierten Variablen, die die Lichter enthalten und eine Anzahl als Uniform übergeben? Dann könnest du in einer For-Schleife die Lichter durchgehen und entsprechend alles berechnen, oder?

Gruß Lord Horazont

Autor:  Aya [ Di Jun 19, 2007 09:47 ]
Betreff des Beitrags: 

Lord Horazont hat geschrieben:
Kannst du nicht über die exportierten Variablen, die die Lichter enthalten und eine Anzahl als Uniform übergeben? Dann könnest du in einer For-Schleife die Lichter durchgehen und entsprechend alles berechnen, oder?

Nein leider nicht, das war direkt das erste was ich getestet hatte.. aber die for-schleife muß aus konstanten bestehen, also ich kann nicht sagen "for (i = 0; i < lightCount; i++)".. weil in dem moment lightCount keine konstante ist :/

oc2k1 hat geschrieben:
Deferred Renderer... das setzt ein ende zum Schadervariantengenerierungswahn

Was is das? :P

Aya~

Autor:  Lord Horazont [ Do Jun 21, 2007 14:31 ]
Betreff des Beitrags: 

Das wundert mich. Ich habe mir nen Bloom-Shader geschrieben, der das ganze ohne zu murren macht. Mit einer Variable als Bedingungsoperand. Vielleicht hilft es, den Uniform in eine Shaderlokale Variable zu übertragen (also in eine, die in der "main" liegt).

Gruß Lord Horazont

Autor:  oc2k1 [ Do Jun 21, 2007 14:52 ]
Betreff des Beitrags: 

für ein if ist es kein Problem aber eine for Schleife kann man nicht über eine uniform Variable steuern, da sie vom Compiler entrollt werden muss.

Autor:  Lord Horazont [ Do Jun 21, 2007 18:20 ]
Betreff des Beitrags: 

Also dieser Fragmentshader wurde bei mir ohne zu Murren kompiliert und tut auch seinen dienst:

Code:
  1.  
  2. uniform sampler2D input_tex;
  3. uniform sampler2D glowmap;
  4.  
  5. uniform vec2 glowformat;
  6.  
  7. varying vec4 vpos;
  8.  
  9. void main(void)
  10. {
  11.   // ...
  12.   int xwidth = int(glowformat[0]);
  13.   int ywidth = int(glowformat[1]);
  14.  
  15.   // ...
  16.  
  17.   for (int x=0;x<=xwidth;x++)
  18.   {
  19.     for (int y=0;y<=ywidth;y++)
  20.     {
  21.        // ...
  22.     }
  23.   }
  24.   // ...
  25. }
  26.  


Gruß Lord Horazont

Autor:  oc2k1 [ Fr Jun 22, 2007 00:51 ]
Betreff des Beitrags: 

mach das mal im fragmentshader und indizier mit der schleifen variable eine uniformvariable... Dann geht es nicht mehr

Autor:  LarsMiddendorf [ Fr Jun 22, 2007 15:59 ]
Betreff des Beitrags: 

Die Lichtposition, Farbe und Art kann man in ein oder zwei Texturen speichern und die dann im Fragmentshader durchlaufen. Dazu gibt es auch eine Demo im NVidia SDK.

Autor:  Lord Horazont [ Fr Jun 22, 2007 17:51 ]
Betreff des Beitrags: 

Also, das ganze ist im Fragmentshader, allerdings wird nichts indiziert, sondern nur die Werte von X und Y zum Addieren/Subtrahieren von Texturkoordinaten verwendet, insofern kann ich das nicht bestätigen.

Gruß Lord Horazont

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/