pitklad opened this issue on Dec 12, 2012 · 27 posts
pitklad posted Wed, 12 December 2012 at 2:26 AM
I want to make a morph that will work correct the Twist shoulder dial
while the shoulder is bend
So is it possible via ERC to slave a morph in two master dials?
This correction morph will be at '0' when bend is at 80 and '1' when Twist becomes -90
lesbentley posted Wed, 12 December 2012 at 10:32 AM
Quote - So is it possible via ERC to slave a morph in two master dials?
You can slave a channel to as many other channels as you want. A separate block of slaving code is needed for each different master channel that you are slaving to, eg:
rotateX xrot
{
name GetStringRes(1028,9)
initValue 0
hidden 0
forceLimits 0
min -100000
max 100000
trackingScale 1
keys
{
static 0
k 0 0
}
interpStyleLocked 0
valueOpDeltaAdd
Figure 1
Bodypart_A:1
Master_1
deltaAddDelta 1.000000
valueOpDeltaAdd
Figure 1
Bodypart_A:1
Master_2
deltaAddDelta 1.000000
valueOpDeltaAdd
Figure 1
Bodypart_B:1
Master_3
deltaAddDelta 1.000000
}
This is not meant to be a complete solution to what you want to do. I'm just pointing out that you can slave to as many master channels as you want.
You only give a very partial specification, so it's hard to know what you are trying to achieve, but using the new operator 'valueOpKey', may be more appropriate than 'valueOpDeltaAdd', providing it does not need to work in versions earlier than P7.
pitklad posted Wed, 12 December 2012 at 11:07 AM
I'm sure this can be solved in another way, maybee with an empty dial just for limiting but I can't find the equation...
shvrdavid posted Wed, 12 December 2012 at 11:20 AM
Quote - I'm sure this can be solved in another way, maybee with an empty dial just for limiting but I can't find the equation...
Slaving multiple joint rotations to a single jcm can present more issues than it fixes in many cases. What Les posted does work, but only as well as what you link it too.
Not sure what version of Poser you are setting it up for, but shoulder joints can easily be weight mapped for 9 up.
Don't forget that you can also add helper bones with standard or weight mapped rigging. They can work wonders when used with joints that use all 3 rotations.
Keep in mind that you can have more than one zone if you are doing standard rigging. Mixing weight maps can be done as well, but is not so easily. Weight mapping can also have animated bulge maps.
Another option is a magnet that is part of the rigging.
Some things are easy to explain, other things are not........ <- Store -> <-Freebies->
Paloth posted Wed, 12 December 2012 at 11:58 AM
I want to make a morph that will work correct the Twist shoulder dial
while the shoulder is bend
A multiplied JCM can do this. I would export the posed figure and sculpt the corrections in Zbrush, then load the JCM in Poser. I use Colorcurvature's scripts for this. The next step is to take the shoulder bend and multiply it by the shoulder twist and divide 1 with the result to find the deltaAddDelta value. For example, if you had a twist of 20 and a bend of 40, that would give you 800/1=0.00125.
The cr2 would look something like this:-
targetGeom lShldrDn40twst20
{
name lShldrDn40twst20
initValue 0
hidden 0
enabled 1
forceLimits 1
min 0
max 1
trackingScale 0.02
keys
{
static 0
k 0 0
}
interpStyleLocked 0
valueOpDeltaAdd
Figure 1
lShldr
yrot
deltaAddDelta 0.00125
valueOpTimes
Figure 1
lShldr
zrot
This method can work for you. It has saved me several times.
Download my free stuff here: http://www.renderosity.com/homepage.php?page=2&userid=323368
pitklad posted Wed, 12 December 2012 at 12:12 PM
Paloth I souldn't have to add another "deltaAddDelta ...." line in this code at the end?
Paloth posted Wed, 12 December 2012 at 12:21 PM
I souldn't have to add another "deltaAddDelta ...." line in this code at the end?
Nope. The "valueOpTimes" takes care of it.
Download my free stuff here: http://www.renderosity.com/homepage.php?page=2&userid=323368
pitklad posted Thu, 13 December 2012 at 2:56 AM
Allstereo posted Thu, 13 December 2012 at 8:19 AM
Hello all,
Paloth: If you have time, can you explain a little more how valueOpTimes works. I checked the Atlantis tutorials but it is not clear enough.
Allstereo
Paloth posted Thu, 13 December 2012 at 10:25 AM
Does the valueOpTimes work only for Poser 7 and up versions?
*That's a good question. I don't know. I've only used it with Poser Pro 2012.
Download my free stuff here: http://www.renderosity.com/homepage.php?page=2&userid=323368
Paloth posted Thu, 13 December 2012 at 10:47 AM
Attached Link: http://www.renderosity.com/mod/forumpro/showthread.php?message_id=3954492&ebot_calc_page#message_395
*Paloth: If you have time, can you explain a little more how valueOpTimes works.*It's useful for joint controlled morphs relying on more than one rotation, and to switch on correction morphs that are dependent on a full body morph. There might be other uses as well. Here is the thread that taught me about it.
Download my free stuff here: http://www.renderosity.com/homepage.php?page=2&userid=323368
Allstereo posted Thu, 13 December 2012 at 11:36 AM
Hello,
Paloth, thank for the link
Allstereo
lesbentley posted Thu, 13 December 2012 at 2:03 PM
Quote - Does the valueOpTimes work only for Poser 7 and up versions?
valueOpTimes is supported at least as far back as P4.
lesbentley posted Thu, 13 December 2012 at 2:31 PM
Quote - This correction morph will be at '0' when bend is at 80 and...
You can "drag" the the default zero point of a morph to a new value by slaving it to a (hidden) channel with a fixed value. In such cases it is traditional to to give the master channel a value of 1, and to name the channel "One" or "one", eg as a pose file:
{
version
{
number 6
}
createFullBodyMorph One
actor BODY
{
channels
{
valueParm One
{
name One
initValue 1
hidden 1
forceLimits 1
min 1
max 1
trackingScale 1
keys
{
static 1
k 0 1
}
interpStyleLocked 0
staticValue 1
}
}
}
actor SomeBodyPart
{
channels
{
SomeChannType SomeName
{
valueOpDeltaAdd
Figure
BODY
One
deltaAddDelta -80.000000
}
}
}
}
colorcurvature posted Thu, 13 December 2012 at 3:23 PM
Hi, I was about to explain my system for slaving to multiple parameters, I do remember, but I think then Snarly disappeared. Is there still demand for it?
Paloth posted Thu, 13 December 2012 at 4:16 PM
Hi, I was about to explain my system for slaving to multiple parameters, I do remember, but I think then Snarly disappeared. Is there still demand for it?
Please explain your system! I'd like to know how it works and what it looks like in the cr2.
Download my free stuff here: http://www.renderosity.com/homepage.php?page=2&userid=323368
Allstereo posted Thu, 13 December 2012 at 4:33 PM
Hello all,
Pitklad:
Just to be sure, you want to apply the corrective morph during the shoulder twist notion from 0 to -90 but only when the shoulder bend is more than 80.
Allstereo
pitklad posted Fri, 14 December 2012 at 2:11 AM
Quote - Hello all,
Pitklad:
Just to be sure, you want to apply the corrective morph during the shoulder twist notion from 0 to -90 but only when the shoulder bend is more than 80.
Allstereo
I want to apply the corrective morph during shoulder twist from 0 to -90 and during bend from 0 to -90
this corrective morph will be at full influence (1) when twist reaches -90 and bend 80
pitklad posted Fri, 14 December 2012 at 4:04 AM
Quote - > Quote - This correction morph will be at '0' when bend is at 80 and...
You can "drag" the the default zero point of a morph to a new value by slaving it to a (hidden) channel with a fixed value. In such cases it is traditional to to give the master channel a value of 1, and to name the channel "One" or "one", eg as a pose file:
{
version
{
number 6
}createFullBodyMorph One
actor BODY
{
channels
{
valueParm One
{
name One
initValue 1
hidden 1
forceLimits 1
min 1
max 1
trackingScale 1
keys
{
static 1
k 0 1
}
interpStyleLocked 0
staticValue 1
}
}
}actor SomeBodyPart
{
channels
{
SomeChannType SomeName
{
valueOpDeltaAdd
Figure
BODY
One
deltaAddDelta -80.000000
}
}
}
}
This "One" morph will always be at 1 and will start to work when "SomeName" gets -80 ?
Allstereo posted Fri, 14 December 2012 at 7:00 AM
Attached Link: http://www.renderosity.com/mod/freestuff/details.php?item_id=69716
Hello,Pitklad: So, the morph will be affected simultaneously by both motions. Now, do you want one motion (example: the twist) to be more important than the other (example: the bend) in affecting the morph? For example, it is possible that the twist changes the morph by 60% and the bend by 40%. Actually, I am working on biceps brachii of M4 and morphing of this muscle should be affected by both the bend angle and twist angle of forerarm, but in different proportions. All these effects can be done with the dependent Parameter editor of Poser, at least in my case. I use what I am calling an independant rotation dial such as "Bend with morph". The dial (In fact a master dial), drives both the regular rotation dial and the morphing. Normally, the morph is drive by the regular rotation dial. See my Free stuff package on M4 Ankle tendon morphs for coding (link above). You will see that some ankle tendons morphs (PL and TP) are affected by both the bend and side to side motion. There is a pdf tutorial that explains how to combine the effects of both rotations. Just see the section entitled PL and TP muscle tendon protrusion at the end of tutorial. Don't be afraid, there is in some irrelevant math at the beginning of tutorial. Simply skip the section. If you need more explanations, just ask. Hope that this information will be useful.
Allstereo
pitklad posted Fri, 14 December 2012 at 7:50 AM
I want this morph to start working only if both master dials are active
I don't want it to work when just one of the masters applies
I'll check your examples although maths were never a big love for me :biggrin:
I tryed to read the Atlantis tutorials but I was lost somewhere
Those jcm problems need a very clear mind to be solved...
Allstereo posted Fri, 14 December 2012 at 7:56 AM
Hello Pitkad,
Perharps it is better that I put here the settings of the dependant editor. The full morph value is 1.
First column: Poser angle dial
Second column: Master dial number (obviously, the same as Poser dial number, the master are the rotation dial)
Thrid column: Morphing settings (the dependanc parameter) to have the same effect for both rotation.
Fourth: Morphing settings to have a 30% effect for bend and 70% effect for twist.
The cumulative effect at bend of 80 and twist of -90 is 1.
Poser bend angle Master dial Morph setting Morph setting
(B=50%, T=50%) (B=30%, T=70%)
0 0 0 0
80 80 0.5 0.3
Poser twist angle Master dial Morph setting Morph setting
(B=50%, T=50%) (B=30%, T=70%)
0 0 0 0
-90 -90 0.5 0.7
Allstereo posted Fri, 14 December 2012 at 8:11 AM
Hello,
OK, thing become more clear with discussion. I think it is impossible to have the effect you want using the regular dial. You need an intermediate master dial to activate the morph under some conditions as in reguar programming. Will think about that.
Allstereo
lesbentley posted Sat, 15 December 2012 at 2:49 PM
Quote - This "One" morph will always be at 1 and will start to work when "SomeName" gets -80 ?
Yes, except when "SomeName" gets to 80, not -80. You would need to force the 'min' limit of the morph to zero, so it can't go negative. Then the morph would stay at zero untill it's imputs added up to more than 80.0.
lesbentley posted Sat, 15 December 2012 at 5:19 PM
Load it in Poser. First select the rForeArm and give it a negative xRotation. Nothing will happen until the rotation exceeds -80. At -81 the Morph-002 will be fully expressed, and it will be expressed at double strength when the rotation reaches -82. Obviously this expression is way too aggressive. There are a number of ways you can tone down the expression, one way is just to make a weaker version of the morph, but I want to show you another method.
Restore the figure. Select the rForeArm and give it some positive yRotation. This will express a different morph, Morph-001. Nothing will happen until the rotation exceeds 80 degrees, but this time the morph will express much more slowly.
Morph-001 contains some extra slaving code using 'valueOpTimes':
valueOpTimes
Figure 1
BODY:1
MorphMult-001
This valueOpTimes should be the last block of slaving code in the channel. The code points to a valueParm channel in the BODY, "MorphMult-001". You can use the MorphMult-001 dial in the BODY to control the strength (or speed) at which the morph is expressed.
valueOpTimes multiplies the value of the channel it is in by the value of its master. So when the value of the MorphMult-001 is zero, the slave channel will be completely disabled, and when the value is one, the slave channel will act as normal.
Try adding the same slaving code to the Morph-002 channel. There is also a MorphMult-002 channel in the BODY, this is not used at present.
Allstereo posted Sun, 16 December 2012 at 6:27 AM
Hello all,
Lesbentley: Thank you, you suggestions are always relevant. Will study the code. I need this approach for my M4 biceps brachii morphs. The twist notion of forearm have to have an effect only if the forearm is bend, not on all the range of full bending.
Allstereo
pitklad posted Mon, 17 December 2012 at 2:23 AM
It seams that the valueOpTimes does the trick! Thanks everyone so much!
:thumbupboth:
Also you all gave me some ideas on how to solve other JCM problems,
I'll have to study the code more...