Neue, simple 2D Licht Engine

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Neue, simple 2D Licht Engine

      Schönen Abend/tag an Alle :)

      Mit ziemlicher Überraschung stellte ich grad fest dass es heir ziemlich viele Examples für alles Mögliche gibt, aber eine gute und vorallem performante Engine für die Beleuchtung fehlt.
      Aus diesem grund habe ich mich selbst an einer versucht. Zunächst dachte ich, ich hätte alles schon parat da ich vor Jahren eine fog-of-war Engine geschrieben hatte. Musste allerdings feststellen dass dies überhaupt nicht funktioniert. Erst nach einigem Rumprobieren konnte ich einen "Blendmode" finden der es ermöglicht das "Licht" auch einzufärben.

      Was ein Blendmode ist, wird in den Skripten relativ ausführlich erklärt. Hab es so gut komentiert wie es ging.
      Das ganze besteht aus nur 3 Skripten wobei nur das Initialisierungsskript Argumente benötigt.
      Kann trotzdem sein dass der ein doer andere vom Code erschlagen wird, aber bitte versucht ihn zumindest (mit den Komentaren) durchzulesen und nicht einfach zu kopieren :)

      Alle Instanzen können indiviuelle Lichtstärken und -farben haben wie man hier sehen sollte:


      Jegliche Fragen (auch zum reinen Verständnis) beantworte ich selbstverständlich gern und hoffe dass dies dem einen oder anderen hilft ^^

      P.s. Mit der ENTER Taste wechselt man zwischen Farblicht und Fog-of-War Modus. Letzteres bedeutet dass in dem dunklen Areal schlicht ein Loch ist anstelle einer durchsichtigen Umfärbung.
      Dateien

      Willst du auf diese Drachen und -eier klicken?
      Sie werden sich freuen ;)

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von DragonGamer ()

    • Ich mache es gerade wie in diesem Thread , aber da es hier ja um die Beleutung geht frag ich einfach mal :)
      Das ganze funktioniert bei mir wunderbar. Nur gibt es ein kleines Problem.
      Mein Spiel hat mehrere Etagen bzw. Ebenen (mehr oder weniger Vogelperskpektive).

      Hier ein screen, wies im meinem Map Editor ausschaut damit mans sich besser vorstellen kann:


      In dem Rot markierten Kreis ist eine Ebene drunter ein Ofen der rötlich leuchtet.
      Soll aber eigentlich logischweise nicht durch den Boden scheinen^'^.

      Im Moment werden ja alle Lichter auf einer Surface gedrawt. Also müsste ich praktisch für jede
      Lichtquelle eine eigene Surface mit einer anderen Depth machen. Gibt es eine effizientere Lösung?


      mfg
    • Daran hab ich mal garnicht gedacht :o
      Danke sehr, ich werds mal ausprobieren :)
      Ich hoffe das wird nicht zuviel bei 7 Ebenen, theoretisch auch 14, allerdings
      sollte man wenn man unter Ebene 0 ist die 7 darüber und wenn man über 0 ist die darunter nicht sehen.
      Ich schau mal einfach :)

      Edit: @unter mir: Danke :D


      mfg

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Unistyle ()

    • Glaube man kommt wohl nicht drum herum für jede Ebene eine Surface zu zeichnen da man auch nicht die Grafiken über das Licht (auf die Surface) drawen kann ohne beim nächsten Licht dann zum Beispiel von der Mauer was wegzunehmen...

      7 Ebenen sind schon etwas viel aber sofern du den Code optimierst und die Surface nur so groß wie der view ist, sollte es funktionieren.

      EDIT: @Unistyle Glückwunsch zum 100ten Beitrag :D

      Willst du auf diese Drachen und -eier klicken?
      Sie werden sich freuen ;)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von DragonGamer ()

    • DragonGamer schrieb:

      Glaube man kommt wohl nicht drum herum für jede Ebene eine Surface zu zeichnen da man auch nicht die Grafiken über das Licht (auf die Surface) drawen kann ohne beim nächsten Licht dann zum Beispiel von der Mauer was wegzunehmen...

      7 Ebenen sind schon etwas viel aber sofern du den Code optimierst und die Surface nur so groß wie der view ist, sollte es funktionieren.

      EDIT: @Unistyle Glückwunsch zum 100ten Beitrag :D
      Bei sowelchen Lichtengines fehlen leider immer die lichtabsorbierenden Objekte. ;)
      Trotzdem gut. :P
    • Lizard771 schrieb:

      Bei sowelchen Lichtengines fehlen leider immer die lichtabsorbierenden Objekte.
      Trotzdem gut.

      Danke und ja das stimmt leider denn soetwas verkompliziert die Sache auch erhebelich. Ich hab auch nur ne grobe Ahnung davon wie das umzusetzen wäre...
      Wenn du soetwas brauchst, würde ich dir empfehlen eine abgekapselte Engine dafür zu verwenden wie diese Extension: gmc.yoyogames.com/index.php?showtopic=541702
      Funzt allerdings GM bedingt nicht mit extrem vielen Objekten im Raum...

      Willst du auf diese Drachen und -eier klicken?
      Sie werden sich freuen ;)
    • Ich bin begeistert.
      Ich hatte bereits eine ältere Engine von dir meine ich mal heruntergeladen und die gefiel mir schon sehr, aber diese hier ist einfach ausführlicher, besser und durch die ausführliche Beschreibung sogar simpler.
      Vielen Dank für dieses Beispiel, selten hat mir ein Beispiel so geholfen.

      MfG Yivo
    • Mehrere Surfaces? Sah vor 2 Jahren eine die optimal mit einer gearbeitet hat, zudem dynamische Schatten+3D Tiefe. Warte vergebens darauf das YYG auf den Nutzer eingeht, und nicht alles so derartig einschränken. Was ich damit meine wären Per-Pixel Callbacks in diesem Fall, und allgemein Adressen zu internen Ressourcen, was ja momentan nur mit ach-und-krach möglich ist.
    • famous schrieb:

      Mehrere Surfaces? Sah vor 2 Jahren eine die optimal mit einer gearbeitet hat, zudem dynamische Schatten+3D Tiefe. Warte vergebens darauf das YYG auf den Nutzer eingeht, und nicht alles so derartig einschränken. Was ich damit meine wären Per-Pixel Callbacks in diesem Fall, und allgemein Adressen zu internen Ressourcen, was ja momentan nur mit ach-und-krach möglich ist.
      Die Idee mit mehreren Surface war ja nur auf Unistyle's besonderen Fall bezogen (meine Engine engine da oben kommt durchaus mit nur einer Surface aus).
      Wenn man aber Lichter braucht die durch andere Objekte nicht hindurchscheinen, muss man wohl oder übel mehrere Ebenen von Surfaces benutzen - es sei denn man verarbeitet welche Obejkte wo darüber sind. Dazu muss aber der Zeichencode der entsprechenden Objekte mit einbezogen werden was das ganze deutlich verkompliziert.
      Schatten sind dann nochmal ne ganz andere Sache. Dafür gäbe es dann aber auch z.B. die bereits fertige Engine da die ich verlinkt habe.
      Darum gings in meiner Engine hier ja nicht :)

      Und ja, YoYo könnte vieles und jenes aber wir müssen uns halt damit abfinden.

      Willst du auf diese Drachen und -eier klicken?
      Sie werden sich freuen ;)