home *** CD-ROM | disk | FTP | other *** search
- Neutral File Format (NFF)
- =========================
-
- by Eric Haines, 3D/Eye Inc, 410 E Upland Rd, Ithaca, NY 14850
- (607)-257-1381
- Email: hpfcla!hpfcrs!eye!erich@hplabs.hp.com
-
- [This is a description of the format used in the SPD package. Any
- comments on how to expand this format are appreciated. Some
- extensions seem obvious to me (e.g. adding directional lights,
- circles, and tori), but I want to take my time, gather opinions, and
- get it more-or-less right the first go round. Also, I'm ridiculously
- busy right now. -EAH]
-
- [Extended by John Walker (kelvin@Autodesk.com) to add the "aspect"
- statement to allow rendering non-square images and to support displays
- with non-square pixels.]
-
- Draft document #1, 10/3/88
-
- The NFF (Neutral File Format) is designed as a minimal scene
- description language. The language was designed in order to test
- various rendering algorithms and efficiency schemes. It is meant to
- describe the geometry and basic surface characteristics of objects,
- the placement of lights, and the viewing frustum for the eye. Some
- additional information is provided for aesthetic reasons (such as the
- color of the objects, which is not strictly necessary for testing
- rendering algorithms).
-
- Future enhancements include: circle and torus objects, spline surfaces
- with trimming curves, directional lights, characteristics for
- positional lights, CSG descriptions, and probably more by the time you
- read this. Comments, suggestions, and criticisms are all welcome.
-
- At present the NFF file format is used in conjunction with the SPD
- (Standard Procedural Database) software, a package designed to create
- a variety of databases for testing rendering schemes. The SPD package
- is available from Netlib and via ftp from drizzle.cs.uoregon.edu. For
- more information about SPD see "A Proposal for Standard Graphics
- Environments," IEEE Computer Graphics and Applications, vol. 7, no.
- 11, November 1987, pp. 3-5.
-
- By providing a minimal interface, NFF is meant to act as a simple
- format to allow the programmer to quickly write filters to move from
- NFF to the local file format. Presently the following entities are
- supported:
-
- A simple perspective frustum
- A positional (vs. directional) light source description
- A background color description
- A surface properties description
- Polygon, polygonal patch, cylinder/cone, and sphere descriptions
-
- Files are output as lines of text. For each entity, the first line
- defines its type. The rest of the first line and possibly other lines
- contain further information about the entity. Entities include:
-
- "v" - viewing vectors and angles
- "l" - positional light location
- "b" - background color
- "f" - object material properties
- "c" - cone or cylinder primitive
- "s" - sphere primitive
- "p" - polygon primitive
- "pp" - polygonal patch primitive
-
- These are explained in depth below:
-
- Viewpoint location. Description:
- "v"
- "from" Fx Fy Fz
- "at" Ax Ay Az
- "up" Ux Uy Uz
- "angle" angle
- "hither" hither
- "resolution" xres yres
- "aspect" ratio
-
- Format:
- v
- from %g %g %g
- at %g %g %g
- up %g %g %g
- angle %g
- hither %g
- resolution %d %d
- aspect %g
-
- The parameters are:
-
- From: the eye location in XYZ.
- At: a position to be at the center of the image, in XYZ world
- coordinates. A.k.a. "lookat".
- Up: a vector defining which direction is up, as an XYZ vector.
- Angle: in degrees, defined as from the center of top pixel row to
- bottom pixel row and left column to right column.
- Resolution: in pixels, in x and in y.
- Aspect: screen aspect ratio divided by pixel aspect ratio. Equal
- to resolution_y/resolution_x for square pixels.
-
- Note that no assumptions are made about normalizing the data (e.g.
- the from-at distance does not have to be 1). Also, vectors are not
- required to be perpendicular to each other.
-
- For all databases some viewing parameters are always the same:
-
- Yon is "at infinity."
- Aspect ratio is 1.0.
-
- A view entity must be defined before any objects are defined (this
- requirement is so that NFF files can be used by hidden surface
- machines).
-
- LIGHTS
- ======
-
- Positional light. A light is defined by XYZ position. Description:
-
- "l" X Y Z
-
- Format:
- l %g %g %g
-
- All light entities must be defined before any objects are defined
- (this requirement is so that NFF files can be used by hidden
- surface machines). Lights have a non-zero intensity of no
- particular value [this definition may change soon, with the
- addition of an intensity and/or color].
-
- BACKGROUND
- ==========
-
- Background color. A color is simply RGB with values between 0 and 1:
-
- "b" R G B
-
- Format:
- b %g %g %g
-
- If no background color is set, assume RGB = {0,0,0}.
-
- MATERIAL PROPERTIES
- ===================
-
- Fill color and shading parameters. Description:
-
- "f" red green blue Kd Ks Shine T index_of_refraction
-
- Format:
- f %g %g %g %g %g %g %g %g
-
- RGB is in terms of 0.0 to 1.0.
-
- Kd is the diffuse component, Ks the specular, Shine is the Phong
- cosine power for highlights, T is transmittance (fraction of light
- passed per unit). Usually, 0 <= Kd <= 1 and 0 <= Ks <= 1, though
- it is not required that Kd + Ks == 1. Note that transmitting
- objects (T > 0) are considered to have two sides for algorithms
- that need these (normally objects have one side).
-
- The fill color is used to color the objects following it until a
- new color is assigned.
-
- OBJECTS
- =======
-
- Objects: all objects are considered one-sided, unless the second side
- is needed for transmittance calculations (e.g. you cannot throw out
- the second intersection of a transparent sphere in ray tracing).
-
- Cylinder or cone
- ------------------
- A cylinder is defined as having a radius and an axis defined by
- two points, which also define the top and bottom edge of the
- cylinder. A cone is defined similarly, the difference being that
- the apex and base radii are different. The apex radius is defined
- as being smaller than the base radius. Note that the surface
- exists without endcaps. The cone or cylinder description:
-
- "c"
- base.x base.y base.z base_radius
- apex.x apex.y apex.z apex_radius
-
- Format:
- c
- %g %g %g %g
- %g %g %g %g
-
- A negative value for both radii means that only the inside of the
- object is visible (objects are normally considered one sided, with
- the outside visible). Note that the base and apex cannot be
- coincident for a cylinder or cone.
-
- Sphere
- ------
-
- A sphere is defined by a radius and center position:
-
- "s" center.x center.y center.z radius
-
- Format:
- s %g %g %g %g
-
- If the radius is negative, then only the sphere's inside is
- visible (objects are normally considered one sided, with the
- outside visible).
-
- Polygon
- -------
-
- A polygon is defined by a set of vertices. With these databases,
- a polygon is defined to have all points coplanar. A polygon has
- only one side, with the order of the vertices counterclockwise as
- you face the polygon (right-handed coordinate system). The first
- two edges must form a non-zero convex angle, so that the normal
- and side visibility can be determined. Description:
-
- "p" total_vertices
- vert1.x vert1.y vert1.z
- [etc. for total_vertices vertices]
-
- Format:
- p %d
- [ %g %g %g ] <-- for total_vertices vertices
-
- Polygon Patch
- -------------
-
- A patch is defined by a set of vertices and their normals. With
- these databases, a patch is defined to have all points coplanar.
- A patch has only one side, with the order of the vertices being
- counterclockwise as you face the patch (right-handed coordinate
- system). The first two edges must form a non-zero convex angle,
- so that the normal and side visibility can be determined.
- Description:
-
- "pp" total_vertices
- vert1.x vert1.y vert1.z norm1.x norm1.y norm1.z
- [etc. for total_vertices vertices]
-
- Format:
- pp %d
- [ %g %g %g %g %g %g ] <-- for total_vertices vertices
-
- COMMENT
- =======
-
- Description:
- "#" [ string ]
-
- Format:
- # [ string ]
-
- As soon as a "#" character is detected, the rest of the line is considered
- a comment.
-