odf opened this issue on Oct 27, 2008 · 13933 posts
lesbentley posted Fri, 30 April 2010 at 12:14 PM
amy_aimei, Re: the FIGURE and CONFORMER from my last post.
Load the FIGURE first, then the CONFORMER, it's important that it happens in that order because the FIGURE needs to be the the selected item when the CONFORMER loads. The figure will be in WireFrame Display Style, the CONFORMER will load slightly to the side. It may be easier to follow what is happening if you don't conform it at this stage. Both figures have two actors, BODY and hip. The hip is represented by a cube. The conformer has one morph, Morph-01 lifts the right back corner of the hip cube. The morphs will only be expressed if the hip of the FIGURE is rotated round both the x and z axes. After a rotation you may need to move the cursor into the Document (scene) window in order to refresh the view. Below is the relevant code from the hip actor of the conformer. It consists of a targetGeom channel and a valueParm channel.
valueParm z-ratio
{
name z-ratio
initValue 0
hidden 0
forceLimits 0
min -100000
max 100000
trackingScale 0.004
keys
{
static 0
k 0 0
}
interpStyleLocked 0
valueOpDeltaAdd
Figure
hip
zrot
deltaAddDelta 0.011111
}
targetGeom Morph-01
{
name Morph-01
initValue 0
hidden 0
forceLimits 1
min -100000
max 100000
trackingScale 0.02
keys
{
static 0
k 0 0
}
interpStyleLocked 0
valueOpDeltaAdd
Figure
hip
xrot
deltaAddDelta 0.011111
valueOpTimes
Figure 1
hip:1
z-ratio
indexes 1
numbDeltas 8
deltas
{
d 2 0 0.1 0
}
blendType 0
}
I know the above probably looks very perplexing, but I will try to make it clear. Morph-01 is slaved to the FIGURE's hip xrot channel via valueOpDeltaAdd. It is also slaved to the z-ratio channel in the CONFORMER. This last block of slaving code uses valueOpTimes, valueOpTimes tells the channel to multiple the value of the morph channel by the value of the z-ratio channel. The z-ratio channel is slaved to zrot in the FIGURE's hip. Thus if zrot in the FIGURE's hip remains at zero, the value of the morph channel is multiplied by zero. Zero times any number equals zero, so as long as the zrot channel remains at zero the morph will not be expressed, no matter what the value of xrot is.
OK, so what about the deltaAddDelta value of "0.011111"? If a deltaAddDelta of 1 was used then the morph would be fully expressed when both xrot and zrot were at one degree. If one of the rotations was 1 degree and the other was 0.5 degrees thye expression of the morph would be at 50%. Whilst it is possible to make a very weak morph, and use a deltaAddDelta of 1, I find it easier to make a morph designed to be fully expressed when the joint is bent 90°. For full expression at a 90° bend, 0.011111 is the correct deltaAddDelta value.
So with the above CONFORMER figure, the expression of the morph will will equal one when the value in degrees of xrot multiplied by zedrot equals 90. Obviously you can set things up so that the morph reaches full expression for any value of rotation that you desire, by varying the deltaAddDelta value, and you can set the minimum and maximum expression of the morph by forcing the limits on the morph channel.
I'm still not satisfied that I have explained this very well, but can't think of what else to say at the moment. Perhaps the best thing is to try it for yourself. For example, use a magnet to make a new morph on the CONFORMER and try slaving it in the same way. If anyone feels they can add to the explanation, or give a better one, please feel free to chime in.
One last point. Some of the slaving is to channels within the CONFORMER, and such slaving needs to use the figure number (:1), other slaving is to channels in the FIGURE and should NOT use the figure number.
If you have any questions, please ask. I want to make this method accessible to as many people as I can. I'm just not sure of the best way to explain it. Perhaps with questions and answers, more people can come to an understanding of this method.