odf opened this issue on Oct 27, 2008 · 13933 posts
lesbentley posted Fri, 19 March 2010 at 10:31 AM
amy_aimei, I think I have taken my experiment with the Beach Volleyball Bottom about as far as I can. I have made a new cr2 with a "Z times X" JCM morphs and all your original JCM. I have also cleaned up the cr2 somewhat, removing actors that did not need to be there, leaving only BODY, hip, hip2, lThigh, and rThigh. If you IM me your email address (recommend you don't post it in forum) I will send you the cr2.
The "Z times X" morphs are actually named "JCM-Spread&Kick-L" and "JCM-Spread&Kick-R". The morphs themselves are not very good, and you may prefer to make you own, or perhaps you can clean up mine in a modlling app. The important thing to my mind is that the ERC works as expected. Here is the relevant code:
valueParm z-ratio-<span style="color:rgb(0,255,0);">L</span>
{
name z-ratio-L
initValue 0
hidden 0
forceLimits 0
min -100000
max 100000
trackingScale 0.004
keys
{
static 0
k 0 0
}
interpStyleLocked 0
valueOpDeltaAdd
Figure
lThigh
zrot
deltaAddDelta 0.011111
}
valueParm z-ratio-<span style="color:rgb(0,255,0);">R</span>
{
name z-ratio-R
initValue 0
hidden 0
forceLimits 0
min -100000
max 100000
trackingScale 0.004
keys
{
static 0
k 0 0
}
interpStyleLocked 0
valueOpDeltaAdd
Figure
rThigh
zrot
deltaAddDelta 0.011111
}
targetGeom JCM-Spread&Kick-<span style="color:rgb(0,255,0);">R</span>
{
name JCM-Spread&Kick-R
initValue 0
hidden 0
forceLimits 1
min 0
max 100000
trackingScale 0.00459067
keys
{
static 0
k 0 0
}
interpStyleLocked 0
valueOpDeltaAdd
Figure
rThigh
xrot
deltaAddDelta 0.022222
<span style="color:rgb(0,255,0);">valueOpTimes</span>
Figure <span style="color:rgb(0,255,0);">1</span>
hip2<span style="color:rgb(0,255,0);">:</span><span style="color:rgb(0,255,0);">1</span>
z-ratio-R
indexes 215
numbDeltas 1314
deltas
{
#[deltas here]
}
}
targetGeom JCM-Spread&Kick-<span style="color:rgb(0,255,0);">L</span>
{
name JCM-Spread&Kick-L
initValue 0
hidden 0
forceLimits 1
min 0
max 100000
trackingScale 0.00459065
keys
{
static 0
k 0 0
}
interpStyleLocked 0
valueOpDeltaAdd
Figure
lThigh
xrot
deltaAddDelta -0.022222
<span style="color:rgb(0,255,0);">valueOpTimes</span>
Figure <span style="color:rgb(0,255,0);">1</span>
hip2<span style="color:rgb(0,255,0);">:1</span>
z-ratio-L
indexes 215
numbDeltas 1314
{
#[deltas here]
}
}
Whilst you are welcome to use my morphs (or the whole cr2, or any part of it). If you do want to use your own morphs for the XtimeZ bend, you could just drop your deltas into the code above where it says "#[deltas here]", then place the whole block of code at the top of the channel stack in hip2. You should then edit the "indexes" lines to reflect the number of delta lines in your morph. And NO that is not a typo on my part, in Poser script "indexes" means "deltas", and "deltas" means "indexes" (someone must have had a long lunch)! As to how it all works. The JCM-Spread&Kick-[R/L] channel gets its value (via valueOpDeltaAdd) from the xrot in the [l/r]Thigh as modified by the deltaAddDelta line, valueOpTimes then multiplies this value by the value in the z-ratio-[R/L] channel. z-ratio-[R/L] gets its value from the zrot in the [l/r]Thigh. The only purpose of z-ratio-[R/L] channel is to provide a deltaAddDelta ratio for the input of valueOpTimes.
Note that the particular deltaAddDelta values used here are a function of how the morphs were made, and in particular what rotation angles they were meant to suit. Different morphs may need completely diffrent deltaAddDelta values.
As a rough guide, morphs meant to be fully expressed when both xrot and zrot are 90° should use 0.011111 in all the deltaAddDelta lines. Those meant to be fully expressed when both xrot and zrot are 60° should use 0.0166666 in all the deltaAddDelta lines. Those meant to be fully expressed when both xrot and zrot are 45° should use 0.022222 in all the deltaAddDelta lines. My morph was specifically tailored for best fit when xrot is 45° and zrot 90°, so uses 0.0222222 and 0.011111 respectively.
The z-ratio-[R/L] channel are super-conforming (slaved to channels in the character figure, rather than channels in the conformer itself). For this to work part of the character MUST be selected at the time the conformer is loaded.
The valueOpDeltaAdd part of the JCM-Spread&Kick-[R/L] channels is super conforming, the valueOpTimes part is not.
A channel is made super-conforming by leaving out some numbers. This is super-conforming:
valueOpDeltaAdd
Figure
lThigh
xrot
deltaAddDelta -0.022222
This is not a super-conforming: valueOpDeltaAdd Figure 1 lThigh:1 xrot deltaAddDelta -0.022222
amy_aimei, you probably know most of that, but I include it for others that follow.