Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

09.11.2010, 16:59

10 MB *.x-Datei braucht 30 Sekunden zum Laden!?

Hallo zusammen!

Mein erstes Programm, was eine 3D-Modelldatei lädt und anzeigt ist ansich recht nett geworden. Die Modelldatei ist eine 10 MB große DirectX-Datei (Endung .x). Sie enthält diesen Affenkopf, den man in Blender einfügen kann. Vor dem Export habe ich noch in Blender den Subsurf Modifier auf den Affen angewendet, undzwar mit der Catmull-Clark Methode auf Level 4, um den Affen zu glätten.
So beim Export kommen dann 10 MB zusammen, die in die .x-Datei gespeichert werden.
Und mein Programm (was übrigens mit der Irrlicht-Engine arbeitet) braucht ca 30 Sekunden um dieses Modell zu laden. Das ist doch sehr viel oder? Ich meine moderne Spiele laden doch wesentlich größere Datenmengen in der selben oder noch weniger Zeit.
Ich kann doch nicht, wenn ich mein erstes größeres Projekt starte einige Minuten warten, bis 100 MB an Daten geladen sind oder?

Meine Frage: Mach ich beim Glätten des Modells irgendwas falsch? Geht das nicht auch Platzsparender? Oder braucht das DirectX-Format allgemein viel Ladezeit? Oder gibt es vielleicht eine Möglichkeit das Modell erst im Prgramm zu glätten?


lg Paul

2

09.11.2010, 17:05

Ein mal Subsurf reicht voll und ganz beim Affenkopf!
Du solltest natürlich auch Smooth Shading aktivieren, da reichen dann auch wenige Vertices.
stɪl traɪ tuː θɪŋk ˈpɒzətɪv

3

09.11.2010, 17:15


Du solltest natürlich auch Smooth Shading aktivieren, da reichen dann auch wenige Vertices.
Was genau ist das? Ich hab mich mit solchen Techniken noch so gut wie nicth beschäftigt.

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

4

09.11.2010, 18:08

Die Beleuchtung wird normalerweise anhand der normalen berechnet. Eine normale steht normalerweise senkrecht auf den flächen. In dem Fall brauchst du dann aber sehr viele kleine Flächen um runde flächen zu simulieren. Besser ist es dann einfach die normalen zu verändern, und zwar so, dass sie senkrecht auf der runden fläche stehen würden, wenn es sie denn gäbe. Danach interpoliert man dann (entweder die farbe->gouraud shading, oder die normalen->phong shading).

In blender kenn ich mich nicht wirklich gut aus, aber ich glaub im materials fenster gibts einen button "set smooth", wenn ich das richtig in erinnerung habe. der passt die normalen dann entsprechend an, dass es rund aussieht.

5

09.11.2010, 18:35

Okay den SetSmooth Button hab ich gefunden. Allerdings gibt es ja noch weit komplexere Modelle, als den Affen. Zum Beispiel habe ich eben mal mit makehuman einen Mensch erstellt, in Blender importiert, KEIN Subsurf angewandt sondern nur SetSmooth gedrückt. Schönes Ergebnis... allerdings ist die exportierte .x-Datei auch wieder 6 MB groß. Grundsätzlich eine kleine Datei, aber wenn ich ein Spiel habe, wo 100 oder mehr MB an Daten geladen werden müssen kann das bei meiner bisher erzielten Ladegeschwindigkeit auch nicht ganz das wahre sein. Es muss also irgendeine Möglichkeit geben, die Daten wesentlich kleiner zu exportieren oder sie eben schneller zu laden.

Da fällt mir noch ein Problem ein: ich wollte mal probieren, aus Blender andere Typen wie zum Beispiel 3ds zu exportieren. Da hab ich ne Meldung bekommen, dass das nur geht, wenn Python installiert ist. Also hab ich Python runtergeladen und installiert, aber Blender erkennt die Installation nicht, das heißt ich kann immer noch kein 3ds exportieren.

lg Paul

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

6

09.11.2010, 18:41

http://de.wikibooks.org/wiki/Blender_Dok…thon_in_Blender

Da steht wie es geht, was da nicht steht, ist dass es eine 2.6.x version sein muss.

7

09.11.2010, 18:45

Hmmm, ich dachte ich nehm einfach mal die höchste Version von Python... 3.1.2.

dann brauch ich wohl 2.6.x

8

09.11.2010, 21:33

Hmmm seltsam.... Ich hab eben eine .x - Datei von einem Mensch erstellt (ca. 6 MB groß)
Diese Datei habe ich 18 mal kopiert und alle Dateien einzeln in Irrlicht als Modell geladen. Seltsamerweise lädt mein Programm die diese über 100 MB an Daten in wenigen Sekunden. Naja wenn's so bleibt, ist es ja toll. Ich muss dann nur noch schauen, wie die Modelle dann am Ende mit Textur, vernünftiger Beleuchtung, Shader und was ich nicht noch alles lernen muss - aussehen, und ob ich nicht doch einen einzigen Subsurf brauch... ich probiere einfach mal eben, wie lange das dauern würde mit einem Subsurf....

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

9

10.11.2010, 08:23

Subdivision erhöht aber auch massiv den Polycount Deines Modells - das musst Du beachten, sonst belastet Du die Grafikkarte unnötig.

3DEngines laden 3D-Daten aus solchen Zwischenformaten wie .x eigentlich nur einmal, führen dann üblicherweise noch eine Menge Vorbereitungsschritte darauf aus und speichern das Endergebnis dann in einem eigenen Binärformat. Daraus kann die Engine dann sehr schnell laden. Ich bin recht sicher, dass Irrlicht auch ein eigenes Format hat, aus dem das Laden deutlich schneller geht.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

10

10.11.2010, 23:36

Man würde vermutlich Subsurf eher innerhalb eines Modellers benutzen, um ein Highpoly Modell zu erstellen, aus dem man dann Normalmaps für das lowpoly Ingame Modell generieren kann.
Der Polycount beeinflusst eigentlich nur die Silhouette, die FÜllung kriegt man heutzutage mit Shadern schon so gut hin, dass man den Utnerschied zwischen Highpoly und Lowpoly+Shader eigentlich nur im direkten Vergleich sieht.
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige