Mon, Dec 23, 12:05 PM CST

Renderosity Forums / Poser - OFFICIAL



Welcome to the Poser - OFFICIAL Forum

Forum Coordinators: RedPhantom

Poser - OFFICIAL F.A.Q (Last Updated: 2024 Dec 23 8:11 am)



Subject: A Compendium of PZ2 Techniques.


lesbentley ( ) posted Mon, 31 March 2008 at 7:49 PM · edited Mon, 23 December 2024 at 12:01 PM

A Compendium of PZ2 Techniques.

This thread is aimed at people who have some experience of text editing Poser library files.

It seems that there are questions about pose (*.pz2) files that keep coming up from time to time. Pose files can do much more than just pose a figure. They can hide or lock actors, scale, smartparent, change materials (MAT poses), change joint parameters, inject new geometry into props and actors, inject morphs and ERC, to name a just few things.

I thought it might be useful to have a compendium of pz2 examples in one thread, rather than posting the same answers over and over. In learning about pz2 files you will also learn a lot about how pp2 (prop) and cr2 (character) files work.

Most of the pz2 files in this thread will need to be constructed or edited in a text editor or a cr2 editor, they are not in general things that can be saved directly from the Poser interface. When you do need to save a pose file in Poser as the basis for further editing, make sure you have "Use file compression" turned off in the General Preferences, so that the result is a plain text file. For some pose files relating to morphs it may also be necessary to have "Use external binary morph targets" turned off.

In my pz2 files I usually do not use the colon and actor number (:1), in most cases it does not matter if this is included or not, but in pose files that inject or modify ERC slaving code the ":1" should in general NOT be used, and you should use "Figure" NOT "Figure 1" in most slaving code.

Lines starting with "//" or "#" are comment lines, these lines will be ignored by Poser. All the files I post in this thread have a pz2 file extension unless otherwise stated. Be aware that most pz2 files can be placed in a camera folder if you change the file extntion to cm2, or in a lights folder if you change the extension to lt2, or in a face folder if you change the extension to fc2.

All the pose files I post here have been tested in Poser 6, but there is always a chance that some particular pose will not work as expected in some set of circumstances, or that I have made a typo. I welcome corrections if anyone spots errors in this thread.

Feel free to add your own pz2 techniques to this thread, but please check your work for errors before posting, and post a working example, either as a text attachment (*.txt), or pre-formatted text.

To display pre-formatted text in a post you enclose the code in the HTML 'pre' tags "

" and "
;". When you include pre-formatted text you need to use the "Source" button in the Renderosity "Reply" box, before pasting your text in. Because the "Source" button will change the way text is formatted, you will need to use paragraph tags

to get paragraph breaks in any text that is outside the pre tags.

Enough preamble, in my next post I will give some examples of pz2 files.


lesbentley ( ) posted Mon, 31 March 2008 at 7:57 PM

OK, here are some example pz2 (pose) files.

Make actors INVISIBLE:

{

version
        {
        number 3
        }

actor leftEye
        {
        off
        }
actor rightEye
        {
        off
        }
actor head
        {
        off
        }
Figure
        {
        }
}

Make actors VISIBLE: {

version
        {
        number 3
        }

actor leftEye
        {
        on
        }
actor rightEye
        {
        on
        }
actor head
        {
        on
        }
Figure
        {
        }
}

Lock actors: {

version
        {
        number 3
        }

actor hip
        {
        locked 1
        }
actor abdomen
        {
        locked 1
        }
actor chest
        {
        locked 1
        }
Figure
        {
        }
}

The pz2 file to unlock actors is exactly the same, except it uses "locked 0" in place of "locked 1". - - - - - -

A pz2 to scale the BODY actor to 200%. {

version
        {
        number 3
        }

actor BODY
        {
        channels
                {
                propagatingScale scale
                        {
                        keys
                                {
                                k  0  2
                                }
                        }
                }
        }
Figure
        {
        }
}

NOTES: - - - - - -

Most figures use "propagatingScale" for the channel type in the BODY actor, and "scale" in all the other actors. Note the upper case "S" in "propagatingScale". - - - - - -

A pz2 to scale the 'head' actor to 150%. {

version
        {
        number 3
        }

actor head
        {
        channels
                {
                scale scale
                        {
                        keys
                                {
                                k  0  1.5
                                }
                        }
                }
        }
Figure
        {
        }
}

Note that in a scale channel the number on the left of the decimal point represents hundreds, the number on the right of the point represents ten's. So "0.9" would be a scale of 90%, and "0.0525" would be a scale of 5.25%. The default value of a scale channel is "1.0" which is 100%. - - - - - -

**Forcing Limits.**In Poser's Figure menu you have an option to "Use Limits", when this option is turned on all channels in the scene are constrained between the values set by the 'min' and 'max' lines in the particular channel. "Use Limits" is a global switch, when turned on it applies to everything in the document (scene). You could use a pose to set this switch:

{

version
        {
        number 3
        }

doc
        {
        useLimits 1
        } 
}

There is little point in the above pose, as you can easily turm the feature on or off from the Figure menu. However some times you may want to set limits for some channels but not for the whole document. For this you can use the 'forceLimits' line in the individual channels, a value of 1 turns it on a value of 0 turns it off. Lets take an example. Say you have a figure with an alien head morph. The eyes have had to be moved to fit the morphed position of the eye sockets. All is well until you come to apply a stock pose to the figure. Because the stock pose contains data for the translate channels, it resets the translations of the eyes to zero. How can you prevent this? One way is to force the limits on the translate channels, as in the pz2 below (I will show a different way to overcome this problem later).

A pz2 to force limits for translations of a figure's eyes:

{

version
        {
        number 3
        }

actor leftEye
        {
        channels
                {
                translateX xtran
                        {
                        forceLimits 1
                        min 0.002
                        max 0.002
                        }
                translateY ytran
                        {
                        forceLimits 1
                        min 0
                        max 0
                        }
                translateZ ztran
                        {
                        forceLimits 1
                        min 0.00311
                        max 0.00311
                        }
                }
        }

actor rightEye
        {
        channels
                {
                translateX xtran
                        {
                        forceLimits 1
                        min -0.002
                        max -0.002
                        }
                translateY ytran
                        {
                        forceLimits 1
                        min 0
                        max 0
                        }
                translateZ ztran
                        {
                        forceLimits 1
                        min 0.003125
                        max 0.003125
                        }
                }
        }

Figure
        {
        }
}

The pose files in the examples each tend to do one thing, but there is nothing to stop you mixing and matching, you can carry out many functions in a single pose file. I hope to add some more examples of pz2 files soon.


RAMWorks ( ) posted Mon, 31 March 2008 at 8:16 PM

Bookmarked

---Wolff On The Prowl---

My Store is HERE

My Freebies are HERE  


