Forum Coordinators: RedPhantom
Poser - OFFICIAL F.A.Q (Last Updated: 2025 Jan 21 4:30 pm)
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
Quote - So, when will we see Wonderwoman and her lasso of truth?
Erm. :unsure: I have to update WW for Antonia, which will be a complete re-build. Before that I have to finish Zoe Heriot, and I have a few more characters queued up after her. And right now I'm trying to figure out if the path functions from the extrusion script can help pose chains and/or generate a static chain prop along the defined path. Which brings me to banging my head against walls over 3D rotations. :lol:
So... maybe 2013. :lol: Assuming we're all still here.
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
funny you should mention chains on a path--i was just going to ask about that.
lost in the wilderness
Poser 13, Poser11, Win7Pro 64, now with 24GB ram
ooh! i guess i can add my new render(only) machine! Win11, I7, RTX 3060 12GB
Quote - funny you should mention chains on a path--i was just going to ask about that.
Well, I have the path functions, I have the chain-builder. Seems like they would fit together nicely. :lol:
The question is whether I can get my head around 3D rotations well enough to swing it. :scared:
3D rotations. One of my oldest enemies! Sigh.
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
makes my head spin
lost in the wilderness
Poser 13, Poser11, Win7Pro 64, now with 24GB ram
ooh! i guess i can add my new render(only) machine! Win11, I7, RTX 3060 12GB
Quote - I feel your pain.
It's no fun.
The problem, as far as I can tell, is the need for conversion to degrees before I can build the rotation matrices I need. That goes through radians, and there's the whole problem with the 180 degree limitation. If I could just figure out how to build the rotation matrices working directly from the directional vectors, problem solved. Theoretically. :unsure: So I guess I should be looking into vectors into matrices, or something....
Quote - makes my head spin
If 3D Rotations ever team up with Tanglecord, my oldest and deadliest remaining enemy, I'm in for worlds of trouble. :scared:
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
Quote - I think I should be able to help you out there, if you give me some details.
Ooh! :laugh: I will not reject such an offer.
I have the vectors for the relative X,Y,Z axes at each point along the path. I have a base geometry for a chain link. I need to take the vectors for those relative axes and rotate the link geometry so it points properly along those axes.
Everything I can find for generating a rotation matrix, however, requires an angle in radians as input. If a matrix can somehow be constructed directly from the vectors, Cage will be happier and have more hair. :lol:
Basically it would be the same process being applied for each vertex ring along a loop or tube. There, a circle of vertices is generated, properly rotated by code which takes the relative X and Z vectors as input. I want to work the same trick with an entire chain link geometry, to avoid all the futzing about with angles.
Is that even possible? Or should I keep learning about math.atan2?
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
Quote - Yep, that can be done. I don't have time right now to explain how, but I will later.
You are my hero! :woot: Not only do you give me Antonia, but you help fight my enemy, 3D Rotations. :lol:
Any assistance might go a long way toward helping create a nice chain-posing script. :thumbupboth:
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
Okay, my meeting's over now.
Just so that I explain things the right way: do your matrices operate from the left or the right? In other words, if you have a vector [x, y, z] and a matrix [[a, b, c], [d, e, f], [g, h, i]], is the result [xa+yd+zf, xb+ye+zh, xc+yf+zi], or is it [xa+yb+zc, xd+ye+zf, xg+yh+zi]?
-- I'm not mad at you, just Westphalian.
Ooh, the matrix handedness problem. :lol:
It looks like the first of the options you present. Here's the function:
def point_by_matrix(p, m):
return [p[0] * m[0][0] + p[1] * m[1][0] + p[2] * m[2][0] + m[3][0],
p[0] * m[0][1] + p[1] * m[1][1] + p[2] * m[2][1] + m[3][1],
p[0] * m[0][2] + p[1] * m[1][2] + p[2] * m[2][2] + m[3][2]]
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
Okay, that makes it a bit easier to explain. So you want to find a matrix, let's call it Rot, that maps the standard unit vectors onto three new vectors p, q and r that you specify. I'll write this down as follows, using some kind of bastardized Python notation:
1) [1,0,0] * Rot = p
2) [0,1,0] * Rot = q
and
3) [0,0,1] * Rot = r
We can combine these into one equation that looks like this:
[[1,0,0],[0,1,0],[0,0,1]] * Rot = [p, q, r]
Now the first matrix on the left side is just the identity, so we can ignore it and get
Rot = [p, q, r]
or in other words
Rot = [[p[0], p[1], p[2]], [q[0], q[1], q[2]], [r[0], r[1], r[2]]]
So in fact you don't have to construct anything. You just use your three vectors p, q and r as the rows of your rotation matrix, and that's it. Just be careful that they all have length 1 and are at 90 degree angles with each other, so that you get a proper rotation and don't deform your chain links.
-- I'm not mad at you, just Westphalian.
The script uses pre-existing functions from the chain maker script and the subdivide quads script I posted to the Python forum.
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
Quote - So in fact you don't have to construct anything. You just use your three vectors p, q and r as the rows of your rotation matrix, and that's it. Just be careful that they all have length 1 and are at 90 degree angles with each other, so that you get a proper rotation and don't deform your chain links.
Ooh. Simple and elegant! :laugh: I would have expected it to be far more complicated, or even impossible. But then I'm superstitious about rotations. :lol:
I'll see what I can do with this information. Thanks, odf! :thumbupboth:
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
Quote - It's one of the first things I learned in first semester Linear Algebra, 27 years ago. Sometimes being a former Mathematician comes in handy.
Jeepers. A mathematician, even? I maxxed out with second year geometry, in my math education. I took trigonometry, but as soon as sine and cosine came up, I was lost. I failed a test creatively, at least. When I was expected to draw a plane defined by a problem, I drew a nice picture of an old-timey aeroplane. :lol: Sadly, I got no credit for that. :unsure: (I did something similar for a philosophy exam, writing a little story which used the Marx Brothers to illustrate the concept of metaphysical solipsism. That wasn't appreciated, either.)
This is useful knowledge, indeed. In Googling the topic, I found several people asking how it could be done, but no answers. :blink:
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
I've made options to trim a path to the submitted chain length by number of links, extend the chain to the end of the path, or scale the path to the submitted chain length. All working nicely. (And all thanks to the magic of odf's revelation about matric construction from a set of orthogonal vectors. :woot:)
The main problem now is that the links can slip out of their proper places at sharp transition points. You can see a bit of that on the linear chain on the left, in the attached image. I'm going to see what I can do to correct that.
Aside from that, I just need to finish the Tkinter GUI for P7 and below, and the static-chain-prop-along-a-path script will be ready.
A script to pose a chain figure from the path is more daunting, at least to me. :scared: There would seem to be no avoiding angle conversions there, as Poser parameter dials will only accept euler angles as input. (A pity there's no option to set rotations using quaternions, as in Blender. Poser supposedly uses quats internally, but there's no Python access, if that's the case.)
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
This has promise. Well done Cage, and thanks to odf for clearing the mental block.
Quote - The main problem now is that the links can slip out of their proper places at sharp transition points.
That is a problem with chains, however you "pose" them. The rotation centre needs to be in a different place depending on the axis of rotation. I guess a picture would help enormously here, but that will have to wait for another time. :)
I'm sure there's a whole body of knowledge relating to chain rigging that could be folded into this script, if it's thought necessary. I'll have a surf through the Poser Technical forum later on.
Quote - A script to pose a chain figure from the path is more daunting, at least to me.
Do you even need that? It seems to me that the ability to create an ad hoc chain to follow the specificed path is enough - or have I missed something?
great work, Cage!
lost in the wilderness
Poser 13, Poser11, Win7Pro 64, now with 24GB ram
ooh! i guess i can add my new render(only) machine! Win11, I7, RTX 3060 12GB
Thanks, folks. :laugh: I really am surprised it's going so well, and so easily (fingers crossed, knock wood, etc.). Odf's revelation is a wonderful boon. :thumbupboth: I told my grandfather, a retired engineering professor, about what odf had taught me. His response was, basically, "But of course! You didn't know that?" Apparently the approach is taken for granted by those who know and is never, ever explained anywhere in any online discussion of vector math, as far as I can tell. So I sort of hope odf hasn't broken some unspoken rule. The league of vector math insiders might go after him. :scared: Be careful, odf! :lol:
Quote - That is a problem with chains, however you "pose" them. The rotation centre needs to be in a different place depending on the axis of rotation. I guess a picture would help enormously here, but that will have to wait for another time. :)
A process which just pulls the stray path point toward the average of its two neighbors' positions seemed to fix the trouble here, in some quick tests. I'm sure a proper solution can't be as simple as that, but this might remove the worst of the problem if I can't come up with something better.
Have you tested the chains built with the Chain Maker script? Les did a good job with the rigging, creating centers of rotation which move as a link is rotated. Assuming I've implemented it properly, his rigging is applied to any chain figure created with the script.
Quote - Do you even need that? It seems to me that the ability to create an ad hoc chain to follow the specificed path is enough - or have I missed something?
Well, a poseable chain can be animated, and a user can easily make small adjustments to the positioning of each individual link, if needed. I'm thinking about trying to add animation capability to this, using keyframed morphs, but I have no idea whether that will look great or terrible. :lol: I could allow more user adjustment by creating the chain as a series of separate props, all parented to one (hidden?) main prop, perhaps. :unsure:
I'd love to avoid having to work with chain figure posing, however. My tests so far are not encouraging, which seems mainly down to really bad euler angle conversions.
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
Quote - A process which just pulls the stray path point toward the average of its two neighbors' positions seemed to fix the trouble here, in some quick tests. I'm sure a proper solution can't be as simple as that, but this might remove the worst of the problem if I can't come up with something better.
As the Oblique Strategy says, "Don't be afraid of things because they're easy to do". Most of the time, small inaccuracies in the link positioning aren't going to matter.
Quote - Have you tested the chains built with the Chain Maker script? Les did a good job with the rigging, creating centers of rotation which move as a link is rotated.
No, but I should. (Off Topic) I decided that the DAZ Handcuffs had annoyed me for one last time, and I rebuilt them. The chain rigging has a single fixed joint centre which is fine for most situations, for the same reasons as I suggested above. It would be nice if it was accurate even for extreme close-ups too; there's no penalty for adding ERC apart from a slightly larger CR2, as far as I know.
Quote - Well, a poseable chain can be animated...
Ah, I had missed something - animation, the elephant in the room. I see that I posted before coffee. I must remember never to do that again. :)
Quote - I'm thinking about trying to add animation capability to this, using keyframed morphs, but I have no idea whether that will look great or terrible.
Doing rotations with morphs don't sound like a great idea - well, you know that, I'm sure. Or maybe I need another dose of caffeine. ;)
Quote - I could allow more user adjustment by creating the chain as a series of separate props, all parented to one (hidden?) main prop, perhaps.
How about parenting the links to a transparent carrier band which can be simulated in the cloth room? Et voilà, dynamic chain... Ooh, shiny... Not always accurate, again, but think of the possibilities. There's a thread somewhere which covers some experiments that were done a while back.
Quote - Doing rotations with morphs don't sound like a great idea - well, you know that, I'm sure. Or maybe I need another dose of caffeine. ;)
I was thinking it could be like the clothroom, or a morph-deformation driven animated file format like Quake .md2, or .mdd. VK has shown how linear morph deformations can be used to simulate rotation. So the basic idea can work, particularly if each frame in the animation is separately morphed.
But chains made with this script probably wouldn't represent links rotating relative to one another in any way which would look natural in animation, so the results might not be great. Unfortunately, that possible flaw would also affect any approach which tried to use the clothroom for dynamics, as well.
Quote - How about parenting the links to a transparent carrier band which can be simulated in the cloth room? Et voilà, dynamic chain... Ooh, shiny... Not always accurate, again, but think of the possibilities. There's a thread somewhere which covers some experiments that were done a while back.
Standard parenting works on the actor level, so it wouldn't respond to vertex deformations, as I understand it. But I've been thinking along similar lines to your suggestion, since my last post. A script could create a polygon strip to be used in the cloth room. The strip would be specially-structured in such a way that the positions of certain vertices could be used as the path points for creation of a chain or tube. Theoretically, this could work. I do something similar with the two-sided cape cloth script used by my Batgirl character. But It would still leave open the question of whether the script-generated chains would look any good when moving.
Anyway, I'll try something, animation-wise, once I'm done tinkering with the badly-aligned links.
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
Most of the options for the script are the same as those for either the chain-making script or the extrusion script. I'll try to type up basic instructions soon.
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
Quote - Quick test, and the thing seems to work pretty well to me. Connected three points no problemo.
Thanks. :laugh: I haven't seen any problems yet with the basic process of building the chain, or, for that matter with any result which doesn't use the linear path option. So the script should be useable for most contexts, in its current form.
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
Quote - Cage, you are rebuilding blender within Poser :D
What, does Blender do all this stuff? The Blender interface is such a tangle that I have no idea about its true range of capabilities. :lol:
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
Quote - > Quote - Cage, you are rebuilding blender within Poser :D
What, does Blender do all this stuff? The Blender interface is such a tangle that I have no idea about its true range of capabilities. :lol:
I hear it also makes a reasonable espresso and darns your socks, if you can find the right buttons.
-- I'm not mad at you, just Westphalian.
But will it untie the knot in my shoelaces? If it will, I'm really done with Poser, this time. :lol:
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
The chain maker seems to work nicely, at least on a casual, messing about with it level. It remains to be seen whether I can position those markers well enough to make something realistic. Whatever happens, the limitations would be mine, not the script's...
I hesitate to mention it, but presumably Mr. Looper could be combined with this to create a script which forms loops of chains defined by a plane intersecting a solid? Just saying, not a hint or nuthin'. :)
Quote - I hesitate to mention it, but presumably Mr. Looper could be combined with this to create a script which forms loops of chains defined by a plane intersecting a solid? Just saying, not a hint or nuthin'. :)
That hadn't even occurred to me. I'll give it a try. Shouldn't be a problem. :thumbupboth: I need to try to add the axis-flattening to the loop script, too.
I've updated the Loop Scripts page on my site with all of the new scripts, as well as updated versions of the skinner and looper scripts, which use the new two GUI system.
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
There's a slight conceptual problem with creating a looped chain. The loop path has a set length and the length of the divisions along the loop is set by the chain link length. So there's a good chance that the ends won't meet up properly in any given loop. In such a case, I can let the final link do what it wants, leave the loop open, or re-space the links either at the end or all along the chain. Each approach has its own drawbacks. :unsure:
I'll try setting up a series of options, then see what the results look like.
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
Content Advisory! This message contains nudity
Nudity flag because Antonia is wearing only chainloops. :unsure:
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
Since the Y rotation of the plane has no effect on the actual process of creating the loop path, I can use that to allow a user to rotate the join. I'll set it up so the join will end up pointing along the direction in which the rotated Z axis of the plane points.
But I'm still hoping to work it out a bit better than seen above. I need to tinker a bit.
The original chain-making script has a known RAM leak, which was discussed earlier in the thread. That problem also affects the chain-along-path script Aand the chain-loop script on which I'm working. It can end up crashing Poser, if you run the scripts repeatedly (I did it by creating stacks of 20 loops, 100 times or so) without re-starting Poser.
I think I've located the source of the leak, however. Apparently Numeric arrays don't handle references the same way as regular Python lists. I'll see if I can fix the problem, then update all of the chain scripts. In the meantime, just be aware of the possible risk. :blushing:
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
Quote - Since the Y rotation of the plane has no effect on the actual process of creating the loop path ...
As this is the case, you could scale the path on the other two axes to make it an exact number of links long.
Obviously this will work better when the fraction of a link that needs to be added is small compared to the total length.
Quote - As this is the case, you could scale the path on the other two axes to make it an exact number of links long.
Obviously this will work better when the fraction of a link that needs to be added is small compared to the total length.
Any scaling of the path should have the effect of creating an offset between the surface being encircled by the loop and the loop itself. I assume I've misunderstood...?
If the size of a link can't change and the length of the path can't change, I can only work with the link count and the spacing between the links.
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
The problems at the loop join seem to have been remedied, in my tests. Even so, the seam has been rotated to face on -Z by default (normally the convex hull sort places it on +X), and the seam should follow the plane's Y rotation to face in the same direction as the plane's relative negative Z axis points when the script is run.
There is still a RAM leak. I haven't managed to locate it yet, unfortunately. It has nothing to do with Numeric. Somewhere I assume I'm passing around references when I think I'm not, and the refcount isn't reaching zero for something before the script ends. The script is currently set up to use the Python gc module for some garbage collection, which seemed to consistently reduce the RAM loss by up to 60% in my tests, but it does still leak. So if you plan to run this script over and over dozens of times without restarting Poser, be aware of your RAM levels.
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
Agreed. I'd just like to have it creating proper loops, if possible. I guess I'm odd that way. :lol:
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.
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.
I'm still trying to work out a nice, flexible procedural rope shader.
===========================sigline======================================================
Cage can be an opinionated jerk who posts without thinking. He apologizes for this. He's honestly not trying to be a turkeyhead.
Cage had some freebies, compatible with Poser 11 and below. His Python scripts were saved at archive.org, along with the rest of the Morphography site, where they were hosted.