Königsweg für Im-Export von 3DObjekten? (Textur u. Lightmap)


whynodd

Member
Joined
Sep 20, 2008
Messages
262
Hallöchen

Ich beziehe mich hiermit auf meinen Thread mit dem Rennspiel hier (Mockup-Screenshots und neueste Info über das Projekt siehe letzte Seite), da ich langsam wieder weitermachen möchte.
http://forum.gp2x.de/viewtopic.php?f=6&t=6307
Irgendwer darf mal in diesem Thread posten, dann hängt der nicht so öde im Nirvana der zweiten Seite herum :p (Meine Posts werden unglücklicherweise an meinen uralten drangehangen). *HintHint*: Die Mods dürfen den auch gerne in die Entwicklerecke schieben.

Eine Frage also an die Devs:

Ich arbeite mit Blender und suche ein passendes Exportformat für 3D-Objekte, welches mir Folgendes bietet:

- Einfaches Erstellen eines Importers möglich (z.B. wie bei obj)
- Mehrere UV-Layer (z.B. für Textur und Lightmap)
- Normalen natürlich
- Einige der üblichen Materialparameter, Farbe und so

Oder anders gefragt: Wie bekommt ihr mehrere UV-Layer in euer Spiel? Mein Hauptanliegen sind hier die in Blender gebakten Lightmaps und der dazugehörige UV-Layer zusätzlich zu einer normalen Farbtextur. Auf gebakte Beleuchtung möchte ich ungerne verzichten, denn sie würde die Grafikprogrammierung in meinem Spiel enorm vereinfachen (Einfacher Shader, der 2 Texturen zusammenmultipliziert, Extrabeleuchtung brauche ich dann überhaupt nicht)
Ich würde gerne beim obj+mtl-Format bleiben weil ich schon einen funktionierenden Loader habe und das Format simpel und nicht überladen ist, was sind meine Optionen? Oder sollte ich irgendeine Art der Echtzeitbeleuchtung auf der Pandora versuchen und grottige Performance in Kauf nehmen?

Wie sieht euer "Workflow" mit 3D-Objekten aus? Nehmt ihr eine irgendwo existierende library zum Laden und Darstellen? Fällt ja wohl eher flach bei der Pandora, da die üblichen libs wegen openGLES nicht funktionieren. Oder schonmal selbst was gebastelt?

Vielleicht bin ich auch etwas verloren, es kommt mir vor, dass ich so ziemlich der einzige bin, der ein "echtes" 3D-Spiel auf die Beine stellen möchte.

Zur Belustigung ein Mockup-Screen, der Grafikstil, den ich anpeile:
file.php
 
Hey,
also ich würde dir auf jeden Fall eine Engine empfehlen. Man müsste einfach mal gucken ob Ogre3d oder Irrlicht schon ne OpenGL ES 2.0 Unterstützung bietet. Erst mit ES 2.0 hat man ja erst die Unterstützung für Shader, die du ja benötigst.

Warum willst du eigentlich umbedingt Lightmaps nutzen? So ein Phong, Lambert Shader für Licht ist ja schnell geschrieben (Wenn man es schon einmal gemacht hat ;). Probleme wird es da mit Schatten geben, aber mit ner Engine ala Ogre3d braucht man sich da aber keine Sorgen machen.

Texturen kann (in ES 2.0 muss man sogar) man auch einfach per Shader auf das 3D Model pappen, vorrausgesetzt man hat die korrekten UV Koordinaten.

Ich hoffe ich rede nicht an dir vorbei, aber das war so dass was ich zu dem Thema schreiben kann ;)
 
