@Override
    @SuppressWarnings("unchecked")
    public void read(JmeImporter im) throws IOException {
        InputCapsule input = im.getCapsule(this);

        name = input.readString("name", null);
        int ver = input.getSavableVersion(Bone.class);
        if (ver < 2) {
            bindPos = (Vector3f) input.readSavable("initialPos", null);
            bindRot = (Quaternion) input.readSavable("initialRot", null);
            bindScale = (Vector3f) input.readSavable("initialScale", new Vector3f(1.0f, 1.0f, 1.0f));
        } else {
            bindPos = (Vector3f) input.readSavable("bindPos", null);
            bindRot = (Quaternion) input.readSavable("bindRot", null);
            bindScale = (Vector3f) input.readSavable("bindScale", new Vector3f(1.0f, 1.0f, 1.0f));
        }

        attachNode = (Node) input.readSavable("attachNode", null);
        targetGeometry = (Geometry) input.readSavable("targetGeometry", null);

        localPos.set(bindPos);
        localRot.set(bindRot);
        localScale.set(bindScale);

        ArrayList<Bone> childList = input.readSavableArrayList("children", null);
        for (int i = childList.size() - 1; i >= 0; i--) {
            this.addChild(childList.get(i));
        }

        // NOTE: Parent skeleton will call update() then setBindingPose()
        // after Skeleton has been de-serialized.
        // Therefore, worldBindInversePos and worldBindInverseRot
        // will be reconstructed based on that information.
    }
Sets the local bind transform of the bone.
Call setBindingPose() after all of the bones' bind transforms are set to save them.

@param translation the desired bind translation (not null, unaffected)
@param rotation the desired bind rotation (not null, unaffected)
@param scale the desired bind scale (unaffected) or null for no scaling
jme3-core/src/main/java/com/jme3/animation/Bone.java