SamTherapy ( ) posted Mon, 31 March 2008 at 8:18 PM

Thanks for this, Les.  Very useful stuff.

Coppula eam se non posit acceptera jocularum.

My Store

My Gallery


svdl ( ) posted Mon, 31 March 2008 at 9:43 PM

You can add Poser 5 style grouping of parameter dials using a pose file:

<font size="1"><font size="1">{<br></br>
    version<br></br>
     {<br></br>
       number 5<br></br>
    }<br></br>
    actor BODY<br></br>
    {<br></br>
        channels<br></br>
        {<br></br>
           
groups<br></br>
           
{<br></br>
               
groupNode Glute-Hip-Abs<br></br>
                {<br></br>
                   
collapsed 1<br></br>
                    parmNode
PBMExOblique<br></br>
                   
parmNode PBMErectorSpin<br></br>
                   
parmNode PBMStomachIn<br></br>
                   
parmNode PBMTummyOut<br></br>
                    parmNode
PBMLineaAlba<br></br>
               
}<br></br>
               
groupNode Legs-Feet<br></br>
               
{<br></br>
                   
collapsed 1<br></br>
                   
parmNode PBMThighFull<br></br>
               
}<br></br>
           
}<br></br>
        }<br></br>
    }<br></br>
    actor hip<br></br>
    {<br></br>
        ...<br></br>
    }<br></br>
}<br></br>
 </font></font>

The pen is mightier than the sword. But if you literally want to have some impact, use a typewriter

My gallery   My freestuff


pjz99 ( ) posted Mon, 31 March 2008 at 9:51 PM

Neat stuff guys :)

My Freebies


lesbentley ( ) posted Mon, 31 March 2008 at 10:05 PM

Good one svdl!

One of my favourite uses for this trick is to make a pz2 that places the transform dials above the morph dials. Then place this code in a Pose Dot so it is always close to hand. I can't stand wading through 30 odd morph dials to get to the transforms!


lesbentley ( ) posted Mon, 31 March 2008 at 10:17 PM

Poses for Props.

An exercise  to try to improve understanding of  poses for props.
If you are the impatient type who does not like working through exercises, you might like to skip this post and go straight to the next one "Poses for Unparented Props".

If a prop is parented to a figure, saving a pose for the figure will also save the pose for the prop. Try this exercise. Load a figure, load a box prop, place the prop on the figures head, rotate the prop 45 degrees. Parent the box to the head. Save a pose for the figure, name it "A1". Save another pose, name it "A2", but this time use "Select Subset" to exclude everything from the pose except the box. Now save the figure as "BoxHead".

Pose the figure, now 'Restore' the box (with the box selected, Ctrl+E), the box should fall from the head. Now apply the A2 pose the the figure, the box should return to the head without affecting the rest of the figure. Restore the box again, now apply the A1 pose, this time both the figure and box should return to their original pose.

We have learned that in Poser we can save a pose for the figure plus its parented prop(s), or just save a partial pose for for the parented prop(s) without including the figure. If we wanted we could also have used "Select Subset" to save a pose for the figure that did not include the prop(s).

Now load the "BoxHead" figure in the same document (scene), select its Body actor and move it slightly to the side, out of the way of the first figure. Select the box on its head and do Ctrl+E. Now apply the A2 pose, nothing happens, why?

Poser will only allow one instance of a prop named "box_1" in the document. When we loaded the "BoxHead" figure Poser changed the name of the prop to "box_2", as our pose files refer to "box_1" they will not work on "box_2". We have found a limitation on poses for props that can cause a lot of trouble if we are not aware of it.