JohnDavidson said:
Hey,
also ich würde dir auf jeden Fall eine Engine empfehlen. Man müsste einfach mal gucken ob Ogre3d oder Irrlicht schon ne OpenGL ES 2.0 Unterstützung bietet. Erst mit ES 2.0 hat man ja erst die Unterstützung für Shader, die du ja benötigst.
Das Problem ist nicht ES, die GameEngine oder das Zeichnen an sich. Die Shader bekomme ich auch so hin. Irrlicht oder Ogre, ist das nicht wie mit Kanonen auf Spatzen? Nicht falsch verstehen, ich erfinde gerne neue Räder.
JohnDavidson said:
Warum willst du eigentlich umbedingt Lightmaps nutzen? So ein Phong, Lambert Shader für Licht ist ja schnell geschrieben (Wenn man es schon einmal gemacht hat ;). Probleme wird es da mit Schatten geben, aber mit ner Engine ala Ogre3d braucht man sich da aber keine Sorgen machen.
Warum Lightmaps? Für die Schatten und vorberechnetes Ambient Occlusion. Mit der Beschaffenheit der Oberfläche (Glänzend oder diffus) hat das ja nix zu tun. Ich werde sowieso nur vollständig diffuse Oberflächen nehmen und deshalb kann ich die komplette Beleuchtung vorberechnen. Somit wird der Shader für alle Materialien nur 2 Texturen auf ein farbiges Dreieck draufmultiplizieren. Ich möchte die Rechenleistung nicht mit Phongshadern und Echtzeitschatten verbraten, sondern lieber irre viel Geometrie verwenden.
JohnDavidson said:
Texturen kann (in ES 2.0 muss man sogar) man auch einfach per Shader auf das 3D Model pappen, vorrausgesetzt man hat die korrekten UV Koordinaten.
Jetzt sind wir bei meinem Problem: Blender exportiert nur ein UV-Koordinatenset bei Verwendung des OBJ-Formats. So hätte ich die grandiose Auswahl zwischen den Koordinaten für eine Farbtextur ODER denen für die Lightmap. Beide zusammen bekomme ich nicht aus Blender heraus. Es sei denn, ich würde meine Szene gleich zweimal exportieren, einmal für Textur-UV und einmal für Lightmap-UV und beim Einladen in meinem Spiel schön wieder alles zuordnen - eine Frickellösung mit Redundanzcharakter.
JohnDavidson said:
Ich hoffe ich rede nicht an dir vorbei, aber das war so dass was ich zu dem Thema schreiben kann ;)
Ein Wenig hilft ein Wenig mehr als Nix, denn Nix ist zu wenig ;)
 
Jetzt sind wir bei meinem Problem: Blender exportiert nur ein UV-Koordinatenset bei Verwendung des OBJ-Formats. So hätte ich die grandiose Auswahl zwischen den Koordinaten für eine Farbtextur ODER denen für die Lightmap. Beide zusammen bekomme ich nicht aus Blender heraus. Es sei denn, ich würde meine Szene gleich zweimal exportieren, einmal für Textur-UV und einmal für Lightmap-UV und beim Einladen in meinem Spiel schön wieder alles zuordnen - eine Frickellösung mit Redundanzcharakter.

Kann man nicht einfach die Lightmap und das Ambient Occlusion direkt so auf die Textur addieren? z.B. in Photoshop? Oder kann Blender das nicht direkt? So hättest du nur die eine Textur. So haben das bei uns die 3D'ler im letzten Projekt in dem ich Tätig war beholfen. Und hätten beide Texturen nicht eh die gleichen Koordinaten?

Lightmaps sind in der Tat eine schöne und einfache Alternative zu Schatten, vor allem eine fixe. Shader im allgemeinen verbrauchen aber kaum Performance, da ja hier direkt die GPU am Output, also dem Ausgabe-Bild, manipuliert.

Ich kann leider nicht viel vom Model laden sagen, da ich eher der jenige war der die Shader entwickelt hat (C#, XNA und HLSL). Ich bekam die Model und Texturdaten direkt aus dem Speicher der Grafikkarte und hatte alle Koordinaten, die natürlich korrekt vor lagen.

Wegen der Engine. Ich weiß aus Erfahrung, dass es ne Sau-Arbeit wird ne eigene Engine zu basteln. Und da so Projekte durchaus sehr umfangreich sind, sollte man nicht nein zu einer vorhandenen Engine sagen, denn es bleibt noch genug Arbeit übrig ;)
 
