Shader und deren Tücken

    Shader und deren Tücken

    Erstmal Hallo an Alle, hab mich jetzt auch mal angemeldet, da das Thema für mich zu kompliziert ist,
    um es in Englisch lösen zu können(@Mool hat mich hierher gelockt :)).
    Ich bin noch sehr neu in GM und verschaffe mir erst einen Überblick, über die gefühlt hunderte von
    Befehlen(wobei das Nichtwissen, einzelner davon, derzeit das Hinderlichste daran ist).
    Dabei bin ich auch über Shader gestolpert und habe dabei erkannt, dass das wohl eine der mächtigsten
    Befehlsgruppe in GM darstellt, aber scheinbar auch die Schwerste.

    Grundsätzlich bin ich dabei über folgende Probleme gestolpert:

    Warum hat GM nicht ein paar vordefinierte Shader, für einige Standard Funktionen(z.B. Tiefensortierung,
    Farbwechsel, Licht+Wasser Effekte, usw.)?
    Alles nützliche Dinge und sehr hilfreich, bei der Erstellung von Spielen und GM ist ja nun mal ein(wenn auch
    sehr mächtiger) Spiele-Baukasten.

    Wie erkenne ich einen Shader, dass er für GM geeignet ist, wenn ich in den weiten des Internets einen finde?

    Gibt es hilfreiche Einsteigertutorials(am besten als Video und in Deutsch), die das Thema von Grund auf behandeln
    und auch ein richtiges Beispiel, bis zum Finale, erstellen?

    Und letztendlich, die Frage, warum ich überhaupt auf den Bereich Shader reflektiere ........ es gibt ja in vielen
    Spielen, die Möglichkeit, sich eine beliebige Farbe auszusuchen(für Hemd, Hose, Truhe, was auch immer) und
    da dachte ich, mittels Shader kann man doch bestimmt eine einzelne Farbe, von einem Tile oder Sprite, ändern.
    Ist ein Shader da die richtige Wahl oder gibt es in GM bessere(schnellere) Methoden?

    mfg
    Miradur
    Der Grund für die wenigen Tutorials (auch in englisch), welche Shader für GameMaker erläutern ist ganz einfach zu erklären.
    Shader sind relativ neu in GameMaker und benutzen zudem eine komplett andere Sprache als GML, welche global in der ganzen Computerbranche verwendet wird. Deshalb wird du wahrscheinlich eher Shadertutorials finden, die nicht im Zusammenhang mit GameMaker stehen. Da die Shadersprache global verwendet wird, sollte es auch möglich sein, alle Tutorials halbwegs auf GameMaker übertragen zu können. Auch ein Grund ist die Komplexität von Shadern, was sie wiederum schwer zu verstehen macht. Mit Shadern greift man nämlich direkt auf die Schnittstelle der Grafikkarte zu und bearbeitet die einzelnen Informationen von Vektoren, Farbwerten, etc. Zudem kann man Shader als die Kirsche auf dem Eisbecher sehen, da sie meist nicht spielmechanisch benötigt werden, sondern nur das Aussehen eines Spiels verbessern.

    Nun zu deinem Problem.
    Mit Shadern wäre dies auch leicht umsetzbar, aber wie du schon richtig vermutet hast, gibt es dafür einfachere bessere Möglichkeiten. Eine wäre z.B. mehre Subimages mit den unterschiedlichen Farben zu erstellen. Eine andere wäre das Benutzen der image_blend Funktion von GameMaker, die genau das ermöglicht.


    Willst du trotzdem das Problem mit Shadern lösen, so kann ich das Tutorial in diesem Forum hier empfehlen.
    Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.
    Auch hier, ein dickes Danke für Deine Antwort und auch für den Hinweis auf einen, für mich neuen, Befehl,
    jedoch vermag "image_blend" nicht meinen Wunsch zu erfüllen.
    Dieser Befehl legt eben EINE Farbe über ALLES, also eher so etwas, wie "Huch, ich habe einen Timer ausgelöst,
    gleich wird hier alles hochgehen und deshalb hüllt sich der Bildschirm, in ein erschreckendes Rot", aus diversen
    Spielen.
    Ich möchte aber, wenn ein Hemd rot/blau gestreift ist, das Rot zum Beispiel gegen ein Gelb tauschen und die
    verschiedene Einzelbilder Idee, hatte ich natürlich auch, aber selbst bei 30 Farben und mehreren Animationen,
    kommt man sehr schnell auf hunderte von Bildern.

    Das von Dir verlinkte Tutorial kannte ich natürlich schon(trotzdem Danke :)), aber genau deshalb auch meine
    Frage, nach welcher "Programmiersprache" muss ich bei Shadern achten, wenn ich irgendwo, welche entdecke?
    Also was läßt sich möglichst 1:1 in GM verwenden, bzw. verwerten?

    Miradur
    Hi @Miradur ich bin Mool.

    Dieses Tut hier erklärt wie man Shader von Shadertoy einbindet.

    Außerdem fand ich dieses Tutoiral hier sehr hilfreich.

    Wenn du zB ein Tshirt einfärben willst, dann kannst du ein Sprite erstellen mit den Elementen die konstant sind. ZB Schwarze Streifen und die Form.
    Die Flächen die änderbar sein sollen einfach transparent lassen.

    Hinter dieses TShirt zeichnest du dann ein Surface mit der entsprechenden Farbe.
    Okay, danke für den Ansatz, das kannte ich alles schon und es hat sich nichts geändert, ich habe es damals
    nicht verstanden und werde es wohl auch nie verstehen.
    Aber nicht so schlimm, dann lassen wir eben die Kirsche weg :) GM hat ja noch hundert andere Dinge zu
    bieten. Das ist wie mit C++, da habe ich schon mehrmals angesetzt und immer wieder frustriert aufgegeben,
    manche Dinge bekomme ich einfach nicht in den Kopf.
    Aber ich bleibe bei meiner Ansicht, dass bei einem Baukastensystem, ein paar wesentliche Dinge, quasi als
    Tools, mitgegeben werden sollten.
    Bei Shadern eben Fog of War, Wasser, Farbe austauschen, Player Effekte, Spiegelung usw., also so 5-10
    vordefinierte Shader, die man über EINEN Befehl ins Spiel bringen könnte.

    Aber mal sehen, meiner Ansicht nach, sollte ja bald ein größeres Update erscheinen, da eine Konkurrenz-
    Engine ja in Kürze einen großen Update Sprung hat und kostenlos ist.
    Da sollte man auf jeden Fall mit ein paar Features gegensteuern, wenn man es Markt bezogen betrachtet.

    Vielen Dank an Alle, die sich für dieses Thema interessiert, bzw. geholfen haben :)

    Miradur
    Und auch hier ein kleines Update, zumindest was die Farbwahl eines Gegenstands betrifft.

    @Dufner ... tatsächlich kommt hierbei "image_blend()" ins Spiel, allerdings mit folgenden
    Vorgaben(wie ich bei Stardew Valley festgestellt habe).

    Nehmen wir als Beispiel, die Truhen, die dort der Aufbewahrung dienen und die man sich
    in verschiedenen Farben anzeigen lassen kann.

    Der Trick ist, man zeichnet sie Schwar/Weiss, also verschiedene Grautöne und teilweise mit
    Alpha. SV zeichnet dann nochmal die Beschläge separat über das Sprite.
    Der Ablauf ist also wahrscheinlich:

    Zeichne Truhe(S/W)
    image_blend(Farbe)
    Zeichne Beschläge

    Übrigens werden auch Frisuren in S/W gezeichnet und anschließend entsprechend eingefärbt.
    Vielleicht braucht das ja mal jemand und kann ebenfalls nicht mit Shadern anfangen ;)

    Miradur