Hallo zusammen,
die Texturierung meiner Triebwagenhalle hat mir echte Kopfschmerzen bereitet. Die Seitenflächen sind wahnsinnig groß und ich konnte keine wirklich passenden Texturen finden. Alles was halbwegs meine gewünschten Farben hatte, war nur als Kachel verfügbar und selbst riesige Texturen in anderen Farben waren nicht groß genug, um einen realistischen Maßstab zu erhalten. Ein Ziegelstein sollte nunmal nicht einen Meter lang sein
Also mußte ich kacheln. Hier, das ist eine seamless Kachel, die perfekt meine Vorlage imitiert:
Also hab ich gekachelt. Und es sah furchtbar aus. Wirklich furchtbar:
Die Kacheln sind zwar seamless, aber Schmutz und Schattierungen wiederholen sich nunmal und da ich besonders große Flächen habe, mußte ich besonders viele Kacheln verwenden. Ich hab es mit Tricks versucht, wie Kacheln spiegeln, drehen und versetzen, um etwas Zufälligkeit reinzubringen, aber das sah noch schlimmer aus. Dann hab ich versucht, es mit zusätzlichem Schmutz zu maskieren, aber auch das brachte nicht den gewünschten Effekt. Es sah so unecht aus, daß ich mein Projekt fast eingestellt hätte.
Aber dann hatte ich eine Idee: Warum nicht selbst mauern?
Also nahm ich die Kachel und schnitt Ziegelsteine aus. Alle Ziegelsteine - außer die Halbsteine. Ich bekam insgesamt 52 Steine aus dieser Textur in all den unterschiedlichen Farben.
Dann schrieb ich eine kleine Console Application in .NET und baute mir die Steine zu einer Mauer zusammen. Dabei wird per Zufallsgenerator einer der 52 Steine ausgewählt, eingesetzt und der nächste Stein per Zufall ausgewählt, eingesetzt usw. Das Resultat sah so aus:
Besser, oder?
Nun hab ich das Tool so geschrieben, daß es sehr flexibel ist und für alles mögliche eingesetzt werden kann. Folgende Features sind drin:
- Kacheln können versetzt werden - so kann man Fliesen machen, wie ein Schachbrett oder um 50% versetzt, wie eine Ziegelmauer, oder jeden beliebigen anderen Versatz (in Prozent)
- Die Kacheln werden normalisiert - d.h. wenn die einzelnen Ziegelstein-Bilder (oder was auch immer Ihr als Kacheln verwenden wollt) nicht alle die selbe Größe haben, werden sie einzeln auf eine vorher festgelegte einheitliche Größe skaliert
- Die Dicke der Fugen kann in Pixeln angegeben werden
- Die Farbe der Fugen kann in RGB mit Alphakanal angegeben werden - ich hab meine Fugen transparent gemacht, so daß ich in Gimp die Fugenfarbe jederzeit per Hintergrundbild ändern kann
- Die Anahl der "Spalten und Zeilen" muß vorher angegeben werden, also wieviele Kacheln in X- und Y-Richtung erzeugt werden sollen
- Der Speicherort der einzelnen Kachelgrafiken und der Ausgabeort der fertigen Textur müssen separat angegeben werden
Was fehlt eigentlich?
Eine GUI! Für meine Zwecke hat eine Konsolenanwendung gereicht. Alle zu konfigurierenden Werte hab ich in die app.config getan un dann meine Textur auf der Shell generiert. Aber so kann man das natürlich niemandem anbieten.
Warum mache ich die GUI nicht selbst?
Ich bin nicht gut im UI-Design, ich mag kein WindowsForms, ich hab wenig Erfahrung mit WPF und eine Webanwendung wäre wünschenswert, aber ich hab keinen Hoster für .NET. Außerdem hat das Tool seinen Zweck erfüllt: ich hab meine Textur und die Triebwagenhalle ist fertig, also warum noch mehr Zeit investieren?
Aber ich hab alle Logik in einer DLL. Man kann also statt meiner Konsolenanwendung einfach eine Fensteranwendung - oder eine Website - obendraufsetzen.
Hat jemand Lust und Interesse?
Wenn ja, kann ich die DLL hier teilen und eine knappe Schnittstellendokumentation reinsetzen. Also wenn jemand von Euch eine GUI machen möchte, laß uns zusammenarbeiten!
[line][/line]
Short version in English:
I made a texture generator, that combines tiles in a matrix. The first image above is my original seamless tile. The second image is a brickwall created by repeating this tile - it shows how bad it looks due to the repeating pattern. The third image shows a generated wall texture composed of 52 single bricks, which I cut out of the seamless tile and which I combined randomly to generate a wall of any arbitrary size. My texture generator is simply taking any random tile from a folder, normalizes it to a specified size and combines it to a matrix of a specified size to get rid of the pattern and make a truly random texture. All I made is a DLL and a console application with app.config which did the job for me.
Now if someone could create a GUI to replace the console application, everyone could use this tool for their own textures.