Commit graph

261 commits

Author SHA1 Message Date
Anthony J. Thibault
656608e2ff Fixes for away.js 2016-02-02 12:08:52 -08:00
Anthony J. Thibault
47f3ce3786 CharacterController jump is more reliable. 2016-02-02 11:26:16 -08:00
Anthony J. Thibault
2936811484 Added takeoff animation, WIP
Character controller still has some jump/in-air bugs.
2016-02-02 11:26:15 -08:00
Anthony J. Thibault
61c55ebf6c Updated character controller with a state enumeration
Also, adjusted checkForSupport logic such that very slanted walls are not considered support.
2016-02-02 11:26:15 -08:00
Anthony J. Thibault
e9fd439ffd Added inAir animations 2016-02-02 11:23:46 -08:00
Anthony J. Thibault
3cee3cbb5a Avatar Developer Menu: added animation debug options
This options are for for developers only and might help debug animation related issues.

* Enable Inverse Kinematics: this can be toggled to disable IK for the avatar.
* Enable Anim Pre and Post Rotations: this option can be used to use FBX pre-rotations from source avatar animations, instead of the current default, which is to use them from the source model.
  This only effects FBX files loaded by the animation system, it does not affect changing model orientations via JavaScript.
2016-01-25 18:52:13 -08:00
Anthony J. Thibault
7af20e90c8 Hooked up fly animation to json and Rig 2016-01-22 13:47:09 -08:00
Anthony J. Thibault
cac19b8579 grab animation work
Hand animations now have 5 states:

* idle
* open
* grasp
* point
* farGrasp

The handControllerGrab.js script now chooses one of these five animations, based on the state of the HandController object.

Also, removed hand trigger AnimVar setting from C++ Rig class.
2016-01-07 19:36:57 -08:00
Anthony J. Thibault
3e6ff0eb68 Moved hand animation control into grab script. 2016-01-05 19:56:56 -08:00
Brad Hefta-Gaub
02835fc960 Merge pull request #6702 from hyperlogic/tony/soft-attachments
Soft Attachment Support
2016-01-03 08:46:16 -10:00
Anthony J. Thibault
6afe3bae5e Copy Neuron joints into controller poses
This makes the accessible for controller mapping and to JavaScript.

Added 'neuronAvatar.js' as an example of reading joints from the neuron and setting them
on the avatar.  NOTE: the rotations are currently in the wrong coordinate frame.
2015-12-22 17:21:33 -08:00
Anthony J. Thibault
6b5b272cd7 Added SoftAttachmentModel class.
Is a subclass of Model, it overrides the updateClusterMatrices so it will pull
the actual joint matrices from a different rig override.

For the avatar soft attachment system, this override will be the Avatar::_skeletonModel rig.
This will give us the ability for an avatar to "wear" non-rigid attachments, such as clothing.
2015-12-18 09:52:11 -08:00
Anthony J. Thibault
3f0cdb3c02 Merge branch 'master' into tony/js-avatar-default-pose 2015-12-14 11:19:24 -08:00
Atlante45
d3224bfde3 More warning fixes 2015-12-11 16:03:44 -08:00
Atlante45
da63357254 More warning fixes 2015-12-11 15:42:15 -08:00
Atlante45
ce51350b65 Fix warnings on windows 64bit 2015-12-11 15:42:15 -08:00
Howard Stearns
dfec222c81 Report animation triggers to normal javascript animationStateHandlers, and update away.js as an example. 2015-12-10 20:39:01 -08:00
Anthony J. Thibault
652ce5501f Expose Avatar default pose to JavaScript
New JavaScript API to get the avatar's default pose.

   MyAvatar.getDefaultJointRotation(index);
   MyAvatar.getDefaultJointTranslation(index);