JohnDavidson said:
Kann man nicht einfach die Lightmap und das Ambient Occlusion direkt so auf die Textur addieren? z.B. in Photoshop? Oder kann Blender das nicht direkt? So hättest du nur die eine Textur. So haben das bei uns die 3D'ler im letzten Projekt in dem ich Tätig war beholfen. Und hätten beide Texturen nicht eh die gleichen Koordinaten?
Klar, das geht bei Modellen wie z.B. einer Spielfigur. Sobald ich aber eine Textur wiederholend auf mehrere Dreiecke anwende, klappts nicht mehr. Da braucht man zwingend 2 Koordinatensets. In meinem Beispielscreenshot oben z.B. die Gitternetztextur, eine 32x32 große, weiße Textur mit schwarzem Rand. Die Lightmap ist viel größer, besteht aus AmbientOcclusion+Schatten und hat natürlich verschiedene UV-Koordinaten.
JohnDavidson said:
Wegen der Engine. Ich weiß aus Erfahrung, dass es ne Sau-Arbeit wird ne eigene Engine zu basteln. Und da so Projekte durchaus sehr umfangreich sind, sollte man nicht nein zu einer vorhandenen Engine sagen, denn es bleibt noch genug Arbeit übrig ;)
Die Architektur der Engine ist schon fast fertig. Da das Auto das einzige sich bewegende Objekt sein wird, brauche ich keine gewaltige Engine drumherum. Gut, ich habe keine Erfahrung mit verfügbaren GameEngines, habe nur einmal Irrlicht zum Spaß runtergeladen und es nichtmal kompiliert bekommen. Das riesige Drumherum hat mich sehr abgeschreckt und würde mich eher aufhalten und einschränken.
 
Whynodd said:
Klar, das geht bei Modellen wie z.B. einer Spielfigur. Sobald ich aber eine Textur wiederholend auf mehrere Dreiecke anwende, klappts nicht mehr. Da braucht man zwingend 2 Koordinatensets. In meinem Beispielscreenshot oben z.B. die Gitternetztextur, eine 32x32 große, weiße Textur mit schwarzem Rand. Die Lightmap ist viel größer, besteht aus AmbientOcclusion+Schatten und hat natürlich verschiedene UV-Koordinaten.

Du hast also eine Fläche wie zum Beispiel das Terrain und eine Textur die sich beliebig oft wiederholt? Die Lightmap hat aber keine Wiederholung?

Man könnte doch dann einfach im Shader die UV Koordinaten der Lightmap durch die Anzahl der Wiederholungen der Textur teilen? Ich hatte mal so ein ähnliches Problem, weiß aber nicht ob es dir helfen wird ;)
 
JohnDavidson said:
Du hast also eine Fläche wie zum Beispiel das Terrain und eine Textur die sich beliebig oft wiederholt? Die Lightmap hat aber keine Wiederholung?

Man könnte doch dann einfach im Shader die UV Koordinaten der Lightmap durch die Anzahl der Wiederholungen der Textur teilen? Ich hatte mal so ein ähnliches Problem, weiß aber nicht ob es dir helfen wird ;)

Schon, irgendwie... Hmm, beim Terrain (beige Farbe im Bild) ginge das. Bei dem anderen Zeugs hauts nicht hin. Wäre zuviel Gewurstel, alleine weil Flächen unterschiedlich groß sind und deswegen entsprechend viel oder wenig Platz in der Lightmap benötigen. Ich komme wohl nicht um ein anderes Exportformat herum, schade um meinen OBJ-Importer. Es wäre so schön, sämtliche UV-Mapping-Möglichkeiten von Blender voll auszuschöpfen. Oder ich modifiziere den OBJ-Exporter von Blender, sodass er mehrere UV-Sets auf einmal exportiert und entsprechend in die OBJ reinschreibt. Decisions Decisions...
 
Wenn du mit Blender arbeitest, kannst du dir ja mal Bake im den Render Buttons anschauen, damit könntst du dir deine Texturen in ein Bild packen. Das Problem ist dann aber das du entweder einen hohen Qualitätsverlust hast, oder sehr große Texturen(=>hoher Speicherverbrauch). Kleines OffTopic, Irrlicht bietet ja OpenGL ES, aber ist das auch gut auf der Pandora lauffähig?
 
Back
Top