SL-242 - more tweaks around alt eyes and wings. Alt eyes are now parented to face root, and alt eyes animate along with the original eyes inside the LLHeadRotMotion code.

meow-7.2.2
Brad Payne (Vir Linden) 2016-07-11 18:00:59 -04:00
parent 9d8986337a
commit 2929922ef2
4 changed files with 432 additions and 239 deletions

View File

@ -285,7 +285,10 @@ LLEyeMotion::LLEyeMotion(const LLUUID &id) : LLMotion(id)
mName = "eye_rot";
mLeftEyeState = new LLJointState;
mAltLeftEyeState = new LLJointState;
mRightEyeState = new LLJointState;
mAltRightEyeState = new LLJointState;
}
@ -318,18 +321,38 @@ LLMotion::LLMotionInitStatus LLEyeMotion::onInitialize(LLCharacter *character)
return STATUS_FAILURE;
}
mAltLeftEyeState->setJoint( character->getJoint("mFaceEyeAltLeft") );
if ( ! mAltLeftEyeState->getJoint() )
{
LL_INFOS() << getName() << ": Can't get alt left eyeball joint." << LL_ENDL;
return STATUS_FAILURE;
}
mRightEyeState->setJoint( character->getJoint("mEyeRight") );
if ( ! mRightEyeState->getJoint() )
{
LL_INFOS() << getName() << ": Can't get Right eyeball joint." << LL_ENDL;
LL_INFOS() << getName() << ": Can't get right eyeball joint." << LL_ENDL;
return STATUS_FAILURE;
}
mAltRightEyeState->setJoint( character->getJoint("mFaceEyeAltRight") );
if ( ! mAltRightEyeState->getJoint() )
{
LL_INFOS() << getName() << ": Can't get alt right eyeball joint." << LL_ENDL;
return STATUS_FAILURE;
}
mLeftEyeState->setUsage(LLJointState::ROT);
mAltLeftEyeState->setUsage(LLJointState::ROT);
mRightEyeState->setUsage(LLJointState::ROT);
mAltRightEyeState->setUsage(LLJointState::ROT);
addJointState( mLeftEyeState );
addJointState( mAltLeftEyeState );
addJointState( mRightEyeState );
addJointState( mAltRightEyeState );
return STATUS_SUCCESS;
}
@ -343,17 +366,98 @@ BOOL LLEyeMotion::onActivate()
return TRUE;
}
//-----------------------------------------------------------------------------
// LLEyeMotion::adjustEyeTarget()
//-----------------------------------------------------------------------------
void LLEyeMotion::adjustEyeTarget(LLVector3* targetPos, LLJointState& left_eye_state, LLJointState& right_eye_state)
{
// Compute eye rotation.
BOOL has_eye_target = FALSE;
LLQuaternion target_eye_rot;
LLVector3 eye_look_at;
F32 vergence;
if (targetPos)
{
LLVector3 skyward(0.f, 0.f, 1.f);
LLVector3 left;
LLVector3 up;
eye_look_at = *targetPos;
has_eye_target = TRUE;
F32 lookAtDistance = eye_look_at.normVec();
left.setVec(skyward % eye_look_at);
up.setVec(eye_look_at % left);
target_eye_rot = LLQuaternion(eye_look_at, left, up);
// convert target rotation to head-local coordinates
target_eye_rot *= ~mHeadJoint->getWorldRotation();
// eliminate any Euler roll - we're lucky that roll is applied last.
F32 roll, pitch, yaw;
target_eye_rot.getEulerAngles(&roll, &pitch, &yaw);
target_eye_rot.setQuat(0.0f, pitch, yaw);
// constrain target orientation to be in front of avatar's face
target_eye_rot.constrain(EYE_ROT_LIMIT_ANGLE);
// calculate vergence
F32 interocular_dist = (left_eye_state.getJoint()->getWorldPosition() - right_eye_state.getJoint()->getWorldPosition()).magVec();
vergence = -atan2((interocular_dist / 2.f), lookAtDistance);
llclamp(vergence, -F_PI_BY_TWO, 0.f);
}
else
{
target_eye_rot = LLQuaternion::DEFAULT;
vergence = 0.f;
}
//RN: subtract 4 degrees to account for foveal angular offset relative to pupil
vergence += 4.f * DEG_TO_RAD;
// calculate eye jitter
LLQuaternion eye_jitter_rot;
// vergence not too high...
if (vergence > -0.05f)
{
//...go ahead and jitter
eye_jitter_rot.setQuat(0.f, mEyeJitterPitch + mEyeLookAwayPitch, mEyeJitterYaw + mEyeLookAwayYaw);
}
else
{
//...or don't
eye_jitter_rot.loadIdentity();
}
// calculate vergence of eyes as an object gets closer to the avatar's head
LLQuaternion vergence_quat;
if (has_eye_target)
{
vergence_quat.setQuat(vergence, LLVector3(0.f, 0.f, 1.f));
}
else
{
vergence_quat.loadIdentity();
}
// calculate eye rotations
LLQuaternion left_eye_rot = target_eye_rot;
left_eye_rot = vergence_quat * eye_jitter_rot * left_eye_rot;
LLQuaternion right_eye_rot = target_eye_rot;
vergence_quat.transQuat();
right_eye_rot = vergence_quat * eye_jitter_rot * right_eye_rot;
left_eye_state.setRotation( left_eye_rot );
right_eye_state.setRotation( right_eye_rot );
}
//-----------------------------------------------------------------------------
// LLEyeMotion::onUpdate()
//-----------------------------------------------------------------------------
BOOL LLEyeMotion::onUpdate(F32 time, U8* joint_mask)
{
// Compute eye rotation.
LLQuaternion target_eye_rot;
LLVector3 eye_look_at;
F32 vergence;
//calculate jitter
if (mEyeJitterTimer.getElapsedTimeF32() > mEyeJitterTime)
{
@ -426,83 +530,10 @@ BOOL LLEyeMotion::onUpdate(F32 time, U8* joint_mask)
}
}
BOOL has_eye_target = FALSE;
LLVector3* targetPos = (LLVector3*)mCharacter->getAnimationData("LookAtPoint");
if (targetPos)
{
LLVector3 skyward(0.f, 0.f, 1.f);
LLVector3 left;
LLVector3 up;
eye_look_at = *targetPos;
has_eye_target = TRUE;
F32 lookAtDistance = eye_look_at.normVec();
left.setVec(skyward % eye_look_at);
up.setVec(eye_look_at % left);
target_eye_rot = LLQuaternion(eye_look_at, left, up);
// convert target rotation to head-local coordinates
target_eye_rot *= ~mHeadJoint->getWorldRotation();
// eliminate any Euler roll - we're lucky that roll is applied last.
F32 roll, pitch, yaw;
target_eye_rot.getEulerAngles(&roll, &pitch, &yaw);
target_eye_rot.setQuat(0.0f, pitch, yaw);
// constrain target orientation to be in front of avatar's face
target_eye_rot.constrain(EYE_ROT_LIMIT_ANGLE);
// calculate vergence
F32 interocular_dist = (mLeftEyeState->getJoint()->getWorldPosition() - mRightEyeState->getJoint()->getWorldPosition()).magVec();
vergence = -atan2((interocular_dist / 2.f), lookAtDistance);
llclamp(vergence, -F_PI_BY_TWO, 0.f);
}
else
{
target_eye_rot = LLQuaternion::DEFAULT;
vergence = 0.f;
}
//RN: subtract 4 degrees to account for foveal angular offset relative to pupil
vergence += 4.f * DEG_TO_RAD;
// calculate eye jitter
LLQuaternion eye_jitter_rot;
// vergence not too high...
if (vergence > -0.05f)
{
//...go ahead and jitter
eye_jitter_rot.setQuat(0.f, mEyeJitterPitch + mEyeLookAwayPitch, mEyeJitterYaw + mEyeLookAwayYaw);
}
else
{
//...or don't
eye_jitter_rot.loadIdentity();
}
// calculate vergence of eyes as an object gets closer to the avatar's head
LLQuaternion vergence_quat;
if (has_eye_target)
{
vergence_quat.setQuat(vergence, LLVector3(0.f, 0.f, 1.f));
}
else
{
vergence_quat.loadIdentity();
}
// calculate eye rotations
LLQuaternion left_eye_rot = target_eye_rot;
left_eye_rot = vergence_quat * eye_jitter_rot * left_eye_rot;
LLQuaternion right_eye_rot = target_eye_rot;
vergence_quat.transQuat();
right_eye_rot = vergence_quat * eye_jitter_rot * right_eye_rot;
mLeftEyeState->setRotation( left_eye_rot );
mRightEyeState->setRotation( right_eye_rot );
adjustEyeTarget(targetPos, *mLeftEyeState, *mRightEyeState);
adjustEyeTarget(targetPos, *mAltLeftEyeState, *mAltRightEyeState);
return TRUE;
}
@ -519,11 +550,23 @@ void LLEyeMotion::onDeactivate()
joint->setRotation(LLQuaternion::DEFAULT);
}
joint = mAltLeftEyeState->getJoint();
if (joint)
{
joint->setRotation(LLQuaternion::DEFAULT);
}
joint = mRightEyeState->getJoint();
if (joint)
{
joint->setRotation(LLQuaternion::DEFAULT);
}
joint = mAltRightEyeState->getJoint();
if (joint)
{
joint->setRotation(LLQuaternion::DEFAULT);
}
}
// End