Delete the "BoxHead" figure. Select the box on the head of the original figure and do Ctrl+E. Now unparent the box (set the parent to 'UNIVERSE"). Apply either the A1 or A2 pose, nothing happens, why?

The type of prop pose we can make in Poser only works when the prop is parented to a figure!

We can modify the poses so that they work even if the prop is not parented to a figure. Open the A2.pz2 in a text editor. change the line "prop box_1:1" to read "actor box_1", resave the file. When we address the prop as "actor" the prop does not need to be parented to a figure for the pose to work. Note well though, that a figure must be present in the document for any pp2 file to work on anything.

Q: Is there no way to pose a prop, if there is no figure in the document?

A: We can pose a prop, even if there is no figure in the document, it's just that we can't use a pz2 file to do the posing. I will explain this along with some other things, in my next post "Poses for Unparented Props".


lesbentley ( ) posted Mon, 31 March 2008 at 11:54 PM

**Poses for Unparented Props.**I have called this post "Poses for Unparented Props", but the pose file in this post will also work on a parented prop, as will almost all poses constructed for unparented props.

As we saw in my last post, poses made in Poser won't work on props that are not parented to a figure.

If we want to pose unparented props we have to make a slight change from the syntax that Poser uses to save a pose. Instead of addressing "prop PropName_1", we need to address the prop as "actor", e.g. "actor PropName_1".

Below is an example of a pz2 that will pose an unparented prop named "ball_1" (the first instance loaded of a Poser Ball primitive). Remember there needs to be a figure in the document before this will work, even though the prop does not need to be parented to the figure.

Pose for an Unparented Ball Prop:

{

version
        {
        number 3
        }

actor ball_1
        {
        storageOffset 0 0.3487 0
        objFileGeom 0 0 :Runtime:Geometries:props:box.obj
        }

actor ball_1
        {
        channels
                {
                rotateY yrot
                        {
                        keys
                                {
                                k  0  45
                                }
                        }
                scale scale
                        {
                        keys
                                {
                                k  0  1.5
                                }
                        }
                }
        material Preview
                {
                KdColor 1 0 0 1 
                }
        }
}

The above pz2 file will make a number of changes to the Ball prop. First it will inject the Box geometry, turning the ball into a box, it will yRotate the prop 45º, it will scale the prop to 150%, and finally it will change the defuse color to red. - - - - - -

**Pose a prop when no figure in the scene.**Q: OK, we now know how to pose an unparented prop, but we still need a figure in the scene. Can we delete the figure and still be able to pose the prop?

A: We can pose a prop when there is no figure in the scene, we just can't use a pz2 file to do it, no pz2 file will work without a figure present.

To pose a prop without a figure present, we can save our pose file to a camera folder, and give it a cm2  file extension. Cm2 files to not need a figure present in order to work, most pose files for props (all the ones I have tried so far) will work from a camera folder if you give them a cm2 file extension. Try it, take the pose file above and save it as a cm2.

In my next post I will adress some uses of "actor $CURRENT" and give some more examples of poses that can be used on props.


lesbentley ( ) posted Tue, 01 April 2008 at 1:02 AM

Generic Pose files using "actor $CURRENT".- - - - - -

In P5 and up you can make a generic pz2 that will apply whatever settings it contains to the currently selected body part, prop, light, camera, magnet, or anything else you can think of. This is done by using the "actor $CURRENT" statement. This statement can only work on one actor at a time. Below is an example of using "actor $CURRENT" to change the Display Style of the currently selected actor to Outline Display Style: {

version
        {
        number 5
        }

actor $CURRENT
        {
        displayMode EDGESONLY
        }
}

The types of displayMode are:
EDGESONLY (Outline)
WIREFRAME (Wireframe)
HIDLINE (Hidden Line)
SHADEDOUTLINE (Lit Wireframe)
FLATSHADED (Flat Shaded)
FLATLINED (Flat Lined)
CARTOONNOLINE (Cartoon) SKETCHSHADED(Cartoon w/Line)
SHADED (Smooth Shaded)
SMOOTHLINED (Smooth Lined)
TEXTURESHADED (Texture Shaded)
USEPARENT (This is the default style)
"actor $CURRENT" is not limited to displayMode, you can use it with almost any type of pose, so long as you only need to affect one actor at a time.


A generic pose to scale the selected actor to 200%: {

version
        {
        number 5
        }

actor $CURRENT
        {
        channels
                {
                scale scale
                        {
                        keys
                                {
                                k  0  2
                                }
                        }
                }
        }
}

Make selected actor INVISIBLE: {

version
        {
        number 5
        }

actor $CURRENT
        {
        off
        }
}

The file to make the actor visible is exactly the same, except it uses "on" in place of "off" - - - - - -

Lock selected actor: {

version
        {
        number 5
        }

actor $CURRENT
        {
        locked 1
        }
}

The pz2 file to unlock actor is exactly the same, except it uses "locked 0" in place of "locked 1". - - - - - -

NOTES:
All the pose files above in this post can be used on figures or props, but remember that if you want to pose a prop when there is no figure in the scene you will have save the file to a camera folder and give it a cm2 file extension, the same goes if you want to apply it to a light or camera when there is no figure present. Remember "actor $CURRENT" only works in P5 or above, it will not work in P4.


EnglishBob ( ) posted Tue, 01 April 2008 at 6:12 AM
Online Now!

Saving this thread, thanks les. Very useful to have it all gathered together.


lesbentley ( ) posted Tue, 01 April 2008 at 5:34 PM

**Main Camera Fill Light.**Sometimes it can be handy to have a fill light parented to the main camera.

If you apply this file to a spotlight, it will place the light at the Main Camera (icon) and parent it to the camera. It will also set the colour of the light to white, the intensity to 15% (k 0 0.15), clear any nodes in the lights shaderTree.

{
//MainCamFill.cm2 or MainCamFill.pz2 or MainCamFill.mt5
//to work when no figure in scene, needs to be cm2 or mt5
version
        {
        number 5
        }

actor $CURRENT
        {
        on
        smartparent MAIN_CAMERA
        channels
                {
                kdRed RED
                        {
                        initValue 1
                        keys
                                {
                                k  0  1
                                }
                        }
                kdGreen GREEN
                        {
                        initValue 1
                        keys
                                {
                                k  0  1
                                }
                        }
                kdBlue BLUE
                        {
                        initValue 1
                        keys
                                {
                                k  0  1
                                }
                        }
                kdIntensity INTENSITY
                        {
                        initValue 0.15
                        keys
                                {
                                k  0  0.15
                                }
                        }
                shaderNodeParm Preview_Light_0_R
                        {
                        initValue 1
                        keys
                                {
                                k  0  1
                                }
                        }
                shaderNodeParm Preview_Light_0_G
                        {
                        initValue 1
                        keys
                                {
                                k  0  1
                                }
                        }
                shaderNodeParm Preview_Light_0_B
                        {
                        initValue 1
                        keys
                                {
                                k  0  1
                                }
                        }
                shaderNodeParm Preview_Light_1
                        {
                        initValue 0.15
                        keys
                                {
                                k  0  0.15
                                }
                        }
                rotateX xrot
                        {
                        initValue 0
                        keys
                                {
                                k  0  0
                                }
                        }
                rotateY yrot
                        {
                        initValue 0
                        keys
                                {
                                k  0  0
                                }
                        }
                rotateZ zrot
                        {
                        initValue 0
                        keys
                                {
                                k  0  0
                                }
                        }
                translateX xtran
                        {
                        initValue 0
                        keys
                                {
                                k  0  0
                                }
                        }
                translateY ytran
                        {
                        initValue 0
                        keys
                                {
                                k  0  0
                                }
                        }
                translateZ ztran
                        {
                        initValue 0.1
                        keys
                                {
                                k  0  0.1

                                }
                        }
                }
        material Preview
                {
                KdColor 1 1 1 1 
                KaColor 0 0 0 1 
                KsColor 1 1 1 1 
                TextureColor 1 1 1 1 
                shaderTree
                        {
                        }
                }
        }
figure
        {
        }
}

NOTES: Because this file uses "actor $CURRENT" it will only work in P5 or later versions.

'initValue' lines have been used in the channels. 'initValue' is the value that will be used when one of the 'Restore' commands from the Edit menu is used.

**Poser script provides a switch to turn a light on (or off) 'lightOn 1(0), however this switch will not work from a pose file where 'actor $CURRENT' is used to address the light. For this switch to work the light must be addressed by its name, eg "light spotLight 1".
**
In Poser script, comment lines start with "//" or "#", these lines will be ignored by Poser. It is good practice to include a comment line(s) under the opening brace of a pose file to explain which item it is meant to be applied to, and/or what it does.


manoloz ( ) posted Tue, 01 April 2008 at 7:34 PM

bookmarked

still hooked to real life and enjoying the siesta!
Visit my blog! :D
Visit my portfolio! :D


lesbentley ( ) posted Tue, 01 April 2008 at 8:32 PM

TIP:
The Poser interface has 9 Pose Dots. These Pose Dots use pz2 files, which are named "poseDot_1.pz2" through "poseDot_9.pz2" (if they are compressed, I think the file extension is "p2z"). You can place handmade poses in these these files if you wish. It is generally quicker to access a Dot than a file in a pose pallet. Just name the file "poseDot_[someNumber].pz2", and save it to the appropriate folder.

The location of the Dots can vary according to the Poser version, in P6 they live in:

RuntimedotsPoseRoom

If you can't find them in your version, use the Windows Search to find "poseDot_".


pitklad ( ) posted Tue, 01 April 2008 at 9:36 PM

Quote - TIP:
The Poser interface has 9 Pose Dots. These Pose Dots use pz2 files, which are named "poseDot_1.pz2" through "poseDot_9.pz2" (if they are compressed, I think the file extension is "p2z"). You can place handmade poses in these these files if you wish. It is generally quicker to access a Dot than a file in a pose pallet. Just name the file "poseDot_[someNumber].pz2", and save it to the appropriate folder.

The location of the Dots can vary according to the Poser version, in P6 they live in:

RuntimedotsPoseRoom

If you can't find them in your version, use the Windows Search to find "poseDot_".

Fantastic idea! Thanks for sharing!
Nice way to have utility poses handy!!!


My FreeStuff


Jules53757 ( ) posted Wed, 02 April 2008 at 1:33 AM

Bookmarked


Ulli


"Never argue with an idiot. They drag you down to their level and beat you with experience!"


vincebagna ( ) posted Wed, 02 April 2008 at 1:52 AM

bookmarked

My Store



nghayward ( ) posted Wed, 02 April 2008 at 1:56 AM
Online Now!

Quote - TIP:
The Poser interface has 9 Pose Dots. These Pose Dots use pz2 files, which are named "poseDot_1.pz2" through "poseDot_9.pz2" (if they are compressed, I think the file extension is "p2z"). You can place handmade poses in these these files if you wish. It is generally quicker to access a Dot than a file in a pose pallet. Just name the file "poseDot_[someNumber].pz2", and save it to the appropriate folder.

The location of the Dots can vary according to the Poser version, in P6 they live in:

RuntimedotsPoseRoom

If you can't find them in your version, use the Windows Search to find "poseDot_".

In Poser 7 they are in (For winxp)

?:Documents and SettingsApplication DataPoser 7dotsPoseRoom


semidieu ( ) posted Wed, 02 April 2008 at 5:43 AM

Bookmarked.

For the group pose file, don't forget that thy are not 'additive'. They will destrcut the previous grouping information


lesbentley ( ) posted Wed, 02 April 2008 at 1:46 PM

Thanks  semidieu,  that's a good tip!


Jean-Luc_Ajrarn ( ) posted Wed, 02 April 2008 at 2:59 PM

Thanks so much! :)


