[Projekt] CuHe - Mesh erstellen aus einem Bild

Hier könnt ihr euch selbst, eure Homepage, euren Entwicklerstammtisch, Termine oder eure Projekte vorstellen.
Forumsregeln
Bitte Präfixe benutzen. Das Präfix "[Projekt]" bewirkt die Aufnahme von Bildern aus den Beiträgen des Themenerstellers in den Showroom. Alle Bilder aus dem Thema Showroom erscheinen ebenfalls im Showroom auf der Frontpage. Es werden nur Bilder berücksichtigt, die entweder mit dem attachement- oder dem img-BBCode im Beitrag angezeigt werden.

Die Bildersammelfunktion muss manuell ausgeführt werden, die URL dazu und weitere Details zum Showroom sind hier zu finden.

This forum is primarily intended for German-language video game developers. Please don't post promotional information targeted at end users.
Antworten
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

[Projekt] CuHe - Mesh erstellen aus einem Bild

Beitrag von Tiles »

Inzwischen Final. Siehe hier: http://www.reinerstilesets.de/programme/2014-cuhe/

--------------------------------------------------------------------------------------------------------------

Um nicht ganz aus der Übung zu kommen habe ich mich ein wenig mit der Mesherstellung in Unity beschäftigt. Nichts grosses also, eher was Nettes Kleines. Eine Fingerübung.

Als ich die Terrainmeshes für Alister erstellt habe war ich immer eine ganze Weile damit beschäftigt die Terrains passend zurechtzuextrudieren um diese geraden Abhänge zu erstellen. Diesen Job nimmt mir nun CuHe ab. Alles was ich brauche ist eine Heightmap. Und ein Klick konvertiert das Bild dann in ein Mesh. Das spart Zeit.

Was ist CuHe? CuHe ist ein One Trick Tool. Es erstellt aus einem Bild sowas wie ein Heightmap Mesh. Aber nicht für jeden Pixel ein Vertice. Sondern für jeden Pixel einen Würfel. Also sowas wie eine würfelige Heightmap. Daher der Name. CUbic HEightmap. Anmerkung: Graustufenbilder sind natürlich ideal. Es werden aber auch farbige Bilder genommen. Gearbeitet wird intern mit dem roten Channel.

Ich dachte mir dass das Projekt auch für den einen oder anderen interessant sein könnte. Deswegen habe ich entschieden das Projekt Open Source zu machen. Die Scripts sind in Unity’s Javascript geschrieben. Sollten sich aber auch leicht nach C# konvertieren lassen. So viel Code ist da gar nicht dran.

Gebrauch:
Gebrauch: Klicke auf den Load Image Button und lade dein gewünschtes Bild. Derzeit sind nur Png und Jpeg möglich.

Wenn benötigt kannst du die Heightvalue einstellen. Neuen Wert in die Editbox eingeben und auf Apply klicken.

Als Nächstes einfach auf den Convert Image to 3D Mesh klicken und warten bis alles fertig erstellt ist. Unten links seht ihr wieviele Tiles das Programm noch abzuarbeiten hat.

Als letzten Schritt klickst du nun auf den Save as Obj Button und speicherst dein 3D Objekt.

Obacht mit der Grösse des Bildes! Ein 64×64 grosses Bild erstellt im ungünstigsten Fall schon ein Mesh mit 50.000 Vertices. Ein Bild mit 256×256 erstellt mühelos ein Mesh mit über 600.000 Vertices …

Bekannte Limits:
- Es gibt noch keinen Filebrowser. Die Pfade muss man selber tippen.
- Das Tool arbeitet intern mit Bildteilen in der Grösse von 32×32 Pixeln. Das erstellte Mesh wird somit auch ein Vielfaches von 32 haben.
- Das Mesh sollte unbedingt nachbearbeitet werden. Unity erstellt Tris, und für jedes Tri eigene Vertices. Mit Remove Doubles in z.B. Blender lässt sich da also so einiges einsparen.
- Die UI ist aus gutem Grunde so scheusslich. Die ist schlicht noch nicht entwickelt. Das ist Programmers Art um die Features zum Funktionieren zu kriegen.

