NAME
oconv - create an octree from a RADIANCE scene description
SYNOPSIS
oconv [ -i octree | -b xmin ymin zmin size ][ -n objlim ][ -r maxres ][
-f ][ -w ][ - ] [ input .. ]
DESCRIPTION
Oconv adds each scene description input to octree and sends the result
to the standard output. Each input can be either a file name, or a
command (enclosed in quotes and preceded by a ‘!’). Similarly, the
octree input may be given as a command preceded by a ‘!’. If any of
the surfaces will not fit in octree, an error message is printed and
the program aborts. If no octree is given, a new one is created large
enough for all of the surfaces.
The -b option allows the user to give a bounding cube for the scene,
starting at xmin ymin zmin and having a side length size. If the cube
does not contain all of the surfaces, an error results. The -b and -i
options are mutually exclusive.
The -n option specifies the maximum surface set size for each voxel.
Larger numbers result in quicker octree generation, but potentially
slower rendering. Smaller values may or may not produce faster
renderings, since the default number (6) is close to optimal for most
scenes.
The -r option specifies the maximum octree resolution. This should be
greater than or equal to the ratio of the largest and smallest
dimensions in the scene (ie. surface size or distance between
surfaces). The default is 16384.
The -f option produces a frozen octree containing all the scene
information. Normally, only a reference to the scene files is stored
in the octree, and changes to those files may invalidate the result.
The freeze option is useful when the octree file’s integrity and
loading speed is more important than its size, or when the octree is to
be relocated to another directory, and is especially useful for
creating library objects for the "instance" primitive type. If the
input octree is frozen, the output will be also.
The -w option suppresses warnings.
A hyphen by itself (’-’) tells oconv to read scene data from its
standard input. This also implies the -f option.
The only scene file changes that do not require octree regeneration are
modifications to non-surface parameters. If the coordinates of a
surface are changed, or any primitives are added or deleted, oconv must
be run again. Programs will abort with a "stale octree" message if
they detect any dangerous inconsistencies between the octree and the
input files.
Although the octree file format is binary, it is meant to be portable
between machines. The only limitation is that machines with radically
different integer sizes will not work together. For the best results,
the -f option should be used if an octree is to be used in different
environments.
DIAGNOSTICS
There are four basic error types reported by oconv:
warning - a non-fatal input-related error
fatal - an unrecoverable input-related error
system - a system-related error
internal - a fatal error related to program limitations
consistency - a program-caused error
Most errors are self-explanatory. However, the following internal
errors should be mentioned:
Too many scene files
Reduce the number of scene files by combining them or using
calls to xform(1) within files to create a hierarchy.
Set overflow in addobject (id)
This error occurs when too many surfaces are close together in a
scene. Either too many surfaces are lying right on top of each
other, or the bounding cube is inflated from an oversized object
or an improper -b specification. If hundreds of triangles come
together at a common vertex, it may not be possible to create an
octree from the object. This happens most often when inane CAD
systems create spheres using a polar tessellation. Chances are,
the surface "id" is near one of those causing the problem.
Hash table overflow in fullnode
This error is caused by too many surfaces. If it is possible to
create an octree for the scene at all, it will have to be done
in stages using the -i option.
EXAMPLE
To add book1, book2 and a transformed book3 to the octree
‘‘scene.oct’’:
oconv -i scene.oct book1 book2 ’\!xform -rz 30 book3’ > newscene.oct
AUTHOR
Greg Ward
NOTES
In the octree, the names of the scene files are stored rather than the
scene information. This means that a new octree must be generated
whenever the scene files are changed or moved. Also, an octree that
has been moved to a new directory will not be able to find scene files
with relative pathnames. The freeze option avoids these problems.
make(1) or rad(1) can be used to automate octree creation and
maintenance.
SEE ALSO
getbbox(1), getinfo(1), make(1), obj2mesh(1), rad(1), rpict(1), rvu(1),
rtrace(1), xform(1)