Seite 1 von 2

[Projekt] Open Asset Import Library

Verfasst: 19.03.2009, 17:33
von Aramis
Einleitung
Die Open Asset Import Library, kurz 'Assimp', ist eine generische und portable Importbibliothek, die den Großteil aller gängigen 3D-Formate liest und in eine einheitliche Ausgabestruktur überführt. Assimp ist Open Source (BSD-Lizenz) und darf kostenfrei genutzt werden, selbst in kommerziellen Projekten. Die lib ist speziell auf die Belange von Spieleentwicklern zugeschnitten und liefert Modelldaten, die nahezu direkt für das Echtzeitrendering via OpenGL oder Direct3D zu gebrauchen sind.

Team
Kernteam:
Thomas Schulze (Schrompf)
Kim Kulling (Kimmi)
Alexander Gessler (Aramis)

Portierung/Sprachbindings:
Matthias Gubisch (rave3d)
Sebastian Hempel (EyDu)
Alois Zoitl

Ehemals:
Rainer Schmidt (Guru)

Sowie viele weitere ...

Features
  • Unterstützung für nahezu alle verbreiteten 3D-Modellformate, insgesamt über 20
  • Portable, plattformunabhängige Codebasis in standardkonformem C++
  • Bindings für eine Vielzahl anderer Sprachen verfügbar bzw. in Entwicklung
  • Flexible Konfiguration, sowohl zur Laufzeit als auch zur Kompilationszeit
  • Postprocessing pipeline für typische Nachbearbeitungs- und Optimierungsschritte
  • Szenengraphbasierte Ausgabedatenstruktur
  • Weitestmöglicher Erhalt von Modellstruktur und Metainformationen
  • Import von Bones und Weights sowie skeletaler Animationen
  • Unterstützung für Kameras und Lichtquellen
  • Komplexes Materialsystem mit Unterstützung für Multilayer-Materialien und Bumpmaps/Specularmaps o.ä.
  • Windows-basierter Modellviewer, AssimpView
Zu den von Assimp unterstützten 3D-Formaten zählen u.a.:
  • 3D Studio R3/4 (*.3ds;*.ase)
  • Wavefront Object (*.obj)
  • DirectX (*.x)
  • LightWave/Modo (*.lwo,*.lws;*.lxo)
  • Collada (*.dae)
  • Doom 3/Quake 4 (*.md5mesh;*.md5anim;*.md5camera)
  • Quake I-III (*.mdl;*.md2;*.md3)
  • 3D-Gamestudio (*.mdl;*.hmp)
  • AC3D (*.ac)
  • Biovision Motion Capture (*.bvh)
  • Blitz3D (*.b3d)
Eine (halbwegs) vollständige Liste findet sich hier.

Mögliche Nachbearbeitungsschritte sind u.a:
  • Vertexcacheoptimierung
  • Optimieren des Indexbuffers
  • Berechnung von Normalen und Tangenten
  • Entfernen unreferenzierter Daten
  • Zusammenführung redundanter Materialien
  • Kollabieren des Szenengraphs, Transformation aller Vertices in das WCS
  • Triangulation von Polygonen mit mehr als 3 Punkten
  • Sortierung von Meshes nach Typ der enthaltenen Primitiven (z.B. Dreiecke, Linien, Punkte)
  • Suche nach instanzierten Meshes
  • Entfernen invalider, durch Exportfehler entstandener Daten (z.B. genullter Normalen)
Screenshots
aus AssimpView.
BildBildBild

BildBildBild

Bild

Bild

BildBild

Alle gezeigten 3D-Modelle stehen unter dem Copyright ihrer jeweiligen Besitzer.

Links
Hompepage
Sourceforge.net-Projektseite
Quellcode

Support
Für Fragen, Bugeports und Feedback steht unsere Mailingliste, assimp-discussions, zur Verfügung. Dazu gibt es auch noch unser englischsprachiges Supportforum. Das ZFX ist und bleibt aber die primäre Anlaufstelle für User aus dem deutschen Sprachraum, also zögert nicht hier eure Assimpspezifischen Fragen zu stellen :-)

Feedback
Wir freuen uns über Feedback jeglicher Art, gerne auch destruktiv :-)

Das Assimp-Team

Re: [Projekt] Open Asset Import Library