See `examples/tPose.js` for example usage
2015-12-10 13:57:31 -08:00
Seth Alves
f99812a903 adjust method names to fit convention 2015-12-07 14:31:08 -08:00
Anthony J. Thibault
fd4ed29405 MyAvatar.clearJointData bug fix
MyAvatar.setJointRotation() now works properly after MyAvatar.clearJointData()
2015-12-07 09:03:40 -08:00
Seth Alves
a948ae5f19 children of avatar joints might be right, now 2015-12-06 10:48:00 -08:00
Anthony J. Thibault
7abfc93ff9 Avatar::getJointRotation and getJointTranslation is thread-safe
It can be called from script with minimal blocking,
because it inspects a copy of the joint values from the Rig, which is updated atomically.
This copy occurs in Rig::updateAnimations()
2015-12-04 16:16:17 -08:00
Anthony J. Thibault
ba001ef4b0 Rig: split Poses into internal and external sets.
In preparation for making some accessors thread safe.
2015-12-04 15:15:18 -08:00
Anthony J. Thibault
e2d9e37eb8 Fix for head offset for models with no eyes
This was causing in correct body poses while wearing an HMD.
2015-11-30 14:08:21 -08:00
Anthony J. Thibault
97a2eb62d4 Fix for incorrect avatar bounds after changing avatars 2015-11-25 12:06:50 -08:00
Anthony J. Thibault
868cf83b48 Fix for attachments and MyAvatar::getDefaultEyePosition() 2015-11-25 10:07:29 -08:00
Anthony Thibault
527199bc69 Merge pull request #1 from AndrewMeadows/fix-avatar-capsule
compute bounding capsule of avatars
2015-11-25 09:39:18 -08:00
Andrew Meadows
2cc1dfe819 getRootAbsoluteBindPoseByChildName() is deprecated 2015-11-24 20:39:26 -08:00
Andrew Meadows
3ae082f09c compute bounding capsule of avatars 2015-11-24 20:28:39 -08:00
Anthony J. Thibault
76034d62d5 Eye tracking fixes 2015-11-24 16:57:26 -08:00
Anthony J. Thibault
f120e10ff4 Merge branch 'master' into tony/remove-joint-states 2015-11-24 15:00:05 -08:00
Anthony J. Thibault
e07e1c5c92 Fix for avatar eye tracking
When computing a full eye to world matrix, the translations need to be the geometry coordinate frame, not scaled into meters.
2015-11-24 14:01:01 -08:00
Anthony J. Thibault
14189ac909 Move Y_180 flip rotation out of Rig
This Y_180 flip is defined in skeletonModel not in the rig.
This is important if we wish to use the Rig for both Avatars (180 flip) and Entity models (no 180 flip).

We can hide this 180 flip from script, if we wish, by including it in all the accessors to and from
MyAvatar -> skeletalModel -> Rig.

Added Quaternions::Y_180 to GLMHelpers.
2015-11-23 19:31:27 -08:00
Anthony J. Thibault
fe683edb66 Avatar Debug Draw Default Pose now works 2015-11-21 10:53:24 -08:00
Anthony J. Thibault
6cfd831a5a Menu: Added Developer > Avatar > Debug Draw Position
Also renamed "Debug Draw Bind Pose" to "Debug Draw Default Pose"
2015-11-21 09:50:56 -08:00
Anthony J. Thibault
995958a8f0 Rig: normalized index bounds checking. 2015-11-20 18:45:53 -08:00
Anthony J. Thibault
54408a9c87 AnimVars are now in avatar/rig space
This makes it much simpler for code out side of the rig to manipulate AnimVars

* Removed mat4 type from AnimVars
* AnimVariantMap now has a _rigToGeometryTransform matrix
  used to transform positions and rotations into the correct coordinate frame.
