@LoneWolf: the problem is that the it is a weighted blend, rather than a simple composition.
@ShadowM8: while that’s correct and easy enough to reproduce when there are two targets, the question really concerns what happens when there are more than 2 targets.
To see the problem, execute this really quickly in Maya:
import maya.cmds as cmds
cones = []
for i in xrange(4):
cones.append(cmds.polyCone()[0])
cmds.setAttr('%s.translate'%cones[i], i*2,0,0)
oc = cmds.orientConstraint([cones[0],cones[1],cones[2],cones[3]])[0]
cmds.setAttr('%s.interpType'%oc, 2)
cmds.setAttr('%s.rotateZ'%cones[0], 90)
cmds.setAttr('%s.rotateZ'%cones[1], 45)
print cmds.getAttr('%s.rotateZ'%cones[3])
You should see the result on the constrained cone is 50.0 degrees. Now run this:
cmds.setAttr('%s.rotateZ'%cones[0], 45)
cmds.setAttr('%s.rotateZ'%cones[1], 90)
print cmds.getAttr('%s.rotateZ'%cones[3])
You should see a result of 40.0. When using e.g., slime, both cases produce the same result (45.0), since it’s a…omnibus? operation.
I’ve tried reproducing Maya’s result in various ways, but for example these forms are incorrect:
Quaternion q= Quaternion.identity;
for (int i=0; i<targets.length; i++)
q *= Quaternion.Slerp(Quaternion.identity, targets[i].q, targets[i].w;
Quaternion q= Quaternion.identity;
for (int i=0; i<targets.length; i++)
q *= Quaternion.Slerp(q, targets[i].q, targets[i].w;
I’ve tried a few other variants to no avail, so just hoping someone with more math smarts than I might have a suggestion.