To Do:

- Grafische UI – Das muss bis Unity 4.6 warten da ich das mit der neuen GUI Lösung machen will.
- Optional weil wohl doch was Grösseres: File Browser – Auch dafür benötige ich die neue GUI Lösung.

Shot:

Bild
Zuletzt geändert von Tiles am 27.11.2014, 13:36, insgesamt 4-mal geändert.
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
AyJayKay
Beiträge: 88
Registriert: 01.05.2012, 20:13

Re: [Projekt] CuHe - Mesh erstellen aus einem Bild

Beitrag von AyJayKay »

Hui, ich bin erst durch deine Hilfe über das GUI von 4.6 gestolpert. Ich hatte immer mal das Verlangen sowas selber zu bauen... Naja, die sind schneller :D
Tiles hat geschrieben:Unity erstellt Tris, und für jedes Tri eigene Vertices. Mit Remove Doubles in z.B. Blender lässt sich da also so einiges einsparen.
Unabhängig davon hab ich mir die Frage gestellt, ob man die ganzen Quadrate nicht mit großeb Flächen performanter kriegt. Die ganze Sache erinnert mich an Voxel und Minecraft.
Was man nicht alles ausprobieren will, wenn die Zeit da wäre :D
"Es gibt 10 Arten von Menschen, die die Binär verstehen und die die es nicht tun."
"Hier gibts Code zum Auskommentieren. Wo ist der Praktikant? Hmpf, so müssen sich Lehrer beim Kontrollieren von Arbeiten fühlen..."
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: [Projekt] CuHe - Mesh erstellen aus einem Bild

Beitrag von Spiele Programmierer »

Ich speichere gleich nur die Höhenwerte. (Als 32 Bit Integers) Also praktisch direkt Heightmap.
Die X & Z Koordinate berechne ich "on the fly" im Vertexshader. Das spart ⅔ der Bandbreite. Außerdem sind meine 256² Grid-Blöcke, das ich verwende aus einem Triangle Strip zusammengesetzt, welches auf einfache Weise für den Post Transform Cache optimiert ist.
So kann man den Speicher optimal ausnutzen.

Das nur mal so als Anregung. Würde mich auch wundern, wenn man das genau so überhaupt in Unity implementieren könnte.
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: [Projekt] CuHe - Mesh erstellen aus einem Bild

Beitrag von Tiles »

Danke für die Anregungen :)

Hmm, ich wüsste ehrlich gesagt nicht wie sich dein Weg in Unity realisieren lassen könnte. Mit den Shadern habe ich mich noch gar nicht auseinandergesetzt. Aber jopp, nachdem das Ganze dann auf der GPU berechnet werden würde wäre es wohl deutlich performanter :)

Ich könnte natürlich gleich vom Bild ins Obj File berechnen. Da bräuchte es dann noch nicht mal einen Shader. Was dann allerdings fehlt ist die grafische Darstellung. Und weil ich die eh brauche kann ich auch den kleinen Umweg gehen und beim Speichern einfach das erstellte Mesh auslesen. Das gibt zwar das grössere Mesh weil dann Tris dabei rauskommen, und weil für jedes Tri eben ein eigener Verticessatz geschrieben wird. Aber das sind zwei Klicks in Blender.
Unabhängig davon hab ich mir die Frage gestellt, ob man die ganzen Quadrate nicht mit großeb Flächen performanter kriegt.
Unity kann halt intern nur Tris. Es gibt zwar eine Möglichkeit das Ganze als Quad darzustellen, das ist aber laut Manual sogar unperformanter.
Die ganze Sache erinnert mich an Voxel und Minecraft.
Jopp, das Prinzip geht in die Richtung. Nur dass ich eben hier ein 2D Array verwende, ein Bild eben :)
Hui, ich bin erst durch deine Hilfe über das GUI von 4.6 gestolpert. Ich hatte immer mal das Verlangen sowas selber zu bauen... Naja, die sind schneller :D
Haha, der war gut, ich warte seit drei Jahren darauf dass die Jungs endlich mal in die Puschen kommen :D
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
AyJayKay
Beiträge: 88
Registriert: 01.05.2012, 20:13

