We recently made a change to the installer used to install github pull requests. I’ll forward this issue to our build engineers.

# MyAvatar animation JavaScript API changes

**davedub**#22

Thanks @hyperlogic - in the meantime, I’m going to set up a C++ dev environment this end. I’ve avoided it for too long, is time I started getting to grips with the src…

**AlphaVersionD**#23

Here is the API Doc for the PrioVR. There is a subsection with respect to Plugin Use.

**humbletim**#25

Have been curious about PrioVR so took a look and that actually seems to be their low-level sensor API; there is a higher-level Skeleton API too.

I bet the same JS data path davedub used for EEG sensing would work to feed joint data into Interface. PrioVR’s YEI Skeleton seems pretty standard – so with a proportional avatar you could likely map the values directly onto MyAvatar joints.

Beware however that the PrioVR is basically a *full-body electromechanical fingerprinting device*. And unlike usernames and IP addresses (which are essentially choices), your decade-strong physical habits might form an obvious identity pattern (and one that’s virtually impossible for you to walk away from).

So, rather than disabling Interface’s IK and animations neck-down (which you could do to prefer the actual telemetry), it might make sense to leverage everything together still as a way to falsify your “bionic identity.” See also: scramble suits.

**davedub**#26

I have had a look at the new MyAvatar.getDefaultJointRotation(jointNumber) function. I am seeing unexpected values:

