If you want use a custom skeleton format you can extend atoms with a new skeleton loader. To add a new skeleton format you must create a new class definition extending the Atoms::BaseSkeletonLoader. Then you must register the new loader class from inside an atoms plugin.
Class definitionCustom Skeletonフォーマットを使用したい場合は、新しいSkeleton Loaderを使用してAtomsを拡張することができます。新しいSkeletonフォーマットを追加するには、
Atoms :: BaseSkeletonLoaderを拡張した新しいクラス定義を作成する必要があります。
その後、Atomsプラグインの中から新しいローダークラスを登録する必要があります。
クラス定義
コード ブロック | ||||
---|---|---|---|---|
| ||||
#include <Atoms/Globals.h> #include <AtomsCore/Metadata/MapMetadata.h> #include <Atoms/Loaders/BaseSkeletonLoader.h> #define kFooSkeletonLoaderId 101 namespace Atoms { class ATOMSPLUGIN_EXPORT FooSkeletonLoader : public BaseSkeletonLoader { public: //! Type string /*! \return Class type string */ std::string typeStr() const; //! Class static type string. This is also the file extension of your file format static std::string const staticTypeStr; //! Type id /*! \return Class type id */ unsigned int typeId() const; //! Class static type id static const unsigned int staticTypeId; //! Constructor FooMeshLoader(); //! Destructor ~FooMeshLoader(); //! Creator function /*! \return Return a new AlembicMeshLoader object */ static AtomsPtr<BaseMeshLoader> creator(); //! load /*! Load an atoms file */ AtomsPtr<AtomsCore::MapMetadata> load(const std::string &filePath, const std::string& filter = "*"); }; } namespace Atoms { std::string const FooSkeletonLoader::staticTypeStr = "foo"; // the file extension std::string FooSkeletonLoader::typeStr() const { return FooSkeletonLoader::staticTypeStr; } const unsigned int FooSkeletonLoader::staticTypeId = kFooSkeletonLoaderId ; unsigned int FooSkeletonLoader::typeId() const { return FooSkeletonLoader::staticTypeId; } FooSkeletonLoader::FooSkeletonLoader() : BaseMeshLoader() { } FooMeshLoader::~FooMeshLoader() { } AtomsPtr<BaseMeshLoader> FooSkeletonLoader::creator() { return std::dynamic_pointer_cast<BaseSkeletonLoader>(std::make_shared<FooSkeletonLoader>()); } AtomsCore::Skeleton FooSkeletonLoader::load(const std::string &filePath) { // This is the actual loader that atoms use to load the atomsskel // Change it to support your custom format // If the skeleton is not valid, always return a valid skeleton like in this example AtomsCore::Skeleton skel(1); AtomsCore::Archive skinGeoArc; if (!skinGeoArc.readFromFile(filePath)) { AtomsUtils::Logger::warning() << "Could not read " << filePath; AtomsUtils::Logger::warning() << "Creating default skeleton"; skel.addPelvis(0); skel.setRoot(0); skel.joint(0).setName("root"); skel.buildIkData(); skel.buildDetachedJointsList(); skel.buildJointNameMap(); return skel; } skinGeoArc >> skel; return std::move(skel); } } |
Atoms calls the load function to read the new skeleton format. This function must fill and return a Skeleton object.
Register the new loader to atomsAtomsは、load関数を呼び出して新しいSkeletonフォーマットを読み込みます。この関数は、Skeletonオブジェクトを入れて返す必要があります。
新しいloaderをAtomsに登録します。
コード ブロック | ||
---|---|---|
| ||
extern "C" { ATOMSPLUGIN_EXPORT bool initializePlugin() { SkeletonLoaderFactory& factory = SkeletonLoaderFactory::instance(); factory.registerSkeletonLoader(FooSkeletonLoader::staticTypeStr, &FooSkeletonLoader::creator); } } |
Compile the behaviour module
...
Behaviour モジュールをコンパイルする
loaderは、プロシージャルでも使用されているので、新しいプラグインを2回コンパイルする必要があります。 Atoms.so / lib library. The second time link to the libライブラリへの初めてのリンクと、 2回目はAtomsProcedural.so / lib library.libライブラリにリンクします。
Windows:
In visual studio create a dll projects, add the atoms, tbb and openexr includes and add
BUILD_ATOMSPLUGIN,WIN,Visual Studioでdllプロジェクトを作成し、atom、tbbおよびopenexr includesを追加して、BUILD_ATOMSPLUGIN、WIN、_CRT_SECUREECURE_NO_WARNINGS,WARNINGS、_CRT_NONSTDCN NSTDC_NO_DEPRECATE,FBXSDK_SHARED
to the preprocessor definitions.
Then create another target and link AtomsProcedural instead to link Atoms.DEPRECATE、およびFBXSDK SHAREDをプリプロセッサ定義に追加します。
次に、別のターゲットを作成し、Atomsをリンクする代わりにAtomsProceduralをリンクします。
Linux:
Compile as a shared object adding the atoms, tbb and opendexr includes and BUILD_ATOMSPLUGIN to the preprocessor definitions.
Then create another target and link AtomsProcedural instead to link Atoms.
Use the plugin
Add to the ATOMS_PLUGINS_PATH environment variable, the folder where the library compiles against Atoms is located, while add to the ATOMSAtoms、tbbおよびopendexr includesとBUILD_ATOMSPLUGINをプリプロセッサ定義に追加して、共有オブジェクトとしてコンパイルします。
次に、別のターゲットを作成し、Atomsをリンクする代わりにAtomsProceduralをリンクします。
プラグインの使用
ATOMS_PLUGINS_PATH環境変数では、Atomsに対して、ライブラリがコンパイルされるフォルダが追加され、AtomsProceduralに対して、コンパイルされたライブラリが配置されるパスがATOMS_PROCEDURAL_PLUGINS_PATH env variable the path where the library compiled against AtomsProcedural is locatedATH env変数に追加されます。