Wie die meisten Webseiten nutzen wir Cookies. Nähere Informationen dazu, wie wir mit diesen Cookies umgehen, können Sie in unseren Datenschutzbestimmungen lesen.   Einverstanden
 
 

3D Forum > Blender - Farben zufällig zuweisen

Blender - Farben zufällig zuweisen

04.05.2016 20:07
 
GarzecMi. 04 Mai. 2016, 20:07 Uhr
Ich habe in Blender eine Sphere ein bisschen umgestaltet und will sie als Spielfläche in Unity benutzen. Farbtechnisch dachte ich erstmal an 8 Grüntöne und 2 Brauntöne. Gibt es eine Möglichkeit diese insgesamt 10 Materialien zufällig auf die Kugel verteilen zu lassen? Händisch Farben zuzuweisen, da bin ich dann doch nicht so geübt darin das ordentlich aussehen zu lassen. Auf der Sphere befinden sich noch keine Modelle, daher wollte ich erstmal nur den Boden bemalen.

Als Beispiel nehme ich mal das hier:

http://forum.unity3d.com/attachments/wip11-jpg.100575/

Wäre cool wenn jemand weiß ob und wie es geht smile
 
bluedxca93Mi. 04 Mai. 2016, 20:49 Uhr
Die Frage ist sehr unspezifisch.

10 Materialien für eine sphere hmm.Vermute Vertexfarben sind gemeint von der Beschreibung her.

Ist auch ein Textur bitmap ausreichend?

Dann ist dein Problem nur noch ein normales png Bild.

Wie man auf ein wild durcheinander gewürfeltes Bild mit 10 Farben kommen könnte :
kompliziert:
Jeder x beliebige normaler Zufallsgenerator gibt Zahlen von 1-10 aus. Davor noch die Koordinatenposition schreiben , Zahl jeweils Farbe Zuordnen und in imagemagick importieren.
andere Ansatz auch nicht einfach:
Foto nehmen -> fourier forward transformation -> auschneiden. ein Teil der vier Ausschnitte > Graustufen -> auf 10 Farben begrenzen -> indizierte Farben in Farbpalette ändern.

Einfacher und optisch ansprechender ist es i. eine Beispieltextur im 2 d Programm einzufärben und auf die 10 Farben zu indizieren .

Unwrappen oder sphere projektion am 3d Objekt anwenden und als Textur das 2d Bild importieren.

Theoretisch können auch Texturbilder des Materials auf die Vertexfarben ungefär projeziert werden, sieht je nach Program sehr unscharf aus und du hast mehr als 10 Farben aps Vertexfarben. Das Modell sollte dafür lowpoly sein.highpoly bräuchte man aber um die ganzen Details abzubilden und deshalb werden oft Texturen verwendet.
 
TilesMi. 04 Mai. 2016, 21:14 Uhr
Hi Garzek,

Wie wäre es denn mit dem Planet Texture Generator? Der funzt gleich in Unity, und ist auch noch kostenlos smile

http://www.assetstore.unity3d.com/en/#!/content/51995

Ansonsten könntest du eine 2D Textur bauen, die mit zufälligen Farben füllen, und deine Kugel damit texturieren.

Oder du verpasst deiner Kugel mittels dem Blender Random Vertex Color Script verschiedene Vertexfarben. Die müsstest du dann allerdings eventuell erst noch auf eine Textur backen wenn du mit einer Textur arbeiten willst. Unity kann zur Not auch Vertexfarben.

http://raw.githubusercontent.com/varkenvarken/blenderaddons/master/randomvertexcolors.py

Für ein Terrain, auch auf einer Kugel, bietet sich allerdings eine Splatmaplösung an. Dafür brauchst du einen speziellen Shader mit dem man mittels einer sogenannten Splatmap verschiedene Texturen mixen kann. Gras mit Stein und Erde zum Beispiel. Ich meine mich zu erinnern dass das Unify Wiki so einen Shader hat. Allerdings nur für drei oder vier Texturen. Und die Splatmap müsstest du dann doch von Hand machen.

Beziehungsweise da gibts einige Kniffe die sich nicht so auf die Schnelle erklären lassen. Grob gesagt könntest du eine Graustufenmap als Basis nehmen, dein Terrain ( in dem Fall die Kugel) damit displacen (das Bild wird in dem Fall zur Displacementmap), und dann über die Grauwerte der Displacementmap die entsprechenden Farben für die Höhe verwenden. Kann man in Gimp zurechttrixen.

