Lightmaps verschieben?

  • #1, z MachtnixMonday, 30. May 2016, 13:26 hodinky 9 years ago
    Ich möchte gerne wechselnden Lichteinfall und eine Spielfigur mit Taschenlampe simulieren. Dazu eignen sich auch Lightmaps. Allerdings sind diese fest mit der Kulisse verankert, oder? Wenn die Lightmap größer als die Kulisse angelegt wird - kann ich sie dann mit dem Charakter zusammen verschieben? z.B. mit einem Lua-Befehl (z.B. sowas wie: getObject[Lightmap]:setPoint x,y... natürlich stimmt die Syntax hier nicht)

    Kapitán

    1097 Posts


  • #2, z sebastianMonday, 30. May 2016, 14:25 hodinky 9 years ago
    Lightmaps werden immer auf die volle Kulissengröße gestretcht. Verschieben lässt sich das meines wissens nach nicht, da die lightmap kein eigenes objekt ist sondern nur ein pfad zur bilddatei.
    Das einzige, was du hier bei der lightmap tun kannst ist, diese mit einer anderen via lua zu ersetzen und so eine Änderung zu simulieren.

    Kapitán

    2346 Posts

  • #3, z MachtnixMonday, 30. May 2016, 15:40 hodinky 9 years ago
    Danke. Hab ich befürchtet. Der Scheinwerferstrahl soll ja immer vom Charakter starten - also ist das Ersetzen keine Lösung. Bei dem bewegten Licht (z.B. vorbeisausende Laternen oder Laubschattenzittern) könnte es natürlich gehen. Muss ich mir also ein riesiges Objekt basteln, dass z.B. 70% deckend ist und einen ausgesparten Lichtstrahl beinhaltet und das dann mit dem Charakter mitführen...

    Kapitán

    1097 Posts

  • #4, z sebastianMonday, 30. May 2016, 17:42 hodinky 9 years ago
    Es gibt übrigens einen shader, der eine Taschenlampe simulieren kann.
    Such mal hier im forum nach shaderlamp. Ist aber unglaublich konfus zu konfigurieren.

    Kapitán

    2346 Posts

  • #5, z MachtnixMonday, 30. May 2016, 20:09 hodinky 9 years ago
    Rückmeldung: es funktioniert (naja, beinahe). Ich habe zwei übergroße Layer-Kulissenobjekte mit einem Lichtstrahl (weil ich z.Z. nur zwei Richtungen verwende) und setze diese mit Offset Obj_Kegel:setValue(VObjectOffset, {x=Pos_Kegel.x,y=Pos_Kegel.y}) auf die Position der Spielfigur. Dabei sind Pos_Kegel.x und Pos_Kegel.y die errechneten Offset-Werte aus der Figurposition. Dieses Script wird alle 50ms neu aufgerufen (Schleife beim Start der Kulisse). Das zittert zwar, ist aber völlig ausreichend.

    Was eben noch NICHT klappt, ist die 180°-Drehung des Lichtstrahls (Aufruf des gespiegelten Layer-Bildes, wenn die Figur in die andere Richtung schaut oder läuft). Irgendwo habe ich noch die falsche Abfrage; wahrscheinlich muss ich erst rauskriegen, an welcher Stelle im Spiel welche Variable aktuell ist.

    Außerdem verändert sich die Startposition des Strahls, wenn die Figur nach hinten kleiner wird. Ist ja auch logisch, aber das nehme ich in Kauf. Ich müsste sonst die Taschenlampenposition abhängig von der Figurgröße nach unten schieben, puh...

    Von dem Shader habe ich auch gehört, aber ich hab mich an sowas noch nicht getraut...

    Kapitán

    1097 Posts

  • #6, z turricanTuesday, 31. May 2016, 20:05 hodinky 9 years ago
    Die shaderlamp / flashlight / Taschenlampe ist nicht einfach unglaublich konfus - ich glaube, es ist schlichtweg kaputt. twist winkHab wirklich viel damit umher experimentiert, habs aber nie zum Laufen bekommen. Bin aber auf 4.2 stehengeblieben. Vielleicht bekommst Du es ja hin:
    http://www.visionaire-studio.net/forum/thread/flashlight-288...

    Bažant

    43 Posts

  • #7, z MachtnixWednesday, 01. June 2016, 16:24 hodinky 9 years ago
    Ich habe mir das Shader-Script angeschaut und NICHTS verstanden. Weder, wie ich was anlegen muss - und überhaupt - noch was ich ändern muss, um irgendwas Bestimmtes hinzubekommen. Eine kleine Hilfe auf Deutsch wäre schon ganz nett... ;-)
    Für meine Bedürfnisse ist es außerdem "Overkill", weil ich ja keine eigenen Lichtquellen setzen möchte (das müsste ich, wenn ich nur EINE Shaderlichtquelle für die Taschenlampe verwende - alles andere ist dann nämlich total schwarz). Deshalb werde ich das Script nicht verwenden.

    Meine "Primitiv"-Version funktioniert ja eigentlich - ich weiß nur nicht, wie ich Visionaire klarmache, dass es regelmäßig die Ausrichtung des aktiven Charakters überprüft und immer neu anpasst. Hat - glaube ich - etwas mit "localer" Variable zu tun, deshalb habe ich das "local" überall weggenommen, damit die Variable IMMER und im ganzen Spiel gültig ist. Mal sehen, ob das stimmt...

    Allerdings hat sie noch den Nachteil, dass mein Overlay-Objekt mindestens doppelt so groß wie meine Kulisse sein muss (in Pixeln), damit ich nach rechts und links laufen kann. Ich weiß, dass ich die Maske kleiner anlegen und danach skalieren kann, weiß nur nicht wie.

    Kapitán

    1097 Posts