Re: [Projekt] CuHe - Mesh erstellen aus einem Bild

Beitrag von AyJayKay »

Tiles hat geschrieben:Haha, der war gut, ich warte seit drei Jahren darauf dass die Jungs endlich mal in die Puschen kommen :D
So? Warum hast du dich nicht selbst an sowas gesetzt? Also ich meine 3 Jahre... Da wärs doch dann schon lohnenswert. Mit Unity's Raycast- und Layersystem lässt sich das doch relativ gut implementieren. Die Camera Klasse hat auch alles um die Projektion auf dem Bildschirm von 3D genau und gewünscht an die Viewplane anzupassen.
Tiles hat geschrieben:Unity kann halt intern nur Tris.
Ja gut, aber zwei davon geben dann ja quasi ein Quad. Ich meine nur, dass eine gerade Fläche doch die Unterteilungen die man gerendert nicht sieht, nicht braucht. Die UV Koordinaten kann man in Unity auch setzen.
Sieht denn das Terrain immer so relativ gerade aus? Vielleicht hab ich nicht ganz verstanden wofür du das Mesh am Ende brauchst, ich fand nur es hat zu viele Vertices.
"Es gibt 10 Arten von Menschen, die die Binär verstehen und die die es nicht tun."
"Hier gibts Code zum Auskommentieren. Wo ist der Praktikant? Hmpf, so müssen sich Lehrer beim Kontrollieren von Arbeiten fühlen..."
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: [Projekt] CuHe - Mesh erstellen aus einem Bild

Beitrag von Tiles »

Ou, da gibt es so viel was ich gerne bauen würde. Eine eigene GUI Lösung hat da aber eigentlich nie dazu gehört, hehe. Ich verwende NGui. Hat zwar seinerzeit nen Hunni gekostet, aber das war es mir wert :)

Fieserweise gabs die alte Version einige Zeit später für Lau. Aber so ist das eben. Gibts übrigens immer noch: http://forum.unity3d.com/threads/ngui-f ... on.124032/
Ja gut, aber zwei davon geben dann ja quasi ein Quad. Ich meine nur, dass eine gerade Fläche doch die Unterteilungen die man gerendert nicht sieht, nicht braucht. Die UV Koordinaten kann man in Unity auch setzen.
Ja schon, aber Unity rechnet eben intern in Tris. Das Ergebnis dann als Quad darzustellen ist zwar möglich, und bei Tesselation für DX 11 wohl auch nötig wenn ich die Manual richtig interpretiere, aber das kostet ja wieder Performance, weils dann erst von Tris auf Quads umgerechnet werden muss. Siehe hier: http://docs.unity3d.com/ScriptReference ... Quads.html
Sieht denn das Terrain immer so relativ gerade aus? Vielleicht hab ich nicht ganz verstanden wofür du das Mesh am Ende brauchst, ich fand nur es hat zu viele Vertices.
Das ist nur ein Zwischenschritt. Deswegen ist die Verticeszahl erst mal nicht so wichtig. Und auch die Tris stören nicht weiter. Das Ergebnis wird nach Blender exportiert, in Quads umgewandelt, die Doubles removed. Dann werden die ganzen kantigen Hänge ein wenig begradigt, dafür werden einige Ecken gelöscht. Und das Ganze wird dann eben nach und nach in ein Levelmesh umgearbeitet. Sowas wie im Anhang. Das ist das Goat Valley Terrain Mesh aus Alister.

