Cortex
10.0.0-a4
|
#include <SmoothSkinningData.h>
Public Member Functions | |
IE_CORE_DECLAREOBJECT (SmoothSkinningData, Data) | |
const StringVectorData * | influenceNames () const |
Returns the names of the influence objects, it is used for reference. | |
StringVectorData * | influenceNames () |
const M44fVectorData * | influencePose () const |
M44fVectorData * | influencePose () |
const IntVectorData * | pointIndexOffsets () const |
IntVectorData * | pointIndexOffsets () |
const IntVectorData * | pointInfluenceCounts () const |
IntVectorData * | pointInfluenceCounts () |
const IntVectorData * | pointInfluenceIndices () const |
IntVectorData * | pointInfluenceIndices () |
const FloatVectorData * | pointInfluenceWeights () const |
FloatVectorData * | pointInfluenceWeights () |
SmoothSkinningData (ConstStringVectorDataPtr influenceNames, ConstM44fVectorDataPtr influencePose, ConstIntVectorDataPtr pointIndexOffsets, ConstIntVectorDataPtr pointInfluenceCounts, ConstIntVectorDataPtr pointInfluenceIndices, ConstFloatVectorDataPtr pointInfluenceWeights) | |
Assign-All Constructor. | |
SmoothSkinningData () | |
Default constructor. | |
void | validate () const |
raises an exception if the smooth skinning data is not valid | |
![]() | |
IE_CORE_DECLAREABSTRACTOBJECT (Data, Object) | |
![]() | |
IE_CORE_DECLARERUNTIMETYPED (Object, RunTimeTyped) | |
ObjectPtr | copy () const |
void | copyFrom (const Object *other) |
void | save (IndexedIOPtr ioInterface, const IndexedIO::EntryID &name) const |
virtual bool | isEqualTo (const Object *other) const =0 |
virtual bool | isNotEqualTo (const Object *other) const |
bool | operator== (const Object &other) const |
Calls isEqualTo() for people who prefer to use the operator syntax. | |
bool | operator!= (const Object &other) const |
Calls isNotEqualTo() for people who prefer to use the operator syntax. | |
size_t | memoryUsage () const |
Returns the number of bytes this instance occupies in memory. | |
MurmurHash | hash () const |
virtual void | hash (MurmurHash &h) const =0 |
![]() | |
IE_CORE_DECLAREMEMBERPTR (RunTimeTyped) | |
virtual TypeId | typeId () const |
virtual const char * | typeName () const |
virtual bool | isInstanceOf (TypeId typeId) const |
virtual bool | isInstanceOf (const char *typeName) const |
![]() | |
IE_CORE_DECLAREMEMBERPTR (RefCounted) | |
void | addRef () const |
Add a reference to the current object. | |
void | removeRef () const |
Remove a reference from the current object. | |
RefCount | refCount () const |
Returns the current reference count. | |
Additional Inherited Members | |
![]() | |
typedef ObjectPtr(* | CreatorFn) (void *data) |
![]() | |
typedef RefCounted | BaseClass |
A typedef for the class this class derives from. All RunTimeTyped classes define this typedef. | |
![]() | |
typedef size_t | RefCount |
![]() | |
static void | registerType (TypeId typeId, const std::string &typeName, CreatorFn creator, void *data=nullptr) |
Register a new Object-derived type with the system. The specified void* data is passed into the creator function. | |
static bool | isType (TypeId typeId) |
Returns true if typeId is a valid registered Object type. | |
static bool | isType (const std::string &typeName) |
Returns true if typeName is a valid registered Object type. | |
static bool | isAbstractType (TypeId typeId) |
static bool | isAbstractType (const std::string &typeName) |
As above but taking a type name. | |
static ObjectPtr | create (TypeId typeId) |
static ObjectPtr | create (const std::string &typeName) |
static ObjectPtr | load (ConstIndexedIOPtr ioInterface, const IndexedIO::EntryID &name) |
![]() | |
static TypeId | staticTypeId () |
Returns the TypeId for this class, without needing an instance. | |
static const char * | staticTypeName () |
Returns the type name for this class, without needing an instance. | |
static TypeId | baseTypeId () |
static const char * | baseTypeName () |
static bool | inheritsFrom (TypeId typeId) |
Returns true if this class inherits from the specified type. | |
static bool | inheritsFrom (const char *typeName) |
Returns true if this class inherits from the specified type. | |
static bool | inheritsFrom (TypeId type, TypeId baseType) |
Returns true if type inherits from baseType. | |
static bool | inheritsFrom (const char *typeName, const char *baseTypeName) |
Returns true if typeName inherits from baseTypeName. | |
static TypeId | baseTypeId (TypeId typeId) |
Returns the base type of the given type, or InvalidTypeId if no such base exists. | |
static const std::vector< TypeId > & | baseTypeIds (TypeId typeId) |
static const std::set< TypeId > & | derivedTypeIds (TypeId typeId) |
static TypeId | typeIdFromTypeName (const char *typeName) |
static const char * | typeNameFromTypeId (TypeId typeId) |
static void | registerType (TypeId derivedTypeId, const char *derivedTypeName, TypeId baseTypeId) |
Allows external modules to register their own type ids. | |
![]() | |
typedef std::map< TypeId, TypeId > | BaseTypeRegistryMap |
typedef std::map< TypeId, std::vector< TypeId > > | BaseTypesRegistryMap |
typedef std::map< TypeId, std::set< TypeId > > | DerivedTypesRegistryMap |
typedef tbb::spin_rw_mutex | Mutex |
typedef std::map< TypeId, std::string > | TypeIdsToTypeNamesMap |
typedef std::map< std::string, TypeId > | TypeNamesToTypeIdsMap |
![]() | |
virtual void | copyFrom (const Object *other, CopyContext *context)=0 |
IE_CORE_DECLAREPTR (LoadContext) | |
virtual void | save (SaveContext *context) const =0 |
virtual void | load (LoadContextPtr context)=0 |
virtual void | memoryUsage (MemoryAccumulator &accumulator) const =0 |
![]() | |
static BaseTypeRegistryMap & | baseTypeRegistry () |
static DerivedTypesRegistryMap & | derivedTypesRegistry () |
static BaseTypesRegistryMap & | completeBaseTypesRegistry () |
static DerivedTypesRegistryMap & | completeDerivedTypesRegistry () |
static void | derivedTypeIdsWalk (TypeId typeId, std::set< TypeId > &) |
static TypeIdsToTypeNamesMap & | typeIdsToTypeNames () |
static TypeNamesToTypeIdsMap & | typeNamesToTypeIds () |
![]() | |
static Mutex | g_baseTypeIdsMutex |
static Mutex | g_derivedTypeIdsMutex |
Defines a data class for storing smooth skinning data along with influenceNames and their respective pre-bind matrices. SmoothSkinningData stores bind information for points that can be deformed using multiple weighted transforms. The most common usecase is probably smooth skinning / smooth binding of points on a geometry to a skeleton hierarchy.
Consider the following example for some valid SmoothSkinningData:
influenceNames = [ infA, infB ] (this is a StringVector) influencePose = [ trfA, trfB ] (this is a M44fVector) pointInfluenceCounts = [ 1, 1, 2, 2, 1 ] pointIndexOffsets = [ 0, 1, 2, 4, 6 ] pointInfluenceIndices = [ 0, 0, 0, 1, 1, 0, 1 ] pointInfluenceWeights = [ 1.0, 1.0, 0.5, 0.5, 0.1, 0.9, 1.0 ]
The above SmoothSkinningData (SSD) stores smooth skinning information for 5 points (P) influenced by 2 transforms. The number of points is only implicitly stored and equals the length of the 'pointIndexOffsets' and 'pointInfluenceCounts' arrays. For fast access, the weighting information, which is being held in 'pointInfluenceIndices' and 'pointInfluenceWeights', is stored in flat arrays. To retrieve this information for a specific point, one has to use two helper arrays: 'pointInfluenceCounts' indicates how many influences do influence the point. 'pointIndexOffsets' stores for each point where in the weighting info arrays the data specific to the point is stored.
So if we wanted to the skinning info for the 4th point, we'd do the following:
pid = 3 pio = pointIndexOffsets[pid] // = 4 pic = pointInfluenceCounts[pid] // = 2
With this information we can now index into the skinning info arrays
for (i = pio; i < pio + pic; i++ ) { pii.push_back( pointInfluenceIndices[i] ) piw.push_back( pointInfluenceWeights[i] ) }
This gives us the indices of the influences on the point (pii = [1, 0]) and their weighting ( piw = [0.1, 0.9] ). The 'pointInfluenceIndices' are referring to the index of our data in the 'influencePose' and 'influenceNames' arrays. In our example, the 4th point is influenced by 0.9*trfA and 0.1*trfB. The 2nd point is influenced by 1.0*trfA and the third point is influenced by 50% from both infA and infB.
const M44fVectorData* IECore::SmoothSkinningData::influencePose | ( | ) | const |
Returns a pose (an array of matrices) describing the pre-bind, world-space transformation of the influence objects. This array has the same length than'influenceNames'.
const IntVectorData* IECore::SmoothSkinningData::pointIndexOffsets | ( | ) | const |
Returns an array of indices indicating where in the 'pointInfluenceIndices' and 'pointInfluenceWeights' arrays the smooth skinning information for the particular point can be found. The array holds one entry per deformable point.
const IntVectorData* IECore::SmoothSkinningData::pointInfluenceCounts | ( | ) | const |
Returns an array of counts (one entry per point) indicating how many entries in the 'pointInfluenceIndices' and 'pointInfluenceWeights' arrays from the respective 'pointIndexOffsets' are holding the smooth skinning information for the point. The array holds one entry per deformable point.
const IntVectorData* IECore::SmoothSkinningData::pointInfluenceIndices | ( | ) | const |
Returns an array that holds all influence indices for all points. The length of the array matches the 'pointInfluenceWeights'. The indices are refering to the respective index in the 'influencePose' and 'influenceNames' arrays.
const FloatVectorData* IECore::SmoothSkinningData::pointInfluenceWeights | ( | ) | const |
Returns an array that holds all influence weights for all points. The length of the array matches the 'pointInfluenceIndices' length.