Skip to content

Alembic Conventions and Schema Types

Zhou Hang edited this page Aug 11, 2023 · 4 revisions

Conventions:

  • Right handed coordinate system.
  • clockwise polygon winding order.
  • Positive Y axis is up.
  • Camera (and lights when applicable) looks down the negative Z axis.

Schema notes:

Transform

The AbcGeom Transform class (OXform/IXform) has these properties:

  • ops - One or more operations of translation, scale, rotation, or 4x4 Rotation is angle in degrees and axis of rotation. Operations can optionally indicate a hint (e.g. for Maya to record hinting for pivot behavior).
  • inherits - Does this transform concatenate or ignore the transforms of its parents.
  • childBounds - (optional) The bounding volume, including all sub objects.

Points

The AbcGeom Points class has these properties:

  • P - the positions of each point
  • ids - for each P a 64bit unsigned integer that can be used to identify a Point.
  • selfBounds - The bounding volume for just this object
  • childBounds - The bounding volume, including all subobjects
  • velocities - (optional) per point value is in units/second

Curves

The AbcGeom Curves class has these properties:

  • type - linear, cubic or variable order (for all curves in object)
  • wrap - periodic or non-periodic (for all curves in object)
  • basis - none, bezier, bspline, catmull-rom, hermite, power
  • P - vertices
  • nVertices - for each curve the number of vertices in the curve
  • Pw (optional) - the position weight for each point, if this doesn't exist, assume 1 per point.
  • knots (optional)
  • orders (if type is variable order) - the order of each curve
  • width (optional) - can be constant or varying, expressed as a diameter
  • N - (optional) Normals
  • uv - (optional) u-v coordinates
  • velocities - (optional) per point value is in units/second
  • selfBounds - The bounding volume for just this object
  • childBounds - (optional) The bounding volume, including all subobjects

PolyMesh

The AbcGeom PolyMesh class has these properties:

  • faceCounts - for each face the count of vertices that make up the face
  • faceIndices - for each vertex of each face the slot in P for the vertex
  • P - vertices
  • N - (optional) Normals
  • uv - (optional) u-v coordinates
  • selfBounds - The bounding volume for just this object
  • childBounds - (optional) The bounding volume, including all sub-objects
  • facesets - (optional) named sets of faces from this mesh
  • velocities - (optional) per point value is in units/second

SubD

The AbcGeom SubD class has these properties:

  • faceCounts - for each face, the count of vertices that make up the face
  • faceIndices - for each vertex the slot in P for the vertex's coordinates
  • P - vertex coordinates
  • creases - (optional) creased edges
  • corners - (optional) vertexes that are corners
  • holes - (optional) regions to remove from the surface
  • uv - (optional) u-v coordinates
  • selfBounds - The bounding volume for just this object
  • childBounds - (optional) The bounding volume, including all sub-objects
  • facesets - (optional) named sets of faces from this subd
  • velocities - (optional) value is in units/second
  • scheme - (optional) subdivision scheme used, defaults to catmull-clark

FaceSet

The AbcGeom FaceSet class can be created as part of a SubD or PolyMesh and has these properties:

  • faceNumbers - the faces from the SubD or PolyMesh that are in this faceset
  • selfBounds - (optional) The bounding volume representing all faces for this object.

NuPatch

The AbcGeom NuPatch class has these properties:

  • nucvs - the number of CVs in the u direction
  • nvcvs - the number of CVs in the v direction
  • uorder - the order of the patch in the u direction
  • vorder - the order of the patch in the v direction
  • uknot - floating point array containing the number of knots in the u direction. The number of knots in u should be (nucvs - uorder) + 2 * uorder
  • vknot - floating point array containing the number of knots in the v direction. The number of knots in v should be: (nvcvs - vorder) + 2 * vorder
  • P - vertices
  • N - (optional) Normals
  • uv - (optional) u-v coordinates
  • Pw (optional) - the position weight for each point, if this doesn't exist, assume 1 per point.
  • selfBounds - The bounding volume for just this object
  • childBounds - (optional) The bounding volume, including all subobjects
  • velocities - (optional) per point value is in units/second

Additionally, the NURBS objects will contain TrimCurves which may contain zero or more trim curves. The path is composed of segments in the u direction and then the v direction.

Camera

The AbcGeom Camera class has these properties:

  • focalLength (mm)
  • horizontalAperture/verticalAperture dimensions (cm)
  • horizontalFilmOffset/verticalFilmOffset (cm)
  • lenseSqueezeRatio: to handle anamorphic lenses, among other things. (width / height)
  • 2D transform stack (translate/scale only) for expressing additional 2D translate/scale filmback operations
  • overscan stored as 4 percentage values for independent left/right/top/bottom values (to support fractional extension of screen window)
  • non-symmetrical overscan, which we've come across)
  • fStop (focal length divided by "effective" lens diameter)
  • focusDistance (cm)
  • shutterOpen/shutterClose: these would be frame-relative values, in seconds (secs.)
  • near/far clipping planes (cm)

Material

The AbcMaterial Material class doesn't define a specific material, or set of materials. Instead it's a container that can be used to define the properties for a specific target ("prman", "opengl", etc) and shader type ("light", "displacement", etc). Multiple targets and shader types can live within the same material, in fact a whole material network can be described within a single Material class.

Light

The properties of the AbcGeom Light class are to be expressed via an attached AbcMaterial. The other optional properties on the light include:

  • childBounds - (optional) The bounding volume, including all subobjects
  • camera - (optional) An Abc Camera.