Freazypose - a free PoserPython script to add EasyPose controls to a figure.

Discussion in 'Freebie Links' started by 3dcheapskate, Mar 12, 2018.

Tags:
  1. 3dcheapskate

    3dcheapskate Eager

  2. Miss B

    Miss B Drawing Life 1 Pixel at a Time CV-BEE

    I've been watching the SM Poser forum thread sir, and congrats on getting it done. ;)
     
  3. 3dcheapskate

    3dcheapskate Eager

    Thanks. Still not quite there yet...
     
  4. Miss B

    Miss B Drawing Life 1 Pixel at a Time CV-BEE

    That may be true, but you're on the right track. :)
     
  5. 3dcheapskate

    3dcheapskate Eager

    Prototype 0.10 uploaded to ShareCG - Freazypose (prototype 0.10) - Script - ShareCG

    Main thread still over on the SM forums, see post 10 - Freazypose - a free PoserPython script to add EasyPose controls to a figure.

    What's changed:
    • Minor tidy-up
    • Freazypose dials now all include the prefix 'FP-', so they will NOT interfere with any existing proper EasyPose dials.
    • Tried to make sure that all the delta calculations match the original Ajax EasyPose - I used the B.L. Render book and the original Ajax EP Tube to test. However, my Spiral calculations still seem to bend slightly less than the originals, and my S-Curve is different in the middle. The easy way to compare is to apply FreazyPose to something that already has proper EasyPose, and then set a proper EasyPose dial (e.g. 'BendAll') to 20, and then set the Freazyposeequivalent (e.g. 'FP-Bend-All' to -20) -the two should canceleach other out if I've got it correct!
    • Includes a 'Basic Tentacle' figure, something to test Freazypose on. Ither good things to try it on:
      • - The tentacly freebies at ShareCG by KnochenKater (aka ancestorsrelic) are crying out for EasyPose - ShareCG - ancestorsrelic's Gallery
      • - Some of the original Ajax EasyPose freebies(including the EP Tube that I tested with) are still available at Renderosity Freestuff | Renderosity
     
  6. Ken1171

    Ken1171 Dances with Bees Contributing Artist

    Sounds awesome, thank you! Is there a way to avoid cross-talking when adding, for instance, an EP tail to 2 figures on the same scene?
     
  7. 3dcheapskate

    3dcheapskate Eager

    Hadn't really thought about cross-talk. I had a vague idea that it was no longer a problem since Poser... hmmm... not sure which version ? I've no idea where that supposition came from so I may well be wrong.

    In the book B.L.Render mentions that Ajax added a prefix to the internal names of the dials/vaueParms - e.g.the EP stuff on the original Ajax Easypose Tube has a 'QT1U'prefix on the internal names, so every 'TwistBef' (externalname) dial/valueParm/targetGeom has a 'QT1UTwistBef' internal name. Other EP props use other unique prefixes and thus cross-talk between different EP props is avoided.

    But I assume that if you loaded two of the same EP props, e.g. two original Ajax EP Tubes (or two Ajax EP Tails), then you'd have cross-talk between them.

    Just thinking out loudhere...
    Regarding a basic anti-crosstalk prefix, it should be fairly simple to make Freazypose add one to the internal names for each Freazypose dial - either letting the user specify it, or creating a pseudo-random-ish.
    But if you then saved one of these figures to which you'd applied Freazypose with an anti-crosstalkas a CR2, and then loaded two copies of it you'd be back in the same boat.
    What you'd probably want is a script to check for Freasypose (and/or EP) dials in the figures in the scene, identify any clashes, and then modify internal names as required to prevent the clashes. But I don't think you can modify the internal names - you'd probably have to delete each valueParm/targetGeom and any related deltaAddDelta stufff and add replacements which were identical to what you've removed except for the internal name.
    Hmmm...
     
  8. 3dcheapskate

    3dcheapskate Eager

    Here's a first rough idea for a 'decrosstalkifyEP' script. Looks feasible,but nothing tried yet.
    (adding an anti-crosstalk-prefix to Freazypose should be simple)

    To replace all the master dials, giving them all a user-defined anti-crosstalk prefix:
    -For each actor in the selected figure find each dial we want to replaceand note its external name - parameter.Name()
    -delete the dial - actor.RemoveValueParameter()
    -create a new dial with the same name plus an anti-crosstalk prefix - actor.CreateValueParameter(<newInternalName>) ...with the anti-crosstalk prefix- I think this will set both internal and external name the same,provided there's
    -then call parameter.SetName(<newExternalName>) so that the anti-crosstalk prefix is only on the internal name

    To set up the slaving tothe new dials all the slaving:
    -For each parameter (xRotate, yRotate,zRotate) in each actor in the selected figure, get a list of all its valueOps - parameter.ValueOperations()
    -Check each one in the list to see what master dial it's slaved to - valueop.SourceParameter()
    -If it's slaved to one of the master dials we're de-cross-talk-ify-ing then note the source parameter and (assuming it's a deltaAddDelta) note the delta value - valueOp.Delta()
    -Delete the old valueOp - parameter.DeleteValueOperation()
    -Add a new valueOp to replace it - parameter.AddValueOperation(poser.kValueOpTypeCodeDELTAADD,<noted-source-paremeter>)
     
  9. Ken1171

    Ken1171 Dances with Bees Contributing Artist

    Wow, as I suspected, there is no easy way around the crosstalk-ing issue. I had several scenes where there were 2 catgirls, each with an EP tail, where the moment we add the 2nd EP tail, ERC controls go haywire due to identical internal names clashing. One way I have been using to get around this was to turn the first EP tail into a prop BEFORE adding the 2nd EP tail. This way I can have as many as needed on scene, BUT we cannot pose the previous tails once they are frozen into static props. At least it makes the scenes possible.

    Crosstalk predates B.L.Render's book by many years, so it's an old issue in Poser. SMS could come up with a internal renaming mechanism to avoid this, but alas, Poser still doesn't know WHERE to save geometry or textures, not to mention the pesky embedded geometry when saving props to the library. I have been suggesting to SMS that they should fix the basics before even thinking of new features. These are things we deal with everyday.
     
  10. 3dcheapskate

    3dcheapskate Eager

    I did a quick test for including a user-defined anti-crosstalk prefix on the internal names when it creates the new Freazypose master dials and slaving... that's quite easy.

    Regarding the imaginary 'DeCrosstalkIfyEP' script: I realized that it's only the master dials that the script would have to delete+replace in order to get the new internal name with the anti-crosstalk prefix.
    All the existing valueOps that used the deleted master dial can simply be modified (i.e. no need to delete+replace) with valueop.SetSourceParameter(<newInternalNameWithPrefix>).
    Haven't tested this yet, but I think it should work. I'll have a play some time over the next few days.

    P.S. "...fix the basics before even thinking of new features..." - ah! You're thinking of the old days. They actually used to do that sometimes. But that was before software was invented. ;o)
     
  11. Ken1171

    Ken1171 Dances with Bees Contributing Artist

    In that case, would using the EP dials on a bone not at Body (somewhere in the middle of a chain) still cause crosstalk? When you test this, please also check the EP dials in the middle. :)

    Haha to be fair, eFrontier and SMS were the only companies that have actually evolved the software in a significant way. From versions 3 to 6, each full point release used to be mediocre at best. Unfortunately, crosstalk and a myriad of other issues predate these two companies. But that is not to say that DS would be different. For instance, they broke bone deletion in version 4.6, and it's still broken in 4.10, in spite of the new features. LOL

    I am eager to see if just renaming the internal names on just the master dials can resolve the ERC clashing on EP dials. Keep us posted! ^__^
     
  12. 3dcheapskate

    3dcheapskate Eager

    I think I'm getting crosstalk on the terminology ! ;o)
    By 'master dial' I mean any EP 'valueParm' section in the CR2. The BendBef/BendAft, etc dials in each segment of the EP thingy are 'master dials' by this definition

    I've also noticed that the original Ajax EP stuff I'm using doesn't have any EP dials on the 'Body' - the main EP dials are on body-part 'Node'.

    ~ ~ ~ ~ ~ ~~ ~ ~~ ~ ~~ ~ ~~ ~ ~

    Errr... I can't seem to reproduce a crosstalk problem, even in Poser 6.

    I open the default scene with James Casual, Load an Ajax EP Tail (the freebie one from Renderosity), and parent that to Jim's hip.
    I load a second James Casual, load a second Ajax EP Tail, parent that to the 2nd Jim's hip, and xtranslate the 2nd Jim's body so I can see which is which.
    I set the BendAll on Node and BenAfter on Tail28 to +13 and -70 respectively for one EP tail, and to -13 and +70 for the other.\
    Each tail seems to bend as expected.
    Cantseeaproblem.jpg

    I saved the scene, loaded the default scene, then loaded the scene I'd just saved - it looked as it should.
    I changed the four dials - everything seemed to work as it should.

    What am I missing ?
     
    Last edited: Mar 21, 2018
  13. Ken1171

    Ken1171 Dances with Bees Contributing Artist

    In Poser terminology, a "master dial" is one that controls other dials (an ERC). They are usually located on Body, while the slave dials are on other body parts. Poser doesn't force master dials to be placed on Body - they can be anywhere. However, "EasyPose Underground 2" has a setting to place them on BODY by default, but you can change that if you like. Most people expect to find them in Body, though, so the default makes sense. In my products that use EP, I always place the main controls on Body, so customers don't have to go searching for them. Like I said, this is not something I have to force, since EP Underground 2 does this by default.

    I did the same experiment here, loading 2 Dawn's and attaching an EP tail I made to each of them and posing them individually. I didn't get any crosstalk, but I know it has happened consistently in nearly all other scenes before. This might be something related to having other things present on the scene. For instance, there is a known bug in Poser that causes conformed clothing to jump out of place if we attach (parent) a prop to certain body groups. If nothing is conformed, then [apparently] nothing happens. In other words, the figures present on scene were not bare when the crosstalking issues happened. At least in Poser, having more things conformed and parented can cause "adverse reactions".

    I think maybe we need more things on the scene for this to manifest itself. I will try to reload a scene where I know this has happened before, and then go removing things until it works. That should show what starts the issue.
     
  14. 3dcheapskate

    3dcheapskate Eager

    So we're talking about the same thing when we say 'master dial' - that's good ! :)
    Hoping to see a reproducible crosstalk problem soon...

    Also need to make Freazypose give the user an option to put the master dials on the 'Body'.
     
  15. Ken1171

    Ken1171 Dances with Bees Contributing Artist

    I think that should be the default. :)
     
  16. 3dcheapskate

    3dcheapskate Eager

    Sidenote: I found out why I thought crosstalk was fixed ages ago - it's the B.L. Render book, p17, under 'Cross-talk' (third page of a quite detailed discussion of it, and ways to get around it)

    '...Poser 5 "fixed" all this...'
    (the quotes around "fixed" are because the fix apparently screwed up 'intentional' crosstalk like conforming clothing FBMs being slaved to their base figure FBMs)
     
  17. Ken1171

    Ken1171 Dances with Bees Contributing Artist

    I believe there is more to this than just that, considering the amount and range of changes Poser has gone through since ancient version 5. Rigging in Poser has changed significantly with the introduction of Unimesh skinning, Pixar Subdivision Surfaces with multiple levels of sculpting, and the ability to paint weight maps and morphs directly to the model. In comparison, DS has changed file formats 3 times between 4.0 and 4.6 just to accommodate the same kinds of features, while Poser has preserved them for backwards compatibility - which is way more challenging but may come at a cost.

    Right now, Poser 11 Pro rigging is rather compromised due to unresolved incompatibilities introduced with weight map painting, because the tools require Unimesh skinning but Poser doesn't support it internally. Before being laid off from the dev team, Larry Weinberg has come up with a workaround script that makes it possible to finish the job, but that doesn't really fix the issue. We have to convert the morph between pre and post-pending before and after we edit JCMs, or else either the morph will work incorrectly, or the mesh breaks when edited. Poser 9 and 10 do not have this workaround, making it impossible to edit JCMs that actually work as expected.

    I guess the bottom line is that Poser has some rather serious functionality challenges for the new [and inexperienced] dev team to fix, and I am not expecting great advances for this upcoming next full point release. As things are now, even parenting a prop can break the rigging, and copying morphs to conforming clothing results into all-encompassing mangled distortions that need to be manually fixed inside out every joint direction, even in bulge maps. Coming from that, these issues with crosstalking seem rather minor. :)
     
  18. 3dcheapskate

    3dcheapskate Eager

    I've been away from the computer for a few days - I've just got back and tried a couple of things:

    - Adding an option to put the master dials on the 'Body', which is fine as long as I only want to add a single EP section, e.g. a tail, to a figure. But if I want to add 2 or more EP sections, e.g. lots of tentacles, then it gets messy - there's no way I can see to put master dials into parameter groups from within Python, they seem to automatically go into 'Other'.

    - Adding a dialogue to enter an anti-crosstalk prefix (I still can't reproduce any crosstalk problem - I noticed that the book seemed to indicate that it only occurs with master dials that are in the 'Body'...)

    Regarding all the other problems... LOL !
     
  19. Ken1171

    Ken1171 Dances with Bees Contributing Artist

    The master dials are on Body in the EP tail I made for Dawn, but I couldn't reproduce the issue yet. I must be missing something.
     
  20. 3dcheapskate

    3dcheapskate Eager

    I've been away again, for a few weeks this time. This evening I confirmed a workaround to add parameter groups and put the dials into them (SM Poser forum thread: Pythonian way to add parameter groups? And put dials in those groups ? ), so adding easypose dials for several tentacles/whatever to the same "Body" part is no longer a problem. It seems that a prefix on the internal name is also necessary for this, so the anti-crosstalk prefix is of use, even if not for anti-crosstalk!

    Currently testing it out on Ancetorsrelic's Ya-Va-Teo and it's looking good...
     

Share This Page