View File

@ -176,6 +176,8 @@ public:
// it will be deactivated
virtual BOOL onActivate();
void adjustEyeTarget(LLVector3* targetPos, LLJointState& left_eye_state, LLJointState& right_eye_state);
// called per time step
// must return TRUE while it is active, and
// must return FALSE when the motion is completed.
@ -193,6 +195,8 @@ public:
LLJoint *mHeadJoint;
LLPointer<LLJointState> mLeftEyeState;
LLPointer<LLJointState> mRightEyeState;
LLPointer<LLJointState> mAltLeftEyeState;
LLPointer<LLJointState> mAltRightEyeState;
LLFrameTimer mEyeJitterTimer;
F32 mEyeJitterTime;

View File

@ -807,6 +807,39 @@
<bone
name="mHindLimb2Right"
scale="0 0 0.1" />
<bone
name="mWing1Left"
offset="0 0 0" />
<bone
name="mWing2Left"
offset="-0.015 0.015 0" />
<bone
name="mWing3Left"
offset="-0.025 0.025 0" />
<bone
name="mWing4Left"
offset="-0.03 0.03 0" />
<bone
name="mWing4FanLeft"
offset="-0.03 0.03 0" />
<bone
name="mWing1Right"
offset="0 0 0" />
<bone
name="mWing2Right"
offset="-0.015 -0.015 0" />
<bone
name="mWing3Right"
offset="-0.025 -0.025 0" />
<bone
name="mWing4Right"
offset="-0.03 -0.03 0" />
<bone
name="mWing4FanRight"
offset="-0.03 -0.03 0" />
</param_skeleton>
</param>
@ -1163,56 +1196,57 @@
name="mEyeRight"
scale="0 0 0"
offset="0 -.009 0" />
<bone
<bone
name="mFaceEyeAltLeft"
scale="0 0 0 "
offset="0 .009 0" />
offset="0 .0090 0" />
<bone
name="mFaceEyeAltRight"
scale="0 0 0 "
offset="0 -.009 0" />
offset="0 -.0090 0" />
<bone
name="mFaceEyeLidLowerLeft"
scale="0 0 0 "
offset="0 .00930 0" />
offset="0 .0090 0" />
<bone
name="mFaceEyeLidLowerRight"
scale="0 0 0 "
offset="0 -.00930 0" />
offset="0 -.0090 0" />
<bone
name="mFaceEyeLidUpperLeft"
scale="0 0 0 "
offset="0 .00930 0" />
offset="0 .0090 0" />
<bone
name="mFaceEyeLidUpperRight"
scale="0 0 0 "
offset="0 -.00930 0" />
offset="0 -.0090 0" />
<bone
name="mFaceEyebrowInnerLeft"
scale="0 0 0 "
offset="0 .00930 0" />
offset="0 .0090 0" />
<bone
name="mFaceEyebrowInnerRight"
scale="0 0 0 "
offset="0 -.00930 0" />
offset="0 -.0090 0" />
<bone
name="mFaceEyebrowCenterLeft"
scale="0 0 0 "
offset="0 .00930 0" />
offset="0 .0090 0" />
<bone
name="mFaceEyebrowCenterRight"
scale="0 0 0 "
offset="0 -.00930 0" />
offset="0 -.0090 0" />
<bone
name="mFaceEyebrowOuterLeft"
@ -1257,16 +1291,16 @@
name="mEyeRight"
scale="0 0 0"
offset="0 0 -.004" />
<bone
<bone
name="mFaceEyeAltLeft"
scale="0 0 0"
offset="0 0 .004" />
<bone
<bone
name="mFaceEyeAltRight"
scale="0 0 0"
offset="0 0 -.004" />
offset="0 0 -.004" />
<bone
name="mFaceNoseRight"
@ -1421,11 +1455,6 @@
value_min="-1"
value_max="1">
<param_skeleton>
<bone
name="mFaceRoot"
scale="0.25 0 0"
offset="0 0 0" />
<bone
name="mEyeLeft"
scale="0 0 0"
@ -1436,131 +1465,6 @@
scale="0 0 0"
offset=".016 0 0" />
<bone
name="mFaceEyeAltLeft"
scale="0 0 0"
offset=".016 0 0" />
<bone
name="mFaceEyeAltRight"
scale="0 0 0"
offset=".016 0 0" />
<bone
name="mFaceEyeLidUpperLeft"
scale="0 0 0"
offset="-0.0038 0 0" />
<bone
name="mFaceEyeLidUpperRight"
scale="0 0 0"
offset="-0.0038 0 0" />
<bone
name="mFaceEyeLidLowerLeft"
scale="0 0 0"
offset="-0.0038 0 0" />
<bone
name="mFaceEyeLidLowerRight"
scale="0 0 0"
offset="-0.0038 0 0" />
<bone
name="mFaceNoseCenter"
scale="0 0 0"
offset=".01 0 0" />
<bone
name="mFaceNoseRight"
scale="0 0 0"
offset=".005 0 0" />
<bone
name="mFaceNoseLeft"
scale="0 0 0"
offset=".005 0 0" />
<bone
name="mFaceNoseBase"
scale="0 0 0"
offset=".005 0 0" />
<bone
name="mFaceLipUpperLeft"
scale="0 0 0"
offset="0.005 0 0" />
<bone
name="mFaceLipUpperCenter"
scale="0 0 0"
offset="0.005 0 0" />
<bone
name="mFaceLipUpperRight"
scale="0 0 0"
offset="0.005 0 0" />
<bone
name="mFaceLipCornerRight"
scale="0 0 0"
offset="0.005 0 0" />
<bone
name="mFaceLipCornerLeft"
scale="0 0 0"
offset="0.005 0 0" />
<bone
name="mFaceLipLowerLeft"
scale="0 0 0"
offset="0.01 0 0" />
<bone
name="mFaceLipLowerCenter"
scale="0 0 0"
offset="0.01 0 0" />
<bone
name="mFaceLipLowerRight"
scale="0 0 0"
offset="0.01 0 0" />
<bone
name="mFaceCheekLowerLeft"
scale="0 0 0"
offset="0.007 0 0" />
<bone
name="mFaceCheekLowerRight"
scale="0 0 0"
offset="0.007 0 0" />
<bone
name="mFaceChin"
scale="0 0 0"
offset="0.014 0 0" />
<bone
name="mFaceTeethUpper"
scale="0.28 0 0"
offset="0 0 0" />
<bone
name="mFaceTeethLower"
scale="0.28 0 0"
offset="0 0 0" />
<bone
name="mFaceTongueBase"
scale="0.3 0 0"
offset="0 0 0" />
<bone
name="mFaceTongueTip"
scale="0 0 0"
offset="0.004 0 0" />
</param_skeleton>
</param>
@ -1584,6 +1488,7 @@
name="mEyeRight"
scale="0 0 0"
offset=".005 0 0" />
<bone
name="mFaceEyeAltLeft"
scale="0 0 0"
@ -1593,7 +1498,7 @@
name="mFaceEyeAltRight"
scale="0 0 0"
offset=".005 0 0" />
<bone
name="mFaceEyeLidLowerLeft"
scale="0 0 0 "
@ -1727,17 +1632,17 @@
name="mEyeRight"
scale="1 1 1"
offset="0 0 0" />
<bone
name="mFaceEyeAltLeft"
scale="1 1 1"
offset="0 0 0" />
offset="0 0 -0.001" />
<bone
name="mFaceEyeAltRight"
scale="1 1 1"
offset="0 0 0" />
offset="0 0 -0.001" />
<bone
name="mFaceForeheadLeft"
scale="1 1 1"
@ -2087,6 +1992,16 @@
offset=" 0 0 0" />
<bone
name="mFaceEyeAltLeft"
scale="0 0 0"
offset="0 0 0" />
<bone
name="mFaceEyeAltRight"
scale="0 0 0"
offset="0 0 0" />
<bone
name="mFaceEyeLidUpperRight"
scale="0 0.3 0.7"
offset=" 0 0 0" />
@ -3173,6 +3088,16 @@
name="mFaceEyeLidUpperLeft"
scale="0 0.1 0.2"
offset=" 0 0 0" />
<bone
name="mFaceEyeAltLeft"
scale="0 0 0"
offset="0 0 0" />
<bone
name="mFaceEyeAltRight"
scale="0 0 0"
offset="0 0 0" />
</param_skeleton>
</param>
@ -3351,6 +3276,16 @@
name="mFaceEyebrowInnerLeft"
scale="0 0 0"
offset="0 0.00225 -0.0048" />
<bone
name="mFaceEyeAltRight"
scale="0 0 0"
offset="0 -0.0042 -0.0035" />
<bone
name="mFaceEyeAltLeft"
scale="0 0 0"
offset="0 0.0042 -0.0035" />
<bone
name="mFaceEyeLidUpperRight"
@ -3754,6 +3689,16 @@
<bone
name="mFaceEyeLidUpperRight"
scale="0 0 0"
offset="0 0 -.006" />
<bone
name="mFaceEyeAltLeft"
scale="0 0 0"
offset="0 0 -.006" />
<bone
name="mFaceEyeAltRight"
scale="0 0 0"
offset="0 0 -.006" />
</param_skeleton>
@ -3929,6 +3874,16 @@
offset = "0.015 0.00 0.005"
scale = "0.0 0.0 0.0" />
<bone
name="mFaceEyeAltRight"
scale="0 0 0"
offset="0 -0.0033 0.0025" />
<bone
name="mFaceEyeAltLeft"
scale="0 0 0"
offset="0 0.0033 0.0025" />
<bone
name="mFaceEyeLidLowerRight"
scale="0 0 0"
@ -4098,10 +4053,184 @@
name="mFaceEyeAltRight"
scale="0.3195 0.3280 0.3280"
offset="-0.005 0 0" />
</param_skeleton>
</param>
<param
id="30772"
group="1"
name="EyeBone_Head_Elongate"
value_min="-1"
value_max="1">
<param_skeleton>
<bone
name="mFaceRoot"
scale="0.25 0 0"
offset="0 0 0" />
<bone
name="mFaceEyeLidUpperLeft"
scale="0 0 0"
offset="-0.0038 0 0" />
<bone
name="mFaceEyeLidUpperRight"
scale="0 0 0"
offset="-0.0038 0 0" />
<bone
name="mFaceEyeLidLowerLeft"
scale="0 0 0"
offset="-0.0038 0 0" />
<bone
name="mFaceEyeLidLowerRight"
scale="0 0 0"
offset="-0.0038 0 0" />
<bone
name="mFaceNoseCenter"
scale="0 0 0"
offset=".01 0 0" />
<bone
name="mFaceNoseRight"
scale="0 0 0"
offset=".005 0 0" />
<bone
name="mFaceNoseLeft"
scale="0 0 0"
offset=".005 0 0" />
<bone
name="mFaceNoseBase"
scale="0 0 0"
offset=".005 0 0" />
<bone
name="mFaceLipUpperLeft"
scale="0 0 0"
offset="0.005 0 0" />
<bone
name="mFaceLipUpperCenter"
scale="0 0 0"
offset="0.005 0 0" />
<bone
name="mFaceLipUpperRight"
scale="0 0 0"
offset="0.005 0 0" />
<bone
name="mFaceLipCornerRight"
scale="0 0 0"
offset="0.005 0 0" />
<bone
name="mFaceLipCornerLeft"
scale="0 0 0"
offset="0.005 0 0" />
<bone
name="mFaceLipLowerLeft"
scale="0 0 0"
offset="0.01 0 0" />
<bone
name="mFaceLipLowerCenter"
scale="0 0 0"
offset="0.01 0 0" />
<bone
name="mFaceLipLowerRight"
scale="0 0 0"
offset="0.01 0 0" />
<bone
name="mFaceCheekLowerLeft"
scale="0 0 0"
offset="0.007 0 0" />
<bone
name="mFaceCheekLowerRight"
scale="0 0 0"
offset="0.007 0 0" />
<bone
name="mFaceChin"
scale="0 0 0"
offset="0.014 0 0" />
<bone
name="mFaceTeethUpper"
scale="0.28 0 0"
offset="0 0 0" />
<bone
name="mFaceTeethLower"
scale="0.28 0 0"
offset="0 0 0" />
<bone
name="mFaceTongueBase"
scale="0.3 0 0"
offset="0 0 0" />
<bone
name="mFaceTongueTip"
scale="0 0 0"
offset="0.004 0 0" />
</param_skeleton>
</param>
<param
id="31772"
group="1"
name="EyeBone_Head_Elongate"
value_min="0"
value_max="1">
<param_skeleton>
<bone
name="mFaceEyeAltLeft"
scale="0 0 0"
offset="0.0058 0 0" />
<bone
name="mFaceEyeAltRight"
scale="0 0 0"
offset="0.0058 0 0" />
</param_skeleton>
</param>
<param
id="32772"
group="1"
name="EyeBone_Head_Elongate"
value_min="0"
value_max="1">
<param_skeleton>
<bone
name="mFaceEyeAltLeft"
scale="0 0 0"
offset="-0.0032 0 0" />
<bone
name="mFaceEyeAltRight"
scale="0 0 0"
offset="-0.0032 0 0" />
</param_skeleton>
</param>
<!-- Eye Brow sliders -->
<param
@ -14577,6 +14706,23 @@ render_pass="bump">
<driven
id="772" />
<driven
id="30772" />
<driven
min1="0"
max1="0"
max2="0"
min2="0.45"
id="31772" />
<driven
min1="0.5"
max1="1"
max2="1"
min2="1"
id="32772" />
</param_driver>
</param>

