比較バージョン

キー

  • この行は追加されました。
  • この行は削除されました。
  • 書式設定が変更されました。

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プラグインの中から新しいローダークラスを登録する必要があります。


クラス定義

コード ブロック
languagecpp
linenumberstrue
#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に登録します。

コード ブロック
languagecpp
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変数に追加されます。