Elharter Geschrieben 15. August 2019 Melden Share Geschrieben 15. August 2019 Hallo, schaut euch mal die angehängte Textur an. Diese liegt vor. Defacto ein gewisser Rahmen an festgelegten Pixelfarben. In diesem Beispiel gibt es: - grün - hellgrau - dunkelgrau - beige/sandfarbe - rot/weiß - weiß Also bis hierher ja ziemlich einfach. Jetzt würde ich gerne eine Texturverbesserung vornehmen und alles was "grün" ist mit einer neuen Textur, die entsprechender hochwertiger nach Gras aussieht überblenden, bzw. überschreiben - zur Laufzeit. Nachdem die Kanten jedoch scharf bleiben sollen (um zb die Streckenabgrenzungen in weiß zu erhalten) stehe ich logisch ein wenig an. Habt ihr da eine Idee wie ich das angehen könnte? lg & danke Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 15. August 2019 Melden Share Geschrieben 15. August 2019 Also... grau und blassgrün und beige sind keine guten Farben dafür. Wenn du nämlich die Straße anschaust, dann besteht dessen Graustufen-Ton zu gleichen Teilen aus rot, grün und blau; den additiven Grundfarben. Wenn du das tust, was Unity's Terrain-Shader (als Beispiel für so genannte Splatmap-Shader) tut: Dann kannst du diese vier Kanäle stattdessen benutzen, um mit ihnen Texturen zu kodieren. Rot steht für Alphalt, grün für Gras, blau für Sand. Da Texturen noch einen vierten Kanal, den Alpha-Kanal haben, kannst du den noch für etwas anderes benutzen. So oder so brauchst du für dieses Vorhaben einen Shader, der fünf Texturen akzeptiert: Die Splatmap, also die Daten, wo welche andere Textur zu sehen ist, und eben die anderen vier Texturen, eine für jeden der vier Kanäle der Splatmap. Du machst dann einen UV-Lookup für jede der fünf Texturen auf jedem Pixel und interpolierst dann die Pixelwerte der vier Texturen in Abhängigkeit vom entsprechenden Wert des Kanals in der Splatmap. Ich könnte da noch spezifischer werden... aber entweder, du kannst das so umsetzen... oder, wenn nicht, solltest du dir ein paar Shadergrundlagen anschauen und ein bisschen mit denen warm werden. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 21. August 2019 Autor Melden Share Geschrieben 21. August 2019 mhm nun also der screenshot ist schon aus einem terrain das ich codiert in ein terrain/splatprototyp geladen habe.... pixel für pixel. Das funktioniert an sich so, wie ich das will. Am Ende ist diese 512x512 Textur jedoch dann "eine". Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 16. September 2019 Autor Melden Share Geschrieben 16. September 2019 Am 15.8.2019 um 17:47 schrieb Sascha: Also... grau und blassgrün und beige sind keine guten Farben dafür. Wenn du nämlich die Straße anschaust, dann besteht dessen Graustufen-Ton zu gleichen Teilen aus rot, grün und blau; den additiven Grundfarben. Wenn du das tust, was Unity's Terrain-Shader (als Beispiel für so genannte Splatmap-Shader) tut: Dann kannst du diese vier Kanäle stattdessen benutzen, um mit ihnen Texturen zu kodieren. Rot steht für Alphalt, grün für Gras, blau für Sand. Da Texturen noch einen vierten Kanal, den Alpha-Kanal haben, kannst du den noch für etwas anderes benutzen. So oder so brauchst du für dieses Vorhaben einen Shader, der fünf Texturen akzeptiert: Die Splatmap, also die Daten, wo welche andere Textur zu sehen ist, und eben die anderen vier Texturen, eine für jeden der vier Kanäle der Splatmap. Du machst dann einen UV-Lookup für jede der fünf Texturen auf jedem Pixel und interpolierst dann die Pixelwerte der vier Texturen in Abhängigkeit vom entsprechenden Wert des Kanals in der Splatmap. Ich könnte da noch spezifischer werden... aber entweder, du kannst das so umsetzen... oder, wenn nicht, solltest du dir ein paar Shadergrundlagen anschauen und ein bisschen mit denen warm werden. Danke für deine ausführliche Antwort. Ich glaube das schaffe ich jetzt so auf Anhieb nicht. Mein Zugang wäre eher auf Pixel-Ebene gewesen. Die Textur und die Farbe der Pixel kann ich eindeutig auslesen und zuordnen (Beton, Gras, Sand usw) da gibt es keinerlei Überschneidungen da die Farben eindeutig sind pro Pixel. Jetzt hab ich mehr an eine Art "virtuellen" Brush/Pinsel gedacht der Bereiche ausliest und mit einer echten, ordentlichen Textur überschreibt oder überlagert und die Randbereiche wie Kanten oder Linien entsprechend abschneidet. Oder ich zeichne die Textur nach Priorität....zb: 1. Wiese, überlagern mit neuer Texture 2. Sand Und am Ende zeichne ich die vorhandene Straße über alles drüber.... Mit Shade und Co habe ich bis dato nichts gemacht. lg Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 20. September 2019 Autor Melden Share Geschrieben 20. September 2019 mhhh.... *kopfgrübel* Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 20. September 2019 Melden Share Geschrieben 20. September 2019 Naja, Splatmap-Shader halt... Hier hast du ein Tutorial:https://catlikecoding.com/unity/tutorials/rendering/part-3/ Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.