Hallöle,
Wer kennt und hat Erfahrung mit "Deferred Shading" in GMS?
Bei diesem Verfahren zur Beleuchtung von 3d Spielen werden depth, normals und Farbe eines Pixels in einer Textur gespeichert und dann drübergelegt. Ermöglicht wird dass durch mehrere Render Targets die dann zusammen das Energebnis bilden. Oder irgednwie so, ich versteh's nicht ganz. Wikipedia hilft.
Hab mir das halt (siehe link oben) runtergeladen und in mein Projekt eingebaut. Im GMS werden dann halt alle Objeke und die Kamera auf mehere Surfacers gezeichnet und mit Shader manipuliert und am Schluss zeichnet man dann nur noch das letzte Surface der Renderpipeline im Draw GUI oder als ortho. Grafik und volá hat man viele bunte (viel mehr als nur acht Lichter in seinem Spiel. Sehr geil das Verfahren.
Nun gibt es aber ein Problem. Wenn man z.B. ein Lagerfeuer in sein Spiel einbauen will wird die Textur für die Flammen auch der Dunkelheit ausgesetzt. Sie sollen aber ja allein leuchten. Das Pointlight das man mit deferred shading einbauen kann reicht nicht aus um die Flammen glaubwürdig hell genug erscheinen zulassen. Wenn man d3d lighting verwendet kann man ja einfach für das Feuer d3d_set_ligthing(0) machen. Das geht aber bei deferred shading nicht so. Wie kann man dass machen?
Mein Versuch war es das Feuer auf ein zusätzliches Surafce zuzeicnen, davon dann jeden step ein sprite zuerstellen, weil ein surface ja keine transparenten Bereiche haben kann und das sprite dann ganz oben drauf zu zeichnen.
Das löst aber gar nichts denn 1. Ist das total rechen intensiv bei na Auflösung von 1920 * 1080 und 2. ist das Feuer dann immer ganz vorne im Bild auch wenn eigentlich ein Baum davor wäre - also ziemlich dumm so!
Irgendjemand weiß bestimmt wie man das macht. Brauch ich einen zusätzlichen Shader dafür? FUnktionieren Texturen mit transparenten Anteilen dann überhaupt noch?
Hoffe mir kann jemand helfen.
edit: Der link oben führt nicht zur aktuellen Version. Der hier aber. Dort frägt auch jemand wie man "glow" einbauen kann. Dann schreibt einer das man alle shader um den Code
erweitern muss. Doch wo muss man das im Shader einfügen? Wenn ich das irgenwo einfügen kommt bei mir ein Fehler. Und dann hab ich irgendwo im Topic dort ein link von jemanden gefunden (ich find ihn aber grad nicht mehr) der das gemacht hat mit dem "Glow". Doch leider funktionieren da keine Texturen mit transparenten Anteilen.
Wer kennt und hat Erfahrung mit "Deferred Shading" in GMS?
Bei diesem Verfahren zur Beleuchtung von 3d Spielen werden depth, normals und Farbe eines Pixels in einer Textur gespeichert und dann drübergelegt. Ermöglicht wird dass durch mehrere Render Targets die dann zusammen das Energebnis bilden. Oder irgednwie so, ich versteh's nicht ganz. Wikipedia hilft.
Hab mir das halt (siehe link oben) runtergeladen und in mein Projekt eingebaut. Im GMS werden dann halt alle Objeke und die Kamera auf mehere Surfacers gezeichnet und mit Shader manipuliert und am Schluss zeichnet man dann nur noch das letzte Surface der Renderpipeline im Draw GUI oder als ortho. Grafik und volá hat man viele bunte (viel mehr als nur acht Lichter in seinem Spiel. Sehr geil das Verfahren.
Nun gibt es aber ein Problem. Wenn man z.B. ein Lagerfeuer in sein Spiel einbauen will wird die Textur für die Flammen auch der Dunkelheit ausgesetzt. Sie sollen aber ja allein leuchten. Das Pointlight das man mit deferred shading einbauen kann reicht nicht aus um die Flammen glaubwürdig hell genug erscheinen zulassen. Wenn man d3d lighting verwendet kann man ja einfach für das Feuer d3d_set_ligthing(0) machen. Das geht aber bei deferred shading nicht so. Wie kann man dass machen?
Mein Versuch war es das Feuer auf ein zusätzliches Surafce zuzeicnen, davon dann jeden step ein sprite zuerstellen, weil ein surface ja keine transparenten Bereiche haben kann und das sprite dann ganz oben drauf zu zeichnen.
Das löst aber gar nichts denn 1. Ist das total rechen intensiv bei na Auflösung von 1920 * 1080 und 2. ist das Feuer dann immer ganz vorne im Bild auch wenn eigentlich ein Baum davor wäre - also ziemlich dumm so!
Irgendjemand weiß bestimmt wie man das macht. Brauch ich einen zusätzlichen Shader dafür? FUnktionieren Texturen mit transparenten Anteilen dann überhaupt noch?
Hoffe mir kann jemand helfen.
edit: Der link oben führt nicht zur aktuellen Version. Der hier aber. Dort frägt auch jemand wie man "glow" einbauen kann. Dann schreibt einer das man alle shader um den Code
erweitern muss. Doch wo muss man das im Shader einfügen? Wenn ich das irgenwo einfügen kommt bei mir ein Fehler. Und dann hab ich irgendwo im Topic dort ein link von jemanden gefunden (ich find ihn aber grad nicht mehr) der das gemacht hat mit dem "Glow". Doch leider funktionieren da keine Texturen mit transparenten Anteilen.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Morpheus ()