NAME
obj2mesh - create a compiled RADIANCE mesh file from Wavefront .OBJ
input
SYNOPSIS
obj2mesh [ -a matfile ][ -l matlib ][ -n objlim ][ -r maxres ][ -w ] [
input.obj [ output.rtm ] ]
DESCRIPTION
Obj2mesh reads a Wavefront .OBJ file from input.obj (or the standard
input) and compiles it into a RADIANCE triangle mesh, which is sent to
output.rtm (or standard output). Any RADIANCE material descriptions
included via one or more -a options will be compiled and stored in the
mesh as well. If the -l option is used to specify a material file, the
RADIANCE library locations are searched. This mesh may be included in
a RADIANCE scene description via the mesh primitive, thus:
mod mesh id
1+ output.rtm [xform args]
0
0
The syntax and semantics are identical to the RADIANCE instance
primitive. If mod is "void", then the stored mesh materials will be
applied during rendering. Otherwise, the given material will be
substituted on all the mesh surfaces.
The -n option specifies the maximum surface set size for each voxel.
Larger numbers result in quicker mesh generation, but potentially
slower rendering. Values below 6 are not recommended, since this is
the median valence for a mesh vertex (the number of adjacent faces),
and smaller values will result in pointless octree subdivision. The
default setting is 9.
The -r option specifies the maximum octree resolution. This should be
greater than or equal to the ratio of the mesh bounding box to the
smallest triangle. The default is 16384.
The -w option suppresses warnings.
Although the mesh 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.
DETAILS
The following Wavefront statements are understood and compiled by
obj2mesh.
v x y z A vertex location, given by its Cartesian coordinates. The
final mesh position may of course be modified by the
transform arguments given to the mesh primitive in the
Radiance scene description.
vn dx dy dz
A vertex normal vector, given by its three direction
components, which will be normalized by obj2mesh. Normals
will be interpolated over the mesh during rendering to
produce a smooth surface. If no vertex normals are present,
the mesh will appear tesselated. A zero length normal (i.e.,
0 0 0) will generate a syntax error.
vt u v A local vertex texture coordinate. These coordinates will be
interpolated and passed to the "Lu" and "Lv" variables during
rendering. Local coordinates can extend over any desired
range of values.
usemtl mname
A material name. The following faces will use the named
material, which is taken from the material definitions in the
-a input file(s).
g gname Group association. The following faces are associated with
the named group. If no "usemtl" statement has been
encountered, the current group is used for the surface
material identifier.
f v1/t1/n1 v2/t2/n2 v3/t3/n3 ..
A polygonal face. Polygon vertices are specified as three
indices separated by slashes (’/’). The first index is the
vertex location, the second index is the local (u,v) texture
coordinate, and the third index is the vertex surface normal.
Positive indices count from the beginning of the input, where
the first vertex position ( v statement) is numbered 1, and
likewise for the first texture coordinate and the first
surface normal. Negative indices count backward from the
current position in the input, where -1 is the last vertex
encountered, -2 is the one before that, etc. An index of 0
may be used for the vertex texture or normal to indicate
none, or these may be left off entirely. All faces will be
broken into triangles in the final mesh. Obj2mesh currently
makes an unsafe assumption that faces are convex, which may
result in odd results if they are not.
All other statement types will be ignored on the input. Statements
understood by obj2rad(1) will be ignored silently; other statements
will generate a warning message after translation to indicate how much
was missed.
DIAGNOSTICS
There are four basic error types reported by obj2mesh:
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:
Set overflow in addobject (id)
This error occurs when too many surfaces are close together in a
scene. Sometimes a dense mesh can be accommodated by increasing
the maximum resolution (by powers of two) using the -r option,
but usually this error indicates something is wrong. Either too
many surfaces are lying right on top of each other, or the
bounding cube is inflated from disparate geometry in the input.
Chances are, the face number "id" is near those causing the
problem.
Hash table overflow in fullnode
This error is caused by too many surfaces, and there is little
hope of compiling this mesh.
EXAMPLES
To create a compiled triangle mesh from the scene file mesh.obj using
materials from the file mesh.mat:
obj2mesh -a mesh.mat mesh.obj mesh.rtm
To use local coordinates to place a square tiled image on a mesh
object:
void colorpict tiled_pat
7 red green blue mytile.hdr . frac(Lu) frac(Lv)
0
0
tiled_pat plastic tiled_mat
0
0
5 .9 .9 .9 0 0
tiled_mat mesh tiled_mesh
1 mymesh.rtm
0
0
ENVIRONMENT
RAYPATH the directories to search for material files.
AUTHOR
Greg Ward
SEE ALSO
gensurf(1), getinfo(1), make(1), obj2rad(1), oconv(1), rpict(1),
rvu(1), rtrace(1), xform(1)