dlk30341 ( ) posted Wed, 02 April 2008 at 3:04 PM

Fabulous - bkmkd :)


lesbentley ( ) posted Wed, 02 April 2008 at 6:41 PM

**Injecting ERC slaving (part 1).**Pose files can be used to inject ERC slaving code into a figure, prop, light, camera, hair, or magnet.

Let's take a very simple example to start with. If you apply the pz2 file below to almost any figure, using the yTran dial on the BODY will cause the hip to rotate.

{
//UpTwist.pz2
//This slaves yrot in the hip to ytran in the BODY.
version
        {
        number 3
        }

actor hip
        {
        channels
                {
                rotateY yrot
                        {
                        valueOpDeltaAdd
                                Figure
                                BODY
                                ytran
                        deltaAddDelta 100.000000
                        }
                }
        }

figure
        {

        }
}

Let's have a closer look at this file. Most of it is just to define the hierarchy structure, so that Poser knows where to place the code. The interesting part is the slaving code: valueOpDeltaAdd [type of slaving]
Figure [Defines which figure has the master channel. In a cr2 "Figure" is followed by a number. Leave number out in a pz2]
BODY [the actor where the master channel lives. Leave out the ":#" in a pose file]
ytran [the name of the master channel]
deltaAddDelta 100.000000 [control ratio, how strongly the slave is to be affected by the master]

So the first line is the type of slaving, the second says which figure the master channel is in, the third says which actor to look in for the master channel, the fourth line is the name of the master channel (either internal, or dial name can be used), the fifth line is a control ratio that tells Poser how strongly to affect the channel.

It is beyond my scope here to give a full explanation of ERC (a.k.a. "EMC").

One point to note with ERC slaving. The position of the master channel in the parenting chain will determine whether or not the slave can "see" it. Slaves may have trouble seeing masters that are below them in the parenting chain. I think the situation with regard to this is better in P6 than earlier versions.

See the links below for more details of how ERC works.

http://www.rbtwhiz.com/rbtwhiz_ERC.html

http://www.nerd3d.com/modules.php?name=Content&pa=list_pages_categories&cid=1

http://www.atlantis23.com/erc_download.html

To be continued...


alizea ( ) posted Wed, 02 April 2008 at 11:38 PM

Fabulous stuff - thank you so much !

Alice's and GND4's Tailor !
Check my free clothing fits : www.alizea3d.com


lesbentley ( ) posted Fri, 04 April 2008 at 2:12 PM

**Injecting ERC slaving (part 2).

Squint eyes.**In my last post I showed how we can slave one channel to another. You will notice that is was not necessary to include the master channel in the pose file, it was sufficient to "point" to the master channel in the slaving code. Sometimes we may need to change things in the master channel as well. The next example is such a case.

