<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
The X3D group has looked closely at Tangent options in the past and decided not to support it. Instead we use Normal nodes, as ever.</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
Of geometric note is that they are literally orthogonal and thus either representation can be used to the other.</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
You will not find Tangent node in the X3D specification.</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<br>
</div>
<ul data-editing-info="{"applyListStyleFromLevel":false,"unorderedStyleType":1}" style="margin-top: 0px; margin-bottom: 0px; list-style-type: disc;">
<li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<div class="elementToProof">X3D 4.1 draft Architecture, Annex Z (informative) Version content</div>
</li><li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<div class="elementToProof"><a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/versionContent.html" id="OWAf2361ad8-c42e-19ac-274f-a3541648384e" class="OWAAutoLink">https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/versionContent.html</a></div>
</li></ul>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
Note that the X_ITE documentation specifically notes that support in that application is nonstandard. </div>
<ul data-editing-info="{"applyListStyleFromLevel":false,"unorderedStyleType":1}" style="margin-top: 0px; margin-bottom: 0px; list-style-type: disc;">
<li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0); display: block;">
<div class="elementToProof"><br>
</div>
</li><li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<div class="elementToProof">SFNode [in, out] tangent NULL [Tangent] non-standard]</div>
</li><li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<div class="elementToProof">https://create3000.github.io/x_ite/components/geometry3d/indexedfaceset/#fields-tangent</div>
</li></ul>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
There is no issue with codebases adding functionality that might help their capabilities - the X in X3D is extensible, after all - but anyone putting a Tangent definition into an X3D model file is creating nonstandard, invalid, noninteroperable content.</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
Also please be aware that there is a serious design principle behind this decision: DRY. Thus, a statement I don't expect to repeat: we do not intend to consider Tangent support in future X3D specifications.</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<br>
</div>
<ul data-editing-info="{"applyListStyleFromLevel":false,"unorderedStyleType":1}" style="margin-top: 0px; margin-bottom: 0px; list-style-type: disc;">
<li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<div class="elementToProof">Wikipedia: Don't repeat yourself</div>
</li><li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<div class="elementToProof"><a href="https://en.wikipedia.org/wiki/Don't_repeat_yourself">https://en.wikipedia.org/wiki/Don't_repeat_yourself</a></div>
</li></ul>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
And some "dry humor" on that page:</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<br>
</div>
<ul data-editing-info="{"applyListStyleFromLevel":false,"unorderedStyleType":1}" style="margin-top: 0px; margin-bottom: 0px; list-style-type: disc;">
<li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<div class="elementToProof">The opposing view to DRY is called WET, a <span style="color: rgb(0, 43, 184);">
<a href="https://en.wikipedia.org/wiki/Backronym" id="OWA3bd86800-991d-0e7e-9714-f256b158fed6" class="OWAAutoLink elementToProof" title="Backronym" style="color: rgb(0, 43, 184); text-align: left;">backronym</a></span> commonly taken to stand for
<i>write everything twice</i> (alternatively <i>write every time</i>, <i>we enjoy typing</i> or
<i>waste everyone's time</i>). </div>
</li></ul>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
Recommendations: </div>
<ul data-editing-info="{"applyListStyleFromLevel":false,"unorderedStyleType":1}" style="margin-top: 0px; margin-bottom: 0px; list-style-type: disc;">
<li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<div class="elementToProof">if your model data is starting with tangent values (for whatever reason) then convert them to normal vectors, and</div>
</li><li style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<div class="elementToProof">stick with standard X3D for best results.</div>
</li></ul>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<br>
Have fun with normal X3D! 🙂</div>
<div class="elementToProof" id="Signature">
<p style="margin: 0in; font-family: Calibri, sans-serif; font-size: 11pt;"><span style="font-family: "Courier New"; font-size: 9pt;"><br>
</span></p>
<p style="margin: 0in; font-family: Calibri, sans-serif; font-size: 11pt;"><span style="font-family: "Courier New"; font-size: 9pt;">all the best, Don</span></p>
<p style="margin: 0in; font-family: Calibri, sans-serif; font-size: 11pt;"><span style="font-family: "Courier New"; font-size: 9pt;">--</span></p>
<p style="margin: 0in; font-family: Calibri, sans-serif; font-size: 11pt;"><span style="font-family: "Courier New"; font-size: 9pt;">Don Brutzman Naval Postgraduate School, Code USW/Br brutzman@nps.edu</span></p>
<p style="margin: 0in; font-family: Calibri, sans-serif; font-size: 11pt;"><span style="font-family: "Courier New"; font-size: 9pt;">Watkins 270, MOVES Institute, Monterey CA 93943-5000 USA +1.831.656.2149</span></p>
<p style="margin: 0in; font-family: Calibri, sans-serif; font-size: 11pt;"><span style="font-family: "Courier New"; font-size: 9pt;">X3D graphics, virtual worlds, navy robotics https://faculty.nps.edu/brutzman</span></p>
<p style="margin: 0in; font-family: Calibri, sans-serif; font-size: 11pt;"><span style="font-family: "Courier New"; font-size: 9pt;"> </span></p>
</div>
<div id="appendonsend"></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<hr style="display: inline-block; width: 98%;">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<b>From:</b> x3d-public <x3d-public-bounces@web3d.org> on behalf of Joe D Williams via x3d-public <x3d-public@web3d.org><br>
<b>Sent:</b> Sunday, May 18, 2025 5:03 PM<br>
<b>To:</b> John Carlson <yottzumm@gmail.com><br>
<b>Cc:</b> Joe D Williams <joedwil@earthlink.net>; Extensible 3D (X3D) Graphics public discussion <x3d-public@web3d.org><br>
<b>Subject:</b> Re: [x3d-public] 3D graphics, vertex attributes Tangent index and vector
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">ok, seems like from what I can study so far, </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">the first use of Tangent vector is authortime production of</span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">normalized Normal vector for vertex or face. </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">The author is looking for relief effects (bumpmapping) </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">that are produced by Tangent vector. </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">This process (MikkTSpace algorithm) would fill Normal vector.</span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">This process of generating Normal vector space is called baking. </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;"> </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">For Level5 runtime, </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">If Normal vector not null then used directly.</span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">If Normal vector null, then normals auto generated by creaseAngle </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">If Tangent vector null, then nothing. </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">If Level 5 and Tangent vector not null then possible relief effects</span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;"> using length of Tangent vector. </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;"> </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">No "bake" in runtime. </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;"> </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;"> </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;"> </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;"> </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;"> </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;"> </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;"> </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;"> </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">For runtime, the generated Normal vector is used and</span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">if Tangent vector is not null, for the author to produce relief effects</span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">using length of Tangent vector. </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">Is that true? </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;"> </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;"> </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;"> </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">.</span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">For runtime </span></p>
<div style="margin: 0px; padding-top: 10px; padding-bottom: 10px; padding-left: 15px; border-left: 1px solid rgb(170, 170, 170);">
<p>-----Original Message-----<br>
From: John Carlson <yottzumm@gmail.com><br>
Sent: May 17, 2025 1:15 PM<br>
To: Joe D Williams <joedwil@earthlink.net><br>
Cc: Extensible 3D (X3D) Graphics public discussion <x3d-public@web3d.org><br>
Subject: Re: [x3d-public] 3D graphics, vertex attributes Tangent index and vector</p>
<p style="line-height: 1; margin: 0.9px;"> </p>
<div style="direction: ltr;">Please review Michalis’ response on this thread about tangentIndex and tangentPerVertex. I believe the corresponding normal fields apply.</div>
<div style="direction: ltr;"> </div>
<div style="direction: ltr;">Level 5? That depends on updated standard.</div>
<div><br>
</div>
<div style="direction: ltr;">On Sat, May 17, 2025 at 2:04 PM Joe D Williams <<a href="mailto:joedwil@earthlink.net" id="OWA8060c791-0897-c7ad-4db0-8552e290d0f3" class="OWAAutoLink">joedwil@earthlink.net</a>> wrote:</div>
<blockquote style="margin: 0px 0px 0px 0.8ex; padding-left: 1ex; border-left: 1px solid rgb(204, 204, 204);">
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">* must have tangentIndex (unless tangentIndex same as normalIndex). </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">* If no tangentIndex, coordIndex used? </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">* tangentPerVertex? Can tangent be applied to vertex or face (like normal and color)?</span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">* must have tangent vector (may be auto filled). </span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">* Level 5 required since level 4 does not have tangent.</span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">Thanks,</span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;">Joe</span></p>
<p style="line-height: 1; margin: 0.9px;"><span style="font-family: arial, sans-serif; font-size: 12pt; color: black;"> </span></p>
<div style="margin: 0px; padding-top: 10px; padding-bottom: 10px; padding-left: 15px; border-left: 1px solid rgb(170, 170, 170);">
<p>-----Original Message-----<br>
From: John Carlson <<a href="mailto:yottzumm@gmail.com" id="OWA85a2f91c-c927-f8dd-348a-11ceb969a98e" class="OWAAutoLink" rel="noopener" style="margin-top: 0px; margin-bottom: 0px;">yottzumm@gmail.com</a>><br>
Sent: May 16, 2025 10:32 PM<br>
To: Extensible 3D (X3D) Graphics public discussion <<a href="mailto:x3d-public@web3d.org" id="OWAfebf8e74-e352-adf4-f717-8c9aacaa37ed" class="OWAAutoLink" rel="noopener" style="margin-top: 0px; margin-bottom: 0px;">x3d-public@web3d.org</a>><br>
Cc: Joe D Williams <<a href="mailto:joedwil@earthlink.net" id="OWA1a2b3404-2743-1298-9ef3-154b466e62b6" class="OWAAutoLink" rel="noopener" style="margin-top: 0px; margin-bottom: 0px;">joedwil@earthlink.net</a>><br>
Subject: Re: [x3d-public] 3D graphics, vertex attributes Tangent index and vector</p>
<p style="line-height: 1; margin: 0.9px;"> </p>
<div style="direction: ltr;">Joe,</div>
<div style="direction: ltr;"> </div>
<div style="direction: ltr;">X_ITE IFS:</div>
<div style="direction: ltr;"> </div>
<div style="direction: ltr;"><a href="https://create3000.github.io/x_ite/components/geometry3d/indexedfaceset/" id="OWAb70e867c-3786-47cb-a384-06a42ac5f11c" class="OWAAutoLink" rel="noopener" originalsrc="https://create3000.github.io/x_ite/components/geometry3d/indexedfaceset/" data-auth="NotApplicable">https://create3000.github.io/x_ite/components/geometry3d/indexedfaceset/</a></div>
<div style="direction: ltr;"> </div>
<div style="direction: ltr;">Summary, only tangent field.</div>
<div style="direction: ltr;">John</div>
<div><br>
</div>
<div style="direction: ltr;">On Fri, May 16, 2025 at 8:59 PM Joe D Williams via x3d-public <<a href="mailto:x3d-public@web3d.org" id="OWA9d5f4d96-cc69-c907-30b2-8bd153308d72" class="OWAAutoLink" rel="noopener">x3d-public@web3d.org</a>> wrote:</div>
<blockquote style="margin: 0px 0px 0px 0.8ex; padding-left: 1ex; border-left: 1px solid rgb(204, 204, 204);">
<p style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif;"><span style="font-size: 12pt; color: black;">like for normals, is there a tangentPerVertex true/false where tangent value</span></p>
<p style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif;"><span style="font-size: 12pt; color: black;">is associated with vertex or face? </span></p>
<p style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif;"><span style="font-size: 12pt; color: black;">If tangentIndex null, is coordIndex used? </span></p>
<p style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif;"><span style="font-size: 12pt; color: black;">If Tangent vector null tangents are generated after Normal vector? </span></p>
<p style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif;"><span style="font-size: 12pt; color: black;"> </span></p>
<p style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif;"><span style="font-size: 12pt; color: black;">Thanks,</span></p>
<p style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif;"><span style="font-size: 12pt; color: black;">Joe</span></p>
<p style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif;"><span style="font-size: 12pt; color: black;"> </span></p>
<p style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif;"><span style="font-size: 12pt; color: black;"> </span></p>
<p style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif;"><span style="font-size: 12pt; color: black;"> </span></p>
<div style="margin: 0px; padding-top: 10px; padding-bottom: 10px; padding-left: 15px; border-left: 1px solid rgb(170, 170, 170);">
<p>-----Original Message-----<br>
From: Extensible 3D (X3D) Graphics public discussion <<a href="mailto:x3d-public@web3d.org" id="OWAe6e47dd9-5c8f-2801-e023-dc8e3f75562d" class="OWAAutoLink" rel="noopener" style="margin-top: 0px; margin-bottom: 0px;">x3d-public@web3d.org</a>><br>
Sent: May 15, 2025 6:19 AM<br>
To: X3D <<a href="mailto:x3d-public@web3d.org" id="OWAa595f180-ad50-9e4a-63ad-cb9a7aed898e" class="OWAAutoLink" rel="noopener" style="margin-top: 0px; margin-bottom: 0px;">x3d-public@web3d.org</a>><br>
Cc: Holger Seelig <<a href="mailto:holger.seelig@yahoo.de" id="OWA95854889-8eaa-46e2-299b-a53b1fbbc8d6" class="OWAAutoLink" rel="noopener" style="margin-top: 0px; margin-bottom: 0px;">holger.seelig@yahoo.de</a>><br>
Subject: Re: [x3d-public] 3D graphics, vertex attributes Tangent index and vector</p>
<p style="line-height: 1; margin: 0.9px;"> </p>
<div>There are also glTF tests for tangents: </div>
<div> </div>
<div>Geometry with tangent node:</div>
<div><a href="https://create3000.github.io/x_ite/laboratory/gltf-sample-viewer/?url=https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/NormalTangentMirrorTest/glTF/NormalTangentMirrorTest.gltf" id="OWA1848a584-c71e-dcdd-185b-44ae7af0d894" class="OWAAutoLink" rel="noopener" originalsrc="https://create3000.github.io/x_ite/laboratory/gltf-sample-viewer/?url=https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/NormalTangentMirrorTest/glTF/NormalTangentMirrorTest.gltf" data-auth="NotApplicable">https://create3000.github.io/x_ite/laboratory/gltf-sample-viewer/?url=https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/NormalTangentMirrorTest/glTF/NormalTangentMirrorTest.gltf</a>
</div>
<div> </div>
<div>Geometry without tangent node (auto generated tangents using MikkTSpace algorithm):</div>
<div><a href="https://create3000.github.io/x_ite/laboratory/gltf-sample-viewer/?url=https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/NormalTangentTest/glTF/NormalTangentTest.gltf" id="OWAca66c3a6-dfef-c04c-f7f1-799fba98fdce" class="OWAAutoLink" rel="noopener" originalsrc="https://create3000.github.io/x_ite/laboratory/gltf-sample-viewer/?url=https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/NormalTangentTest/glTF/NormalTangentTest.gltf" data-auth="NotApplicable">https://create3000.github.io/x_ite/laboratory/gltf-sample-viewer/?url=https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/NormalTangentTest/glTF/NormalTangentTest.gltf</a></div>
<div> </div>
<div>The reflection in all half spheres should look the same.</div>
<div>Turn on IBL (Image Based Lighting).</div>
<div> </div>
<div>Best regards,</div>
<div>Holger</div>
<div><br>
</div>
<div style="direction: ltr; text-indent: 0px; color: black;">--</div>
<div style="direction: ltr; text-indent: 0px; color: black;">Holger Seelig</div>
<div style="direction: ltr; text-indent: 0px; color: black;">Leipzig, Germany</div>
<div style="direction: ltr; text-indent: 0px; color: black;"> </div>
<div style="direction: ltr; text-indent: 0px; color: black;"><a href="mailto:holger.seelig@yahoo.de" id="OWA3092b03a-865b-388e-7736-8c4dcf62040e" class="OWAAutoLink" rel="noopener">holger.seelig@yahoo.de</a></div>
<div style="direction: ltr; text-indent: 0px; color: black;"><a href="https://create3000.github.io/x_ite/" id="OWAb9c90747-2771-6bf9-b74d-9cfe7395ebe1" class="OWAAutoLink" rel="noopener" originalsrc="https://create3000.github.io/x_ite/" data-auth="NotApplicable">https://create3000.github.io/x_ite/</a></div>
<div style="direction: ltr; text-indent: 0px; color: black;"><a href="https://patreon.com/X_ITE" id="OWA4e03fe3b-2211-b1f5-9680-fcc56447e9f9" class="OWAAutoLink" rel="noopener" originalsrc="https://patreon.com/X_ITE" data-auth="NotApplicable">https://patreon.com/X_ITE</a></div>
<div style="direction: ltr; text-indent: 0px; color: black;"> </div>
<div><br>
</div>
<blockquote>
<div>Am 15.05.2025 um 10:35 schrieb Holger Seelig via x3d-public <<a href="mailto:x3d-public@web3d.org" id="OWAe267f454-ea49-3d30-10e1-6f6c2e29461b" class="OWAAutoLink" rel="noopener">x3d-public@web3d.org</a>>:</div>
<div>All nodes which have a normal field also have a tangent field in X_ITE, because tangents are very important for PhysicalMaterial to render correctly. Because tangents always come in conjunction with normals, normalPerVertex field is also used for tangents.
</div>
<div> </div>
<div>If there is no Tangent node, the MikkTSpace algorithm is used to generate tangent vectors, as need by the glTF specification.</div>
<div> </div>
<div>If there is a Tangent node and the vector field is empty, results are undefined.</div>
<div> </div>
<div>Tangent node:</div>
<div><a href="https://create3000.github.io/x_ite/components/rendering/tangent/" id="OWA0f362852-7789-fc58-8a52-4b6420a36113" class="OWAAutoLink" rel="noopener" originalsrc="https://create3000.github.io/x_ite/components/rendering/tangent/" data-auth="NotApplicable">https://create3000.github.io/x_ite/components/rendering/tangent/</a></div>
<div> </div>
<div>IndexedFaceSet with tangent field:</div>
<div><a href="https://create3000.github.io/x_ite/components/geometry3d/indexedfaceset/#fields-tangent" id="OWA3030bff4-69a8-d014-8fb4-084c189ae9bc" class="OWAAutoLink" rel="noopener" originalsrc="https://create3000.github.io/x_ite/components/geometry3d/indexedfaceset/#fields-tangent" data-auth="NotApplicable">https://create3000.github.io/x_ite/components/geometry3d/indexedfaceset/#fields-tangent</a></div>
<div> </div>
<div>Best regards,</div>
<div>Holger</div>
<div><br>
</div>
<div style="direction: ltr; text-indent: 0px;">--</div>
<div style="direction: ltr; text-indent: 0px;">Holger Seelig</div>
<div style="direction: ltr; text-indent: 0px;">Leipzig, Germany</div>
<div style="direction: ltr; text-indent: 0px;"> </div>
<div style="direction: ltr; text-indent: 0px;"><a href="mailto:holger.seelig@yahoo.de" id="OWA7036fd88-1c89-604a-ba5c-e2f8163e9160" class="OWAAutoLink" rel="noopener">holger.seelig@yahoo.de</a></div>
<div style="direction: ltr; text-indent: 0px;"><a href="https://create3000.github.io/x_ite/" id="OWA2e343fee-ae36-87eb-30b9-c81c879da701" class="OWAAutoLink" rel="noopener" originalsrc="https://create3000.github.io/x_ite/" data-auth="NotApplicable">https://create3000.github.io/x_ite/</a></div>
<div style="direction: ltr; text-indent: 0px;"><a href="https://patreon.com/X_ITE" id="OWA955f4b70-18a3-7101-531e-55a1a9f9aedc" class="OWAAutoLink" rel="noopener" originalsrc="https://patreon.com/X_ITE" data-auth="NotApplicable">https://patreon.com/X_ITE</a></div>
<div style="direction: ltr; text-indent: 0px;"> </div>
<div><br>
</div>
<blockquote>
<div>Am 15.05.2025 um 10:24 schrieb Michalis Kamburelis <<a href="mailto:michalis.kambi@gmail.com" id="OWA543f276b-5911-b19c-43d0-92033d39a407" class="OWAAutoLink" rel="noopener">michalis.kambi@gmail.com</a>>:</div>
<div style="direction: ltr;">I don't know about Tangent in X_ITE...</div>
<div style="direction: ltr;"> </div>
<div style="direction: ltr;">But in Castle Game Engine we have a similar extension -- Tangent node (
<a href="https://castle-engine.io/x3d_implementation_rendering_extensions.php" id="OWA50d1f04e-59c6-ecfc-64e0-c47269822bb1" class="OWAAutoLink" rel="noopener" originalsrc="https://castle-engine.io/x3d_implementation_rendering_extensions.php" data-auth="NotApplicable">
https://castle-engine.io/x3d_implementation_rendering_extensions.php</a> ). Looks like we developed it independently from X_ITE :) It certainly makes sense to have a node that carry this information, to have perfect rendering. (Tangents can be auto-calculated,
but there are various details in the auto-calculation algorithm that various renderers may do a bit differently. When the 3D author used "baking" to make a normalmap texture, it's better to use exact same tangents as known by the 3D authoring tool.)</div>
<div style="direction: ltr;"> </div>
<div style="direction: ltr;">At least for Castle Game Engine, the answer is: if the Tangent node is not present, but we need tangents (e.g. for bump mapping), then the tangent vectors are calculated to match the normal vectors. So there's no additional tangentPerVertex
or tangentIndex, they would not make sense. By knowing the normal vectors, by know all we need to generate reasonable tangent vectors.</div>
<div style="direction: ltr;"> </div>
<div style="direction: ltr;">See <a href="https://castle-engine.io/x3d_implementation_rendering_extensions.php" id="OWA77e016e7-d757-77b5-3a98-3a3e96e456a5" class="OWAAutoLink" rel="noopener" originalsrc="https://castle-engine.io/x3d_implementation_rendering_extensions.php" data-auth="NotApplicable">
https://castle-engine.io/x3d_implementation_rendering_extensions.php</a> for more details.</div>
<div style="direction: ltr;"> </div>
<div style="direction: ltr;">Regards,</div>
<div style="direction: ltr;">Michalis</div>
<div><br>
</div>
<div style="direction: ltr;">czw., 15 maj 2025 o 07:43 John Carlson via x3d-public <<a href="mailto:x3d-public@web3d.org" id="OWAe8e08af7-b3b6-95a1-2336-2176756f1634" class="OWAAutoLink" rel="noopener">x3d-public@web3d.org</a>> napisał(a):</div>
<blockquote style="margin: 0px 0px 0px 0.8ex; padding-left: 1ex; border-left: 1px solid rgb(204, 204, 204);">
<div style="direction: ltr;">Note, it’s Tangent vector=… not Tangent point=…</div>
<div style="direction: ltr;"> </div>
<div style="direction: ltr;">John</div>
<div><br>
</div>
<div style="direction: ltr;">On Thu, May 15, 2025 at 12:38 AM John Carlson <<a href="mailto:yottzumm@gmail.com" id="OWA21a244b1-05ee-e322-ba0e-bd5dc9ab5668" class="OWAAutoLink" rel="noopener">yottzumm@gmail.com</a>> wrote:</div>
<blockquote style="margin: 0px 0px 0px 0.8ex; padding-left: 1ex; border-left: 1px solid rgb(204, 204, 204);">
<div style="direction: ltr;">I’d ask Holger, cc’d</div>
<div style="direction: ltr;"> </div>
<div style="direction: ltr;">I’ve not used Tangent, myself.</div>
<div style="direction: ltr;"> </div>
<div style="direction: ltr; text-indent: 0px; font-family: -apple-system, helveticaneue; font-size: 19px;">
X_ITE Supports up to Level 4, so I guess you’re proposing a new level 5 for the Geometry 3D component?</div>
<div style="direction: ltr; text-indent: 0px; font-family: -apple-system, helveticaneue; font-size: 19px;">
</div>
<div style="direction: ltr; text-indent: 0px; font-family: -apple-system, helveticaneue; font-size: 19px;">
Look at X_ITE IFS:</div>
<div style="direction: ltr; text-indent: 0px; font-family: -apple-system, helveticaneue; font-size: 19px;">
</div>
<div style="direction: ltr; text-indent: 0px; font-family: -apple-system, helveticaneue; font-size: 19px;">
<IMG_0516.png></div>
<div style="direction: ltr;"> </div>
<div style="direction: ltr;">Maybe check Holger’s create3000 Library for examples?</div>
<div style="direction: ltr;"> </div>
<div style="direction: ltr;">To retrieve examples, last time I tried:</div>
<div style="direction: ltr;"> </div>
<div style="direction: ltr;">git clone <a href="https://github.com/create3000/Library" id="OWA40c85ae0-19de-ce8b-2185-057ece481ed6" class="OWAAutoLink" rel="noopener" originalsrc="https://github.com/create3000/Library" data-auth="NotApplicable">
https://github.com/create3000/Library</a></div>
<div style="direction: ltr;">Online at:</div>
<div style="direction: ltr;"> </div>
<div style="direction: ltr;"><a href="https://github.com/create3000/Library" id="OWA76d77248-aa14-20bb-b099-1cc820edfea6" class="OWAAutoLink" rel="noopener" originalsrc="https://github.com/create3000/Library" data-auth="NotApplicable">https://github.com/create3000/Library</a></div>
<div style="direction: ltr; text-indent: 0px; font-family: -apple-system, helveticaneue; font-size: 19px;">
Let’s get v2 Joe Kick out the door, check v2 finger joints, and make sure all joints have converted to v2.</div>
<div style="direction: ltr;"> </div>
<div style="direction: ltr;">John </div>
<div><br>
</div>
<div style="direction: ltr;">On Wed, May 14, 2025 at 10:45 PM Joe D Williams <<a href="mailto:joedwil@earthlink.net" id="OWA4d914093-fbff-517b-6a9a-c49d27290eff" class="OWAAutoLink" rel="noopener">joedwil@earthlink.net</a>> wrote:</div>
<blockquote style="margin: 0px 0px 0px 0.8ex; padding-left: 1ex; border-left: 1px solid rgb(204, 204, 204);">
<p style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif;"><span style="font-size: 12pt;"> </span></p>
<div style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif; font-size: 12pt;">
Main questions, in IFS Level5:</div>
<div style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif; font-size: 12pt;">
Is a default tangent generated if Tangent point="" field empty? </div>
<div style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif; font-size: 12pt;">
tangentPerVertex? assigned to vertex or face?</div>
<div style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif; font-size: 12pt;">
tangentIndex? If no tangentIndex is coordIndex used? </div>
<p style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif;"><span style="font-size: 12pt;"> </span></p>
<div style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif; font-size: 12pt;">
Thanks,</div>
<div style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif; font-size: 12pt;">
Joe</div>
<p style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif;"><span style="font-size: 12pt;"> </span></p>
<p style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif;"><span style="font-size: 12pt;"> </span></p>
<p style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif;"><span style="font-size: 12pt;"> </span></p>
<p style="line-height: 1; margin: 0.9px; font-family: arial, sans-serif;"><span style="font-size: 12pt;"> </span></p>
<div style="margin: 0px; padding-top: 10px; padding-bottom: 10px; padding-left: 15px; border-left: 1px solid rgb(170, 170, 170);">
<p>-----Original Message-----<br>
From: John Carlson <<a href="mailto:yottzumm@gmail.com" id="OWA54ffc405-ea78-94d8-52ee-dd9e39e53b71" class="OWAAutoLink" rel="noopener" style="margin-top: 0px; margin-bottom: 0px;">yottzumm@gmail.com</a>><br>
Sent: May 14, 2025 3:00 PM<br>
To: Extensible 3D (X3D) Graphics public discussion <<a href="mailto:x3d-public@web3d.org" id="OWA25f80843-4a56-24d7-1061-6ad0e9e2f476" class="OWAAutoLink" rel="noopener" style="margin-top: 0px; margin-bottom: 0px;">x3d-public@web3d.org</a>><br>
Cc: Joe D Williams <<a href="mailto:joedwil@earthlink.net" id="OWA98c170ef-9e98-23ee-d9cc-047a8d4da0d1" class="OWAAutoLink" rel="noopener" style="margin-top: 0px; margin-bottom: 0px;">joedwil@earthlink.net</a>><br>
Subject: Re: [x3d-public] 3D graphics, vertex attributes</p>
<p style="line-height: 1; margin: 0.9px;"> </p>
<div style="direction: ltr;">Joe, </div>
<div style="direction: ltr;"> </div>
<div style="direction: ltr;">X_ITE has a tangent node:</div>
<div style="direction: ltr;"> </div>
<div style="direction: ltr;"><a href="https://create3000.github.io/x_ite/components/rendering/tangent/" id="OWAdb33b9e9-e77a-766f-8fec-e08dd0a463f9" class="OWAAutoLink" rel="noopener" originalsrc="https://create3000.github.io/x_ite/components/rendering/tangent/" data-auth="NotApplicable">Tangent
| X_ITE X3D Browser</a></div>
<div style="direction: ltr;"> </div>
<div style="direction: ltr;">Enjoy!</div>
<div style="direction: ltr;"> </div>
<div style="direction: ltr;">John</div>
<div><br>
</div>
<div style="direction: ltr;">On Wed, May 14, 2025 at 4:46 PM Joe D Williams via x3d-public <<a href="mailto:x3d-public@web3d.org" id="OWAa3f08cc3-9af6-8b73-bcff-0786cc2a00fc" class="OWAAutoLink" rel="noopener">x3d-public@web3d.org</a>> wrote:</div>
<blockquote style="margin: 0px 0px 0px 0.8ex; padding-left: 1ex; border-left: 1px solid rgb(204, 204, 204);">
<div>From this:<br>
<br>
<a href="https://docs.google.com/document/d/1hCetnGIkut_dyt4mwkDSTNiLTbrVg1jLo_EArE74DRg/edit?tab=t.0" id="OWAff305308-380e-69b6-d26f-54af7877c9c7" class="OWAAutoLink" rel="noopener noreferrer" originalsrc="https://docs.google.com/document/d/1hCetnGIkut_dyt4mwkDSTNiLTbrVg1jLo_EArE74DRg/edit?tab=t.0" data-auth="NotApplicable">https://docs.google.com/document/d/1hCetnGIkut_dyt4mwkDSTNiLTbrVg1jLo_EArE74DRg/edit?tab=t.0</a><br>
<br>
<br>
In 3D graphics, vertex attributes define per-vertex data necessary<br>
for rendering, animation, shading, and so on.<br>
These attributes include geometric properties such as<br>
position, normal, tangents, texture mapping information (UV coordinates),<br>
shading data (vertex colors), and<br>
deformation information (skinning weights and blend shapes).<br>
<br>
<br>
In this discussion of vertex attributes, the only one I don't recall<br>
seeing in X3D is tangent?<br>
<br>
Associated with this work:<br>
<a href="https://docs.google.com/spreadsheets/d/18d1qy4jx-d_kLsam-JQAzig23w7dTau0Moe7M32lVvk/edit?gid=0#gid=0" id="OWAad17abb5-3432-0d5e-de71-0976be9cabb6" class="OWAAutoLink" rel="noopener noreferrer" originalsrc="https://docs.google.com/spreadsheets/d/18d1qy4jx-d_kLsam-JQAzig23w7dTau0Moe7M32lVvk/edit?gid=0#gid=0" data-auth="NotApplicable">https://docs.google.com/spreadsheets/d/18d1qy4jx-d_kLsam-JQAzig23w7dTau0Moe7M32lVvk/edit?gid=0#gid=0</a><br>
<br>
<br>
Thanks,<br>
Joe<br>
<br>
<br>
_______________________________________________<br>
x3d-public mailing list<br>
<a href="mailto:x3d-public@web3d.org" id="OWAa87ddd0d-cf1f-07eb-ba5f-45255627a8e5" class="OWAAutoLink" rel="noopener">x3d-public@web3d.org</a><br>
<a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" id="OWA46326bdc-4d8f-adc8-0451-f6107768a94c" class="OWAAutoLink" rel="noopener noreferrer" data-auth="NotApplicable">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a></div>
</blockquote>
</div>
<p style="line-height: 1; margin: 0.9px;"> </p>
</blockquote>
</blockquote>
<div>_______________________________________________<br>
x3d-public mailing list<br>
<a href="mailto:x3d-public@web3d.org" id="OWA7281c14c-ce19-d21e-8116-3f6ea5915bb0" class="OWAAutoLink" rel="noopener">x3d-public@web3d.org</a><br>
<a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" id="OWA59eaa3ba-5e0a-6db8-9e9a-157fb4eb3c5f" class="OWAAutoLink" rel="noopener noreferrer" data-auth="NotApplicable">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a></div>
</blockquote>
</blockquote>
<div>_______________________________________________<br>
x3d-public mailing list<br>
<a href="mailto:x3d-public@web3d.org" id="OWAfe6c9373-0195-f17b-07fe-5641769540d1" class="OWAAutoLink" rel="noopener">x3d-public@web3d.org</a><br>
<a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" id="OWA53470bb5-2ad2-59b2-06c1-5fb944f9670a" class="OWAAutoLink" rel="noopener" data-auth="NotApplicable">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a></div>
</blockquote>
</div>
<p style="line-height: 1; margin: 0.9px;"> </p>
<div>_______________________________________________<br>
x3d-public mailing list<br>
<a href="mailto:x3d-public@web3d.org" id="OWAeb173da3-098b-9f29-f09b-905fbbc0f32c" class="OWAAutoLink" rel="noopener">x3d-public@web3d.org</a><br>
<a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" id="OWA05f92bdd-0998-b310-af90-2ecfb91e0ff4" class="OWAAutoLink" rel="noopener noreferrer" data-auth="NotApplicable">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a></div>
</blockquote>
</div>
<p style="line-height: 1; margin: 0.9px;"> </p>
</blockquote>
</div>
<p style="line-height: 1; margin: 0.9px;"> </p>
</body>
</html>