MI format (Mental Images)Written by Paul Bourke
MI files primarily describe a scene to be rendered for the Mental Ray rendering engine and are most often generated from the SoftImage modelling package. For a full description of the MI format see "SOFTIMAGE|3D, Mental Ray Programmer's Guide".
The MI format uses a right handed coordinate system with x to the left, y upwards, and Z out of the page. The camera is fixed at the origin looking down the negative z axes, the objects in the scene are transformed so as to make this the correct view.
GeneralThe overall structure of an MI file is a structure as follows
list of commands frame number [time] list of lights, textures, and materials view description list of lights, textures, materials, and objects end frame
An MI files can contain any number of these structures called
frames, each frame describes one rendered image. The lights,
textures, materials, and objects can appear in any order except
that a view must precede the object definition.
verbose on | off
echo "message to echo"
system "shell command to execute"
declare "name of shader" (any_parameters)
Mental Ray knows about point light sources and infinite light sources (parallel rays in a particular direction).
light "name of light" "shader (any_parameters) [area_light_primitive] [origin x y z] [direction x y z] end light
Point light sources define an origin but no direction, the reverse applies to infinite light sources. An area_light_primitive is a way of applying a point source into an area light, it can be applied to either a rectangle, disc, or sphere.
MI supports two types of textures, images and procedural. The first is implemented with picture files, the second as a shading function. Textures can be used to specify scalars, colours, or vectors.
scalar texture "texture name" [width hight [depth]] bytes ... [local] scalar texture "texture name" "filename" scalar texture "texture name" "shader name" (parameters) color texture "texture name" [width hight [depth]] bytes ... [local] color texture "texture name" "filename" color texture "texture name" "shader name" (parameters) vector texture "texture name" [width hight [depth]] bytes ... [local] vector texture "texture name" "filename" vector texture "texture name" "shader name" (parameters)
Materials define the appearance of objects and is done entirely thought shaders.
material "material name" [nocontour] [opaque] "material shader name" (parameters) [displace "displacement shader name" (parameters)] [shadow "shadow shader name" (parameters)] [volume "volume shader name" (parameters)] [environment "environment shader name" (parameters)] end material
A view specifies an output file type to result from a rendering. It can be a image file or a filter that operates on the rendered image.
view output_definitions view_definitions end viewThe available view definitions are
focal nnn | infinity
resolution www yyy
window xmin ymin xamx ymax
min samples nnn
max samples nnn
recursive on | off
adaptive on | off
contrast r g b [a]
time contrast r g b [a]
filter box | triangle | gauss width [height]
trace depth nnn
shadow_sort on | off
acceleration spatial subdivision
acceleration ray classification
max size nnn
max depth nnn
subdivision memory nnn
face front | back | both
clip hither yon
volume "shader name" (parameters)
environment "environment name" (parameters)
lens "lens name" (parameter)
shadow on | off
trace on | off
scanline on | off
desaturate on | off
dither on | off
field even | odd | both
contour on | off
paper size "format"
paper cale nnn
contour line width nnn
contour depth nnn
paper transform nnn nnn
object "name of object" [visible] [shadow] [trace] [tag label_number] [transform 4x4_matrix] [basis list] group [merge eps] vector list vertex list geometry list end group : : further group definitions : : end object
For some strange reason the default is for an object to be invisible, the visible flag usually needs to be set.
All group objects must contain a vector and vertex list. The vector list is simply a list of triples, points in 3D space. These points might represent vectors, normals, or texture coordinates. Vectors are usually stored as numbers represented as printable characters although MI does support a binary form of 12 bytes in IEEE 854, this is of course hardware (endian) dependent.
Vertices are defined by reference to the vector list which
is numbered from 0 upwards and the numbering restarts from
0 for each group. A vertex list consists of a series of types
with an associated index. The types may be 'v' for a point in
space, 'n' for a normal, 'm' for a motion vector, and 't' for
texture coordinate. A vertex starts with the type v and end
at the occurrence of the next v.
object "plane" visible shadow group 0 0 0 0 1 0 1 1 0 1 0 0 0 0 1 v 0 n 4 v 1 n 4 v 2 n 4 v 3 n 4 p "goldmaterial" 0 1 2 3 end group end object
Two types of geometry can be defined, polygonal geometry as in the above example and free-form surfaces.
Polygonal geometry can be one of three types. 'c' for convex polygons (also cp for backward compatibility), 'p' for concave polygons optionally with holes specified by the 'hole' keyword. All polygons are defined in terms of vertex numbers, numbered from 0 upwards.
c "material name" list_of_vertex_numbers cp "material name" list_of_vertex_numbers p "material name" list_of_vertex_numbers p "material name" list_of_vertex_numbers hole list_of_vertex_numbers
Free-form surface geometry is beyond the scope of this document, please refer to the reference in the introduction. They can be polygonal patches up to a degree of 21, supported types are bezier, Taylor, B-Spline, cardinal, and general basis functional forms.
This example might help you recognise MI files as well as illustrate the format with a concrete example (don't expect this to create a sensible scene!)