3ds Max augments the Alembic file specification to store extra data and enable better data exchange with other applications. These extensions follow Autodesk standards, to enhance interop with other Autodesk products (such as Maya). This topic describes the Autodesk standards, and lists the specific extensions 3ds Max populates for Alembic file exports.
Splines are not supported in Alembic. Splines are converted to NURBs for export.
Instances are supported when they follow the Alembic specification. However, repeated geometry is not detected and converted into instances on import.
3ds Max scene cameras are exported in Alembic.
Maya exports perspective cameras (front, perspective, side, and top) by default.
Node | Type | Notes |
---|---|---|
Node/Node/MaxVisibility | Scalar : Float32 |
Container to hold Max Object Attributes. Supported attributes are: { kHide, _T("Hide"), CustomAttribute::DataType::kBool}, { kFreeze, _T("Freeze"), CustomAttribute::DataType::kBool}, { kSeeThrough, _T("SeeThrough"), CustomAttribute::DataType::kBool}, { kDisplayAsBox,_T("DisplayAsBox"), CustomAttribute::DataType::kBool }, { kBackfaceCull,_T("BackfaceCull"), CustomAttribute::DataType::kBool }, { kEdgesOnly,_T("EdgesOnly"), CustomAttribute::DataType::kBool}, { kVertexTicks,_T("VertexTicks"), CustomAttribute::DataType::kBool}, kMotionPaths,_T("MotionPaths"), CustomAttribute::DataType::kBool}, { kIgnoreExtents,_T("IgnoreExtents"), CustomAttribute::DataType::kBool}, { kShowFrozenInGray,_T("ShowFrozenInGray"), CustomAttribute::DataType::kBool}, { kNeverDegrade,_T("NeverDegrade"), CustomAttribute::DataType::kBool}, { kRenderable,_T("Renderable"), CustomAttribute::DataType::kBool}, { kInheritVisibility,_T("InheritVisibility"), CustomAttribute::DataType::kBool }, { kVisibleToCamera,_T("VisibleToCamera"), CustomAttribute::DataType::kBool}, { kVisibleToReflection,_T("VisibleToReflection"), CustomAttribute::DataType::kBool }, { kReceiveShadows,_T("ReceiveShadows"), CustomAttribute::DataType::kBool}, { kCastShadows,_T("CastShadows"), CustomAttribute::DataType::kBool}, { kApplyAtmospherics,_T("ApplyAtmospherics"), CustomAttribute::DataType::kBool}, { kRenderOccludedObjects,_T("RenderOccludedObjects"), CustomAttribute::DataType::kBool }, { kDisplayByLayer,_T("DisplayByLayer"), CustomAttribute::DataType::kBool }, { kRenderingByLayer,_T("RenderingByLayer"), CustomAttribute::DataType::kBool }, { kMotionBlurByLayer,_T("MotionBlurByLayer"), CustomAttribute::DataType::kBool }, { kMotionBlurEnabled,_T("MotionBlurEnabled"), CustomAttribute::DataType::kBool}, { kMotionBlurMultiplier,_T("MotionBlurMultiplier"), CustomAttribute::DataType::kFloat}, { kMotionBlurType,_T("MotionBlurType"), CustomAttribute::DataType::kInt }, { kObjectID,_T("ObjectID"), CustomAttribute::DataType::kULong }, { kUserPropBuffer,_T("UserPropBuffer"), CustomAttribute::DataType::kString }, |
Node/Node/MaxCustomAttributes_BaseObject | Compound |
Container to hold Custom Attributes assigned to the base object. Note all CA types are supported directly except Nodes, Texmaps, Material which the refs name is stored as a string and arrays which only stores the selected element index. MetaData : "max_a_uihint" is attached to each attribute to give a hint as to how the data is used which are the ParamType and ParamType2 enums. |
Node/Node/MaxCustomAttributes_Modifier | Compound | Container to hold Custom Attributes assigned to the objects modifier. Same as above. NOTE not currently supported on import. |
Node | Type | Comments |
---|---|---|
Node/Node/.userProperties/Max_CustomAttributes_BaseObject | ||
Node/Node/.userProperties/Max_CustomAttributes_Modifier | ||
Node/Node/.userProperties/Max_CustomAttributes_Modifier | OStringProperty | Contains the name of the layer that contains this Node |
Node/Node/.geom/.arbGeomParams/Max_Map_Channel "Name" | Compound | Container that holds an individual channel |
Node/Node/.geom/.arbGeomParams/Max_Map_Channel "Name"/.vals | Array of OV2fGeomParam or OV3fGeomParam | Contains the texture data |
Node/Node/.geom/.arbGeomParams/Max_Map_Channel "Name"/.indices | Array of OInt32Property | Contains the texture indices |
Node/Node/.geom/.arbGeomParams/Max_Map_Channel "Name"/Max_Map_ChannelNumber | Scalar OInt32Property | The map channel used by Max |
Node/Node/.geom/.arbGeomParams/Max_Vertex_Color_Map | Compound | Container for the vertex color channel |
Node/Node/.geom/.arbGeomParams/Max_Vertex_Color_Map/.vals | Array of OC3fGeomParam | Contains the vertex color data |
Node/Node/.geom/.arbGeomParams/Max_Vertex_Color_Map/.indices | Array of OInt32Property | The vertex color indices |
Node/Node/.geom/.userProperties/Max_MaterialName | OStringProperty | Contains the name of the material of the Node |
Node/Node/.geom/.userProperties/Max_ObjectID | OUInt32Property | Contains the object ID of the Node |
Node/Node/.geom/Max_MaterialID_# | Compound | Contains the faceset schema OFaceSetSchema |
Node/Node/.geom/Max_MaterialID_#/.faceset | ||
Node/Node/.geom/Max_MaterialID_#/.faceset/.selfBnds | ||
Node/Node/.geom/Max_MaterialID_#/.faceset/.faces | ||
Node/Node/.geom/Max_MaterialID_#/Max_MaterialID | OInt32Property | Extra property for the face material ID |
Node | Type | Comments |
---|---|---|
BezierName/BezierName:# | ||
BezierName/BezierName:#/.geom/ | ||
BezierName/BezierName:#/.geom/.selfBnds | ||
BezierName/BezierName:#/.geom/.P | ||
BezierName/BezierName:#/.geom/nVertices | ||
BezierName/BezierName:#/.geom/curveBasisAndType | ||
BezierName/BezierName:#/.geom/width | ||
BezierName/BezierName:#/MaxLayerName | ||
BezierName/BezierName:#/\MaxObjectID | ||
Node/NURBSName | ||
Node/NURBSName/.geom/ | ||
Node/NURBSName/.geom/.selfBnds | ||
Node/NURBSName/.geom/.P | ||
Node/NURBSName/.geom/nVertices | ||
Node/NURBSName/.geom/curveBasisAndType | ||
Node/NURBSName/.geom/width | ||
Node/NURBSName/MaxLayerName | ||
Node/NURBSName/\MaxObjectID |
Below are the camera properties supported and how they are computed in Max
CameraState lCameraState; Interval lValid( TIME_NegInfinity, TIME_PosInfinity ); RefResult lRefResult; lRefResult = lGenCamera->EvalCameraState( t, lValid, &lCameraState ); Interface *lMaxInterface = GetCOREInterface(); double lLensSqueeenzeRatio = lMaxInterface ? lMaxInterface->GetRendApect() : 1.0; mSample.setLensSqueezeRatio( lLensSqueeenzeRatio ); double lApertureWidth = 3.6f; double lApertureHeight = 2.4f; if ( lMaxInterface ) { lApertureWidth = lMaxInterface->GetRendApertureWidth() * MATH_MM_TO_CM; float lImageAspect = lMaxInterface->GetRendImageAspect(); if ( lImageAspect <= 0.0f ) { lImageAspect = 0.001f; } lApertureHeight = lApertureWidth * ( 1.0 / lImageAspect ); } mSample.setHorizontalAperture( lApertureWidth ); mSample.setVerticalAperture( lApertureHeight ); double lAngleOfView = lCameraState.fov * MATH_RAD_TO_DEG; int lFovType = lGenCamera->GetFOVType(); double lFocalLength = CalculateFocalLength( lAngleOfView, lApertureWidth, lApertureHeight, lFovType, lLensSqueeenzeRatio ) * ( 1.0 / MATH_MM_TO_CM ); mSample.setFocalLength( lFocalLength ); mSample.setNearClippingPlane( lCameraState.nearRange ); mSample.setFarClippingPlane( lCameraState.farRange ); mSample.setFStop( lGenCamera->GetDOFFStop( t ) ); mSample.setFocusDistance( lCameraState.tdist );
Not supported.
Simple and PFlow Particles are supported through the OPointsSchema.