* Moved AnimPose code to extract a quat from a scaled matrix into GLMHelpers
2015-11-20 18:29:17 -08:00
Anthony J. Thibault
4f8cd6930d Rig: Fixes for initializing _absolutePoses during initJointStates 2015-11-20 15:13:16 -08:00
Anthony J. Thibault
2f37335d77 Warning fixes 2015-11-20 14:50:42 -08:00
Anthony J. Thibault
30087ef0bd Removed dead code 2015-11-20 14:37:53 -08:00
Anthony J. Thibault
cb89f09635 Removed EntityRig and AvatarRig. One Rig to rule them all. 2015-11-20 14:27:01 -08:00
Anthony J. Thibault
a77ea8da43 Removed JointStates! You won't be missed. 2015-11-20 14:15:37 -08:00
Anthony J. Thibault
a4116e633a Removed last consumer of JointState class
Removed option to render IK constraints used by old animation system
2015-11-20 11:26:54 -08:00
Anthony J. Thibault
df7ca3bc38 Rig: getJointRotation and getJointTranslation use _relativePoses 2015-11-20 10:36:40 -08:00
Anthony J. Thibault
923d60e452 Rig: Bug fix for copyJointsIntoJointData 2015-11-20 10:30:12 -08:00
Anthony J. Thibault
ad4b8e0001 Avatar transmission fixes, moved JointData into shared
* Moved JointData into shared library
* added methods to the rig to copy into and out of JointData
* JointData translations must be in meters this is so the
  fixed point compression wont overflow, also, it's a
  consistent wire format.
2015-11-20 10:24:24 -08:00
Anthony J. Thibault
27685e0425 Bug fixes for other Avatar root translation 2015-11-20 09:33:57 -08:00
Anthony J. Thibault
c2ae6f0c8e Fix for remote Avatar
Make sure to copy the correct data to and from AvatarData::JointData
2015-11-20 09:20:41 -08:00
Anthony J. Thibault
302b6f7e26 Mac and Debug build fixes 2015-11-19 18:28:15 -08:00
Anthony J. Thibault
9e36a79155 Rig: hooked up script overridePoses 2015-11-19 18:14:04 -08:00
Anthony J. Thibault
46d23a9f38 head IK and controller IK work again! 2015-11-19 17:30:56 -08:00
Anthony J. Thibault
982e2c06a9 Rig: Switched over to use AnimPoses instead of JointStates
* fixed debug rendering
* improved jointState/animPose diff detection code.
2015-11-19 12:14:04 -08:00
Anthony J. Thibault
721da29432 WIP checkpoint
* No longer normalizing scale in AnimSkeleton and AnimClip
  This means graph is animating in 'geometry' coordinates
  before unit scale is even applied.  This is necessary to
  properly work with both Avatar based models and ModelEntity
  based models

Many things are broken.
  * debug rendering (translations are x100)
  * IK hand targets
  * follow cam
  * I did not even dare to try HMD mode
2015-11-18 18:47:33 -08:00
Anthony J. Thibault
b054ef1488 Rig: fixes for rigs used for ModelEntities. 2015-11-18 16:04:34 -08:00
Anthony J. Thibault
b481d7c73d Merge branch 'master' into tony/remove-joint-states 2015-11-18 09:38:21 -08:00
Anthony J. Thibault
9a39da9050 new absolutePoses work for avatars, but not for model entities. 2015-11-17 18:53:38 -08:00
Anthony J. Thibault
e93b5c5838 Bug fixes for avatars with no eyes
Changed default eye position to 1.9 meters because
the hifi_team avatars are 2.0 meters tall.

Also, prevent array access with negative indices when eye bones are missing.

ಠ_ಠ
2015-11-17 14:02:27 -08:00
Anthony J. Thibault
80eb247b9c WIP checkin
* AnimManipulator: added absolute and relative position and translation support
* Rig: added _overrideFlags and _overridePoses for script overrides.
2015-11-16 18:49:47 -08:00
U-GAPOS\andrew
6733767d8b use animation state to compute bodyInSensorFrame 2015-11-13 16:39:40 -08:00
Anthony J. Thibault
e698d3c1e8 Isolate JointStates within the Rig class
Except for SkeletalModel::computeBounds() JointStates are now completly
encapsulated by the Rig.  Now we can start using AnimPoses instead and
in parallel with the JointState implementation. Then we can assert that
they are identical, before removing JointStates.

This check in has many comments with the AJT tag.
Each one of these cases will need to be revisitied and fixed.
In particular // AJT: LEGACY will be used to enclose all code
in the Rig which manipulates the _jointState QVector.
2015-11-11 18:23:58 -08:00
Anthony J. Thibault
11440f92f4 Removed rig animations
* Deleted AnimationHandle class
* Removed enableAnimGraph and anableRigAnimations from Menu.
* Removed *some* references to old IK system.
  But it is still used when computing collision bounding volumes
