Skip to content

Commit

Permalink
feat(Avatar): add basic avatar hand prefab with controller script
Browse files Browse the repository at this point in the history
A new set of avatar hand models has been added with a controller script
for animating movement of the fingers on the hand models.

It's also possible to provide custom finger axis values based on the
current interaction type (e.g. touch, grab, use).

The CustomControllerModel example scene has been updated to use the new
avatar hands as an example of how to use them.

Big thanks to @jimthegrim in the VRTK slack channel for all of the
hard work on the hand models, animations and figuring out the
layers and weights work in Unity to make these hands possible. <3
  • Loading branch information
thestonefox committed Jul 15, 2017
1 parent 43ae864 commit 315911d
Show file tree
Hide file tree
Showing 35 changed files with 5,614 additions and 283 deletions.
732 changes: 453 additions & 279 deletions Assets/VRTK/Examples/032_Controller_CustomControllerModel.unity

Large diffs are not rendered by default.

9 changes: 9 additions & 0 deletions Assets/VRTK/Prefabs/AvatarHands.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions Assets/VRTK/Prefabs/AvatarHands/BasicHands.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions Assets/VRTK/Prefabs/AvatarHands/BasicHands/Models.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1011 &101100000
AvatarMask:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: Hand_Idle
m_Mask: 01000000010000000100000001000000010000000100000001000000010000000100000000000000000000000000000000000000
m_Elements:
- m_Path:
m_Weight: 1
- m_Path: Armature
m_Weight: 0
- m_Path: Armature/Bone_Arm_root
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Pinkie_Root
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Pinkie_Root/Bone_Pinkie_Root_1st
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Pinkie_Root/Bone_Pinkie_Root_1st/Bone_Pinkie_Finger_Knuckle
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Pinkie_Root/Bone_Pinkie_Root_1st/Bone_Pinkie_Finger_Knuckle/Bone_Pinkie_Finger_1
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Pinkie_Root/Bone_Pinkie_Root_1st/Bone_Pinkie_Finger_Knuckle/Bone_Pinkie_Finger_1/Bone_Pinkie_Finger_2
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Pinkie_Root/Bone_Pinkie_Root_1st/Bone_Pinkie_Finger_Knuckle/Bone_Pinkie_Finger_1/Bone_Pinkie_Finger_2/Bone_Pinkie_Finger_3
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Pinkie_Root/Bone_Pinkie_Root_1st/Bone_Pinkie_Finger_Knuckle/Bone_Pinkie_Finger_1/Bone_Pinkie_Finger_2/Bone_Pinkie_Finger_3/Bone_Pinkie_Finger_3_end
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Index_Palm_Root
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Index_Palm_Root/Bone_Index_Palm_Root_2nd
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Index_Palm_Root/Bone_Index_Palm_Root_2nd/Bone_Index_Palm_root_3rd
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Index_Palm_Root/Bone_Index_Palm_Root_2nd/Bone_Index_Palm_root_3rd/Bone_Index_Finger_Knuckle
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Index_Palm_Root/Bone_Index_Palm_Root_2nd/Bone_Index_Palm_root_3rd/Bone_Index_Finger_Knuckle/Bone_Index_Finger_1
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Index_Palm_Root/Bone_Index_Palm_Root_2nd/Bone_Index_Palm_root_3rd/Bone_Index_Finger_Knuckle/Bone_Index_Finger_1/Bone_Index_Finger_2
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Index_Palm_Root/Bone_Index_Palm_Root_2nd/Bone_Index_Palm_root_3rd/Bone_Index_Finger_Knuckle/Bone_Index_Finger_1/Bone_Index_Finger_2/Bone_Index_Finger_3
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Index_Palm_Root/Bone_Index_Palm_Root_2nd/Bone_Index_Palm_root_3rd/Bone_Index_Finger_Knuckle/Bone_Index_Finger_1/Bone_Index_Finger_2/Bone_Index_Finger_3/Bone_Index_Finger_3_end
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Middle_Palm_Root
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Middle_Palm_Root/Bone_Midle_Palm_1st
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Middle_Palm_Root/Bone_Midle_Palm_1st/Bone_Middle_Palm_2nd
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Middle_Palm_Root/Bone_Midle_Palm_1st/Bone_Middle_Palm_2nd/Bone_Middle_Finger_Knuckle
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Middle_Palm_Root/Bone_Midle_Palm_1st/Bone_Middle_Palm_2nd/Bone_Middle_Finger_Knuckle/Bone_Middle_Finger_1
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Middle_Palm_Root/Bone_Midle_Palm_1st/Bone_Middle_Palm_2nd/Bone_Middle_Finger_Knuckle/Bone_Middle_Finger_1/Bone_Middle_Finger_2
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Middle_Palm_Root/Bone_Midle_Palm_1st/Bone_Middle_Palm_2nd/Bone_Middle_Finger_Knuckle/Bone_Middle_Finger_1/Bone_Middle_Finger_2/Bone_Middle_Finger_3
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Middle_Palm_Root/Bone_Midle_Palm_1st/Bone_Middle_Palm_2nd/Bone_Middle_Finger_Knuckle/Bone_Middle_Finger_1/Bone_Middle_Finger_2/Bone_Middle_Finger_3/Bone_Middle_Finger_3_end
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Ring_Palm_Root
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Ring_Palm_Root/Bone_Ring_Palm_1st
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Ring_Palm_Root/Bone_Ring_Palm_1st/Bone_Ring_Palm_2nd
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Ring_Palm_Root/Bone_Ring_Palm_1st/Bone_Ring_Palm_2nd/Bone_Ring_Knuckle
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Ring_Palm_Root/Bone_Ring_Palm_1st/Bone_Ring_Palm_2nd/Bone_Ring_Knuckle/Bone_Ring_Finger_1
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Ring_Palm_Root/Bone_Ring_Palm_1st/Bone_Ring_Palm_2nd/Bone_Ring_Knuckle/Bone_Ring_Finger_1/Bone_Ring_Finger_2
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Ring_Palm_Root/Bone_Ring_Palm_1st/Bone_Ring_Palm_2nd/Bone_Ring_Knuckle/Bone_Ring_Finger_1/Bone_Ring_Finger_2/Bone_Ring_Finger_3
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Ring_Palm_Root/Bone_Ring_Palm_1st/Bone_Ring_Palm_2nd/Bone_Ring_Knuckle/Bone_Ring_Finger_1/Bone_Ring_Finger_2/Bone_Ring_Finger_3/Bone_Ring_Finger_3_end
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Thumb_Palm_Root
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Thumb_Palm_Root/Bone_Thumb_Root_1st
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Thumb_Palm_Root/Bone_Thumb_Root_1st/Bone_Thumb_Finger_Knuckle
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Thumb_Palm_Root/Bone_Thumb_Root_1st/Bone_Thumb_Finger_Knuckle/Bone_Thumb_Finger_1
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Thumb_Palm_Root/Bone_Thumb_Root_1st/Bone_Thumb_Finger_Knuckle/Bone_Thumb_Finger_1/Bone_Thumb_Finger_2
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Thumb_Palm_Root/Bone_Thumb_Root_1st/Bone_Thumb_Finger_Knuckle/Bone_Thumb_Finger_1/Bone_Thumb_Finger_2/Bone_Thumb_Finger_3
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Thumb_Palm_Root/Bone_Thumb_Root_1st/Bone_Thumb_Finger_Knuckle/Bone_Thumb_Finger_1/Bone_Thumb_Finger_2/Bone_Thumb_Finger_3/Bone_Thumb_Finger_3_end
m_Weight: 0
- m_Path: VRTK_BasicHand
m_Weight: 0

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1011 &101100000
AvatarMask:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: Hand_Index
m_Mask: 01000000010000000100000001000000010000000100000001000000010000000100000000000000000000000000000000000000
m_Elements:
- m_Path:
m_Weight: 1
- m_Path: Armature
m_Weight: 1
- m_Path: Armature/Bone_Arm_root
m_Weight: 1
- m_Path: Armature/Bone_Arm_root/Bone_Wrist
m_Weight: 1
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Pinkie_Root
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Pinkie_Root/Bone_Pinkie_Root_1st
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Pinkie_Root/Bone_Pinkie_Root_1st/Bone_Pinkie_Finger_Knuckle
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Pinkie_Root/Bone_Pinkie_Root_1st/Bone_Pinkie_Finger_Knuckle/Bone_Pinkie_Finger_1
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Pinkie_Root/Bone_Pinkie_Root_1st/Bone_Pinkie_Finger_Knuckle/Bone_Pinkie_Finger_1/Bone_Pinkie_Finger_2
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Pinkie_Root/Bone_Pinkie_Root_1st/Bone_Pinkie_Finger_Knuckle/Bone_Pinkie_Finger_1/Bone_Pinkie_Finger_2/Bone_Pinkie_Finger_3
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Pinkie_Root/Bone_Pinkie_Root_1st/Bone_Pinkie_Finger_Knuckle/Bone_Pinkie_Finger_1/Bone_Pinkie_Finger_2/Bone_Pinkie_Finger_3/Bone_Pinkie_Finger_3_end
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Index_Palm_Root
m_Weight: 1
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Index_Palm_Root/Bone_Index_Palm_Root_2nd
m_Weight: 1
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Index_Palm_Root/Bone_Index_Palm_Root_2nd/Bone_Index_Palm_root_3rd
m_Weight: 1
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Index_Palm_Root/Bone_Index_Palm_Root_2nd/Bone_Index_Palm_root_3rd/Bone_Index_Finger_Knuckle
m_Weight: 1
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Index_Palm_Root/Bone_Index_Palm_Root_2nd/Bone_Index_Palm_root_3rd/Bone_Index_Finger_Knuckle/Bone_Index_Finger_1
m_Weight: 1
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Index_Palm_Root/Bone_Index_Palm_Root_2nd/Bone_Index_Palm_root_3rd/Bone_Index_Finger_Knuckle/Bone_Index_Finger_1/Bone_Index_Finger_2
m_Weight: 1
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Index_Palm_Root/Bone_Index_Palm_Root_2nd/Bone_Index_Palm_root_3rd/Bone_Index_Finger_Knuckle/Bone_Index_Finger_1/Bone_Index_Finger_2/Bone_Index_Finger_3
m_Weight: 1
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Index_Palm_Root/Bone_Index_Palm_Root_2nd/Bone_Index_Palm_root_3rd/Bone_Index_Finger_Knuckle/Bone_Index_Finger_1/Bone_Index_Finger_2/Bone_Index_Finger_3/Bone_Index_Finger_3_end
m_Weight: 1
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Middle_Palm_Root
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Middle_Palm_Root/Bone_Midle_Palm_1st
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Middle_Palm_Root/Bone_Midle_Palm_1st/Bone_Middle_Palm_2nd
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Middle_Palm_Root/Bone_Midle_Palm_1st/Bone_Middle_Palm_2nd/Bone_Middle_Finger_Knuckle
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Middle_Palm_Root/Bone_Midle_Palm_1st/Bone_Middle_Palm_2nd/Bone_Middle_Finger_Knuckle/Bone_Middle_Finger_1
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Middle_Palm_Root/Bone_Midle_Palm_1st/Bone_Middle_Palm_2nd/Bone_Middle_Finger_Knuckle/Bone_Middle_Finger_1/Bone_Middle_Finger_2
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Middle_Palm_Root/Bone_Midle_Palm_1st/Bone_Middle_Palm_2nd/Bone_Middle_Finger_Knuckle/Bone_Middle_Finger_1/Bone_Middle_Finger_2/Bone_Middle_Finger_3
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Middle_Palm_Root/Bone_Midle_Palm_1st/Bone_Middle_Palm_2nd/Bone_Middle_Finger_Knuckle/Bone_Middle_Finger_1/Bone_Middle_Finger_2/Bone_Middle_Finger_3/Bone_Middle_Finger_3_end
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Ring_Palm_Root
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Ring_Palm_Root/Bone_Ring_Palm_1st
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Ring_Palm_Root/Bone_Ring_Palm_1st/Bone_Ring_Palm_2nd
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Ring_Palm_Root/Bone_Ring_Palm_1st/Bone_Ring_Palm_2nd/Bone_Ring_Knuckle
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Ring_Palm_Root/Bone_Ring_Palm_1st/Bone_Ring_Palm_2nd/Bone_Ring_Knuckle/Bone_Ring_Finger_1
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Ring_Palm_Root/Bone_Ring_Palm_1st/Bone_Ring_Palm_2nd/Bone_Ring_Knuckle/Bone_Ring_Finger_1/Bone_Ring_Finger_2
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Ring_Palm_Root/Bone_Ring_Palm_1st/Bone_Ring_Palm_2nd/Bone_Ring_Knuckle/Bone_Ring_Finger_1/Bone_Ring_Finger_2/Bone_Ring_Finger_3
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Palm_Root/Bone_Ring_Palm_Root/Bone_Ring_Palm_1st/Bone_Ring_Palm_2nd/Bone_Ring_Knuckle/Bone_Ring_Finger_1/Bone_Ring_Finger_2/Bone_Ring_Finger_3/Bone_Ring_Finger_3_end
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Thumb_Palm_Root
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Thumb_Palm_Root/Bone_Thumb_Root_1st
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Thumb_Palm_Root/Bone_Thumb_Root_1st/Bone_Thumb_Finger_Knuckle
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Thumb_Palm_Root/Bone_Thumb_Root_1st/Bone_Thumb_Finger_Knuckle/Bone_Thumb_Finger_1
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Thumb_Palm_Root/Bone_Thumb_Root_1st/Bone_Thumb_Finger_Knuckle/Bone_Thumb_Finger_1/Bone_Thumb_Finger_2
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Thumb_Palm_Root/Bone_Thumb_Root_1st/Bone_Thumb_Finger_Knuckle/Bone_Thumb_Finger_1/Bone_Thumb_Finger_2/Bone_Thumb_Finger_3
m_Weight: 0
- m_Path: Armature/Bone_Arm_root/Bone_Wrist/Bone_Thumb_Palm_Root/Bone_Thumb_Root_1st/Bone_Thumb_Finger_Knuckle/Bone_Thumb_Finger_1/Bone_Thumb_Finger_2/Bone_Thumb_Finger_3/Bone_Thumb_Finger_3_end
m_Weight: 0
- m_Path: VRTK_BasicHand
m_Weight: 0

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 315911d

Please sign in to comment.