Verfasst: 07.04.2009, 22:05
von starvinmarvin
Genial!

Bin durch Zufall auf euer Projekt gestoßen, habe es mir sofort genauer angeguckt und Assimp in mein Projekt implementiert. Extreme Zeitersparnis für mich! Macht weiter so, danke!

Dennoch eine Frage: Kann es sein, dass aiProcess_ConvertToLeftHanded die Texture Koordinaten nicht mitkonvertiert, oder mach ich da n Fehler?

Re: [Projekt] Open Asset Import Library

Verfasst: 07.04.2009, 22:25
von Aramis
Hallo, willkommen im Forum und danke für die freundlichen Worte :-)
Dennoch eine Frage: Kann es sein, dass aiProcess_ConvertToLeftHanded die Texture Koordinaten nicht mitkonvertiert, oder mach ich da n Fehler?
Hm ... an sich schon, wenn ich mich nicht irre. Allerdings hat sich gerade an den vom aiProcess_ConvertToLeftHanded-Flag betroffenen Stellen in der letzten Zeit eine ganze Menge geändert. Genau genommen sind es mittlerweile 3 einzelne Flags. Dreieckswindungsrichtung, UV-Koordinatensystem und Modellkoordinatensystem sind damit voneinander getrennt einstellbar. aiProcess_ConvertToLeftHanded existiert in der aktuellen Revision bloß noch aus Kompatibilitätsgründen und ist als

Code: Alles auswählen

#define aiProcess_ConvertToLeftHanded ( \
	aiProcess_MakeLeftHanded     | \
	aiProcess_FlipUVs            | \
	aiProcess_FlipWindingOrder   | \
	0 ) 
definiert. Ich würde dir also raten, falls du das noch nicht getan hast, einfach mal den aktuellsten Stand via Subversion auszuchecken und auszuprobieren ob sich was geändert hat :-)

- Alex

Re: [Projekt] Open Asset Import Library

Verfasst: 15.04.2009, 21:11
von Anz
Ich bin endlich einmal dazu gekommen die Assimp Anbindung an meine Engine zu realisieren.Innerhalb kurzer Zeit konnte ich bereits Meshes und Texturen darstellen, war super einfach und dafür schon mal ein Dankeschön an euch :D.

Mir sind noch zwei Dinge aufgefallen. Es steht zwar überall dass Assimp nur Boost benötigt, allerdings konnte ich ohne irrXML nicht kompilieren und musste diese nach installieren. Ist Assimp von irrXML abhängig oder kann man diese per Flag oder ähnlich abschalten? Fand dazu nichts in der Doku.

aiMaterial find ich etwas kompliziert umgesetzt mit dem Key/Value Zeugs. Könnte man da nicht wenigstens die Methodennamen etwas ausdrucksstärker machen? Nutzlich wäre auch eine Verlinkung zur Key Auflistung im Header File. Bisschen mehr Text in der Beschreibung hätte auch nicht geschadet :D

Im alten Forum habe ich mal gehört, dass ihr mit CMake das Builden vereinfachen wollt. Wie weit seit ihr damit? Ich könnte falls interesse besteht aushelfen.

Danke nochmal für die tolle Library :D

Re: [Projekt] Open Asset Import Library

Verfasst: 15.04.2009, 22:58
von Aramis
Hi,
Ist Assimp von irrXML abhängig oder kann man diese per Flag oder ähnlich abschalten? Fand dazu nichts in der Doku.
Ja, IrrXML kommt in den IRRMESH und Collada-Parsern zum Einsatz. Es ist allerdings nicht direkt eine Abhängigkeit weil wir es direkt im Repos mit drinnen haben, und zwar im ./contrib/IrrXML-Verzeichnis.
aiMaterial find ich etwas kompliziert umgesetzt mit dem Key/Value Zeugs. Könnte man da nicht wenigstens die Methodennamen etwas ausdrucksstärker machen? Nutzlich wäre auch eine Verlinkung zur Key Auflistung im Header File. Bisschen mehr Text in der Beschreibung hätte auch nicht geschadet
Danke für die Rückmeldung, du bestätigst damit einen Eindruck den ich schon seit längeren habe :-)

