<div style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:12pt"><p style="margin: 0.1rem 0; line-height: 1.0;">Choice of IFS or ITS could be a choice of Profile.</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">IFS is simple profile, rendering 1 for IFS and rendering 3 for ITS.</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Joe</p>
</div>
<div class="elnk-inline-message-container" style="border-left: 1px solid #aaa; box-sizing: border-box; padding: 10px 0 10px 15px; margin: 0;">
<p>-----Original Message-----<br>From: Michalis Kamburelis via x3d-public <x3d-public@web3d.org><br>Sent: Apr 8, 2026 1:17 PM<br>To: Holger Seelig <holger.seelig@yahoo.de><br>Cc: Michalis Kamburelis <michalis@castle-engine.io>, Extensible 3D (X3D) Graphics public discussion <x3d-public@web3d.org><br>Subject: Re: [x3d-public] InlineGeometry node and PLY format support in Castle Game Engine</p>
<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>
<div style="font-family: Arial, sans-serif; font-size: 14px;">Hm, good point about the geometry type and so, the creaseAngle not being that much useful...</div>
<div style="font-family: Arial, sans-serif; font-size: 14px;"> </div>
<div style="font-family: Arial, sans-serif; font-size: 14px;">Indeed the difference in look between X_ITE and CGE is then because of different geometry choice.</div>
<div style="font-family: Arial, sans-serif; font-size: 14px;"> </div>
<div style="font-family: Arial, sans-serif; font-size: 14px;">
<ul style="margin-top: 0px; margin-bottom: 0px;" data-editing-info="{"orderedStyleType":1,"unorderedStyleType":2}">
<li style="list-style-type: '- ';">Castle Game Engine converts PLY mesh into IndexedFaceSet, where the creaseAngle (default 0, so flat shading) decides the look. I've done it because PLY meshes have polygons and we have already handling for possibly-concave polygons (which I understand PLY may have) at IndexedFaceSet. So we generate PLY -> IndexedFaceSet, set IndexedFaceSet.convex=FALSE, and we're done.</li>
</ul>
<div> </div>
<ul style="margin-top: 0px; margin-bottom: 0px;" data-editing-info="{"orderedStyleType":1,"unorderedStyleType":2}">
<ul style="margin-top: 0px; margin-bottom: 0px; list-style-type: circle;">
<li>( To be clear, this decision is not set in stone. My past experience with e.g. terrains showed that sometimes changing the generated primitive/geometry type is useful, for unforeseen reasons :) So this is _not_ a guarantee that CGE will always read PLY to IndexedFaceSet, and not e.g. IndexedTriangleSet. )</li>
</ul>
</ul>
</div>
<div style="font-family: Arial, sans-serif; font-size: 14px;"> </div>
<div style="font-family: Arial, sans-serif; font-size: 14px;">
<ul style="margin-top: 0px; margin-bottom: 0px;" data-editing-info="{"orderedStyleType":1,"unorderedStyleType":2}">
<li style="list-style-type: '- ';">If X_ITE converts PLY mesh into IndexedTriangleSet, then creaseAngle doesn't exist (IndexedTriangleSet.normalPerVertex decides, and it's either all flat or all smooth).</li>
</ul>
</div>
<div class="protonmail_signature_block protonmail_signature_block-empty" style="font-family: Arial, sans-serif; font-size: 14px;">
<div class="protonmail_signature_block-user protonmail_signature_block-empty"> </div>
<div class="protonmail_signature_block-proton protonmail_signature_block-empty"> </div>
</div>
<div style="font-family: Arial, sans-serif; font-size: 14px;"> </div>
<div style="font-family: Arial, sans-serif; font-size: 14px;">Indeed we're not going to reconcile this with creaseAngle.</div>
<div style="font-family: Arial, sans-serif; font-size: 14px;"> </div>
<div style="font-family: Arial, sans-serif; font-size: 14px;">I think in the end, it comes down to the underlying formats -- is there any spec, or just a hint / consensus, how should normals for PLY models be generated? Does everyone create smooth meshes then, like X_ITE? If the consensus is to generate smooth normals -> then the fix is just on CGE side, we can trivially change our PLY -> IndexedFaceSet to set creaseAngle>=pi and then CGE and X_ITE will be consistent. Seems like this is the simplest way to go :)</div>
<div style="font-family: Arial, sans-serif; font-size: 14px;"> </div>
<div style="font-family: Arial, sans-serif; font-size: 14px;">Hm, done in <a href="https://github.com/castle-engine/castle-engine/commit/bbbfc016ed179b2009cf8194dd692b81adf1f6e3" target="_blank" rel="noreferrer nofollow noopener">https://github.com/castle-engine/castle-engine/commit/bbbfc016ed179b2009cf8194dd692b81adf1f6e3</a> :) PLY teapot from <a href="https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/AdditiveManufacturing/TeapotInlineGeometryPlyIndex.html" target="_blank" rel="noreferrer nofollow noopener">https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/AdditiveManufacturing/TeapotInlineGeometryPlyIndex.html</a> is now smooth in our rendering.</div>
<div style="font-family: Arial, sans-serif; font-size: 14px;"> </div>
<div style="font-family: Arial, sans-serif; font-size: 14px;">Regards,</div>
<div style="font-family: Arial, sans-serif; font-size: 14px;">Michalis</div>
<div style="font-family: Arial, sans-serif; font-size: 14px;"> </div>
<div style="font-family: Arial, sans-serif; font-size: 14px;"> </div>
<div class="protonmail_quote">On Wednesday, April 8th, 2026 at 21:00, Holger Seelig <holger.seelig@yahoo.de> wrote:<br>
<blockquote class="protonmail_quote">
<div>If the teapot is faceted in Castle, it’s more likely because a different geometry was used. X_ITE converts the PLY teapot into an IndexedTriangleSet, which, as mentioned earlier, does not have a creaseAngle field.</div>
<div> </div>
<div>If InlineGeometry has a creaseAngle field, it gives the impression that the creaseAngle can be set for the loaded geometry, but this is only possible in the rarest of cases.</div>
<div> </div>
<div>Best regards,</div>
<div>Holger</div>
<div> </div>
<div>
<div dir="auto" style="caret-color: #000000; color: #000000; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div dir="auto" style="caret-color: #000000; color: #000000; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div dir="auto" style="caret-color: #000000; color: #000000; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div dir="auto" style="caret-color: #000000; color: #000000; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div dir="auto" style="caret-color: #000000; color: #000000; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div dir="auto" style="caret-color: #000000; color: #000000; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div dir="auto" style="caret-color: #000000; color: #000000; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div dir="auto" style="caret-color: #000000; color: #000000; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div dir="auto" style="caret-color: #000000; color: #000000; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div dir="auto" style="caret-color: #000000; color: #000000; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div dir="auto" style="text-align: start; text-indent: 0px; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div style="caret-color: #000000; color: #000000; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; -webkit-text-stroke-width: 0px;">—</div>
<div style="caret-color: #000000; color: #000000; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; -webkit-text-stroke-width: 0px;">Holger Seelig<br>holger.seelig@yahoo.de<br><br></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div><br>
<blockquote>
<div>Am 08.04.2026 um 20:49 schrieb Holger Seelig via x3d-public <x3d-public@web3d.org>:</div>
<div>
<div style="overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div>I would like to point out that only 4 of the 32 X3DGeometryNode's have a creaseAngle field. On the other hand, why is creaseAngle preferred here? The solid field or ccw can also be useful, but they are not available on all X3DGeometryNode's either.</div>
<div> </div>
<div>Best regards,</div>
<div>Holger</div>
<div> </div>
<div>
<div dir="auto" style="caret-color: #000000; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div dir="auto" style="caret-color: #000000; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div dir="auto" style="caret-color: #000000; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div dir="auto" style="caret-color: #000000; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div dir="auto" style="caret-color: #000000; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div dir="auto" style="caret-color: #000000; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div dir="auto" style="caret-color: #000000; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div dir="auto" style="caret-color: #000000; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div dir="auto" style="caret-color: #000000; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div dir="auto" style="caret-color: #000000; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div dir="auto" style="text-align: start; text-indent: 0px; overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
<div style="caret-color: #000000; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; -webkit-text-stroke-width: 0px;">—</div>
<div style="caret-color: #000000; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; -webkit-text-stroke-width: 0px;">Holger Seelig<br>holger.seelig@yahoo.de<br><br></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div><br>
<blockquote>
<div>Am 08.04.2026 um 18:13 schrieb Michalis Kamburelis via x3d-public <x3d-public@web3d.org>:</div>
<div>
<div style="font-family: Arial, sans-serif; font-size: 14px;">Confirming Don's observations -- the difference in rendering of Teapot from PLY in <a href="https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/AdditiveManufacturing/TeapotInlineGeometryPlyIndex.html" target="_blank" rel="noreferrer nofollow noopener">https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/AdditiveManufacturing/TeapotInlineGeometryPlyIndex.html</a> seems to come from difference in creaseAngle. </div>
<div style="font-family: Arial, sans-serif; font-size: 14px;"> </div>
<div style="font-family: Arial, sans-serif; font-size: 14px;">In Castle Game Engine, when we load PLY -> we leave "IndexedFaceSet.creaseAngle" at default in X3D, which is 0, which results in flat shading ( <a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD/Part01/components/geometry3D.html#IndexedFaceSet" target="_blank" rel="noreferrer nofollow noopener">https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD/Part01/components/geometry3D.html#IndexedFaceSet</a> ).</div>
<div style="font-family: Arial, sans-serif; font-size: 14px;"> </div>
<div style="font-family: Arial, sans-serif; font-size: 14px;">Note that PLY files _can_ provide their own, explicit normal vectors. In which case there would be non inconsistency. But, well, this PLY model ( <a href="https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/AdditiveManufacturing/teapot.ply" target="_blank" rel="noreferrer nofollow noopener">https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/AdditiveManufacturing/teapot.ply</a> ) does not provide normals. It only has vertex positions.</div>
<div style="font-family: Arial, sans-serif; font-size: 14px;"> </div>
<div style="font-family: Arial, sans-serif; font-size: 14px;">Introducing "InlineGeometry.creaseAngle" makes sense to me. </div>
<div style="font-family: Arial, sans-serif; font-size: 14px;"> </div>
<div style="font-family: Arial, sans-serif; font-size: 14px;">Internally, I would also allow loading options as URL anchor, so one could load "xxx.ply#crease-angle=123" thus it would be possible to influence creaseAngle also for models loaded through "Inline", like """Inline { url "model.ply#crease-angle=123" />"""</div>
<div style="font-family: Arial, sans-serif; font-size: 14px;"> </div>
<div style="font-family: Arial, sans-serif; font-size: 14px;">Compared to Don prose, I would say to allow an option to _don't change the underlying value (or browser default)_. Because when we inline e.g. X3D geometry, then (possibly) it already has a useful creaseAngle? So I would define it like:</div>
<div style="font-family: Arial, sans-serif; font-size: 14px;"> </div>
<div style="font-family: Arial, sans-serif; font-size: 14px;">"""</div>
<div style="font-family: Arial, sans-serif; font-size: 14px;">InlineGeometry {</div>
<div style="font-family: Arial, sans-serif; font-size: 14px;">...</div>
<div style="font-family: Arial, sans-serif; font-size: 14px;">creaseAngle initializeOnly -1 </div>
<div style="font-family: Arial, sans-serif; font-size: 14px;">}</div>
<div style="font-family: Arial, sans-serif; font-size: 14px;"> </div>
<div style="font-family: Arial, sans-serif; font-size: 14px;">creaseAngle determines the the automatic calculation of normal vectors for the imported geometry. It is only used if all of the below are true:</div>
<div style="font-family: Arial, sans-serif; font-size: 14px;">
<ol style="margin-top: 0px; margin-bottom: 0px;" data-editing-info="{"orderedStyleType":1,"unorderedStyleType":1}" data-listchain="__List_Chain_213">
<li style="list-style-type: '1. ';">Given creaseAngle is >= 0. The default, -1, means to use creaseAngle specified in the imported model (if the format of it allows creaseAngle, like X3D allows) or browser-specific default.</li>
<li style="list-style-type: '2. ';">Imported geometry results in X3D geometry with creaseAngle, e.g. in IndexedFaceSet. For other geometry types, like PointSet, creaseAngle is ignored.</li>
<li style="list-style-type: '3. ';">Imported geometry doesn't have explicit normal values. E.g. if PLY file has explicit normal provided, then these are used, and the creaseAngle value doesn't matter.<br><br></li>
</ol>
<div>"""</div>
<div> </div>
<div>Regards,</div>
<div>Michalis</div>
</div>
<div class="protonmail_signature_block protonmail_signature_block-empty" style="font-family: Arial, sans-serif; font-size: 14px;">
<div class="protonmail_signature_block-user protonmail_signature_block-empty"> </div>
<div class="protonmail_signature_block-proton protonmail_signature_block-empty"> </div>
</div>
<div class="protonmail_quote">On Tuesday, April 7th, 2026 at 23:52, Don Brutzman <don.brutzman@gmail.com> wrote:<br>
<blockquote class="protonmail_quote">
<div dir="ltr">
<div dir="ltr">
<div>Thanks for references Michalis. Here is an example test scene.</div>
<div>
<ul>
<li>X3D Example Archives: X3D4AM, X3D for Advanced Modeling, Additive Manufacturing, Teapot Inline Geometry Ply</li>
<li>Loading a classic teapot model in PLY format</li>
<li><a href="https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/AdditiveManufacturing/TeapotInlineGeometryPlyIndex.html" target="_blank" rel="noreferrer nofollow noopener">https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/AdditiveManufacturing/TeapotInlineGeometryPlyIndex.html</a></li>
</ul>
<div>Implementation and evaluation always helps... Note significant differences in rendering due to implicit choices for <em>creaseAngle</em>:</div>
</div>
<div>
<ul>
<li><a href="https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/AdditiveManufacturing/TeapotInlineGeometryPlyCastle.png" target="_blank" rel="noreferrer nofollow noopener">https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/AdditiveManufacturing/TeapotInlineGeometryPlyCastle.png</a></li>
<li><a href="https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/AdditiveManufacturing/TeapotInlineGeometryPlySunrize.png" target="_blank" rel="noreferrer nofollow noopener">https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/AdditiveManufacturing/TeapotInlineGeometryPlySunrize.png</a><span id="cid:ii_mnp503x10"><image.png></span> <span id="cid:ii_mnp50uge1"><image.png></span></li>
</ul>
<div>Currently the author has no settings to adjust the handling of the mesh.</div>
</div>
<div> </div>
<div>Suggestion: might we consider adding creaseAngle as a field for InlineGeometry node? It is defined in the specification as follows.</div>
<div>
<ul>
<li><a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/components/rendering.html#CommonGeometryFields" target="_blank" rel="noreferrer nofollow noopener">X3D Architecture 4.1 draft — ISO/IEC 19775-1:202x — 11 Rendering component</a> <a style="font-family: Verdana,Arial,Helvetica,sans-serif;" href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/components/rendering.html#CommonGeometryFields" target="_blank" rel="noreferrer nofollow noopener">11.2.3 Common geometry fields</a></li>
<li><a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/components/rendering.html#CommonGeometryFields" target="_blank" rel="noreferrer nofollow noopener">https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/components/rendering.html#CommonGeometryFields</a></li>
</ul>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left: 1px solid #cccccc; padding-left: 1ex;">The <em>creaseAngle</em> field affects how default normals are generated. If the angle between the geometric normals of two adjacent faces is less than the crease angle, normals shall be calculated so that the faces are shaded smoothly across the edge; otherwise, normals shall be calculated so that a lighting discontinuity across the edge is produced. Crease angles shall be greater than or equal to 0.0 angle base units.</blockquote>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left: 1px solid #cccccc; padding-left: 1ex;">EXAMPLE A crease angle of 0.5 angle base units means that an edge between two adjacent polygonal faces will be smooth shaded if the geometric normals of the two faces form an angle that is less than 0.5 angle base units. Otherwise, the faces will appear faceted.</blockquote>
</div>
<div> </div>
<div>However, typically an author has no idea on what might be an appropriate value, unless they do extensive sleuthing on an unchanging piece of geometry. Thus we might pick a default value for <em>creaseAngle</em> field that always results in smooth shading.</div>
<div>
<ul>
<li><span style="font-family: monospace;">SFFloat [ ] creaseAngle 3.14159 [0,+inf)</span></li>
</ul>
<div><span style="font-family: arial, sans-serif;">Further descriptions found in X3D tooltips.</span></div>
<ul>
<li><a href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#IndexedFaceSet.creaseAngle" target="_blank" rel="noreferrer nofollow noopener">X3D Tooltips in English version 4.0 (with X3D version 4.1 draft), IndexedFaceSet.creaseAngle</a></li>
<li><a href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#IndexedFaceSet.creaseAngle" target="_blank" rel="noreferrer nofollow noopener">https://www.web3d.org/x3d/tooltips/X3dTooltips.html#IndexedFaceSet.creaseAngle</a></li>
</ul>
<table style="font-family: 'Times New Roman'; font-size: medium;">
<tbody>
<tr align="left">
<td colspan="3" bgcolor="#eeffee"><span style="font-size: small;"><strong>[creaseAngle <a title="initializable field that does not send or receive events at run time" href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#accessType" target="_blank" rel="noreferrer nofollow noopener">accessType initializeOnly</a>, <a title="Single-Field float value" href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#SFFloat" target="_blank" rel="noreferrer nofollow noopener">type SFFloat</a> <a title="CDATA means Character Data plain text (DTD validation)" href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#CDATA" target="_blank" rel="noreferrer nofollow noopener">CDATA</a> "0"] <a title="Range interval" href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#RangeIntervals" target="_blank" rel="noreferrer nofollow noopener">[0,+∞)</a></strong><br>creaseAngle defines angle (in radians) for determining whether adjacent polygons are drawn with sharp edges or smooth shading. If angle between normals of two adjacent polygons is less than creaseAngle, smooth shading is rendered across the shared line segment.<br><span style="color: #447777;"><strong>Hint:</strong></span> in Interchange profile only 0 and π radians supported.<br><span style="color: #447777;"><strong>Hint:</strong></span> creaseAngle=0 means render all edges sharply, creaseAngle=3.14159 means render all edges smoothly.<br><span style="color: #447777;"><strong>Hint:</strong></span> radian units for angular measure <a href="https://en.wikipedia.org/wiki/Radian" target="_blank" rel="noreferrer nofollow noopener">https://en.wikipedia.org/wiki/Radian</a></span></td>
</tr>
</tbody>
</table>
</div>
<div><span style="font-family: monospace;">all the best, Don</span></div>
<div>
<div class="gmail_signature" dir="ltr">
<div dir="ltr">
<div style="color: #222222;"><span style="font-family: monospace;">-- </span></div>
<div style="color: #222222;"><span style="font-family: monospace;">X3D Graphics, Maritime Robotics, Distributed Simulation</span></div>
<div style="color: #222222;"><span style="font-family: monospace;">Relative Motion Consulting <a href="https://relativemotion.info/" target="_blank" rel="noreferrer nofollow noopener">https://RelativeMotion.info</a></span></div>
</div>
</div>
</div>
</div>
</div>
<br>
<div class="gmail_quote gmail_quote_container">
<div class="gmail_attr" dir="ltr">On Mon, Apr 6, 2026 at 5:26 PM Michalis Kamburelis <<a href="mailto:michalis@castle-engine.io" rel="noreferrer nofollow noopener">michalis@castle-engine.io</a>> wrote:</div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left: 1px solid #cccccc; padding-left: 1ex;">
<div style="font-family: Arial,sans-serif; font-size: 14px;">As for black points reported by John in some PLY files: Fixed.</div>
<div style="font-family: Arial,sans-serif; font-size: 14px;"> </div>
<div style="font-family: Arial,sans-serif; font-size: 14px;">I added to Castle Game Engine / Castle Model Viewer support for reading color values from PLY through alternative properties. Details and links to more explanation in commit <a href="https://github.com/castle-engine/castle-engine/commit/c6d9acc08aa7a20e991b140d1379e265ea496faf" target="_blank" rel="noreferrer nofollow noopener">https://github.com/castle-engine/castle-engine/commit/c6d9acc08aa7a20e991b140d1379e265ea496faf</a> . Screenshot attached.</div>
<div style="font-family: Arial,sans-serif; font-size: 14px;"> </div>
<div style="font-family: Arial,sans-serif; font-size: 14px;">Note: All this is doing is adding alternative way to read colors from PLY, which lands in X3D per-vertex colors (Color or ColorRGBA node).</div>
<div style="font-family: Arial,sans-serif; font-size: 14px;"> </div>
<div style="font-family: Arial,sans-serif; font-size: 14px;">I'm not entering the Gaussian Splat discussion in related thread(s) :), as I have to educate myself better about Gaussian Splats first. Tomorrow's Khronos lecture seems like a good opportunity to start learning.</div>
<div style="font-family: Arial,sans-serif; font-size: 14px;"> </div>
<div style="font-family: Arial,sans-serif; font-size: 14px;">Regards,</div>
<div style="font-family: Arial,sans-serif; font-size: 14px;">Michalis</div>
<div style="font-family: Arial,sans-serif; font-size: 14px;"> </div>
<div style="font-family: Arial,sans-serif; font-size: 14px;"> </div>
<div style="font-family: Arial,sans-serif; font-size: 14px;">
<div> </div>
<div> </div>
</div>
<div style="font-family: Arial,sans-serif; font-size: 14px;"> </div>
<div>On Monday, April 6th, 2026 at 20:49, John Carlson via x3d-public <<a href="mailto:x3d-public@web3d.org" target="_blank" rel="noreferrer nofollow noopener">x3d-public@web3d.org</a>> wrote:<br>
<blockquote>
<div dir="auto">Sorry I meant I was able to see black point clouds without color (Michalis apparently uses different properties?).<br>
<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">On Mon, Apr 6, 2026 at 1:00 PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank" rel="noreferrer nofollow noopener">yottzumm@gmail.com</a>> wrote:</div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left: 1px solid #cccccc; padding-left: 1ex;">
<div dir="auto">I agree that the PLYs that I worked with weren’t suitable for X3D. Either my parser was off, or there were negative color values, negative scales etc. I thought a second person could look at the same files and make better progress. I was able to view black points clouds (no clouds) from the PLY files in castle. I can probably change the property in the PLY file to achieve color in the point cloud. The point is, I don’t know if there’s standard PLY color properties.</div>
<div dir="auto"> </div>
<div dir="auto">Thanks,</div>
<div dir="auto"> </div>
<div dir="auto">John</div>
<div dir="auto"><br>
<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">On Mon, Apr 6, 2026 at 12:18 AM Don Brutzman <<a href="mailto:don.brutzman@gmail.com" target="_blank" rel="noreferrer nofollow noopener">don.brutzman@gmail.com</a>> wrote:</div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left: 1px solid #cccccc; padding-left: 1ex;">
<div dir="ltr">
<div>Thank you Michalis for implementing the draft InlineGeometry node. Having both Castle Game Engine and (already supporting) X_ITE/Playground/Sunrize is definitely accelerating our design, implementation and evaluation of LOA-5 bone segments for HAnim. Tests of your Castle Model Viewer beta release look good on this end.</div>
<div> </div>
<div>Repeating a prior reply: "Gaussian Splat PLYs" (whatever that means) does not seem like a good use of effort. There is a lot of ongoing developmental work on gaussian splat formats by various companies that are nonstandard, inconsistent, possibly unstable, and often proprietary. Some happen to use .ply as a container. A prudent approach is to wait and see what glTF does once things stabilize. Using Inline with glTF 2.0 (in json or glb) is already in X3D 4.0, extension support by browsers is optional, so that is a reasonable future path if consensus ever emerges.</div>
<div> </div>
<div>The draft X3D specification for InlineGeometry describes rationale and includes references for the PLY format.</div>
<div>
<ul>
<li style="font-size: 13.5424px; font-family: Verdana,Arial,Helvetica,sans-serif; margin-top: 4px;"><a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/components/networking.html#InlineGeometry" target="_blank" rel="noreferrer nofollow noopener">X3D Architecture 4.1 draft — ISO/IEC 19775-1:202x — 9 Networking component</a> <a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/components/networking.html#InlineGeometry" target="_blank" rel="noreferrer nofollow noopener"><span style="background-color: yellow;" title="Mantis 1522">9.4.3 InlineGeometry</span></a></li>
<li style="margin-top: 4px;"><span style="font-size: 13.5424px; font-family: Verdana, Arial, Helvetica, sans-serif;"><a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/components/networking.html#InlineGeometry" target="_blank" rel="noreferrer nofollow noopener">https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/components/networking.html#InlineGeometry</a></span>
<h2 style="margin-top: 18px;"><span style="font-family: monospace; font-size: small;">9.4.3 InlineGeometry</span></h2>
<pre style="margin-left: 25px;">InlineGeometry : X3DGeometryNode, X3DUrlObject {
SFTime [in,out] autoRefresh 0.0 [0,infinity)
SFTime [in,out] autoRefreshTimeLimit 3600.0 [0,infinity)
SFString [in,out] description ""
SFBool [in,out] load TRUE
SFNode [in,out] metadata NULL [X3DMetadataObject]
MFString [in,out] url [] [URI]
}
</pre>
<p><span style="font-family: monospace;">InlineGeometry loads geometry from an external file. The result provides a polygonal mesh, set of lines, point cloud, parametric surface, or other geometry.</span></p>
<p><span style="font-family: monospace;">The <em>url</em> field can support loading a variety of file formats defining polygonal mesh geometry. When the <em>url</em> field contains no values ([]), no default geometry is provided. <span style="background-color: yellow;" title="Mantis 1522">Required</span> <span style="background-color: orange; text-decoration-line: line-through;" title="Mantis 1522">Recommended</span> support by X3D browsers includes both ASCII and binary encodings for the STL format (see <a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/bibliography.html#STL" target="_blank" rel="noreferrer nofollow noopener">STL</a>) as well as the PLY polygonal geometry format (see <a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/bibliography.html#PLY" target="_blank" rel="noreferrer nofollow noopener">PLY</a>), respectively. Other file types can be optionally supported by a browser.<span style="background-color: lightcyan;"><br>TODO: consider "required support" of STL/PLY formats rather than "recommended support" since numerous open-source conversion implementations are available, no IPR considerations pertain, and STL/PLY formats are the primary use case.</span></span></p>
<p><span style="font-family: monospace;">If the <em>url</em> field refers to an X3D file or a VRML97 file, the first geometry node found in that file (excluding both prototype declarations and prototype instances) is used to provide the InlineGeometry contents. X3D browsers shall recognize <em>url</em> fields that end with "#<em>DEFname</em>" to mean the geometry node with DEF label of <em>DEFname</em> in the given X3D or VRML97 file.</span></p>
<p><span style="font-family: monospace;">The run-time system can support any number of 3D model resource types as long as those follow the available Model Primary Content Type for Multipurpose Internet Mail Extensions (MIME) model definition (see <a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/references.html#RFC2077" target="_blank" rel="noreferrer nofollow noopener">RFC2077</a>), provide a registered content type (e.g., model/stl, text/plain etc.) (see <a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/references.html#IANA_MEDIA" target="_blank" rel="noreferrer nofollow noopener">IANA_MEDIA</a> and <a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/references.html#IANA_STL" target="_blank" rel="noreferrer nofollow noopener">IANA_STL</a>), and can be determined with some form of content negotiation (see <span style="background-color: yellow;" title="IETF revision"><a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/references.html#RFC9110" target="_blank" rel="noreferrer nofollow noopener">RFC9110</a></span>). Support is recommended for both text and binary encodings associated with a given model format, when so defined.</span></p>
<p style="font-size: 14.4px; margin-top: 18px; margin-bottom: 18px;"><span style="font-family: monospace;">NOTE Experimental variations of PLY format used for Gaussian Splat rendering are not expected for InlineGeometry. Such capabilities are better supported by Inline node loading of glTF models.</span></p>
<p style="font-size: 14.4px; margin-top: 18px; margin-bottom: 18px;"><span style="font-family: monospace;">EXAMPLES </span></p>
<pre style="font-size: 11.05px;"> Shape {
geometry InlineGeometry { url [ "MyFavoriteMesh.stl" ] }
appearance USE FancyPaintAppearance # previously defined
}</pre>
<pre style="font-size: 11.05px;"> Shape {
geometry InlineGeometry { url [ "HelloWorld.x3d#TextMessage" ] }
appearance USE FancyPaintAppearance # previously defined
}</pre>
<div style="background-color: lightcyan;">
<p><span style="font-family: monospace;">Editors notes.</span></p>
<ul>
<li style="margin-top: 4px;"><span style="font-family: monospace;">Are better authoritative references possible for STL and PLY? See <a href="https://mantis.web3d.org/view.php?id=1522" target="_blank" rel="noreferrer nofollow noopener">Mantis 1522</a>.</span></li>
<li style="margin-top: 4px;"><span style="font-family: monospace;">InlineGeometry results differ from an Inline node, which produces an X3DChildNode scene subgraph implementing the X3DBoundedObject interface. An Inline node cannot be used as the <em>geometry</em> field of a Shape.</span></li>
<li style="margin-top: 4px;"><span style="font-family: monospace;">Results from browser loading may be any kind of polygonal mesh or parametric surface (e.g. IndexedFaceSet, TriangleSet, Extrusion, etc.) but cannot be further manipulated or animated by events from the scene.</span></li>
<li style="margin-top: 4px;"><span style="font-family: monospace;">Direct loading of such geometry files eliminates the need for prior model conversion into X3D, and adds flexibility when applying Appearance to the result.</span></li>
<li style="margin-top: 4px;"><span style="font-family: monospace;">The "#<em>DEFname</em>" syntax directly matches <a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/concepts.html#EXTERNPROTOURLSemantics" target="_blank" rel="noreferrer nofollow noopener">EXTERNPROTO URL semantics</a> considerations. Not requiring IMPORT/EXPORT statements provides greater backwards compatibility with legacy models, avoiding unnecessary complications and possible ambiguity.</span></li>
<li style="margin-top: 4px;"><span style="font-family: monospace;">Composition of online addresses and parameter values within a <em>url</em> field offers the possibility of invoking an online server to perform file-format conversions. See email thread <a href="https://web3d.org/pipermail/x3d-public_web3d.org/2026-March/022355.html" target="_blank" rel="noreferrer nofollow noopener">[x3d-public] Inline > type field > for loading / converting / parsing other content</a> for further discussion. Such additional functionality supports the use cases under consideration by Metaverse Standards Forum (MSF) <a href="https://metaverse-standards.org/domain-groups/3d-web-interoperability" target="_blank" rel="noreferrer nofollow noopener">3D Web Interoperability</a> Working Group.</span></li>
</ul>
</div>
</li>
</ul>
</div>
<div> </div>
<div>Worth reading: the original PLY definition first defined in 1994 by Greg Turk at Stanford University., references above.</div>
<div>
<ul>
<li>[<a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD/Part01/bibliography.html#PLY" target="_blank" rel="noreferrer nofollow noopener">PLY</a>]</li>
<li><a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD/Part01/bibliography.html#PLY" target="_blank" rel="noreferrer nofollow noopener">https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD/Part01/bibliography.html#PLY</a></li>
<li>Wikipedia, PLY (file format), 26 February 2026. <a href="https://en.wikipedia.org/wiki/PLY_(file_format)" target="_blank" rel="noreferrer nofollow noopener">https://en.wikipedia.org/wiki/PLY_(file_format)</a></li>
</ul>
<div>and</div>
</div>
<div>
<ol style="margin: 0.3em 0px 0.5em 3.2em; padding: 0px; font-size: 11.43px; font-family: sans-serif;">
<li id="m_-3390372909324790713m_440774595153415626m_8510644033728727684gmail-cite_note-1" style="margin-bottom: 0.1em;"><cite id="m_-3390372909324790713m_440774595153415626m_8510644033728727684gmail-CITEREFGreg_Turk" style="font-style: inherit;">Greg Turk. <a style="text-decoration-line: none; color: #3366bb; background: url('""') right center no-repeat; padding-right: 13px;" href="https://web.archive.org/web/20161204152348/http://www.dcs.ed.ac.uk/teaching/cs4/www/graphics/Web/ply.html" target="_blank" rel="noreferrer nofollow noopener">"The PLY Polygon File Format"</a>. Archived from <a style="text-decoration-line: none; color: #3366bb; background: url('""') right center no-repeat; padding-right: 13px;" href="http://www.dcs.ed.ac.uk/teaching/cs4/www/graphics/Web/ply.html" target="_blank" rel="noreferrer nofollow noopener">the original</a> on 2016-12-04.</cite></li>
<li id="m_-3390372909324790713m_440774595153415626m_8510644033728727684gmail-cite_note-2" style="margin-bottom: 0.1em;"><cite id="m_-3390372909324790713m_440774595153415626m_8510644033728727684gmail-CITEREFGreg_Turk" style="font-style: inherit;">Greg Turk. <a style="text-decoration-line: none; color: #3366bb; background: url('""') right center no-repeat; padding: 8px 18px 8px 0px;" href="https://gamma.cs.unc.edu/POWERPLANT/papers/ply.pdf" target="_blank" rel="noreferrer nofollow noopener">"The PLY Polygon File Format (extended)"</a> <span style="font-size: 10.8585px;">(PDF)</span>.</cite></li>
</ol>
<span style="font-style: inherit; font-family: sans-serif; font-size: 11.43px;">and</span></div>
<div>
<ul>
<li><span style="font-style: inherit; font-family: sans-serif; font-size: 11.43px;"><a href="https://paulbourke.net/dataformats/ply/" target="_blank" rel="noreferrer nofollow noopener">PLY - Polygon File Format</a> </span><a href="https://paulbourke.net/dataformats/ply" target="_blank" rel="noreferrer nofollow noopener">https://paulbourke.net/dataformats/ply</a></li>
</ul>
Improvements to draft specification, especially with implementation and evaluation, are always welcome.</div>
<div>
<div class="gmail_signature" dir="ltr">
<div dir="ltr">
<div style="color: #222222;"><span style="font-family: monospace;"> </span></div>
<div style="color: #222222;"><span style="font-family: monospace;">all the best, Don</span></div>
</div>
</div>
</div>
</div>
<div dir="ltr">
<div>
<div class="gmail_signature" dir="ltr">
<div dir="ltr">
<div style="color: #222222;"><span style="font-family: monospace;">-- </span></div>
<div style="color: #222222;"><span style="font-family: monospace;">X3D Graphics, Maritime Robotics, Distributed Simulation</span></div>
<div style="color: #222222;"><span style="font-family: monospace;">Relative Motion Consulting <a href="https://relativemotion.info/" target="_blank" rel="noreferrer nofollow noopener">https://RelativeMotion.info</a></span></div>
</div>
</div>
</div>
</div>
<br>
<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">On Sun, Apr 5, 2026 at 6:39 PM John Carlson via x3d-public <<a href="mailto:x3d-public@web3d.org" target="_blank" rel="noreferrer nofollow noopener">x3d-public@web3d.org</a>> wrote:</div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left: 1px solid #cccccc; padding-left: 1ex;">
<div>
<div dir="auto">Hi, Michalis, Seeing Gaussian Splat PLYs renderered with humanoid animation would be cool to see. With your expertise in binary formats and binary PLY, probably an easy next step!</div>
</div>
<div dir="auto"> </div>
<div dir="auto">John</div>
<div>
<div><br>
<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">On Sun, Apr 5, 2026 at 8:05 PM Michalis Kamburelis via x3d-public <<a href="mailto:x3d-public@web3d.org" target="_blank" rel="noreferrer nofollow noopener">x3d-public@web3d.org</a>> wrote:</div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left: 1px solid #cccccc; padding-left: 1ex;">With big thanks to Don who provided information and pushed me to implement it!:)<br><br>1. We support now InlineGeometry in Castle Game Engine and Castle Model Viewer.<br><br>- I tested on a few examples, and made our own: <a href="https://github.com/castle-engine/demo-models/tree/master/x3d/inline_geometry" target="_blank" rel="noreferrer nofollow noopener">https://github.com/castle-engine/demo-models/tree/master/x3d/inline_geometry</a><br><br>- You can refer to a geometry from any model format we support, including X3D, glTF, STL, PLY...: <a href="https://castle-engine.io/model_formats" target="_blank" rel="noreferrer nofollow noopener">https://castle-engine.io/model_formats</a><br><br>2. We support now loading models in a PLY format.<br><br>- ASCII and binary versions.<br><br>- Faces or without faces (point cloud, i.e. just our PointSet).<br><br>- Testcases include <a href="https://github.com/castle-engine/demo-models/tree/master/ply" target="_blank" rel="noreferrer nofollow noopener">https://github.com/castle-engine/demo-models/tree/master/ply</a> and <a href="https://sketchfab.com/3d-models/kaktus-ply-7b7cc7188f17468595506500e186a9c0" target="_blank" rel="noreferrer nofollow noopener">https://sketchfab.com/3d-models/kaktus-ply-7b7cc7188f17468595506500e186a9c0</a> .<br><br>More information and screenshots about both features in our news post on <a href="https://castle-engine.io/wp/2026/04/06/support-for-ply-model-format-and-inlinegeometry-node/" target="_blank" rel="noreferrer nofollow noopener">https://castle-engine.io/wp/2026/04/06/support-for-ply-model-format-and-inlinegeometry-node/</a> .<br><br>They are available to test right now if you download <br>- the "snapshot" version of Castle Model Viewer <a href="https://castle-engine.io/castle-model-viewer" target="_blank" rel="noreferrer nofollow noopener">https://castle-engine.io/castle-model-viewer</a> <br>- or full engine from <a href="https://castle-engine.io/download" target="_blank" rel="noreferrer nofollow noopener">https://castle-engine.io/download</a> .<br><br>Regards,<br>Michalis<br><br>_______________________________________________<br>x3d-public mailing list<br><a href="mailto:x3d-public@web3d.org" target="_blank" rel="noreferrer nofollow noopener">x3d-public@web3d.org</a><br><a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" target="_blank" rel="noreferrer nofollow noopener">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a></blockquote>
</div>
</div>
</div>
_______________________________________________<br>x3d-public mailing list<br><a href="mailto:x3d-public@web3d.org" target="_blank" rel="noreferrer nofollow noopener">x3d-public@web3d.org</a><br><a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" target="_blank" rel="noreferrer nofollow noopener">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a></blockquote>
</div>
</blockquote>
</div>
</div>
</blockquote>
</div>
</div>
</blockquote>
</div>
</blockquote>
</div>
</blockquote>
</div>
_______________________________________________<br>x3d-public mailing list<br>x3d-public@web3d.org<br>http://web3d.org/mailman/listinfo/x3d-public_web3d.org</div>
</blockquote>
</div>
</div>
_______________________________________________<br>x3d-public mailing list<br>x3d-public@web3d.org<br>http://web3d.org/mailman/listinfo/x3d-public_web3d.org</div>
</blockquote>
</div>
</blockquote>
</div>
</div>
<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>