3ds Max, ek veri depolamak ve diğer uygulamalarla daha iyi veri alışverişi sağlamak için Alembic dosya spesifikasyonunu geliştirir. Bu uzantılar, diğer Autodesk ürünleriyle (örneğin Maya) birlikte çalışabilirliği artırmak için Autodesk standartlarına uygundur. Bu konu, Autodesk standartlarını açıklar ve 3ds Max’in Alembic dosya dışa aktarımları için eklediği belirli uzantıları listeler.
Genel Notlar #
- Düğümlerin ve özelliklerin adlarında boşluk bulunmaz.
- Özel Nitelikler bir klasör altında saklanır. .kullanıcıÖzellikleriMülk. Bunlar iki kategori altında olabilir. .geomveya .xformDüğümler, geometrisi olmayan nesnelerin özel verilere sahip olmasını sağlar.
Ek UV Kanalları #
- Ekstra UV kanalları, .geom özelliği altında bulunan .arbGeomParams dosyasında saklanır.
- Özellik adı, kanal adıdır.
- Yalnızca UV verileri dışa aktarılır, UVW verileri dışa aktarılmaz.
- .değerlerExtent = 2 olan bir kFloat32POD dizisidir.
- .indekslerExtent = 1 olan kUint32POD’lardan oluşan bir dizidir.
Dışa Aktarılmamış Veriler #
Alembic’te spline eğrileri desteklenmemektedir. Spline eğrileri dışa aktarılmak üzere NURB formatına dönüştürülür.
Örnekler #
Örnekler, Alembic spesifikasyonuna uyduklarında desteklenir. Ancak, tekrarlanan geometriler algılanmaz ve içe aktarma sırasında örneklere dönüştürülmez.
Kameralar #
3ds Max sahne kameraları Alembic formatında dışa aktarılıyor.
Maya varsayılan olarak perspektif kameraları (ön, perspektif, yan ve üst) dışa aktarır.
3ds Max Özel Veri Düğümleri #
| Düğüm | Tip | Notlar |
|---|---|---|
| Düğüm/Düğüm/Maksimum Görünürlük | Skalar : Float32 |
Maksimum nesne özniteliklerini tutmak için kullanılan kapsayıcı. Desteklenen öznitelikler şunlardır: { 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 }, |
| Düğüm/Düğüm/MaksimumÖzelÖznitelikler_TemelNesne | Birleştirmek |
Temel nesneye atanmış Özel Nitelikleri tutmak için kullanılan kapsayıcı. Düğümler, Doku Haritaları, Malzeme (refs adı dize olarak saklanır) ve diziler (yalnızca seçilen öğenin dizinini saklar) hariç tüm Özel Nitelik türleri doğrudan desteklenir. Meta Veri: “max_a_uihint” ifadesi, verilerin nasıl kullanıldığına dair ipucu vermek için her bir özniteliğe eklenir; bunlar ParamType ve ParamType2 enum’larıdır. |
| Düğüm/Düğüm/MaksimumÖzelÖznitelikler_Değiştirici | Birleştirmek | Nesne değiştiricisine atanmış özel nitelikleri tutmak için kullanılan kapsayıcı. Yukarıdakiyle aynı. NOT: Şu anda içe aktarma işlemi desteklenmiyor. |
| Düğüm | Tip | Yorumlar |
|---|---|---|
| Düğüm/Düğüm/.userProperties/Max_CustomAttributes_BaseObject | ||
| Düğüm/Düğüm/.userProperties/Max_CustomAttributes_Modifier | ||
| Düğüm/Düğüm/.userProperties/Max_CustomAttributes_Modifier | OStringProperty | Bu düğümü içeren katmanın adını içerir. |
| Düğüm/Düğüm/.geom/.arbGeomParams/Max_Map_Channel “Adı” | Birleştirmek | Tek bir kanalı barındıran kap |
| Düğüm/Düğüm/.geom/.arbGeomParams/Max_Map_Channel “Adı”/.vals | OV2fGeomParam veya OV3fGeomParam dizisi | Doku verilerini içerir. |
| Düğüm/Düğüm/.geom/.arbGeomParams/Max_Map_Channel “Adı”/.indeksler | OInt32Property dizisi | Doku indekslerini içerir. |
| Düğüm/Düğüm/.geom/.arbGeomParams/Max_Map_Channel “Adı”/Max_Map_ChannelNumber | Skalar OInt32Özelliği | Max tarafından kullanılan harita kanalı |
| Düğüm/Düğüm/.geom/.arbGeomParams/Max_Vertex_Color_Map | Birleştirmek | Köşe rengi kanalı için kapsayıcı |
| Düğüm/Düğüm/.geom/.arbGeomParams/Max_Vertex_Color_Map/.vals | OC3fGeomParam dizisi | Köşe rengi verilerini içerir. |
| Düğüm/Düğüm/.geom/.arbGeomParams/Max_Vertex_Color_Map/.indeksler | OInt32Property dizisi | Köşe rengi indeksleri |
| Düğüm/Düğüm/.geom/.userProperties/Maksimum_MalzemeAdı | OStringProperty | Düğümün malzemesinin adını içerir. |
| Düğüm/Düğüm/.geom/.userProperties/Max_ObjectID | OUInt32Property | Düğümün nesne kimliğini içerir. |
| Düğüm/Düğüm/.geom/Maksimum_MalzemeID_# | Birleştirmek | OFaceSetSchema yüz seti şemasını içerir. |
| Düğüm/Düğüm/.geom/Maksimum_MalzemeID_#/.yüzkümesi | ||
| Düğüm/Düğüm/.geom/Max_MaterialID_#/.faceset/.selfBnds | ||
| Düğüm/Düğüm/.geom/Max_MaterialID_#/.faceset/.faces | ||
| Düğüm/Düğüm/.geom/Maksimum_Malzeme_ID_#/Maksimum_Malzeme_ID | OInt32Özelliği | Yüzey malzemesi kimliği için ek özellik |
Desteklenen eğrilerin özellikleri #
| Düğüm | Tip | Yorumlar |
|---|---|---|
| Bezier Adı:# | ||
| BezierAdı/BezierAdı:#/.geom/ | ||
| BezierName/BezierName:#/.geom/.selfBnds | ||
| BezierAdı/BezierAdı:#/.geom/.P | ||
| BezierName/BezierName:#/.geom/nVertices | ||
| BezierName/BezierName:#/.geom/curveBasisAndType | ||
| BezierName/BezierName:#/.geom/width | ||
| BezierAdı/BezierAdı:#/MaxLayerName | ||
| BezierName/BezierName:#/\MaxObjectID | ||
| Düğüm/NURBSAdı | ||
| Düğüm/NURBSAdı/.geom/ | ||
| Düğüm/NURBSAdı/.geom/.selfBnds | ||
| Düğüm/NURBSAdı/.geom/.P | ||
| Düğüm/NURBSAdı/.geom/nKöşeler | ||
| Düğüm/NURBSAdı/.geom/eğriTemeliVeTipi | ||
| Düğüm/NURBSAdı/.geom/genişlik | ||
| Düğüm/NURBSAdı/MaksimumKatmanAdı | ||
| Düğüm/NURBSAdı/\MaksimumNesneID |
Desteklenen kamera özellikleri #
Aşağıda Max’te desteklenen kamera özellikleri ve bunların nasıl hesaplandığı açıklanmıştır.
KameraDurumu lKameraDurumu; Aralık 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 ); çift diyafram genişliği = 3,6f; Çift diyafram yüksekliği = 2,4f; eğer (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(); çift lOdakUzunluğu = OdakUzunluğunu Hesapla( lGörüşAçısı, lDireksiyonGenişliği, 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);
Desteklenen Noktalar Temel Özellikler #
Simple ve PFlow parçacıkları OPointsSchema aracılığıyla desteklenmektedir.
