[x3d-public] conversion of glTF metadata to X3D metadata
Brutzman, Donald (Don) (CIV)
brutzman at nps.edu
Mon Oct 9 15:40:41 PDT 2023
Great to learn of all this potential consistency and interoperability!
I think it is very appropriate for X3D Working Group to collect bidirectional mapping rules between X3D and glTF metadata.
* This can be super informal at first,
* We can collect and publish examples,
* We can write corresponding metadata-conversion validation rules and integrate those test diagnostics in our tool suite,
* This can become a Web3D Consortium Recommend Practice,
* This will be of definite interest to Metaverse Standards Forum (MSF) 3D Web Interoperability Group,
* This might eventually be part of X3D 4.1 specifications.
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
-----Original Message-----
From: x3d-public <x3d-public-bounces at web3d.org> On Behalf Of Andreas Plesch
Sent: Monday, October 9, 2023 10:49 AM
To: Michalis Kamburelis <michalis.kambi at gmail.com>
Cc: X3D <x3d-public at web3d.org>
Subject: Re: [x3d-public] conversion of glTF metadata to X3D metadata
Thanks, Michalis. x3dom does pretty much the same mapping of extras to metadata, with minor differences:
The name of the MetadataSet is "extras" except for "scene_extras" and "asset_extras" for WorldInfo MetadataSets.
Numbers become MetadataFloat rather than MetadataDouble.
MetadataDouble is more appropriate for the json number type, I believe, but MetadataFloat seems more commonly used in X3D since 32bit suffices in most cases.
Here is the full conversion:
https://github.com/x3dom/x3dom/blob/master/src/util/glTF/glTF2Loader.js#L149
Does CGE convert the asset object as well ?
I am also looking for examples of uses of the glTF metadata xmp extension but could not find much so far. I suspect Adobe may have such examples.
Best, Andreas
On Mon, Oct 9, 2023 at 1:20 PM Michalis Kamburelis < <mailto:michalis.kambi at gmail.com> michalis.kambi at gmail.com> wrote:
>
> In CGE/view3dscene we convert glTF "extras" to X3D Metadata.
>
> Our practical use-case for it is that Blender allows to define "custom
> properties" on various objects (Blender meshes, objects, cameras...)
> and the Blender->glTF exporter puts these "Blender custom properties"
> in "glTF extras". Being able to read these things in Castle Game
> Engine allows authors to define some things in Blender that can be
> game-specific and that are attached to particular objects, e.g.
>
> - "this is a monster spawn point",
> - "this is a destructible wall with 123 hit points",
> - "this is lava",
> - "walking on this floor hurts the player, taking 4 hit points per
> second",
> - "this is a water volume, if player is inside this then it should be
> treated as underwater".
>
> So we convert glTF extras tro X3D Metadata, and give CGE users easy
> way to access this metadata, and everyone is happy, no matter what
> tool and format they use -- they get possibilities :) See
> <https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcastle-engine.io%2Fblender%23_custom_properties&data=05%7C01%7Cbrutzman%40nps.edu%7C7b4de2dc055541b84b2108dbc8f0399f%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638324706343579427%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=Xpv5MHdNU54VlqbxMSsjnyQ4jB2g92%2Fxyu%2B%2FsvPZzLk%3D&reserved=0> https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcastle-engine.io%2Fblender%23_custom_properties&data=05%7C01%7Cbrutzman%40nps.edu%7C7b4de2dc055541b84b2108dbc8f0399f%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C638324706343579427%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=Xpv5MHdNU54VlqbxMSsjnyQ4jB2g92%2Fxyu%2B%2FsvPZzLk%3D&reserved=0 .
>
> To turn glTF (most typical) key-map into X3D Metadata, we wrap it into
> X3D MetadataSet called "ContainerForAllMetadataValues" .
>
> glTF extras like this:
>
> """
> "meshes" : [
> {
> "extras" : {
> "mesh_custom_property" : 1,
> "mesh_property_2" : "some string"
> },
> "name" : "Cube",
> """
>
> -> are converted into X3D metadata like this:
>
> """
> metadata MetadataSet {
> name "ContainerForAllMetadataValues"
> value [
> MetadataDouble {
> name "mesh_custom_property"
> value 1
> }
> MetadataString {
> name "mesh_property_2"
> value "some string"
> }
> ]
> }
> children Shape {
> """
>
> See
> <https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgith> https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgith
> ub.com%2Fcastle-engine%2Fdemo-models%2Ftree%2Fmaster%2Fblender%2Fcusto
> m_properties&data=05%7C01%7Cbrutzman%40nps.edu%7C7b4de2dc055541b84b210
> 8dbc8f0399f%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C6383247063437
> 35644%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJB
> TiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=kNU3YJFvT%2Br2iMl2ybY
> 272DG4yvy2BNW79fHW3cLjpU%3D&reserved=0
> <https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgith> https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgith
> ub.com%2Fcastle-engine%2Fdemo-models%2Ftree%2Fmaster%2Fblender%2Fcusto
> m_properties_2&data=05%7C01%7Cbrutzman%40nps.edu%7C7b4de2dc055541b84b2
> 108dbc8f0399f%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C63832470634
> 3735644%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLC
> JBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=%2BBwXTwnSh81onXJMz
> aOMktrWiJ9HZz%2B1hYoMtx9s1zY%3D&reserved=0
> for more examples, including both glTF, resulting X3D, and also source
> Blender files.
>
> Regards,
> Michalis
>
> pon., 9 paź 2023 o 16:49 Andreas Plesch < <mailto:andreasplesch at gmail.com> andreasplesch at gmail.com> napisał(a):
> >
> > Hi Holger,
> >
> > Thank you for your feedback. I did not think too much about the name
> > for the Metadata node which holds the scene.extras json value.
> >
> > To me "scene.extras" is more of a programming convention whereas the
> > value of a name string should be more abstract, or descriptive in a
> > linguistic sense. So a dot would mean a full stop which would not
> > make a lot of sense. But I can see that this is a rather aesthetic
> > consideration, and that a direct json path style name has its own
> > benefits by following very closely the glTF source..
> >
> > Let us know what you think,
> >
> > Cheers, Andreas
> >
> > On Mon, Oct 9, 2023 at 7:25 AM Holger Seelig < <mailto:holger.seelig at yahoo.de> holger.seelig at yahoo.de> wrote:
> > >
> > > In X_ITE I also create a WorldInfo, but parse only the toplevel metadata so far.
> > >
> > > I like the way you described it, but why do you translate 'scene.extras' to 'scene_extras'? I would leave it as it is.
> > >
> > > Holger
> > >
> > > --
> > > Holger Seelig
> > > Leipzig, Germany
> > >
> > > <mailto:holger.seelig at yahoo.de> holger.seelig at yahoo.de
> > > <https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2F> https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2F
> > > create3000.github.io%2Fx_ite%2F&data=05%7C01%7Cbrutzman%40nps.edu%
> > > 7C7b4de2dc055541b84b2108dbc8f0399f%7C6d936231a51740ea9199f75789633
> > > 78e%7C0%7C0%7C638324706343735644%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiM
> > > C4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7
> > > C%7C%7C&sdata=CIAucgq0iTAEa5jfliJ6ZJiRVKhxrqXn0DsUb9lRJf4%3D&reser
> > > ved=0
> > >
> > > Am 09.10.2023 um 00:14 schrieb Andreas Plesch < <mailto:andreasplesch at gmail.com> andreasplesch at gmail.com>:
> > >
> > > glTF can contain rich metadata, on the toplevel and very targeted
> > > at any sublevel.
> > >
> > > At any level, there is an "extras" property which can contain any
> > > value including objects with arbitrary key:value pairs.
> > >
> > > At the toplevel, there is an asset object which has a set of
> > > defined keys such as "copyright" (as well as its own "extras" property).
> > >
> > > In addition to this unstructured metadata for core glTF, there is
> > > a metadata extension for more structured metadata, extensible
> > > through
> > > namespaces:
> > >
> > > <https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2F> https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2F
> > > github.com%2FKhronosGroup%2FglTF%2Fblob%2Fmain%2Fextensions%2F2.0%
> > > 2FKhronos%2FKHR_xmp_json_ld%2FREADME.md&data=05%7C01%7Cbrutzman%40
> > > nps.edu%7C7b4de2dc055541b84b2108dbc8f0399f%7C6d936231a51740ea9199f
> > > 7578963378e%7C0%7C0%7C638324706343735644%7CUnknown%7CTWFpbGZsb3d8e
> > > yJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%
> > > 7C3000%7C%7C%7C&sdata=hbpLcxJiMrjkkdvJgqwCCmZ%2FygW0hVDEsLk34ipndm
> > > Y%3D&reserved=0
> > >
> > > There are many ways to map glTF metadata to X3D metadata. How
> > > should we manage this ? It may make sense to coordinate systematic behaviour.
> > >
> > > x3dom uses the WorldInfo node for toplevel metadata:
> > > - asset object properties go into the info field as key:value string pairs.
> > > - asset.extras go into a WorldInfo MetadataSet "asset_extras"
> > > - scene.extras go into a WorldInfo MetadataSet "scene_extras"
> > >
> > > In addition, "extras" at lower levels go into MetadataSets of
> > > corresponding nodes, using the json value types for Metadata types.
> > >
> > > How do other browsers translate "extras" ?
> > >
> > > x3dom should also support the KHR_xmp_json_ld extension, by
> > > staying very close and literal to the glTF data.
> > >
> > > One feature of the extension is that sets (packets) of metadata
> > > are defined once at the toplevel, and then referenced
> > > (instantiated) from any other level. This seems to map well into
> > > DEF/USE. A large "KHR_XMP_GLTF" root MetadataSet would contain all
> > > metadata and just referenced by USE from Shapes/Material etc. I
> > > think this could work well. I think json property names can become
> > > Metadata name values, and json value types can be mapped into Metadata types.
> > >
> > > If there have been thoughts or attempts to implement the glTF
> > > metadata extension, any ideas or feedback would be great. Would it
> > > be useful to start to think about a xml Metadata schema which
> > > follows the glTF extension requirements and recommendations ? This
> > > may not be feasible due to the extensible nature of the extension..
> > >
> > > Cheers, Andreas
> > >
> > > --
> > > Andreas Plesch
> > > Waltham, MA 02453
> > >
> > > _______________________________________________
> > > x3d-public mailing list
> > > <mailto:x3d-public at web3d.org> x3d-public at web3d.org
> > > <http://web3d.org/mailman/listinfo/x3d-public_web3d.org> http://web3d.org/mailman/listinfo/x3d-public_web3d.org
> > >
> > >
> >
> >
> > --
> > Andreas Plesch
> > Waltham, MA 02453
> >
> > _______________________________________________
> > x3d-public mailing list
> > <mailto:x3d-public at web3d.org> x3d-public at web3d.org
> > <http://web3d.org/mailman/listinfo/x3d-public_web3d.org> http://web3d.org/mailman/listinfo/x3d-public_web3d.org
--
Andreas Plesch
Waltham, MA 02453
_______________________________________________
x3d-public mailing list
<mailto:x3d-public at web3d.org> x3d-public at web3d.org
<http://web3d.org/mailman/listinfo/x3d-public_web3d.org> http://web3d.org/mailman/listinfo/x3d-public_web3d.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20231009/fa298a21/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5464 bytes
Desc: not available
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20231009/fa298a21/attachment-0001.p7s>
More information about the x3d-public
mailing list