Ich weiß auch nicht ob ich es heute nicht vielleicht doch anders lösen würde .. key/value hat aber auch eine ganze Menge Vorteile. Ändern lässt es sich nicht mehr, beziehungsweise hab ich keine Lust 50 KLOC abhängigen Code teilweise komplett umzuschreiben. Die Dokumentation ist hingegen in der Tat eher unzureichend. Ich bin einfach noch nicht dazu gekommen das ganze Materialkonzept in einem sauberen und verständlichen Text zusammenzufassen - genau das fehlt nämlich neben all den Einzeltextchen.

Alex

Re: [Projekt] Open Asset Import Library

Verfasst: 22.04.2009, 19:47
von Ingrater
Ich versuche momentan mit der aktuellsten Svn Version von Assimp ein Collada file mit 2 uv channels zu laden. Leider ohne erfolg. Ich habe 1 File mit 5 Mehshes von denen 4 1nen UV Channel haben und das 5. zwei. Und 1 File mit einem Mesh das 2 uv channels hat. Beim ersten File wird nur der 1. UV Channel geladen. Beim 2. File wird keiner der beiden UV-Channels geladen. Beide Files wurden (nicht von mir) mit dem 3dmax exporter erstellt der auf der offiziellen collada homepage gelistet ist. Ich kann euch leider nur das 2. File zu verfügung stellen.

Re: [Projekt] Open Asset Import Library

Verfasst: 22.04.2009, 20:49
von Aramis
Bist du dir absolut sicher dass die UVs auch in das Collada-File exportiert wurden? Ich sehe hier bloß einen UVChannel. Der allerdings hat 3 Komponenten pro Koordinate.

Code: Alles auswählen

<triangles material="ColorMaterial" count="12">
          <input semantic="VERTEX" source="#geom-Quader01-vertices" offset="0"/>
          <input semantic="NORMAL" source="#geom-Quader01-normals" offset="1"/>
          <input semantic="TEXCOORD" source="#geom-Quader01-map-channel2" offset="2" set="2"/>
          <p>...</p>
</triangles>
 

Re: [Projekt] Open Asset Import Library

Verfasst: 22.04.2009, 22:28
von Ingrater
Ups, ich hab ausversehen die falsche Datei hochgeladen. Kann jetzt auch das 2. File zur verfügung stellen. Solang ihr davon keine Screenshots macht und ins i-net stellt is alles ok.

Re: [Projekt] Open Asset Import Library

Verfasst: 22.04.2009, 22:35
von Krishty
Ingrater hat geschrieben:Solang ihr davon keine Screenshots macht und ins i-net stellt is alles ok.
Wenn es vertraulich ist, schick es besser per PM – hier kann sich schließlich jeder anmelden und das dann einfach so runterladen.

Re: [Projekt] Open Asset Import Library

Verfasst: 22.04.2009, 23:26
von Ingrater
Irgendwie hab ichs grad mit falsche dateien hochladen ...
vergesst das tt_ ... file in dem gfx.zip. Das war mit dem falschen exporter

Edit:
2. Texturkoordinaten werden nicht geladen. Hab einen patch geschrieben
ColladaParser.cpp, Function: ReadInputChannel, Zeile: 1803:

Code: Alles auswählen

  // read set if texture coordinates
  if(channel.mType == IT_Texcoord){
    int attrSet = TestAttribute("set");
    if(attrSet > -1){
      channel.mIndex = mReader->getAttributeValueAsInt( attrSet) - 1;
      if(channel.mIndex < 0)
        ThrowException( boost::str( boost::format( "Invalid index \"%i\" for set attribute") % (channel.mIndex+1)));
    }
  }
ColladaParser.cpp, Funktion: ExtractDataObjectFromChannel, Zeile: 2031 geändert

Code: Alles auswählen

		case IT_Texcoord: // up to 4 texture coord sets are fine, ignore the others
			if( pInput.mIndex < AI_MAX_NUMBER_OF_TEXTURECOORDS) {
				pMesh->mTexCoords[pInput.mIndex].push_back( aiVector3D( obj[0], obj[1], obj[2]));
				if (0 != acc.mSubOffset[2] || 0 != acc.mSubOffset[3]) /* hack ... consider cleaner solution <-- neuer hack */
					pMesh->mNumUVComponents[pInput.mIndex]=3;
			}
			else
				DefaultLogger::get()->error("Collada: too many texture coordinate sets. Skipping.");
			break;

