<div dir="ltr"><div>Indeed, author errors do not need to be addressed by functionality, and rarely even could be without mindreading.</div><div><br></div><div>"Normals can also be set by the author each frame if desired."</div><div><br></div><div>This is true outside of Displacers using Interpolators and maybe this is all that is needed. I was thinking more about Displacers and augmenting vertex displacements with normal "displacements" for cases where automatic recalculation of normals based on the current orientation of triangles is not satisfactory but these cases may be rare. However, it is common practice, I believe, to provide normals with each model and animation frame.<br></div><div><br></div><div>To me, segment displacers seem to be designed for the use case of minor geometric adjustment where linear paths would often work. Larger deformation or animation seem to be better addressed by joints and skinning.<br></div><div><br></div><div>It would be probably feasible from an implementation perspective to have displacers with weight (key) ranges for piecewise linear interpolations to approximate curved displacement paths. Thinking about it, it may already be possible to design a CoordinateInterpolator of _displacement_ keyValues which gets routed to the displacement field of a displacer, with a constant weight of 1. So animation then happens by changing displacement values directly rather than weight values. This would allow for arbitrary displacement paths and does not need any changes, still allowing targeting vertex subsets and composing. Might be worth testing, seems interesting.<br></div><div><br></div><div>-Andreas<br></div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Wed, Feb 12, 2025 at 10:58 PM Joe D Williams <<a href="mailto:joedwil@earthlink.net">joedwil@earthlink.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:12pt"><p style="margin:0.1rem 0px;line-height:1">I think degenerate triangles, ones that flip from ccw to cw, or overlap or</p>
<p style="margin:0.1rem 0px;line-height:1">whatever messes up a triangle when any of all of its points get moved </p>
<p style="margin:0.1rem 0px;line-height:1">is purely result of author error(s) in setting the parameter(s). </p>
<p style="margin:0.1rem 0px;line-height:1"> </p>
<p style="margin:0.1rem 0px;line-height:1">Whatever happens with normals of triangles moved or destroyed by Displacer</p>
<p style="margin:0.1rem 0px;line-height:1">must match what happens with points moved by joint-driven skin animations </p>
<p style="margin:0.1rem 0px;line-height:1">which can also mess up, and by points moved by CoordinateInterpolator,</p>
<p style="margin:0.1rem 0px;line-height:1">same as any morphing operation. </p>
<p style="margin:0.1rem 0px;line-height:1">Normals can also be set by the author each frame if desired. </p>
<p style="margin:0.1rem 0px;line-height:1">       </p>
<p style="margin:0.1rem 0px;line-height:1">Maybe some help given in authortime but not any sort of</p>
<p style="margin:0.1rem 0px;line-height:1">enumerated error except undefined in runtime since this visual effect;</p>
<p style="margin:0.1rem 0px;line-height:1">it is just an artifact of bad data. </p>
<p style="margin:0.1rem 0px;line-height:1">Esp likey when deformable face is actually composed of multiple shapes</p>
<p style="margin:0.1rem 0px;line-height:1">and they must blend regardless of the combinations of shapes</p>
<p style="margin:0.1rem 0px;line-height:1">that move to make the motion for a pose.  </p>
<p style="margin:0.1rem 0px;line-height:1">Always? much easier with single basic mesh for the face and and then</p>
<p style="margin:0.1rem 0px;line-height:1">add features and accessories animated individually?  </p>
<p style="margin:0.1rem 0px;line-height:1">          </p>
<p style="margin:0.1rem 0px;line-height:1">One of the limitations with Displacer is that it is just a single scaled 3D vector,</p>
<p style="margin:0.1rem 0px;line-height:1">meaning it has a fixed relative direction regardless of the weight applied. </p>
<p style="margin:0.1rem 0px;line-height:1">When a curved displacement is required, then point motion can be</p>
<p style="margin:0.1rem 0px;line-height:1">controlled using joint rotation, like the eyeball.</p>
<p style="margin:0.1rem 0px;line-height:1">In some cases,<span style="font-size:12pt">a </span>CoordinateInterpolator<span style="font-size:12pt"> may be </span><span style="font-size:12pt">used to </span><span style="font-size:12pt">move points</span><span style="font-size:12pt"> around. </span></p>
<p style="margin:0.1rem 0px;line-height:1"><span style="font-size:12pt">Texture position and rotation can be animated. </span></p>
<p style="margin:0.1rem 0px;line-height:1">   </p>
<p style="margin:0.1rem 0px;line-height:1">Since all these Displacer nodes have been produced by finding the</p>
<p style="margin:0.1rem 0px;line-height:1">simple 3D vector difference between the first and last data point </p>
<p style="margin:0.1rem 0px;line-height:1">of a source CoordinateInterpolator it is likely that some displacements</p>
<p style="margin:0.1rem 0px;line-height:1">do not produce exact same movement of a point just because the</p>
<p style="margin:0.1rem 0px;line-height:1">original interpolator keyValue keyframe data points described a curved path. </p>
<p style="margin:0.1rem 0px;line-height:1">    </p>
<p style="margin:0.1rem 0px;line-height:1">Sure, we can update the 3D vector direction each frame if we want to,</p>
<p style="margin:0.1rem 0px;line-height:1">but I would like to see a Displacer which could use multiple sets of vectors  </p>
<p style="margin:0.1rem 0px;line-height:1">interpolated to produce computed keyframes like other interpolators.</p>
<p style="margin:0.1rem 0px;line-height:1">For each point there could be a set of vectors where the output value for</p>
<p style="margin:0.1rem 0px;line-height:1">point movement is the result of interpolation between</p>
<p style="margin:0.1rem 0px;line-height:1">adjacent key time (weight) keyValue 3D vectors.</p>
<p style="margin:0.1rem 0px;line-height:1">   </p>
<p style="margin:0.1rem 0px;line-height:1">So, more fun with x3d HAnim </p>
<p style="margin:0.1rem 0px;line-height:1">Thanks, </p>
<p style="margin:0.1rem 0px;line-height:1">Joe</p>
<p style="margin:0.1rem 0px;line-height:1"> </p>
<p style="margin:0.1rem 0px;line-height:1"> </p>
</div>
<div style="border-left:1px solid rgb(170,170,170);box-sizing:border-box;padding:10px 0px 10px 15px;margin:0px">
<p>-----Original Message-----<br>From: Extensible 3D (X3D) Graphics public discussion <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>><br>Sent: Feb 12, 2025 9:11 AM<br>To: X3D Graphics public mailing list <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>><br>Cc: Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" target="_blank">andreasplesch@gmail.com</a>><br>Subject: Re: [x3d-public] Displacer and normals ?</p>
<p style="margin:0.1rem 0px;line-height:1"> </p>
<div dir="ltr">
<div class="gmail_quote">
<div> </div>
<div>Responses below:</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Date: Tue, 11 Feb 2025 15:58:40 -0600<br>From: John Carlson <<a href="mailto:yottzumm@gmail.com" rel="noopener" target="_blank">yottzumm@gmail.com</a>><br>To: "Extensible 3D (X3D) Graphics public discussion"<br>        <<a href="mailto:x3d-public@web3d.org" rel="noopener" target="_blank">x3d-public@web3d.org</a>><br>Subject: Re: [x3d-public] Displacer and normals ?<br><br>Did you get the black tongue effect?  I?ve seen that in Sunrize, and<br>reported it there.  Holger had a response about providing normals.</blockquote>
<div> </div>
<div>I found <a href="https://github.com/create3000/sunrize/issues/9" target="_blank">https://github.com/create3000/sunrize/issues/9</a></div>
<div> </div>
<div>Yes, I think this is similar. x-ite/sunrize just may not automatically recalculate normals for performance reasons which in some cases may be beneficial by avoiding the effects of degenerate triangles.</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">The displacers were taken from CoordinateInterpolators in the<br>HumanoidAnimation/FacialAnimation X3D archive.<br><a href="https://www.web3d.org/x3d/content/examples/HumanoidAnimation/FacialAnimation/index.html" rel="noopener noreferrer" target="_blank">https://www.web3d.org/x3d/content/examples/HumanoidAnimation/FacialAnimation/index.html</a><br>Perhaps we could derive normals from those examples, realizing only one set<br>of meshes is chosen for the final version.<br><br>It?s relevant, because I will be providing a unified skin mesh for FACS,<br>and it would be nice to provide normals.</blockquote>
<div> </div>
<div>I noticed the effect actually only in combined displacers/morphers, eg. the Contempt combo. That brings up the future question of how pre-computed normals from multiple displacers may be combined, maybe just by averaging the slerped orientation from each.</div>
<div>There may have been studies on how to best recombine facial subexpressions for a valid result.</div>
<div> </div>
<div>-Andreas</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>On Tue, Feb 11, 2025 at 3:41?PM Andreas Plesch via x3d-public <<br><a href="mailto:x3d-public@web3d.org" rel="noopener" target="_blank">x3d-public@web3d.org</a>> wrote:<br><br>> I noticed that some displacers cause degenerate or flipped triangles which<br>> may cause rendering problems, mostly due to problems calculating<br>> automatically a good normal vector.<br>><br>> In general, for best rendering results, it is necessary to provide<br>> precomputed normals. rather than rely on automatic normal calculations. Was<br>> there a discussion on how to have displacers provide precomputed normals<br>> along with the displacement of the vertices ? That  would help with<br>> rendering quality, and may be necessary for some use cases.<br>><br>> This may be deemed a long term feature to consider.<br>><br>> Perhaps an idea would be a MFRotation normalRotations field which has the<br>> rotation required to rotate the normal (per vertex, or perhaps per face)<br>> from the rest orientation to the final orientation. Weights are applied<br>> with slerp. For animation authors it would be probably easier to be able to<br>> just directly provide the final orientation.<br>><br>> Any feedback or comment much welcome, -Andreas<br>><br>><br>> --<br>> Andreas Plesch<br>> Waltham, MA 02453<br>> _______________________________________________<br>> x3d-public mailing list<br>> <a href="mailto:x3d-public@web3d.org" rel="noopener" target="_blank">x3d-public@web3d.org</a><br>> <a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" rel="noopener noreferrer" target="_blank">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br>><br>-------------- next part --------------<br>An HTML attachment was scrubbed...<br>URL: <<a href="http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20250211/a4be3c1a/attachment-0001.html" rel="noopener noreferrer" target="_blank">http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20250211/a4be3c1a/attachment-0001.html</a>><br><br>------------------------------<br><br>Message: 3<br>Date: Wed, 12 Feb 2025 11:27:59 -0500<br>From: Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" rel="noopener" target="_blank">andreasplesch@gmail.com</a>><br>To: John Carlson <<a href="mailto:yottzumm@gmail.com" rel="noopener" target="_blank">yottzumm@gmail.com</a>><br>Cc: Holger Seelig <<a href="mailto:holger.seelig@yahoo.de" rel="noopener" target="_blank">holger.seelig@yahoo.de</a>>,  X3D Graphics public<br>        mailing list <<a href="mailto:x3d-public@web3d.org" rel="noopener" target="_blank">x3d-public@web3d.org</a>>, Joe D Williams<br>        <<a href="mailto:joedwil@earthlink.net" rel="noopener" target="_blank">joedwil@earthlink.net</a>><br>Subject: Re: [x3d-public] Turning on and off simultaneous animations<br>        individually<br>Message-ID:<br>        <<a href="mailto:CAKdk67vXRSz1pM4QLjcxuCQHfjY4LUT924cSmX7rPAasroPUCw@mail.gmail.com" rel="noopener" target="_blank">CAKdk67vXRSz1pM4QLjcxuCQHfjY4LUT924cSmX7rPAasroPUCw@mail.gmail.com</a>><br>Content-Type: text/plain; charset="utf-8"<br><br>Hi,<br><br>I took a first stab at Displacers in Segments for x3dom and use it now in<br>the editor:<br><br><a href="https://andreasplesch.github.io/Library/Viewer/index.html?url=https://raw.githubusercontent.com/coderextreme/ci2had/refs/heads/main/resources/ManyClocks.x3d" rel="noopener noreferrer" target="_blank">https://andreasplesch.github.io/Library/Viewer/index.html?url=https://raw.githubusercontent.com/coderextreme/ci2had/refs/heads/main/resources/ManyClocks.x3d</a><br><br>This is experimental and mostly for testing purposes. If there is an<br>example combining Displacers in both Joints and Segments that would be<br>interesting as it is not necessarily expected to work.<br>The experimental implementation is inefficient and expensive as it is<br>weight_changed event driven. If you activate multiple displacers the frame<br>rate starts to drop. It probably is not very useful at this point.<br><br>Fee free to give it a try, -Andreas<br><br>On Wed, Feb 5, 2025, 4:11?PM Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" rel="noopener" target="_blank">andreasplesch@gmail.com</a>> wrote:<br><br>> Hi John,<br>><br>> Thanks. I found the tongue.x3d example but if you can create another one<br>> that would be helpful in general.<br>><br>> You vastly overestimate my ability and availability ;) This would be a<br>> longer term project. I have an idea what to do.<br>><br>> Andreas<br>><br>><br>> On Wed, Feb 5, 2025, 1:31?PM John Carlson <<a href="mailto:yottzumm@gmail.com" rel="noopener" target="_blank">yottzumm@gmail.com</a>> wrote:<br>><br>>> I had one I sent to Holger, probably derived from this one:<br>>><br>>><br>>> <a href="https://github.com/coderextreme/ci2had/blob/main/resources/JinMouthStretch.x3d" rel="noopener noreferrer" target="_blank">https://github.com/coderextreme/ci2had/blob/main/resources/JinMouthStretch.x3d</a><br>>><br>>><br>>> What I would do (again) is take out all the segments but the tongue.<br>>><br>>> There?s no menus involved in this one.<br>>><br>>> If you need further assistance, like a smaller example, I can help.  Also<br>>> all the Jin*.x3d FACS action units can also provide examples.<br>>><br>>> I?ll be pretty unbusy today.  I can allocate some time for creating a<br>>> model, make sure it animates, etc.<br>>><br>>> If you?re able to allocate some time today, great, we have an HAnim<br>>> meeting tomorrow and showing off X3DOM editor using Displacers would be<br>>> fantastic!<br>>><br>>> Remember there?s a coord field in HAnimSegment that the HAnimDisplacer<br>>> operates on!<br>>><br>>> John<br>>><br>>> On Wed, Feb 5, 2025 at 12:01?PM Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" rel="noopener" target="_blank">andreasplesch@gmail.com</a>><br>>> wrote:<br>>><br>>>> Hi John,<br>>>><br>>>> The reason is that Displacers are currently implemented in x3dom only<br>>>> for Joints, but not for Segments, unfortunately. Do you know of a simple<br>>>> but instructive test case of Segments with Displacers ?<br>>>><br>>>> Andreas<br>>>><br>>>><br>>>> On Tue, Feb 4, 2025, 2:33?PM John Carlson <<a href="mailto:yottzumm@gmail.com" rel="noopener" target="_blank">yottzumm@gmail.com</a>> wrote:<br>>>><br>>>>> I will try to test this in castle model converter.<br>>>>><br>>>>> I did try setting a value for the outputOnly fields, but the converter<br>>>>> wouldn?t shut up.<br>>>>><br>>>>> The model below doesn?t seem to animate when one presses the menu<br>>>>> items.  Did you get it to animate?<br>>>>><br>>>>> On Tue, Feb 4, 2025 at 12:27?PM Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" rel="noopener" target="_blank">andreasplesch@gmail.com</a>><br>>>>> wrote:<br>>>>><br>>>>>> Hi John, all,<br>>>>>><br>>>>>> It turns out that x3dom currently expects a default value for Proto<br>>>>>> fields even for outputOnly fields. This is due to how Proto fields are<br>>>>>> initialized. They always need to have a value. While the spec. does not<br>>>>>> require this, it seems still good practice to always define a default value<br>>>>>> in the ProtoInterface. There may be a case where an outputOnly field is<br>>>>>> used in ISing where a valid value would be expected. There may be other<br>>>>>> corner cases.<br>>>>>><br>>>>>> Here is your example with added default values for outputOnly fields:<br>>>>>><br>>>>>><br>>>>>> <a href="https://andreasplesch.github.io/Library/Viewer/index.html?url=https://gist.githubusercontent.com/andreasplesch/af5ff3148c1159f71d34fb78c1f63024/raw/b3d4470107ab74e301ed48448ab2a4f4154672e0/ManyClocks_John.x3d" rel="noopener noreferrer" target="_blank">https://andreasplesch.github.io/Library/Viewer/index.html?url=https://gist.githubusercontent.com/andreasplesch/af5ff3148c1159f71d34fb78c1f63024/raw/b3d4470107ab74e301ed48448ab2a4f4154672e0/ManyClocks_John.x3d</a><br>>>>>><br>>>>>> This could be fixed in x3dom, by always setting some default value. Is<br>>>>>> there a list of recommended defaults for each data type if no other source<br>>>>>> of defaults is available? For SFTime it seems to be -1.<br>>>>>><br>>>>>><br>>>>>> -Andreas<br>>>>>><br>>>>>><br>>>>>> On Mon, Feb 3, 2025 at 7:39?AM Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" rel="noopener" target="_blank">andreasplesch@gmail.com</a>><br>>>>>> wrote:<br>>>>>><br>>>>>>> Hi John,<br>>>>>>><br>>>>>>> On Mon, Feb 3, 2025 at 12:48?AM John Carlson <<a href="mailto:yottzumm@gmail.com" rel="noopener" target="_blank">yottzumm@gmail.com</a>><br>>>>>>> wrote:<br>>>>>>><br>>>>>>>> Andreas, "startTime" is an accessType outputOnly field, so why do I<br>>>>>>>> need to provide a value attribute in fieldValue?  I'm kind of confused.<br>>>>>>>> I'm probably missing something in the spec.<br>>>>>>>><br>>>>>>><br>>>>>>> You are right, I only outlined scenarios where the accessType allows<br>>>>>>> input or initialization..<br>>>>>>> In the outputOnly case it is not necessary to provide a fieldValue<br>>>>>>> node at all since there is no value which can be provided. Providing the<br>>>>>>> node would indeed be confusing, to both the user code reader and any X3D<br>>>>>>> browser.<br>>>>>>> I believe the spec. is silent on this case in any encoding.<br>>>>>>><br>>>>>>> Best, Andreas<br>>>>>>><br>>>>>>> Thanks for any clarification.<br>>>>>>>><br>>>>>>>> I have finally enabled schematron on the project, but I'm finding it<br>>>>>>>> hard to understand the messages, and modifications that I make, while<br>>>>>>>> removing the immediate problems, seem to move the problems elsewhere.<br>>>>>>>><br>>>>>>>> Explaining why I need a "startTime" fieldValue value is my main lack<br>>>>>>>> of understanding, but perhaps I need a whole review of accessType.<br>>>>>>>><br>>>>>>>> Castle Model Converter reports:<br>>>>>>>><br>>>>>>>> castle-model-converter: Warning: X3D: X3D XML: <fieldValue> element<br>>>>>>>> references unknown field name "enabled"<br>>>>>>>> castle-model-converter: Warning: X3D: X3D XML: <fieldValue> element<br>>>>>>>> references unknown field name "startTime"<br>>>>>>>> castle-model-converter: Warning: X3D: X3D XML: <fieldValue> element<br>>>>>>>> references unknown field name "stopTime"<br>>>>>>>><br>>>>>>>> I will try providing a field value in the ProtoInterface<br>>>>>>>><br>>>>>>>> If I "cleanup" enabled, startTime and stopTime, I get:<br>>>>>>>><br>>>>>>>> castle-model-converter: Warning: VRML/X3D: Within prototype<br>>>>>>>> "MenuItem", event "inputTrue" references (by "IS" clause) non-existing<br>>>>>>>> event "enabled"<br>>>>>>>> castle-model-converter: Warning: VRML/X3D: Within prototype<br>>>>>>>> "MenuItem", event "triggerTime" references (by "IS" clause) non-existing<br>>>>>>>> event "startTime"<br>>>>>>>> castle-model-converter: Warning: VRML/X3D: Within prototype<br>>>>>>>> "MenuItem", event "triggerTime" references (by "IS" clause) non-existing<br>>>>>>>> event "stopTime"<br>>>>>>>><br>>>>>>>> I guess what I conclude at this point is, startTime and stopTime are<br>>>>>>>> bad DEF names, but what about enabled as a field?  The dominoes are falling.<br>>>>>>>><br>>>>>>>> About your two scenarios in the other message, perhaps this is<br>>>>>>>> revealing.<br>>>>>>>><br>>>>>>>> See attached attempt to fix original issue, which resulted in the<br>>>>>>>> above.<br>>>>>>>><br>>>>>>>> John<br>>>>>>>><br>>>>>>>> On Sun, Feb 2, 2025 at 3:59?PM Andreas Plesch <<br>>>>>>>> <a href="mailto:andreasplesch@gmail.com" rel="noopener" target="_blank">andreasplesch@gmail.com</a>> wrote:<br>>>>>>>><br>>>>>>>>> I think x3dom, reasonably, expects a value for the fieldValue nodes:<br>>>>>>>>><br>>>>>>>>> For example:<br>>>>>>>>><br>>>>>>>>> <fieldValue name="startTime" /><br>>>>>>>>><br>>>>>>>>> and others.<br>>>>>>>>><br>>>>>>>>> On Sun, Feb 2, 2025 at 5:42?AM John Carlson <<a href="mailto:yottzumm@gmail.com" rel="noopener" target="_blank">yottzumm@gmail.com</a>><br>>>>>>>>> wrote:<br>>>>>>>>><br>>>>>>>>>> Andreas, Joe,<br>>>>>>>>>><br>>>>>>>>>> Reset Button, Reset_Clock added.<br>>>>>>>>>><br>>>>>>>>>> See attached zip for details, or visit link;<br>>>>>>>>>><br>>>>>>>>>><br>>>>>>>>>> <a href="https://create3000.github.io/x_ite/playground/?url=https://raw.githubusercontent.com/coderextreme/ci2had/refs/heads/main/resources/CleanedYouClocks.x3d" rel="noopener noreferrer" target="_blank">https://create3000.github.io/x_ite/playground/?url=https://raw.githubusercontent.com/coderextreme/ci2had/refs/heads/main/resources/CleanedYouClocks.x3d</a><br>>>>>>>>>><br>>>>>>>>>> For some reason, this link doesn't show the live scene?<br>>>>>>>>>><br>>>>>>>>>><br>>>>>>>>>> <a href="https://andreasplesch.github.io/Library/Viewer/index.html?url=https://raw.githubusercontent.com/coderextreme/ci2had/refs/heads/main/resources/CleanedYouClocks.x3d" rel="noopener noreferrer" target="_blank">https://andreasplesch.github.io/Library/Viewer/index.html?url=https://raw.githubusercontent.com/coderextreme/ci2had/refs/heads/main/resources/CleanedYouClocks.x3d</a><br>>>>>>>>>><br>>>>>>>>>> Puzzled, haven't researched it yet.  Looks good in Sunrize and<br>>>>>>>>>> X_ITE, will try FreeWRL next.<br>>>>>>>>>><br>>>>>>>>>> John<br>>>>>>>>>><br>>>>>>>>>>><br>>>>>>>>><br>>>>>>>>> --<br>>>>>>>>> Andreas Plesch<br>>>>>>>>> Waltham, MA 02453<br>>>>>>>>><br>>>>>>>><br>>>>>>><br>>>>>>> --<br>>>>>>> Andreas Plesch<br>>>>>>> Waltham, MA 02453<br>>>>>>><br>>>>>><br>>>>>><br>>>>>> --<br>>>>>> Andreas Plesch<br>>>>>> Waltham, MA 02453<br>>>>>><br>>>>><br>-------------- next part --------------<br>An HTML attachment was scrubbed...<br>URL: <<a href="http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20250212/6f37d6ce/attachment.html" rel="noopener noreferrer" target="_blank">http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20250212/6f37d6ce/attachment.html</a>><br><br>------------------------------<br><br>Subject: Digest Footer<br><br>_______________________________________________<br>x3d-public mailing list<br><a href="mailto:x3d-public@web3d.org" rel="noopener" target="_blank">x3d-public@web3d.org</a><br><a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" rel="noopener noreferrer" target="_blank">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br><br><br>------------------------------<br><br>End of x3d-public Digest, Vol 191, Issue 57<br>*******************************************</blockquote>
</div>
<div> </div>
<br><span class="gmail_signature_prefix">-- </span><br>
<div class="gmail_signature" dir="ltr">
<div dir="ltr">
<div>Andreas Plesch<br>Waltham, MA 02453</div>
</div>
</div>
</div>
</div>

<p style="margin:0.1rem 0px;line-height:1"> </p></blockquote></div><div><br clear="all"></div><br><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div>Andreas Plesch<br>Waltham, MA 02453</div></div></div></div>