LG

Tiles
 
GarzecMi. 04 Mai. 2016, 22:29 Uhr
Hey vielen Dank für eure Antworten. Das mit der 2D Grafik und dem indizieren hab ich mal öfter in Videos gesehen. Hab ja erst gestern mit Grafiken und Blender angefangen, hab also wenig bis gar keine Ahnung

Wie mache ich das mit der Indizierung? Oder nach was kann ich googlen?
 
bluedxca93Do. 05 Mai. 2016, 06:38 Uhr
Hallo,
erstmal nach Tiles erstem link .

Falls du es mit irgendeiner Textur versuchen möchtest benötigst du auch 2D Programme.

Für Windows gibt es zb. Paint.Net, Gimp als kostenlose Programme.Falls viel Hauptspeicher vorhanden ist gibt es auch noch das Malprogramm krita. Kommerzielle Programme gibt es natürlich auch.

Zum indizieren (Reduzieren der Farben) benutze ich meistens gimp.
Danach die 10 Farben noch auf den gewünshten Farbton ändern.( das geht in dem exotischrn Programm gafx2 sehr schnell)

Es gibt auch prozedurale Ansätze in Blender und unity.Tiles hat das mit splatmap gemeint.
Je nach Einstellung brauchst du dort aber auch Texturbilder.

https://m.youtube.com/watch?v=yc0b5GcYl3U



Erklärt wie man eine Kugel mit einem Bild texturiert. Das Problem ist allerdings die Auflösung der Textur.Da ist wohl eine splatmap oder blender node Lösung besser.




 
TilesDo. 05 Mai. 2016, 08:46 Uhr
Hui, ganz bei Null? Da hast du ja noch einiges vor ^^

Zum Thema indizieren, das ändert das Bildformat. Das ist nicht was du haben willst. Du willst einige wenige Farben. Das geht am einfachsten über das Posterisieren Tool. Farben -> Posterisieren

Ein Bild mit zufälliger Farbverteilung bekommst du über Filter -> Render -> Wolken -> Plasma

Das passt aber so dann in der Regel nicht auf dein Terrain. Du willst ja dass im Tal zum Beispiel Gras ist, und die Berge aus Stein. Und da kommst du eigentlich fast nicht drum rum das von Hand zu malen. Das wäre zumindest die einfachste und schnellste Methode. Etwas komplizierter wäre eine Technik über die Graustufenmap, falls selbige vorhanden.

Bevor wir hier jetzt weiter machen, was genau willst du tun? Wie hast du denn die Kugel erstellt? Hat die Kugel ein UV Mapping? Ist die Kugel texturiert? Oder willst du in Unity doch Vertexfarben verwenden? Hast du sie über eine Graustufentextur mittels Displacement erzeugt, sprich existiert schon eine Graustufentextur? Hat die überhaupt Berge und Täler, oder ist das doch nur eine glatte Kugel?

Das Problem ist halt, es gibt hier einige mögliche Ansätze. Und es nutzt dir ja nix wenn wir hier Ansatz A erklären und du mit Ansatz B bastelst smile

Es gibt auch prozedurale Ansätze in Blender und unity.Tiles hat das mit splatmap gemeint.


Narp smile

Texture splatting ist eine Technik mit der man verschiedene Texturen mixen kann. Das geht über einen speziellen Shader. Das hat aber nichts mit prozedural zu tun. Prozedural heisst computererzeugt. Du brauchst aber Texturen für diese Technik. Der Shader mixt die nur zusammen. Deswegen ist diese Methode nicht prozedural. Natürlich könnte man da jetzt noch prozedurale Texturen einhängen. Aber das ist dann eben wieder was ganz anderes. Texture splatting an sich ist erst mal nicht prozedural.

In der Regel ist die sogenannte Splatmap (ein einfaches Bild) in den drei Grundfarben Rot, Grün und Blau. Und bei Rot zeigt es dann zum Beispiel deine Gras Textur an, bei Blau deine Steintextur, etc. Und in den Übergängen wird zwischen Rot und Blau wird dann das Gras mit der Steintextur gemixt. Bei der Farbe Lila hättest du 50% Rot und 50% Blau, die zwei Texturen würden sich also zu 50% mischen.

