Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

18.12.2012, 12:53

2D Lighting

Hallo alle zusammen,
ich arbeite gerade an einem kleinen Projekt und möchte ihm ein wenig mehr optische Schönheit verpassen.
Ich habe eine Menge Quads mit Textur, die sich über den Bildschirm bewegen. Die Kamera bewegt sich nicht, nur die Quads bewegen sich auf einer Ebene vor der Kamera. Ich würde gerne ein Point Light verwenden, das etwa so aussieht. Wenn ich es richtig verstanden hab eignet sich per-pixel lighting am besten, weil ich ja nur Quads benutze. Meine Idee wäre den fertigen Framebuffer durch einen Fragment-Shader zu schicken und dort das Lighting zu machen. Allerdings bin ich nicht sicher wie ich das mache soll. Ich dachte etwas wie Lichtposition normalisieren, die Entfernung vom Pixel zum Licht ausrechnen und dann anhand der "Stärke" des Lichtes die Farbe berechnen. Geht das so? Oder macht man das andes? Ich hab schon im Internet gesucht, aber dort werden nur Ansätze erklärt, die für mein Programm viel zu kompliziert sind (ich brauch keine Schatten etc.).
Ich bin für alle Tips dankbar.
Danke schonmal im Voraus,
Foaly :)

edit: Ich benutze übrigens OpenGL (und GLSL), aber ich glaub das ist egal, weil es geht ja eher um die Technik :D

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

2

18.12.2012, 13:00

Mach eine zweite Textur als Renderziel auf und rendere alle Lichtquellen mit additivem Blending da rein. Dann brauchst Du im finalen Step nur noch die Renderziel-Textur mit den Quads mit der Renderziel-Textur der Lichtquellen multiplizieren.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

18.12.2012, 13:16

Jup. Wie Schrompf sagt. Das braucht keinen Shader und auch kein PerPixel Lighting. Mit Quads hat das auch erstmal nix zu tun.
Vielleicht solltest Du uns aber auch mal erklären WAS Du überhaupt machen willst. Sowas? Also eine einfache Beleuchtung einer 2D Szene?

(Link)


Oder wirklich "echte" 2D-Beleuchtung auf 3D-Quads??
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

4

18.12.2012, 14:06

Haha hab ich mir doch gedacht, das das noch einfacher geht :D
Ganz genau ich hab sowas vor, wie es auf dem Bild ist.
Ich wiederhole mal, ob ich es richtig verstanden hab: Ich render alle Lichtquelle additiv in ein Textur, dann render ich meine Quads in eine andere Texture and am Ende multipliziere ich beide Texturen. Richtig?
Falls das so stimmt, hab ich noch ein paar Fragen: Wie genau render ich die Lichtquelle auf die Textur (Berechne ich einfach einen Radial Gradient um die Lichtposition herum?!)? Wie mach ich ein bisschen Ambient Light? (Einfach die Textur von Anfang an ein bisschen aufhellen?)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

18.12.2012, 14:34

Render einfach eine Licht-Textur. Genau wie die, die du verlinkt hast. Mache ich auch. Danach die Szene in einer andere Textur und dann beides multiplizieren. Ambient machste, indem du die Licht-Textur vorher eben mit grau leerst statt mit schwarz.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

18.12.2012, 14:48

Die Lichttexturen kannst du dir ja vorher ganz einfach in irgendeinem Programm erstellen. Gimp, Photoshop, was auch immer dir gefällt. Die Methode ist wirklich ziemlich einfach. Vor allem kannst du damit auch farbliche Lichter sehr einfach erstellen, indem du die Lichttextur einfärbst. Meiner Meinung nach die sinnvollste Methode, solange man keine Schatten braucht.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

18.12.2012, 14:49

Die Textur muss man nicht färben, dafür gibt's Vertex-Colors.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

8

18.12.2012, 15:00

Gut er benutzt OpenGL, da geht das auch anders. Aber je nachdem womit man arbeitet kann man das nicht so ohne weiteres. Bei manchen Frameworks kann man beim rendern eine zusätzliche Farbe mit angeben, bzw über einen Shader lässt sich das ganze natürlich auch lösen. An sich war das ja auch weniger das Problem und ich wollte nur darauf hinweisen, dass man damit auch solche Effekte erzielen kann.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

9

18.12.2012, 15:10

Cool danke für die Informationen! Ich werde mich gleich mal ran machen :)
Danke auch für den Hinweis mit dem farbigen Licht. Die Quads haben bereits eine Vertex-Color, deshalb ist die Idee mit farbigem Licht gar nicht schlecht.
Noch eine Verständnisfrage: Wenn ich das Licht bewegen will, bewege ich einfach die Texture, richtig?

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

10

18.12.2012, 15:13

Genau. Du kannst theoretisch eine große Textur machen wo du alle Lichtquellen rein renderst, oder jedes Licht einzeln in deine Szene rendern. Was da schneller ist kann ich dir nicht genau sagen. Speichersparender wird es sein die Quellen einzeln zu rendern, aber ich vermute auch langsamer. Wie gesagt, kann ich aber nicht belegen. Deine einzelnen Lichttexturen kannst du aber ansonsten behandeln wie normale Texturen oder Sprites.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige