[x3d-public] Stuck with getting HAnimMotion animation to run; pause/resume fields
Andreas Plesch
andreasplesch at gmail.com
Thu Jul 27 06:14:20 PDT 2023
Hi Don,
I think pause and resume are already available via frameIncrement = 0
and frameIncrement = 1 ( or larger ). An additional interface may need
language how to reconcile opposing values ( resume while
frameIncrement = 0 ).although the resolution seems unambiguous. pause
and resume would need to be added to 19774 as well. I am not sure if
there is a need for those.
What I found confusing is that it is unclear if enable = true starts
actually playing the animation. If X3D experts such as Holger need to
ask for additional information it is a good indicator that something
is missing.
'The enabled field determines whether the Motion object is allowed to
run. Note that the corresponding boolean value in Humanoid object's
motionsEnabled array shall also be true for Motion object animation to
occur.'
Perhaps that sentence is sufficiently clear but it does not say when
animation should occur (immediately after both fields are enabled).
There is an emphasis on HAnimMotion as a container for data for
animation. It is an unusual node in that it contains both
interpolation data (channel data) and time related data (frame
fields).
Rereading, I think now that an animation is actually started even if
startFrame > endFrame, and loop = false. It will then run from
startFrame to the last Frame and then stop. This is different from
Timesensor. If that is correct.
The main point is that the spec. probably needs to explain when an
animation actually starts to play, either in 19774 or in 19775.
Not sure if this a showstopper with Holger's implementation now being
available as a guide.
A minor issue is treatment of simultaneous HAnimMotion and
Interpolator/Timesensor based animation on the same HAnim. I think in
most implementations they would fight each other, so the outcome is
undefined.
-Andreas
On Thu, Jul 27, 2023 at 5:40 AM Brutzman, Donald (Don) (CIV)
<brutzman at nps.edu> wrote:
>
> Thanks again for careful scrutiny and analysis.
>
>
>
> I think we did not implement X3DTimeDependentNode interface because startFrame/endFrame are used instead of startTime/endTime, so there is a different field signature. Frames are certainly different than times.
>
>
>
> However we might provide pause, resume inputOnly fields to HAnimMotion, as corresponding to pauseTime, resumeTime in X3DTimeSensor. Suggested improvement:
>
>
>
> X3D 4.0 Architecture, 26 Humanoid Animation (HAnim) component, 26.3.4 HAnimMotion
> https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-IS.proof/Part01/components/hanim.html#HAnimMotion
>
>
>
> HAnimMotion : X3DChildNode {
>
> SFBool [in] next
>
> SFBool [in] previous
>
>
>
> SFBool [in] pause
>
> SFBool [in] resume
>
>
>
> SFString [in,out] channels ""
>
> MFBool [in,out] channelsEnabled []
>
> SFString [in,out] description ""
>
> SFBool [in,out] enabled TRUE
>
> SFInt32 [in,out] endFrame 0 [0,∞)
>
> SFTime [in,out] frameDuration 0.1 (0,∞)
>
> SFInt32 [in,out] frameIncrement 1 (-∞,∞)
>
> SFInt32 [in,out] frameIndex 0 [0,∞)
>
> SFString [in,out] joints ""
>
> SFInt32 [in,out] loa -1 [-1,4]
>
> SFBool [in,out] loop FALSE
>
> SFNode [in,out] metadata NULL [X3DMetadataObject]
>
> SFString [in,out] name ""
>
> SFInt32 [in,out] startFrame 0 [0,∞)
>
> MFFloat [in,out] values [] (-∞,∞)
>
> SFTime [out] cycleTime [0,∞)
>
> SFTime [out] elapsedTime (0,∞)
>
> SFInt32 [out] frameCount [0,∞)
>
> }
>
>
>
> · X3D 4.0 Architecture, 8 Time component, 8.3.1 X3DTimeDependentNode
>
> · https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-IS.proof/Part01/components/time.html#X3DTimeDependentNode
>
>
>
> X3DTimeDependentNode : X3DChildNode {
>
> SFString [in,out] description ""
>
> SFBool [in,out] enabled FALSE
>
> SFBool [in,out] loop FALSE
>
> SFNode [in,out] metadata NULL [X3DMetadataObject]
>
> SFTime [in,out] pauseTime 0 (-∞,∞)
>
> SFTime [in,out] resumeTime 0 (-∞,∞)
>
> SFTime [in,out] startTime 0 (-∞,∞)
>
> SFTime [in,out] stopTime 0 (-∞,∞)
>
> SFTime [out] elapsedTime
>
> SFBool [out] isActive
>
> SFBool [out] isPaused
>
> }
>
>
>
> Have updated HAnim2.1 issue Mantis 1415 accordingly to keep track with this discussion.
>
>
>
> Mantis 1415: 26.3.4 HAnimMotion field issues: name, skeletalConfiguration, totalNumberFrames, pause/resume
> https://www.web3d.org/member-only/mantis/view.php?id=1415
>
> Also likely need pause and resume fields (corresponding to X3DTimeDependentNode pauseTime/resumeTime) with further descriptive prose as well. https://web3d.org/pipermail/x3d-public_web3d.org/2023-July/019177.html (i.e. this thread)
>
> We will need to perform a careful scrub comparing X3D4 best practices for HAnimMotion when updating future HAnim2.1 specification fields and descriptions.
> https://www.web3d.org/x3d/content/X3dTooltips.html#HAnimMotion
>
>
>
> Comments welcome. If agreeable, such an improvement (adding HAnimMotion pause/resume fields) seems like a worthy best-practice addition for X3D4.
>
>
>
> Also please confirm, do you think that there are any “showstopper” errors for interfaces in current X3D final IS.proof version? Seems workable to me…
>
>
>
> all the best, Don
>
> --
>
> Don Brutzman Naval Postgraduate School, Code USW/Br brutzman at nps.edu
>
> Watkins 270, MOVES Institute, Monterey CA 93943-5000 USA +1.831.656.2149
>
> X3D graphics, virtual worlds, navy robotics https://faculty.nps.edu/brutzman
>
>
>
> From: x3d-public <x3d-public-bounces at web3d.org> On Behalf Of Holger Seelig
> Sent: Thursday, July 27, 2023 12:06 AM
> To: Andreas Plesch <andreasplesch at gmail.com>
> Cc: X3D <x3d-public at web3d.org>
> Subject: Re: [x3d-public] Stuck with getting HAnimMotion animation to run.
>
>
>
> Thanks Andreas, that's how I did it now.
>
>
>
> Holger
>
>
>
> --
>
> Holger Seelig
>
> Leipzig, Germany
>
>
>
> holger.seelig at yahoo.de
>
> https://create3000.github.io/x_ite/
>
>
>
> Am 24.07.2023 um 18:30 schrieb Andreas Plesch <andreasplesch at gmail.com>:
>
>
>
> I took the opportunity to look at HAnimMotion in
>
> https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-IS.proof/Part01/components/hanim.html#HAnimMotion
>
> and
>
> https://www.web3d.org/documents/specifications/19774/V2.0/MotionDataAnimation/MotionNodes.html
>
> The question was how to actually play an animation described in an HAnimMotion.
> HAnimMotion is described as an alternative parallel to HAnim motion
> data animation using interpolators which suggests driving it through a
> TimeSensor.
> However, fields such as frameDuration, cycleTime or timeElapsed imply
> that the object is responsible for both playing the animation and
> storage of animation data. But playing the animation is not explicitly
> explained.
>
> Here is my interpretation of the silence of the spec. on actually
> playing an animation:
>
> When does an HAnimMotion start to play ?
> Presumably, the conditions are:
> enabled and HAnimHumanoid.motionsEnabled are true
> at least one channel is enabled
> frameIncrement > 0
> startFrame < endFrame if loop = false, or loop = true
>
> When does it pause ?
> frameIncrement = 0
> perhaps other conditions
>
> When does it stop ?
> enabled or HAnimHumanoid.motionsEnabled are false
> all channels are disabled (perhaps rather a pause?)
> frameIncrement < 0, forbidden but needs to be handled
> startFrame > endFrame and loop = false
>
> Is there a concept of an HAnimMotion being activated versus enabled ?
> The case of all channels being disabled could be interpreted as a
> playing, but static animation showing untransformed joints. This would
> remove channel state as a condition above.
>
> Presumably, an implementation could construct internal Interpolators,
> TimeSensors and Routes for fairly complete coverage.
> Something like:
> Timesensor: duration = frameDuration * frameCount, loop = loop,
> shorten to represent endFrame
> Each Channel is an Interpolator: ARotation = OrientationInterpolator,
> APosition = PositionInterpolator (combine sequential rotations or
> positions into single Interpolator keyValues). keys are 0,
> frameIncrement, 2*FrameIncrement .. frameCount or so.
> Routes: from Timesensor to CombinedInterpolator to joint
>
> The signature in
> https://www.web3d.org/documents/specifications/19774/V2.0/MotionDataAnimation/MotionNodes.html#MotionObject
> is missing startFrame and endFrame although the description then
> includes these fields. The tooltips noticed this.
>
> What is the order of application of transformations described in
> channels: presumably, left to right ? Rotations are sometimes applied
> right to left.
> There is no scale channel ?
>
> Some thoughts,
>
> Andreas
>
>
> Date: Mon, 24 Jul 2023 12:03:24 +0200
> From: Holger Seelig <holger.seelig at yahoo.de>
> To: Joseph D Williams <joedwil at earthlink.net>
> Cc: X3D <x3d-public at web3d.org>
> Subject: Re: [x3d-public] Stuck with getting HAnimMotion animation to
> run.
> Message-ID: <780A4F0A-BB92-40BD-BFBB-9C7FAC78D326 at yahoo.de>
> Content-Type: text/plain; charset="utf-8"
>
> I have taken https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Specifications/KoreanCharacterMotionAnnexD01JinIndex.html as working model to implement HAnimMotion. I have successfully created all interpolators, and if I simulate a run of these interpolators they play a nice animation.
>
> What I do miss in HAnimMotion are startTime, stopTime, maybe pauseTime, resumeTime, isActive, isPaused fields from TimeSensor to start an animation.
>
> Although HAnimMotion has next and previous input fields, but as far as I could read from the specification, these fields are only for stepping through the animation frame by frame.
>
> There is another field frameIndex, when receiving an event, the interpolators should jump to this frame.
>
> But with these existing fields no nice transitions from one frame to another can be made.
>
> On the other hand it exists a elapsedTime field, but when nothing can be started this field would not output anything.
>
> With the still missing TimeSensor fields, this would be possible. Going now a step further HAnimMotion can be derived from X3DTimeDependentNode, which will now make much sense.
>
> Holger
>
> --
> Holger Seelig
> Leipzig, Germany
>
> holger.seelig at yahoo.de
> https://create3000.github.io/x_ite/
>
>
>
>
>
>
> Am 23.07.2023 um 22:23 schrieb Joseph D Williams <joedwil at earthlink.net>:
>
>
> Hi Holger,
> I was able to run the bvh example when converted to x3d back when a long time ago. In Part 2 of
> From what I remember on this is that the source bvh animation only specifies a frame rate, or number of seconds between samples. So the x3d import must create a set of keys and organize the keyvalues. Since the keys are at the video frame rate, the key field gets very tedious. Also, the number of keyvalues goes up fast with skeleton parts, since there tend to be most likely too many keyframes (in angles). Finally, this massive list of keys gets duplicated for every interpolator.
> With this, how much greater could we possibly honor developers of interpolators and implementers of vrml and x3d interpolators than to somehow allow a way to ?DEF? a key field and reuse it in another interpolator. This would at least consolidate the code so could stand a chance to work on it.
> Of course great number of key steps is not a issue for tools that just make video because they only make fixed steps to render the specific key and don?t interpolate.
>
> Good Luck, Don has worked on this a lot including import of bvh skeleton and animation directly to HAnim. Most of the bvh speaks bones while x3d speaks joints. Remember, data for bone goes to parent joint.
> Thanks,
> Joe
>
> From: Holger Seelig <mailto:holger.seelig at yahoo.de>
> Sent: Saturday, July 22, 2023 11:26 AM
> To: X3D <mailto:x3d-public at web3d.org>
> Subject: [x3d-public] Stuck with getting HAnimMotion animation to run.
>
> I am not really clear how to start the animation of a HAnimMotion. I am very hung up on how a TimeSensor works.
>
> My understanding so far is that the animation is started when the HAnimMotion receives an enabled=true event and then runs to the end or starts over when loop=true.
>
> I also guess that the next and previous events only have an effect if enabled=false, otherwise it wouldn't make sense with the previous assumptions.
>
> I would be very happy if there was clarification on this.
>
> Holger Seelig
> Leipzig, Germany
>
> holger.seelig at yahoo.de <mailto:holger.seelig at yahoo.de>
> https://create3000.github.io/x_ite/
>
>
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20230724/2500d41f/attachment-0001.html>
>
> ------------------------------
>
> Message: 2
> Date: Mon, 24 Jul 2023 05:33:36 -0500
> From: John Carlson <yottzumm at gmail.com>
> To: "Brutzman, Donald (Don) (CIV)" <brutzman at nps.edu>
> Cc: Michalis Kamburelis <michalis.kambi at gmail.com>, Joseph D Williams
> <joedwil at earthlink.net>, X3D Graphics public mailing list
> <x3d-public at web3d.org>
> Subject: Re: [x3d-public] JoeKick H-Anim example - error in X3D
> classic encoding
> Message-ID:
> <CAGC3UEmcCN16x-ps+SJ_AiOeMuwGWdMr0WrFQ29qnk4JpmOKSw at mail.gmail.com>
> Content-Type: text/plain; charset="utf-8"
>
> You can get the same report from tovrmlx3d.exe, I think Don, see:
>
> tovrmlx3d.exe next to the view3dscene.exe
>
> Here is a small taste of what happens on a recent X3DV file:
>
> $ ‾/Downloads/view3dscene-4.3.0-win64-x86_64/view3dscene/tovrmlx3d.exe
> OutputDir/LeifRevised.x3dv 2>&1 |head
> tovrmlx3d: Warning: HAnimHumanoid.joints list was empty, fixed to list all
> 54 joints
> tovrmlx3d: Warning: X3D: HAnimJoint.skinCoord references not existing
> coordinate index 9 (while we have only 0 skin coordinates in
> HAnimHumanoid.skin)
> tovrmlx3d: Warning: X3D: HAnimJoint.skinCoord references not existing
> coordinate index 10 (while we have only 0 skin coordinates in
> HAnimHumanoid.skin)
> tovrmlx3d: Warning: X3D: HAnimJoint.skinCoord references not existing
> coordinate index 11 (while we have only 0 skin coordinates in
> HAnimHumanoid.skin)
> tovrmlx3d: Warning: X3D: HAnimJoint.skinCoord references not existing
> coordinate index 12 (while we have only 0 skin coordinates in
> HAnimHumanoid.skin)
> tovrmlx3d: Warning: X3D: HAnimJoint.skinCoord references not existing
> coordinate index 13 (while we have only 0 skin coordinates in
> HAnimHumanoid.skin)
> tovrmlx3d: Warning: X3D: HAnimJoint.skinCoord references not existing
> coordinate index 14 (while we have only 0 skin coordinates in
> HAnimHumanoid.skin)
> tovrmlx3d: Warning: X3D: HAnimJoint.skinCoord references not existing
> coordinate index 15 (while we have only 0 skin coordinates in
> HAnimHumanoid.skin)
> tovrmlx3d: Warning: X3D: HAnimJoint.skinCoord references not existing
> coordinate index 16 (while we have only 0 skin coordinates in
> HAnimHumanoid.skin)
> tovrmlx3d: Warning: X3D: HAnimJoint.skinCoord references not existing
> coordinate index 17 (while we have only 0 skin coordinates in
> HAnimHumanoid.skin)
>
> Fills the bill.
>
> John
>
> On Mon, Jul 24, 2023 at 3:19?AM Brutzman, Donald (Don) (CIV) <
> brutzman at nps.edu> wrote:
>
>
> 1. Michalis, thanks for a great trouble report.
>
>
>
> I believe the conversion errors are now fixed in X3dToVrml.xslt
> stylesheet, updated model at
>
>
>
> -
> https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Skin/JoeKick.x3dv
>
>
>
> Unfortunately I discovered that a lot of type checking within that
> stylesheet isn?t really effective due to a puzzling logic error, so there
> may well be other errors like this. More work will likely be needed.
>
>
>
> Wondering if you have a command-line mode for validating VRML/ClassicVRML
> models with view3dscene? Perhaps I might be able to add that to our
> regression testing build scripts.
>
>
>
> 2. Joe, it's your model, so please send any texture coordinate changes you
> may have and I will update the .x3d model in the archives.
>
>
>
> -
> https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Skin/JoeKickIndex.html
> -
> https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Skin/JoeKick.x3d
>
>
>
> Meanwhile there are plenty of warnings from Schematron. They seem
> accurate. The flagged parent-child relationships are either a problem in
> the model, or else (less likely) a problem in the diagnostics (which are
> autogenerated from X3DUOM).
>
>
>
> I thought that possibly they are related to your use of loa=?3?
> complexity, but diagnostics looked the same for loa=?4?.
>
>
>
>
>
> --------- X3D Validator checks commenced for JoeKick.x3d ---------
>
>
>
> Performing well-formed XML check...
>
> Checking file:/C:/x3d-code/
> www.web3d.org/x3d/content/examples/HumanoidAnimation/Skin/JoeKick.x3d...
>
> Well-formed XML check: pass
>
>
>
> Performing DOCTYPE check...
>
> [X3dDoctypeChecker] success: valid XML declaration
> found.[X3dDoctypeChecker] success: final X3D 4.0 DOCTYPE found.
>
>
>
> Performing DTD validation...
>
> Checking file:/C:/x3d-code/
> www.web3d.org/x3d/content/examples/HumanoidAnimation/Skin/JoeKick.x3d...
>
> XML DTD validation: pass
>
>
>
> Performing X3D schema validation...
>
> Checking file:/C:/x3d-code/
> www.web3d.org/x3d/content/examples/HumanoidAnimation/Skin/JoeKick.x3d...
>
> Referenced entity at
> http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd
> .
>
> Referenced entity at http://www.w3.org/2001/XMLSchema.dtd.
>
> Referenced entity at http://www.w3.org/2001/datatypes.dtd.
>
> XML schema validation: pass
>
>
>
> Performing X3D regular expression (regex) values check...
>
> X3D regex check: complete
>
>
>
> Performing X3dToX3dvClassicVrmlEncoding.xslt conversion check...
>
>
>
> Performing X3D Schematron check...
>
> X3D version 4.0 is approved by Web3D Consortium and focused on
> interoperability with HTML5, glTF2.0 Physically Based Rendering (PBR) and
> Web Audio API, undergoing final administrative review by ISO in 2023.
> [/X3D, diagnostic]
>
> <meta name='TODO' content='Record information about skin coordinates
> (found in comment at end of scene) as a structured MetadataSet containing
> MetadataString nodes'/> [/X3D/head/meta[7], diagnostic]
>
> <HAnimHumanoid DEF='Joe_Kick' name='Kick'/> version='2.0' with X3D
> version='4.0' [/X3D/Scene/Group[1]/HAnimHumanoid, diagnostic]
>
> ====================================================================================================================
> [/X3D/Scene/Group[1]/HAnimHumanoid, diagnostic]
>
> <HAnimHumanoid DEF='Joe_Kick' name='Kick'/> node
> count(HAnimJoint) within skeleton hierarchy =
> 94[/X3D/Scene/Group[1]/HAnimHumanoid, diagnostic]
>
> <HAnimHumanoid DEF='Joe_Kick' name='Kick'/> node
> count(HAnimSegment) within skeleton hierarchy =
> 1[/X3D/Scene/Group[1]/HAnimHumanoid, diagnostic]
>
> <HAnimHumanoid DEF='Joe_Kick' name='Kick'/> node
> count(HAnimSite) within HAnimHumanoid =
> 1[/X3D/Scene/Group[1]/HAnimHumanoid, diagnostic]
>
> <HAnimHumanoid DEF='Joe_Kick' name='Kick'/> node
> count(HAnimSite//Viewpoint) within skeleton hierarchy =
> 1[/X3D/Scene/Group[1]/HAnimHumanoid, diagnostic]
>
> <HAnimHumanoid DEF='Joe_Kick' name='Kick'/> node
> count(HAnimDisplacer) within skeleton hierarchy =
> 1[/X3D/Scene/Group[1]/HAnimHumanoid, diagnostic]
>
> <HAnimHumanoid DEF='Joe_Kick' name='Kick'/> node count(<HAnimJoint
> USE='*' containerField = 'joints'/>) =
> 94[/X3D/Scene/Group[1]/HAnimHumanoid, diagnostic]
>
> <HAnimHumanoid DEF='Joe_Kick' name='Kick'/> node count(<HAnimSegment
> USE='*' containerField = 'segments'/>) =
> 1[/X3D/Scene/Group[1]/HAnimHumanoid, diagnostic]
>
> <HAnimHumanoid DEF='Joe_Kick' name='Kick'/> node count(<HAnimSite
> USE='*' containerField = 'sites'/>) =
> 1[/X3D/Scene/Group[1]/HAnimHumanoid, diagnostic]
>
> <HAnimHumanoid DEF='Joe_Kick' name='Kick'/> node count(<HAnimSite
> DEF='*' name ends with '_view'/>) =
> 0[/X3D/Scene/Group[1]/HAnimHumanoid, diagnostic]
>
> ====================================================================================================================
> [/X3D/Scene/Group[1]/HAnimHumanoid, diagnostic]
>
> <HAnimSite DEF='Joe_RootFront_view' name='RootFront_view'/> is not a
> recognized name for HAnim2 HAnimSite
> [/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimSegment/HAnimSite,
> info]
>
> <HAnimJoint DEF='Joe_l_tarsometatarsal_2' name='l_tarsometatarsal_2'/> has
> parent HAnimJoint name='l_talocrural' rather than expected parent
> name='l_cuneonavicular_2', recommend checking model
> [/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[1]/HAnimJoint[1]/HAnimJoint/HAnimJoint/HAnimJoint,
> warning]
>
> <HAnimJoint DEF='Joe_l_tarsal_distal_interphalangeal_2'
> name='l_tarsal_distal_interphalangeal_2'/> has parent HAnimJoint
> name='l_metatarsophalangeal_2' rather than expected parent
> name='l_tarsal_proximal_interphalangeal_2', recommend checking model
> [/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[1]/HAnimJoint[1]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint,
> warning]
>
> <HAnimJoint DEF='Joe_r_tarsometatarsal_2' name='r_tarsometatarsal_2'/> has
> parent HAnimJoint name='r_talocrural' rather than expected parent
> name='r_cuneonavicular_2', recommend checking model
> [/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[1]/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint,
> warning]
>
> <HAnimJoint DEF='Joe_r_tarsal_distal_interphalangeal_2'
> name='r_tarsal_distal_interphalangeal_2'/> has parent HAnimJoint
> name='r_metatarsophalangeal_2' rather than expected parent
> name='r_tarsal_proximal_interphalangeal_2', recommend checking model
> [/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[1]/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint,
> warning]
>
> <HAnimJoint DEF='Joe_l_acromioclavicular'/> name field is required
> [/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[2],
> error]
>
> <HAnimJoint DEF='Joe_l_acromioclavicular' name=''/> is not a recognized
> name for HAnim2 HAnimJoint
> [/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[2],
> warning]
>
> <HAnimJoint DEF='Joe_l_sternoclavicular' name='l_acromioclavicular'/> DEF
> value does not contain correctly modified version of name value (for
> example, DEF='myPrefix_nameValue' e.g. DEF='myPrefix_l_acromioclavicular')
> - see HAnim section C.2 Humanoid, VRML Binding
> [/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[2]/HAnimJoint,
> error]
>
> <HAnimJoint DEF='Joe_l_sternoclavicular' name='l_acromioclavicular'/> has
> parent HAnimJoint name='' rather than expected parent
> name='l_sternoclavicular', recommend checking model
> [/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[2]/HAnimJoint,
> warning]
>
> <HAnimJoint DEF='Joe_l_carpometacarpal_1' name='l_carpometacarpal_1'/> has
> parent HAnimJoint name='l_radiocarpal' rather than expected parent
> name='l_midcarpal_1', recommend checking model
> [/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[1],
> warning]
>
> <HAnimJoint DEF='Joe_l_carpometacarpal_2' name='l_carpometacarpal_2'/> has
> parent HAnimJoint name='l_radiocarpal' rather than expected parent
> name='l_midcarpal_2', recommend checking model
> [/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[2],
> warning]
>
> <HAnimJoint DEF='Joe_l_carpometacarpal_3' name='l_carpometacarpal_3'/> has
> parent HAnimJoint name='l_radiocarpal' rather than expected parent
> name='l_midcarpal_3', recommend checking model
> [/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[3],
> warning]
>
> <HAnimJoint DEF='Joe_l_carpometacarpal_4' name='l_carpometacarpal_4'/> has
> parent HAnimJoint name='l_radiocarpal' rather than expected parent
> name='l_midcarpal_4_5', recommend checking model
> [/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[4],
> warning]
>
> <HAnimJoint DEF='Joe_l_carpometacarpal_5' name='l_carpometacarpal_5'/> has
> parent HAnimJoint name='l_radiocarpal' rather than expected parent
> name='l_midcarpal_4_5', recommend checking model
> [/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[5],
> warning]
>
> <HAnimJoint DEF='Joe_r_carpometacarpal_1' name='r_carpometacarpal_1'/> has
> parent HAnimJoint name='r_radiocarpal' rather than expected parent
> name='r_midcarpal_1', recommend checking model
> [/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[3]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[1],
> warning]
>
> <HAnimJoint DEF='Joe_r_carpometacarpal_2' name='r_carpometacarpal_2'/> has
> parent HAnimJoint name='r_radiocarpal' rather than expected parent
> name='r_midcarpal_2', recommend checking model
> [/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[3]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[2],
> warning]
>
> <HAnimJoint DEF='Joe_r_carpometacarpal_3' name='r_carpometacarpal_3'/> has
> parent HAnimJoint name='r_radiocarpal' rather than expected parent
> name='r_midcarpal_3', recommend checking model
> [/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[3]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[3],
> warning]
>
> <HAnimJoint DEF='Joe_r_carpometacarpal_4' name='r_carpometacarpal_4'/> has
> parent HAnimJoint name='r_radiocarpal' rather than expected parent
> name='r_midcarpal_4_5', recommend checking model
> [/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[3]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[4],
> warning]
>
> <HAnimJoint DEF='Joe_r_carpometacarpal_5' name='r_carpometacarpal_5'/> has
> parent HAnimJoint name='r_radiocarpal' rather than expected parent
> name='r_midcarpal_4_5', recommend checking model
> [/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[3]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint[5],
> warning]
>
>
>
> --------- X3D Validator checks complete for JoeKick.x3d ---------
>
>
>
>
>
> all the best, Don
>
> --
>
> Don Brutzman Naval Postgraduate School, Code USW/Br
> brutzman at nps.edu
>
> Watkins 270, MOVES Institute, Monterey CA 93943-5000 USA
> +1.831.656.2149
>
> X3D graphics, virtual worlds, navy robotics
> https://faculty.nps.edu/brutzman
>
>
>
> -----Original Message-----
> From: x3d-public <x3d-public-bounces at web3d.org> On Behalf Of Michalis
> Kamburelis
> Sent: Sunday, July 23, 2023 1:44 PM
> To: X3D Graphics public mailing list <x3d-public at web3d.org>
> Subject: [x3d-public] JoeKick H-Anim example - error in X3D classic
> encoding
>
>
>
> "Joe Kick" example linked from
>
> https://www.web3d.org/x3d/content/examples/HumanoidAnimation/ ,
> https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Skin/JoeKickIndex.html
>
> , 2 errors:
>
>
>
> 1. The "ClassicVRML" encoding version (
>
>
> https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Skin/JoeKick.x3dv
>
> ) seems to be incorrectly converted from XML to classic encoding. It
> contains
>
>
>
> """
>
> DEF Joe_skull_tip_raiser_action HAnimDisplacer { coordIndex 0 1 2 3 4 5 6
> 7 8 9 displacements 0 0.15 0 0 ...
>
> name "skull_tip_raiser_action"
>
> }
>
> """
>
>
>
> so the coordIndex and displacements fields miss [ ] around their values.
>
>
>
> "coordIndex" is MFInt32, "displacements" is MFVec3f, they both require [ ]
> in classic encoding if you want to have a list of arbitrary number of
> elements. If no [ ] are used, the classic encoding parsers have to assume
> they contain 1 item (1 integer on "coordIndex", 1 vector == 3 floats on
> "displacements"). Currently parsing this fails, as parser sees unexpected
> numbers in the middle of HAnimDisplacer.
>
>
>
> This problem is not present in XML encoding, where no [ ] are used, the
> lists are in separate XML attributes.
>
>
>
> 2. The XML encoding version contains invalid number of texture
> coordinates, we have discussed in previously on this list:
>
>
>
> X3D: Invalid number of items in an attribute array for shape
>
> "Joe_Humanoid/Joe_Kick/Joe_Shape/IndexedFaceSet(Joe_skin_IndexedFaceSet)":
>
> Invalid index: 9, but we have 4 items in 2D texture coordinates
>
>
>
> Regards,
>
> Michalis
>
>
>
> _______________________________________________
>
> x3d-public mailing list
>
> x3d-public at web3d.org
>
> http://web3d.org/mailman/listinfo/x3d-public_web3d.org
> _______________________________________________
> x3d-public mailing list
> x3d-public at web3d.org
> http://web3d.org/mailman/listinfo/x3d-public_web3d.org
>
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20230724/df90f984/attachment.html>
>
> ------------------------------
>
> Subject: Digest Footer
>
> _______________________________________________
> x3d-public mailing list
> x3d-public at web3d.org
> http://web3d.org/mailman/listinfo/x3d-public_web3d.org
>
>
> ------------------------------
>
> End of x3d-public Digest, Vol 172, Issue 93
> *******************************************
>
>
>
>
> --
> Andreas Plesch
> Waltham, MA 02453
>
> _______________________________________________
> x3d-public mailing list
> x3d-public at web3d.org
> http://web3d.org/mailman/listinfo/x3d-public_web3d.org
>
>
--
Andreas Plesch
Waltham, MA 02453
More information about the x3d-public
mailing list