SL-234 WIP - Track which joints are part of base skeleton, remap non-base ones when not being rendered.

master
Brad Payne (Vir Linden) 2015-10-16 15:05:29 -04:00
parent a16a6034c2
commit 58992e2cb4
9 changed files with 401 additions and 173 deletions

View File

@ -87,6 +87,7 @@ public:
private:
std::string mName;
std::string mSupport;
BOOL mIsJoint;
LLVector3 mPos;
LLVector3 mRot;
@ -605,6 +606,7 @@ BOOL LLAvatarAppearance::setupBone(const LLAvatarBoneInfo* info, LLJoint* parent
joint->setRotation(mayaQ(info->mRot.mV[VX], info->mRot.mV[VY],
info->mRot.mV[VZ], LLQuaternion::XYZ));
joint->setScale(info->mScale);
joint->setSupport(info->mSupport);
if (info->mIsJoint)
{
@ -1564,6 +1566,13 @@ BOOL LLAvatarBoneInfo::parseXml(LLXmlTreeNode* node)
return FALSE;
}
static LLStdStringHandle support_string = LLXmlTree::addAttributeString("support");
if (!node->getFastAttributeString(support_string,mSupport))
{
LL_WARNS() << "Bone without support" << LL_ENDL;
mSupport = "base";
}
if (mIsJoint)
{
static LLStdStringHandle pivot_string = LLXmlTree::addAttributeString("pivot");

View File

@ -108,6 +108,7 @@ void LLJoint::init()
mXform.setScale(LLVector3(1.0f, 1.0f, 1.0f));
mDirtyFlags = MATRIX_DIRTY | ROTATION_DIRTY | POSITION_DIRTY;
mUpdateXform = TRUE;
mSupport = SUPPORT_BASE;
}
LLJoint::LLJoint() :
@ -169,6 +170,27 @@ void LLJoint::setup(const std::string &name, LLJoint *parent)
}
}
//-----------------------------------------------------------------------------
// setSupport()
//-----------------------------------------------------------------------------
void LLJoint::setSupport(const std::string& support_name)
{
if (support_name == "extended")
{
setSupport(SUPPORT_EXTENDED);
}
else if (support_name == "base")
{
setSupport(SUPPORT_BASE);
}
else
{
LL_WARNS() << "unknown support string " << support_name << LL_ENDL;
setSupport(SUPPORT_BASE);
}
}
//-----------------------------------------------------------------------------
// touch()
// Sets all dirty flags for all children, recursively.

View File

@ -91,9 +91,17 @@ public:
POSITION_DIRTY = 0x1 << 2,
ALL_DIRTY = 0x7
};
public:
enum SupportCategory
{
SUPPORT_BASE,
SUPPORT_EXTENDED
};
protected:
std::string mName;
SupportCategory mSupport;
// parent joint
LLJoint *mParent;
@ -144,6 +152,11 @@ public:
const std::string& getName() const { return mName; }
void setName( const std::string &name ) { mName = name; }
// get/set support
SupportCategory getSupport() const { return mSupport; }
void setSupport( const SupportCategory& support) { mSupport = support; }
void setSupport( const std::string& support_string);
// getParent
LLJoint *getParent() { return mParent; }

View File

@ -1257,7 +1257,8 @@ void LLDAELoader::processDomModel(LLModel* model, DAE* dae, daeElement* root, do
name = mJointMap[name];
}
model->mSkinInfo.mJointNames.push_back(name);
model->mSkinInfo.mJointMap[name] = j;
// BENTO this does not appear to be used anywhere.
// model->mSkinInfo.mJointMap[name] = j;
}
}
else
@ -1275,7 +1276,8 @@ void LLDAELoader::processDomModel(LLModel* model, DAE* dae, daeElement* root, do
name = mJointMap[name];
}
model->mSkinInfo.mJointNames.push_back(name);
model->mSkinInfo.mJointMap[name] = j;
// BENTO not used?
// model->mSkinInfo.mJointMap[name] = j;
}
}
}

View File

@ -46,7 +46,9 @@ public:
std::vector<std::string> mJointNames;
std::vector<LLMatrix4> mInvBindMatrix;
std::vector<LLMatrix4> mAlternateBindMatrix;
std::map<std::string, U32> mJointMap;
std::vector<U32> mJointRemap;
// BENTO not used?
//std::map<std::string, U32> mJointMap;
LLMeshSkinInfo() { }
LLMeshSkinInfo(LLSD& data);

View File

@ -3492,6 +3492,17 @@
<key>Value</key>
<integer>0</integer>
</map>
<key>IncludeEnhancedSkeleton</key>
<map>
<key>Comment</key>
<string>Include extended skeleton joints when rendering skinned meshes.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>MinObjectsForUnlinkConfirm</key>
<map>
<key>Comment</key>