Pre-rots for Hips(joint #0) are 0.00000, 0.00000, 0.00000

Pre-rots for LeftUpLeg(joint #6) are -0.00000, -0.00000, 57.29578

Pre-rots for RightUpLeg(joint #1) are 0.00000, 0.00000, 57.29578

Pre-rots for LeftLeg(joint #7) are 0.00000, -0.00000, -0.00000

Pre-rots for RightLeg(joint #2) are -0.00000, -0.00000, 0.00000

Pre-rots for LeftFoot(joint #8) are 24.84512, 0.00000, 0.00000

Pre-rots for RightFoot(joint #3) are 24.87161, 0.00000, 0.00000

Pre-rots for LeftToeBase(joint #9) are 18.74667, 0.00000, 0.00000

Pre-rots for RightToeBase(joint #4) are 18.74792, 0.00000, 0.00000

Pre-rots for Spine(joint #11) are -0.00000, 0.00000, 0.00000

Pre-rots for Spine1(joint #12) are -0.00000, -0.00000, 0.00000

Pre-rots for Spine2(joint #13) are 0.00000, 0.00000, 0.00000

Pre-rots for LeftShoulder(joint #38) are 33.68776, 22.50640, -33.66955

Pre-rots for RightShoulder(joint #14) are 33.66622, -22.53860, 33.66622

Pre-rots for LeftArm(joint #39) are -11.15861, 0.02650, 0.08804

Pre-rots for RightArm(joint #15) are -11.12762, -0.00000, -0.00000

Pre-rots for LeftForeArm(joint #40) are 0.00000, -0.00000, -0.11292

Pre-rots for RightForeArm(joint #16) are 0.00044, 0.00000, -0.00000

Pre-rots for LeftHand(joint #41) are 0.66209, -0.00402, 0.34818

Pre-rots for RightHand(joint #17) are 0.66070, 0.00402, -0.34818

Applying these values as either radians or converting to degrees (as above) does not give the expected results. By inspection, I can see the UpLeg values are quite different from the expected values, as they need to be around 180 degrees (or PI radians) in at least one axis for the legs to point in the right direction. Here’s how a standard avatar looks with just the getDefaultJointRotation values applied:

As a comparison, here are my ‘best guess’ pre-rotation values, as used when ‘Add pre-rotations’ is selected in the walk.js 2.0 beta settings. They are not quite correct on an avatar-by-avatar basis, but they do produce a reference pose that is close to the expected result: (src: https://hifi-content.s3.amazonaws.com/dave/walk-beta/assets/miscellaneous/pre-rotations.json)

Am unsure how to proceed - any help getting access to each avatar’s individual pre-rotation values (where available) appreciated!

- davedub

**AlphaVersionD**#27

I’m not only unafraid of this; I’m actually investing on this assumption quite heavily… 2016 will be an interesting year. Thank you for taking the time to confirm this assumption.

**Judas**#28

https://community.secondlife.com/t5/Featured-News/Introducing-Project-Bento-New-Bones-Added-to-Second-Life-Avatar/ba-p/2987206. I was just looking at the planned updates to secondlifes rig wonders if that will have all the problems we face

**humbletim**#29

Well, probably not *all* the problems:

Also from their knowledge base

(emphasis above mine)

Also did a quick search for *fbx* and:

ps: here is a machine-generated sampling of **defaultAvatar_full.fbx**’s angles as ran through Dec 5’s FBXReader*.cpp (ie: emerged from the actual HiFi C++ FBXMesh in-memory raw data structures right after parsing; transform and bindingTransform are technically mat4’s, but I’ve extracted their rotation components here for comparison).

```
{
"author": "/* defaultAvatar_full.fbx */",
"applicationName": "Maya",
"name": "FBXReader.cpp Rotations",
"joints": {
"Hips": {
"preRotation": {"x":0,"y":0,"z":0},
"rotation": {"x": -0.000, "y": -0.001, "z": 0.034},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x": 0.000, "y": 0.001, "z": -0.034},
"inverseBindRotation": {"x": 0.013, "y": 0, "z": -0.034},
"transform": {"x": 0, "y": 0, "z": 179.998},
"bindTransform": {"x": -0.000, "y": -0.001, "z": 0.034}
},
"RightUpLeg": {
"preRotation": {"x": -4.411, "y": -0.193, "z": 177.490},
"rotation": {"x": 4.476, "y": 0.162, "z": 0.344},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x": 0.063, "y": -0.006, "z": -177.855},
"inverseBindRotation": {"x": 0.063, "y": -0.006, "z": -177.855},
"transform": {"x": 0.002, "y": -0.000, "z": 179.916},
"bindTransform": {"x":0,"y":0,"z":0}
},
"RightLeg": {
"preRotation": {"x": 2.992, "y": 0, "z": 4.576},
"rotation": {"x": -6.850, "y": 0.204, "z": -0.036},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x": -3.799, "y": 0.036, "z": 177.586},
"inverseBindRotation": {"x": -3.799, "y": 0.036, "z": 177.586},
"transform": {"x": -0.147, "y": 0.004, "z": -179.906},
"bindTransform": {"x":0,"y":0,"z":0}
},
"RightFoot": {
"preRotation": {"x": 56.338, "y": 3.482, "z": 0},
"rotation": {"x": 2.392, "y": -0.184, "z": -0.101},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x": 54.912, "y": 3.701, "z": -178.150},
"inverseBindRotation": {"x": 54.912, "y": 3.701, "z": -178.150},
"transform": {"x": 1.832, "y": 0.143, "z": -179.995},
"bindTransform": {"x":0,"y":0,"z":0}
},
"RightToeBase": {
"preRotation": {"x": 34.915, "y": 0.558, "z": 0},
"rotation": {"x":0,"y":0,"z":0},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x": 89.861, "y": 2.434, "z": -176.044},
"inverseBindRotation": {"x": 89.861, "y": 2.434, "z": -176.044},
"transform": {"x": 2.264, "y": 0.127, "z": 179.972},
"bindTransform": {"x":0,"y":0,"z":0}
},
"LeftUpLeg": {
"preRotation": {"x": -4.443, "y": 0.195, "z": -177.490},
"rotation": {"x": 4.432, "y": -0.159, "z": -0.395},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x": -0.012, "y": 0.006, "z": 177.837},
"inverseBindRotation": {"x": -0.012, "y": 0.006, "z": 177.837},
"transform": {"x": -0.000, "y": 0.000, "z": -179.916},
"bindTransform": {"x":0,"y":0,"z":0}
},
"LeftLeg": {
"preRotation": {"x": 2.677, "y": 0, "z": -4.575},
"rotation": {"x": -6.458, "y": -0.202, "z": 0.033},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x": -3.798, "y": -0.039, "z": -177.602},
"inverseBindRotation": {"x": -3.798, "y": -0.039, "z": -177.602},
"transform": {"x": -0.147, "y": -0.004, "z": 179.907},
"bindTransform": {"x":0,"y":0,"z":0}
},
"LeftFoot": {
"preRotation": {"x": 56.732, "y": -3.461, "z": 0},
"rotation": {"x": 2.043, "y": 0.190, "z": 0.103},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x": 54.958, "y": -3.670, "z": 178.153},
"inverseBindRotation": {"x": 54.958, "y": -3.670, "z": 178.153},
"transform": {"x": 1.833, "y": -0.142, "z": 179.995},
"bindTransform": {"x":0,"y":0,"z":0}
},
"LeftToeBase": {
"preRotation": {"x": 34.869, "y": -0.592, "z": 0},
"rotation": {"x":0,"y":0,"z":0},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x": 89.861, "y": -2.441, "z": 176.046},
"inverseBindRotation": {"x": 89.861, "y": -2.441, "z": 176.046},
"transform": {"x": 2.264, "y": -0.127, "z": -179.972},
"bindTransform": {"x":0,"y":0,"z":0}
},
"Spine": {
"preRotation": {"x": -6.750, "y": 0, "z": 0},
"rotation": {"x": 0.000, "y": 0.005, "z": -0.033},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x": 6.750, "y": 0, "z": 0},
"inverseBindRotation": {"x": 6.750, "y": 0, "z": 0},
"transform": {"x": -179.727, "y": 0, "z": 0},
"bindTransform": {"x": -6.750, "y": 0, "z": 0}
},
"Spine1": {
"preRotation": {"x":0,"y":0,"z":0},
"rotation": {"x":0,"y":0,"z":0},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x": 6.750, "y": 0, "z": 0},
"inverseBindRotation": {"x": 6.750, "y": 0, "z": 0},
"transform": {"x": -179.727, "y": 0, "z": 0},
"bindTransform": {"x": -6.750, "y": 0, "z": 0}
},
"Spine2": {
"preRotation": {"x":0,"y":0,"z":0},
"rotation": {"x":0,"y":0,"z":0},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x": 6.750, "y": 0, "z": 0},
"inverseBindRotation": {"x": 6.750, "y": 0, "z": 0},
"transform": {"x": -179.727, "y": 0, "z": 0},
"bindTransform": {"x": -6.750, "y": 0, "z": 0}
},
"RightShoulder": {
"preRotation": {"x": -76.310, "y": -88.796, "z": 177.820},
"rotation": {"x": 0.000, "y": 0, "z": 0},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x": -82.958, "y": -11.507, "z": -91.227},
"inverseBindRotation": {"x": -82.958, "y": -11.507, "z": -91.227},
"transform": {"x": -1.092, "y": -1.373, "z": 178.759},
"bindTransform": {"x": 1.523, "y": -83.098, "z": 100.057}
},
"RightArm": {
"preRotation": {"x": -6.815, "y": 0, "z": 2.674},
"rotation": {"x": -4.707, "y": -0.157, "z": -3.823},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x": -83.580, "y": -0.000, "z": -89.999},
"inverseBindRotation": {"x": -83.580, "y": -0.000, "z": -89.999},
"transform": {"x": -1.124, "y": -1.149, "z": 178.738},
"bindTransform": {"x": 0.000, "y": -83.580, "z": 89.999}
},
"RightForeArm": {
"preRotation": {"x": -4.647, "y": 0, "z": -6.610},
"rotation": {"x": 4.616, "y": -0.266, "z": 6.610},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x": -83.312, "y": -0.000, "z": -90},
"inverseBindRotation": {"x": -83.312, "y": -0.000, "z": -89.999},
"transform": {"x": -1.124, "y": -1.149, "z": 178.733},
"bindTransform": {"x": 0.000, "y": -83.312, "z": 89.999}
},
"RightHand": {
"preRotation": {"x": 7.516, "y": 0, "z": 1.503},
"rotation": {"x": -7.514, "y": -0.098, "z": -1.503},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x": -83.213, "y": -0.000, "z": -90.000},
"inverseBindRotation": {"x": -83.213, "y": -0.000, "z": -90},
"transform": {"x": -1.123, "y": -1.148, "z": 178.731},
"bindTransform": {"x": 0.000, "y": -83.213, "z": 89.999}
},
"LeftShoulder": {
"preRotation": {"x": -76.760, "y": 88.425, "z": -178.226},
"rotation": {"x": 0.000, "y": 0, "z": 0},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x": -82.881, "y": 11.460, "z": 91.605},
"inverseBindRotation": {"x": -82.881, "y": 11.460, "z": 91.605},
"transform": {"x": -1.099, "y": 1.372, "z": -178.759},
"bindTransform": {"x": -1.506, "y": 83.021, "z": -103.064}
},
"LeftArm": {
"preRotation": {"x": -6.762, "y": 0, "z": -2.202},
"rotation": {"x": -4.712, "y": 0.153, "z": 3.732},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x": -83.485, "y": 0.000, "z": 89.999},
"inverseBindRotation": {"x": -83.485, "y": 0.000, "z": 89.999},
"transform": {"x": -1.124, "y": 1.149, "z": -178.736},
"bindTransform": {"x": 0.000, "y": 83.485, "z": -89.999}
},
"LeftForeArm": {
"preRotation": {"x": -4.635, "y": 0, "z": 6.624},
"rotation": {"x": 4.604, "y": 0.266, "z": -6.624},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x": -83.216, "y": 0.000, "z": 89.999},
"inverseBindRotation": {"x": -83.216, "y": 0.000, "z": 89.999},
"transform": {"x": -1.123, "y": 1.148, "z": -178.731},
"bindTransform": {"x": 0.000, "y": 83.216, "z": -89.999}
},
"LeftHand": {
"preRotation": {"x": 2.831, "y": 0, "z": -0.644},
"rotation": {"x": -2.831, "y": 0.015, "z": 0.644},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x": -83.200, "y": 0.000, "z": 89.999},
"inverseBindRotation": {"x": -83.200, "y": 0.000, "z": 89.999},
"transform": {"x": -1.123, "y": 1.148, "z": -178.731},
"bindTransform": {"x": 0.000, "y": 83.200, "z": -89.999}
},
"Neck": {
"preRotation": {"x": 6.750, "y": 0, "z": 0},
"rotation": {"x":0,"y":0,"z":0},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x":0,"y":0,"z":0},
"inverseBindRotation": {"x":0,"y":0,"z":0},
"transform": {"x": 0, "y": 0, "z": -180},
"bindTransform": {"x": 0, "y": 0, "z": 0}
},
"Head": {
"preRotation": {"x":0,"y":0,"z":0},
"rotation": {"x":0,"y":0,"z":0},
"postRotation": {"x":0,"y":0,"z":0},
"inverseDefaultRotation": {"x":0,"y":0,"z":0},
"inverseBindRotation": {"x":0,"y":0,"z":0},
"transform": {"x": 0, "y": 0, "z": -180},
"bindTransform": {"x": 0, "y": 0, "z": 0}
}
}
}
```

**anon98926322**#30

Doubtful if many or any problems will arise from the bone model extension. SL1 is about compatibility. The problems will be with all the OpenSim variant grids whose owners now face the me-too feature coding race. The problems HF faces are deciding on a bone axes, rotation space and zero-point origins, and also finding a clean way to couple to existing modeling tools that do not cost $1500 a year per seat.

**Menithal**#31

I was looking through the spec earlier this morning, and I think they will have a different issue vs one which high fidelity has. They are using bones, which work fantastically the specific face they have been made for: The moment you rotate those, the behavior is different depending on someones face structure. This is also the reason why they do not want one to translate the bones in SL: doing so could anyones work someone has done in the shape engine.

This is not even including Non-human avatars. The cross compatability is simply broken with different avatars. which Is why I am fine with HF method of going for shapekeys, which are more friendlier when it comes to cross-avatar compatability (smile will be a smile for all). Will have to try out the SL Bento later this weekend.