A complete arm with upper arm, lower arm, and hand. More...
| Import Statement: | import Clayground.Character3D |
| Inherits: |
Arm is a hierarchical body part group containing an upper arm, lower arm, and hand connected by animatable joints (shoulder, elbow, wrist).
The arm uses a joint-based hierarchy for natural animation: - Shoulder joint controls the entire arm - Elbow joint controls lower arm and hand - Wrist joint controls hand rotation
Example usage:
import Clayground.Character3D Arm { width: 1.0 height: 4.0 upperRatio: 0.45 color: "#4169e1" handColor: "#d38d5f" }
See also Leg, Hand, and Character.
articulated : bool |
Whether the hand has fingers.
Off by default: a DetailedHand is ten more boxes per hand, and a character seen from across a room does not need them.
Switching it on keeps the plain hand box and demotes it to the palm the fingers grow off. That is a real change of size: on its own the box is a whole hand and reshapes itself for every handPose, and a palm is less than half of one. The two are built to match in outline, so the swap is meant to go unnoticed - but the box is not the same box.
See also DetailedHand, handPose, and Hand.
color : color |
Color of the arm (upper and lower segments).
fingers : var |
The DetailedHand on this arm, or null when it has none.
For a bench that has to ask the hand what a pose ships with before it offers to change it. Null whenever articulated is off - the fingers are loaded on demand and a character that never shapes a hand does not pay for them.
gloveColor : color |
Colour of the glove and its cuff.
Off-white rather than white: BodyPart outlines every box, so the glove keeps a dark edge whatever the background, and a flat pure white loses the shading that tells the fingers apart.
gloved : bool |
Whether the hand wears a glove: its own colour, and a cuff.
The oldest trick in cartoon animation, and it is about legibility rather than costume. A hand the same colour as the arm it is on has to be found before it can be read, and a hand the colour of the background cannot be found at all. A glove is a single high-contrast shape that separates from both, so the gesture arrives before the face does.
The cuff is the half that does the separating. A pale hand is a pale hand; it is the band across the wrist that says where the arm stops.
See also gloveColor and Character::handScale.
hand : Node |
Reference to the wrist joint for animation.
handColor : color |
Colour of the bare hand. Ignored while gloved.
handDepth : real |
Depth of the hand.
handHeight : real |
Height of the hand.
handPose : string |
What the hand is doing: "relax", "open", "point", "thumbsUp" or "fist".
Read at both levels of detail. An articulated hand folds real fingers for it; a plain one reshapes its single box to the same pose's outline, so a wave and a raised fist are still different things on a character too far away to have fingers.
handScale : real |
How much bigger the hand is drawn than the proportion tables give.
Gestures are the loudest thing a body says and the hand is where they happen, so a character that talks with its hands wants them drawn the size a cartoonist would draw them.
Deliberately a scale on the WHOLE hand rather than a longer finger. Stretching the one part that has to stay legible is what produces a spike where an index finger should be; scaling everything keeps the parts in proportion to each other and the whole thing simply gets bigger. It scales the wrist joint, so the hand grows out of the cuff rather than moving away from it.
handWidth : real |
Width of the hand.
indexTip : vector3d |
Where the hand ends, in hand's own frame - the point to aim along, and the point to measure a gesture against.
On an articulated arm this is the tip of the extended index finger, and only meaningful while the index is straight. On a plain one it is the far face of the hand box, so a caller measuring reach does not have to know which kind of hand it has.
lowerArm : Node |
Reference to the elbow joint for animation.
lowerTaper : real |
Taper factor for lower arm width/depth (0-1).
Controls how much the forearm narrows compared to the upper arm.
mirrored : bool |
Set on a left arm, so an articulated hand puts its thumb on the correct side.
poseOverride : var |
Fields to replace in the articulated hand's pose row, or null.
Straight through to DetailedHand, and the reason it is plumbed this far up is that Character publishes its two arms - so a bench can tune ONE hand and leave the other holding the shipped pose beside it, which is the only honest way to look at a change to a shape this small.
See also DetailedHand::poseOverride.
upperArm : Node |
Reference to the shoulder joint for animation.
upperRatio : real |
Proportion of total arm length for upper arm (0.4-0.6).
A value of 0.5 means upper and lower arm are equal length.