Each time you use the POV-Person macro in your POVRay scene file you use a selection of the POV-Person library files to build a character. The character is defined by optionally setting control variables and by specifying control files on the POV-Person macro call. The POV-Person macro uses this information to build a character that you can use inline within your POVRay scene, or that you can assign to a named object that you can use later in your scene.
The models supplied with POV-Person V2 are all based upon a single anatomical definition. This definition is known as pphuman001 and describes how body parts are assembled into a human-like form. It defines the names of body parts and the relationship between their joints. The various models that use this anatomical definition describe the individual body parts and the relative scaling to use to assemble a particular character.
The following models are supplied with POV-Person:
Model | Description | Characters |
f1 | Female model with rigid face mesh. | The ppann.inc character uses this model. |
f2 | Female model. Mostly rigid face mesh with dynamic eyelids and lips. | The ppbabs.inc character uses this model. |
m1 | Male model with rigid face mesh. | The ppalf.inc character uses this model. |
m2 | Male model with rigid face mesh. | The ppbill.inc character uses this model. |
r1 | Randomly selected and scaled body parts. Randomly selected face mesh. | The pprandy.inc character uses this model. |
s1 | Stickman model using cylinders and spheres. | The pprod.inc character uses this model. |
To create a new character file it is recommended that you copy an existing file and tailor it. Remember not to use the 'pp' prefix for your own character file so as to avoid conflicts with future versions of POV-Person.
The first part of a character file defines the model prefix (ppf1), character template (pphuman001) and gender (female)to use.
The remainder of a character file specifies attributes of the character, such as:
Declaration | Description | Possible values |
#declare ppSkinDarkness=1.2; | The darkness of the skin colour | 0.7 to 8 1 is default, 2 is more dark |
#declare ppSkinRedness=1.1; | A factor to control the amount of redness in the skin colour | 0.9 to 2 1 is not very red, 1.5 is redder |
#declare ppSkinNoiseGenerator=3; | Which of POV-Rays noise generators to use | 1-3. See noise_generator in the POV-Ray Help |
#declare ppEyeColour = 3; | Base colour for eye | 1=Blue, 2=Brown, 3=Green |
#declare ppEyeBrightness = 1.5; | A factor to control the brightness of the eye colour | 0.5 = Dark, 1.5 = Bright |
#declare ppEyePupil = 1; | A factor to control the dilation of the pupil | 1.35 = dilated (big black bit), 0.35 = constricted (small black bit) |
#declare ppEyePosition = <13.2, 80.6, -3.5>; | Position of the eyes relative to the face mesh | This needs to match the model as defined by the model prefix |
#declare ppChestSize = 1.2; | A factor to control the chest muscle size | 0.5 for men, 0.8 to 1.2 for women |
#declare ppBreastSize = 1; | A factor to control the breast size | 0.5 for men, 0.8 to 1.2 for women |
For male characters it is customary to include such things as hair colour in the character file, whereas such things are conventionaly recorded in the style file for female characters.
There are two main ways of controlling the direction of the eyes. You can explicitly specify rotations or you can specify a point for the figure to look at.
To specify the eye rotations use the ppLeftEyeRotation and the ppRightEyeRotation control variables. For example:
tells POV-Person to rotate each eye 5 degrees to the right and 15 degrees downwards. For an explanation of the sequence of rotations, see the joint definitions in the table in the section below on 'Poses'.
To specify a point in space for the figure to look at, use the ppLookAt control variable. Note however that this position is relative to the position in which the figure is defined and does not, by default, take account of any transformations you apply to the figure after it has been defined. In order to alleviate the difficulty of calculating the coordinates of the point to look at, when you plan to subsequently transform the figure, POV-Person allows you to declare the ppTransformFigure transform and, if declared, will take this into account when calculating the rotations of the eyes. POV-Person only uses this transform for the eye rotations and not for positioning the figure. You are left to apply the transform to the figure. For example:
declares a point in space for the figure to look at. The use of ppTransformFigure tells POV-Person about the transformation that is going to be applied to the figure after it has been defined. So, if in this example you also use the point <0,2,-5> for the camera location, the figure will be looking straight at the camera, irrespective of the tranformations you put into ppTransformFigure.
You can use the ppLookAt control variable in conjunction with the ppLeftEyeRotation and the ppRightEyeRotation control variables. In this case the point specified using ppLookAt is evaluated first, then the rotations specified are applied to each eye. For example, you could use the ppLookAt control variable to identify the camera position and the following eye rotations to force the eyes to look slightly down from that camera position.
The 'f2' model allows you to open and close the eyelids. The following control variables set the upper eye lids to be raised by 10 degrees and the lower eyelids to be lowered by 15 degrees.
The default pose for the pphuman001 model is - standing upright at the origin facing out along the positive z axis. The arms are down by the side of the figure with the palms facing in towards the body. To pose the figure it can help to imagine yourself standing behind the figure and mapping your body positions onto it.
To pose a figure you rotate the various joints using the ppRotateJoint macro, which takes a joint reference and 3 rotations as parameters. Important. The joint rotations are relative to the body parts on either side of the joint and not to any absolute position. There are some general rules that it is helpful to bear in mind when defining and posing figures:
Joint reference | Axes | Twist | Principal Rotation | Rotation 3 | Notes |
ppUpperNeckJointRef | y, x, z | Turn head to right | Bow head forward | Tilt head to left | |
ppLowerNeckJointRef | y, x, z | Turn head to right | Bow head forward | Tilt head to left | |
ppChestAbdomenJointRef | y, x, z | Turn chest to right | Tilt chest forward | Tilt chest to left | |
ppAbdomenHipJointRef | y, x, z | Turn abdomen to right | Bow abdomen forward | Tilt abdomen to left | |
ppLeftShoulderBladeJointRef | y,-x,-z | Turn shoulder blade clockwise | Tilt shoulder blade back | Rotate shoulder blade in towards neck | (Consider revising) |
ppLeftShoulderJointRef | y,-x,-z | Twist arm clockwise | Swing arm forward | Lift arm | |
ppLeftElbowJointRef | y,-x,-z | Turn lower arm clockwise | Bend lower arm upward | Not normally used | |
ppLeftWristJointRef | y, z,-x | Twist hand clockwise | Bend wrist forward | Swivel towards thumb | |
ppLeftThumbBaseJointRef | y, z,-x | Twist thumb clockwise | Open thumb perpendicular | Open thumb lateral | |
ppLeftThumbMiddleJointRef | y, z,-x | Not normally used | Clench thumb | Not normally used | |
ppLeftThumbTipJointRef | y, z,-x | Not normally used | Clench tip of thumb | Not normally used | |
ppLeftFirstFingerBaseJointRef | y, z,-x | Twist clockwise (used sparingly) | Bend forward | Swivel towards thumb | |
ppLeftFirstFingerMiddleJointRef | y, z,-x | Not normally used | Clench finger | Not normally used | |
ppLeftFirstFingerTipJointRef | y, z,-x | Not normally used | Clench finger tip | Not normally used | |
ppLeftMiddleFingerBaseJointRef | y, z,-x | Twist clockwise (used sparingly) | Bend forward | Swivel towards thumb | |
ppLeftMiddleFingerMiddleJointRef | y, z,-x | Not normally used | Clench finger | Not normally used | |
ppLeftMiddleFingerTipJointRef | y, z,-x | Not normally used | Clench finger tip | Not normally used | |
ppLeftThirdFingerBaseJointRef | y, z,-x | Twist clockwise (used sparingly) | Bend forward | Swivel towards thumb | |
ppLeftThirdFingerMiddleJointRef | y, z,-x | Not normally used | Clench finger | Not normally used | |
ppLeftThirdFingerTipJointRef | y, z,-x | Not normally used | Clench finger tip | Not normally used | |
ppLeftLittleFingerBaseJointRef | y, z,-x | Twist clockwise (used sparingly) | Bend forward | Swivel towards thumb | |
ppLeftLittleFingerMiddleJointRef | y, z,-x | Not normally used | Clench finger | Not normally used | |
ppLeftLittleFingerTipJointRef | y, z,-x | Not normally used | Clench finger tip | Not normally used | |
ppLeftThumbNailJointRef | y, x, z | Not normally used | Not normally used | Not normally used | Optional |
ppLeftFirstFingerNailJointRef | y, x, z | Not normally used | Not normally used | Not normally used | Optional |
ppLeftMiddleFingerNailJointRef | y, x, z | Not normally used | Not normally used | Not normally used | Optional |
ppLeftThirdFingerNailJointRef | y, x, z | Not normally used | Not normally used | Not normally used | Optional |
ppLeftLittleFingerNailJointRef | y, x, z | Not normally used | Not normally used | Not normally used | Optional |
ppLeftHipJointRef | y,-x, z | Twist leg clockwise | Lift leg | Turn leg in towards right leg | |
ppLeftKneeJointRef | y, x, z | Twist calf clockwise | Bend knee | Not normally used | |
ppLeftAnkleJointRef | y, x, z | Twist foot clockwise | Point foot downwards | Tilt foot onto outer edge | |
ppLeftBigToeBaseJointRef | z, x, y | Twist toe anticlockwise | Bend toe downwards | Turn away from other toes | |
ppLeftBigToeTipJointRef | z, x, y | Not normally used | Bend tip downwards | Not normally used | |
ppLeftFirstToeBaseJointRef | z, x, y | Twist toe anticlockwise | Bend toe downwards | Turn towards big toe | |
ppLeftFirstToeMiddleJointRef | z, x, y | Not normally used | Clench toe | Not normally used | |
ppLeftFirstToeTipJointRef | z, x, y | Not normally used | Bend tip downwards | Not normally used | |
ppLeftMiddleToeBaseJointRef | z, x, y | Twist toe anticlockwise | Bend toe downwards | Turn towards big toe | |
ppLeftMiddleToeMiddleJointRef | z, x, y | Not normally used | Clench toe | Not normally used | |
ppLeftMiddleToeTipJointRef | z, x, y | Not normally used | Bend tip downwards | Not normally used | |
ppLeftThirdToeBaseJointRef | z, x, y | Twist toe anticlockwise | Bend toe downwards | Turn towards big toe | |
ppLeftThirdToeMiddleJointRef | z, x, y | Not normally used | Clench toe | Not normally used | |
ppLeftThirdToeTipJointRef | z, x, y | Not normally used | Bend tip downwards | Not normally used | |
ppLeftLittleToeBaseJointRef | z, x, y | Twist toe anticlockwise | Bend toe downwards | Turn towards big toe | |
ppLeftLittleToeMiddleJointRef | z, x, y | Not normally used | Clench toe | Not normally used | |
ppLeftLittleToeTipJointRef | z, x, y | Not normally used | Bend tip downwards | Not normally used | |
ppLeftBigToeNailJointRef | y, x, z | Not normally used | Not normally used | Not normally used | Optional |
ppLeftFirstToeNailJointRef | y, x, z | Not normally used | Not normally used | Not normally used | Optional |
ppLeftMiddleToeNailJointRef | y, x, z | Not normally used | Not normally used | Not normally used | Optional |
ppLeftThirdToeNailJointRef | y, x, z | Not normally used | Not normally used | Not normally used | Optional |
ppLeftLittleToeNailJointRef | y, x, z | Not normally used | Not normally used | Not normally used | Optional |
ppLeftLipsJointRef | y, x, z | Not normally used | Not normally used | Not normally used | Optional |
ppLeftEyeJointRef | z, y, x | Not normally used | Look to right | Look down | Optional. Left eye rotations are usually set in the Expression file using the ppLeftEyeRotation control variable or the ppLookAt control variable. |
ppLeftEarJointRef | x, y, z | Not normally used | Not normally used | Not normally used | Optional |
ppLeftUpperLashJointRef | y, x, z | Not normally used | Not normally used | Not normally used | Optional |
ppLeftLowerLashJointRef | y, x, z | Not normally used | Not normally used | Not normally used | Optional |
ppLeftEyeBrowJointRef | y, x, z | Not normally used | Not normally used | Not normally used | Optional |
ppUpperTeethJointRef | y, x, z | Not normally used | Rotate downwards | Not normally used | Optional |
ppLowerTeethJointRef | y, x, z | Not normally used | Rotate downwards | Not normally used | Optional (Consider revising) |
ppHairJointRef | y, x, z | Not normally used | Not normally used | Not normally used | Optional |
ppBeardJointRef | y, x, z | Not normally used | Not normally used | Not normally used | Optional |
ppRightShoulderBladeJointRef | -y,-x, z | Turn shoulder blade anticlockwise | Tilt shoulder blade back | Rotate shoulder blade in towards neck | (Consider revising) |
ppRightShoulderJointRef | -y,-x, z | Twist arm anticlockwise | Swing arm forward | Lift arm | |
ppRightElbowJointRef | -y,-x, z | Turn lower arm anticlockwise | Bend lower arm upward | Not normally used | |
ppRightWristJointRef | -y,-z,-x | Twist hand anticlockwise | Bend wrist forward | Swivel towards thumb | |
ppRightThumbBaseJointRef | -y,-z,-x | Twist thumb anticlockwise | Open thumb perpendicular | Open thumb lateral | |
ppRightThumbMiddleJointRef | -y,-z,-x | Not normally used | Clench thumb | Not normally used | |
ppRightThumbTipJointRef | -y,-z,-x | Not normally used | Clench tip of thumb | Not normally used | |
ppRightFirstFingerBaseJointRef | -y,-z,-x | Twist anticlockwise (used sparingly) | Bend forward | Swivel towards thumb | |
ppRightFirstFingerMiddleJointRef | -y,-z,-x | Not normally used | Clench finger | Not normally used | |
ppRightFirstFingerTipJointRef | -y,-z,-x | Not normally used | Clench finger tip | Not normally used | |
ppRightMiddleFingerBaseJointRef | -y,-z,-x | Twist anticlockwise (used sparingly) | Bend forward | Swivel towards thumb | |
ppRightMiddleFingerMiddleJointRef | -y,-z,-x | Not normally used | Clench finger | Not normally used | |
ppRightMiddleFingerTipJointRef | -y,-z,-x | Not normally used | Clench finger tip | Not normally used | |
ppRightThirdFingerBaseJointRef | -y,-z,-x | Twist anticlockwise (used sparingly) | Bend forward | Swivel towards thumb | |
ppRightThirdFingerMiddleJointRef | -y,-z,-x | Not normally used | Clench finger | Not normally used | |
ppRightThirdFingerTipJointRef | -y,-z,-x | Not normally used | Clench finger tip | Not normally used | |
ppRightLittleFingerBaseJointRef | -y,-z,-x | Twist anticlockwise (used sparingly) | Bend forward | Swivel towards thumb | |
ppRightLittleFingerMiddleJointRef | -y,-z,-x | Not normally used | Clench finger | Not normally used | |
ppRightLittleFingerTipJointRef | -y,-z,-x | Not normally used | Clench finger tip | Not normally used | |
ppRightThumbNailJointRef | -y, x,-z | Not normally used | Not normally used | Not normally used | Optional |
ppRightFirstFingerNailJointRef | -y, x,-z | Not normally used | Not normally used | Not normally used | Optional |
ppRightMiddleFingerNailJointRef | -y, x,-z | Not normally used | Not normally used | Not normally used | Optional |
ppRightThirdFingerNailJointRef | -y, x,-z | Not normally used | Not normally used | Not normally used | Optional |
ppRightLittleFingerNailJointRef | -y, x,-z | Not normally used | Not normally used | Not normally used | Optional |
ppRightHipJointRef | -y,-x,-z | Twist leg anticlockwise | Lift leg | Turn leg in towards right leg | |
ppRightKneeJointRef | -y, x,-z | Twist calf anticlockwise | Bend knee | Not normally used | |
ppRightAnkleJointRef | -y, x,-z | Twist foot anticlockwise | Point foot downwards | Tilt foot onto outer edge | |
ppRightBigToeBaseJointRef | -z, x,-y | Twist toe clockwise | Bend toe downwards | Turn away from other toes | |
ppRightBigToeTipJointRef | -z, x,-y | Not normally used | Bend tip downwards | Not normally used | |
ppRightFirstToeBaseJointRef | -z, x,-y | Twist toe clockwise | Bend toe downwards | Turn towards big toe | |
ppRightFirstToeMiddleJointRef | -z, x,-y | Not normally used | Clench toe | Not normally used | |
ppRightFirstToeTipJointRef | -z, x,-y | Not normally used | Bend tip downwards | Not normally used | |
ppRightMiddleToeBaseJointRef | -z, x,-y | Twist toe clockwise | Bend toe downwards | Turn towards big toe | |
ppRightMiddleToeMiddleJointRef | -z, x,-y | Not normally used | Clench toe | Not normally used | |
ppRightMiddleToeTipJointRef | -z, x,-y | Not normally used | Bend tip downwards | Not normally used | |
ppRightThirdToeBaseJointRef | -z, x,-y | Twist toe clockwise | Bend toe downwards | Turn towards big toe | |
ppRightThirdToeMiddleJointRef | -z, x,-y | Not normally used | Clench toe | Not normally used | |
ppRightThirdToeTipJointRef | -z, x,-y | Not normally used | Bend tip downwards | Not normally used | |
ppRightLittleToeBaseJointRef | -z, x,-y | Twist toe clockwise | Bend toe downwards | Turn towards big toe | |
ppRightLittleToeMiddleJointRef | -z, x,-y | Not normally used | Clench toe | Not normally used | |
ppRightLittleToeTipJointRef | -z, x,-y | Not normally used | Bend tip downwards | Not normally used | |
ppRightBigToeNailJointRef | -y, x,-z | Not normally used | Not normally used | Not normally used | Optional |
ppRightFirstToeNailJointRef | -y, x,-z | Not normally used | Not normally used | Not normally used | Optional |
ppRightMiddleToeNailJointRef | -y, x,-z | Not normally used | Not normally used | Not normally used | Optional |
ppRightThirdToeNailJointRef | -y, x,-z | Not normally used | Not normally used | Not normally used | Optional |
ppRightLittleToeNailJointRef | -y, x,-z | Not normally used | Not normally used | Not normally used | Optional |
ppRightLipsJointRef | -y, x,-z | Not normally used | Not normally used | Not normally used | Optional |
ppRightEyeJointRef | z, y, x | Not normally used | Look to right | Look down | Optional. Right eye rotations are usually set in the Expression file using the ppRightEyeRotation control variable or the ppLookAt control variable. |
ppRightEarJointRef | x,-y,-z | Not normally used | Not normally used | Not normally used | Optional |
ppRightUpperLashJointRef | -y, x,-z | Not normally used | Not normally used | Not normally used | Optional |
ppRightLowerLashJointRef | -y, x,-z | Not normally used | Not normally used | Not normally used | Optional |
ppRightEyeBrowJointRef | -y, x,-z | Not normally used | Not normally used | Not normally used | Optional |
Several costume files are provided with POV-Person
ppoutfit1.inc | adds a shirt, trousers and a high heeled boot to each leg of the figure |
ppoutfit2.inc | adds a shirt and shorts to the figure |
pprandomoutfit.inc | adds a shirt and either shorts or trousers to the figure |
The costume file contains two main groups. These can be specified in either order. The first is an array that contains a list of files containing the costume elements that you wish to add to your figure. The second is a series of control variables that control the various costume elements.
The following sample illustrates the declaration of the ppCostumeItems array