<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);">
Thanks for extra references, interesting.</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);">
To be clearer, I was referring to "capital-T" Tangent planes. We do have one of those in ClippingPlane node, plane field.</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"><a href="https://www.web3d.org/x3d/content/X3dTooltips.html#ClipPlane.plane" id="LPlnk905889">https://www.web3d.org/x3d/content/X3dTooltips.html#ClipPlane.plane</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);">
Yes, the slideset does seem to show that there is a lot of math to convert a normal vector space to a tangent vector space, and vice versa. No, a single normal vector is not fully convertible bidirectionally to a single tangent vector, since a single tangent
vector is only one of infinite possible tangent vectors originating at the same origin point of a Tangent plane. </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);">
If there is a benefit for X3D scene graph having tangent vectors, in particular for achieving some new flavor of rendering or geometry representation that we can't already do, then apologies but haven't heard it yet.</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);">
We can easily imagine a wide class of difficult-to-debug errors emerging in X3D content for authors, players, and converters alike if support for both normal vectors and tangent vectors becomes necessary.</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);">
p.s. looks like we also have mapped WebGL/glTF techniques using normalTexture node, e.g.</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,12.4.5 Material</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/components/shape.html#Material" id="LPlnk790145">https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/components/shape.html#Material</a></div>
<div class="elementToProof"><br>
</div>
</li></ul>
<div class="elementToProof" style="margin-left: 40px; font-family: "Courier New", monospace; font-size: 9pt; color: rgb(0, 0, 0);">
SFFloat [in,out] normalScale 1 [0, ∞) </div>
<div class="elementToProof" style="margin-left: 40px; font-family: "Courier New", monospace; font-size: 9pt; color: rgb(0, 0, 0);">
SFNode [in,out] normalTexture NULL [X3DSingleTextureNode] </div>
<div class="elementToProof" style="margin-left: 40px; font-family: "Courier New", monospace; font-size: 9pt; color: rgb(0, 0, 0);">
SFString [in,out] normalTextureMapping ""</div>
<div class="elementToProof" style="margin-left: 40px; 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="margin-left: 0px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
I hope that this deeper-dive into details is viewed as helpful and constructive.</div>
<div class="elementToProof" style="margin-left: 0px; 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="margin-left: 0px; font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
There are many additional things we can be doing with X3D, and still a lot of re-alignments to finish in the large family of X3D standards that need updating for X3D 4.0 Architecture. I am confident that together we will all stay focused primarily on the important
things - and occasionally on the cool things too! Onward we go together, with steady forward momentum overall.</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>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Michalis Kamburelis <michalis.kambi@gmail.com><br>
<b>Sent:</b> Friday, May 23, 2025 3:16 PM<br>
<b>To:</b> John Carlson <yottzumm@gmail.com><br>
<b>Cc:</b> Extensible 3D (X3D) Graphics public discussion <x3d-public@web3d.org>; Joe D Williams <joedwil@earthlink.net>; Brutzman, Donald (Don) (CIV) <brutzman@nps.edu><br>
<b>Subject:</b> Re: [x3d-public] 3D graphics, vertex attributes Tangent index and vector</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">NPS WARNING: *external sender* verify before acting.<br>
<br>
<br>
John: I know, in math, in 3D, you generally speak about "tangent<br>
planes" ( <a href="https://en.wikipedia.org/wiki/Tangent">https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FTangent&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200150881%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=xI7y0QYdIcPFZmWTtWOAardp6qBhkbiocWzLIaXZjyA%3D&reserved=0</a>
).<br>
<br>
The name "tangent vector" is just a shorthand for "vector lying on a<br>
tangent plane". This is a standard for calling this value in the<br>
context of bump mapping / normal maps.<br>
<br>
See e.g. glTF spec with useful definition (<br>
<a href="https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#introduction-technical-terminology">https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fregistry.khronos.org%2FglTF%2Fspecs%2F2.0%2FglTF-2.0.html%23introduction-technical-terminology&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200184217%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=U1GB3CyxbVkqCeZ50pNY5IQZV%2F6UVeB3fuuHSLtaTtM%3D&reserved=0</a><br>
"2.2.3. Technical Terminology" ):<br>
<br>
"""<br>
tangent<br>
A unit XYZ vector defining a tangential direction on the surface.<br>
"""<br>
<br>
There is also "tangent coordinate space". If you want to get dirty and<br>
read about details, search for "tangent normal mapping":<br>
<a href="https://learnopengl.com/Advanced-Lighting/Normal-Mapping">https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Flearnopengl.com%2FAdvanced-Lighting%2FNormal-Mapping&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200208362%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=htRXtm4jbhI6G0U0pN09lsBB5IEHQ3EKIocm948xxp8%3D&reserved=0</a>
,<br>
<a href="https://www.cs.utexas.edu/~fussell/courses/cs384g-spring2016/lectures/normal_mapping_tangent.pdf">https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.cs.utexas.edu%2F~fussell%2Fcourses%2Fcs384g-spring2016%2Flectures%2Fnormal_mapping_tangent.pdf&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200227319%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=65d5bG5b5n5jGKSrKA93pYgnKlV2x2Weg7fsDqMEpX0%3D&reserved=0</a><br>
.<br>
<br>
Regards,<br>
Michalis<br>
<br>
sob., 24 maj 2025 o 00:05 John Carlson <yottzumm@gmail.com> napisał(a):<br>
><br>
> Tangent planes seem more likely than tangent vectors, at least in 3D.<br>
><br>
> Just a naming convention.<br>
><br>
> John<br>
> On Fri, May 23, 2025 at 4:09 PM Michalis Kamburelis <michalis.kambi@gmail.com> wrote:<br>
>><br>
>> Don: I don't think that this decision (to never support Tangent node<br>
>> in X3D), is correct. I would actually say we should add Tangent to<br>
>> X3D.<br>
>><br>
>> Let me present a clear argument "why". I copied some of the reasoning<br>
>> from mail below to<br>
>> <a href="https://github.com/michaliskambi/x3d-tests/wiki/Tangent-node-in-X3D">
https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fmichaliskambi%2Fx3d-tests%2Fwiki%2FTangent-node-in-X3D&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200245004%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=iA1%2Bgoq%2B1GtvXZXMLzdiCDOHOdyQlD4%2FU5vkrA%2FpWs0%3D&reserved=0</a>
,<br>
>> to have a future reference.<br>
>><br>
>> 1. Current state: As of now, both X_ITE and Castle Game Engine have<br>
>> extensions to define Tangent node.<br>
>><br>
>> So we have invented the "Tangent" node independently in 2<br>
>> implementations and, predictably, they are unfortunately<br>
>> similar-but-not-exactly the same. Links from this thread, where you<br>
>> can notice a difference:<br>
>><br>
>> - <a href="https://create3000.github.io/x_ite/components/rendering/tangent/">
https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcreate3000.github.io%2Fx_ite%2Fcomponents%2Frendering%2Ftangent%2F&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200266292%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=uC0HoQQvQ%2FqGeaKvwUMRLczWiuPy3k5uhNpzdTVkS4g%3D&reserved=0</a>
,<br>
>> - <a href="https://castle-engine.io/x3d_implementation_rendering_extensions.php#section_ext_tangent">
https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcastle-engine.io%2Fx3d_implementation_rendering_extensions.php%23section_ext_tangent&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200287350%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=%2FiuYgr866%2FE0qt88XbIqwT6TQf%2FpGnCdQ97ziF5myn0%3D&reserved=0</a><br>
>><br>
>> Also glTF format has them. See<br>
>> <a href="https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#meshes-overview">
https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fregistry.khronos.org%2FglTF%2Fspecs%2F2.0%2FglTF-2.0.html%23meshes-overview&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200304976%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=DWIIKDtB4VQQ6g3wx9MhIJtafyag%2FzCo4hqXwBokl%2BY%3D&reserved=0</a><br>
>> , information about "TANGENT".<br>
>><br>
>> ( Holger, if you read this: I think I will change Castle Game<br>
>> Engine's Tangent node in the future, to match better both X_ITE and<br>
>> glTF, thus we will have matching definitions with X_ITE. Your approach<br>
>> is better, Tangent.vector should be 4D. )<br>
>><br>
>> 2. Tangents *do not* just repeat the same information as normal<br>
>> vectors, DRY principle doesn't apply here. I.e. the tangent vectors<br>
>> are *not* a replacement for knowing normal vectors (nor is the other<br>
>> way around).<br>
>><br>
>> And just because the model provides normal vectors -- doesn't<br>
>> mean that tangent vectors are already precisely 100% determined.<br>
>><br>
>> There are multiple similar algorithms to determine tangent<br>
>> vectors. The normal vector alone doesn't yet define the tangent -><br>
>> because in a 3D space, if you have a normal vector -> you still have<br>
>> infinite possible values for a vector "orthogonal to normal". So<br>
>> tangent vectors are auto-calculated (when not explicitly provided) to<br>
>> match the normal vectors, but *also* to match the texture coordinates<br>
>> used for normal maps. There are edge-cases when it is just not obvious<br>
>> what should be the "perfect tangent" so various implementations<br>
>> (MikkTSpace is just one example) can do different things.<br>
>><br>
>> 3. Ultimately, the "perfect tangent value" is the one that was used to<br>
>> bake the normalmaps. If the authoring tool (like Blender) that you<br>
>> used to make normalmaps used a bit different algorithm to calculate<br>
>> tangents than your renderer -> then the rendering of normalmaps will<br>
>> be slightly "off".<br>
>><br>
>> There's a nice screenshot in<br>
>> <a href="https://gamedev.stackexchange.com/questions/146855/how-do-you-compute-the-tangent-space-vectors-with-normals-given-in-the-mesh">
https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgamedev.stackexchange.com%2Fquestions%2F146855%2Fhow-do-you-compute-the-tangent-space-vectors-with-normals-given-in-the-mesh&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200321272%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=QTZ5yNrn7f9QO6013RvTKJM83RpbLp1g3o%2BTV%2Bow34Y%3D&reserved=0</a><br>
>> , scroll to "There are multiple ways to generate tangent spaces for a<br>
>> mesh, and not all of them agree on the result.". The screenshot there<br>
>> shows subtle problems that result from having authoring tool and<br>
>> renderer calculate a *bit* different tangent vectors.<br>
>><br>
>> So the perfect thing to do, from a renderer, is to *not* calculate<br>
>> the tangent vectors, instead take the tangent vectors as provided by<br>
>> the authoring tool. That exactly why glTF has tangents, and why X_ITE<br>
>> and Castle Game Engine support them too -- we don't just discard<br>
>> tangent values from glTF (only to auto-calculate them), we prefer to<br>
>> take tangent values recorded in the 3D model, because this makes<br>
>> really good rendering.<br>
>><br>
>> See <a href="https://github.com/michaliskambi/x3d-tests/wiki/Tangent-node-in-X3D">
https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fmichaliskambi%2Fx3d-tests%2Fwiki%2FTangent-node-in-X3D&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200342653%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=I2JoFkHp6yUXifxdOtDNZn%2B%2FEw%2F6B6CUggprigS0Ymg%3D&reserved=0</a><br>
>> , which I just created -- it mostly copies what I said above.<br>
>><br>
>> I hope this helps. I'll be happy to explain it better on next Web3d<br>
>> Friday teleconference, if you're not tired of my talking :) I can show<br>
>> how the normalmaps are actually created.<br>
>><br>
>> Regards,<br>
>> Michalis<br>
>><br>
>><br>
>> pt., 23 maj 2025 o 21:03 Brutzman, Donald (Don) (CIV) via x3d-public<br>
>> <x3d-public@web3d.org> napisał(a):<br>
>> ><br>
>> > 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.<br>
>> ><br>
>> > Of geometric note is that they are literally orthogonal and thus either representation can be used to the other.<br>
>> ><br>
>> > You will not find Tangent node in the X3D specification.<br>
>> ><br>
>> > X3D 4.1 draft Architecture, Annex Z (informative) Version content<br>
>> > <a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/versionContent.html">
https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/versionContent.html</a><br>
>> ><br>
>> ><br>
>> > Note that the X_ITE documentation specifically notes that support in that application is nonstandard.<br>
>> ><br>
>> ><br>
>> > SFNode [in, out] tangent NULL [Tangent] non-standard]<br>
>> > <a href="https://create3000.github.io/x_ite/components/geometry3d/indexedfaceset/#fields-tangent">
https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcreate3000.github.io%2Fx_ite%2Fcomponents%2Fgeometry3d%2Findexedfaceset%2F%23fields-tangent&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200365822%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=IsR1bELZd2JIdywMabYl4fETQB7Nj18xYLNYDuYiD%2BE%3D&reserved=0</a><br>
>> ><br>
>> ><br>
>> > 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.<br>
>> ><br>
>> > 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.<br>
>> ><br>
>> > Wikipedia: Don't repeat yourself<br>
>> > <a href="https://en.wikipedia.org/wiki/Don't_repeat_yourself">https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FDon%27t_repeat_yourself&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200388617%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=ArQcjgKedJw1nBDJMHn9IXWR8eCaaeK4byCx1Q1deMU%3D&reserved=0</a><br>
>> ><br>
>> ><br>
>> > And some "dry humor" on that page:<br>
>> ><br>
>> > The opposing view to DRY is called WET, a backronym commonly taken to stand for write everything twice (alternatively write every time, we enjoy typing or waste everyone's time).<br>
>> ><br>
>> ><br>
>> > Recommendations:<br>
>> ><br>
>> > if your model data is starting with tangent values (for whatever reason) then convert them to normal vectors, and<br>
>> > stick with standard X3D for best results.<br>
>> ><br>
>> ><br>
>> > Have fun with normal X3D! 🙂<br>
>> ><br>
>> ><br>
>> > all the best, Don<br>
>> ><br>
>> > --<br>
>> ><br>
>> > Don Brutzman Naval Postgraduate School, Code USW/Br brutzman@nps.edu<br>
>> ><br>
>> > Watkins 270, MOVES Institute, Monterey CA 93943-5000 USA +1.831.656.2149<br>
>> ><br>
>> > X3D graphics, virtual worlds, navy robotics <a href="https://faculty.nps.edu/brutzman">
https://faculty.nps.edu/brutzman</a><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> > ________________________________<br>
>> > From: x3d-public <x3d-public-bounces@web3d.org> on behalf of Joe D Williams via x3d-public <x3d-public@web3d.org><br>
>> > Sent: Sunday, May 18, 2025 5:03 PM<br>
>> > To: John Carlson <yottzumm@gmail.com><br>
>> > Cc: Joe D Williams <joedwil@earthlink.net>; Extensible 3D (X3D) Graphics public discussion <x3d-public@web3d.org><br>
>> > Subject: Re: [x3d-public] 3D graphics, vertex attributes Tangent index and vector<br>
>> ><br>
>> > ok, seems like from what I can study so far,<br>
>> ><br>
>> > the first use of Tangent vector is authortime production of<br>
>> ><br>
>> > normalized Normal vector for vertex or face.<br>
>> ><br>
>> > The author is looking for relief effects (bumpmapping)<br>
>> ><br>
>> > that are produced by Tangent vector.<br>
>> ><br>
>> > This process (MikkTSpace algorithm) would fill Normal vector.<br>
>> ><br>
>> > This process of generating Normal vector space is called baking.<br>
>> ><br>
>> ><br>
>> ><br>
>> > For Level5 runtime,<br>
>> ><br>
>> > If Normal vector not null then used directly.<br>
>> ><br>
>> > If Normal vector null, then normals auto generated by creaseAngle<br>
>> ><br>
>> > If Tangent vector null, then nothing.<br>
>> ><br>
>> > If Level 5 and Tangent vector not null then possible relief effects<br>
>> ><br>
>> > using length of Tangent vector.<br>
>> ><br>
>> ><br>
>> ><br>
>> > No "bake" in runtime.<br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> > For runtime, the generated Normal vector is used and<br>
>> ><br>
>> > if Tangent vector is not null, for the author to produce relief effects<br>
>> ><br>
>> > using length of Tangent vector.<br>
>> ><br>
>> > Is that true?<br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> > .<br>
>> ><br>
>> > For runtime<br>
>> ><br>
>> > -----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<br>
>> ><br>
>> ><br>
>> ><br>
>> > Please review Michalis’ response on this thread about tangentIndex and tangentPerVertex. I believe the corresponding normal fields apply.<br>
>> ><br>
>> > Level 5? That depends on updated standard.<br>
>> ><br>
>> > On Sat, May 17, 2025 at 2:04 PM Joe D Williams <joedwil@earthlink.net> wrote:<br>
>> ><br>
>> > * must have tangentIndex (unless tangentIndex same as normalIndex).<br>
>> ><br>
>> > * If no tangentIndex, coordIndex used?<br>
>> ><br>
>> > * tangentPerVertex? Can tangent be applied to vertex or face (like normal and color)?<br>
>> ><br>
>> > * must have tangent vector (may be auto filled).<br>
>> ><br>
>> > * Level 5 required since level 4 does not have tangent.<br>
>> ><br>
>> > Thanks,<br>
>> ><br>
>> > Joe<br>
>> ><br>
>> ><br>
>> ><br>
>> > -----Original Message-----<br>
>> > From: John Carlson <yottzumm@gmail.com><br>
>> > Sent: May 16, 2025 10:32 PM<br>
>> > To: Extensible 3D (X3D) Graphics public discussion <x3d-public@web3d.org><br>
>> > Cc: Joe D Williams <joedwil@earthlink.net><br>
>> > Subject: Re: [x3d-public] 3D graphics, vertex attributes Tangent index and vector<br>
>> ><br>
>> ><br>
>> ><br>
>> > Joe,<br>
>> ><br>
>> > X_ITE IFS:<br>
>> ><br>
>> > <a href="https://create3000.github.io/x_ite/components/geometry3d/indexedfaceset/">
https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcreate3000.github.io%2Fx_ite%2Fcomponents%2Fgeometry3d%2Findexedfaceset%2F&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200410801%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=3xDsuKcMJc87j2bLfU4KyNF3brsK3IbYL0CqwE8Quc4%3D&reserved=0</a><br>
>> ><br>
>> > Summary, only tangent field.<br>
>> > John<br>
>> ><br>
>> > On Fri, May 16, 2025 at 8:59 PM Joe D Williams via x3d-public <x3d-public@web3d.org> wrote:<br>
>> ><br>
>> > like for normals, is there a tangentPerVertex true/false where tangent value<br>
>> ><br>
>> > is associated with vertex or face?<br>
>> ><br>
>> > If tangentIndex null, is coordIndex used?<br>
>> ><br>
>> > If Tangent vector null tangents are generated after Normal vector?<br>
>> ><br>
>> ><br>
>> ><br>
>> > Thanks,<br>
>> ><br>
>> > Joe<br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> > -----Original Message-----<br>
>> > From: Extensible 3D (X3D) Graphics public discussion <x3d-public@web3d.org><br>
>> > Sent: May 15, 2025 6:19 AM<br>
>> > To: X3D <x3d-public@web3d.org><br>
>> > Cc: Holger Seelig <holger.seelig@yahoo.de><br>
>> > Subject: Re: [x3d-public] 3D graphics, vertex attributes Tangent index and vector<br>
>> ><br>
>> ><br>
>> ><br>
>> > There are also glTF tests for tangents:<br>
>> ><br>
>> > Geometry with tangent node:<br>
>> > <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">
https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcreate3000.github.io%2Fx_ite%2Flaboratory%2Fgltf-sample-viewer%2F%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2FKhronosGroup%2FglTF-Sample-Models%2Fmaster%2F2.0%2FNormalTangentMirrorTest%2FglTF%2FNormalTangentMirrorTest.gltf&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200428820%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=PpWz8VSjvMhqqCEZJV4O4LvlGzFnG2eLGCNk5wbhH4M%3D&reserved=0</a><br>
>> ><br>
>> > Geometry without tangent node (auto generated tangents using MikkTSpace algorithm):<br>
>> > <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">
https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcreate3000.github.io%2Fx_ite%2Flaboratory%2Fgltf-sample-viewer%2F%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2FKhronosGroup%2FglTF-Sample-Models%2Fmaster%2F2.0%2FNormalTangentTest%2FglTF%2FNormalTangentTest.gltf&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200445874%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=DU2%2F7PgyUgyWqjqiAcJuw5G6ncNht9yPMBME0SudrrY%3D&reserved=0</a><br>
>> ><br>
>> > The reflection in all half spheres should look the same.<br>
>> > Turn on IBL (Image Based Lighting).<br>
>> ><br>
>> > Best regards,<br>
>> > Holger<br>
>> ><br>
>> > --<br>
>> > Holger Seelig<br>
>> > Leipzig, Germany<br>
>> ><br>
>> > holger.seelig@yahoo.de<br>
>> > <a href="https://create3000.github.io/x_ite/">https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcreate3000.github.io%2Fx_ite%2F&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200461168%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=XjmnXZ9c2Q8GbU%2F2E%2F57OT5BPf%2FOIDPEyMWaAIKk3l8%3D&reserved=0</a><br>
>> > <a href="https://patreon.com/X_ITE">https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatreon.com%2FX_ITE&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200476270%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=dnpHDXrPKsnrgHGgRtQcJJd2IZxprCViABurmJXB22E%3D&reserved=0</a><br>
>> ><br>
>> ><br>
>> > Am 15.05.2025 um 10:35 schrieb Holger Seelig via x3d-public <x3d-public@web3d.org>:<br>
>> > 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.<br>
>> ><br>
>> > If there is no Tangent node, the MikkTSpace algorithm is used to generate tangent vectors, as need by the glTF specification.<br>
>> ><br>
>> > If there is a Tangent node and the vector field is empty, results are undefined.<br>
>> ><br>
>> > Tangent node:<br>
>> > <a href="https://create3000.github.io/x_ite/components/rendering/tangent/">https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcreate3000.github.io%2Fx_ite%2Fcomponents%2Frendering%2Ftangent%2F&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200493482%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=55sK6dVEuZQzTVZXhZ8I%2F1DhNilNlfkn2XvvmBO0xUo%3D&reserved=0</a><br>
>> ><br>
>> > IndexedFaceSet with tangent field:<br>
>> > <a href="https://create3000.github.io/x_ite/components/geometry3d/indexedfaceset/#fields-tangent">
https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcreate3000.github.io%2Fx_ite%2Fcomponents%2Fgeometry3d%2Findexedfaceset%2F%23fields-tangent&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200513069%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=dgiBEyO2hhPqy1%2FT87BJTK%2BwdI%2BpPcwt2YYGxaIHp70%3D&reserved=0</a><br>
>> ><br>
>> > Best regards,<br>
>> > Holger<br>
>> ><br>
>> > --<br>
>> > Holger Seelig<br>
>> > Leipzig, Germany<br>
>> ><br>
>> > holger.seelig@yahoo.de<br>
>> > <a href="https://create3000.github.io/x_ite/">https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcreate3000.github.io%2Fx_ite%2F&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200532049%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=7Ro1wWBaCc%2BvT6L99mV0McgUAgjn%2F0o4dYUiY2692ZQ%3D&reserved=0</a><br>
>> > <a href="https://patreon.com/X_ITE">https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatreon.com%2FX_ITE&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200551288%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=ZhfBNA1G7rY%2Bdue%2BiXb9EMFn3aXE54dde3KT8UaJNfs%3D&reserved=0</a><br>
>> ><br>
>> ><br>
>> > Am 15.05.2025 um 10:24 schrieb Michalis Kamburelis <michalis.kambi@gmail.com>:<br>
>> > I don't know about Tangent in X_ITE...<br>
>> ><br>
>> > But in Castle Game Engine we have a similar extension -- Tangent node ( <a href="https://castle-engine.io/x3d_implementation_rendering_extensions.php">
https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcastle-engine.io%2Fx3d_implementation_rendering_extensions.php&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200570539%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=Nlb39lRO2YzN2P0E4B5wUDtgnsGJ25vkYD0g%2BmFeDKg%3D&reserved=0</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.)<br>
>> ><br>
>> > 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.<br>
>> ><br>
>> > See <a href="https://castle-engine.io/x3d_implementation_rendering_extensions.php">
https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcastle-engine.io%2Fx3d_implementation_rendering_extensions.php&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200589324%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=Xx2qMsMjIU1cIZJPyGgF4c5rp48LmfqZHkjJ9S%2BK%2By4%3D&reserved=0</a>
for more details.<br>
>> ><br>
>> > Regards,<br>
>> > Michalis<br>
>> ><br>
>> > czw., 15 maj 2025 o 07:43 John Carlson via x3d-public <x3d-public@web3d.org> napisał(a):<br>
>> ><br>
>> > Note, it’s Tangent vector=… not Tangent point=…<br>
>> ><br>
>> > John<br>
>> ><br>
>> > On Thu, May 15, 2025 at 12:38 AM John Carlson <yottzumm@gmail.com> wrote:<br>
>> ><br>
>> > I’d ask Holger, cc’d<br>
>> ><br>
>> > I’ve not used Tangent, myself.<br>
>> ><br>
>> > X_ITE Supports up to Level 4, so I guess you’re proposing a new level 5 for the Geometry 3D component?<br>
>> ><br>
>> > Look at X_ITE IFS:<br>
>> ><br>
>> > <IMG_0516.png><br>
>> ><br>
>> > Maybe check Holger’s create3000 Library for examples?<br>
>> ><br>
>> > To retrieve examples, last time I tried:<br>
>> ><br>
>> > git clone <a href="https://github.com/create3000/Library">https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fcreate3000%2FLibrary&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200608115%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=JdzgrFdJEsyXix%2BW43%2B8MAU6a%2FFgIItVOPuhEt3mIX8%3D&reserved=0</a><br>
>> > Online at:<br>
>> ><br>
>> > <a href="https://github.com/create3000/Library">https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fcreate3000%2FLibrary&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200624853%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=Ge%2BkLU1GPoDGZG5wQSl5nGgWxSm0T4YFASJw6GwlgxU%3D&reserved=0</a><br>
>> > Let’s get v2 Joe Kick out the door, check v2 finger joints, and make sure all joints have converted to v2.<br>
>> ><br>
>> > John<br>
>> ><br>
>> > On Wed, May 14, 2025 at 10:45 PM Joe D Williams <joedwil@earthlink.net> wrote:<br>
>> ><br>
>> ><br>
>> ><br>
>> > Main questions, in IFS Level5:<br>
>> > Is a default tangent generated if Tangent point="" field empty?<br>
>> > tangentPerVertex? assigned to vertex or face?<br>
>> > tangentIndex? If no tangentIndex is coordIndex used?<br>
>> ><br>
>> ><br>
>> ><br>
>> > Thanks,<br>
>> > Joe<br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> > -----Original Message-----<br>
>> > From: John Carlson <yottzumm@gmail.com><br>
>> > Sent: May 14, 2025 3:00 PM<br>
>> > To: Extensible 3D (X3D) Graphics public discussion <x3d-public@web3d.org><br>
>> > Cc: Joe D Williams <joedwil@earthlink.net><br>
>> > Subject: Re: [x3d-public] 3D graphics, vertex attributes<br>
>> ><br>
>> ><br>
>> ><br>
>> > Joe,<br>
>> ><br>
>> > X_ITE has a tangent node:<br>
>> ><br>
>> > Tangent | X_ITE X3D Browser<br>
>> ><br>
>> > Enjoy!<br>
>> ><br>
>> > John<br>
>> ><br>
>> > On Wed, May 14, 2025 at 4:46 PM Joe D Williams via x3d-public <x3d-public@web3d.org> wrote:<br>
>> ><br>
>> > From this:<br>
>> ><br>
>> > <a href="https://docs.google.com/document/d/1hCetnGIkut_dyt4mwkDSTNiLTbrVg1jLo_EArE74DRg/edit?tab=t.0">
https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdocs.google.com%2Fdocument%2Fd%2F1hCetnGIkut_dyt4mwkDSTNiLTbrVg1jLo_EArE74DRg%2Fedit%3Ftab%3Dt.0&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200642079%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=%2FAuhyK7W2zDHaxy%2BMIRF07Ve94Y0A%2BWWb7OofVb05pY%3D&reserved=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">
https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdocs.google.com%2Fspreadsheets%2Fd%2F18d1qy4jx-d_kLsam-JQAzig23w7dTau0Moe7M32lVvk%2Fedit%3Fgid%3D0%23gid%3D0&data=05%7C02%7Cbrutzman%40nps.edu%7C5010a47039124367feb708dd9a477d98%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638836355200662035%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=4MpB30vyAlH78SJUrim3wvgE5IAEuN1gnBqBjV%2FlAAY%3D&reserved=0</a><br>
>> ><br>
>> ><br>
>> > Thanks,<br>
>> > Joe<br>
>> ><br>
>> ><br>
>> > _______________________________________________<br>
>> > x3d-public mailing list<br>
>> > x3d-public@web3d.org<br>
>> > <a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br>
>> ><br>
>> ><br>
>> ><br>
>> > _______________________________________________<br>
>> > x3d-public mailing list<br>
>> > x3d-public@web3d.org<br>
>> > <a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br>
>> ><br>
>> > _______________________________________________<br>
>> > x3d-public mailing list<br>
>> > x3d-public@web3d.org<br>
>> > <a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br>
>> ><br>
>> ><br>
>> ><br>
>> > _______________________________________________<br>
>> > x3d-public mailing list<br>
>> > x3d-public@web3d.org<br>
>> > <a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> > _______________________________________________<br>
>> > x3d-public mailing list<br>
>> > x3d-public@web3d.org<br>
>> > <a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br>
</div>
</span></font></div>
</body>
</html>