public void _UpdateSpineUBasis()
{
if( _isDirtySpineUBasis ) {
_isDirtySpineUBasis = false;
_spineUBasis = Matrix3x3.identity;
Vector3 dirY = (this.shoulderPos != null) ? (this.shoulderPos[1] + this.shoulderPos[0]) : (this.armPos[1] + this.armPos[0]);
dirY = dirY * 0.5f - this.spineUPos;
Vector3 dirX = (this.shoulderPos != null) ? (this.shoulderPos[1] - this.shoulderPos[0]) : (this.armPos[1] - this.armPos[0]);
Vector3 dirZ = Vector3.Cross( dirX, dirY );
dirX = Vector3.Cross( dirY, dirZ );
if( SAFBIKVecNormalize3( ref dirX, ref dirY, ref dirZ ) ) {
_spineUBasis.SetColumn( ref dirX, ref dirY, ref dirZ );
SAFBIKMatMultRet0( ref _spineUBasis, ref _spineUBoneLocalAxisBasisInv );
}
}
}