3ds Max Alembic 文件扩展名参考

3ds Max 增强了 Alembic 文件规范来存储额外的数据,并且可以更好地与其他应用程序交换数据。这些扩展名遵循 Autodesk 标准,以增强与其他 Autodesk 产品(如 Maya)的互操作性。本主题介绍 Autodesk 标准,并列出了 3ds Max 为 Alembic 文件导出而增加的特定扩展名。

一般性说明

  • 节点和属性的名称中没有空格。
  • 自定义属性存储在 .userProperties 属性下。这些属性可以位于 .geom.xform 节点下,因此没有几何体的对象也可具有自定义数据。

其他 UV 通道

  • 额外的 UV 通道存储在 .arbGeomParams 的 .geom 属性下。
  • 属性名称即为通道名称。
  • 仅导出 UV 数据,不导出 UVW。
  • .vals 是 kFloat32POD 的数组,其中范围 = 2
  • .indices 是 kUint32POD 的数组,其中范围 = 1

未导出的数据

Alembic 中不支持样条线。样条线已转换为 NURBS 以便于导出。

实例

实例需遵循 Alembic 规范才能受支持。但是,导入时不检测重复的几何体,也不将其转换为实例。

摄影机

3ds Max 场景摄影机在 Alembic 中导出。

Maya 默认会导出透视摄影机(前、透视、侧和顶)。

3ds Max 的自定义数据节点

Max 节点
节点 类型 注释
Node/Node/MaxVisibility 标量:Float32

用来容纳 Max 对象属性的容器。支持的属性包括:

{ 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 复合

用来容纳指定给基础对象的自定义属性的容器。请注意,所有 CA 类型均直接受支持,节点、纹理贴图、材质除外,其中参考名称存储为一个字符串以及仅存储选定元素索引的数组。

元数据:“max_a_uihint”附加到每个属性,以提供有关数据如何使用,以及哪些是 ParamType 和 ParamType2 枚举的提示。

Node/Node/MaxCustomAttributes_Modifier 复合 用来容纳指定给对象修改器的自定义属性的容器。同上。当前导入时不支持注释。

1.0.0 中的新增功能
节点 类型 注释
Node/Node/.userProperties/Max_CustomAttributes_BaseObject
Node/Node/.userProperties/Max_CustomAttributes_Modifier
Node/Node/.userProperties/Max_CustomAttributes_Modifier OStringProperty 包含具有此节点的层的名称
Node/Node/.geom/.arbGeomParams/Max_Map_Channel "Name" 复合 用于容纳单个通道的容器
Node/Node/.geom/.arbGeomParams/Max_Map_Channel "Name"/.vals OV2fGeomParam 或 OV3fGeomParam 的数组 包含纹理数据
Node/Node/.geom/.arbGeomParams/Max_Map_Channel "Name"/.indices OInt32Property 的数组 包含纹理索引
Node/Node/.geom/.arbGeomParams/Max_Map_Channel "Name"/Max_Map_ChannelNumber 标量 OInt32Property Max 使用的贴图通道
Node/Node/.geom/.arbGeomParams/Max_Vertex_Color_Map 复合 顶点颜色通道的容器
Node/Node/.geom/.arbGeomParams/Max_Vertex_Color_Map/.vals OC3fGeomParam 的数组 包含顶点颜色数据
Node/Node/.geom/.arbGeomParams/Max_Vertex_Color_Map/.indices OInt32Property 的数组 顶点颜色索引
Node/Node/.geom/.userProperties/Max_MaterialName OStringProperty 包含节点的材质的名称
Node/Node/.geom/.userProperties/Max_ObjectID OUInt32Property 包含节点的对象 ID
Node/Node/.geom/Max_MaterialID_# 复合 包含面集模式 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 面材质 ID 的附加属性

支持的曲线属性

节点 类型 注释
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

支持的摄影机属性

以下是支持的摄影机属性及其在 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 );

支持的细分属性

不受支持。

支持的点基本体属性

简单和粒子流粒子在 OPointsSchema 中均受支持。