Dropdown als Material Instance

    • Offizieller Beitrag

    Über Material Instanzen kann man sehr schön die Parameter im Mastermaterial dafür nutzen Materials zu verändern.

    Dies geschieht meist durch ein Zahlenslider zb von 0 - 1 oder durch Farbauswahl der Vector Parameter.


    Was ich aber gerne hätte wäre ein Dropdown Menü weiß jemand ob das über das Material möglich ist ?


    Im Grunde möchte ich Folgendes realisieren:


    1.Man kann im Master Material ein Grund Material wählen. zb Plastic, rubber, Iron usw (Dropdown)

    2.Nun kann man zb Plastic verändern (Farbe, Roughness, Metallic) und dann durch Kopfdruck eine Instanz erstellen. (Vector Parameter & Value Parameter)

    3.Für das ganze eine UI bauen und dass ganze ingame steuern.



    jemand ne Idee ?


    EDIT: Ich hatte dass bereits über MakeMaterialAttributes und Blend Materal.... gelöst. Die Lösung gefällt mir aber nicht sondernlich gut.

  • Das ganze kann man so in der Art über "Static Switches" realisieren:


    Das ist quasi nen bool, wo nen haken rein machen kannst/rausnehmen und dementsprechend der Shader ne andere Route wählt. Ein Dropdown hätte ich auch gern, ist aber meines Wissens nicht existent.


    Die Static Switches Parameter funktionieren super mMn.


    isMEtal

    isIron

    isCopper


    Wenn du das meinst =)

  • 3.Für das ganze eine UI bauen und dass ganze ingame steuern.

    Wenn Du das ganze in einer Anwendung steuern möchtest, dann sollte Dir Create Dynamic Material Instance helfen.


    Einfach im Master-Material die gewünschten Parameter anlegen.

    Über das UI kann man dann alles schön auswählen und die passenden Parameter dann in der Instance setzen.


    Hier ein (altes) Video dazu.

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    • Offizieller Beitrag

    DarkFaces Nik

    Nur ist das auch Blueprint basierend.

    im Grunde geht es darum. Ich habe Hunderte oder tausende Objekte bei dehnen ich Materials zuweisen möchte. Das soll über VR oder Touch passieren.


    Der Player wählt ein Objekt an und kann das Material ändern, damit er sich aber nicht durch hunderte Materials arbeiten muss. hätte ich im Hud gerne ein Auswahl. Der Player soll Materials auch verändern können und deswegen würde ich für jedes neue Material gerne Instanzen erstellen die der Player dann ändern kann.


    Ich hab das nun auch schon über Blueprints gelöst, das Problem ist dann nur dass jedes Objekt ein Blueprint braucht und genau dass wollte ich eigenlich verhindern.

    Man scheint das aber mit Material Instanzen wirklich nicht realisieren zu können deswegen muss überlegen wo wir doch den Blueprint Weg oder einen anderen Weg nehmen.






    Ich hatte das auch nur schon mit Substance Materials getestet nur da ist das Problem die Verschatelung der Materials und die switches wären dann echt kompliziert aufgebaut.

  • Ich hab das nun auch schon über Blueprints gelöst, das Problem ist dann nur dass jedes Objekt ein Blueprint braucht und genau dass wollte ich eigenlich verhindern.

    Nicht jedes Objekt braucht ein BP, sondern ein BP kann jedes beliebige Objekt sein.


    Ich würde mir bei so einem Projekt mit DataTable arbeiten die alle Daten enthalten und die Objekte dann dynamisch anlegen.

    So hat man alle Daten an einem zentralen Ort und bei Änderungen übernimmt die Logik die Fleißarbeit.

  • Was eine auch Blueprint-Basierte möglichkeit wäre, wäre es das ganze Verhalten in ein sehr Allgemein Programmiertes ActorComponent zu stecken.

    Dann kannst du einfach das Actor Component zu den Objekten hinzufügen die das von dir Gewünschte Verhalten haben sollen, egal ob du das jetzt im Editor oder BlueprintEditor machst.

  • Ich würde es so wie Tomura lösen, nen Actor Component dran und dort die ganze Logik festhalten. Sehe aber da nach verschiedenen Objekten mit unterschiedlichen Materials aber nen "Mapping Chaos" der Materials, wenn das über BPs geht und du zig Objekte hast.


    Da ist glaube ich so nen MasterMaterial, wie Sleepy es sich vorstellt ... vielleicht sogar "besser". Das kann man dann überall drauf hauen und sehr einfach switchen.


    Das würde ich dann auf ne Art "MaterialIndex" System gehen, wo man in der Materialinstanz nen float/integer angeben kann und im Material selber mit lerp nodes/switches arbeitet (müsste ich auch mal schauen, was da am sinnvollsten ist) und dann in den BPs einfach ein ENUM erstellen, dass man auf die Indices mapped.


    Denke dass ist sehr Fallabhängig, nen richtig oder falsch gibts da nicht =P


    lg

  • Mich irritiert ein wenig der Wunsch nach einem änderbarem Master-Material.


    Im Idealfall hat ein Master-Material doch nur Parameter und ist weder Metall noch Plastik.


    Wenn man unbedingt per Dropdown was zuweisen möchte kann man auch mit Data-Assets arbeiten.

    Leider muss man da ein wenig mit C++ arbeiten, kann dann aber einfach ein Asset mit den nötigen Parametern erstellen und dem Objekt zuweisen.


    Hier ein einfaches Beispiel.

    http://www.levelplusgames.com/ue4-c-data-assets/

    • Offizieller Beitrag

    Die Materials unterschieden sich alleine durch die Farbe (Basecolor) , Roughness und Metallic.

    Pattern oder noises sind nicht erfoderlich.


    Wenn man "schnell" ein Plastik Material erstellen möchte, braucht man hierfür das entsprechende Wissen in welchem Roughness Bereich Plastik liegt dass der Laie natürlich nicht hat.

    Darum wollte ich Grundmaterialien wie:


    Plastik

    Metal

    gebürstetes metall

    Kupfer

    Gummi


    Bereits als vordefiniertest Mastermaterial haben hier soll Roughness und Metallic bereits vordefiniert sein und nur noch in einem sinnvollen Bereich änderbar sein. Metall soll Metall bleiben und Plastik soll Plastik bleiben.


    Der Endanwender soll hierdurch schnell viele Materials erstellen und speichern können und ich kann bei Bedarf weitere Mastermaterials hinzufügen die dann änderbar sind.

  • Mach doch die Dropdowns in einem Widget. Was hat der "Laie" mit Materials, Blueprints oder referenzen zu tun? Der Laie fummelt doch nicht in UE4 rum sondern eher im kompilierten programm, oder?


    Kannst ja für den "ambitionierten" Endanwender ein Expertenmenü machen in dem man die anderen Werte ändern kann. Ich muß zugeben ich verstehe hier nicht ganz was du machen willst.

    • Offizieller Beitrag

    Mach doch die Dropdowns in einem Widget. Was hat der "Laie" mit Materials, Blueprints oder referenzen zu tun? Der Laie fummelt doch nicht in UE4 rum sondern eher im kompilierten programm, oder?

    Ja das ganze soll noch komplizierter werden.


    1. Es geht um die Materialvergabe einiger Tausend - 10000 mechanischen Teile.

    Die Material vergabe wird im Moment sehr aufwendig von mir vorgenommen dauert Stunden.

    2.Langfristig plane ich die Datenvergabe über ein Datasheet CSV zu sichern und vielleicht sogar direkt aus Max per Pyton Script zu Syncen. Hierbei möchte ich vor allem die Colorid, Bauteilname und eventuell Typenbezeichnung in die Tabelle schreiben. Falls in Unreal die Scene Crasht und unbrauchbar wird die Material Vergabe erneut per Script ausgeführt werden kann. (Das dient quasi als Sicherung)

    3. Das Heißt zum einen brauche ich eine schnelle Material Vergabe für mich selbst und für den Endanwender. Der der Soll selbst sehr rudimentäre Materials selber vergeben können.

    4.Durch die Mastermaterials und die Instanzen die der Endanwender erstellt und der Datenbank erhoffe ich mir insgesamt ein einfacheres Handling. Ich denke sind die Mats mal in einer Datenbank tun sich da eine menge neue Möglichkeiten auf.

    5.Der Endanwender steuert das später natürlich über ein Widget aber ich eben in Unreal direkt ohne Widget oder direkt über die CSV Textdatei.

    6.Ich finde die Pytons Scripte in Max auch komfortabler als irgend welche Code oder Blueprint geschichten in Unreal. Daher muss ich schauen dass ich flexibel bleibe.

    • Offizieller Beitrag

    Ich möchte das nun über ein Editor Widget versuchen wie das theoretisch funktioniert.


    1.Ich habe meine CSV Datenbank, Importiere das über das Struct als Float, String oder Text (What ever).

    2.Aber kann ich die Daten so direkt verwenden oder muss ich sie erst in einem Array oä. hinterlegen ? Brauche ich ein Array oder geht das auch ohne ?

    3.Wenn sie die CSV zur Laufzeit ändert, ändern sich dann auch die Daten im Editor Widget ?

  • zu 2.

    Du bekommst die Row Names als Array, über den Index greifst du auf die Daten zu.


    zu 3.

    DataTable können zur Laufzeit nur gelesen werden.

    Wenn man die Daten im Editor änderst, zB im DataTable BP, dann sollte es aktualisiert werden.


    Hier mal ein simples Beispiel wie man mit DataTables arbeitet.

    • Offizieller Beitrag

    Hab das jetzt durch ein Editor Widget gelöst dort sind auch Dropdown Menüs möglich und ich kann das Fenster erweitern.


    Das Einlesen geht, das Sortieren nach den Kategorien geht auch :thumbup:


    Nun würde ich gerne Materials mit einem Thumbnail und der Material Name darunter als Liste darstellen.


    Ich denke mal der beste weg um das thumbnail anzuzeigen, ist es, den Pfad aus der CSV Tabelle zu holen. Auch der Material Name kommt natürlich aus der Tabelle.


    Nach meinem Verständnis brauche ich nun ein Widget im Widget oder ?


    Das erste Widget besteht aus einem Image und einer Text Box das nun durch die Einträge der Tabelle im Editor Widget gezeichnet werden muss.



    So siehts bis jetzt aus, das 2te Dropdown habe ich erstmal nur testweise eingebaut und sollen durch Imagename und dem Bild ersetzt werden.



    Und So sieht meine Tabelle aus:


  • Die Editor Utility Widgets kannte ich noch gar nicht, super Sache.

    Nach meinem Verständnis brauche ich nun ein Widget im Widget oder ?

    Wenn ich dich richtig verstehe möchtest du für das ausgewählte Material ein Thumbnail zeigen?

    Du braucht im Widget nur ein Image dafür anlegen welches dann das passende Image bekommt.


    Das Target einfach mit dem Image verbinden.(In meinem Fall ist der Slot ein extra Widget mit dem Image das ich verändern möchte)

    • Offizieller Beitrag

    Es geht nicht nur um das anzeigen den Thrumnails


    Aber nochmal von vorne damit es keine Missverständnisse gibt.


    1.Ich habe ein Editor Widget gebaut das über eine Combobox verfügt, dort kann man nun zb Metall auswählen wo dann alle Metall Texturen angezeigt werden sollen.


    1. ist also das Editor Widget.


    2. Im Editor Widget sollen also nun ein zweites Widget angezeigt werden das besteht zb aus einer Image und einer Textbox wo das Thrumnail und der Name des Materials angezeigt werden soll.


    2. Ist also das Thrumbnail Widget das Dynamisch je nach Suchtreffer der Combobox erstellt wird.


    Ich dachte man kannd das lösen dass man das Trumpnail Widget als einzeiler erstellt nun dann dynamisch oft im Editor Widget generiert.


    Hier mal das Blueprint einfach auf Vollbild klicken:



    Nach meinem Verständnis muss ich die Treffer der CSV abfragen und dann genau so viele Thrumpnail Zeilen erstellen und dort dann jeweils die Inhalte reinladen.


    Hoffe du verstehst was ich meine vielleicht denke ich auch zu kompliziert.

    • Offizieller Beitrag

    Klar, so geht das auch. Ich habe das bei meinem Inventar Prototyp genauso gemacht.


    Das Inventar ist ein Widget und die Slots eine Instanz vom Slot-Widget welche jeweils angepasst werden.

    Hast du mir hierzu ein paar Ansätze nach was ich suchen muss ?

    Läuft das über ein Lustview, (UserListRntry) ich verstehe nicht man das verschwachteln muss.


    https://forums.unrealengine.co…iew-getting-started-in-bp


    Mein Problem ist, dass ich nur Tutorials finde wo statische Widget erstellt. Also zb ein Ritter WIdget wo ein Slot für kleiner, Waffen usw geschaffen.


    Ich muss das Widget erstellen, die Daten aus dem Struc auslesen und über eine Schleife im Edit Widget darstellen.

    Hier fehlt mir der Ansatz.

  • Ich benutze da eine Wrap Box, die sorgt automatisch dafür das die Widget angeordnet werden.


    "This widget arranges child widgets from left-to-right and widgets exceed that the Width, will be placed on the next line."


    Kombiniert mit einer Scroll Box kann man beliebig viele Elemente anzeigen.


    Das ganze wird einfach in einer Schleife aufgebaut.