[x3d-public] Fw: Re: Blend Shapes

Joe D Williams joedwil at earthlink.net
Mon Oct 21 17:07:27 PDT 2024


-----Forwarded Message-----
From: Joe D Williams <joedwil at earthlink.net>
Sent: Oct 21, 2024 5:04 PM
Subject: Re: Blend Shapes

Just as an update to this, in Blender we see BlendShapes in two styles, Absolute and Relative.

BlendShapes Absolute presents the process of a CoordinateInterpolator that deforms or morphs the complete mesh, by allowing author to create a base mesh, then additional mesh shapes times for the complete shape moves from the base shape through various key shapes with intermediate values allowing several styles of interpolation.

BlendShapes Relative allows picking out all or a subset or mesh points to be moved relative to current mesh points location according to a scalar input.

So, the only difference between Blender and X3D is the style of naming the values. .

BlendShape Absolute, it seems like internal data for coordinate points, the X3D keyValue field, and the timer, or weight, the X3d key, could be easily exported. the big problem is that Blender allows several interpolation maths other than linear. Is it time to intrudce other interpolation maths to X3D?

BlendShape Relative, the Blender data is basically the same as for X3D Displacer, consisting of a the list of mesh indices to be operated on, a corresponding list of 3d vectors to be drawn relative to the current mesh points, and a weight input. the biggest difference in the Blendier implementation is that the weight is allowed to be less than zero and greater than 1 and the Blender tool does extrapolation to find the actual value. This weight overrange feature could be very useful when adapting one setup to another in a similar setup.

Thanks and Best,
Joe


---Original Message-----
From: Joe D Williams
Sent: Oct 3, 2024 11:03 AM
To: Myeong Won Lee , Brutzman Donald (Don) (CIV) , ,
Cc: WILLIAM GLASCOE , , , Joe Williams
Subject: Blend Shapes

As we hear more of high level authoring systems used in entertainment, such as USD,we encounter the term Blend Shapes or blendshapes, etc.
Under the covers this is an alternative to skeleton-driven deformable mesh animation where the points are moved according to a weighted function that takes into consideration the motion of associated Joint nodes that could produce direct action on a vertex.

Dependence on this style for detailed animation of individual points or groups of points results in networks of skeleton hierarchy rigs in order to produce shape deformations like lip movements or other muscle simulations. Overall, these structures are interesting and can solve some interesting mesh animation problems it becomes difficult to produce standardizable compositions.
Besides, a better tool that can operate with or independently of the skeletal animations.

One obvious solution is to add CoordinateInterpolator(s) to move points of the mesh. Here the basic problem is that you must
deal with the entire target mesh for every key and it becomes a special case to combine the effects of multiple interpolators on the same mesh.
I think the basic two ways to think about it is the idea of working with a complete mesh and/or just some part(s) of it, a sparse set, an area of points of the same target mesh.

In reality, you want these skeleton-driven and these additional independent deformations to be summed so we get the complete animation.
For instance we would say that for each frame, animation produced by the added displacements are added after all skeleton-driven point animation is complete.

So, with this problem of simulating geometry and parts of geometry morphing from shape to shape under control of some set of Joint nodes along with producing surface movements more or less independently while innovating a design that gets rid of cumbersome Coordinate Interpolator operations, HAnim documented an animation form that lots agreed that this was a best practice, easily standardizable technique.

interface Displacer {
coordIndex [ list of indices ]
description "Some Functionality"
displacements [ list of 3D vectors ]
name "required name"
weight 0 }

The coordIndex field contains a list of all coordinate index values of the target mesh be animated by this Displacer. The index is the order in which the point to appears in the user code. If only points 57, 58, and 59 were to be animated then the coordIndex field would be:
coordIndex [56 57 58]

The displacements field contains a list of 3D vectors that represent the maximum movement from the default or magicallly enough whatever the current location of that point is. Now, to master this you must understand that a point has its own local coordinate system. Like the default coordinate system of a Joint, a point in default, before animation, is the same as its parent Joint, 0 0 1 0]. This means that let's say that those three points are the tip of a finger and the objective is to move those points directly outward 0.01 unit then the vectors would be:
displacements [0 -0.01 0, 0 -0.01 0, 0 -0.01 0]

Now the weight field receives a 0 to1 floating point value that linearly scales the output vector. If zero,then no added movement; if 0.5 then one-half,and if 1, then maximum. If 1 is received,then the point will be moved -0.01 unit in the point's Y-axis of the geometry coordinate system.

A way to compute the displacements value is if you happened to have a CoordinateInterplator you wanted to get rid of is to find the coordinates of the point at minimum, key input 0, and maximum, key input 1, then find the 3D vector that connects those locations. If you are finding these values by examination, then a major consideration is that you want to set these up understanding the default point coordinate system.

So, finally,why did HAnim call it a Displacer? Well, there were a couple of names offered and the HAnim folks just had to pick something different from anyone was actually showing. The idea of a Displacer is very clear, you are telling it to displace a point from its current location in some direction relative to its default coordinate system.

In summary, seems to me the idea of terms I have heard like deformer, morpher, blended shapes, and others all can be represented by the functionality of HAnim Displacer. I hope that is good news.

Thanks and Fun,
Joe









More information about the x3d-public mailing list