Muscle Builder User Manual
1 Create a new action line (or AL
in short). You are prompted to enter a name, which must be unique because
it serves as an identifier for all subsequent operations. Should you mistype
the name, you can still change it by editing the .M file directly.
2 Delete AL. Be careful with this kind of operation as no Undo operation is implemented. 3 Choose from the list of all action lines. Alternately, you can select an AL graphically (choose pick AL in the menu Pick or press 'a'). 4 List of all (key)blobs (a.k.a. AL nodes) that make up the AL. Select a blob directly by clicking on it. 5 Add/Remove/Insert/Move blob: these operations are available only in the start posture. In practice, this means you must turn off the relaxation and press the Start Posture button to use them. The most practical way to create an action line is by first adding the origin and insertion blobs (end blobs) and then using the easy muscle creation panel (it appears automatically when you've entered two keyblobs) to quickly specify intermediate nodes. Dynamics indicates whether the current blob is dynamic. If not, its motion is driven only by the joint to which it is bound. It is therefore useless that force fields influence non-dynamic nodes. Typically, origin (first) and insertion (last) blobs are not dynamic. 6 Specify the scaling, upon an isometric contraction, along the red X and green Y axis of the local twist frame (if you do not see local frames, check AL Twist in the Display menu). Note that you won't see any change in the display if slider (Isometric) Tension is set to 0. You should be concerned with these scalings when all else is already ok. 7 Fixed Tendon Length garantees that tendon portions remain of fixed length (initial length). A segment with stiffness > 50 is considered tendinous. 8 For non-dynamic nodes only. By default, the twist frame for a non-dynamic node is computed using the joint to which it is bound. This is not always appropriate. For example, the biceps muscle attaches to the ulna. Although its insertion moves with the elbow joint, its twisting motion depends much more on the shoulder twisting because the tendon barely changes direction as the elbow flexes. 9 Show all blobs that are anchored to the AL. Clear Anchored Blobs removes all anchors. |
|
10 List of force fields. A force field consists of one (or more) blobs. Force fields are used to bend the initially straight AL into the required shape (i.e. that passes through the muscle mesh). They can also be repulsive to prevent gross interpenetration of the bones. 11 List of AL nodes that are influenced by the current force field. Upon creation of a force field, the two closest AL nodes are automatically marked as influenced. 12 Attraction/repulsion mode. In radial mode, the AL node is attracted towards the center of the force field. This is useful for force fields that are close to a spherical shape. In orthogonal mode, the node is attracted towards its projection on the surface of the force field. In this mode, the AL node may slide freely on the force field's surface until reaching a minimal energy configuration. When using force fields that are elongated (e.g. the blob looks like a thin cylinder), choose the orthogonal mode. 13 One of the drawbacks of an attractive, orthogonal force field is that it's slow. When the force field is very elongated and therefore looks like a line, you may use Consider As Line to approximate the force field by a line and reduce computational time. 14 Create or delete a force field. 15 Add/remove a blob to/from the force field as it may consist of several blobs. 16 Add/remove AL nodes to/from the list of influence. 17 Select the stiffness of the selected AL segment. Click on an arrow (order of magnitude changes) and move mouse left or right (while holding mouse button pressed) to decrease or increase stiffness. 18 Display type of material of considered segment. A segment belongs to a tendon if its stiffness > 50, to a belly otherwise. 19 Turn on/off the elastic relaxation. 20 Go back to Start posture of AL. Go back to posture in which mesh was anchored. Usually the same as the start posture. |
1 Create/Delete Primitive. Be careful when deleting primitive
as there's no undo button! The primitive that's deleted is the active one,
in other words that displayed
here.
2 Delete all primitives that do not belong to a an action line (either as a force field or as a keyblob). You may have to press the button several times to remove all unused primitives. 3 Create an exact copy of the current blob. You won't see any change on the screen as the copy is strictly identical but a new blob is actually created. If you move the copy around, this becomes obvious. 4 Anchoring a blob to a joint means it will later move depending on this joint. 5 You can anchor a primitive to the currently selected AL. Its motion is then entirely driven by the AL. Thus, you can create moving force fields. 6 There exist various types of primitives. The first two types (blob and ellipsoid) are used for rendering purposes. They correspond to the ellipsoids used in the old software Body Builder. The third type is force field. The fourth is muscle node. A muscle node is an ellipsoid that is used for creating an AL node in the start position. Note that when speaking of force fields or AL nodes, we also use (abusively) the terms blob or ellipsoid. The thing is, all primitives are ellipsoidal hence the confusion of terms. 7 Move/rotate/scale the primitive using the mouse. 8 Size/Position/Rotation: the color (red, green or blue) corresponds to the colors of the joint's frame in the display window. 9 Used for creating a new joint for the ulna by specifying the joint's center and the direction. Typically used once for each new skeleton. |
1 Load a mesh. Currently supported format types are Inventor
and Alias/Wavefront. Files must therefore end with extension .iv
(Inventor file) or .obj(Alias/Wavefront format). The .obj format
is to be prefered whenever possible..
2 Deselect mesh. The selection color will disappear. 3 Select mesh type: Bone, Muscle or Skin. 4 Anchor mesh to current joint so that it moves w.r.t. this joint later on. 5 Save the current mesh into an independent Inventor file or .obj file (file name's extension tells which one). 6 List of all action lines. Select several ALs by holding the Ctrl key pressed. 7 Anchor muscle mesh to one or more ALs. Use Anchor Mesh 2 AL rather than Selective Anchoring except when you want tendon vertices not to be shared by several ALs e.g. the main muscle in the forearm has four incoming tendons (for each finger) and obviously vertices for the tendinous regions must not be shared. 8 Detach mesh. 9 Display current muscle mesh only. 10 Show vertices influenced by the selected actions lines (see 6 for AL selection). 11 Display/Deform selected ALs. |
Because of the order, you may not place an Action Line definition
before the blobs section for example. Also, be careful to respect the bracketing
(and ',' or ';' signs) in the definitions.
Usually, you need not not change this section as it is defined once and for all for a particular skeleton. |
# EPFL-LIG Body Model File Version 4.0
inst skeleton 1 { hight 1777.000 , spine_ratio 1.020 , high_lateral_scale 1.000 , low_lateral_scale 1.150 , frontal_ratio 1.000 , template "estelle.tpl" , r_radio_ulna 1 0.997692 -0.049959 -0.045992 -0.049959 -0.081313 -0.995436 0.045992 0.995436 -0.083621 -10.999996 8.000000 20.000000 , } ; |
Here the id (=number) of the blob is 90, the joint to which it is anchored
is "r_shoulder_twisting".
a,b,c, define the size in mm of the blob. group is obsolete. Eulerangle specifies three angles (in radians) of rotations and origin a translation (in mm) from the center of the joint (in the joint's local coordinate system) |
inst blob 90 {
name "" , type ellipsoid , parent joint r_shoulder_twisting , visibility 0 , a 33.00 , b 33.00 , c 33.00 , weight 1.00 , blend 1 , group r_arm_upper , Eulerangle 0.0000 0.0000 0.0000 , origin 4.0000 10.0000 0.0000 , } ; |
Here's two examples of mesh definition. The first one defines a 'bone'
mesh, the second is a muscle mesh. Note that paths are not absolute but
relative to the directory where the .M file is stored.
wcs (stands for world coordinate system) should be set to 1 for meshes defined in global or world coordinate systems. |
inst mesh {
name "rhand" , type bone , parent r_wrist_pivot , file "bones/rhand.iv" , } ; inst mesh {
|
name = name of AL, may be changed provided that you specify
a name that's not already taken by another AL
nkey = number of key blobs keyblobs = list of keyblobs (by id) dynamic = tells whether each keyblob is dynamic (1 = true) elasticity = elasticity/damping coefficients for each segment twist = indicates the joint used for computing Twist frames of NON-dynamic keyblobs (usually the end blobs). elongation = don't modify nffield = number of force fields forcefields = list of force fields (by id) ffields_params = for each force field
remapping = 1 when Fixed Tendon Length is on, 0 otherwise. anchored_blob = blob id / index of blob to which it is mapped
(starting from 0 for the index) / ratio along the segment (value must be
in [0..1]) / local rotation as an axis angle / local translation in mm.
|
inst ActionLine 1 {
name "triceps_lateral" , nkey 9 , keyblobs 1 3 4 5 6 19 7 8 2 , dynamic 0 1 1 1 1 1 1 1 0 , elasticity 200.00 28.29 20.00 8.95 20.00 8.95 20.00 8.95 200.00 28.29 200.00 28.29 200.00 28.29 200.00 28.29 , twist r_shoulder_twisting r_elbow_flexion , elongation 1 , nffield 5 , forcefields 9 10 16 18 20 , ffields_params 0 1 0 10.00 2 0 0 0 10.00 16 1 1 0 100.00 192 0 0 0 4.00 128 0 0 0 10.00 32 , start_posture 1 { r_elbow_twisting 1.000000 } mesh_posture 1 { r_radio_ulna -1.000000 } mesh "r_vaste_externe" , remapping 1 , anchored_blob id 241 (seg,t) 8 0.000000 rot -0.245413 -1.610062 0.154613 trans 0.0 0.0 0.0 , } ;
|