Jump to content
Unity Insider Forum
Sign in to follow this  
Elharter

SplatPrototyp-Textur verbessern/verändern zur Laufzeit

Recommended Posts

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

 

japan.png

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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".

 

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...