2015-11-11 15:32:57 -08:00
Anthony J. Thibault
e1d0a97807 Implemented MyAvatar.prefetchAnimation() JS method 2015-11-10 16:51:48 -08:00
Anthony J. Thibault
936c55a94e New MyAvatar animation JS interface
JavaScript changes:

* removed MyAvatar.playAnimation
* removed MyAvatar.stopAnimation
* removed MyAVatar.getGetAnimationDetails
* removed MyAvatar.startAnimationByRole
* removed MyAvatar.stopAnimationByRole
* removed MyAVatar.getGetAnimationDetailsByRole
* removed MyAVatar.clearJointPriorities

* added MyAvatar.overrideAnimation(url, fps, loop, firstFrame, lastFrame)
* added MyAvatar.restoreAnimation()
* added MyAvatar.getAnimationRoles()
* added MyAvatar.overrideRoleAnimation(role, url, fps, loop, firstFrame, lastFrame)
* added MyAvatar.restoreRoleAnimation(role)
* added MyAvatar.prefetchAnimation(url)

* update kneel.js with new api.
* added theBird.js to test role override api.

C++ changes:

* Added getParent() and replaceChild() to AnimNode
* Added findByName() and traverse() to AnimNode
* Changed AnimStateMachine to hold nodes by childIndex instead of smart pointer.
  This allows script to replace nodes dynamically via overrideRoleAnimation
2015-11-10 16:34:38 -08:00
Anthony J. Thibault
eacc2cae0c WIP checkpoint 2015-11-09 18:36:23 -08:00
Anthony J. Thibault
af2b3bb9d5 MyAvatar: removed priority, hold and maskedJoints from playAnimation js call 2015-11-09 16:56:49 -08:00
Anthony J. Thibault
a0f21228f6 AnimGraph support for start and stop animation from JavaScript
Follows the same model as the existing startAnimation and stopAnimation calls.
See kneel.js for an example.
2015-11-09 12:19:01 -08:00
Howard Stearns
314c11e8d4 Make life easier for Sam. 2015-11-06 16:59:46 -08:00
Anthony J. Thibault
e3e759248f Merge branch 'master' into tony/anim-sync-blend 2015-11-02 08:37:10 -08:00
Howard Stearns
f7d558a252 comment 2015-10-29 19:26:54 -07:00
Howard Stearns
dcc173c93a comment. 2015-10-29 19:21:24 -07:00
Anthony J. Thibault
f7b6fab0c3 Merge branch 'master' into tony/anim-sync-blend 2015-10-29 11:35:48 -07:00
Howard Stearns
4083c5c71b Handle wrapping of very long-lived sessions. 2015-10-29 10:31:36 -07:00
Howard Stearns
d79d0bc5c5 Merge branch 'master' of https://github.com/highfidelity/hifi into expose-anim-vars 2015-10-29 08:25:41 -07:00
Anthony J. Thibault
5e73af9272 Rig: Removed dt from updateFromEyeParameters() 2015-10-28 18:10:41 -07:00
Anthony J. Thibault
b3734b5ddb Rig: removed redundant method updateEyeJoints()
Instead we call updateEyeJoint() twice, once for each eye.
2015-10-28 10:46:09 -07:00
Anthony J. Thibault
f9dc05c989 Rig::computeMotionAnimationState better filtering of small dt velocities.
Only update _lastVelocity when dt is sufficiently large.
2015-10-27 18:59:02 -07:00
Anthony J. Thibault
ae8938cadc Fix for local eye tracking in AnimGraph
Also moved Rig::updateAnimations() now occurs after
Rig::updateFromHeadParameters() and Rig::updateFromHandParameters().
This should remove a frame of lag for head and hand IK targets.