The next example is a pz2 that can make V3 (or any figure that uses PBMCC_## channels) squint. The pz2 slaves the 'yrot' channels in both eyes to the 'PBMCC_16' channel in the head:

{

//V3_Squint.pz2
//For V3 and similar figures.
//Adds dials to the head to rotate both eyes at once.

version
    {
    number 3
    }

//The section below sets up the initial state of the master targetGeom channel in the head,
//note in particular the use of 'indexes 0' to clear any deltas from the channel.

actor head
    {
    channels
        {
        targetGeom PBMCC_16
            {
            name Eyes_Squint
            initValue 0
            hidden 0
            forceLimits 1
            min -5.5
            max 5.5
            trackingScale 0.02
            keys
                {
                static  0
                k  0  0
                }
            interpStyleLocked 0
            indexes 0
            }
        }
    }

//The section below is used to inject slaving code into the 'yrot' channel of the eyes.

actor leftEye
    {
    channels
        {
         rotateY yrot
            {
            valueOpDeltaAdd
                Figure
                head
                Eyes_Squint
            deltaAddDelta -10.000000
            }
        }
    }

actor rightEye
    {
    channels
        {
         rotateY yrot
            {
            valueOpDeltaAdd
                Figure
                head
                Eyes_Squint
            deltaAddDelta 10.000000
            }
        }
    }

figure
    {

    }
}

NOTES: If the head (rather than some other part) is selected when you apply the file, then the new dial may not show in the parameters pallet. Select some other body part, then reselect the head, this should cause the parameter pallet to refresh, and you will be able to see the new dial.

Let's take a closer look at this file. We are using 'targetGeom PBMCC_16' in the head as the master channel. First we give the dial a descriptive name "Eyes_Squint". We need to ensure that the value it will be Restored to is zero, and that it is not hidden from the parameters pallet, the next two lines take care of that. 'forceLimits 4' constrains the value of the channel to between the values in the 'min' and 'max' lines ('forceLimits 4' also works). The value of the 'trackingScale' at 0.02 is the default for a targetGeom channel that contains no deltas, and unlike in most other channel types it can not be changed. The last line in this channel is 'indexes 0' this deletes any morph deltas that may be in the channel, we don't want V3 turning into an alien as we squint her eyes (or perhaps sometimes we do).

The next section injects the slaving code into the 'yrot' channels of the eyes. We can slave the channels to either the internal name of the master 'PBMCC_16' or to its dial name 'Eyes_Squint', above I have used the dial name. This is normal practice when slaving to a targetGeom or valueParm channel. When we slave to the dial name the slaving can be broken because a pose file can inject a new dial name, being able to break the slaving can be useful in some situations. If we had slaved to the internal name, the slaving could not be broken by the application of a pose file.

Because we want the eyes to rotate in opposite directions, the deltaAddDelta value in the left eye is negative. When slaving a rotate channel to a targetGeom or valueParm channel you will usually need to use a deltaAddDelta value of around 10.0 or greater. With a deltaAddDelta value of 1.0 the eyes would rotate in such fine increments that the dial may appear not to be working.

There are a couple of potential problems with the above file that you should be aware of. First, because it uses a targetGeom (morph) channel, if you save a pose using the option to include morphs, the value of the master channel will be remembered in the pose, so applying a pose you saved, to the figure, has the potential to reset the value of this dial.This could be a good thing or a bad thing, depending on the circumstances and what you want. Also third party poses to inject morphs, may reset this channel, or even want to change its dial name and inject deltas into it. These problems are common to all pose files that use the DAZ PBMCC_## channels, not just our Squint pose.

From the above file it should be obvious that we are not limited to squinting the eyes, we can have master dials that make both eyes go side-side, and up-down, and translate two eyes from one dial. I will try to post more on that later, but for the time being why not see you can work out how to do it your self? One tip if you do, try a deltaAddDelta of around 0.001 as a starting point for the translate channels.

To be continued...


lesbentley ( ) posted Fri, 04 April 2008 at 8:27 PM

**TIP:**Grouping Dials.

With my last examples "V3_Squint.pz2", if you had the head selected when you applied the pose the "Eyes_Squint" dial should come in at the top of the parameters pallet, but as I said you may need to select another actor then reselect the head before you can see the dial. If some part other than the head was selected when the pose was applied, then the dial will in all likely hood not come in at the top of the parameters pallet, and you will have to hunt through the morph dials to find it. At least that's how it works for me in P6.

In P5 and up, you can assign your dials to a group. This will make them easier to find. To place the Eyes_Squint dial to a group, you can use the file below.

{
//SquintGroup.pz2
version
        {
        number 5
        }

actor head
        {
        channels
                {
                groups
                        {
                        groupNode Eyes_Move
                                {
                                parmNode PBMCC_16
                                }
                        }
                }
        }

figure
        {

        }
}

NOTES:
**Use the internal name of the channel, in the 'parmNode' line, NOT the dial name.**Once again, if the head is selected when you apply the pose you will have to select some other actor, then reselect the head before you will see the new group. The new group should come in at the top of the parameters pallet, no matter what actor was selected when you applied the pose.

With the above file we are creating the group after the fact, but we could have included the code to create the group in the original V3_Squint.pz2.

!!!IMPORTANT!!!
As mentioned by semidieu in an earlier post, if you inclide code to create a group in your pose, it will overwrite any groupuping that existed previously in that actor
, you will loose the old grouping. However Poser will always separate morphs and transforms into separate groups (unless this is overridden by the application of grouping code).

Remember grouping dials only works in P5 or above.


svdl ( ) posted Fri, 04 April 2008 at 9:49 PM

Joints are channels, so you can set joint parameters, including spherical falloff zones, using a pose file.

The pen is mightier than the sword. But if you literally want to have some impact, use a typewriter

My gallery   My freestuff


lesbentley ( ) posted Fri, 04 April 2008 at 9:50 PM

**Injecting ERC slaving (part 3).**V3_EyesBoth.pz2

This is a more complex file, only because it contains more channels, but the structure and function of the pz2 below are much the same as the "V3_Squint.pz2". The only significant differences are that it places the master dials in a group, and contains more master and slave channels.

The file contains channels to move the eyes Side-Side, Up-Down, and also to translate the eyes.

{
//V3_EyesBoth.pz2
//For V3 and similar figures.
//Adds dials to the head to move both eyes at once.
version
        {
        number 3
        }

//The section below sets up the initial state of the master targetGeom channels in the head,
//note in particular the use of 'indexes 0' to clear any deltas from the channels.

actor head
        {
        channels
                {
                groups
                        {
                        groupNode Eyes_Move
                                {
                                parmNode PBMCC_11
                                parmNode PBMCC_12
                                parmNode PBMCC_13
                                parmNode PBMCC_14
                                parmNode PBMCC_15
                                }
                        }
                targetGeom PBMCC_11
                        {
                        name Eyes_Side-Side
                        initValue 0
                        hidden 0
                        forceLimits 1
                        min -5.500
                        max 5.500
                        trackingScale 0.02
                        keys
                                {
                                static  0
                                k  0  0
                                }
                        interpStyleLocked 0
                        indexes 0
                        }
                targetGeom PBMCC_12
                        {
                        name Eyes_Up-Down
                        initValue 0
                        hidden 0
                        forceLimits 1
                        min -3.300
                        max 3.300
                        trackingScale 0.02
                        keys
                                {
                                static  0
                                k  0  0
                                }
                        interpStyleLocked 0
                        indexes 0
                        }
                targetGeom PBMCC_13
                        {
                        name Eyes_xTran
                        initValue 0
                        hidden 0
                        forceLimits 0
                        min -10000
                        max 10000
                        trackingScale 0.02
                        keys
                                {
                                static  0
                                k  0  0
                                }
                        interpStyleLocked 0
                        indexes 0
                        }
                targetGeom PBMCC_14
                        {
                        name Eyes_yTran
                        initValue 0
                        hidden 0
                        forceLimits 0
                        min -10000
                        max 10000
                        trackingScale 0.02
                        keys
                                {
                                static  0
                                k  0  0
                                }
                        interpStyleLocked 0
                        indexes 0
                        }
                targetGeom PBMCC_15
                        {
                        name Eyes_zTran
                        initValue 0
                        hidden 0
                        forceLimits 0
                        min -10000
                        max 10000
                        trackingScale 0.02
                        keys
                                {
                                static  0
                                k  0  0
                                }
                        interpStyleLocked 0
                        indexes 0
                        }
                }
        }

//The section below is used to inject slaving code into the eyes.

actor leftEye
        {
        channels
                {
                rotateY yrot
                        {
                        valueOpDeltaAdd
                                Figure
                                head
                                PBMCC_11
                        deltaAddDelta 10.000000
                        }
                rotateX xrot
                        {
                        valueOpDeltaAdd
                                Figure
                                head
                                PBMCC_12
                        deltaAddDelta 10.000000
                        }
                translateX xtran
                        {
                        valueOpDeltaAdd
                                Figure
                                head
                                Eyes_xTran
                        deltaAddDelta 0.0010000
                        }
                translateY ytran
                        {
                        valueOpDeltaAdd
                                Figure
                                head
                                Eyes_yTran
                        deltaAddDelta 0.0010000
                        }
                translateZ ztran
                        {
                        valueOpDeltaAdd
                                Figure
                                head
                                Eyes_zTran
                        deltaAddDelta 0.0010000
                        }
                }
        }

actor rightEye
        {
        channels
                {
                rotateY yrot
                        {
                        valueOpDeltaAdd
                                Figure
                                head
                                PBMCC_11
                        deltaAddDelta 10.000000
                        }
                rotateX xrot
                        {
                        valueOpDeltaAdd
                                Figure
                                head
                                PBMCC_12
                        deltaAddDelta 10.000000
                        }
                translateX xtran
                        {
                        valueOpDeltaAdd
                                Figure
                                head
                                Eyes_xTran
                        deltaAddDelta -0.0010000
                        }
                translateY ytran
                        {
                        valueOpDeltaAdd
                                Figure
                                head
                                Eyes_yTran
                        deltaAddDelta 0.0010000
                        }
                translateZ ztran
                        {
                        valueOpDeltaAdd
                                Figure
                                head
                                Eyes_zTran
                        deltaAddDelta 0.0010000
                        }
                }
        }
//below is the figure section.
figure
        {

        }
}

NOTES:
All the notes that applied to the "V3_Squint.pz2" and the previous tip on grouping dials, also apply the this file. Note that the 'deltaAddDelta' for the translate channels is a relatively small number '0.0010000', there are two reasons for this. First, a translate channel slaved to a targetGeom (morph) or valueParm (FBM) channel inherently tends to need a smaller 'deltaAddDelta' value than a rotate channel in the same situation. Secondly, because we are moving a small object, the eye, relative to a thin object, the eyelid, we need small increments to get the exact fit. If we were trying to move a car along a road, a much bigger value for 'deltaAddDelta' might be appropriate.

Note that I have forced limits on the master rotate channels, but not on the translate channels. I know that exceeding the limits I have set for the rotations would be silly, so I forced limits for these channels, I don't know how far someone might want to translate the eyes, so I left the limits unforced.

Although this file is called V3EyesBoth.pz2, it should work on just about any figure that uses the PBMCC## channel names.

To be continued...


lesbentley ( ) posted Fri, 04 April 2008 at 9:55 PM · edited Fri, 04 April 2008 at 10:03 PM

Have I managed to confuse you all yet?

**Any questions on what has been covered so far?

**@ svdl,
Thanks for the tip on Joint Parameters.


svdl ( ) posted Fri, 04 April 2008 at 9:55 PM

You can use a pose file to run a Python script:

{
    version
    {
        number 6
    }

    runPythonScript ":runtime:path🇹🇴script.py"
}

And you can combine this with all other pz2 tricks.

The pen is mightier than the sword. But if you literally want to have some impact, use a typewriter

My gallery   My freestuff


lesbentley ( ) posted Fri, 04 April 2008 at 10:42 PM · edited Fri, 04 April 2008 at 10:47 PM

Attached Link: Saving Partial Poses (Tutorial)

** TIP:**

Arcadia has a great tutorial on saving partial poses. Check out the link above.

@ svdl,
Thanks for the tip on calling py scripts from a pose file.


lesbentley ( ) posted Sat, 05 April 2008 at 11:46 AM

file_403549.TXT

**Injecting ERC slaving (part 4).**

P4_EyesBoth.pz2

The text of this file has been attached above. Save it to a pose folder as "P4_EyesBoth.pz2". That is to say, delete the ".TXT" part of the file extension.

We have seen how we can inject ERC slaving code to move the eyes, into figures that use the DAZ PBMCC_## channels, but we don't necessarily need the PBMCC_## channels, nor do the master channels necessarily need to be in the head. So long as we can find some targetGeom or valueParm channels to subvert to our purposes we can implement the same type of thing.

The file attached above is almost exactly the same as the "V3_EyesBoth.pz2", except it uses targetGeom channels in the head of the P4 Nude Man and Woman. Of course the morphs in these channels will no longer be available. The channels I have used as master channels are:
RoundFace
LongFace
FlatFace
HeartFace
SquareFace

As mentioned previously 'indexes 0' is used to delete the deltas from the channels.


svdl ( ) posted Sat, 05 April 2008 at 12:04 PM

You can even create the master channels using a Pose file. Either using a Python script, or from the pose file itself:

{
    version
    {
        number 6
    }

    createFullBodyMorph EyesSideSide

    actor leftEye
    {
        channels
        {
            rotateY yRot
            {
                valueOpDeltaAdd
                Figure
                BODY
                EyesSideSide
                deltaAddDelta 90.000
            }
        }
    }
    actor rightEye
    {
        channels
        {
            rotateY yRot
            {
                valueOpDeltaAdd
                Figure
                BODY
                EyesSideSide
                deltaAddDelta 90.000
            }
        }
    }
}

                

   

The pen is mightier than the sword. But if you literally want to have some impact, use a typewriter

My gallery   My freestuff


lesbentley ( ) posted Sat, 05 April 2008 at 1:37 PM · edited Sat, 05 April 2008 at 1:47 PM

file_403553.TXT

** Injecting ERC slaving (part 5).****createFullBodyMorph**

(I wrote this before seeing svdl's post above, that post furnishes a nice simple example of using 'createFullBodyMorph'. thanks svdl)

In "Injecting ERC slaving (part 2)" I mentioned some potential problems we may run into with the files we have been using to move the eyes. Essentially these boil down to the fact that other poses may try to use the same channels we have used as master channels. It would be nice if we could create new master channels dedicated to our own use. If you have P6 or later you can.

P6 introduced a new statement into Poser Script 'createFullBodyMorph', this statement can create new 'valueParm' (FBM) channels in the BODY actor. For example:

version
        {
        number 6
        }

    createFullBodyMorph Eyes_Side-Side
    createFullBodyMorph Eyes_Up-Down

figure
        {
        }
}

The above file will create two new channels in the BODY, "valueParm Eyes_Side-Side" and "valueParm Eyes_Up-Down". Attached at the top of this post is a pz2 file that uses 'createFullBodyMorph' in yet another file to move the eyes.

Not only does this file overcome the potential problems with our other eye move poses, it can also be used on almost any figure, the only requirement is that the figure uses standard actor names for the eyes and BODY, and standard channel names in the eyes. Another nice thing about using 'createFullBodyMorph' is that forces a refresh of the parameters pallet.

The down sides are that it will only work in P6 or above, and it creates the master channels in the BODY, which is not as convenient as the head when it comes to moving the eyes.

If you inspect the file you will notice that there is less code to initialize the master channels. Because these are new channels, that we created, we can be confident that they have the default initial values, so we only need to set those values that we wish to be different from the defaults.

Because the channel type is valueParm, rather than targetGeom, I was able to change the 'trackingScale' in the master channels. This allowed me to use different 'deltaAddDelta' values in the slave channels. You should always consider the trackingScale of the master, and the deltaAddDelta of the slave in conjunction.

I feel that if you have P6, then this is the best of the eye move files, because it is more universal in what figures it can work on, and solves potential problems that the others had.

Poser 6 also introduced PMD files. There is a tutorial on "Poser 6 PMD Injection" at Nerd3D:
http://www.nerd3d.com/modules.php?name=Content&pa=showpage&pid=13


JHoagland ( ) posted Sat, 05 April 2008 at 6:02 PM

If it hasn't been said before, it is very important to keep the proper case. "actor hip" is not the same as "Actor hip" or even "actor Hip". If you have the wrong case, will the pose work? Maybe or maybe not.
If it doesn't work, you'll be pulling your hair out wondering what you did wrong.


VanishingPoint... Advanced 3D Modeling Solutions


lesbentley ( ) posted Sat, 05 April 2008 at 9:10 PM

Good tip JHoagland!

Another common fault is none matching braces. Each opening brace "{" needs to have a matching closing brace "}". Its easy to slip up and leave a brace out, or add an extra one by mistake. If your pose file does not work, two of the first things to look for are none matching braces and wrong case.

I hope to add a few posts on Delta Injection soon, I'm a bit busy at the moment, so it may take me a few days to get started.


Diogenes ( ) posted Sun, 06 April 2008 at 4:45 PM

Wow! cool. Didn't even know you could do that.


A HOMELAND FOR POSER FINALLY


lesbentley ( ) posted Mon, 07 April 2008 at 7:32 PM · edited Mon, 07 April 2008 at 7:37 PM

Delta Injection (Part 1).

Introduction.

Delta injection is a method of injecting morph targets into a figure from a pose file. The technique seems to have been discovered by Drax back in 2004, below is a link to the thread that started it all, and eventually lead to V3 and all her ilk.

http://www.renderosity.com/mod/forumpro/showthread.php?message_id=394884

An important thing to understand is that delta injection can't create new targetGeom channels, it can only inject morphs into channels that already exist in the figure* (see note at bottom of post).

There are many different ways to proceed in making a Delta Injection Pose (here after referred to as a "DIP"), but  most methods involve copying the morph channel (or a subset of the channel) out of a cr2 and pasting it into a pz2 template. In other words a DIP is, in essence, just a targetGeom channel packaged as a pz2.

There are also some methods that involve converting a morphed version of the full base OBJ file into deltas, eg "Pozers Little Helper" available at:

http://home.online.no/~kjellil/Index-AllStuff.htm

*NOTE: Whilst a pose file can't itself create a new targetGeom channel, in P5 and up a pose file can call a Python script that will add a new targetGeom channel, and in P6, PMD files, which can also add channels, can be called from a pose file.

To be continued...


svdl ( ) posted Mon, 07 April 2008 at 10:37 PM

There is no way to DELETE a targetGeom channel, other than editing the .cr2. But valueParms can be deleted from a loaded figure/prop in Poser, using PoserPython.

The pen is mightier than the sword. But if you literally want to have some impact, use a typewriter

My gallery   My freestuff


byAnton ( ) posted Mon, 07 April 2008 at 11:10 PM

In Poser 6 and 7, you see a small black arrow next to each morph dial. There is an option to delete the morphs.

-Anton, creator of Apollo Maximus
"Conviction without truth is denial; Denial in the face of truth is concealment."


Over 100,000 Downloads....


byAnton ( ) posted Mon, 07 April 2008 at 11:14 PM

BTW: I don't know if this is still true. But at one time an entire scene file could be loaded through the library if renamed from pz3 to pz2.  In Poser 4, you can load background images, etc via a pose file. At that time a pose file will support most anything in a pz3. Not sure if the same is still true.

-Anton, creator of Apollo Maximus
"Conviction without truth is denial; Denial in the face of truth is concealment."


Over 100,000 Downloads....


byAnton ( ) posted Mon, 07 April 2008 at 11:19 PM

Yes a scene can still be loaded via the library in Poser6. You just have to have any figure in the scene first before clicking the pose.

-Anton, creator of Apollo Maximus
"Conviction without truth is denial; Denial in the face of truth is concealment."


Over 100,000 Downloads....


svdl ( ) posted Mon, 07 April 2008 at 11:20 PM

Quote - In Poser 6 and 7, you see a small black arrow next to each morph dial. There is an option to delete the morphs.

True. But that's only possible in the user interface, you can't do it with Python or a pose file.

The pen is mightier than the sword. But if you literally want to have some impact, use a typewriter

My gallery   My freestuff


svdl ( ) posted Mon, 07 April 2008 at 11:31 PM

If you rename a scene to .cr2, you can load it into a completely blank Poser scene.

The pen is mightier than the sword. But if you literally want to have some impact, use a typewriter

My gallery   My freestuff


byAnton ( ) posted Tue, 08 April 2008 at 12:48 AM · edited Tue, 08 April 2008 at 12:50 AM

Ah yes. That is what I meant. Your right. But hey .. lol. it does turn out the pz2 can hold the data too. Likely why the cr2 info is compatible in pz2. Makes sense. All derivatives of the pz3.  I used to have lists somewhere. The mind is a fragile thing. :) Great to have all this in one spot. :)

