Laden...

GlSl Shader für statische/dynamische Lichtquellen

Erstellt von userid11997 vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.045 Views
U
userid11997 Themenstarter:in
400 Beiträge seit 2008
vor 12 Jahren
GlSl Shader für statische/dynamische Lichtquellen

Moin,

es geht darum, dass wir gerade versuchen einen Shader zu schreiben, der eine bzw mehrere Lichtquellen darzustellen. Leider ist das Licht sehr schwach bzw bewegt sich mit, trotz Matrix-Sicherung.

Kann uns jemand ganz einfach erklären, wie man grundsätzlich an sowas herangeht bzw. uns bei dem Shader helfen?

Wie verhält es sich, wenn wir nun mehrere Lichtquellen an verschiedenen sich teilweise ändernden Orten mit unterschiedlichen Stärken und Farben verwenden wollen?

Ist es überhaupt richtig nur einen Shader (Fragment, Geometry, Vertex) zu verwenden oder wie müssen wir das Verwenden mehrerer Shader pro Zeichendurchgang realisieren?

B
387 Beiträge seit 2005
vor 12 Jahren

Hi,

bei all deinen Frage kann ich nur sagen: Kommt auf die Struktur eurer Rendering-Pipeline an. So ganz nebenbei: Solche Fragen würde ich eher auf Gamedev oder vergleichbaren Foren stellen. C# oder Allgemein .Net Entwickler kommen eher selten mit OpenGL / Glsl in Berührung.

Gruß
Roland

U
userid11997 Themenstarter:in
400 Beiträge seit 2008
vor 12 Jahren

Das ist ganz normales glBegin, glEnd in der onPaint-Methode des Forms, ohne irgendwelche speziellen Pipelinopperationen.

1.130 Beiträge seit 2007
vor 12 Jahren

Ich habe zwar nur wenig erfahrung mit glsl, aber ich antworte einfach trotzdem mal:
Ersteinmal möchte ich euch zum shaderentwickeln in glsl das kostenlose programm rendermonkey von ati ans herz legen. Von nvidea gibts noch fxcomposer, welcher zwar besser zu bedienen ist, aber eher auf directx/hlsl ausgelegt ist.
Dann schreibt am besten ersteinmal nen shader, der für genau eine lichtquelle funktioniert.

Für den einstieg kann man sich im internet belesen: Tutorial glsl2: Per-Pixel-Lighting
(Auf der DGL Wiki -Tutorials gibts noch weitere tutorials)

Wenn es für eine lichtquelle klappt, kann man etweder aus den uniform-variablen statische arrays machen oder die parameter als textur übergeben. Letzteres ist zwar ein bisschen flexibler, aber auch ziemlicher frickelkram.

Beim rendern immer die lichtquellen nach bedeutung für das aktuelle objekt sortieren und dem shader nur die wichtigste(n) übergeben.

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

U
userid11997 Themenstarter:in
400 Beiträge seit 2008
vor 12 Jahren

Also du meinst wir "adden" jeweils eine routine für jedes erdenkliche Licht in der Scene zu unserem Shaderprogramm und aktivieren nur diejenigen (per id oder wie auch immer), die überhaupt gerade auf das Objekt angewendet werden könnten?

Wenn jetzt noch Wassereffekte oder so sachen wie Feuer etc. hinzukommen, muss ich die dann auch in mein mit den Lichtroutinen beklekkertes Programm hinzufügen?

Weiß jemand, wie das große Engines wie die Unreal- oder Source-Engine machen?

1.130 Beiträge seit 2007
vor 12 Jahren

eine routine für jedes erdenkliche Licht

Nein, eine für jeden lichttyp (ambient, punktlicht, paralleles licht und spotlight sind üblich)
Ambient kann man getrost seperat betrachten, ist einfach nur ein farbwert, der dem shader übergeben und überall hinzugefügt wird.
Paralleles licht wird meißt nur von der Sonne ausgestrahlt. Wenn dies der fall ist, dann kann man es getrennt betrachten.
Bleiben noch die sonst verstreuten lichter:
Definier mal ein struct, das alle eigenschaften einer dynamischen lichtquelle (also punktlicht und spotlight) enthält, inclusive dem typ. Eine instanz pro lichtquelle wird zur laufzeit vom hauptprogramm erzeugt und dem shader übergeben.

Wenn man realistische schatten will, muss man shadowmapping einsetzen.

Wassereffekte

Dafür rendert man die szene mit manipulierter viewmatrix (so dass die spiegelung passt) zuerst auf eine textur und die textur übergibt man dem sahder, der das wasser rendert.

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

U
userid11997 Themenstarter:in
400 Beiträge seit 2008
vor 12 Jahren

Um meine Frage nochmal zu wiederholen

Weiß jemand, wie das große Engines wie die Unreal- oder Source-Engine machen?

5.658 Beiträge seit 2006
vor 12 Jahren

Deine Frage hieß ja ursprünglich:

Wenn jetzt noch Wassereffekte oder so sachen wie Feuer etc. hinzukommen, muss ich die dann auch in mein mit den Lichtroutinen beklekkertes Programm hinzufügen?

Weiß jemand, wie das große Engines wie die Unreal- oder Source-Engine machen?

Was erwartest du da für eine Antwort??
Geht es um die Beleuchtung, Wasser- oder andere Effekte? Die Render-Pipeline, den Aufbau der Materialien? Du kannst dich darüber übrigens bei Google informieren, oder auf den Seiten der entsprechenden "Source-Engines".

Christian

Weeks of programming can save you hours of planning