View File

@ -1,64 +1,63 @@
<?xml version="1.0" encoding="US-ASCII" standalone="yes"?>
<linden_skeleton version="1.0" num_bones="152" num_collision_volumes="26">
<bone name="mPelvis" pos="0.000 0.000 1.067" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 0.000000 1.067015">
<collision_volume name="PELVIS" pos = "-0.01 0 -0.02" rot="0.000000 8.00000 0.000000" scale="0.12 0.16 0.17"/>
<collision_volume name="BUTT" pos = "-0.06 0 -0.1" rot="0.000000 0.00000 0.000000" scale="0.1 0.1 0.1"/>
<bone name="mTorso" pos="0.000 0.000 0.084" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 0.000000 0.084073">
<collision_volume name="BELLY" pos = "0.028 0 0.04" rot="0.000000 8.00000 0.000000" scale="0.09 0.13 0.15"/>
<collision_volume name="LOWER_BACK" pos = "0.0 0.0 0.023" rot="0.000000 0.00000 0.000000" scale="0.09 0.13 0.15"/>
<collision_volume name="LEFT_HANDLE" pos = "0.0 0.10 0.058" rot="0.000000 0.00000 0.000000" scale="0.05 0.05 0.05"/>
<collision_volume name="RIGHT_HANDLE" pos = "0.0 -0.10 0.058" rot="0.000000 0.00000 0.000000" scale="0.05 0.05 0.05"/>
<bone name="mChest" pos="-0.015 0.000 0.205" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.015368 0.000000 0.204877">
<collision_volume name="CHEST" pos = "0.028 0 0.07" rot="0.000000 -10.00000 0.000000" scale="0.11 0.15 0.2"/>
<collision_volume name="UPPER_BACK" pos = "0.0 0.0 0.017" rot="0.000000 0.00000 0.000000" scale="0.09 0.13 0.15"/>
<collision_volume name="LEFT_PEC" pos = "0.119 0.082 0.042" rot="0.000000 4.29000 0.000000" scale="0.05 0.05 0.05"/>
<collision_volume name="RIGHT_PEC" pos = "0.119 -0.082 0.042" rot="0.000000 4.29000 0.000000" scale="0.05 0.05 0.05"/>
<bone name="mNeck" pos="-0.010 0.000 0.251" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.009507 0.000000 0.251108">
<collision_volume name="NECK" pos = "0.0 0 0.02" rot="0.000000 0.000000 0.000000" scale="0.05 0.06 0.08"/>
<bone name="mHead" pos="0.000 -0.000 0.076" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 -0.000000 0.075630">
<collision_volume name="HEAD" pos = "0.02 0 0.07" rot="0.000000 0.000000 0.000000" scale="0.11 0.09 0.12"/>
<bone name="mSkull" pos="0.000 0.000 0.079" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 0.000000 0.079000">
<linden_skeleton version="1.0" num_bones="152" num_collision_volumes="26" support="base">
<bone name="mPelvis" pos="0.000 0.000 1.067" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 0.000000 1.067015" support="base">
<collision_volume name="PELVIS" pos="-0.01 0 -0.02" rot="0.000000 8.00000 0.000000" scale="0.12 0.16 0.17" support="base"/>
<collision_volume name="BUTT" pos="-0.06 0 -0.1" rot="0.000000 0.00000 0.000000" scale="0.1 0.1 0.1" support="base"/>
<bone name="mTorso" pos="0.000 0.000 0.084" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 0.000000 0.084073" support="base">
<collision_volume name="BELLY" pos="0.028 0 0.04" rot="0.000000 8.00000 0.000000" scale="0.09 0.13 0.15" support="base"/>
<collision_volume name="LOWER_BACK" pos="0.0 0.0 0.023" rot="0.000000 0.00000 0.000000" scale="0.09 0.13 0.15" support="base"/>
<collision_volume name="LEFT_HANDLE" pos="0.0 0.10 0.058" rot="0.000000 0.00000 0.000000" scale="0.05 0.05 0.05" support="base"/>
<collision_volume name="RIGHT_HANDLE" pos="0.0 -0.10 0.058" rot="0.000000 0.00000 0.000000" scale="0.05 0.05 0.05" support="base"/>
<bone name="mChest" pos="-0.015 0.000 0.205" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.015368 0.000000 0.204877" support="base">
<collision_volume name="CHEST" pos="0.028 0 0.07" rot="0.000000 -10.00000 0.000000" scale="0.11 0.15 0.2" support="base"/>
<collision_volume name="UPPER_BACK" pos="0.0 0.0 0.017" rot="0.000000 0.00000 0.000000" scale="0.09 0.13 0.15" support="base"/>
<collision_volume name="LEFT_PEC" pos="0.119 0.082 0.042" rot="0.000000 4.29000 0.000000" scale="0.05 0.05 0.05" support="base"/>
<collision_volume name="RIGHT_PEC" pos="0.119 -0.082 0.042" rot="0.000000 4.29000 0.000000" scale="0.05 0.05 0.05" support="base"/>
<bone name="mNeck" pos="-0.010 0.000 0.251" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.009507 0.000000 0.251108" support="base">
<collision_volume name="NECK" pos="0.0 0 0.02" rot="0.000000 0.000000 0.000000" scale="0.05 0.06 0.08" support="base"/>
<bone name="mHead" pos="0.000 -0.000 0.076" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 -0.000000 0.075630" support="base">
<collision_volume name="HEAD" pos="0.02 0 0.07" rot="0.000000 0.000000 0.000000" scale="0.11 0.09 0.12" support="base"/>
<bone name="mSkull" pos="0.000 0.000 0.079" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 0.000000 0.079000" support="base">
</bone>
<bone name="mEyeRight" pos="0.098 -0.036 0.079" rot="0.000000 0.000000 -0.000000" scale="1.000 1.000 1.000" pivot="0.098466 -0.036000 0.079000">
<bone name="mEyeRight" pos="0.098 -0.036 0.079" rot="0.000000 0.000000 -0.000000" scale="1.000 1.000 1.000" pivot="0.098466 -0.036000 0.079000" support="base">
</bone>
<bone name="mEyeLeft" pos="0.098 0.036 0.079" rot="0.000000 -0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.098461 0.036000 0.079000">
<bone name="mEyeLeft" pos="0.098 0.036 0.079" rot="0.000000 -0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.098461 0.036000 0.079000" support="base">
</bone>
</bone>
</bone>
<bone name="mCollarLeft" pos="-0.021 0.085 0.165" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.020927 0.084665 0.165396">
<collision_volume name="L_CLAVICLE" pos = "0.02 0 0.02" rot="0.000000 0.00000 0.000000" scale="0.07 0.14 0.05"/>
<bone name="mShoulderLeft" pos="0.000 0.079 -0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 0.079000 -0.000000">
<collision_volume name="L_UPPER_ARM" pos = "0.0 0.12 0.01" rot="-5.000000 0.00000 0.000000" scale="0.05 0.17 0.05"/>
<bone name="mElbowLeft" pos="0.000 0.248 0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 0.248000 0.000000">
<collision_volume name="L_LOWER_ARM" pos = "0.0 0.1 0.0" rot="-3.000000 0.00000 0.000000" scale="0.04 0.14 0.04"/>
<bone name="mWristLeft" pos="-0.000 0.205 0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.000000 0.204846 0.000000">
<collision_volume name="L_HAND" pos = "0.01 0.05 0.0" rot="-3.000000 0.00000 -10.000000" scale="0.05 0.08 0.03"/>
<bone name="mCollarLeft" pos="-0.021 0.085 0.165" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.020927 0.084665 0.165396" support="base">
<collision_volume name="L_CLAVICLE" pos="0.02 0 0.02" rot="0.000000 0.00000 0.000000" scale="0.07 0.14 0.05" support="base"/>
<bone name="mShoulderLeft" pos="0.000 0.079 -0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 0.079000 -0.000000" support="base">
<collision_volume name="L_UPPER_ARM" pos="0.0 0.12 0.01" rot="-5.000000 0.00000 0.000000" scale="0.05 0.17 0.05" support="base"/>
<bone name="mElbowLeft" pos="0.000 0.248 0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 0.248000 0.000000" support="base">
<collision_volume name="L_LOWER_ARM" pos="0.0 0.1 0.0" rot="-3.000000 0.00000 0.000000" scale="0.04 0.14 0.04" support="base"/>
<bone name="mWristLeft" pos="-0.000 0.205 0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.000000 0.204846 0.000000" support="base">
<collision_volume name="L_HAND" pos="0.01 0.05 0.0" rot="-3.000000 0.00000 -10.000000" scale="0.05 0.08 0.03" support="base"/>
</bone>
</bone>
</bone>
</bone>
<bone name="mCollarRight" pos="-0.021 -0.085 0.165" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.020927 -0.085000 0.165396">
<collision_volume name="R_CLAVICLE" pos = "0.02 0 0.02" rot="0.000000 0.00000 0.000000" scale="0.07 0.14 0.05"/>
<bone name="mShoulderRight" pos="0.000 -0.079 -0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 -0.079418 -0.000000">
<collision_volume name="R_UPPER_ARM" pos = "0.0 -0.12 0.01" rot="5.000000 0.00000 0.000000" scale="0.05 0.17 0.05"/>
<bone name="mElbowRight" pos="0.000 -0.248 -0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 -0.248000 -0.000000">
<collision_volume name="R_LOWER_ARM" pos = "0.0 -0.1 0.0" rot="3.000000 0.00000 0.000000" scale="0.04 0.14 0.04"/>
<bone name="mWristRight" pos="0.000 -0.205 -0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.000000 -0.205000 -0.000000">
<collision_volume name="R_HAND" pos = "0.01 -0.05 0.0" rot="3.000000 0.00000 10.000000" scale="0.05 0.08 0.03"/>
<bone name="mCollarRight" pos="-0.021 -0.085 0.165" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.020927 -0.085000 0.165396" support="base">
<collision_volume name="R_CLAVICLE" pos="0.02 0 0.02" rot="0.000000 0.00000 0.000000" scale="0.07 0.14 0.05" support="base"/>
<bone name="mShoulderRight" pos="0.000 -0.079 -0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 -0.079418 -0.000000" support="base">
<collision_volume name="R_UPPER_ARM" pos="0.0 -0.12 0.01" rot="5.000000 0.00000 0.000000" scale="0.05 0.17 0.05" support="base"/>
<bone name="mElbowRight" pos="0.000 -0.248 -0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 -0.248000 -0.000000" support="base">
<collision_volume name="R_LOWER_ARM" pos="0.0 -0.1 0.0" rot="3.000000 0.00000 0.000000" scale="0.04 0.14 0.04" support="base"/>
<bone name="mWristRight" pos="0.000 -0.205 -0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.000000 -0.205000 -0.000000" support="base">
<collision_volume name="R_HAND" pos="0.01 -0.05 0.0" rot="3.000000 0.00000 10.000000" scale="0.05 0.08 0.03" support="base"/>
</bone>
</bone>
</bone>
</bone>
<bone name="mTentacle0_0" pos="0.0 0.0 0.0" rot="0.0 0.0 0.000000" scale="1.0 1.0 1.0" pivot="0.0 0.0 0.0">
<bone name="mTentacle0_1" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle0_2" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle0_3" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle0_4" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle0_5" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle0_6" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle0_7" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle0_8" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle0_9" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle0_0" pos="0.0 0.0 0.0" rot="0.0 0.0 0.000000" scale="1.0 1.0 1.0" pivot="0.0 0.0 0.0" support="extended">
<bone name="mTentacle0_1" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle0_2" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle0_3" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle0_4" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle0_5" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle0_6" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle0_7" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle0_8" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle0_9" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
</bone>
</bone>
</bone>
@ -69,16 +68,16 @@
</bone>
</bone>
</bone>
<bone name="mTentacle1_0" pos="0.0 0.0 0.0" rot="0.0 0.0 36.000000" scale="1.0 1.0 1.0" pivot="0.0 0.0 0.0">
<bone name="mTentacle1_1" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle1_2" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle1_3" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle1_4" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle1_5" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle1_6" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle1_7" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle1_8" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle1_9" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle1_0" pos="0.0 0.0 0.0" rot="0.0 0.0 36.000000" scale="1.0 1.0 1.0" pivot="0.0 0.0 0.0" support="extended">
<bone name="mTentacle1_1" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle1_2" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle1_3" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle1_4" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle1_5" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle1_6" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle1_7" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle1_8" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle1_9" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
</bone>
</bone>
</bone>
@ -89,16 +88,16 @@
</bone>
</bone>
</bone>
<bone name="mTentacle2_0" pos="0.0 0.0 0.0" rot="0.0 0.0 72.000000" scale="1.0 1.0 1.0" pivot="0.0 0.0 0.0">
<bone name="mTentacle2_1" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle2_2" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle2_3" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle2_4" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle2_5" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle2_6" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle2_7" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle2_8" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle2_9" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle2_0" pos="0.0 0.0 0.0" rot="0.0 0.0 72.000000" scale="1.0 1.0 1.0" pivot="0.0 0.0 0.0" support="extended">
<bone name="mTentacle2_1" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle2_2" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle2_3" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle2_4" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle2_5" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle2_6" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle2_7" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle2_8" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle2_9" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
</bone>
</bone>
</bone>
@ -109,16 +108,16 @@
</bone>
</bone>
</bone>
<bone name="mTentacle3_0" pos="0.0 0.0 0.0" rot="0.0 0.0 108.000000" scale="1.0 1.0 1.0" pivot="0.0 0.0 0.0">
<bone name="mTentacle3_1" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle3_2" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle3_3" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle3_4" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle3_5" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle3_6" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle3_7" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle3_8" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle3_9" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle3_0" pos="0.0 0.0 0.0" rot="0.0 0.0 108.000000" scale="1.0 1.0 1.0" pivot="0.0 0.0 0.0" support="extended">
<bone name="mTentacle3_1" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle3_2" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle3_3" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle3_4" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle3_5" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle3_6" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle3_7" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle3_8" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle3_9" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
</bone>
</bone>
</bone>
@ -129,16 +128,16 @@
</bone>
</bone>
</bone>
<bone name="mTentacle4_0" pos="0.0 0.0 0.0" rot="0.0 0.0 144.000000" scale="1.0 1.0 1.0" pivot="0.0 0.0 0.0">
<bone name="mTentacle4_1" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle4_2" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle4_3" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle4_4" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle4_5" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle4_6" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle4_7" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle4_8" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle4_9" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle4_0" pos="0.0 0.0 0.0" rot="0.0 0.0 144.000000" scale="1.0 1.0 1.0" pivot="0.0 0.0 0.0" support="extended">
<bone name="mTentacle4_1" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle4_2" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle4_3" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle4_4" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle4_5" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle4_6" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle4_7" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle4_8" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle4_9" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
</bone>
</bone>
</bone>
@ -149,16 +148,16 @@
</bone>
</bone>
</bone>
<bone name="mTentacle5_0" pos="0.0 0.0 0.0" rot="0.0 0.0 180.000000" scale="1.0 1.0 1.0" pivot="0.0 0.0 0.0">
<bone name="mTentacle5_1" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle5_2" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle5_3" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle5_4" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle5_5" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle5_6" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle5_7" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle5_8" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle5_9" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle5_0" pos="0.0 0.0 0.0" rot="0.0 0.0 180.000000" scale="1.0 1.0 1.0" pivot="0.0 0.0 0.0" support="extended">
<bone name="mTentacle5_1" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle5_2" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle5_3" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle5_4" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle5_5" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle5_6" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle5_7" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle5_8" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle5_9" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
</bone>
</bone>
</bone>
@ -169,16 +168,16 @@
</bone>
</bone>
</bone>
<bone name="mTentacle6_0" pos="0.0 0.0 0.0" rot="0.0 0.0 216.000000" scale="1.0 1.0 1.0" pivot="0.0 0.0 0.0">
<bone name="mTentacle6_1" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle6_2" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle6_3" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle6_4" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle6_5" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle6_6" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle6_7" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle6_8" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle6_9" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle6_0" pos="0.0 0.0 0.0" rot="0.0 0.0 216.000000" scale="1.0 1.0 1.0" pivot="0.0 0.0 0.0" support="extended">
<bone name="mTentacle6_1" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle6_2" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle6_3" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle6_4" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle6_5" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle6_6" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle6_7" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle6_8" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle6_9" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
</bone>
</bone>
</bone>
@ -189,16 +188,16 @@
</bone>
</bone>
</bone>
<bone name="mTentacle7_0" pos="0.0 0.0 0.0" rot="0.0 0.0 252.000000" scale="1.0 1.0 1.0" pivot="0.0 0.0 0.0">
<bone name="mTentacle7_1" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle7_2" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle7_3" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle7_4" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle7_5" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle7_6" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle7_7" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle7_8" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle7_9" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle7_0" pos="0.0 0.0 0.0" rot="0.0 0.0 252.000000" scale="1.0 1.0 1.0" pivot="0.0 0.0 0.0" support="extended">
<bone name="mTentacle7_1" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle7_2" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle7_3" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle7_4" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle7_5" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle7_6" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle7_7" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle7_8" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle7_9" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
</bone>
</bone>
</bone>
@ -209,16 +208,16 @@
</bone>
</bone>
</bone>
<bone name="mTentacle8_0" pos="0.0 0.0 0.0" rot="0.0 0.0 288.000000" scale="1.0 1.0 1.0" pivot="0.0 0.0 0.0">
<bone name="mTentacle8_1" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle8_2" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle8_3" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle8_4" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle8_5" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle8_6" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle8_7" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle8_8" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle8_9" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle8_0" pos="0.0 0.0 0.0" rot="0.0 0.0 288.000000" scale="1.0 1.0 1.0" pivot="0.0 0.0 0.0" support="extended">
<bone name="mTentacle8_1" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle8_2" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle8_3" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle8_4" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle8_5" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle8_6" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle8_7" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle8_8" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle8_9" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
</bone>
</bone>
</bone>
@ -229,16 +228,16 @@
</bone>
</bone>
</bone>
<bone name="mTentacle9_0" pos="0.0 0.0 0.0" rot="0.0 0.0 324.000000" scale="1.0 1.0 1.0" pivot="0.0 0.0 0.0">
<bone name="mTentacle9_1" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle9_2" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle9_3" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle9_4" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle9_5" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle9_6" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle9_7" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle9_8" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle9_9" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0">
<bone name="mTentacle9_0" pos="0.0 0.0 0.0" rot="0.0 0.0 324.000000" scale="1.0 1.0 1.0" pivot="0.0 0.0 0.0" support="extended">
<bone name="mTentacle9_1" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle9_2" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle9_3" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle9_4" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle9_5" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle9_6" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle9_7" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle9_8" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
<bone name="mTentacle9_9" pos="0.100000 0.0 0.0" rot="0.0 0.0 0.0" scale="1.0 1.0 1.0" pivot="0.1 0.0 0.0" support="extended">
</bone>
</bone>
</bone>
@ -251,27 +250,27 @@
</bone>
</bone>
</bone>
<bone name="mHipRight" pos="0.034 -0.129 -0.041" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.033620 -0.128806 -0.041086">
<collision_volume name="R_UPPER_LEG" pos = "-0.02 0.05 -0.22" rot="0.000000 0.00000 0.000000" scale="0.09 0.09 0.32"/>
<bone name="mKneeRight" pos="-0.001 0.049 -0.491" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.000780 0.048635 -0.490922">
<collision_volume name="R_LOWER_LEG" pos = "-0.02 0.0 -0.2" rot="0.000000 0.00000 0.000000" scale="0.06 0.06 0.25"/>
<bone name="mAnkleRight" pos="-0.029 0.000 -0.468" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.028869 0.000000 -0.468494">
<collision_volume name="R_FOOT" pos = "0.077 0.0 -0.041" rot="0.000000 10.00000 0.000000" scale="0.13 0.05 0.05"/>
<bone name="mFootRight" pos="0.112 -0.000 -0.061" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.111956 -0.000000 -0.060637">
<bone name="mToeRight" pos="0.109 0.000 0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.105399 -0.010408 -0.000104">
<bone name="mHipRight" pos="0.034 -0.129 -0.041" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.033620 -0.128806 -0.041086" support="base">
<collision_volume name="R_UPPER_LEG" pos="-0.02 0.05 -0.22" rot="0.000000 0.00000 0.000000" scale="0.09 0.09 0.32" support="base"/>
<bone name="mKneeRight" pos="-0.001 0.049 -0.491" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.000780 0.048635 -0.490922" support="base">
<collision_volume name="R_LOWER_LEG" pos="-0.02 0.0 -0.2" rot="0.000000 0.00000 0.000000" scale="0.06 0.06 0.25" support="base"/>
<bone name="mAnkleRight" pos="-0.029 0.000 -0.468" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.028869 0.000000 -0.468494" support="base">
<collision_volume name="R_FOOT" pos="0.077 0.0 -0.041" rot="0.000000 10.00000 0.000000" scale="0.13 0.05 0.05" support="base"/>
<bone name="mFootRight" pos="0.112 -0.000 -0.061" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.111956 -0.000000 -0.060637" support="base">
<bone name="mToeRight" pos="0.109 0.000 0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.105399 -0.010408 -0.000104" support="base">
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="mHipLeft" pos="0.034 0.127 -0.041" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.033757 0.126765 -0.040998">
<collision_volume name="L_UPPER_LEG" pos = "-0.02 -0.05 -0.22" rot="0.000000 0.00000 0.000000" scale="0.09 0.09 0.32"/>
<bone name="mKneeLeft" pos="-0.001 -0.046 -0.491" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.000887 -0.045568 -0.491053">
<collision_volume name="L_LOWER_LEG" pos = "-0.02 0.0 -0.2" rot="0.000000 0.00000 0.000000" scale="0.06 0.06 0.25"/>
<bone name="mAnkleLeft" pos="-0.029 0.001 -0.468" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.028887 0.001378 -0.468449">
<collision_volume name="L_FOOT" pos = "0.077 0.0 -0.041" rot="0.000000 10.00000 0.000000" scale="0.13 0.05 0.05"/>
<bone name="mFootLeft" pos="0.112 -0.000 -0.061" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.111956 -0.000000 -0.060620">
<bone name="mToeLeft" pos="0.109 0.000 0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.105387 0.008270 0.000871">
<bone name="mHipLeft" pos="0.034 0.127 -0.041" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.033757 0.126765 -0.040998" support="base">
<collision_volume name="L_UPPER_LEG" pos="-0.02 -0.05 -0.22" rot="0.000000 0.00000 0.000000" scale="0.09 0.09 0.32" support="base"/>
<bone name="mKneeLeft" pos="-0.001 -0.046 -0.491" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.000887 -0.045568 -0.491053" support="base">
<collision_volume name="L_LOWER_LEG" pos="-0.02 0.0 -0.2" rot="0.000000 0.00000 0.000000" scale="0.06 0.06 0.25" support="base"/>
<bone name="mAnkleLeft" pos="-0.029 0.001 -0.468" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.028887 0.001378 -0.468449" support="base">
<collision_volume name="L_FOOT" pos="0.077 0.0 -0.041" rot="0.000000 10.00000 0.000000" scale="0.13 0.05 0.05" support="base"/>
<bone name="mFootLeft" pos="0.112 -0.000 -0.061" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.111956 -0.000000 -0.060620" support="base">
<bone name="mToeLeft" pos="0.109 0.000 0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.105387 0.008270 0.000871" support="base">
</bone>
</bone>
</bone>

