Forum: Poser - OFFICIAL


Subject: custom hand morphs ?

davedoo opened this issue on Apr 19, 2011 · 7 posts


davedoo posted Tue, 19 April 2011 at 12:15 PM

Hi,

How can I make some hand morphs dials ( eg. grasp, spread ...) for my own custom character ? Is there any tutorials around that you can share ?

Thanks

 


lesbentley posted Tue, 19 April 2011 at 12:52 PM

Things like grasp and spread are not implemented via morphs. They involve joint rotations, and morphs don't do rotations very well.

There are two ways to do it. One is to use the special Poser channel types Grasp and Spread. The other is to build ERC controls to do these actions. I'll say a little more about it in my next post.


lesbentley posted Tue, 19 April 2011 at 1:17 PM

If you look in the 'P4 Nude Woman.cr2' at the hand actors, you will see three special channel types, handGrasp, thumbGrasp, and handSpread. These are the channels that Poser uses to control the grasping and spreading. If the hand is rigged in the same way as the P4 Nude Woman, with the same actor names and rotation order for the finger joints, you can just copy those three channels (using a cr2 editor, or text editor), and paste them into the hands of your own figure.

As I said, this will only work properly if the hands are done in the same way as in the P4 figures. In my next post, I will say a little about how to do it using ERC.


lesbentley posted Tue, 19 April 2011 at 1:42 PM

The other way to do it is to use ERC. The Antonia Polygon figure uses ERC to implement grasp and spread. If you want to do it that way take a look at how it is done in Antonia. Basically doing grasp via ERC works like this:

Create a targetGeom channel in the hand named "Grasp", like this:

        targetGeom Grasp
            {
            name Grasp
            initValue 0
            hidden 0
            forceLimits 0
            min -100000
            max 100000
            trackingScale 0.004
            keys
                {
                static  0
                k  0  0
                }
            interpStyleLocked 0
            }

Next you need to determin which joint rotation will be involved in the fingers grasping. Let's say this is zrot. In the zrot channel of each finger (but not thumb) actor of the right hand place the following code below the "interpStyleLocked" line:

            valueOpDeltaAdd
                Figure 1
                rHand:1
                Grasp
            deltaAddDelta 75.000000

Here is what a whole zrot channel will look like with the slaving code in place:

        rotateZ zrot
            {
            name Grasp
            initValue 0
            hidden 0
            forceLimits 0
            min -100000
            max 100000
            trackingScale 1
            keys
                {
                static  0
                k  0  0
                }
            interpStyleLocked 0
            valueOpDeltaAdd
                Figure 1
                rHand:1
                Grasp
            deltaAddDelta 75.000000
            }

The procedure is the same for the left hand, except you use "lHand:1" in the slaving code. The 'thumbGrasp' and spread work in much the same way. Look in the Antonia figure, to see how it is done.


davedoo posted Tue, 19 April 2011 at 9:43 PM

Appreciate for your quick help.

I'm not familiar with ERC, will find out more infos of it.

So, what if I'm doing the rig from scratch, ( hands are not done in the same way as in the P4 figures ), anyway I can do it ?

Tks.

 


lesbentley posted Wed, 20 April 2011 at 2:58 PM

Quote - So, what if I'm doing the rig from scratch, ( hands are not done in the same way as in the P4 figures ), anyway I can do it ?

As long as the figure has finger joints that allow the grasping action to take place, the ERC method should work on any figure.

ERC (Enhanced Remote Control) is a way make the value of one channel affect the value of another channel, this relationship is know as "slaving a channel". The controlling channel is known as the "master channel", and the channel that is controlled is known as the "slave channel". Just about any channel can be a master, there is nothing you need to do to the master itself to make it a master. The slaving is achieved by placing five lines of slaving code in the prospective slave channel. Here is an example:

            valueOpDeltaAdd
                Figure 1
                BODY:1
                NameOfMasterChannel
            deltaAddDelta 1.000000

Here is what the lines of code do, listed in the order they occur. Quoted from

  1. This is the type of slaving, there are other types besides "valueOpDeltaAdd", but for your purposes at present, you don't need to know about them.

  2. Denotes the figure that contains the master channel. This should be the word "Figure" followed by the same number as used in the line below.

  3. The name of the actor where the master channel is to be found. It is should be exactly the same as the header for the actor block of code that it refers to. The name usually (but not invariably) includes a colon and number.

  4. The name of the master channel. This can be any channel name, depending on what channel you want to slave to, eg "xrot", or "ytran", or "scale", or the name of some morph channel.

  5. This line defines a control ratio. When the deltaAddDelta value is one, an increment of one in the master channel will produce an increment of one in the slave channel, if 0.5 is used an increment of one in the master channel will produce an increment of 0.5 in the slave channel, etc.

More info on ERC at the links below.

Extended Motion Control
Also Known As EMC or ERC

ERC (Enhanced Remote Control)


davedoo posted Wed, 20 April 2011 at 10:25 PM

Appreciate for your advise again !

Mmmm... sound complicated to me but I'm keen to learn it .

Will try it .