Rig::updateFromEyeParameters() occurs after Rig::updateAnimations().
But now the eye JointStates are re-computed, this is the actual
fix for the local eye tracking issue.
2015-10-27 18:30:35 -07:00
Howard Stearns
4b4907c9ef Allow multiple scripts to register, and allow them to specify the specific anim vars they are interested in. 2015-10-26 10:04:55 -07:00
Howard Stearns
e11b0add9a Update safety trampoline with correct arguments. 2015-10-24 15:29:49 -07:00
Anthony J. Thibault
06de087802 Filter out velocities computed from position delta if dt is small
While in the HMD, updates can occur with very small deltaTime values.
These this makes the position delta method of computing a velocity very
susceptible to noise and precision errors.
2015-10-23 18:27:20 -07:00
Anthony J. Thibault
a66f31bb20 Added AnimBlendLinearMove node
AnimBlendLinearMove is now in use by forward, backward and strafe movements.
Tuned rig moving average speeds to be more sensitive.
2015-10-22 16:33:31 -07:00
Howard Stearns
2b7ceffd64 Get rid of globalObject().property("MyAvatar").property("animationStateHandlerResult"). 2015-10-22 16:23:09 -07:00
Howard Stearns
ecc920199d Return id suitable for use with remover, per comments. 2015-10-22 15:24:24 -07:00
Howard Stearns
1d0464ede5 Name change and thread checks per comments. 2015-10-22 15:15:10 -07:00
Howard Stearns
30429e8138 Don't use late-breaking results that got reported after the handler was removed. 2015-10-22 11:43:22 -07:00
Howard Stearns
9fd61907f5 Call back to Javascript asynchronously, so that we don't block and the script's engine doesn't have thread conflicts. 2015-10-21 20:50:07 -07:00
Anthony J. Thibault
c83af43d0e Added strafe and backward blending 2015-10-21 17:34:09 -07:00
Anthony J. Thibault
41cce4320a Merge branch 'tony/anim-sync-blend' into test 2015-10-20 17:39:13 -07:00
Howard Stearns
3d2f00c609 Cleaner intgerface, including cleanup. 2015-10-20 17:01:45 -07:00
Anthony J. Thibault
5cd2786c1d First pass at Rig timeScaling and blending between slow, walk and run. 2015-10-20 16:37:05 -07:00
Howard Stearns
4c6867bb9c Merge branch 'master' of https://github.com/highfidelity/hifi into expose-anim-vars 2015-10-20 12:17:00 -07:00
Howard Stearns
2213a4bb02 Do not set (just rightHand) anim var if a script has done so. 2015-10-19 20:09:48 -07:00
Howard Stearns
91c2d31118 Merge branch 'master' of https://github.com/highfidelity/hifi into expose-anim-vars 2015-10-16 15:51:09 -07:00
Howard Stearns
f25cc93936 Initial prototype of exposing anim vars to javascript. 2015-10-16 10:48:36 -07:00
Seth Alves
462918ffcf cleanups 2015-10-15 14:55:17 -07:00
Seth Alves
4903db45b1 give other avatars an anim-skeleton 2015-10-15 14:21:06 -07:00
Seth Alves
a70ba4cd5a add some accessors 2015-10-15 11:42:53 -07:00
Anthony J. Thibault
e484a904a2 Rotate the avatar to align with the HMD while moving
MyAvatar: refactored updateFromHMDSensorMatrix() a bit by splitting it into several methods, because
it was getting quite large and becoming hard to follow.

* beginStraighteningLean() - can be called when we would like to trigger a re-centering action.
* shouldBeginStraighteningLean() - contains some of the logic to decide if we should begin a re-centering action.
  for now it encapulates the capsule check.
* processStraighteningLean() - performs the actual re-centering calculation.

New code was added to MyAvatar::updateFromHMDSensorMatrix() to trigger re-centering when the avatar speed rises
over a threshold.

Secondly the Rig::computeMotionAnimationState() state machine for animGraph added a state change hysteresis
of 100ms.  This hysteresis should help smooth over two issues.

1) When the delta position is 0, because the physics timestep was not evaluated.
2) During re-centering due to desired motion, the avatar velocity can fluctuate causing undesired animation state fluctuation.
2015-10-13 17:36:00 -07:00
U-GAPOS\andrew
f01847de14 experimental HMD hips tracking 2015-10-12 11:39:54 -07:00
Andrew Meadows
bc48f70877 move IKTarget into its own files 2015-10-12 11:39:54 -07:00