<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
.MsoChpDefault
{mso-style-type:export-only;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style></head><body lang=EN-US link=blue vlink="#954F72" style='word-wrap:break-word'><div class=WordSection1><p class=MsoNormal>Thank you again. Great features. </p><p class=MsoNormal>Seems like I have not actually looked at the spec for many moons.</p><p class=MsoNormal>Joe</p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='border:none;padding:0in'><b>From: </b><a href="mailto:andreasplesch@gmail.com">Andreas Plesch</a><br><b>Sent: </b>Tuesday, June 27, 2023 12:42 PM<br><b>To: </b><a href="mailto:joedwil@earthlink.net">Joseph D Williams</a><br><b>Cc: </b><a href="mailto:yottzumm@gmail.com">John Carlson</a>; <a href="mailto:x3d-public@web3d.org">X3D Graphics public mailing list</a><br><b>Subject: </b>Re: [x3d-public] Blender > Exporting rig transforms to HAnim?</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>As Michalis mentioned</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>https://www.web3d.org/documents/specifications/19775-1/V4.0/Part01/components/interpolators.html#Linearinterpolation</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>says</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>'The keys shall be monotonically non-decreasing, otherwise the results</p><p class=MsoNormal>are undefined.'</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>and later addresses the step case:</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>'The third conditional value of f(t) allows the defining of multiple</p><p class=MsoNormal>values for a single key, ( i.e., limits from both the left and right</p><p class=MsoNormal>at a discontinuity in f(t)). The first specified value is used as the</p><p class=MsoNormal>limit of f(t) from the left, and the last specified value is used as</p><p class=MsoNormal>the limit of f(t) from the right. The value of f(t) at a multiply</p><p class=MsoNormal>defined key is indeterminate, but should be one of the associated</p><p class=MsoNormal>limit values.'</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>It is sufficiently well defined. Would it need to change ? A possible</p><p class=MsoNormal>improvement may be that f( of exactly t ) in that case is always the</p><p class=MsoNormal>last of the multiple values (because the half closed intervals include</p><p class=MsoNormal>first key but not the following key) but there was probably a reason</p><p class=MsoNormal>to leave it indeterminate which in practice is not a problem.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andreas</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>On Tue, Jun 27, 2023 at 2:45 PM Joseph D Williams <joedwil@earthlink.net> wrote:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> You can just duplicate keys in the middle, like</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> Then the rule must change. Now the rule is key times must be ascending?</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >>> SFString [in,out] interpolation "LINEAR" # range: ["LINEAR"|"STEP"]</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> Adding mode or style or type would be ok.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> How does this play with the ease in/out actions?</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> Thanks for looking at this.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> Joe</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> From: Andreas Plesch</p><p class=MsoNormal>> Sent: Tuesday, June 27, 2023 8:12 AM</p><p class=MsoNormal>> To: John Carlson</p><p class=MsoNormal>> Cc: X3D Graphics public mailing list</p><p class=MsoNormal>> Subject: Re: [x3d-public] Blender > Exporting rig transforms to HAnim?</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> Theoretically, it should be possible to translate a cubic spline type</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> interpolation to a special case of a NURBS description of a curve.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> Practically, it is unlikely that this is advantageous both for users</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> who want a smooth animation or for implementations since NURBS</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> requires pretty heavy machinery due its generalized approach while</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> cubic spline interpolation can be computed in a few lines. Animation</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> users will find it difficult to generate a NURBS description using</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> available animation tools, and will welcome not having to rely on a</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> x3d NURBS component. Functionally, cubic spline would apply to any</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> interpolator while there are only position, orientation and surface</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> nurbs interpolators.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> -Andreas</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> On Tue, Jun 27, 2023 at 10:27 AM John Carlson <yottzumm@gmail.com> wrote:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > I had a thought that this might be handled by NURBS?</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > John</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > On Tue, Jun 27, 2023 at 7:19 AM Michalis Kamburelis <michalis.kambi@gmail.com> wrote:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> Indeed glTF has additional interpolation options, and I think it would</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> make sense to add them to X3D.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> Looks like X3DOM and view3dscene/Castle Game Engine go in this</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> direction already :)</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> 1. X3DOM has SFString "interpolation" field, default "LINEAR", see</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> https://doc.x3dom.org/author/Interpolation/X3DInterpolatorNode.html .</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> Andreas above explained how it supports "CUBICSPLINE" option.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> 2. view3dscene / Castle Game Engine allow to use "STEP" interpolation</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> explicitly.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> For this, we add such field:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> SFString [in,out] interpolation "LINEAR" # range: ["LINEAR"|"STEP"]</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> .. to all X3DInterpolatorNode descendants (so, all interpolator</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> nodes). This seems exactly like X3DOM, we just added "STEP", where</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> X3DOM added "CUBICSPLINE". In the end we should probably have all</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> ["LINEAR"|"STEP"|"CUBICSPLINE"].</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> 3. Note that even without this field, with default linear</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> interpolation, it was possible to have effectively step interpolation,</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> as Andreas mentions. You can just duplicate keys in the middle, like</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> key [0 0.33 0.33 0.66 0.66]</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> keyValue [10 10 20 20 30 30]</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> # interpolation "LINEAR"</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> This is valid with X3D ("""keys shall be monotonically</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> non-decreasing""" according to spec).</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> It is equivalent to</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> key [0 0.33 0.66]</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> keyValue [10 20 30]</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> interpolation "STEP"</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> Using explicit "STEP" is slightly better, as you need 50% less</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> memory to store it, less computation (no need to do lerp or detect</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> this special case to optimize), and seems just simpler for authors --</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> it specifies intention explicitly, which makes sense, also if one</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> hopes a round-trip e.g. import to Blender and export to Blender.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> Having such additional interpolation options seems common, glTF</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> and Blender too have them (</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> https://docs.blender.org/manual/en/latest/editors/graph_editor/fcurves/properties.html#editors-graph-fcurves-settings-interpolation</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> ).</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> 4. Note that view3dscene / Castle Game Engine do not support</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> "CUBICSPLINE" interpolation yet, but we plan to.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> For now we support curve interpolation by adding extra</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> intermediate keys to the linear interpolation -- so, we have</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> needlessly more keys / key values. But this is only a temporary</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> solution, we want to support "CUBICSPLINE" properly, like X3DOM.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> Regards,</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> Michalis</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> niedz., 25 cze 2023 o 05:33 Andreas Plesch <andreasplesch@gmail.com> napisał(a):</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > > Date: Sat, 24 Jun 2023 10:11:03 -0700</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > > From: Joseph D Williams <joedwil@earthlink.net></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > > To: Michalis Kamburelis <michalis.kambi@gmail.com></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > > Cc: GPU Group <gpugroup@gmail.com>, X3D Graphics public mailing list</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > > <x3d-public@web3d.org></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > > Subject: Re: [x3d-public] Blender > Exporting rig transforms to HAnim?</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > > Which shows that yes, you have a list of the key times that just have to be ascending. Default is linear interpolation between keyvalues. Now new to me, I like the STEP option where value not interpolated but stays the same until next keyvalue change. For that effect, gltf makes it easier. I want that STEP option in x3d! And then there is also the cubic spline with specified tangents. Me want that one too.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > In order to support glTF x3dom added a CUBICSPLINE with tangents</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > option to interpolators, in the same form as glTF, eg. three values</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > (in tangent, value, out tangent) per key. Parallel to glTF x3dom</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > interpolators have a "interpolation" SFString field which can have</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > "LINEAR" and "CUBICSPLINE" values. I suspect due to glTF support other</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > viewers also already do something like that and could expose such a</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > mode to regular X3D.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > A STEP option is already elegantly solved by X3D with duplicate keys</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > with different values in series. That allows mixing step wise and</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > linear interpolation in one animation. x3dom just translates glTF STEP</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > to that format which is very straightforward. A dedicated STEP option</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > would be 50% more efficient in storage but I am not sure if this is</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > enough of a benefit to justify duplication of existing functionality.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > It may not or it may as x3dom already does it internally for glTF. It</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > would be possible to add to x3d as well but perhaps not necessary.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > Andreas</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > _______________________________________________</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > x3d-public mailing list</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > x3d-public@web3d.org</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> > http://web3d.org/mailman/listinfo/x3d-public_web3d.org</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> _______________________________________________</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> x3d-public mailing list</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> x3d-public@web3d.org</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> >> http://web3d.org/mailman/listinfo/x3d-public_web3d.org</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> --</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> Andreas Plesch</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> Waltham, MA 02453</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> _______________________________________________</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> x3d-public mailing list</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> x3d-public@web3d.org</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> http://web3d.org/mailman/listinfo/x3d-public_web3d.org</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>-- </p><p class=MsoNormal>Andreas Plesch</p><p class=MsoNormal>Waltham, MA 02453</p><p class=MsoNormal><o:p> </o:p></p></div></body></html>