Deprecated: Function set_magic_quotes_runtime() is deprecated in /storage/content/76/1004576/ on line 33 Deprecated: Function split() is deprecated in /storage/content/76/1004576/ on line 95 Deprecated: Function split() is deprecated in /storage/content/76/1004576/ on line 743 dev:morphs [DokuWiki]

JPatch's new morph-system



Alternative names: Interpolation-Targets, Blend-Shapes, Poses

A morph-target is a set of relative vertex displacements and/or node (most likely bone) transformations (most likely rotation and scale) and vertex attribute changes┬╣ (e.g. corner or crease sharpness).

Vertices can be manipulated either on the base (level-0) mesh, or on any subdivision level.

┬╣ Technically displacement is also a vertex attribute, so “vertex displacement” is already covered by “vertex attribute changes”. This means that a morph target actually is a set of relative attribute (aka “Avar” in Pixar-speech) changes - if there are new vertex attributes in the future (e.g. u/v texture coordinates), these too can be manipulated by morph-targets. Rotation and scale on the other hand are attributes (Avars) of transform nodes (and thus bones). It’s safe to say that a morph-target can (theoretically) manipulate any set of attributes, although there are restrictions in special cases (like Smartskin, where only vertrx attributes and not node/bone attributes are allowed), see below.


Alternative names: Target-Interpolators, Blend-Shape-Interpolators, Pose-Interpolators

A morph-interpolator is used to interpolate between different morph-targets. In the simplest case it is an 1D slider with a single morph target at the “1” position and an “idle target” at the “0” position. A more sophisticated example would interpolate between several morph-targets along the slider’s axis.

Multidimensional interpolators are also possible. A 2D interpolator could be represented e.g. by a 2D style slider (a rectangle with a knob that can be dragged in both x- and y-directions). Multiple targets could be placed anywhere inside that rectangle. 3D or heven higher dimensional interpolators are also possible (could e.g. be represented by one slider per dimension).

There could be different interpolation methods, currently I’m planning to implement polyharmonic splines with user-selectable radial basis functions. Other types of interpolators could be added in the future if necessary.


Alternative names: Smartskin-Interpolators

A smartskin morph is a special kind of morph-interpolator. The morph-targets controlled by a smartskin-morph must not contain node (bone) rotations (i.e. only vertex displacements and attribute changes are allowed). As opposed to regular morph-interpolators, a smartskin-morph is driven directly by node-transformations (most likely bone rotations), and not by GUI controls. A typical example would be a smartskin-morph controlled by the lower-arm rotations. Bending the lower arm could flex the biceps, but it can also be used to “correct” the skin in extreme poses, e.g. to prevent vertices from the lower arm to intersect with the upper arm. It will typically be bound to the DOF’s (degrees-of-freedom) of a single bone, so in the example above the interpolator would be 2-dimensional (lower arm bend and twist) - but if a node allows rotation and scaling in all 3 axis the interpolator could be 6-dimensional. Theoretically the interpolator could be bound to several bones, in which case it can be even higher-dimensional.

Non-Destructive-Edits (NDE)

Alternative names: Editing-Layers?

A non-destructive-edit (NDE) is a special kind of morph-target. Only one NDE can be active (per model) at a time, and each NDE could maintain its own undo stack. When an NDE is active, no vertices can be added or removed from the model, so the only editing actions allowed are vertex transformations and vertex attribute modifications. The idea behind this is to allow experimental edits without messing up the model. NDE’s could be stored in a hierarchy (where one NDE depends or builds up on another NDE). Here’s an example.

  • The model is a basic male human head.
  • The user adds an NDE called “female head” and moves the vertices to make the face look female.
  • The user adds another NDE atop of “female head”, creates pointed ears and raised eyebrows and calls it “female Vulcan”

Technically NDE’s are nothing but morph-targets, they’re just treated differently by the user interface. There could (should) be an option to convert NDEs to regular morph-targets and vice-versa.

Special morph-targets

Idle pose

When no morph is active, i.e. all morph-target weights are 0.

Default or resting pose

When all “sliders” are in their default position.

Texture reference pose

The pose used for the texture-reference position (for 3D procedural textures). By default this is the idle pose, but why not make this configurable. An interesting option would be to make the texture reference pose animatable - this would animate the texture on the model without necessarily animating the model itself. I don’t know how useful that my be though - but here’s a possible application: Take a look at “Finale”, the winner of the “The end of…” IRTC round here:

The caustics on the ice in the hole (caused by reflected light from the water) are faked by moving the texture (starting at about 45 seconds). Perhaps some more special effects can be achieved by moving the model through texture space too.

  dev/morphs.txt · Last modified: 2008/07/17 11:07 by (dcuny)