-Anton, creator of Apollo Maximus
"Conviction without truth is denial; Denial in the face of truth is concealment."


Over 100,000 Downloads....


lesbentley ( ) posted Tue, 08 April 2008 at 8:02 AM · edited Tue, 08 April 2008 at 8:04 AM

Another way to delete a targetGeom channel in the interface is to select the channel in the Hierarchy Editor then hit the keyboard Delete key. This woks from at least P4 up.

You can use a whole pz3 in a pz2 or cr2, but if you load it into an existing scene it may have bad effects on the lights, if lights with the same name exist in both scene and pz3. I would sugest deleting the lights either from the scene or from the pz3 first.


lesbentley ( ) posted Tue, 08 April 2008 at 8:19 AM

file_403774.jpg

** Delta Injection (Part 2).****Let's make a simple DIP.**

In this post we will make a custom morph target to use in our delta injection pose.

You will need to have "Use file compression" and "Use external binary morph targets" turned off in your Gneral Preferences.

I'm going to use Posette (P4 Nude Woman) in this example. In Poser, load the 'P4 Nude Woman'(you could use a diffrent figure). Select her head and create a magnet. zTran the Mag by about 0.5. Scale down the Mag Zone to its minimum size (0.1). Move the Mag Zone (by its paramiter dials) untill it just brushes the tip if the nose, try to catch just one vertex so it is pulled out to make a point. The nose should now look something like the picture above.

