Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 11, 2025 07:26

Foren-Übersicht » Programmierung » Shader
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Shader verwaltung
BeitragVerfasst: Mo Jun 11, 2007 10:36 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
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~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 18, 2007 17:58 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
Deferred Renderer... das setzt ein ende zum Schadervariantengenerierungswahn


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 19, 2007 09:30 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
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

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 19, 2007 09:47 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
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~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 21, 2007 14:31 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
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

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 21, 2007 14:52 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 21, 2007 18:20 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
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

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 22, 2007 00:51 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
mach das mal im fragmentshader und indizier mit der schleifen variable eine uniformvariable... Dann geht es nicht mehr


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 22, 2007 15:59 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 22, 2007 17:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
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

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Foren-Übersicht » Programmierung » Shader


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 17 Queries | GZIP : On ]