Nur Teil einer Tetur in einem Material ändern

  • Hallo zusammen.


    Ich brauche mal wieder einen kleinen Denkanstoß. Und zwar habe ich folgendes Problem, das mal wieder schwierig zu beschreiben ist, aber ich versuche es einfach mal.


    Nehmen wir an ich habe einen Würfel. Für diesen Würfel habe ich jetzt eine UV-Map und Textur in der Größe, sagen wir mal 4096x4096. Soweit so gut, die Textur legt sich um den Würfel und alles ist schick.


    Nun will ich aber nur eine Würfelseite in der Instanz ändern bzw. eventuell auch animieren. Beim Animieren hätte ich jetzt schonmal das Problem, das alle Seiten des Würfels animiert sind, weil ja die komplette Textur animiert wird. Ich brauche aber nur den Ausschnitt einer Seite. Genau dasselbe Problem habe ich natürlich auch, wenn ich nur eine Seite das Muster ändern will. Ich könnte jetzt natürlich anhand der UV-Map eine Textur 4096x4096 Textur erstellen in der nur der Teil von der Seite ein anderes Muster beinhaltet. Das finde ich aber ziemlich überflüssig. Schöner wäre es, wenn ich einfach eine Textur nehmen könnte, am besten als Layer und dann halt nur für die eine betreffende Seite.


    Ich dachte zuerst daran es wie beim Vertexpaintig zu lösen, also per Farbkanäle entsprechenden Bereich darzustellen. Aber das ist ja quatsch, weil dann bräuchte ich ja noch immer die 4096x4096 Textur.

    • Offizieller Beitrag

    Ich weiß nicht wie du dir das Vorstellst?


    1.Du ballerst nach dem Import dein Material da drauf das ist von mir aus auch eine Instanz.

    2.Wenn du das Material nun aber veränderst, veränderst du ja das gesamte Material.

    3.Was dann machen könntest wäre wohl eine neue Instanz erstellen und diese dann verändern.


    Wie kyodai schon sagte gibt sicherlich 100 Wege wie man das machen könntest. Um zu wissen was der beste Weg ist, wäre es wichtig zu wissen was du letztlich vorhast.

  • Normalerweise erstelle ich ein Grundmaterial, mit zum Beispiel einem TextureSampleParameter2D. Davon erstelle ich eine Instanz und in dieser Instanz packe ich die gewünschte Textur rein. Und an der Stelle wäre es halt schön, wenn er das für nur eine Seite machen würde.


    Weil eigentlich handelt es sich da immer nur um ein Symbol, das ich ändern möchte. Da wäre es ja blödsinnig immer die gesamte Textur mit der UV-Mapeinteilung zu ändern.

  • Man könnte das Ganze z.B. über mehrere UV Channel lösen.



    Standartmäßig wird die UV0 benutzt und wenn sich das Bild ändern soll auf UV1 umgeschaltet.


    Das umschalten selbst dürfte über Blueprints funktionieren.


    Standartmäßig wird ja UV1 für die Lightmaps benutzt, aber das lässt sich ja bei Bedarf auch ändern.


    Sleepy: das hier dürfte auch für dich ganz interessant sein, zwecks automatisch generierten UVs und so.

  • So löse ich es ja normalerweise. Ich habe halt nur gehofft, weil das ja so verschwenderisch große Texturen sind, denn jedes mal muss ich ja die gesamte Textur in 4096x4096 erstellen, das ich ein wenig sparsamer sein könnte indem ich das neue Symbol einfach in, keine Ahnung, 512x512 zeichnen könnte, um halt nur den Teil der nötig ist zu speichern und auszuwechseln. Das würde nämlich auch das Zeichnen erleichtern. Auch wenn es später mal um Erweiterungen geht.


    Klar, ich mache das bisher so das ich eben halt die UV-Map Grundfarbe habe, 4096x4096 und dann zeichne ich halt in der Größe einer Würfelseite das Symbol und kopiere es dann in die Grundfarbe an der Stelle von der Würfelseite wo es auftauchen soll. Nur ich habe wie gesagt gehofft das ich mir das Kopieren und Positionieren halt sparen könnte.


    Weil ich muss das ja auch mindestens noch für die Normalmap machen, wo ich dann die gesamte Textur jedes mal umwandeln muss. Auch da wäre dann halt ein Teilbereich eine große Arbeitsersparnis.

  • Aber auch hier muss ich ja die komplette UV-Map austauschen und eben halt auch entsprechend groß erstellen, oder nicht? Weil so ähnlich habe ich es ja gerade erexperimentiert. Also jetzt nicht so wie in deine Abbildungen, aber so ähnlich funktioniert mein Ansatz halt auch.


    Ich experimentiere mal weiter. Wenn ich das Lösen kann habe ich vielleicht endlich mal ein Thema für ein anständiges Tutorial :D

  • Ich glaube du hast da was missverstanden.

    In meinem Vorschlag kannst du eine einziges Material verwenden und durch den Wechsel des UV channel wird ein anderer Bereich auf der selben Textur

    verwendet.


    Es wird sozusagen von dem einen UV layout auf das andere umgeschaltet.


    Höchstwahrscheinlich würde ich die ganze Sache aber sowieso anders lösen, indem ich der animierten Seite ihr eigenes Material zuweise.

    Da ist man einfach flexibler und hat mehr Möglichkeiten.


    Je nachdem wie das Ganze letztendlich aussehen soll, könnte man eher noch an anderer Stelle einsparen.


    Muss es denn z.B. unbedingt eine 4096x4096 Textur sein und auch noch mit mehreren Texturemaps?


    Wenn mehrere Würfelseiten praktisch gleich sind, können diese auch die selbe Textur haben.


    Wenn sich z.B. nur Text ändern soll könnte man das auch über eine Farbmaske machen:



    Je nach gewünschtem Text wird dann entweder der Rot Grün oder Blau Kanal aktiviert.


    Am besten du zeigst mal was genau du vor hast, denn dann gibt es evtl. noch ganz andere Ansätze die da möglich wären.