Mark@poser opened this issue on Apr 20, 2008 · 16 posts
Mark@poser posted Sun, 20 April 2008 at 8:26 AM
I made a morph for V4's head in Carrara that moves the eye sockets either closer together or further apart. I manually shift the eyeballs to get get them to fit after applying the morph, and she looks fine. When I move her head, the eyeballs move as they should, but when I apply a pose, the eyes go back to V4's default position. I can correct this by re-shifting the eyeballs, but I wondered if there was a way to lock the eye balls at the shifted position, so when I apply standard morphs, I don't keep popping her eyeballs out? I have hundreds of poses, so modifying the pose files by hand would be an issue. Any thoughts would be appreciated.
Thanks
Mark
lesbentley posted Sun, 20 April 2008 at 10:21 AM
The best way is to use ERC to slave the eyes to the channel that contains the morph. For details of doing this, see the thread "A Compendium of PZ2 Techniques".
http://www.renderosity.com/mod/forumpro/showthread.php?thread_id=2735605
You don't need to read the thread from the start, it is quite long. Read the posts titled "The Monster Eyes Problem (part 1)." and "The Monster Eyes Problem (part 2).", they are quite a long way into the thread. After that, you may also want to look at some of the proceeding posts from "Injecting ERC slaving (part 1)." onwards, which also relate to the subject.
lesbentley posted Sun, 20 April 2008 at 10:34 AM
P.S.
The post is a little advanced, and assumes some knowledge of ERC, and editing Poser library files. If you get stuck, or have any questions IM me. Or post your questions here below.
scott8539 posted Sun, 20 April 2008 at 11:03 AM
i had that problem too.so i just did all the major stuff with dials ,eyes,mouth and saved in the face(expression)folder.then save my custom morph as morph target.but i only have to do that for v4.try this trick when you have your figure right,goto edit and click memorize figure then save and see if it helps.
lesbentley posted Sun, 20 April 2008 at 11:15 AM
For a temporary fix in the Poser interface, select an eye, double click on a Tran dial, set the Min and Max Limits to the value on the dial. Then from the Figure menu, you can turn on "Use Limits". The catch is that Limits will be on for the whole document, and will stop you from applying more extreme poses to figures. Another fudge is to translate the eyes, then Memorize them (with the eye selected, Alt+Ctrl+E), apply a pose, then Restore the eyes (Ctrl+E). These methods can be a relatively quick way to get you out of a jam, but in the long term you are much better off slaving the translations to the morph channel, as suggested in my first post.
Mark@poser posted Sun, 20 April 2008 at 12:27 PM
Okay, I'll try these all these suggestions.
lesbentley,
I had tried to follow your ERC tutorial the other day, but it's a little beyonfd me right now. I appreciate the simplier idea you suggested too.
Thanks guys for the help.
Mark
lesbentley posted Sun, 20 April 2008 at 3:24 PM
@ Mark@poser,
I can see how the tutorial might be a bit daunting if you have not done much of this sort of stuff before.
If you like I could try to make a pz2 (pose) file to fix your problem with the eyes. It should not take me long, and seeing a file for your specific situation, might help you understand how this stuff is done. To make the file I would need some information from you.
1). I would need to know the name of the figure e.g. "Victoria 3 RR", "Victoria 3 SAE", "!Aiko 3 LE", "JessiCasual", or what ever.
2). The internal and dial name of the targetGeom (morph) channel that houses the morph. If you imported the morph as an OBJ through the Poser Interface "Object > Load Morph Target", then the internal name should be the same as the dial name. If not, and you don't know the internal name, you will need to have the character saved in uncompressed CR2 format, not CRZ. Open it in a text editor, use the name that appears on the dial as a Search string. The first instance of the Search string may be a 'valueParm channel, you are looking for a 'targetGeom' channel. I need to know the name in that 'targetGeom' channel, e.g. "targetGeom PBMCC_05", or "targetGeom MyMorph", what ever. All names are case sensitive, "MyMorph" is not the same as "mymorph".
3). For the third and last piece of information, you will need to have Poser set to use "Poser native units" in the General Properties, as accessed from the Edit menu. Once you have Poser set to use native units, then apply the head morph, set its dial to a value of "1.000", translate the eyes until they are in the desired position, then note down the value of each translate channel. So the information you would give me, if you want to go with this is:
Figure name ?
Dial name ?
Internal name targetGeom ?
xTran leftEye ?
xTran rightEye ?
yTran leftEye ?
yTran rightEye ?
zTran leftEye ?
zTran rightEye ?
I can't guarantee that I can produce a file that works for you, but I think there is a very good chance. Do you want to give it a go?
Mark@poser posted Sun, 20 April 2008 at 3:57 PM
Thanks for the offer. I re-read your tutorial and tried the approach in a pz2 file and directly in a pz3 file also. I have not had much luck. No errors, but the eyeballs keep moving when I apply a pose from the library. I using V4 and I am injecting the morph as an obj.
The text I put in to the pz3 looked like this (under actor leye):
translateX xtran
{
name xTranslate
initValue 0
hidden 0
forceLimits 0
min -100000
max 100000
trackingScale 0.001
keys
{
static 0
k 0 -0.00197674
sl 1
spl
sm
}
interpStyleLocked 0
valueOpDeltaAdd
Figure 1
head:1
PHMHeadBrigette
deltaAddDelta 0.000100
.
. I deleted some items here
.
valueOpDeltaAdd
Figure 1
head:1
PHMFaceSize
deltaAddDelta -0.000820
valueOpDeltaAdd
Figure 1
head:1
Raquel
deltaAddDelta 0.001977
trackingScaleMult 1
}
The answers to your questions
Figure name targetFigure blMilWom_v4b
Dial name Raquel
Internal name targetGeom Raquel
xTran leftEye 0.001977
xTran rightEye -0.001977
yTran leftEye 0.0
yTran rightEye 0.0
zTran leftEye 0.0
zTran rightEye 0.0
I don't always set the Raquel morph to 1, so maybe that's some of the problem too.
I appreciate any help you can provide.
Mark
pjz99 posted Sun, 20 April 2008 at 4:56 PM
IMO you may want to go through the pose files that do this, which pretty clearly have parameter information included for the eye actors (bad choice ,wherever they came from) and strip that stuff out. You can do it by hand, or with some mass text editor, or with a pose writing utility like Netherworks' PoseWriter:
http://www.contentparadise.com/us/user/posewriter_premium_product_18652
You might also just try simply locking the left eye and right eye (select each eye and Object -> Lock Actor) before posing.
lesbentley posted Sun, 20 April 2008 at 5:03 PM
OK, hopefully this will work. Copy the text between the lines below, into a text editor, and save it to a pose folder as "RaquelEyeFix.pz2".
You will want a cr2 that is clear of any previous attempts you made to use ERC to move the eyes, or attempts to move the eyes in any other way. All the translations of the eyes should be zero. The only way the cr2 should be different from the default V4, is the Raquel morph and any other dial spinning or what ever to make the character look the way you want.
Apply the "RaquelEyeFix.pz2" pose. The eyes should move to the correct position when you set the Raquel head morph to a value of "1.000". They should also be in the correct relative position when the Raquel morph is set anywhere between 0 and 1, and probably for a good way outside this range as well. It should work whether the Raquel morph is expressed via the dial in the head, or via an FBM dial in the BODY.
If it works you can save the character back to a Figure pallet, and it should still work the next time you load the character. If it does not work, please let let me know, so I can figure out what I am doing wrong.
{
//RaquelEyeFix.pz2
version
{
number 3
}
actor leftEye
{
channels
{
translateX xtran
{
valueOpDeltaAdd
Figure
head
Raquel
deltaAddDelta 0.001977
}
}
}
actor rightEye
{
channels
{
translateX xtran
{
valueOpDeltaAdd
Figure
head
Raquel
deltaAddDelta -0.001977
}
}
}
figure
{
}
}
lesbentley posted Sun, 20 April 2008 at 5:12 PM
P.S.
I Just noticed in your last post that you said "(under actor leye)". I was assumin that the eye actors in V4 are named "leftEye" and "rightEye", like they are in almost every other figure (I don't have V4), if the eye actors are named "leye" and "reye", you will have to edit my code accordingly.
pjz99 posted Sun, 20 April 2008 at 5:22 PM
Just to confirm, V4's eyes are named "rEye" and "lEye".
lesbentley posted Sun, 20 April 2008 at 5:36 PM
@ pjz99,
Thanks for the info pjz99 (I wonder why they did that?).
@ Mark@poser,
P.P.S. If you wanted to edit the cr2 (or a pz3) directly, rather than apply the pose, you would need to include actor and figure numbers in the slaving code, eg:
valueOpDeltaAdd
Figure
head
Raquel
deltaAddDelta 0.001977
When injecting the slaving via a pose file you should leave these numbers out. There is not much point in editing the cr2 directly in this case, as you can just save the figure back to a pallet, to save the changes made by the pose file. Below is the revised version with the correct actor names for V4.
{
//RaquelEyeFix.pz2
version
{
number 3
}
actor lEye
{
channels
{
translateX xtran
{
valueOpDeltaAdd
Figure
head
Raquel
deltaAddDelta 0.001977
}
}
}
actor rEye
{
channels
{
translateX xtran
{
valueOpDeltaAdd
Figure
head
Raquel
deltaAddDelta -0.001977
}
}
}
figure
{
}
}
Mark@poser posted Sun, 20 April 2008 at 6:35 PM
Okay I tried the new algorithm and that seemed to work. Every time I apply a new pose the eyeballs stayed where they should. I think I also see what I did wrong earlier when I tried putting this directly into the pz3. A mistake on my part.
This has really saved me some time, plus I can use the same approach in the future. Thanks to everyone, and lesbentley look for a renderosity gift certificate in the mail from me.
Thanks all
Mark
pjz99 posted Sun, 20 April 2008 at 6:47 PM
It would be great if people distributing poses quit including eye information in them, then you wouldn't have had this problem in the first place :/
SoulTaker posted Tue, 22 April 2008 at 2:20 PM
bitchin about freestuff providers pjz99 ?
i'm shocked