Jump to content
Unity Insider Forum

Der Einsatz einer Colormap


reinerSCT

Recommended Posts

Hallo,

ich habe ziemliche Probleme zu verstehen, wofür eine Colormap in einem Terrain Shader zuständig ist.

 

Anfangs dachte ich noch die Colormap wär eine andere Bezeichnung für Splatmap, aber das ist anscheinend nicht der Fall.

 

Ich würde gerne mein Terrain in Blender machen. Weil ich das Gefühl habe, mehr Kontrolle über den Polycount zu haben, außerdem kann ich dann bequem das Terrain in Chunks unterteilen.

Die Splatmap würde ich auch in Blender erstellen, alles in Unity laden und mit nem Custom Terrain Shader(nicht selbst geschrieben :) ) steuern. Habe mir mal ein paar angeschaut und die Shader benötigen alle irgendwie eine Colormap und da beginnt mein Verständnisproblem.

Vielleicht kann mich jemand ein wenig aufklären.

 

grüsse

reinerSCT

Link zu diesem Kommentar
Auf anderen Seiten teilen

Terrain Shader ?

Colormap ?

 

Ich finde im Terrain Editor keine Colormap?

 

Ein Paar dinge übers Unity Terrain;

 

Das Unity Terrain ist kein Mesh es wird zwar im Unity Viewport als Mesh dargestellt aber in Wirklichkeit wird das Terrain ingame Tesslliert. Das Unity Terrain funktioniert also genau also ähnlich wie der tessellation Shader.

 

Deswegen benötigt das Unity Terrain eine Hightmap mit der das Terrain ingame gezeichnet wird.

 

Mit anderen worten der Polycount fürs Terrain keine Rolle.

Link zu diesem Kommentar
Auf anderen Seiten teilen

In diesem Tutorial http://www.bitsalive...rains-in-unity/ benutzt er mit diesem Shader http://forum.unity3d...eleased.146808/ unteranderem eine Colormap. Ich habe gerade in dem Shader Thread diese Zeile entdeckt

* 1 colormap which is used as basemap on far viewing distances and as underlay on close distances

Warum er das jetzt macht ist mir immer noch unklar.

 

Aber hast recht. Im Unity Standard Terrain Shader scheint keine Colormap verwendet zu werden.

Das heißt, man braucht grundsätlich erstmal nur eine Heightmap zum darstellen des Terrains und eine Splatmap um den Alphawert der Texturen festzulegen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du brauchst ne Hightmap damit ein Terrain performant funktioniert.

 

Diese Hightmap kannst du natürlich auch in Blender, Zbrush etc erstellen du müsstest dann eben die Hightmap Baken.

 

Die Splatmap definiert durch Ihre Farben wo welches Material hinkommt. Alles was auf der Splatmap Rot ist, wird vielleicht irgend wann mal zu stein.

 

Wenn du in Unity dein Terrain bemalst zeichnest du im grunde eine Splatmap. Fügst du im Unity Terrain Hügel oder Berge dazu dann zeichnest du eine Hightmap.

 

Das Problem allgemein bei Terrains ist das du ich glaube bei Unity eine Maximale 8k Textur verwenden kannst. Hättest du ein Terrain mit einer Größe von 8192 m * 8192m (8k) dann würde rein rechnerisch auf 1 qm ein Pixel kommen.

 

Das gilt für eine diffuse map aber auch für eine Splatmap.

 

Ein besserer Weg wäre, die über vertexpaint zu lösen dabei werden Vertexpunkte im Terrain Farbinformationen mitgegeben. Im Pronzip ist dies das selbe wie eine Splatmap mit dem Unterschied das es keine Rolle spielt wie groß dein Terrain ist.

 

Du maps dann keine 8k Textur auf dein Terrain sondern nutzt lauter Farbpunkte die sich sozusagen zu einer Splatmap zusammenfügen.

 

Hier mal ein Video zum technischen Verständnis:

 

Ich hab das selbst aber auch noch nicht getestet.

 

PS.: Vielleicht gibt es auch eine Möglichkeit eine Splatmap in vertexpaint Informationen umzurechnen. (zu Baken)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zum Glück habe ich VIEL mit Unitys Terrain Engine gemacht in letzter Zeit, deshalb kann ich erklären.

Im FirstPass-Shader hast du eine Zeile, die etwa so aussieht:

Dependency "BaseMapShader" = "Hidden/TerrainEngine/Splatmap/Standard-Base"

Wenn du dir Standard-Base raussuchst, wirst du feststellen, dass er so ziemlich Diffuse mit Standard Lighting Model entspricht.

 

Die Terrain-Engine benutzt den BaseMapShader tatsächlich dann, wenn die Kamera große Distanz zum Terrain hat. Die Colormap wird dabei aus der Splatmap und den Splat-Texturen generiert und als _MainTex in den BaseMapShader gefüttert.

 

Von daher ist die Colormap tatsächlich erst einmal nicht sichtbar, aber Unity baut so ein Ding und ein im FirstPass verlinkter Shader nutzt sie.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...