[Soc-2009-dev] Weekly report - Collada module
sebastian at opencollada.org
Sun May 24 10:09:42 CEST 2009
just a short introduction: we are the maintainers of the MIT license
based COLLADA Exporter and Importers for 3ds Max and Maya. Both are
(more or less) comparable to Blender and a joined effort to implement a
working toolchain between all three DCC tools would be a great success.
To ease the difficulties that can arise when implementing COLLADA we
have been developing several assisting APIs and libraries to read and
write DAE files.
COLLADA Stream Writer
The stream writer is a helper framework to write valid 1.4 and 1.5 files
on the fly without having to fill a in memory model first. It's the
basis for the Max and Maya DAE exporters. It has some specialized
functions for ftoa() and uses either fprintf (on windows) or a
std:stream on unix depending on which specific implementation is faster.
COLLADA Sax Parser
The base of the parser is an auto generated, validating, COLLADA
specific, xml parser, that alternatively uses libXml or expat. The c++
code for this parser is generated from the COLLADA XSD by a java
program. This parser has callback functions for each COLLADA element
(SAX style parsing). One for the beginning of each element, one for the
end of each element and, if character data is allowed inside this
element, also one for that data. The begin functions parse the
attributes, if any, convert them to the corresponding c++ data type
according to the XSD and provide them in a struct. The names of the
members in this struct correspond to the attribute names in COLLADA.
Similarly, the parser parses the character data, if any, inside
elements, converts it to the corresponding c++ data type according to
the XSD and calls the data function with these values stored in an
array. Since sax based xml parser do not necessarily pass all character
data at once, that data function might be called multiple times for one
element and provide the data in pieces (e.g. large float arrays are
passed during several calls).
The end function is called when the element is closed and has no parameters.
On top of this auto generated parser we have implemented two more
components. A data model (currently called COLLADAFramework) and a
COLLADA parser (loader) which fills that model (currently called
The data model consists of atomic objects (Geometry, Scenegraph,
LibraryNodes ... ) which are passed to any software that wants load a
dae file using this loader. To receive the objects, this software needs
to implement the COLLADAFW::IWriter interface. The loader then calls the
methods of this interface, as soon as an atomic object has been loaded
completely, e.g. the writeGeometry method is called as soon as the
end_geometry function of the generated
sax parser has been called. Therefore, the atomic objects are passed in
the order they appear in the dae file, which requires that implementers
must be able to handle them in arbitrary order. If this is not possible,
one can parse the dae file more than once. For instance the COLLADAMaya
plug-in uses this technique, since it needs to know the scene graph,
before it can handle geometries. The methods of the interface pass
pointers to the objects that are only
valid inside the call of this method. As soon as this method returns,
the object might be deleted and the pointer becomes invalid. This
approach reduces the memory consumption, since it needs to hold only one
atomic object in memory a at time. Each atomic object has a unique id
used to match objects and references to them. The
COLLADASaxFrameworkLoader already resolves urls in COLLADA and uses them
to assign these unique ids.
There is a very simple sample implementation for the Sax Parser
available that converts DAE files into binary Ogre3D meshes that might
server as a starting point for the Blender efforts.
These libraries are all extremely fast (500MB DAE file parsing takes ~2
sec) and have not memory overhead. The SAX based approach is a bit more
difficult to handle but the framework allows you to create an importer
more reliable and faster than with the COLLADA DOM libraries.
BTW, COLLADA allows arbitrary polygons with and without holes, convex
and concave ones. Triangulation is not a trivial task for those - i'd
support only triangles, tristrips and trifans in the very first step.
Chingiz Dyussenov wrote:
> I have read first chapters of Collada spec 1.5, now I have the idea of
> it's fundamentals, how it represents geometry. Collada allows polygons
> with more than 4 vertices. In Blender faces are made by only 3 or 4
> vertices. I will convert all polygons to triangles for now.
> Got acquainted with the basics of Collada DOM.
> Had a short introduction to Blender operator basics and menus based on
> operators. Now I know how to use addvertlist, addfacelist functions to
> construct meshes.
> I talked to my mentor about where in Blender to put Collada DOM library
> and my sources. Here is the directory blender/source/blender/collada.
> I am going to start coding the geometry part, import/export vertices
> with normals, uvs and colors.
> Soc-2009-dev mailing list
> Soc-2009-dev at blender.org
More information about the Soc-2009-dev