Optimal wäre natürlich wenn mir mein Tool gleich so ein Mesh ausspucken würde. Da müsste ich aber wohl noch ne ganze Schippe Know How und Arbeitszeit drauflegen. Im Moment bin ich happy dass es mir schon mal diesen einen Arbeitsschritt mit dem raussweepen abnimmt :)
Dateianhänge
levelmesh.jpg
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
AyJayKay
Beiträge: 88
Registriert: 01.05.2012, 20:13

Re: [Projekt] CuHe - Mesh erstellen aus einem Bild

Beitrag von AyJayKay »

Ah verstehe, cool :)
Ich hab für wirklich ernsthafte Tesselation à la NVidia keine ausreichende Projektgrößen und fand halt Tris immer optimal, zumal laut einfacher Geometrie mit Dreiecken ja quasi alles möglich ist.
"Es gibt 10 Arten von Menschen, die die Binär verstehen und die die es nicht tun."
"Hier gibts Code zum Auskommentieren. Wo ist der Praktikant? Hmpf, so müssen sich Lehrer beim Kontrollieren von Arbeiten fühlen..."
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: [Projekt] CuHe - Mesh erstellen aus einem Bild

Beitrag von Tiles »

Tris gibt aber Poles beim unterteilen. Kann zu unschönem Shading und Knittereffekten führen. Zumindest ist das beim 3D Content erstellen so :)
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: [Projekt] CuHe - Mesh erstellen aus einem Bild

Beitrag von Tiles »

Neue Version. Siehe erste Post. Die neue Version hat nun nen File Browser.

So richtig glücklich bin ich mit der Methode aber nicht. Sie hat zu viele Pferdefüsse. Es funktioniert. Aber das ist auch schon das Beste was sich drüber sagen lässt. Hätte nicht gedacht dass das so ein Gschiess zamgibt. Der Filebrowser ist das haarigste am ganzen Programm.

Die derzeitige Filebrowsermethode verwendet die Systems.Windows.Forms.dll aus dem Unity Mono Ordner. Die Original Systems.Windows.Forms.dll crasht Unity. Und die Unity Version der DLL ist Featurereduziert. Sie gibt beim Kompilieren auch eine Warnung aus dass die Methode nicht unterstützt ist, und man mit einigen Fehlfunktionen rechnen soll. Wie gesagt, es tut trotzdem. Das ist also nicht das Problem.

Aber ich kriege in diesem kastrierten Dialog keine Thumbnails angezeigt. Was blöd ist weil ich ja nach Bildern suche die ich laden kann. Es zeigt auch nur eine englische Version des Filebrowsers. Und Mono treibt noch seine Spässe indem es eine mwf_config in den Eigene Dateien Ordner schreibt.

Also werde ich höchstwahrscheinlich diesen File Browser wieder ausbauen und einen anderen einbauen. Über GetOpenFilename. Da war jemand so nett mir ein funktionierendes Beispiel zu spendieren. Muss ich nur noch verstehen und für meine Zwecke umbauen ^^
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: [Projekt] CuHe - Mesh erstellen aus einem Bild

Beitrag von Tiles »

Und done. Siehe hier: http://www.reinerstilesets.de/programme/2014-cuhe/

Der Filebrowser funktioniert nun über die GetOpenFileDialog Methode, und zeigt nun auch Thumbnails an.

Unity hatte sich noch mal Zeit gelassen mit dem 4.6 Release, und mein Tool verwendet ja die neue UI. Gestern kam endlich Unity 4.6 raus, und somit ist das Projekt abgeschlossen.

CuHe steht nun unter der MIT Lizenz. Neben der Exe gibt es somit auch das gesamte Projektfile. Da kann man sich auch anschauen wie die neue Unity UI funktioniert. Und es gibt noch mal ein spezielles Projektfile in dem nur der Filebrowser drin ist. Das ist ja ein ganz besonderes Dama in Unity.
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Antworten