WHAT IT IS: This directory contains source code for the 'ivfix' utility, used to restructure Inventor scene graphs for improved rendering performance. ----------------------------------------------------------------------------- USAGE: ivfix [options] [infile] [outfile] -a : Write out an ascii file. Default is binary -d dir : Add 'dir' to the list of directories to search -h : Print this message (help) -n : Do not generate normals -t : Do not generate texture coordinates -v : (Verbose) Display status info during processing -V : (Very verbose) Display more detailed status info ivfix reads binary or ascii Inventor input from a file or stdin, restructures the scene graph and writes it out to a file or standard output. By default the output file is a binary file. ----------------------------------------------------------------------------- WHAT IT DOES: ivfix processes a scene graph in two phases. The first phase figures out how the scene graph is organized, and tries to sort it a better way to take advantage of coherence. For example, it tries to organize subgraphs by common textures, since switching textures is expensive. Once sorted, it also tries to combine subgraphs so that the final result has fewer nodes. The second phase consists of "flattening" the subgraphs that result from the first phase. This tesselates all shapes into little triangles that are then organized into triangle strips. ----------------------------------------------------------------------------- HOW IT DOES IT: Phase 1 is broken into the following steps: Collecting: All shapes in the scene are found and stored with their properties in specialized Shape data structures. Sorting: The Shape data structures are sorted based on differences in properties, ranked by frequency of change and cost. Merging: Some shapes can be merged into the same group if certain conditions hold. Building: A scene graph is constructed from the sorted, merged list of Shape data structures. Phase 2 is then applied to the leaf groups of this graph. Phase2 (for each subgraph) consists of these steps: Flattening: This applies a callback action to tesselate all shapes into little triangles. Condensing: This removes duplicate coordinates created in the flattening process. Stripping: This produces triangle strips from the individual triangles. ----------------------------------------------------------------------------- WHAT IT DOES NOT DO: It does not try to preserve anything from the original graph. Some nodes (many properties) carry through untouched from the original scene, so any names or connections on those nodes will end up in the final scene. Others are thrown away. Instances of shapes will most likely be broken. (It does preserve Switch, File, and LevelOfDetail nodes rather than trying to figure out the right thing to do with their children.) The moral: if you want to make sure ivfix does not screw up part of your scene, separate that part out before fixing the rest. ----------------------------------------------------------------------------- WHAT IT SHOULD DO, BUT DOESN'T YET (aka BUGS): Deal with ignore flags in materials, etc. Deal with huge files better without running out of memory. ----------------------------------------------------------------------------- HOW IT IS DIFFERENT FROM THE OLD IVQUICKEN: - ivquicken left most shapes alone; it converted only certain face sets into triangle strips. ivfix converts all shapes (even primitive ones like spheres and cubes) into triangle strips. - ivquicken's triangle-stripification code was pretty slow. ivfix's is fast, fast, fast. - ivquicken did a lot of work to (try to) preserve the overall structure of a scene graph, including node names and field connections. ivfix doesn't bother with that.