View File

@ -21,11 +21,11 @@
<bone aliases="head avatar_mHead" connected="true" end="0.000 0.000 0.079" group="Torso" name="mHead" pivot="0.000000 -0.000000 0.075630" pos="0.000 -0.000 0.076" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base">
<collision_volume end="0.000 0.000 0.100" group="Collision" 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 aliases="figureHair avatar_mSkull" connected="false" end="0.000 0.000 0.033" group="Extra" name="mSkull" pivot="0.000000 0.000000 0.079000" pos="0.000 0.000 0.079" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
<bone aliases="avatar_mEyeRight" connected="false" end="0.100 0.000 0.000" group="Extra" name="mEyeRight" pivot="0.098466 -0.036000 0.079000" pos="0.098 -0.036 0.079" rot="0.000000 0.000000 -0.000000" scale="1.000 1.000 1.000" support="base"/>
<bone aliases="avatar_mEyeLeft" connected="false" end="0.100 0.000 0.000" group="Extra" name="mEyeLeft" pivot="0.098461 0.036000 0.079000" pos="0.098 0.036 0.079" rot="0.000000 -0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
<bone connected="false" end="0.022 0.000 0.000" group="Face" name="mFaceEyeAltRight" pivot="0.098466 -0.036000 0.079000" pos="0.098 -0.036 0.079" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended"/>
<bone connected="false" end="0.022 0.000 0.000" group="Face" name="mFaceEyeAltLeft" pivot="0.098461 0.036000 0.079000" pos="0.098 0.036 0.079" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended"/>
<bone connected="false" end="0.020 0.000 0.000" group="Face" name="mFaceRoot" pivot="0.025 0.000 0.045" pos="0.025 0.000 0.045" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
<bone aliases="avatar_mEyeRight" connected="false" end="0.025 0.000 0.000" group="Extra" name="mEyeRight" pivot="0.098466 -0.036000 0.079000" pos="0.098 -0.036 0.079" rot="0.000000 0.000000 -0.000000" scale="1.000 1.000 1.000" support="base"/>
<bone aliases="avatar_mEyeLeft" connected="false" end="0.025 0.000 0.000" group="Extra" name="mEyeLeft" pivot="0.098461 0.036000 0.079000" pos="0.098 0.036 0.079" rot="0.000000 -0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
<bone connected="false" end="0.020 0.000 0.000" group="Face" name="mFaceRoot" pivot="0.025000 0.000000 0.045000" pos="0.025 0.000 0.045" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended">
<bone connected="false" end="0.025 0.000 0.000" group="Face" name="mFaceEyeAltRight" pivot="0.073466 -0.036000 0.0339300" pos="0.073 -0.036 0.034" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended"/>
<bone connected="false" end="0.025 0.000 0.000" group="Face" name="mFaceEyeAltLeft" pivot="0.073461 0.036000 0.0339300" pos="0.073 0.036 0.034" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended"/>
<bone connected="false" end="0.024 0.004 0.018" group="Face" name="mFaceForeheadLeft" pivot="0.061 0.035 0.083" pos="0.061 0.035 0.083" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
<bone connected="false" end="0.024 -0.004 0.018" group="Face" name="mFaceForeheadRight" pivot="0.061 -0.035 0.083" pos="0.061 -0.035 0.083" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
<bone connected="false" end="0.023 0.013 0.000" group="Eyes" name="mFaceEyebrowOuterLeft" pivot="0.064 0.051 0.048" pos="0.064 0.051 0.048" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>