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.

master
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"/>