Das Unity Terrainsystem verwendet intern diese Technik. Da malst du allerdings gleich direkt mit deinen Texturen drauf rum, deswegen siehst du da erst mal nichts von einer Splatmap. Intern ist da allerdings schon was zu sehen. Die Splatmaps sind mit etwas Suche im Inspektor zu finden. Allerdings ist da schwer ranzukommen, das ist fest ins Terrainsystem integriert. Und ist auch noch in einem ogaddigen Format eingebaut. Das Unity Terrain System versteckt diese Farben in der Transparenz. Und es ist in einem Format mit dem Gimp nicht klar kommt, da braucht es Photoshop für. Und an den Shader kommt man gar nicht ran. Und das funktioniert eben nur fürs Terrain, und nicht für eine Kugelgeometrie. Deswegen der Hinweis dass du da einen eigenen Shader verwenden müsstest.

Aber ich gehe mal davon aus dass du noch eine Weile brauchen wirst bis du wirklich an Unity Shadern rumflicken kannst. Also vergessen wir den Teil am Besten erst mal wieder ^^

 
bluedxca93Do. 05 Mai. 2016, 10:26 Uhr
Danke für die Erklärung Tiles, als Anfänger kenn ich mich in 3d noch nicht hundertprozentig aus.
in einem Punkt muss ich aber teilweise wiedersprechen:
Indizieren reduziert nur den Farbraum und Bild -> Modus kann man indexed und rgb, und graustufen in gimp auswählen. Bilder mit einer selbst erstellten Palette indizieren und dann nach rgb zurück umformen ist häufig qualitativ wesentlich besser als die posterisieren Option und hat auf das Format definitiv den gleichen Effekt.
Möglich dass das in Photoshop anders ist.

Denke ,das es für den Threadersteller uninteressant ist, aber was für ein Bildformat ist das?.( Bin jetzt nur mal kurz neugierig geworden, da ich schon relativ viele Bildformate wies und Gimp ( und falls nicht image/graphiscmagick) fast alle unterstützt.)

Vllt. kann der Threadersteller ja erstmal ein paar 2d texturen malen und diese Zufallsbilder in 2d erstellen und überlegen ob die Kugel ungewrappt und texturiert,mit vertexfarben bemalt oder später mit splat mapping gestaltet werden soll. Das Beispielbild sah teilweise wie Vertexfarben aus.
 
TilesDo. 05 Mai. 2016, 11:03 Uhr
Och, ich weiss auch nicht alles. Da gibts sogar noch verflucht viel das ich nicht weiss. Und das wird jeden Tag mehr smile

Mit dem indizieren veränderst du aber das Format. Man kann natürlich auch ein indiziertes Bild als Png speichern, aber es ist dann eben nicht mehr Png RGB mit 24 Bit (oder besser gesagt RGBA mit 32 Bit. Von wegen transparenz), sondern PNG indiziert mit nur noch 8 Bit. Mit RGB hast du 16 Millionen Farben. Mit indiziert maximal 256.

Klar kann man das Problem der Farbreduzierung auch über eine Indexierung lösen. Und dann auch gleich zurückkonvertieren. Der Grund weshalb es imho aber in diesem Falle geschickter ist übers Posterisieren zu reduzieren dürfte auf der Hand liegen. Hier kann man recht einfach die Farbe nachträglich manipulieren. Und neue Farben dazumachen. Und weiche Übergänge zwischen den Farben gehen so auch. Ohne dauerndes hin und her konvertieren. Ist ja noch 16 Millionen Farben.

Letztenendes ist erlaubt was funktioniert.

Das Format nach dem du frägst ist OpenExr wenn ich mich noch recht erinnere. Ich habe Unity im Moment nicht mehr installiert.

Und ja, im Moment fehlen noch zu viele Infos um wirklich handgreiflich helfen zu können. Wie gesagt gibts da einige Wege die zum Ziel führen können smile
 
bluedxca93Do. 05 Mai. 2016, 17:08 Uhr
test test. just for fun.
nur um mal zu schauen wie eine uv map wäre. 2024x2024
Eindeutig zu unscharf.
Verrtexfarben oder splitmapping würde ich dem threadersteller empfehlen.

 
 
TilationFr. 06 Mai. 2016, 06:47 Uhr
wie wäre das?
 
 
 

 


 
 
© 3D-Ring - deutsche 3D Software Community, Archiv 2001 - 2006