[x3d-public] 3D graphics, vertex attributes Tangent index and vector
Michalis Kamburelis
michalis.kambi at gmail.com
Fri May 23 19:41:41 PDT 2025
Don,
Answering the """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.""" :
I mentioned this benefit (of knowing tangent vector values) in point 3
of my message. Now also on
https://github.com/michaliskambi/x3d-tests/wiki/Tangent-node-in-X3D ,
see there:
"""
Ultimately, the "perfect tangent value" is the one that was used to
bake the normalmaps. If the authoring tool (like Blender) that you
used to make normalmaps used a bit different algorithm to calculate
tangents than your renderer -> then the rendering of normalmaps will
be slightly "off".
There's a nice screenshot in
https://gamedev.stackexchange.com/questions/146855/how-do-you-compute-the-tangent-space-vectors-with-normals-given-in-the-mesh
, scroll to "There are multiple ways to generate tangent spaces for a
mesh, and not all of them agree on the result.". The screenshot there
shows subtle problems that result from having authoring tool and
renderer calculate a bit different tangent vectors.
"""
There is a really a good reason why glTF has them and why X_ITE and
Castle Game Engine have defined extensions to have them too :)
Simplifying the above explanation: one needs to have Tangent
information (provided in Tangent node, not auto-calculated), to use
the normalmap exactly like the 3D authoring tool that generated it
intended. I *did* mention it in the past from I recall, I did show the
screenshot from
https://gamedev.stackexchange.com/questions/146855/how-do-you-compute-the-tangent-space-vectors-with-normals-given-in-the-mesh
already in 2 past threads on x3d-pubilc (in 2019 and 2022, looking at
gmail history :) ).
Again, maybe I can explain it best on next Friday call, if you want.
Regards,
Michalis
sob., 24 maj 2025 o 04:00 Brutzman, Donald (Don) (CIV)
<brutzman at nps.edu> napisał(a):
>
> Thanks for extra references, interesting.
>
> To be clearer, I was referring to "capital-T" Tangent planes. We do have one of those in ClippingPlane node, plane field.
>
> https://www.web3d.org/x3d/content/X3dTooltips.html#ClipPlane.plane
>
>
> 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.
>
> 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.
>
> 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.
>
> p.s. looks like we also have mapped WebGL/glTF techniques using normalTexture node, e.g.
>
> X3D 4.1 draft Architecture,12.4.5 Material
> https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/components/shape.html#Material
>
> SFFloat [in,out] normalScale 1 [0, ∞)
> SFNode [in,out] normalTexture NULL [X3DSingleTextureNode]
> SFString [in,out] normalTextureMapping ""
>
> I hope that this deeper-dive into details is viewed as helpful and constructive.
>
> 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.
>
>
> all the best, Don
>
> --
>
> Don Brutzman Naval Postgraduate School, Code USW/Br brutzman at nps.edu
>
> Watkins 270, MOVES Institute, Monterey CA 93943-5000 USA +1.831.656.2149
>
> X3D graphics, virtual worlds, navy robotics https://faculty.nps.edu/brutzman
>
>
>
> ________________________________
> From: Michalis Kamburelis <michalis.kambi at gmail.com>
> Sent: Friday, May 23, 2025 3:16 PM
> To: John Carlson <yottzumm at gmail.com>
> Cc: Extensible 3D (X3D) Graphics public discussion <x3d-public at web3d.org>; Joe D Williams <joedwil at earthlink.net>; Brutzman, Donald (Don) (CIV) <brutzman at nps.edu>
> Subject: Re: [x3d-public] 3D graphics, vertex attributes Tangent index and vector
>
> NPS WARNING: *external sender* verify before acting.
>
>
> John: I know, in math, in 3D, you generally speak about "tangent
> planes" ( 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 ).
>
> The name "tangent vector" is just a shorthand for "vector lying on a
> tangent plane". This is a standard for calling this value in the
> context of bump mapping / normal maps.
>
> See e.g. glTF spec with useful definition (
> 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
> "2.2.3. Technical Terminology" ):
>
> """
> tangent
> A unit XYZ vector defining a tangential direction on the surface.
> """
>
> There is also "tangent coordinate space". If you want to get dirty and
> read about details, search for "tangent 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 ,
> 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
> .
>
> Regards,
> Michalis
>
> sob., 24 maj 2025 o 00:05 John Carlson <yottzumm at gmail.com> napisał(a):
> >
> > Tangent planes seem more likely than tangent vectors, at least in 3D.
> >
> > Just a naming convention.
> >
> > John
> > On Fri, May 23, 2025 at 4:09 PM Michalis Kamburelis <michalis.kambi at gmail.com> wrote:
> >>
> >> Don: I don't think that this decision (to never support Tangent node
> >> in X3D), is correct. I would actually say we should add Tangent to
> >> X3D.
> >>
> >> Let me present a clear argument "why". I copied some of the reasoning
> >> from mail below to
> >> 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 ,
> >> to have a future reference.
> >>
> >> 1. Current state: As of now, both X_ITE and Castle Game Engine have
> >> extensions to define Tangent node.
> >>
> >> So we have invented the "Tangent" node independently in 2
> >> implementations and, predictably, they are unfortunately
> >> similar-but-not-exactly the same. Links from this thread, where you
> >> can notice a difference:
> >>
> >> - 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 ,
> >> - 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
> >>
> >> Also glTF format has them. See
> >> 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
> >> , information about "TANGENT".
> >>
> >> ( Holger, if you read this: I think I will change Castle Game
> >> Engine's Tangent node in the future, to match better both X_ITE and
> >> glTF, thus we will have matching definitions with X_ITE. Your approach
> >> is better, Tangent.vector should be 4D. )
> >>
> >> 2. Tangents *do not* just repeat the same information as normal
> >> vectors, DRY principle doesn't apply here. I.e. the tangent vectors
> >> are *not* a replacement for knowing normal vectors (nor is the other
> >> way around).
> >>
> >> And just because the model provides normal vectors -- doesn't
> >> mean that tangent vectors are already precisely 100% determined.
> >>
> >> There are multiple similar algorithms to determine tangent
> >> vectors. The normal vector alone doesn't yet define the tangent ->
> >> because in a 3D space, if you have a normal vector -> you still have
> >> infinite possible values for a vector "orthogonal to normal". So
> >> tangent vectors are auto-calculated (when not explicitly provided) to
> >> match the normal vectors, but *also* to match the texture coordinates
> >> used for normal maps. There are edge-cases when it is just not obvious
> >> what should be the "perfect tangent" so various implementations
> >> (MikkTSpace is just one example) can do different things.
> >>
> >> 3. Ultimately, the "perfect tangent value" is the one that was used to
> >> bake the normalmaps. If the authoring tool (like Blender) that you
> >> used to make normalmaps used a bit different algorithm to calculate
> >> tangents than your renderer -> then the rendering of normalmaps will
> >> be slightly "off".
> >>
> >> There's a nice screenshot in
> >> 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
> >> , scroll to "There are multiple ways to generate tangent spaces for a
> >> mesh, and not all of them agree on the result.". The screenshot there
> >> shows subtle problems that result from having authoring tool and
> >> renderer calculate a *bit* different tangent vectors.
> >>
> >> So the perfect thing to do, from a renderer, is to *not* calculate
> >> the tangent vectors, instead take the tangent vectors as provided by
> >> the authoring tool. That exactly why glTF has tangents, and why X_ITE
> >> and Castle Game Engine support them too -- we don't just discard
> >> tangent values from glTF (only to auto-calculate them), we prefer to
> >> take tangent values recorded in the 3D model, because this makes
> >> really good rendering.
> >>
> >> See 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
> >> , which I just created -- it mostly copies what I said above.
> >>
> >> I hope this helps. I'll be happy to explain it better on next Web3d
> >> Friday teleconference, if you're not tired of my talking :) I can show
> >> how the normalmaps are actually created.
> >>
> >> Regards,
> >> Michalis
> >>
> >>
> >> pt., 23 maj 2025 o 21:03 Brutzman, Donald (Don) (CIV) via x3d-public
> >> <x3d-public at web3d.org> napisał(a):
> >> >
> >> > 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.
> >> >
> >> > Of geometric note is that they are literally orthogonal and thus either representation can be used to the other.
> >> >
> >> > You will not find Tangent node in the X3D specification.
> >> >
> >> > X3D 4.1 draft Architecture, Annex Z (informative) Version content
> >> > https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD//Part01/versionContent.html
> >> >
> >> >
> >> > Note that the X_ITE documentation specifically notes that support in that application is nonstandard.
> >> >
> >> >
> >> > SFNode [in, out] tangent NULL [Tangent] non-standard]
> >> > 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
> >> >
> >> >
> >> > 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.
> >> >
> >> > 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.
> >> >
> >> > Wikipedia: 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
> >> >
> >> >
> >> > And some "dry humor" on that page:
> >> >
> >> > 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).
> >> >
> >> >
> >> > Recommendations:
> >> >
> >> > if your model data is starting with tangent values (for whatever reason) then convert them to normal vectors, and
> >> > stick with standard X3D for best results.
> >> >
> >> >
> >> > Have fun with normal X3D! 🙂
> >> >
> >> >
> >> > all the best, Don
> >> >
> >> > --
> >> >
> >> > Don Brutzman Naval Postgraduate School, Code USW/Br brutzman at nps.edu
> >> >
> >> > Watkins 270, MOVES Institute, Monterey CA 93943-5000 USA +1.831.656.2149
> >> >
> >> > X3D graphics, virtual worlds, navy robotics https://faculty.nps.edu/brutzman
> >> >
> >> >
> >> >
> >> >
> >> > ________________________________
> >> > From: x3d-public <x3d-public-bounces at web3d.org> on behalf of Joe D Williams via x3d-public <x3d-public at web3d.org>
> >> > Sent: Sunday, May 18, 2025 5:03 PM
> >> > To: John Carlson <yottzumm at gmail.com>
> >> > Cc: Joe D Williams <joedwil at earthlink.net>; Extensible 3D (X3D) Graphics public discussion <x3d-public at web3d.org>
> >> > Subject: Re: [x3d-public] 3D graphics, vertex attributes Tangent index and vector
> >> >
> >> > ok, seems like from what I can study so far,
> >> >
> >> > the first use of Tangent vector is authortime production of
> >> >
> >> > normalized Normal vector for vertex or face.
> >> >
> >> > The author is looking for relief effects (bumpmapping)
> >> >
> >> > that are produced by Tangent vector.
> >> >
> >> > This process (MikkTSpace algorithm) would fill Normal vector.
> >> >
> >> > This process of generating Normal vector space is called baking.
> >> >
> >> >
> >> >
> >> > For Level5 runtime,
> >> >
> >> > If Normal vector not null then used directly.
> >> >
> >> > If Normal vector null, then normals auto generated by creaseAngle
> >> >
> >> > If Tangent vector null, then nothing.
> >> >
> >> > If Level 5 and Tangent vector not null then possible relief effects
> >> >
> >> > using length of Tangent vector.
> >> >
> >> >
> >> >
> >> > No "bake" in runtime.
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> > For runtime, the generated Normal vector is used and
> >> >
> >> > if Tangent vector is not null, for the author to produce relief effects
> >> >
> >> > using length of Tangent vector.
> >> >
> >> > Is that true?
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> > .
> >> >
> >> > For runtime
> >> >
> >> > -----Original Message-----
> >> > From: John Carlson <yottzumm at gmail.com>
> >> > Sent: May 17, 2025 1:15 PM
> >> > To: Joe D Williams <joedwil at earthlink.net>
> >> > Cc: Extensible 3D (X3D) Graphics public discussion <x3d-public at web3d.org>
> >> > Subject: Re: [x3d-public] 3D graphics, vertex attributes Tangent index and vector
> >> >
> >> >
> >> >
> >> > Please review Michalis’ response on this thread about tangentIndex and tangentPerVertex. I believe the corresponding normal fields apply.
> >> >
> >> > Level 5? That depends on updated standard.
> >> >
> >> > On Sat, May 17, 2025 at 2:04 PM Joe D Williams <joedwil at earthlink.net> wrote:
> >> >
> >> > * must have tangentIndex (unless tangentIndex same as normalIndex).
> >> >
> >> > * If no tangentIndex, coordIndex used?
> >> >
> >> > * tangentPerVertex? Can tangent be applied to vertex or face (like normal and color)?
> >> >
> >> > * must have tangent vector (may be auto filled).
> >> >
> >> > * Level 5 required since level 4 does not have tangent.
> >> >
> >> > Thanks,
> >> >
> >> > Joe
> >> >
> >> >
> >> >
> >> > -----Original Message-----
> >> > From: John Carlson <yottzumm at gmail.com>
> >> > Sent: May 16, 2025 10:32 PM
> >> > To: Extensible 3D (X3D) Graphics public discussion <x3d-public at web3d.org>
> >> > Cc: Joe D Williams <joedwil at earthlink.net>
> >> > Subject: Re: [x3d-public] 3D graphics, vertex attributes Tangent index and vector
> >> >
> >> >
> >> >
> >> > Joe,
> >> >
> >> > X_ITE IFS:
> >> >
> >> > 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
> >> >
> >> > Summary, only tangent field.
> >> > John
> >> >
> >> > On Fri, May 16, 2025 at 8:59 PM Joe D Williams via x3d-public <x3d-public at web3d.org> wrote:
> >> >
> >> > like for normals, is there a tangentPerVertex true/false where tangent value
> >> >
> >> > is associated with vertex or face?
> >> >
> >> > If tangentIndex null, is coordIndex used?
> >> >
> >> > If Tangent vector null tangents are generated after Normal vector?
> >> >
> >> >
> >> >
> >> > Thanks,
> >> >
> >> > Joe
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> > -----Original Message-----
> >> > From: Extensible 3D (X3D) Graphics public discussion <x3d-public at web3d.org>
> >> > Sent: May 15, 2025 6:19 AM
> >> > To: X3D <x3d-public at web3d.org>
> >> > Cc: Holger Seelig <holger.seelig at yahoo.de>
> >> > Subject: Re: [x3d-public] 3D graphics, vertex attributes Tangent index and vector
> >> >
> >> >
> >> >
> >> > There are also glTF tests for tangents:
> >> >
> >> > Geometry with tangent node:
> >> > 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
> >> >
> >> > Geometry without tangent node (auto generated tangents using MikkTSpace algorithm):
> >> > 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
> >> >
> >> > The reflection in all half spheres should look the same.
> >> > Turn on IBL (Image Based Lighting).
> >> >
> >> > Best regards,
> >> > Holger
> >> >
> >> > --
> >> > Holger Seelig
> >> > Leipzig, Germany
> >> >
> >> > holger.seelig at yahoo.de
> >> > 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
> >> > 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
> >> >
> >> >
> >> > Am 15.05.2025 um 10:35 schrieb Holger Seelig via x3d-public <x3d-public at web3d.org>:
> >> > 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.
> >> >
> >> > If there is no Tangent node, the MikkTSpace algorithm is used to generate tangent vectors, as need by the glTF specification.
> >> >
> >> > If there is a Tangent node and the vector field is empty, results are undefined.
> >> >
> >> > Tangent node:
> >> > 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
> >> >
> >> > IndexedFaceSet with tangent field:
> >> > 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
> >> >
> >> > Best regards,
> >> > Holger
> >> >
> >> > --
> >> > Holger Seelig
> >> > Leipzig, Germany
> >> >
> >> > holger.seelig at yahoo.de
> >> > 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
> >> > 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
> >> >
> >> >
> >> > Am 15.05.2025 um 10:24 schrieb Michalis Kamburelis <michalis.kambi at gmail.com>:
> >> > I don't know about Tangent in X_ITE...
> >> >
> >> > But in Castle Game Engine we have a similar extension -- Tangent node ( 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 ). 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.)
> >> >
> >> > 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.
> >> >
> >> > See 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 for more details.
> >> >
> >> > Regards,
> >> > Michalis
> >> >
> >> > czw., 15 maj 2025 o 07:43 John Carlson via x3d-public <x3d-public at web3d.org> napisał(a):
> >> >
> >> > Note, it’s Tangent vector=… not Tangent point=…
> >> >
> >> > John
> >> >
> >> > On Thu, May 15, 2025 at 12:38 AM John Carlson <yottzumm at gmail.com> wrote:
> >> >
> >> > I’d ask Holger, cc’d
> >> >
> >> > I’ve not used Tangent, myself.
> >> >
> >> > X_ITE Supports up to Level 4, so I guess you’re proposing a new level 5 for the Geometry 3D component?
> >> >
> >> > Look at X_ITE IFS:
> >> >
> >> > <IMG_0516.png>
> >> >
> >> > Maybe check Holger’s create3000 Library for examples?
> >> >
> >> > To retrieve examples, last time I tried:
> >> >
> >> > git clone 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
> >> > Online at:
> >> >
> >> > 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
> >> > Let’s get v2 Joe Kick out the door, check v2 finger joints, and make sure all joints have converted to v2.
> >> >
> >> > John
> >> >
> >> > On Wed, May 14, 2025 at 10:45 PM Joe D Williams <joedwil at earthlink.net> wrote:
> >> >
> >> >
> >> >
> >> > Main questions, in IFS Level5:
> >> > Is a default tangent generated if Tangent point="" field empty?
> >> > tangentPerVertex? assigned to vertex or face?
> >> > tangentIndex? If no tangentIndex is coordIndex used?
> >> >
> >> >
> >> >
> >> > Thanks,
> >> > Joe
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> > -----Original Message-----
> >> > From: John Carlson <yottzumm at gmail.com>
> >> > Sent: May 14, 2025 3:00 PM
> >> > To: Extensible 3D (X3D) Graphics public discussion <x3d-public at web3d.org>
> >> > Cc: Joe D Williams <joedwil at earthlink.net>
> >> > Subject: Re: [x3d-public] 3D graphics, vertex attributes
> >> >
> >> >
> >> >
> >> > Joe,
> >> >
> >> > X_ITE has a tangent node:
> >> >
> >> > Tangent | X_ITE X3D Browser
> >> >
> >> > Enjoy!
> >> >
> >> > John
> >> >
> >> > On Wed, May 14, 2025 at 4:46 PM Joe D Williams via x3d-public <x3d-public at web3d.org> wrote:
> >> >
> >> > From this:
> >> >
> >> > 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
> >> >
> >> >
> >> > In 3D graphics, vertex attributes define per-vertex data necessary
> >> > for rendering, animation, shading, and so on.
> >> > These attributes include geometric properties such as
> >> > position, normal, tangents, texture mapping information (UV coordinates),
> >> > shading data (vertex colors), and
> >> > deformation information (skinning weights and blend shapes).
> >> >
> >> >
> >> > In this discussion of vertex attributes, the only one I don't recall
> >> > seeing in X3D is tangent?
> >> >
> >> > Associated with this work:
> >> > 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
> >> >
> >> >
> >> > Thanks,
> >> > Joe
> >> >
> >> >
> >> > _______________________________________________
> >> > x3d-public mailing list
> >> > x3d-public at web3d.org
> >> > http://web3d.org/mailman/listinfo/x3d-public_web3d.org
> >> >
> >> >
> >> >
> >> > _______________________________________________
> >> > x3d-public mailing list
> >> > x3d-public at web3d.org
> >> > http://web3d.org/mailman/listinfo/x3d-public_web3d.org
> >> >
> >> > _______________________________________________
> >> > x3d-public mailing list
> >> > x3d-public at web3d.org
> >> > http://web3d.org/mailman/listinfo/x3d-public_web3d.org
> >> >
> >> >
> >> >
> >> > _______________________________________________
> >> > x3d-public mailing list
> >> > x3d-public at web3d.org
> >> > http://web3d.org/mailman/listinfo/x3d-public_web3d.org
> >> >
> >> >
> >> >
> >> >
> >> >
> >> > _______________________________________________
> >> > x3d-public mailing list
> >> > x3d-public at web3d.org
> >> > http://web3d.org/mailman/listinfo/x3d-public_web3d.org
More information about the x3d-public
mailing list