View File

@ -1549,6 +1549,156 @@ U32 LLDrawPoolAvatar::getMeshJointCount(const LLMeshSkinInfo *skin)
return llmin((U32)getMaxJointCount(), (U32)skin->mJointNames.size());
}
bool getNameIndex(const std::string& name, std::vector<std::string>& names, U32& result)
{
std::vector<std::string>::const_iterator find_it =
std::find(names.begin(), names.end(), name);
if (find_it != names.end())
{
result = find_it - names.begin();
return true;
}
else
{
return false;
}
}
// Find a name table index that is also a valid joint on the
// avatar. Order of preference is: requested name, mPelvis, first
// valid match in names table.
U32 getValidJointIndex(const std::string& name, LLVOAvatar *avatar, std::vector<std::string>& joint_names)
{
U32 result;
if (avatar->getJoint(name) && getNameIndex(name,joint_names,result))
{
return result;
}
if (getNameIndex("mPelvis",joint_names,result))
{
return result;
}
for (U32 j=0; j<joint_names.size(); j++)
{
if (avatar->getJoint(joint_names[j]))
{
return j;
}
}
// BENTO how to handle?
LL_ERRS() << "no valid joints in joint_names" << LL_ENDL;
return 0;
}
// Which joint will stand in for this joint?
U32 getProxyJointIndex(U32 joint_index, LLVOAvatar *avatar, std::vector<std::string>& joint_names)
{
#if 1
bool include_enhanced = gSavedSettings.getBOOL("IncludeEnhancedSkeleton");
U32 j_proxy = getValidJointIndex(joint_names[joint_index], avatar, joint_names);
LLJoint *joint = avatar->getJoint(joint_names[j_proxy]);
llassert(joint);
// BENTO - test of simple push-to-base-ancestor
// complexity reduction scheme. Find the first
// ancestor that's not flagged as extended, or the
// last ancestor that's rigged in this mesh, whichever
// comes first.
while (1)
{
if (include_enhanced ||
joint->getSupport()==LLJoint::SUPPORT_BASE)
break;
LLJoint *parent = joint->getParent();
if (!parent)
break;
if (!getNameIndex(parent->getName(), joint_names, j_proxy))
{
break;
}
joint = parent;
}
return j_proxy;
#else
return 0;
#endif
}
// static
// Destructively remap the joints in skin info based on what joints
// are known in the avatar, and which are currently supported. This
// will also populate mJointRemap[] in the skin, which can be used to
// make the corresponding changes to the integer part of vertex
// weights.
//
// This will throw away joint info for any joints that are not known
// in the avatar, or not currently flagged to support based on the
// debug setting for IncludeEnhancedSkeleton.
void LLDrawPoolAvatar::remapSkinInfoJoints(LLVOAvatar *avatar, LLMeshSkinInfo* skin)
{
// skip if already done.
if (!skin->mJointRemap.empty())
{
return;
}
// Compute the remap
std::vector<U32> j_proxy(skin->mJointNames.size());
for (U32 j = 0; j < skin->mJointNames.size(); ++j)
{
U32 j_rep = getProxyJointIndex(j, avatar, skin->mJointNames);
j_proxy[j] = j_rep;
}
S32 top = 0;
std::vector<U32> j_remap(skin->mJointNames.size());
// Fill in j_remap for all joints that will make the cut.
for (U32 j = 0; j < skin->mJointNames.size(); ++j)
{
if (j_proxy[j] == j)
{
// Joint will be included
j_remap[j] = top++;
}
}
// Then use j_proxy to fill in j_remap for the joints that will be discarded
for (U32 j = 0; j < skin->mJointNames.size(); ++j)
{
if (j_proxy[j] != j)
{
j_remap[j] = j_remap[j_proxy[j]];
}
}
// Apply the remap to mJointNames, mInvBindMatrix, and mAlternateBindMatrix
std::vector<std::string> new_joint_names;
std::vector<LLMatrix4> new_inv_bind_matrix;
std::vector<LLMatrix4> new_alternate_bind_matrix;
for (U32 j = 0; j < skin->mJointNames.size(); ++j)
{
if (j_proxy[j] == j)
{
new_joint_names.push_back(skin->mJointNames[j]);
new_inv_bind_matrix.push_back(skin->mInvBindMatrix[j]);
if (!skin->mAlternateBindMatrix.empty())
{
new_alternate_bind_matrix.push_back(skin->mAlternateBindMatrix[j]);
}
}
}
for (U32 j = 0; j < skin->mJointNames.size(); ++j)
{
LL_INFOS() << "Starting joint[" << j << "] = " << skin->mJointNames[j] << " j_remap " << j_remap[j] << " ==> " << new_joint_names[j_remap[j]] << LL_ENDL;
}
//skin->mJointNames = new_joint_names;
//skin->mInvBindMatrix = new_inv_bind_matrix;
//skin->mAlternateBindMatrix = new_alternate_bind_matrix;
skin->mJointRemap = j_remap;
}
// static
void LLDrawPoolAvatar::initSkinningMatrixPalette(
LLMatrix4* mat,
@ -1556,38 +1706,57 @@ void LLDrawPoolAvatar::initSkinningMatrixPalette(
const LLMeshSkinInfo* skin,
LLVOAvatar *avatar)
{
// BENTO ugly const cast
remapSkinInfoJoints(avatar, const_cast<LLMeshSkinInfo*>(skin));
// BENTO - switching to use Matrix4a and SSE might speed this up.
// Note that we are mostly passing Matrix4a's to this routine anyway, just dubiously casted.
for (U32 j = 0; j < count; ++j)
{
LLJoint* joint = avatar->getJoint(skin->mJointNames[j]);
#if 1 // Don't need this stuff if we've already remapped/cleaned up above
if (!joint)
{
joint = avatar->getJoint("mPelvis");
}
if (joint)
{
#if 0
// BENTO HACK - test of simple push-to-ancestor complexity reduction scheme.
const std::string& name = joint->getName();
S32 digit = name.back()-'0';
while (joint->getParent() && (digit<=9) && (digit>=5))
if (!gSavedSettings.getBOOL("IncludeEnhancedSkeleton"))
{
joint = joint->getParent();
const std::string& name = joint->getName();
digit = name.back()-'0';
// BENTO - test of simple push-to-base-ancestor
// complexity reduction scheme. Find the first
// ancestor that's not flagged as extended, or the
// last ancestor that's rigged in this mesh, whichever
// comes first.
U32 j_remap = 0;
while (1)
{
if (joint->getSupport()==LLJoint::SUPPORT_BASE)
break;
LLJoint *parent = joint->getParent();
if (!parent)
break;
std::vector<std::string>::const_iterator find_it =
std::find(skin->mJointNames.begin(), skin->mJointNames.end(), parent->getName());
if (find_it != skin->mJointNames.end())
{
j_remap = find_it - skin->mJointNames.begin();
}
else
{
break;
}
joint = parent;
}
mat[j] = skin->mInvBindMatrix[j_remap];
}
U32 j_remap = 0;
std::vector<std::string>::const_iterator find_it =
std::find(skin->mJointNames.begin(), skin->mJointNames.end(), joint->getName());
if (find_it != skin->mJointNames.end())
else
{
j_remap = find_it - skin->mJointNames.begin();
mat[j] = skin->mInvBindMatrix[j];
}
// BENTO for hack, use invBindMatrix of up-casted joint
mat[j] = skin->mInvBindMatrix[j_remap];
#endif
#else
mat[j] = skin->mInvBindMatrix[j];
#endif
mat[j] *= joint->getWorldMatrix();
}
}

View File

@ -136,6 +136,7 @@ public:
void getRiggedGeometry(LLFace* face, LLPointer<LLVertexBuffer>& buffer, U32 data_mask, const LLMeshSkinInfo* skin, LLVolume* volume, const LLVolumeFace& vol_face);
static U32 getMaxJointCount();
static U32 getMeshJointCount(const LLMeshSkinInfo *skin);
static void remapSkinInfoJoints(LLVOAvatar *avatar, LLMeshSkinInfo* skin);
static void initSkinningMatrixPalette(LLMatrix4* mat, S32 count, const LLMeshSkinInfo* skin, LLVOAvatar *avatar);
static void getPerVertexSkinMatrix(F32* weights, LLMatrix4a* mat, bool handle_bad_scale, LLMatrix4a& final_mat, U32 max_joints);
void updateRiggedFaceVertexBuffer(LLVOAvatar* avatar,