Re: [Projekt] Open Asset Import Library

Verfasst: 23.04.2009, 14:24
von Aramis
Danke dir für deine Bemühungen, das beseitigt das Problem in Tat.

Problem ist noch dass einige Collada-Exporter hier bei 1 anfangen zu zählen, andere bei 0. Letzteres vollständig spezifikationskonform, ersteres zumindest nicht explizit verboten. Ein paar weitere Schnitzer in der UV-Behandlung hab ich grade auch noch gefunden. Ich mach mich mal dran die auch noch wegzufixen :-)

Re: [Projekt] Open Asset Import Library

Verfasst: 23.04.2009, 16:16
von Aramis
So, sollte jetzt gehen. Danke nochmals für deine Bemühungen. Ach wenn doch nur alle Bugreports gleich eine Lösung mitliefern würden :-)

Darf ich die wuerfel.dae in's Repos für Regressionstests übernehmen?

Re: [Projekt] Open Asset Import Library

Verfasst: 23.04.2009, 20:24
von Ingrater
Darfst du.

Edit: ColladaParser.cpp zeile 1809
Müsste das hinten nicht attrSet anstatt (channel.mIndex+1) heißen.

Re: [Projekt] Open Asset Import Library

Verfasst: 23.04.2009, 20:47
von Aramis
Jo, hast Recht. Gefixt.

Re: [Projekt] Open Asset Import Library

Verfasst: 28.05.2009, 11:46
von kimmi
Ich habe uns mal für den Sourceforge-Community-Choise-Award nominiert. Wählt uns einfach unter:
http://sourceforge.net/community/cca09/ ... ts/assimp/

@Aramis: Kannst du denButton noch auf die HP packen, bitte? Der Link ist:

Code: Alles auswählen

<a href="http://sourceforge.net/community/cca09/nominate/?project_name=Open Asset Import Library&project_url=http://sourceforge.net/projects/assimp/"><img src="http://sourceforge.net/images/cca/cca_nominate.png" border="0"/></a>
Gruß Kimmi

Re: [Projekt] Open Asset Import Library

Verfasst: 28.05.2009, 12:00
von Schrompf
Och nö. Genau das wollt ich eigentlich die ganze Zeit vermeiden. Allerdings ohne wirklichen Grund, mehr so aus Trotz... :-)

Re: [Projekt] Open Asset Import Library

Verfasst: 28.05.2009, 12:00
von Dirk Schulz
Hi,

habe natürlich für euch gestimmt! ;)

Hoffentlich wars die richtige Kategorie: "Best Tool / Utility for Developers" ?

Da sollte man sich ja auf eine Kategorie einigen, sonst wirds nix mit dem Sieg!

Dirk Schulz

edith meint: warum so schüchtern Schrompf?

Re: [Projekt] Open Asset Import Library

Verfasst: 28.05.2009, 12:10
von Seraph
Waere das nicht vielleicht noch was fuer die News? :)

Re: [Projekt] Open Asset Import Library

Verfasst: 28.05.2009, 12:24
von klickverbot
Ich aktualisiere gerade wieder meine D-Version der Assimp C-Header.
Dabei sind mir einige »Schönheitsfehler« aufgefallen (es ware noch mehr, aber die anderen habe ich inzwischen vergessen^^):

Code: Alles auswählen

/** Phong-Shading -
*/
aiShadingMode_Phong = 0x3,
Da ist ein Bindestrich-Minus zu viel.

Code: Alles auswählen

/** Explicit request to the application to ignore the alpha channel
 *  of the texture.
 *
 *  Mutually exclusive with #aiTextureFlags_IgnoreAlpha.
 */
aiTextureFlags_IgnoreAlpha = 0x4,
Das sollte wohl »Mutually exclusive with #aiTextureFlags_UseAlpha« heißen.

Generell ist mir noch aufgefallen, dass manche Enum-Werte mit CamelCase, andere aber mit ALL_CAPS bezeichnet werden – einheitlich wärs schöner ;) …

Re: [Projekt] Open Asset Import Library

