Objects and properties on their own carry no meaning. Alembic’s AbcGeom
library gives them one through schemas: a mesh is an object whose metadata names the
mesh schema and whose properties have agreed names and types. This page lists the
schemas and their properties as the open-source library writes them. Types are given
as data type and extent, such as float × 3 for a point.
Schemas
An object’s metadata names its schema with schema and
schemaObjTitle; geometry schemas add schemaBaseType. The
schema’s properties sit in one compound property inside the object’s properties,
named in the last column.
| Schema | Base type | Compound | Holds |
|---|---|---|---|
AbcGeom_Xform_v3 | .xform | a transform | |
AbcGeom_PolyMesh_v1 | AbcGeom_GeomBase_v1 | .geom | a polygon mesh |
AbcGeom_SubD_v1 | AbcGeom_GeomBase_v1 | .geom | a subdivision surface |
AbcGeom_Points_v1 | AbcGeom_GeomBase_v1 | .geom | points, such as particles |
AbcGeom_Curve_v2 | AbcGeom_GeomBase_v1 | .geom | curves, such as hair |
AbcGeom_NuPatch_v2 | AbcGeom_GeomBase_v1 | .geom | a NURBS surface |
AbcGeom_FaceSet_v1 | AbcGeom_GeomBase_v1 | .faceset | a set of faces of its parent mesh |
AbcGeom_Camera_v1 | .geom | a camera | |
AbcGeom_Light_v1 | .geom | a light | |
AbcGeom_GeomBase_v1 | .geom | the base of the geometry schemas |
Every geometry schema can have .selfBnds (a box of two double × 3
corners: the bounds of this object), .arbGeomParams (a compound of extra
geometry parameters) and .userProperties (a compound of anything else).
An object can also have a visible property, a signed 8-bit integer:
−1 deferred to its parent, 0 hidden, 1 visible.
Geometry parameters
Values such as normals and UVs that can be attached at different rates are geometry
parameters. One that is not indexed is an array property of its own name. An indexed
one is a compound of its name holding .vals (the values) and
.indices (unsigned 32-bit integers, one per item). Their metadata has
isGeomParam=true, podName, podExtent,
arrayExtent, interpretation and geoScope:
geoScope | Value | One value per |
|---|---|---|
con (or absent) | 0 constant | object |
uni | 1 uniform | face |
var | 2 varying | vertex, interpolated linearly |
vtx | 3 vertex | vertex, interpolated by the surface |
fvr | 4 face-varying | corner of a face |
The interpretation tells what a vector of numbers is, for example
point, vector, normal or box.
Polygon mesh
| Property | Type | Contents |
|---|---|---|
P | float × 3 array, point, scope vertex | vertex positions |
.faceIndices | int32 array | the vertices of every face in turn, counted from 0 |
.faceCounts | int32 array | the number of vertices of each face |
.velocities | float × 3 array | velocity per vertex, for motion blur |
N | geometry parameter, float × 3, normal | normals |
uv | geometry parameter, float × 2 | texture coordinates |
.selfBnds | box | bounds |
Face sets are child objects of the mesh. Each has .faces (int32 array:
face numbers) and, when it is not the default, .facesExclusive (unsigned
32-bit: 0 a face may be in any number of sets, 1 in only one).
Subdivision surface
| Property | Type | Contents |
|---|---|---|
P, .faceIndices, .faceCounts, .velocities, uv | as for meshes | the control cage |
.scheme | string | the subdivision scheme |
.interpolateBoundary | int32 | how boundaries are interpolated |
.faceVaryingInterpolateBoundary | int32 | how face-varying data is interpolated at boundaries |
.faceVaryingPropagateCorners | int32 | whether face-varying corners are propagated |
.creaseIndices, .creaseLengths, .creaseSharpnesses | int32, int32, float arrays | creased edges: the vertices along each crease, the length of each crease, and its sharpness |
.cornerIndices, .cornerSharpnesses | int32, float arrays | sharp corners and their sharpness |
.holes | int32 array | faces that are holes |
Points
| Property | Type | Contents |
|---|---|---|
P | float × 3 array | positions |
.pointIds | uint64 array | an id per point, which follows it from sample to sample |
.velocities | float × 3 array | velocities |
.widths | geometry parameter, float | sizes |
Curves
| Property | Type | Contents |
|---|---|---|
P | float × 3 array | control points of all curves in turn |
nVertices | int32 array | the number of points in each curve |
curveBasisAndType | uint8 × 4 scalar | type, wrap, basis, and the basis again (below) |
.velocities | float × 3 array | velocities |
uv, N, width | geometry parameters | texture coordinates, normals, widths |
w | float array | weights of the control points |
.orders | uint8 array | the order of each curve, for variable-order curves |
.knots | float array | knot vectors |
| Byte | Field | Values |
|---|---|---|
| 0 | type | 0 cubic, 1 linear, 2 variable order |
| 1 | wrap | 0 open, 1 periodic |
| 2 | basis | 0 none, 1 Bézier, 2 B-spline, 3 Catmull–Rom, 4 Hermite, 5 power |
| 3 | basis | a copy of byte 2, kept so the layout stays the same |
NURBS patch
| Property | Type | Contents |
|---|---|---|
P | float × 3 array | control points |
w | float array | their weights |
nu, nv | int32 | control points in u and in v |
uOrder, vOrder | int32 | orders in u and v |
uKnot, vKnot | float arrays | knot vectors |
N, uv, .velocities | as for meshes | normals, texture coordinates, velocities |
trim_nloops | int32 | the number of trim loops |
trim_ncurves | int32 array | curves in each loop |
trim_n, trim_order | int32 arrays | control points and order of each trim curve |
trim_knot | float array | their knots |
trim_min, trim_max | float arrays | their parameter ranges |
trim_u, trim_v, trim_w | float arrays | their control points and weights |
Transform
| Property | Type | Contents |
|---|---|---|
.ops | uint8 × n scalar | one byte per operation, written once |
.vals | double scalar of up to 256 values, or a double array beyond that | the values of every operation’s channels, in order |
.inherits | boolean | whether the parent’s transform applies |
.animChans | uint32 array | the indices of the channels that change over time |
isNotConstantIdentity | boolean | present and true when the transform is not always the identity |
.childBnds | box | bounds of the children |
Each byte of .ops holds the operation type in its high four bits and a
hint in its low four. The operations apply in order:
| Type | Operation | Channels | Hints |
|---|---|---|---|
| 0 | scale | 3 | 0 scale |
| 1 | translate | 3 | 0 translate, 1 scale pivot point, 2 scale pivot translation, 3 rotate pivot point, 4 rotate pivot translation |
| 2 | rotate about an axis | 4: axis x, y, z and angle in degrees | 0 rotate, 1 rotate orientation |
| 3 | matrix | 16 | 0 matrix, 1 Maya shear |
| 4 | rotate about x | 1 | as rotate |
| 5 | rotate about y | 1 | as rotate |
| 6 | rotate about z | 1 | as rotate |
Camera
.core is a scalar of 16 doubles:
| Index | Value | Index | Value |
|---|---|---|---|
| 0 | focal length (millimetres) | 8 | overscan top |
| 1 | horizontal aperture (centimetres) | 9 | overscan bottom |
| 2 | horizontal film offset | 10 | f-stop |
| 3 | vertical aperture | 11 | focus distance |
| 4 | vertical film offset | 12 | shutter open |
| 5 | lens squeeze ratio | 13 | shutter close |
| 6 | overscan left | 14 | near clipping plane |
| 7 | overscan right | 15 | far clipping plane |
Optional .filmBackOps (strings naming film back operations: scale,
translate or matrix) and .filmBackChannels (their double values) adjust
the film back. The camera schema can also have .childBnds,
.arbGeomParams and .userProperties.