Referência de extensão de arquivo Alembic no 3ds Max

O 3ds Max aumenta a especificação do arquivo Alembic para armazenar dados extras e aprimora o intercâmbio de dados com outros aplicativos. Essas extensões seguem os padrões Autodesk, para aprimorar a interoperabilidade com outros produtos Autodesk (como o Maya). Este tópico descreve os padrões Autodesk e lista as extensões específicas que o 3ds Max usa para exportações de arquivos Alembic.

Observações gerais

  • Os nomes de nós e de propriedades não têm espaços.
  • Atributos personalizados são armazenados em uma propriedade .userProperties. Eles podem estar sob o nó .geom ou .xform, para permitir que os objetos sem geometria tenham dados personalizados.

Canais de UV adicionais

  • Canais de UV extras são armazenados em .arbGeomParams, sob a propriedade .geom.
  • O nome da propriedade é o nome do canal.
  • São exportados somente dados de UV, não de UVW.
  • .vals é uma matriz de kFloat32POD com Extent = 2
  • .indices é uma matriz de kUint32POD com Extent = 1

Dados não exportados

Splines não são compatíveis com Alembic. As splines são convertidas em NURBs para exportação.

Instâncias

Instâncias são compatíveis, se seguirem a especificação do Alembic. No entanto, geometria repetida não é detectada nem convertida em instâncias na importação.

Câmeras

Câmeras de cena do 3ds Max são exportadas no Alembic.

O Maya Exporta câmeras em perspectiva (frontal, perspectiva, lateral e superior) por padrão.

Nós de dados personalizados do 3ds Max

Nós do Max
Tipo Observações
Node/Node/MaxVisibility Scalar : Float32

Contêiner para Atributos de objetos do Max. Atributos compatíveis são:

{ 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 Composto

Contêiner para Atributos personalizados atribuídos ao objeto de base. Observação: Todos os tipos de CA são diretamente compatíveis, exceto Nós, Texmaps, Material cujo nome de referências seja armazenado como sequência de caracteres e matrizes que só armazenem o índice de elemento selecionado.

Metadados: "max_a_uihint" é anexado a cada atributo para fornecer uma referência sobre como os dados são usados, com as enumerações ParamType e ParamType2.

Node/Node/MaxCustomAttributes_Modifier Composto Contêiner para Atributos personalizados atribuídos ao modificador de objetos. Como acima. OBSERVAÇÃO: No momento, incompatível na importação.

Novo no 1.0.0
Tipo Comentários
Node/Node/.userProperties/Max_CustomAttributes_BaseObject
Node/Node/.userProperties/Max_CustomAttributes_Modifier
Node/Node/.userProperties/Max_CustomAttributes_Modifier OStringProperty Contém o nome da camada que contém este Nó.
Node/Node/.geom/.arbGeomParams/Max_Map_Channel "Name" Composto Contêiner que armazena um canal individual.
Node/Node/.geom/.arbGeomParams/Max_Map_Channel "Name"/.vals Matriz de OV2fGeomParam ou OV3fGeomParam Contém os dados de textura
Node/Node/.geom/.arbGeomParams/Max_Map_Channel "Name"/.indices Matriz de OInt32Property Contém os índices de textura.
Node/Node/.geom/.arbGeomParams/Max_Map_Channel "Name"/Max_Map_ChannelNumber Scalar OInt32Property O canal de mapa utilizado pelo Max.
Node/Node/.geom/.arbGeomParams/Max_Vertex_Color_Map Composto Contêiner para o canal de cor de vértice.
Node/Node/.geom/.arbGeomParams/Max_Vertex_Color_Map/.vals Matriz de OC3fGeomParam Contém os dados de cor do vértice.
Node/Node/.geom/.arbGeomParams/Max_Vertex_Color_Map/.indices Matriz de OInt32Property Índices de cor do vértice.
Node/Node/.geom/.userProperties/Max_MaterialName OStringProperty Contém o nome do material do Nó.
Node/Node/.geom/.userProperties/Max_ObjectID OUInt32Property Contém o ID de objeto do Nó.
Node/Node/.geom/Max_MaterialID_# Composto Contém o esquema de conjuntos de faces 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 Propriedade adicional para o ID de material da face

Propriedades de curvas compatíveis

Tipo Comentários
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

Propriedades de câmera compatíveis

Abaixo estão as propriedades de câmera compatíveis e como são calculadas no 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 );

Propriedades SubDiv compatíveis

Não compatíveis.

Propriedades de primitivo de pontos compatíveis

Partículas Simples e PFlow são compatíveis por meio do OPointsSchema.