Verfasst: 28.05.2009, 12:34
von Aramis
Generell ist mir noch aufgefallen, dass manche Enum-Werte mit CamelCase, andere aber mit ALL_CAPS bezeichnet werden – einheitlich wärs schöner
Hin und wieder ist das Leben schon mal merkwürdig .. ich hab zufälligerweise gestern Nacht die Header aufgeräumt, und dabei die Schreibweisen einiger Enums vereinheitlicht (ich denke dass es die sind, die du meinst). Ich hab es bloß noch nicht eingecheckt, mach ich jetzt gleich dann. Und ja, das sollte in der Tat 'Mutually exclusive with #aiTextureFlags_UseAlpha' heißen. Danke für den Hinweis :-)

@Kimmi

Button hab ich draufgemacht. Die ganze Geschichte scheint aber schon morgen zu enden, sonderlich hoch dürften unsere Chancen nicht sein. Aber egal, dabei sein ist alles :-)

Re: [Projekt] Open Asset Import Library

Verfasst: 28.05.2009, 13:32
von kimmi
Warten wir mal ab, was kommt. Immerhin haben schon mal mehr als 2 draufgedrückt, das doch schon mal was :).

Gruß Kimmi

Re: [Projekt] Open Asset Import Library

Verfasst: 28.05.2009, 13:33
von klickverbot
Aramis hat geschrieben:Button hab ich draufgemacht. Die ganze Geschichte scheint aber schon morgen zu enden, sonderlich hoch dürften unsere Chancen nicht sein. Aber egal, dabei sein ist alles :-)
Dafür gibts jetzt Tag-Salat auf der Startseite: »Currently, Assimp is a beta, a RC to be fininate.png" border="0"/>«. Mmmh, geschmacklich einwandfrei xD

Re: [Projekt] Open Asset Import Library

Verfasst: 28.05.2009, 13:36
von Aramis
Done. Kleine Neuerung ist, dass die komplette Logging-Funktionalität nun auch im C-Interface verfügbar ist.
Dafür gibts jetzt Tag-Salat auf der Startseite: »Currently, Assimp is a beta, a RC to be fininate.png" border="0"/>«. Mmmh, schmeckt gut xD
Ups, das hatte ich irgendwie übersehen :oops: .

Re: [Projekt] Open Asset Import Library

Verfasst: 28.05.2009, 13:57
von klickverbot
Ach ja, fast hätte ichs vergessen: Im CMake-Script für die Library wird ein Header »TDepGraphNode.h« referenziert, der nicht existiert.

Re: [Projekt] Open Asset Import Library

Verfasst: 28.05.2009, 15:18
von kimmi
Oha, das war ich. Der Header flaggt aus experimentellen Gründen bei mir auf der Kiste herum, ich korrigiere das mal.
[Edit] Done!
Gruß Kimmi

Re: [Projekt] Open Asset Import Library

Verfasst: 16.06.2009, 00:09
von Chromanoid
Bis jetzt habe ich noch nicht lange getestet, aber eure wunderbare Bibliothek klappt wunderbar beim iPhone/iPod Touch :). Das nimmt mir (und meinen Komilitonen) bei einem Studienprojekt einen dicken Batzen Arbeit ab. Vielen Dank dafür! :)

Re: [Projekt] Open Asset Import Library

Verfasst: 16.06.2009, 14:51
von Aramis
Freut mich zu hören :-)

Wie immer, meldet euch bei Problemen bitte gleich :-)

Re: [Projekt] Open Asset Import Library

Verfasst: 20.06.2009, 17:01
von Aramis
Es gibt im Repos seit soeben erstmals ein Sample. Vielleicht ist das für den einen oder anderen, der bislang von Assimp's scheinbarer Komplexität abgeschreckt wurde, hilfreich. Das Sample ist ziemlich kompakt und nutzt GLUT um ein Modell zu laden und als rotierendes Wireframe anzuzeigen.

Re: [Projekt] Open Asset Import Library

Verfasst: 20.06.2009, 21:23
von kimmi
Eine gute Idee, so eine kleine Sample-Applikation.

Gruß Kimmi

Re: [Projekt] Open Asset Import Library

Verfasst: 21.06.2009, 19:48
von Chromanoid
Hi :)
Gibt's eigentlich eine Funktion um direkt nen byte array oder so einzulesen, statt über ein IOSystem gehen zu müssen? Das wäre nämlich echt mal praktisch ^^