Material (Emissive) über Blueprint manipulieren (Düsenantrieb)

  • Hallo,


    ohne zu vieler Worte:

    Wie kann ich über Blueprints ein Material manipulieren.


    Ich habe ein Raumschiff erstellt und möchte nun die Triebwerke über den Wert der Geschwindigkeit, welche das Schiff hat (immer aktualisiert) manipulieren, erstmal das Leuchten von "Emissive" des Triebwerksmaterials verstärken oder schwächer machen.

    Möflicherweise auch die Farbe anpassen.


    Habt ihr eine Idee wie ich das mache?


    Vielen Dank schonmal

    Barni

  • Barni

    Hat den Titel des Themas von „Material (Emission) über Blueprint manipulieren (Düsenantrieb)“ zu „Material (Emissive) über Blueprint manipulieren (Düsenantrieb)“ geändert.
  • Sleepy

    Hat das Thema freigeschaltet.
  • Als Erstes musst du ein Material erstellen, welches an entsprechender Stelle ein Parameter hat (wenn es eine konstante ist, Rechtsklick und conwert to Parameter)


    Danach erstellst du eine Instanz von dem Material.


    In dem BP, in dem du das Material steuern willst, erstellst du dann eine dynamische Materialinstanz mit mit Create Dynamic Material Instance.


    Als Parent gibst du deine Materialinstanz an.


    Speicherst du das Ganze in einer Variablen, in meinem Beispiel habe ich jetzt drauf verzichtet, ergibt aber mehr Sinn, wenn du die Parameter öfter ändern willst.


    Dann baust du in die Routine, die das ganze steuern soll, die Node Set Scalar Parameter Value ein. Sollte dein Parameter 3 Werte haben, dann halt Vector usw.


    Als Parametername gibst du den Namen des Parameters in deinem Material ein und bei Value halt den Wert, den du dir wünscht.


  • Danke Tomarr für deine Antwort. Habe es so eingestellt wie du es beschrieben hast (glaube ich), doch leider ändert sich nichts im Spiel.




    In der Variable SPEEDTEST habe ich einen Vector gespeichert und lasse ihn am Ende als String ausgeben, was auch funktioniert und mir einen RGBA Wert im Spiel anzeigt. Einen Parameter im Material habe ich ebenfalls erstellt, als "Color" benannt.

    Im Mesh selbst habe ich die Materialinstanz ebenfalls eingestellt. Doch wie gesagt, leider ändert sich nichts.


    Woran könnte es liegen?

  • Warum wandelst du denn eine Floatvariable in eine Vectorvariable um?


    Ich nehme mal an, dass Speedtest deine Geschwindigkeit ist?


    Am sinnvollsten ist da natürlich ein Floatwert, dann musst du auch die Node "Set Scalar Parameter Value" nehmen und nicht "Get Vector Parameter Value". Ich meine, was willst du denn im Vector an Geschwindigkeit speichern, es sei denn, du änderst dann auch gleich die Farbe und nicht nur den Emissive-Wert. Dann musst du halt einen Vectorparameter (mit 3 Werten) an dein Emissiv anschließen und dein Speedtest muss dann auch Vector sein, dann brauchst du nichts zu konvertieren, dann glüht er halt in der Farbe, die deine Vectorvariable übergibt.


    Im Großen und Ganzen würde ich dann auch die Create Dynamic Material Instance an Begin Play anschließen und return Value in eine Variable packen.


    Und unter dem Tick Event, dann die Variable mit Get packen und diese als Target nehmen für Set Paramaeter.


    Also, wenn ich deinem Vector folge, sieht das dann etwa so aus.


    Material:


    Actor:


    Set ist Set Speed Value.


    Bei dem Actor habe ich jetzt mal als Beispiel genommen, wie du zum Beispiel die Farbe über die Farbgrundwerte regeln kannst, indem du den Input splittest und dann halt drei verschiedene Float-Werte übergibst.


    Variieren kannst du natürlich letztendlich nach Belieben.


    Wichtig ist halt nur, dass du je nach Parameterart, also Scalar oder Vector, auch die richige Node benutzt Set xxx Parameter Value.

  • In der SPEEDTEST Variable habe ich schon einen Vector gespeichert. Jedenfalls gibt mir Print am ende einen ordentlichen RGBA aus, also müsste doch alles richtig an Emissive übermittelt werden.


    Zum Test habe ich es aber auch nochmal mit einem einzelnen Wert als Scalar für die Stärke so wie du es in deiner ersten Antwort beschrieben hast gemacht. Doch auch hier ändert sich nichts an der Materialinstanz, leider.

  • Also Gelb ist bei mir Vector als Variablentyp. Jedenfalls konnte ich drei Werte eingeben.


    Aber mal ganz anders gedacht:

    Wenn ich Anfangs von meinem Material eine Materialinstanz erstelle, im Blueprint dann mit "Create Dynamic Material Instance" von meiner händisch erstellten Materialinstanz nochmal eine mache, manipuliere ich ja nicht diese sondern erstelle doch eine neue. Müsste ich dann nicht auch die neue generierte Instanz auf mein Mesh anwenden und sagen wofür sie steht?


    Wenn ich jedenfalls den Wert in der Variable in der ich die generierte Materialinstanz gespeichert habe ausgebe, erscheint ein Name mit fortlaufender Nummer.


    Habe ich da etwas nicht verstanden?


    Update:

    Ich habe nun "Set Material" abschließend eingebaut und als Target mein Mesh, als Elementslot den auf dem auch meine Triebwerksmaterial liegt und als Material die mit "Create Dynamic Material Instance" generierte Instanz eingestellt und siehe da, es funktioniert.

    :!:

    Einmal editiert, zuletzt von Barni () aus folgendem Grund: Update

  • Stimmt, ich glaube ich war auch etwas unachtsam.


    Es gibt zwei Create Dynamic Material Instance Nodes. Nimm mal die für Static Mesh.


    (Kleine Berichtigung) Links siehst du ja, dass du dem Mesh das ganze als Target übergibst, also das Static Mesh. Wenn du nich alles von dem Mesh leuchten lassen willst, musst du, am besten schon in Blender, entsprechenden Bereichen einen weiteren Materiallayer und entsprechendes Material zuweisen, den du dann per Index auswählst. Dadurch, dass ich auch zuerst die falsche Node für Create Dinamic Material instnce gewählt habe, ist mir das leider auch nicht aufgefallen.


    Ansonsten habe ich das dann gerade ausprobiert, allerdings mit Scalar Parameter, also dem Float Beispiel.



    Ich habe den Actor dann zwei mal in die Testmap gepackt und Funktioniert.

    Links ist Speed 0.0, Rechts 1.0