Wie man stellenweise liest, soll 3DS ja noch unbedingt das supertolle Format sein. Nun habe ich bei meinem aktuellen Projekt auch Schwierigkeiten und wollte fragen ob das typische und formatbedingte, oder von mir verursachte Fehler sind. Im Renderer von 3DS sieht alles ok aus, aber nach dem Laden mit Noeskas Loader habe ich offene Flächen, also scheinbar defekte Oberflächennormalen.
3DS-Renderer:
Delphi-Projekt mit 3DS-Loader von Noeska
Ist das ein bekanntes Problem? Kann man es mit 3DS vermeiden? Sollte man lieber ein anderes Format wählen?
Dank und Gruß,
DNA
_________________ Heute code ich, morgen debug ich, und übermorgen caste ich die Königin auf int.
http://www.2ndmoon.de
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Das .3DS-Format speichert keine Normalen, sondern sog. "Smoothing groups" in die man Vertices einteilen kann. Anhand dieser Information muss man dann sehr umständlich die Normalen zurückrechnen, und da das auch nicht grade auschweifend dokumentiert ist ist das recht schwierig. Noeskas Loader versucht die Normalen wenn ich recht entsinne manuell zu errechnen, evtl. rührt dein fehlerhaft angezeigtes Dreieck also daher.
Generall würde ich aber vom .3DS-Format Abstand nehmen. Nicht nur wegen der fehlenden Normaleninformation, sondern auch wegen der anderen (hauptsächlich altersbedingten) Probleme wie 8.3-Dateinamen, max. 65k Vertices pro Mesh, nur eine Texturkoordinate, nur rudimentäre Keyframe-Animationen usw. Ich würde also entweder ein modernes Format wählen, z.B. .X im ASCII-Format (lässt sich leicht laden) oder über MaxScript in ein eigenes Format exportieren.
Danke für die umfangreiche und ernüchternde Info. Das ist natürlich schlecht für das 3DS-Format. Da ich schon weiter im Forum suchte, bin ich auf das Obj-Format unt MatRenos Loader gestossen. Der sieht gut aus. Leider gibt dahin auch wieder diverse Tücken. Exportiere ich direkt aus 3D-Studio ins obj-Format, dann kommt der Loader damit nicht zurecht, weil diverse StrToFloat-Konvertierungen scheitern, weil der String leer ist. Also scheint 3D-Studio da irgendwas nicht korrekt zu schrieben, oder der Loader erwartet was anderes. (Das zu umgehen ist zwar möglich, aber wer weiß wie das Ergebnis aussieht). Wenn ich das 3DS über Wings3D in ein obj-File konvertiere dann funktioniert dass, allerdings sieht das Ergebnis hinterher so aus:
Modell:
Egebnis1 in MatRenos Loader:
Ergebnis2 in MatRenos Loader (Ursache für den Effekt ist in Bild 1 ersichtlich):
Kann man das beheben? Verschwindet der Effekt nach dem Texturieren?
Der Grund warum ich mit 3D-Studio arbeite ist, dass man dort wenigsten halbwegs vernünftige boolesche Operationen durchführen kann. Im Wings geht es nur eingeschränkt und rudimentär, im Blender ist es ein absoluter Krampf, welcher zudem noch zweifelhafte Ergebnisse liefert (offene Flächen und solche Späße).
Wie modelliert ihr? Freihand in Blender?
Grüße, DNA
_________________ Heute code ich, morgen debug ich, und übermorgen caste ich die Königin auf int.
http://www.2ndmoon.de
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Auf den Bildern 2 und 3 ist gut zu erkennen dass die Normalen größtenteils falsch sind, und da die Tesselation an den von dir angesprochenen Stellen recht hoch ist sieht man das da recht stark. Entweder liegts am Loader, der die Normalen falsch lädt bzw. falsch berechnet oder am Exporter, der die Normalen falsch exportiert.
Ich selbst benutze das 3D Studio zum modellieren, exportiere aber nach .X (ASCII) bzw. benutze (Projekt "W") ein eigenes binäres Format. Mit MaxScript z.B. kann man ohne große Umwege über ein SDK o.Ä. einen rudimentären Exporter schreiben mit dem man dann nur die Infos exportiert die man braucht. MaxScript ist C-ähnlich und einen Exporter sowie einen Loader für ein binäres Format dass die grundlegensten Sachen beinhaltet hat man schnell geschrieben.
Eigenes Format. Hmm. Sowas wollte ich mir eigentlich sparen. Die Koordinaten sind da eine, die Texturpositionen sind aber ein Punkt um den ich mich bitte nicht kümmern möchte. Ich glaube ich werde noch ein wenig mit offiziellen Tools und Formaten probieren, ehe ich wirklich noch ein eigenes Format in die Welt setze.
Grüße, DNA
_________________ Heute code ich, morgen debug ich, und übermorgen caste ich die Königin auf int.
http://www.2ndmoon.de
Registriert: Mo Jan 31, 2005 11:02 Beiträge: 432 Wohnort: Rheinlandpfalz
Hi DNA,
versuch mal über blender dein objekt zu exportieren:
d.h. lade dein 3ds in blender und exportiere ins obj format.
Oder versuch mal andere objektschnittstellen zwischen blender und 3d studio.
Evtl musst du in Blender die Normalen neuberechnen:
Objekt anwählen, "Tab" drücken (wechselt in Editmode), "a" drücken (wählt alle vertices an), "STRG + n" drücken, "Tab"
Alternativ kann ich dir nur raten mit blender zu modeln, geht in der tat nach etwas eingewöhnung schneller als in cinema usw,
eigene erfahrung.
Danke für die vielen Tips. Probiere ich sofort aus. Es war ja einiges wichtiges dabei:
MatReno hat geschrieben:
versuch mal über blender dein objekt zu exportieren: d.h. lade dein 3ds in blender und exportiere ins obj format. Oder versuch mal andere objektschnittstellen zwischen blender und 3d studio.
Das wollte ich die ganze Zeit probieren, leider ist Blender beim wähler der Import- und Exportfunktion für 3DS mit eine Fehler in der Nähe der Pythonskripte abgerüsselt. Diese Problem werde ich beseitigen. //Edit: Python war nicht installiert. Nun läuft es.
MatReno hat geschrieben:
Evtl musst du in Blender die Normalen neuberechnen: Objekt anwählen, "Tab" drücken (wechselt in Editmode), "a" drücken (wählt alle vertices an), "STRG + n" drücken, "Tab"
Genau sowas habe ich gesucht. Das ist bezogen auf mein Problem so etwas wie "solve my problems". Zumindest klingt es so. Ich werde es probieren.
MatReno hat geschrieben:
Alternativ kann ich dir nur raten mit blender zu modeln, geht in der tat nach etwas eingewöhnung schneller als in cinema usw, eigene erfahrung.
Danke für die Meinung. Leider bin ich im Moment noch etweas hin- und hergerissen.
- Mit 3D-Studio kann man (die für mich sehr wichtigen) logischen Operationen sauber durchführen.
- Mit Wings3D kann man meiner Meinung nach sehr eleganz einzelne Flächen und Vertices nachbearbeiten. Im Handling finde ich Wings ziemlich nah an dem was ich mag.
- Mit Blender komme ich halt auch grob zurecht. Es scheint mir mächtig genug zu sein, wenn da nicht die Sache mit den boolschen Zeugs wäre. Wahrscheinlich kenne ich das Tool nur zu wenig um die resultierenden offenen Flächen schnell zu fixen, oder andere Wege als boolsche Operationen zu beschreiten.
Aber generell finde ich die ganze Angelegenheit schon recht sackig. Primär versuche ich eine Software zu entwicklen, während ich massen Zeit verbrate um Unzulänglichkeiten von Werkzeugen und Formaten zu umschiffen. Diese oft Tausende Taler teuren Tools und jahrelang entwickelten Formate haben primär nur ein ein Ziel, die eindeutige Abbildung der Modelle und daran scheitern diese. Man kann mit den Werkzeugen maximal seine Szene modellieren, durch den interenen Renderer schieben und die resultierende Bitmap speichern. Das ist doch ein Armutszeugnis.
Slowing down,
DNA
_________________ Heute code ich, morgen debug ich, und übermorgen caste ich die Königin auf int.
http://www.2ndmoon.de
Registriert: Mo Jan 31, 2005 11:02 Beiträge: 432 Wohnort: Rheinlandpfalz
Mir ist noch eingefallen, dass du ja auch dein 'kaputtes' obj-File (das mit wings exportierte) mit blender importieren und wieder exportieren kannst. Natürlich Normalen neu berechnen. Sollte auch funktionieren.
Und was Blender und logische Operatoren angeht: die kann blender wunderbar, näht auch die faces wieder zusammen Ist vielleicht etwas schwieriger zu finden, aber funktionieren sollte es zumindest genauso.
Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.