From the menu bar, Object menu, select 'Spawn Morph Target', name the morph "Point Nose". Delete the magnet. Set the "Point Nose" dial to 1.0 (if this was going to be part of an FBM we would leave the dial at zero). Save the figure back to a Figures pallet as "Z" (for example).


NOTES: We have only moved one vertex in order to keep the file size down in this example, and so that you can see what a delta line to move one vertex looks like. In some later examples we will use a cr2 editor to make the process of working with large files easier, but for now we will use a text editor. When rendered in P6 or above the point on the nose may change shape in an unexpected way. This is caused by 'Smooth polygons' turn this feature off in the head's Properties to see the true shape.


We now have our custom morph. The next step is to make a pz2 template to house the morph. To be continued...


lesbentley ( ) posted Tue, 08 April 2008 at 12:02 PM · edited Tue, 08 April 2008 at 12:06 PM

file_403784.TXT

** Delta Injection (Part 3).**

Making the template & inserting the targetGeom.

Here is a basic template that can be used as a starting point for any pose file, except that the version number may have to be changed depending on what features the pose needs to support. The function of the version number is to generate an error message if the file version is later than the version of Poser trying to open it. I'm not aware that the version number has any other effect, but I may be wrong. The 'figure' block may not be needed, but it does no harm. { //[comment can go here] version { number 3 }

