[X3D-Ecosystem] Attachment to Blender armature/bones

John Carlson yottzumm at gmail.com
Sat Jul 6 16:03:45 PDT 2024


One possibilty is to use a protobuf to store the joints, segments and site
names in an efficient form on the file system instead of in python code.


Hmm.  No premature optimization, but a candidate for benchmarking.


John

On Sat, Jul 6, 2024 at 5:51 PM John Carlson <yottzumm at gmail.com> wrote:

> In particular, I am concerned that I am possibly using the name instead of
> the DEF for exporting HAnimSites, so I will have to include both names,
> with and without _pt, etc. to identify empties as HAnimSites.  This may
> slow down exports depending on the python implementation of sets.  Surely,
> creating such a larger set will slow things down a bit.  I am not sure how
> often this set is created though.
>
> I am also thinking I need to include aliases from X3DUOM or the standard
> in my sites list.
>
> John
>
> On Sat, Jul 6, 2024 at 4:53 PM John Carlson <yottzumm at gmail.com> wrote:
>
>> Apparently between 20c and 20e, the HAnimSites are named differently?
>> Explain?
>>
>> Interesting, but I'm unsure of effect on results?
>>
>> John
>>
>> On Sat, Jul 6, 2024 at 4:48 PM John Carlson <yottzumm at gmail.com> wrote:
>>
>>> I am also well aware that the HAnimSegments are not showing up in the
>>> right location.  Since they have no transform data, they are showing up at
>>> 0,0,0 (the default transform).  But that's not what Blender says their
>>> location is, so weird.
>>> I will look at current Jin 20e. I don't expect to see anything different
>>> than 20 c.
>>> John
>>>
>>> On Sat, Jul 6, 2024 at 2:50 PM Joe D Williams <joedwil at earthlink.net>
>>> wrote:
>>>
>>>> Hi  John and All,
>>>>
>>>> Again, that evolution of jinloa4, Humanoid4.x3d has some  fine points.
>>>> There are steps to make a skin work with a skeleton, see below, please.
>>>> Follow that process and we can activate any skin using any skeleton.
>>>>
>>>> The so-called blender armature is just an elementary archaic preset and
>>>> has no real value because the gui is also presented in those terms and that
>>>> is not hanim enough.
>>>>
>>>>
>>>>
>>>> To use blender or any for anything else we want the blender gui
>>>> presented in hanim terms using the hanim hierarchy so you can stand a
>>>> chance of hanim skeleton import to blender, do whatever, mostly geometry
>>>> and example poses, then export to your x3d hanim model to actually play in
>>>> the virtuality.
>>>>
>>>> When you can get a good hanim skeleton in blender GUI, add geometry
>>>> using blender, then use the gltf to export back to your original hanim
>>>> avatar to operate in the x3d scene environment.
>>>>
>>>> For animation, If you are going to use blender to create animations,
>>>> then it needs to export real axis-angle or unit quaternion interpolators
>>>> (likely using gltf) to  get it back into x3d and tune for realtime.
>>>>
>>>> Likewise for using blender to help with detailed work connecting skin
>>>> to skeleton, get the index and weight data blender can suppluy using gltf
>>>> export to x3d.
>>>>
>>>> Actually, make the desired pose in blender, then export the skeleton
>>>> state and use that to take control of the motion animations in the x3d tool.
>>>>
>>>>
>>>>
>>>> The blender avatar is not structured for the hanim skeleton including
>>>> joint centers, segment connectors, and site translations. It literally uses
>>>> one end of the bone to designate a joint center, and only wants to use a
>>>> shallow hierarchy, and does not know about interactivity or realtime event
>>>> system.
>>>>
>>>>
>>>>
>>>> For the Humaoid4, again, some nice additions and thanks for getting me
>>>> to look a the transforms under segment, and assigning a translation to
>>>> Segment.again.
>>>>
>>>> The Segment should be a default transform and each shape should have
>>>> its own translation (and then the line coordinates work) so thanks, and
>>>> keep it as you had it:)
>>>>
>>>>
>>>>
>>>> Attached is latest loa4 minimum. If we get the blender hierarchy gui
>>>> looking like this (no skeleton geometry) it is a big advance.
>>>>
>>>>
>>>>
>>>> All Best,
>>>>
>>>> Joe
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> -----Original Message-----
>>>> From: John Carlson <yottzumm at gmail.com>
>>>> Sent: Jul 6, 2024 8:39 AM
>>>> To: X3D Ecosystem public discussion <x3d-ecosystem at web3d.org>, Katy
>>>> Schildmeyer KS APPAREL DESIGN <katy at ksappareldesign.com>, Carol
>>>> McDonald <cemd2 at comcast.net>, Joe D Williams <joedwil at earthlink.net>
>>>> Subject: Attachment to Blender armature/bones
>>>>
>>>>
>>>> So from this video, it appears that one can attach segments to Blender
>>>> bones (well, armature in the hierarchy):
>>>>
>>>> https://coderextreme.net/AttachmentToBones.mp4 (Humanoid4.x3d minus
>>>> skin weights).
>>>>
>>>> I'm not quite sure which is farther ahead at this point, the importer
>>>> (above) or my sample script, localfinal.py.
>>>>
>>>> I guess the next step is to attach geometry, sites, groups and
>>>> transforms to segments.
>>>>
>>>> Should we follow a non-Blender bone or a Blender bone path?
>>>>
>>>> It still seems like we need to investigate animation some more as well.
>>>>
>>>> Hmm!
>>>>
>>>> John
>>>>
>>>>
>>>> X3DJSONLD/blend/localtest/Humanoid4.x3d at master ·
>>>> coderextreme/X3DJSONLD (github.com)
>>>> <https://github.com/coderextreme/X3DJSONLD/blob/master/blend/localtest/Humanoid4.x3d>
>>>>
>>>> > This has skin that doesn't move--maybe someone can add skin weights
>>>>
>>>>
>>>>
>>>> The skin is there, but not animated. This skin from a different
>>>> skeleton. You get to do the final point to joint rigging.  The most simple
>>>> skin consists of triangles made from the set surface feature points. This
>>>> skin uses V1 feature points and some added, but does not include all the V2
>>>> feature points. So, the skin either needs to  be re-triangulated adding new
>>>> V2 points, and connected to the skeleton, or, using hints from the V1
>>>> skeleton that this skin was last used on, simply assign these points to
>>>> joints. Please just go ahead and add the new V2 points, then connect it
>>>> up.
>>>>
>>>>
>>>>
>>>> The x3d way of documenting this step in the"rigging" process is using
>>>> the Joint node. The fields are skinCoordIndex and skinCoordWeight where the
>>>> skinCoordIndex is a list of numbers in order of appearance in the Coord
>>>> point list of x y z coordinates of the skin geometry and the
>>>> skinCoordWeight is the 0 to 1 scaling value that is to be applied to the
>>>> corresponding index. More than 1 Joint may produce a motion to the point,
>>>> so the index can appear multiple times, and if multiple, the weights
>>>> defined for that index should total to be max 1.
>>>>
>>>>
>>>>
>>>> For example, for the geometry associated with left arm, assign these
>>>> indexes to the left shoulder Joint with all weights=1. A roll action of the
>>>> shoulder joint, 0 0 -1 1, will move those vertices away from the body, ccw
>>>> to  the viewer.
>>>>
>>>>
>>>>
>>>> Most authoring tools will offer a method of defining this point to
>>>> joint data where a shading graphic allows you to give a general definition
>>>> of which vertices are controlled by which Joints. This will give a basis
>>>> for getting the skin to operate the way you wish over a range of postures
>>>> and motions you design. Whatever the process, the end result is that every
>>>> point is assigned to at least one Joint. In general, the farthest from the
>>>> Joint center has a higher weight and nearest has a lower weight. The actual
>>>> motion of a point depends on the actual joint rotation and the radial
>>>> distance of the point from the Joint center. If multiple joints, then the
>>>> result is accumulated. Achieving hifi results means careful attention to
>>>> the relationship of the Joint center locations with respect to the animated
>>>> mesh points.
>>>>
>>>>
>>>>
>>>> Next note that the user code form for x3d joint to point bindings is to
>>>> list the index and weight in fields of the Joint node. For the closest to
>>>> the metal form this data for each frame is stored where each vertex data
>>>> point includes a list of values applied by each joint to be applied to that
>>>> point for that frame to accomplish the motion. For this reason and others,
>>>> the non-x3d authoring system may store the data in many forms, most never
>>>> intended to be actually exposed and editable by the author.
>>>>
>>>> However, under the covers there is always a list of these connections
>>>> in some form. If you work with a reasonable number of points for your skin,
>>>> distributed effectively, then some fine tuning can be done with a simple
>>>> text editor and x3d player.
>>>>
>>>>
>>>>
>>>> Thanks and Best,
>>>>
>>>> Joe
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-ecosystem_web3d.org/attachments/20240706/9d2e370c/attachment.html>


More information about the X3D-Ecosystem mailing list