Wed, Nov 20, 9:03 AM CST

Renderosity Forums / Poser - OFFICIAL



Welcome to the Poser - OFFICIAL Forum

Forum Coordinators: RedPhantom

Poser - OFFICIAL F.A.Q (Last Updated: 2024 Nov 20 6:12 am)



Subject: A feature of Poser rotation angles.


Anthony Appleyard ( ) posted Sun, 17 October 2021 at 11:32 AM · edited Sun, 17 November 2024 at 9:53 PM

The method of posing a joint by rotating in x and y and z, that is used in Poser, is called Euler angles: https://en.wikipedia.org/wiki/Euler_angles . It can be proved that if at a joint the rotations are (say) p q r, then, if I add or subtract 180deg to/from all the 3 angles, and then I change the sign of the angle which is in the middle in rotation order, then the positions of the parts linked by the joint stay the same. (But the effects of joint blending will likely change.)



primorge ( ) posted Sun, 17 October 2021 at 12:01 PM

Can you explain what practical application this might have for a Poser user or content creator? Or is it simply an observation?


JimTS ( ) posted Sun, 17 October 2021 at 2:11 PM

off axis rigging angles? like the front forks/wheel of a bike scoot etc?

A word is not the same with one writer as with another. One tears it from his guts. The other pulls it out of his overcoat pocket
Charles Péguy

 Heat and animosity, contest and conflict, may sharpen the wits, although they rarely do;they never strengthen the understanding, clear the perspicacity, guide the judgment, or improve the heart
Walter Savage Landor

So is that TTFN or TANSTAAFL?


primorge ( ) posted Sun, 17 October 2021 at 4:02 PM

JimTS posted at 2:11 PM Sun, 17 October 2021 - #4429015

off axis rigging angles? like the front forks/wheel of a bike scoot etc?

Not sure. Are you?

I use the joint editor orientations for that stuff, how bout you. You did suggest a magnet for that correct?


pMCgSSLV7KR3Lw0nH2rFjDUBGnnmCA5hjN3lfbBY.jpg


Anthony Appleyard ( ) posted Mon, 18 October 2021 at 12:13 AM · edited Mon, 18 October 2021 at 12:14 AM

Sometimes Poser's internal calculations on a joint's xrotate yrotate zrotate angles (e.g. in switching between IK-in and IK-off) need Poser to call inverse trig functions (arcsin etc). Inverse trig functions have multiple answers, and sometimes Poser chooses a wrong answer, and this is shown by distorted joint blending in the affected joint.  I wrote a Python script that is called on a prop or a character part, and it does this:-

(1) Add 180 deg to all the angles

(2) Change the sign of the middle angle in rotation order, as found by     ((i,j,k),(px,py,pz)) = act.Gimbal()

(3) Normalize all angles to between -180 deg and +180 deg

That has often cured distorted joint blending in my Poser posing work.



primorge ( ) posted Mon, 18 October 2021 at 8:19 PM · edited Mon, 18 October 2021 at 8:20 PM

I've seen this behavior sporadically when toggling IK. Zeroing rotations usually clears it up. Thanks for the explanation.


primorge ( ) posted Mon, 18 October 2021 at 9:47 PM

...I can see where that actually would be VERY useful, although it's been a while since I've encountered it I've had very meticulous poses basically ruined by what you talk about, or at least very tedious to fix joint by joint. Especially if you can use it on a select few joints...

Have you considered sharing your script work?


Anthony Appleyard ( ) posted Sun, 05 December 2021 at 9:24 AM

<code>

import poser
import string
import os
import sys
#import aasubrs
import math

def spar(ac,pn,v): # set parameter; 999 = leave unchanged
    p=ac.ParameterByCode(pn)
    if (p!=None) and (v!=999):
        p.SetValue(v)

scn = poser.Scene()
act = scn.CurrentActor()
fig = act.ItsFigure()
if fig==None: print "working on ",act.Name();
else: print "working on ",fig.Name(),"'s ",act.Name();
xyz="xyz"
#(x,y,z) = act.AlignmentRotationXYZ()
((i,j,k),(px,py,pz)) = act.Gimbal()
x=px.Value(); y=py.Value(); z=pz.Value();
print "angle rotation order is ",xyz[i],xyz[j],xyz[k]
print "old angles: ",x,y,z," degrees";

x1=x; y1=y; z1=z;

while (x<=-180): x+=360; # normalize angles to between +-180deg
while (y<=-180): y+=360;
while (z<=-180): z+=360;
while (x>180): x-=360;
while (y>180): y-=360;
while (z>180): z-=360;

if(x!=x1) or (y!=y1) or (z!=z1): print "I have normalized the angles to:",x,y,z," degrees";

if j==0: x=-x; # the middle angle in rotation order
elif j==1: y=-y;
elif j==2: z=-z;
x2=x+180;
y2=y+180;
z2=z+180;
 
x3=x2; y3=y2; z3=z2;

while (x3<=-180): x3+=360; # normalize angles to between +-180deg
while (y3<=-180): y3+=360;
while (z3<=-180): z3+=360;
while (x3>180): x3-=360;
while (y3>180): y3-=360;
while (z3>180): z3-=360;

spar(act,1,x3);
spar(act,2,y3);
spar(act,3,z3);

# print x,y,z;
# print x2,y2,z2;
print "new angles:",x3,y3,z3," degrees";
oldssq=x*x+y*y+z*z;
newssq=x3*x3+y3*y3+z3*z3;
if newssq<oldssq: print "the new angles are better for the joint blending."
else: print "the old angles were better for the joint blending."
print "~~~~~~~~~~~~~~~~~~~~~~~~~~";
poser.ProcessCommand(1559)
scn.DrawAll();

</code>



NikKelly ( ) posted Sat, 11 December 2021 at 9:13 PM

Like.


Privacy Notice

This site uses cookies to deliver the best experience. Our own cookies make user accounts and other features possible. Third-party cookies are used to display relevant ads and to analyze how Renderosity is used. By using our site, you acknowledge that you have read and understood our Terms of Service, including our Cookie Policy and our Privacy Policy.