evanhem opened this issue on Jul 31, 2020 ยท 13 posts
evanhem posted Fri, 31 July 2020 at 7:51 PM
I have an application where I need head speed. I am able to get hip speed by making every frame a key frame, copying the frames, and then pasting in Excel. This gives my the hip X Y Z positions in PNUs. Now I need to do the same for the head. The problem is, the head is defined relative to the neck which is defined relative to the chest, which is defined relative to.... etc, until we get down to the hip root.
Is there a way where I can directly get the head XYZ coordinates?
Thank you.
ironsoul posted Fri, 31 July 2020 at 9:26 PM
I'm not at my pc to test but if you parent a prop to the head maybe you extract the xyz from the prop? The other thought is a python script, there is a call to get the xyz of an body part origin (can't recall if returned in PNU or scene coords)
adp001 posted Sat, 01 August 2020 at 6:41 AM
Use Python.
actor = poser.Scene().CurrentActor()
print actor.WorldDisplacement()
evanhem posted Mon, 03 August 2020 at 5:06 PM
Thanks. After a lot of research, I was able to create the following code:
import poser
actor = scene.Actor("Hip")
for frame in range(scene.NumFrames()):
scene.SetFrame(frame)
print actor.WorldDisplacement()
I wanted to validate this process with what I had done before. That is, copy from the Animation Palette and paste into Excel. The first couple of frames match with what I had before. However, later keyframes do not match. I multiply the values by 8.6 to get from PNU to feet, but there is a discrepancy between this value and the dials in the Poser GUI.
Do the xTran yTran zTran dials for the Hip in the Poser GUI correspond to the WorldDisplacement for the Hip actor? Apparently not.
evanhem posted Wed, 05 August 2020 at 1:23 PM
Hi,
I am still trying to understand the difference between WorldDisplacement() and xTran, yTran, zTran for the hip. I have an animation with 59 frames. WorldDisplacement() matches xTran, yTran, zTran for the first 20 frames. Here is the 20th frame:
Note that the 20th frame from Poser should be compared to the 19th frame in the text box. You can see that the xTran, yTran, zTran values match with the WorldDisplacement() print out. This is the case for the first 20 frames.
Now, if I go to the 21st frame, they begin to disagree:
Please compare the Poser dials with the 20th frame in the text box.
I am having a really difficult time wrapping my head around why there is such a disagreement. Is there a way to visualize the global origin and global X Y Z in Poser?
FVerbaas posted Thu, 06 August 2020 at 5:32 AM Forum Coordinator
In your animation, what happens at the 20th frame onwards? Maybe your body actor is moving off the zero position? World transform = body transform + hip transform.
evanhem posted Thu, 06 August 2020 at 11:48 AM
Thanks for your reply. Here is a sampling of the frames:
I've had such a tough time with the coordinates in Poser compared to other programs. How do I find the body transform? My impression was that the body is placed into the space via the hip, because when I rotate the hip the whole body rotates rigidly. Then, every other body part is defined relative to it. Are there any good sources for the coordinates that are used? I find the Poser manual to be cryptic in this regard.
FVerbaas posted Thu, 06 August 2020 at 12:49 PM Forum Coordinator
The body actor has its own transformation dials that you can use to move the whole body, hip and children around in the scene. You usually let the figure strike a pose using the hip actor and its children. You translate the body actor only to let the figure take its place in the scene, and you use the y-rotation to let the figure turn around. The xrotate and z-rotate dials of the figure normally are not used.
evanhem posted Thu, 06 August 2020 at 7:07 PM
Ah, yes, I see that the Body xTran, yTran, zTran suddenly change when I move to the problematic frame. I don't know how, because I always put the actor into the space by translating and rotating the hip; maybe I used the "Body" coordinates by accident once. Thank you, I am happy to have been guided to this clue. Now I just need to back out what all the coordinate systems are in Poser. I wish there was a way to display all the coordinate systems for visualization.
Richard60 posted Thu, 06 August 2020 at 9:26 PM
The Body moves all the parts of a figure. That includes the IK Targets. If you have IK on and move the figure up by the Hip you can see the Toes point down to the IK Targets. However if you move the Body then the Feet stay flat. Moving the Body is a really BAD idea especially in animations. If you make a Walk Design and it moves forwards towards you and you like the movements but wish it was walking towards the Right instead. You can just rotate the BODY by 90 degrees and the figure will now start walking to the right.
Poser 5, 6, 7, 8, Poser Pro 9 (2012), 10 (2014), 11, 12, 13
evanhem posted Fri, 07 August 2020 at 12:15 AM
I see, thanks.
FVerbaas posted Fri, 07 August 2020 at 3:00 PM Forum Coordinator
evanhem posted at 9:30PM Fri, 07 August 2020 - #4396185
... Now I just need to back out what all the coordinate systems are in Poser. I wish there was a way to display all the coordinate systems for visualization.
It is nothing special actually; plain classroom textbook math on Euler angles in a cartesian system. Every object by definition has its own local coordinates system that moves and rotates with its parent, and it in addition has its own system. . It will never get simple of course.
One more tip: If you activate the 'direct manipulation' tool you can see and play with the rotation axis:
pyposer posted Thu, 12 November 2020 at 3:35 PM
Hi! So you finally managed to figure out how to get the current global coordinates of a given actor via Python? I tried with WorldDisplacement but it does not seems to work (i tried with a hand and a ball placed at the same height but is completely different).