figure
        {

        }
}

You may like to save the above to disk so you don't have to type it out every time you make a pose file. Next we need to add a block of code for each actor that is going to have a morph injected (in this case just one). Each 'actor' block must also contain a 'channels' block. Below, the Green code is the basic template, the actor block is in White, and the channels block is in Red.

<span style="color:rgb(0,255,0);">{<br></br>//<br></br>version<br></br>  {<br></br> number 3<br></br>  }</span>

<span style="color:rgb(255,255,255);">actor head<br></br>       {</span>
        
        <span style="color:rgb(255,255,255);">}</span>

<span style="color:rgb(0,255,0);">figure<br></br>       {<br></br><br></br>   }<br></br>}</span>

NOTES:
You might like to make a template that contains all the actor blocks for your figure, with a channels block in each. This is handy if you are going to make pose files that affect a lot of actors. You can delete the unused actors later.


**Next we will put the targetGeom channel in the template.**In a new text editor window, open the "Z.cr2" created as per my last post. Use the editors Search (Find) function to find the string "targetGeom Point Nose". Copy everything, from this selected line down to the closing brace of the channel, just above where the next channel starts, and paste it into the place indicated in the template above. Here is what the code you are pasting should look like (there may be a few more or less lines of code depending on your Poser version):

                targetGeom <span style="color:rgb(255,0,0);">Point Nose</span>
                        {
                        name Point Nose
                        initValue 0
                        hidden 0
                        forceLimits 1
                        min -100000
                        max 100000
                        trackingScale 0.02
                        keys
                                {
                                static  0
                                k  0  0
                                }
                        interpStyleLocked 0
                        indexes 1
                        numbDeltas 3470
                        deltas 
                                { 
                                d 1514 -5.277533e-006 -0.001445413 0.03142137 
                                } 
                        blendType 0
                        }

We need to make one edit to the code we pasted. You will remember that we can only inject into a channel that exists in the cr2. The original Posette cr2 contains no channel named "Point Nose", so we need to edit the internal name (in red above) to something that does exist in Posette, for example "RoundFace". Change the first line of the code we pasted to read: "targetGeom RoundFace"

We can leave the 'name' line as "Point Nose", this is the name that will be displayed above the dial in the paramiters pallet.

The complete text of the finished DIP is in the attachment at the top of this post.

Save the file with a descriptive name (eg "P4 PointNose.pz2") to a pose folder. In Poser, Test on Posette to make sure it works.


NOTES:
If you want you can set of 'min, and 'max' limits for the channel (I usually don't): forceLimits 1 min 0 max 1

Personally I usually paste the whole channel then just save the pz2 and use that. Previous pose files, or user actions may have changed some of the values. I like to be sure all the paramiters are set the way I want them. DAZ use a more minimilist aproach, a DAZ injection the channel would be cut down to this: targetGeom RoundFace { name Point Nose interpStyleLocked 0 indexes 1 numbDeltas 3470 deltas { d 1514 -5.277533e-006 -0.001445413 0.03142137 } }

DAZ use a seperate Unhide pose to make sure the channel is not hidden. Im not sure why DAZ use an Unhide pose, as soon as Poser "sees" deltas in a a hidden channel (eg deltas are injected into the channel), it will unhide the channel, changing its flag to 'hidden 0'. So the DAZ Unhide poses look like a waste of space to me! Usually both the pz2s to inject the deltas and the pz2s to unhide the channels are "called" from another pz2 via 'readScript' (I will try to say something about readScript later). The absolute minimum you could use to inject deltas would be this:

                targetGeom SomeName
                        {
                        deltas 
                                {
                                [delta lines here]
                                }
                        }

Next we will look at Delta injection in conjunction with FBMs. To be continued...


Jules53757 ( ) posted Tue, 08 April 2008 at 12:14 PM

IMO the unhide pose came with P6. Before a not existing hidden statement was interpreted as hidden 0. With P6 it is interpreted as hidden 1 so, may be DAZ wants to make sure that there is a hidden statement.


Ulli


"Never argue with an idiot. They drag you down to their level and beat you with experience!"


lesbentley ( ) posted Tue, 08 April 2008 at 12:56 PM · edited Tue, 08 April 2008 at 12:58 PM

CORRECTION

I said that the DAZ Unhide poses looked like a waist of space. I was wrong. It can be very usefull to be able to hide some dials in order to more easily see the ones you want to use. As dials can be hidden by a Pose, you need another pose to unhide them. I just don't see why you need to call a seperate Unhide pose when you inject the morph! If you want you can use 'hidden 0' in the delata injection pose (I usually do), but even without the 'hidden 0', injecting deltas should unhide the pose in all Poser versions to date.


lesbentley ( ) posted Wed, 09 April 2008 at 4:54 PM

Attached Link: A head rotation question

** Injecting an IK chain.**

By way of an aside, whilst I am trying to work up the energy for the next instalment on delta injection. Did you know that you can use a pose file to inject IK chains. See the link above. Also at the same link is an example of using a pose file to move the 'endPoint' of the head, for better compatibility with 'Point At'.


Privacy Notice

This site uses cookies to deliver the best experience. Our own cookies make user accounts and other features possible. Third-party cookies are used to display relevant ads and to analyze how Renderosity is used. By using our site, you acknowledge that you have read and understood our Terms of Service, including our Cookie Policy and our Privacy Policy.