Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
GlSl Shader für statische/dynamische Lichtquellen
userid11997
myCSharp.de - Member



Dabei seit:
Beiträge: 419

Themenstarter:

GlSl Shader für statische/dynamische Lichtquellen

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
Blacal
myCSharp.de - Member



Dabei seit:
Beiträge: 392

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
userid11997
myCSharp.de - Member



Dabei seit:
Beiträge: 419

Themenstarter:

beantworten | zitieren | melden

Das ist ganz normales glBegin, glEnd in der onPaint-Methode des Forms, ohne irgendwelche speziellen Pipelinopperationen.
private Nachricht | Beiträge des Benutzers
Floste
myCSharp.de - Member

Avatar #avatar-2376.jpg


Dabei seit:
Beiträge: 1158
Herkunft: Norddeutschland

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Floste am .
Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!
private Nachricht | Beiträge des Benutzers
userid11997
myCSharp.de - Member



Dabei seit:
Beiträge: 419

Themenstarter:

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
Floste
myCSharp.de - Member

Avatar #avatar-2376.jpg


Dabei seit:
Beiträge: 1158
Herkunft: Norddeutschland

beantworten | zitieren | melden

Zitat
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.
Zitat
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.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Floste am .
Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!
private Nachricht | Beiträge des Benutzers
userid11997
myCSharp.de - Member



Dabei seit:
Beiträge: 419

Themenstarter:

beantworten | zitieren | melden

Um meine Frage nochmal zu wiederholen
Zitat
Weiß jemand, wie das große Engines wie die Unreal- oder Source-Engine machen?
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5989
Herkunft: Leipzig

beantworten | zitieren | melden

Deine Frage hieß ja ursprünglich:
Zitat
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
private Nachricht | Beiträge des Benutzers