Use Custom Hand Model
In this tutorial, you learn how to replace the default Interaction SDK hands with your own set of custom hands. There are two ways to add a custom hand model. You can either parent additional meshes to the synthetic hand (Option A), or you can retarget the joints of the synthetic hand to a custom mesh (Option B).
When possible, we recommend Option A since it’s simpler and faster than Option B, but this topic will explain both methods.
Option A: Parenting additional meshes
This approach parents additional meshes to the default hand using joint position data from the HandJoint component. You can also retexture the hand to further customize it. In this section, you’ll parent a ring mesh to one of your fingers.
In the Project window search bar, search for ButtonRing and drag it into Hierarchy. Ensure the search filter is set to either All or In Packages, since the default setting only searches your assets.
A ring object appears in your scene.
Under Hierarchy, select the ButtonRing you just added.
Under Inspector, add a Hand Joint component by clicking the Add Component button and searching for Hand Joint.
In the Hand Joint component, set Hand to either the LeftHand or LeftHandSynthetic GameObject, depending on which one you’re using.
Set Hand Joint Id to Hand Index 2. This is the joint the ring will track.
In the Project window search bar, search for GoldMat, and then drag the GoldMat material onto ButtonRing in the Inspector.
Select File > Build And Run, or if you have a Link connected, click Play.
When the current scene loads, you’ll see the ring attached to your index finger. It will move with your index joint.
Option B: Retargeting to a Custom Mesh
This approach completely replaces the default hand with a custom mesh. Although this method offers the most customization, it can also require more time than parenting meshes to the existing hand mesh. It also requires a basic understanding of rigging and 3D modeling. To retarget to a custom mesh, you need to delete the existing hand mesh but keep the armature, then weight paint your custom mesh to the armature, and finally import the custom mesh into Unity.
Before you can bind your custom mesh to the SDK’s armature, you need to export the hand file from Unity.
In the Project window search bar, search for OculusHand_L. Ensure the search filter is set to either All or In Packages, since the default setting only searches your assets.
In the search results, right-click on the file and select Show in Explorer.
Windows File Explorer opens to the location of the file.
In File Explorer, make a copy of the file so you have a backup of the original hand.
Save the copy on your computer. It doesn’t have to stay in the original folder.
Open the copy of OculusHand_L.fbx in your preferred 3D modeling software, such as Blender or Maya.
Retarget armature to new mesh To make your custom mesh move in sync with your physical hands, you have to retarget the armature from the default hand to your new mesh.
With your copy of OculusHand_L.fbx open in your 3D modeling software, import your custom mesh so they’re both in the same file.
Scale your custom mesh so it roughly matches the size of the hand.
Warning
Do not apply scale to the custom mesh. Its scale should match the hand's scale, which in Blender is 0.010 on the X, Y, and Z axes. If you apply scale, it may cause animation issues when you import your custom mesh into Unity.Align your custom mesh with the armature. This makes it easier to weight paint, especially if you decide to use automatic weight painting.
A custom mesh aligned with the armature.
Delete the existing hand mesh so only the armature remains.
Weight paint your mesh so it moves in sync with the hand bones.
Warning
In the next step, export your FBX file with the X-axis as the forward axis and do not add any leaf bones.Rename your mesh (but not the armature) to l_handMeshNode. This will help you find your mesh once you import it into Unity.
Export the mesh and armature together as an FBX file. When exporting, set the X-axis as the forward axis, and do not add any leaf bones.
Import custom hand to Unity With your new mesh bound to the armature, it’s ready to be imported to Unity.
In Unity, open the scene where you want to use your custom hand.
To import your custom hand, in the toolbar at the top of the screen, select Asset > Import New Asset. If that option is greyed out, it means the Package folder is selected in the Project window. In that case, click the Assets folder in the Project window and try again.
The file browser appears.
Locate your custom mesh file, then click Import.
Under Project, your custom hand appears in the Assets folder.
Link HandVisual to the custom hand Since the HandVisual component controls the appearance of the hand, you have to update it to use your custom mesh.
Drag your custom hand from the Assets folder onto OVRLeftHandVisual in the Hierarchy. If you’re using SyntheticHand, OVRLeftHandVisual is under the LeftHandSynthetic GameObject, otherwise it’s under the HandVisualsLeft GameObject.
Placing the custom hand onto OVRLeftHandVisual.
In the Project window, search for OculusHand_LAvatar. Ensure the search filter is set to either All or In Packages, since the default setting only searches your assets.
Under Hierarchy, select your custom hand.
Under Inspector, add an Animator component.
Set the Animator component’s Avatar field to the OculusHand_LAvatar file from the Project window search results by dragging the file onto the Avatar field.
Under Hierarchy, select l_handMeshNode, which is a child of your custom hand GameObject. If you don’t see a GameObject with the name l_handMeshNode, check what the mesh name is in your 3d modeling file, then search your Unity hierarchy for that name.
Under Inspector, add a Material Property Block Editor component.
In the Material Property Block Editor component, make sure Element 0 is set to the GameObject’s Skinned Mesh Renderer component.
Element 0 set to the Skinned Mesh Renderer component.
Under Hierarchy, select OVRLeftHandVisual.
Under Inspector, in the Hand Visual component, set Skinned Mesh Renderer to l_handMeshNode. This tells the SDK to use your custom mesh as the hand mesh.
Set Hand Material Property Block Editor to l_handMeshNode.
Click the Auto Map Joints button. This ensures that each bone in your custom mesh will align itself with the matching bone during hand tracking.
The list of joints automatically updates. The joints with names ending in ...Tip will be empty, but that’s alright.

Updating the Hand Visual component.
In the Hand Confidence Visual component, set Hand Material Property Block Editor to l_handMeshNode.
(Optional) Repeat the entire Retargeting to a Custom Mesh section for the right hand.
Prepare to launch your scene by going to File > Build Settings and clicking the Add Open Scenes button.
Your scene is now ready to build.
Select File > Build And Run, or if you have a Link connected, click Play.
When the current scene loads, lift your hands. Your custom hand model is now visible.