Motor6D.Transform - docs are confusing on which part CFrame it is applied to

Link: Motor6D.Transform

The Transform property documentation states that it is applied as PartParent.CFrame * CParent * Transform == PartChild.CFrame * Child, and the definition it gives for what the parent and child parts are is the following:

Transform is the transformation between the “parent” part and the “child” part. The “parent” part will always be the part that is more directly connected to the JointInstance.C0. This is not affected by which part is assigned to JointInstance.Part0 and which is JointInstance.Part1. If the side the root part is on changes the interpretation of Transform will be inverted.

This definition is confusing and unclear in many ways:

  • The “parent” and “child” terminology conflicts with the usual “explorer tree” definition we are used to. The parts involved are not parented to each other, so what are they parent and child in relation to?
  • This property only exists in Motor6D, so why is the documentation using the base class JointInstance instead?
  • The statement says that the “parent” part is the one most directly connected to the C0 property, but that property is a CFrame. What does a connection in terms of CFrames mean? Is it Part0, since the weld equation relates Part0 and C0?
  • If the property isn’t affected by Part0 and Part1, and the relationship with C0 is unclear, then what determines it?
  • What does “If the side the root part is on changes the interpretation of Transform will be inverted” mean? Does that mean the value assigned to it is :Inverse()d depending on where the root part is? If so, how?
  • In the Transform equation given it is not immediately clear that CParent and Child refer to the properties C0 and C1 (or C1 and C0).

I currently assume that Transform is always applied to the Part0 side of the weld equation, after multiplying by C0, but I am not sure if I should rely on this interpretation (it hasn’t caused issues so far). Another possible interpretation could be considering the joints as nodes on a tree, starting from the root joint and expanding outwards, but I do not know if that is correct either.

Therefore, I would like to request clarification on how exactly the “parent” and “child” parts are determined and if there is any way to do this determination programatically in Lua, with any relevant APIs included.

4 Likes