From 0dc2b1f2e4302bc354826c582d2becfa87bf449f Mon Sep 17 00:00:00 2001 From: Leon van Kammen Date: Wed, 25 Sep 2024 16:00:36 +0200 Subject: [PATCH] main: update documentation --- doc/RFC_XR_Fragments.html | 237 +++++++----- doc/RFC_XR_Fragments.md | 87 +++-- doc/RFC_XR_Fragments.txt | 768 +++++++++++++++++++------------------- doc/RFC_XR_Fragments.xml | 225 ++++++----- 4 files changed, 726 insertions(+), 591 deletions(-) diff --git a/doc/RFC_XR_Fragments.html b/doc/RFC_XR_Fragments.html index dc99f68..f7d7af9 100644 --- a/doc/RFC_XR_Fragments.html +++ b/doc/RFC_XR_Fragments.html @@ -181,6 +181,148 @@ Instead of forcing authors to combine 3D/2D objects programmatically (publishing

Traditional webbrowsers can become 4D document-ready by:

+

The XR Fragments Trinity

+ +

XR Fragments utilizes URLs:

+ +
    +
  1. for 3D viewers/browser to manipulate the camera or objects (via URLbar)
  2. +
  3. as implicit metadata to reference (nested) objects inside 3D scene-file (local and remote)
  4. +
  5. via explicit metadata (‘extras’) inside 3D scene-files (interaction e.g.) or outside 3D scene-files (via sidecarfile)
  6. +
+ +

List of URI Fragments

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
fragmenttypeexampleinfo
#posvector3#pos=0.5,0,0positions camera (or XR floor) to xyz-coord 0.5,0,0,
#rotvector3#rot=0,90,0rotates camera to xyz-coord 0.5,0,0
Media Fragmentsmedia fragment#t=0,2&loopplay (and loop) 3D animation from 0 seconds till 2 seconds
but can also crop, animate & configure uv-coordinates/shader uniforms
+ +

List of *explicit metadata

+ +

These are the possible ‘extras’ for 3D nodes and sidecar-files

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
keytypeexample (JSON)functionexisting compatibility
hrefstring"href": "b.gltf"XR teleportcustom property in 3D fileformats
srcstring"src": "#cube"XR embed / teleportcustom property in 3D fileformats
tagstring"tag": "cubes geo"tag object (for filter-use / XRWG highlighting)custom property in 3D fileformats
#string"#": "#mypresettrigger default fragment on loadcustom property in 3D fileformats
+ +
+

Supported popular compatible 3D fileformats: .gltf, .obj, .fbx, .usdz, .json (THREE.js), .dae and so on.

+
+ +

Sidecar-file

+ +

Sidecar-file can allow for defining explicit XR Fragments metadata, outside of the 3D file.
+This can be done via a JSON sidecar-file:

+ + + +
{
+  "#":                "#-penguin",
+  "aria-description": "this scene shows an chair and a hidden penguin",
+  "room/chair": {
+    href: "#penguin"
+  }
+}
+
+ +
+

This would mean: hide object ‘penguin’ upon scene-load, and show it when the user clicks the chair

+
+ +

So when loading experience.glb the existence of experience.json is detected, to apply the explicit metadata.

+ +
+

In THREE.js-code this would boil down to:

+
+ +
 scene.userData['#'] = "#chair&penguin"
+ scene.getObjectByName("room").getObjectByName("chair").userData.href = "#penguin"
+
+ // now the XR Fragments parser can process the XR Fragments userData 'extras' in the scene 
+
+

Hypermediatic FeedbackLoop for XR browsers

href metadata traditionally implies click AND navigate, however XR Fragments adds stateless click (xrf://#....) or navigate (xrf://#pos=...) @@ -361,101 +503,6 @@ For example, to render a portal with a preview-version of the scene, create an 3

It also allows sourceportation, which basically means the enduser can teleport to the original XR Document of an src embedded object, and see a visible connection to the particular embedded object. Basically an embedded link becoming an outbound link by activating it.

-

List of URI Fragments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
fragmenttypeexampleinfo
#posvector3#pos=0.5,0,0positions camera (or XR floor) to xyz-coord 0.5,0,0,
#rotvector3#rot=0,90,0rotates camera to xyz-coord 0.5,0,0
Media Fragmentsmedia fragment#t=0,2&loopplay (and loop) 3D animation from 0 seconds till 2 seconds
but can also crop, animate & configure uv-coordinates/shader uniforms
- -

List of metadata for 3D nodes

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
keytypeexample (JSON)functionexisting compatibility
hrefstring"href": "b.gltf"XR teleportcustom property in 3D fileformats
srcstring"src": "#cube"XR embed / teleportcustom property in 3D fileformats
tagstring"tag": "cubes geo"tag object (for filter-use / XRWG highlighting)custom property in 3D fileformats
#string"#": "#mypresettrigger default fragment on loadcustom property in 3D fileformats
- -
-

Supported popular compatible 3D fileformats: .gltf, .obj, .fbx, .usdz, .json (THREE.js), .dae and so on.

-
-

Fragment-to-metadata mapping

These are automatic fragment-to-metadata mappings, which only trigger if the 3D scene metadata matches a specific identifier:

diff --git a/doc/RFC_XR_Fragments.md b/doc/RFC_XR_Fragments.md index 3d8d53e..1acbacd 100644 --- a/doc/RFC_XR_Fragments.md +++ b/doc/RFC_XR_Fragments.md @@ -188,6 +188,71 @@ Below you can see how this translates back into good-old URLs: Traditional webbrowsers can become 4D document-ready by: +# The XR Fragments Trinity + +XR Fragments utilizes URLs: + +1. for 3D viewers/browser to manipulate the camera or objects (via URLbar) +2. as **implicit** metadata to reference (nested) objects **inside** 3D scene-file (local and remote) +3. via **explicit** metadata ('extras') **inside** 3D scene-files (interaction e.g.) or **outside** 3D scene-files (via [sidecarfile](https://en.wikipedia.org/wiki/Sidecar_file)) + +# List of URI Fragments + +| fragment | type | example | info | +|-------------------|------------|--------------------|----------------------------------------------------------------------| +| `#pos` | vector3 | `#pos=0.5,0,0` | positions camera (or XR floor) to xyz-coord 0.5,0,0, | +| `#rot` | vector3 | `#rot=0,90,0` | rotates camera to xyz-coord 0.5,0,0 | +| [Media Fragments](https://www.w3.org/TR/media-frags/) | [media fragment](#media%20fragments%20and%20datatypes) | `#t=0,2&loop` | play (and loop) 3D animation from 0 seconds till 2 seconds| +| | | | but can also crop, animate & configure uv-coordinates/shader uniforms | + +# List of **explicit* metadata + +These are the possible 'extras' for 3D nodes and sidecar-files + +| key | type | example (JSON) | function | existing compatibility | +|--------------|----------|------------------------|---------------------|----------------------------------------| +| `href` | string | `"href": "b.gltf"` | XR teleport | custom property in 3D fileformats | +| `src` | string | `"src": "#cube"` | XR embed / teleport | custom property in 3D fileformats | +| `tag` | string | `"tag": "cubes geo"` | tag object (for filter-use / XRWG highlighting) | custom property in 3D fileformats | +| `#` | string | `"#": "#mypreset` | trigger default fragment on load | custom property in 3D fileformats | + +> Supported popular compatible 3D fileformats: `.gltf`, `.obj`, `.fbx`, `.usdz`, `.json` (THREE.js), `.dae` and so on. + +## Sidecar-file + +Sidecar-file can allow for defining **explicit** XR Fragments metadata, outside of the 3D file.
+This can be done via a JSON [sidecar-file](https://en.wikipedia.org/wiki/Sidecar_file): + +* experience.glb +* experience.json + + +```json +{ + "#": "#-penguin", + "aria-description": "this scene shows an chair and a hidden penguin", + "room/chair": { + href: "#penguin" + } +} +``` + +> This would mean: hide object 'penguin' upon scene-load, and show it when the user clicks the chair + +So when loading `experience.glb` the existence of `experience.json` is detected, to apply the explicit metadata.
+ +> In THREE.js-code this would boil down to: + +```javascript + scene.userData['#'] = "#chair&penguin" + scene.getObjectByName("room").getObjectByName("chair").userData.href = "#penguin" + + // now the XR Fragments parser can process the XR Fragments userData 'extras' in the scene +``` + + + + # Hypermediatic FeedbackLoop for XR browsers `href` metadata traditionally implies **click** AND **navigate**, however XR Fragments adds stateless **click** (`xrf://#....`) or **navigate** (`xrf://#pos=...`) @@ -280,27 +345,6 @@ For example, to render a portal with a preview-version of the scene, create an 3 > It also allows **sourceportation**, which basically means the enduser can teleport to the original XR Document of an `src` embedded object, and see a visible connection to the particular embedded object. Basically an embedded link becoming an outbound link by activating it. - -# List of URI Fragments - -| fragment | type | example | info | -|-------------------|------------|--------------------|----------------------------------------------------------------------| -| `#pos` | vector3 | `#pos=0.5,0,0` | positions camera (or XR floor) to xyz-coord 0.5,0,0, | -| `#rot` | vector3 | `#rot=0,90,0` | rotates camera to xyz-coord 0.5,0,0 | -| [Media Fragments](https://www.w3.org/TR/media-frags/) | [media fragment](#media%20fragments%20and%20datatypes) | `#t=0,2&loop` | play (and loop) 3D animation from 0 seconds till 2 seconds| -| | | | but can also crop, animate & configure uv-coordinates/shader uniforms | - -## List of metadata for 3D nodes - -| key | type | example (JSON) | function | existing compatibility | -|--------------|----------|------------------------|---------------------|----------------------------------------| -| `href` | string | `"href": "b.gltf"` | XR teleport | custom property in 3D fileformats | -| `src` | string | `"src": "#cube"` | XR embed / teleport | custom property in 3D fileformats | -| `tag` | string | `"tag": "cubes geo"` | tag object (for filter-use / XRWG highlighting) | custom property in 3D fileformats | -| `#` | string | `"#": "#mypreset` | trigger default fragment on load | custom property in 3D fileformats | - -> Supported popular compatible 3D fileformats: `.gltf`, `.obj`, `.fbx`, `.usdz`, `.json` (THREE.js), `.dae` and so on. - ## Fragment-to-metadata mapping These are automatic fragment-to-metadata mappings, which only trigger if the 3D scene metadata matches a specific identifier: @@ -1035,6 +1079,7 @@ String-templatevalues are evaluated as per [URI Templates (RFC6570)](https://www > This 'separating of mechanism from policy' (unix rule) does **somewhat** break portability of an XR experience, but still prevents (E-waste of) handcoded virtual worlds. It allows for (XR experience) metadata to survive in future 3D engines and scene-fileformats. + # Security Considerations The only dynamic parts are [W3C Media Fragments](https://www.w3.org/TR/media-frags/) and [URI Templates (RFC6570)](https://www.rfc-editor.org/rfc/rfc6570).
diff --git a/doc/RFC_XR_Fragments.txt b/doc/RFC_XR_Fragments.txt index 8273940..bc88403 100644 --- a/doc/RFC_XR_Fragments.txt +++ b/doc/RFC_XR_Fragments.txt @@ -83,29 +83,29 @@ Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Core principle . . . . . . . . . . . . . . . . . . . . . . . 4 - 3. Hypermediatic FeedbackLoop for XR browsers . . . . . . . . . 5 - 4. Conventions and Definitions . . . . . . . . . . . . . . . . . 8 - 4.1. XR Fragment URL Grammar . . . . . . . . . . . . . . . . . 8 - 5. Spatial Referencing 3D . . . . . . . . . . . . . . . . . . . 8 - 6. List of URI Fragments . . . . . . . . . . . . . . . . . . . . 9 - 6.1. List of metadata for 3D nodes . . . . . . . . . . . . . . 10 - 6.2. Fragment-to-metadata mapping . . . . . . . . . . . . . . 11 - 6.3. media fragments and datatypes . . . . . . . . . . . . . . 12 - 7. Navigating 3D . . . . . . . . . . . . . . . . . . . . . . . . 15 - 8. Top-level URL processing . . . . . . . . . . . . . . . . . . 16 - 9. Embedding XR content using src . . . . . . . . . . . . . . . 17 - 10. Navigating content href portals . . . . . . . . . . . . . . . 19 - 10.1. Walking surfaces . . . . . . . . . . . . . . . . . . . . 21 - 10.2. UX spec . . . . . . . . . . . . . . . . . . . . . . . . 21 - 10.3. Scaling instanced content . . . . . . . . . . . . . . . 21 - 11. XR Fragment: pos . . . . . . . . . . . . . . . . . . . . . . 22 - 12. XR Fragment: rot . . . . . . . . . . . . . . . . . . . . . . 22 - 13. XR Fragment: t . . . . . . . . . . . . . . . . . . . . . . . 22 - 14. XR audio/video integration . . . . . . . . . . . . . . . . . 22 - 15. XR Fragment filters . . . . . . . . . . . . . . . . . . . . . 23 - 15.1. including/excluding . . . . . . . . . . . . . . . . . . 23 - 15.2. Filter Parser . . . . . . . . . . . . . . . . . . . . . 24 - 16. Visible links . . . . . . . . . . . . . . . . . . . . . . . . 25 + 3. The XR Fragments Trinity . . . . . . . . . . . . . . . . . . 5 + 4. List of URI Fragments . . . . . . . . . . . . . . . . . . . . 5 + 5. List of *_explicit_ metadata . . . . . . . . . . . . . . . . 6 + 5.1. Sidecar-file . . . . . . . . . . . . . . . . . . . . . . 7 + 6. Hypermediatic FeedbackLoop for XR browsers . . . . . . . . . 8 + 7. Conventions and Definitions . . . . . . . . . . . . . . . . . 10 + 7.1. XR Fragment URL Grammar . . . . . . . . . . . . . . . . . 10 + 8. Spatial Referencing 3D . . . . . . . . . . . . . . . . . . . 10 + 8.1. Fragment-to-metadata mapping . . . . . . . . . . . . . . 11 + 8.2. media fragments and datatypes . . . . . . . . . . . . . . 13 + 9. Navigating 3D . . . . . . . . . . . . . . . . . . . . . . . . 16 + 10. Top-level URL processing . . . . . . . . . . . . . . . . . . 17 + 11. Embedding XR content using src . . . . . . . . . . . . . . . 17 + 12. Navigating content href portals . . . . . . . . . . . . . . . 20 + 12.1. Walking surfaces . . . . . . . . . . . . . . . . . . . . 21 + 12.2. UX spec . . . . . . . . . . . . . . . . . . . . . . . . 21 + 12.3. Scaling instanced content . . . . . . . . . . . . . . . 22 + 13. XR Fragment: pos . . . . . . . . . . . . . . . . . . . . . . 22 + 14. XR Fragment: rot . . . . . . . . . . . . . . . . . . . . . . 22 + 15. XR Fragment: t . . . . . . . . . . . . . . . . . . . . . . . 23 + 16. XR audio/video integration . . . . . . . . . . . . . . . . . 23 + 17. XR Fragment filters . . . . . . . . . . . . . . . . . . . . . 23 + 17.1. including/excluding . . . . . . . . . . . . . . . . . . 24 @@ -114,25 +114,27 @@ van Kammen Expires 29 March 2025 [Page 2] Internet-Draft XR Fragments September 2024 - 17. Text in XR (tagging,linking to spatial objects) . . . . . . . 25 - 17.1. Default Data URI mimetype . . . . . . . . . . . . . . . 28 - 17.2. URL and Data URI . . . . . . . . . . . . . . . . . . . . 29 - 18. Importing/exporting . . . . . . . . . . . . . . . . . . . . . 30 - 19. Reflection Mapping . . . . . . . . . . . . . . . . . . . . . 30 - 20. Transclusion (broken link) resolution . . . . . . . . . . . . 30 - 21. Topic-based index-less Webrings . . . . . . . . . . . . . . . 31 - 22. URI Templates (RFC6570) . . . . . . . . . . . . . . . . . . . 32 - 23. Additional scene metadata . . . . . . . . . . . . . . . . . . 32 - 24. Accessibility interface . . . . . . . . . . . . . . . . . . . 33 - 24.1. Two-button navigation . . . . . . . . . . . . . . . . . 34 - 24.2. Overlap with fileformat-specific extensions . . . . . . 35 - 24.3. Vendor Prefixes . . . . . . . . . . . . . . . . . . . . 35 - 25. Security Considerations . . . . . . . . . . . . . . . . . . . 38 - 26. FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 - 27. authors . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 - 28. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 39 - 29. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 39 - 30. Appendix: Definitions . . . . . . . . . . . . . . . . . . . . 39 + 17.2. Filter Parser . . . . . . . . . . . . . . . . . . . . . 25 + 18. Visible links . . . . . . . . . . . . . . . . . . . . . . . . 25 + 19. Text in XR (tagging,linking to spatial objects) . . . . . . . 26 + 19.1. Default Data URI mimetype . . . . . . . . . . . . . . . 28 + 19.2. URL and Data URI . . . . . . . . . . . . . . . . . . . . 29 + 20. Importing/exporting . . . . . . . . . . . . . . . . . . . . . 30 + 21. Reflection Mapping . . . . . . . . . . . . . . . . . . . . . 30 + 22. Transclusion (broken link) resolution . . . . . . . . . . . . 30 + 23. Topic-based index-less Webrings . . . . . . . . . . . . . . . 31 + 24. URI Templates (RFC6570) . . . . . . . . . . . . . . . . . . . 32 + 25. Additional scene metadata . . . . . . . . . . . . . . . . . . 32 + 26. Accessibility interface . . . . . . . . . . . . . . . . . . . 33 + 26.1. Two-button navigation . . . . . . . . . . . . . . . . . 34 + 26.2. Overlap with fileformat-specific extensions . . . . . . 35 + 26.3. Vendor Prefixes . . . . . . . . . . . . . . . . . . . . 35 + 27. Security Considerations . . . . . . . . . . . . . . . . . . . 38 + 28. FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 + 29. authors . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 + 30. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 39 + 31. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 39 + 32. Appendix: Definitions . . . . . . . . . . . . . . . . . . . . 39 1. Introduction @@ -160,8 +162,6 @@ Internet-Draft XR Fragments September 2024 jumps to a chapter) for navigating XR documents 4. refraining from introducing scripting-engines for mundane tasks (and preventing its inevitable security-headaches) - 5. the gap between text an 3d objects: object-names directly map to - hashtags (=fragments), which allows 3D to text transcription. @@ -170,6 +170,9 @@ van Kammen Expires 29 March 2025 [Page 3] Internet-Draft XR Fragments September 2024 + 5. the gap between text an 3d objects: object-names directly map to + hashtags (=fragments), which allows 3D to text transcription. + | NOTE: The chapters in this document are ordered from highlevel to | lowlevel (technical) as much as possible @@ -218,9 +221,6 @@ Internet-Draft XR Fragments September 2024 - - - van Kammen Expires 29 March 2025 [Page 4] Internet-Draft XR Fragments September 2024 @@ -254,26 +254,26 @@ Internet-Draft XR Fragments September 2024 Traditional webbrowsers can become 4D document-ready by: -3. Hypermediatic FeedbackLoop for XR browsers +3. The XR Fragments Trinity - href metadata traditionally implies *click* AND *navigate*, however - XR Fragments adds stateless *click* (xrf://#....) or *navigate* - (xrf://#pos=...) as well (which allows many extra interactions which - otherwise need a scripting language). This is known as *hashbus*- - only events (see image above). + XR Fragments utilizes URLs: - | Being able to use the same URI Fragment DSL for navigation (href: - | #foo) as well as interactions (href: xrf://#bar) greatly - | simplifies implementation, increases HFL, and reduces need for - | scripting languages. + 1. for 3D viewers/browser to manipulate the camera or objects (via + URLbar) + 2. as *implicit* metadata to reference (nested) objects *inside* 3D + scene-file (local and remote) + 3. via *explicit* metadata ('extras') *inside* 3D scene-files + (interaction e.g.) or *outside* 3D scene-files (via sidecarfile + (https://en.wikipedia.org/wiki/Sidecar_file)) - This opens up the following benefits for traditional & future - webbrowsers: - - * hypermediatic (https://github.com/coderofsalvation/hypermediatic) - loading/clicking 3D assets (gltf/fbx e.g.) natively (with or - without using HTML). +4. List of URI Fragments + +=======================+======================================+============+============+ + |fragment |type |example |info | + +=======================+======================================+============+============+ + |#pos |vector3 |#pos=0.5,0,0|positions | + | | | |camera (or | + | | | |XR floor) to| @@ -282,36 +282,36 @@ van Kammen Expires 29 March 2025 [Page 5] Internet-Draft XR Fragments September 2024 - * allowing 3D assets/nodes to publish XR Fragments to themselves/ - eachother using the xrf:// hashbus - * collapsing the 3D scene to an wordgraph (for essential navigation - purposes) controllable thru a hash(tag)bus - * completely bypassing the security-trap of loading external scripts - (by loading 3D model-files, not HTML-javascriptable resources) - - XR Fragments itself are hypermediatic - (https://github.com/coderofsalvation/hypermediatic) and HTML- - agnostic, though pseudo-XR Fragment browsers *can* be implemented on - top of HTML/Javascript. - - - - - - - - - - - - - - - - + | | | |xyz-coord | + | | | |0.5,0,0, | + +-----------------------+--------------------------------------+------------+------------+ + |#rot |vector3 |#rot=0,90,0 |rotates | + | | | |camera to | + | | | |xyz-coord | + | | | |0.5,0,0 | + +-----------------------+--------------------------------------+------------+------------+ + |Media Fragments |media fragment |#t=0,2&loop |play (and | + |(https://www.w3.org/TR/|(#media%20fragments%20and%20datatypes)| |loop) 3D | + |media-frags/) | | |animation | + | | | |from 0 | + | | | |seconds till| + | | | |2 seconds | + +-----------------------+--------------------------------------+------------+------------+ + | | | |but can also| + | | | |crop, | + | | | |animate & | + | | | |configure | + | | | |uv- | + | | | |coordinates/| + | | | |shader | + | | | |uniforms | + +-----------------------+--------------------------------------+------------+------------+ + Table 1 +5. List of *_explicit_ metadata + These are the possible 'extras' for 3D nodes and sidecar-files @@ -338,6 +338,118 @@ van Kammen Expires 29 March 2025 [Page 6] Internet-Draft XR Fragments September 2024 + +======+========+============+===================+================+ + | key | type | example | function | existing | + | | | (JSON) | | compatibility | + +======+========+============+===================+================+ + | href | string | "href": | XR teleport | custom | + | | | "b.gltf" | | property in 3D | + | | | | | fileformats | + +------+--------+------------+-------------------+----------------+ + | src | string | "src": | XR embed / | custom | + | | | "#cube" | teleport | property in 3D | + | | | | | fileformats | + +------+--------+------------+-------------------+----------------+ + | tag | string | "tag": | tag object (for | custom | + | | | "cubes | filter-use / XRWG | property in 3D | + | | | geo" | highlighting) | fileformats | + +------+--------+------------+-------------------+----------------+ + | # | string | "#": | trigger default | custom | + | | | "#mypreset | fragment on load | property in 3D | + | | | | | fileformats | + +------+--------+------------+-------------------+----------------+ + + Table 2 + + | Supported popular compatible 3D fileformats: .gltf, .obj, .fbx, + | .usdz, .json (THREE.js), .dae and so on. + +5.1. Sidecar-file + + Sidecar-file can allow for defining *explicit* XR Fragments metadata, + outside of the 3D file. + This can be done via a JSON sidecar-file + (https://en.wikipedia.org/wiki/Sidecar_file): + + * experience.glb + * experience.json + + { + "#": "#-penguin", + "aria-description": "this scene shows an chair and a hidden penguin", + "room/chair": { + href: "#penguin" + } + } + + | This would mean: hide object 'penguin' upon scene-load, and show + | it when the user clicks the chair + + + + + +van Kammen Expires 29 March 2025 [Page 7] + +Internet-Draft XR Fragments September 2024 + + + So when loading experience.glb the existence of experience.json is + detected, to apply the explicit metadata. + + | In THREE.js-code this would boil down to: + + scene.userData['#'] = "#chair&penguin" + scene.getObjectByName("room").getObjectByName("chair").userData.href = "#penguin" + + // now the XR Fragments parser can process the XR Fragments userData 'extras' in the scene + +6. Hypermediatic FeedbackLoop for XR browsers + + href metadata traditionally implies *click* AND *navigate*, however + XR Fragments adds stateless *click* (xrf://#....) or *navigate* + (xrf://#pos=...) as well (which allows many extra interactions which + otherwise need a scripting language). This is known as *hashbus*- + only events (see image above). + + | Being able to use the same URI Fragment DSL for navigation (href: + | #foo) as well as interactions (href: xrf://#bar) greatly + | simplifies implementation, increases HFL, and reduces need for + | scripting languages. + + This opens up the following benefits for traditional & future + webbrowsers: + + * hypermediatic (https://github.com/coderofsalvation/hypermediatic) + loading/clicking 3D assets (gltf/fbx e.g.) natively (with or + without using HTML). + * allowing 3D assets/nodes to publish XR Fragments to themselves/ + eachother using the xrf:// hashbus + * collapsing the 3D scene to an wordgraph (for essential navigation + purposes) controllable thru a hash(tag)bus + * completely bypassing the security-trap of loading external scripts + (by loading 3D model-files, not HTML-javascriptable resources) + + XR Fragments itself are hypermediatic + (https://github.com/coderofsalvation/hypermediatic) and HTML- + agnostic, though pseudo-XR Fragment browsers *can* be implemented on + top of HTML/Javascript. + + + + + + + + + + + +van Kammen Expires 29 March 2025 [Page 8] + +Internet-Draft XR Fragments September 2024 + + +=========+======================+=====================================+ |principle|XR 4D URL |HTML 2D URL | +=========+======================+=====================================+ @@ -375,7 +487,7 @@ Internet-Draft XR Fragments September 2024 | |topLevel URI) |hypermediatic) | +---------+----------------------+-------------------------------------+ - Table 1 + Table 3 | An important aspect of HFL is that URI Fragments can be triggered | without updating the top-level URI (default href-behaviour) thru @@ -389,16 +501,16 @@ Internet-Draft XR Fragments September 2024 -van Kammen Expires 29 March 2025 [Page 7] +van Kammen Expires 29 March 2025 [Page 9] Internet-Draft XR Fragments September 2024 -4. Conventions and Definitions +7. Conventions and Definitions See appendix below in case certain terms are not clear. -4.1. XR Fragment URL Grammar +7.1. XR Fragment URL Grammar For typical HTTP-like browsers/applications: @@ -416,7 +528,7 @@ Internet-Draft XR Fragments September 2024 | pos=1,2,3&rot=0,90,0&foo | combinators | +--------------------------+---------------------------------+ - Table 2 + Table 4 | this is already implemented in all browsers @@ -430,7 +542,7 @@ Internet-Draft XR Fragments September 2024 https://me.com can load the latter (and still indicates which XR Fragments entrypoint-experience/client was used). -5. Spatial Referencing 3D +8. Spatial Referencing 3D XR Fragments assume the following objectname-to-URIFragment mapping: @@ -445,7 +557,7 @@ Internet-Draft XR Fragments September 2024 -van Kammen Expires 29 March 2025 [Page 8] +van Kammen Expires 29 March 2025 [Page 10] Internet-Draft XR Fragments September 2024 @@ -482,87 +594,7 @@ Internet-Draft XR Fragments September 2024 | embedded object. Basically an embedded link becoming an outbound | link by activating it. -6. List of URI Fragments - - +=======================+======================================+============+============+ - |fragment |type |example |info | - +=======================+======================================+============+============+ - |#pos |vector3 |#pos=0.5,0,0|positions | - | | | |camera (or | - | | | |XR floor) to| - | | | |xyz-coord | - | | | |0.5,0,0, | - +-----------------------+--------------------------------------+------------+------------+ - |#rot |vector3 |#rot=0,90,0 |rotates | - | | | |camera to | - | | | |xyz-coord | - | | | |0.5,0,0 | - +-----------------------+--------------------------------------+------------+------------+ - - - -van Kammen Expires 29 March 2025 [Page 9] - -Internet-Draft XR Fragments September 2024 - - - |Media Fragments |media fragment |#t=0,2&loop |play (and | - |(https://www.w3.org/TR/|(#media%20fragments%20and%20datatypes)| |loop) 3D | - |media-frags/) | | |animation | - | | | |from 0 | - | | | |seconds till| - | | | |2 seconds | - +-----------------------+--------------------------------------+------------+------------+ - | | | |but can also| - | | | |crop, | - | | | |animate & | - | | | |configure | - | | | |uv- | - | | | |coordinates/| - | | | |shader | - | | | |uniforms | - +-----------------------+--------------------------------------+------------+------------+ - - Table 3 - -6.1. List of metadata for 3D nodes - - +======+========+============+===================+================+ - | key | type | example | function | existing | - | | | (JSON) | | compatibility | - +======+========+============+===================+================+ - | href | string | "href": | XR teleport | custom | - | | | "b.gltf" | | property in 3D | - | | | | | fileformats | - +------+--------+------------+-------------------+----------------+ - | src | string | "src": | XR embed / | custom | - | | | "#cube" | teleport | property in 3D | - | | | | | fileformats | - +------+--------+------------+-------------------+----------------+ - | tag | string | "tag": | tag object (for | custom | - | | | "cubes | filter-use / XRWG | property in 3D | - | | | geo" | highlighting) | fileformats | - +------+--------+------------+-------------------+----------------+ - | # | string | "#": | trigger default | custom | - | | | "#mypreset | fragment on load | property in 3D | - | | | | | fileformats | - +------+--------+------------+-------------------+----------------+ - - Table 4 - - | Supported popular compatible 3D fileformats: .gltf, .obj, .fbx, - | .usdz, .json (THREE.js), .dae and so on. - - - - - -van Kammen Expires 29 March 2025 [Page 10] - -Internet-Draft XR Fragments September 2024 - - -6.2. Fragment-to-metadata mapping +8.1. Fragment-to-metadata mapping These are automatic fragment-to-metadata mappings, which only trigger if the 3D scene metadata matches a specific identifier: @@ -578,6 +610,14 @@ Internet-Draft XR Fragments September 2024 | | | | |reflects #cubes. Only | | | | | |works when metadata-key| | | | | |starts with # | + + + +van Kammen Expires 29 March 2025 [Page 11] + +Internet-Draft XR Fragments September 2024 + + +----------------+--------------------------------------+-------------+---------------------+-----------------------+ |*FOCUS* |# |string |#person |(and show) object(s) | | | | | |with tag: person or | @@ -610,14 +650,6 @@ Internet-Draft XR Fragments September 2024 | | | | |variable foo to the | | | | | |value #t=0 from | | | | | |*existing* object | - - - -van Kammen Expires 29 March 2025 [Page 11] - -Internet-Draft XR Fragments September 2024 - - | | | | |metadata (bar:#t=0 | | | | | |e.g.), This allows for | | | | | |reactive URI Template | @@ -634,6 +666,14 @@ Internet-Draft XR Fragments September 2024 | | | | |uri)). NOTE: metadata-| | | | | |key should not start | | | | | |with # | + + + +van Kammen Expires 29 March 2025 [Page 12] + +Internet-Draft XR Fragments September 2024 + + +----------------+--------------------------------------+-------------+---------------------+-----------------------+ |*ANIMATION* |#= |string=string|#people=walk |assign a different | | | | |#people=noanim |animation to object(s) | @@ -641,7 +681,7 @@ Internet-Draft XR Fragments September 2024 Table 5 -6.3. media fragments and datatypes +8.2. media fragments and datatypes | NOTE: below the word 'play' applies to 3D animations embedded in | the 3D scene(file) *but also* media defined in src-metadata like @@ -666,14 +706,6 @@ Internet-Draft XR Fragments September 2024 | fragment | | | 2 seconds | | | | | (and stop) | +-----------+----------------------+---------------+----------------+ - - - -van Kammen Expires 29 March 2025 [Page 12] - -Internet-Draft XR Fragments September 2024 - - | temporal | s=x | 1 | set playback | | W3C media | | | speed of | | fragment | | | audio/ | @@ -690,6 +722,14 @@ Internet-Draft XR Fragments September 2024 | | | | (does not | | | | | affect | | | | | playbackstate | + + + +van Kammen Expires 29 March 2025 [Page 13] + +Internet-Draft XR Fragments September 2024 + + | | | | of media) | +-----------+----------------------+---------------+----------------+ | vector2 | uv=u,v,uspeed,vspeed | 0,0 | set uv offset | @@ -722,14 +762,6 @@ Internet-Draft XR Fragments September 2024 | | | | instantly by | | | | | adding 0.5 to | | | | | the current | - - - -van Kammen Expires 29 March 2025 [Page 13] - -Internet-Draft XR Fragments September 2024 - - | | | | uv | | | | | coordinates | +-----------+----------------------+---------------+----------------+ @@ -741,6 +773,19 @@ Internet-Draft XR Fragments September 2024 Table 6 + + + + + + + + +van Kammen Expires 29 March 2025 [Page 14] + +Internet-Draft XR Fragments September 2024 + + | * = this is extending the W3C media fragments | (https://www.w3.org/TR/media-frags/#mf-advanced) with (missing) | playback/viewport-control. Normally #t=0,2 implies setting start/ @@ -764,28 +809,6 @@ Internet-Draft XR Fragments September 2024 * https://shaders.org/plasma.glsl#t=0&u:col2=0,1,0 (red-green shader plasma starts playing from time-offset 0) - - - - - - - - - - - - - - - - - -van Kammen Expires 29 March 2025 [Page 14] - -Internet-Draft XR Fragments September 2024 - - +──────────────────────────────────────────────────────────+ │ │ │ index.gltf#playall │ @@ -812,7 +835,14 @@ Internet-Draft XR Fragments September 2024 > NOTE: URI Template variables are immutable and respect scope: in other words, the end-user cannot modify `blue` by entering an URL like `#blue=.....` in the browser URL, and `blue` is not accessible by the plane/media-object (however `{play}` would work). -7. Navigating 3D + + +van Kammen Expires 29 March 2025 [Page 15] + +Internet-Draft XR Fragments September 2024 + + +9. Navigating 3D +====================+=========+=============================+ | fragment | type | functionality | @@ -833,15 +863,6 @@ Internet-Draft XR Fragments September 2024 » discussion (https://github.com/coderofsalvation/xrfragment/ issues/5) - - - - -van Kammen Expires 29 March 2025 [Page 15] - -Internet-Draft XR Fragments September 2024 - - 1. the Y-coordinate of pos identifies the floorposition. This means that desktop-projections usually need to add 1.5m (average person height) on top (which is done automatically by VR/AR headsets). @@ -865,6 +886,18 @@ Internet-Draft XR Fragments September 2024 Here's an ascii representation of a 3D scene-graph which contains 3D objects ◻ and their metadata: + + + + + + + +van Kammen Expires 29 March 2025 [Page 16] + +Internet-Draft XR Fragments September 2024 + + +────────────────────────────────────────────────────────+ │ │ │ index.gltf │ @@ -884,20 +917,12 @@ Internet-Draft XR Fragments September 2024 *replace the current scene* with a new one, like other.fbx, and assume pos=0,0,0. -8. Top-level URL processing +10. Top-level URL processing | Example URL: ://foo/world.gltf#cube&pos=0,0,0 The URL-processing-flow for hypermedia browsers goes like this: - - - -van Kammen Expires 29 March 2025 [Page 16] - -Internet-Draft XR Fragments September 2024 - - 1. IF a #cube matches a custom property-key (of an object) in the 3D file/scene (#cube: #......) THEN execute that predefined_view. @@ -914,7 +939,7 @@ Internet-Draft XR Fragments September 2024 5. IF a #cube matches anything else in the XR Word Graph (XRWG) draw wires to them (text or related objects). -9. Embedding XR content using src +11. Embedding XR content using src src is the 3D version of the iframe. @@ -922,6 +947,13 @@ Internet-Draft XR Fragments September 2024 follows similar logic like the previous chapter, except that it does not modify the camera. + + +van Kammen Expires 29 March 2025 [Page 17] + +Internet-Draft XR Fragments September 2024 + + +========+========+===================================================+ |fragment|type |example value | +========+========+===================================================+ @@ -942,18 +974,6 @@ Internet-Draft XR Fragments September 2024 Here's an ascii representation of a 3D scene-graph with 3D objects ◻ which embeds remote & local 3D objects ◻ with/out using filters: - - - - - - - -van Kammen Expires 29 March 2025 [Page 17] - -Internet-Draft XR Fragments September 2024 - - +────────────────────────────────────────────────────────+ +─────────────────────────+ │ │ │ │ │ index.gltf │ │ ocean.com/aquarium.fbx │ @@ -981,6 +1001,15 @@ Internet-Draft XR Fragments September 2024 Resizing will be happen accordingly to its placeholder object aquariumcube, see chapter Scaling. + + + + +van Kammen Expires 29 March 2025 [Page 18] + +Internet-Draft XR Fragments September 2024 + + | Instead of cherrypicking a rootobject #fishbowl with src, | additional filters can be used to include/exclude certain objects. | See next chapter on filtering below. @@ -1001,15 +1030,6 @@ Internet-Draft XR Fragments September 2024 relatively based on the scale-property (of a geometry-less placeholder, an 'empty'-object in blender e.g.). For more info see Chapter Scaling. - - - - -van Kammen Expires 29 March 2025 [Page 18] - -Internet-Draft XR Fragments September 2024 - - 6. external src values should be served with appropriate mimetype (so the XR Fragment-compatible browser will now how to render it). The bare minimum supported mimetypes are: @@ -1038,6 +1058,14 @@ Internet-Draft XR Fragments September 2024 * model/gltf-binary * model/gltf+json * image/png + + + +van Kammen Expires 29 March 2025 [Page 19] + +Internet-Draft XR Fragments September 2024 + + * image/jpg * text/plain;charset=utf-8 @@ -1050,22 +1078,10 @@ Internet-Draft XR Fragments September 2024 » discussion (https://github.com/coderofsalvation/xrfragment/ issues/4) -10. Navigating content href portals +12. Navigating content href portals navigation, portals & mutations - - - - - - - -van Kammen Expires 29 March 2025 [Page 19] - -Internet-Draft XR Fragments September 2024 - - +==========+==================+============================+ | fragment | type | example value | +==========+==================+============================+ @@ -1098,6 +1114,14 @@ Internet-Draft XR Fragments September 2024 (https://github.com/coderofsalvation/xrfragment/blob/dev/example/ aframe/sandbox/index.html#L26-L29) for an example wearable) + + + +van Kammen Expires 29 March 2025 [Page 20] + +Internet-Draft XR Fragments September 2024 + + 6. make sure that the ''back-button'' of the ''browser-history'' always refers to the previous position (see [here (https://github .com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/ @@ -1115,13 +1139,6 @@ Internet-Draft XR Fragments September 2024 forward action until a pos=... primitive is found (the stateless xrf:// href-values should not be pushed to the url-history) - - -van Kammen Expires 29 March 2025 [Page 20] - -Internet-Draft XR Fragments September 2024 - - » example implementation (https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/ three/xrf/href.js) @@ -1131,7 +1148,7 @@ Internet-Draft XR Fragments September 2024 » discussion (https://github.com/coderofsalvation/xrfragment/ issues/1) -10.1. Walking surfaces +12.1. Walking surfaces XR Fragment-compatible viewers can infer this data based scanning the scene for: @@ -1142,7 +1159,7 @@ Internet-Draft XR Fragments September 2024 | optionally the viewer can offer thumbstick, mouse or joystick | teleport-tools for non-roomscale VR/AR setups. -10.2. UX spec +12.2. UX spec End-users should always have read/write access to: @@ -1152,7 +1169,16 @@ Internet-Draft XR Fragments September 2024 another scene/file (and coordinate e.g. in case the URL contains XR Fragments). -10.3. Scaling instanced content + + + + +van Kammen Expires 29 March 2025 [Page 21] + +Internet-Draft XR Fragments September 2024 + + +12.3. Scaling instanced content Sometimes embedded properties (like src) instance new objects. But what about their scale? @@ -1170,14 +1196,6 @@ Internet-Draft XR Fragments September 2024 (maxsize=1.4 e.g.) * hide the ''placeholder'' object (material e.g.) * instance the src scene as a child of the existing object - - - -van Kammen Expires 29 March 2025 [Page 21] - -Internet-Draft XR Fragments September 2024 - - * calculate the bounding box of the instanced scene, and scale it accordingly (to 1.4 e.g.) @@ -1191,28 +1209,39 @@ Internet-Draft XR Fragments September 2024 | TODO: needs intermediate visuals to make things more obvious -11. XR Fragment: pos +13. XR Fragment: pos [[» example implementation|https://github.com/coderofsalvation/xrfrag ment/blob/main/src/3rd/js/three/xrf/pos.js] (https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/ three/xrf/pos.js])] -12. XR Fragment: rot +14. XR Fragment: rot [[» example implementation|https://github.com/coderofsalvation/xrfrag ment/blob/main/src/3rd/js/three/xrf/pos.js] (https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/ three/xrf/pos.js])] -13. XR Fragment: t + + + + + + +van Kammen Expires 29 March 2025 [Page 22] + +Internet-Draft XR Fragments September 2024 + + +15. XR Fragment: t [[» example implementation|https://github.com/coderofsalvation/xrfrag ment/blob/main/src/3rd/js/three/xrf/t.js] (https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/ three/xrf/t.js])] -14. XR audio/video integration +16. XR audio/video integration To play global audio/video items: @@ -1227,18 +1256,11 @@ Internet-Draft XR Fragments September 2024 5. when the enduser clicks the href, #t=0&loop (play) will be applied to the src value - - -van Kammen Expires 29 March 2025 [Page 22] - -Internet-Draft XR Fragments September 2024 - - | NOTE: hardcoded framestart/framestop uses sampleRate/fps of | embedded audio/video, otherwise the global fps applies. For more | info see [[#t|t]]. -15. XR Fragment filters +17. XR Fragment filters Include, exclude, hide/shows objects using space-separated strings: @@ -1259,6 +1281,15 @@ Internet-Draft XR Fragments September 2024 Table 10 + + + + +van Kammen Expires 29 March 2025 [Page 23] + +Internet-Draft XR Fragments September 2024 + + It's simple but powerful syntax which allows filtering the scene using searchengine prompt-style feeling: @@ -1270,26 +1301,13 @@ Internet-Draft XR Fragments September 2024 which used a dedicated q= variable (now deprecated and usable directly) -15.1. including/excluding +17.1. including/excluding By default, selectors work like photoshop-layers: they scan for matching layer(name/properties) within the scene-graph. Each matched object (not their children) will be toggled (in)visible when selecting. - - - - - - - - -van Kammen Expires 29 March 2025 [Page 23] - -Internet-Draft XR Fragments September 2024 - - +==========+==============================================+ | operator | info | +==========+==============================================+ @@ -1320,11 +1338,19 @@ Internet-Draft XR Fragments September 2024 » example implementation (https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/ three/xrf/q.js) » example 3D asset + + + +van Kammen Expires 29 March 2025 [Page 24] + +Internet-Draft XR Fragments September 2024 + + (https://github.com/coderofsalvation/xrfragment/blob/main/example/ assets/filter.gltf#L192) » discussion (https://github.com/coderofsalvation/xrfragment/issues/3) -15.2. Filter Parser +17.2. Filter Parser Here's how to write a filter parser: @@ -1338,14 +1364,6 @@ Internet-Draft XR Fragments September 2024 5. detect number values like foo=1 (reference regex= /^[0-9\.]+$/ ) 6. detect operators so you can easily strip keys (reference regex= /(^-|\*$)/ ) - - - -van Kammen Expires 29 March 2025 [Page 24] - -Internet-Draft XR Fragments September 2024 - - 7. detect exclude keys like -foo (reference regex= /^-/ ) 8. for every filter token split string on = 9. and we set root to true or false (true=/ root selector is @@ -1357,7 +1375,7 @@ Internet-Draft XR Fragments September 2024 | (https://github.com/coderofsalvation/xrfragment/blob/main/src/ | xrfragment/Filter.hx) -16. Visible links +18. Visible links When predefined views, XRWG fragments and ID fragments (#cube or #mytag e.g.) are triggered by the enduser (via toplevel URL or @@ -1376,24 +1394,6 @@ Internet-Draft XR Fragments September 2024 src/3rd/js/XRWG.js)), which basically has all these things already collected/organized for you during scene-load. - *UX* - - 4. do not update the wires when the enduser moves, leave them as is - 5. offer a control near the back/forward button which allows the - user to (turn off) control the correlation-intensity of the XRWG - -17. Text in XR (tagging,linking to spatial objects) - - How does XR Fragments interlink text with objects? - - | The XR Fragments does this by collapsing space into a *Word Graph* - | (the *XRWG* example - | (https://github.com/coderofsalvation/xrfragment/blob/feat/macros/ - | src/3rd/js/XRWG.js)), augmented by Bib(s)Tex. - - - - @@ -1402,6 +1402,21 @@ van Kammen Expires 29 March 2025 [Page 25] Internet-Draft XR Fragments September 2024 + *UX* + + 4. do not update the wires when the enduser moves, leave them as is + 5. offer a control near the back/forward button which allows the + user to (turn off) control the correlation-intensity of the XRWG + +19. Text in XR (tagging,linking to spatial objects) + + How does XR Fragments interlink text with objects? + + | The XR Fragments does this by collapsing space into a *Word Graph* + | (the *XRWG* example + | (https://github.com/coderofsalvation/xrfragment/blob/feat/macros/ + | src/3rd/js/XRWG.js)), augmented by Bib(s)Tex. + Instead of just throwing together all kinds media types into one experience (games), what about their tagged/semantical relationships? Perhaps the following question is related: why is HTML adopted less @@ -1438,21 +1453,6 @@ Internet-Draft XR Fragments September 2024 - - - - - - - - - - - - - - - van Kammen Expires 29 March 2025 [Page 26] Internet-Draft XR Fragments September 2024 @@ -1541,7 +1541,7 @@ Internet-Draft XR Fragments September 2024 14. anti-pattern: limiting human introspection, by abandoning plain text as first tag citizen. -17.1. Default Data URI mimetype +19.1. Default Data URI mimetype The src-values work as expected (respecting mime-types), however: @@ -1589,7 +1589,7 @@ Internet-Draft XR Fragments September 2024 For all other purposes, regular mimetypes can be used (but are not required by the spec). -17.2. URL and Data URI +19.2. URL and Data URI +--------------------------------------------------------------+ +------------------------+ | | | author.com/article.txt | @@ -1626,7 +1626,7 @@ van Kammen Expires 29 March 2025 [Page 29] Internet-Draft XR Fragments September 2024 -18. Importing/exporting +20. Importing/exporting For usecases like importing/exporting/p2p casting a scene, the issue of external files comes into play. @@ -1634,7 +1634,7 @@ Internet-Draft XR Fragments September 2024 1. export: if the 3D scene contains relative src/href values, rewrite them into absolute URL values. -19. Reflection Mapping +21. Reflection Mapping Environment mapping is crucial for creating realistic reflections and lighting effects on 3D objects. To apply environment mapping @@ -1657,7 +1657,7 @@ Internet-Draft XR Fragments September 2024 models, however this logic allows a more natural & automatic strategy for reflection mapping. -20. Transclusion (broken link) resolution +22. Transclusion (broken link) resolution In spirit of Ted Nelson's 'transclusion resolution', there's a soft- mechanism to harden links & minimize broken links in various ways: @@ -1703,7 +1703,7 @@ Internet-Draft XR Fragments September 2024 │ │ +────────────────────────────────────────────────────────+ -21. Topic-based index-less Webrings +23. Topic-based index-less Webrings As hashtags in URLs map to the XWRG, href-values can be used to promote topic-based index-less webrings. @@ -1738,7 +1738,7 @@ van Kammen Expires 29 March 2025 [Page 31] Internet-Draft XR Fragments September 2024 -22. URI Templates (RFC6570) +24. URI Templates (RFC6570) XR Fragments adopts Level1 URI *Fragment* expansion to provide safe interactivity. @@ -1762,7 +1762,7 @@ Internet-Draft XR Fragments September 2024 │ │ +─────────────────────────────────────────────+ -23. Additional scene metadata +25. Additional scene metadata XR Fragments does not aim to redefine the metadata-space or accessibility-space by introducing its own cataloging-metadata @@ -1836,7 +1836,7 @@ Internet-Draft XR Fragments September 2024 | These attributes can be scanned and presented during an href or | src eye/mouse-over. -24. Accessibility interface +26. Accessibility interface The addressibility of XR Fragments allows for unique 3D-to-text transcripts, as well as an textual interface to navigate 3D content. @@ -1885,7 +1885,7 @@ Internet-Draft XR Fragments September 2024 https://.../... in case a 3D node exist with name abc and href value https://.../... -24.1. Two-button navigation +26.1. Two-button navigation For specific user-profiles, gyroscope/mouse/keyboard/audio/visuals will not be available. @@ -1906,7 +1906,7 @@ van Kammen Expires 29 March 2025 [Page 34] Internet-Draft XR Fragments September 2024 -24.2. Overlap with fileformat-specific extensions +26.2. Overlap with fileformat-specific extensions Some 3D scene-fileformats have support for extensions. What if the functionality of those overlap? For example, GLTF has the OMI_LINK @@ -1940,7 +1940,7 @@ Internet-Draft XR Fragments September 2024 | perform them according to XR Fragment spec (teleport user). But | only once: ignore further overlapping metadata for that usecase. -24.3. Vendor Prefixes +26.3. Vendor Prefixes Vendor-specific metadata in a 3D scenefiles, are similar to vendor- specific CSS-prefixes (https://en.wikipedia.org/wiki/ @@ -2074,7 +2074,7 @@ van Kammen Expires 29 March 2025 [Page 37] Internet-Draft XR Fragments September 2024 -25. Security Considerations +27. Security Considerations The only dynamic parts are W3C Media Fragments (https://www.w3.org/TR/media-frags/) and URI Templates (RFC6570) @@ -2084,7 +2084,7 @@ Internet-Draft XR Fragments September 2024 n fact, it is much safer than relying on a scripting language (javascript) which can change URN too. -26. FAQ +28. FAQ *Q:* Why is everything HTTP GET-based, what about POST/PUT/DELETE HATEOS @@ -2117,7 +2117,7 @@ Internet-Draft XR Fragments September 2024 place, to 'extend' experiences, in contrast to code/javascript inside hypermedia documents (this turned out as a hypermedia antipattern). -27. authors +29. authors * Leon van Kammen (@lvk@mastodon.online) * Jens Finkhäuser (@jens@social.finkhaeuser.de) @@ -2130,11 +2130,11 @@ van Kammen Expires 29 March 2025 [Page 38] Internet-Draft XR Fragments September 2024 -28. IANA Considerations +30. IANA Considerations This document has no IANA actions. -29. Acknowledgments +31. Acknowledgments * NLNET (https://nlnet.nl) * Future of Text (https://futureoftext.org) @@ -2149,7 +2149,7 @@ Internet-Draft XR Fragments September 2024 * Brandel Zackernuk * Mark Anderson -30. Appendix: Definitions +32. Appendix: Definitions +=================+=============================================+ | definition | explanation | diff --git a/doc/RFC_XR_Fragments.xml b/doc/RFC_XR_Fragments.xml index 280190e..9912987 100644 --- a/doc/RFC_XR_Fragments.xml +++ b/doc/RFC_XR_Fragments.xml @@ -109,6 +109,139 @@ But approaches things from a higherlevel feedbackloop/hypermedia browser-perspec Traditional webbrowsers can become 4D document-ready by: +
The XR Fragments Trinity +XR Fragments utilizes URLs: + +
    +
  1. for 3D viewers/browser to manipulate the camera or objects (via URLbar)
  2. +
  3. as implicit metadata to reference (nested) objects inside 3D scene-file (local and remote)
  4. +
  5. via explicit metadata ('extras') inside 3D scene-files (interaction e.g.) or outside 3D scene-files (via sidecarfile)
  6. +
+
+ +
List of URI Fragments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
fragmenttypeexampleinfo
#posvector3#pos=0.5,0,0positions camera (or XR floor) to xyz-coord 0.5,0,0,
#rotvector3#rot=0,90,0rotates camera to xyz-coord 0.5,0,0
Media Fragmentsmedia fragment#t=0,2&loopplay (and loop) 3D animation from 0 seconds till 2 seconds
but can also crop, animate & configure uv-coordinates/shader uniforms
+ +
List of *explicit metadata +These are the possible 'extras' for 3D nodes and sidecar-files + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
keytypeexample (JSON)functionexisting compatibility
hrefstring"href": "b.gltf"XR teleportcustom property in 3D fileformats
srcstring"src": "#cube"XR embed / teleportcustom property in 3D fileformats
tagstring"tag": "cubes geo"tag object (for filter-use / XRWG highlighting)custom property in 3D fileformats
#string"#": "#mypresettrigger default fragment on loadcustom property in 3D fileformats
Supported popular compatible 3D fileformats: .gltf, .obj, .fbx, .usdz, .json (THREE.js), .dae and so on. +
+
Sidecar-file +Sidecar-file can allow for defining explicit XR Fragments metadata, outside of the 3D file.
+ +This can be done via a JSON sidecar-file:
+ +
    +
  • experience.glb
  • +
  • experience.json
  • +
+ + + +
This would mean: hide object 'penguin' upon scene-load, and show it when the user clicks the chair +
So when loading experience.glb the existence of experience.json is detected, to apply the explicit metadata.
+
+
In THREE.js-code this would boil down to: +
+ + +
+
+
Hypermediatic FeedbackLoop for XR browsers href metadata traditionally implies click AND navigate, however XR Fragments adds stateless click (xrf://#....) or navigate (xrf://#pos=...) as well (which allows many extra interactions which otherwise need a scripting language). This is known as hashbus-only events (see image above). @@ -266,97 +399,7 @@ For example, to render a portal with a preview-version of the scene, create an 3
  • src: https://otherworld.gltf#mainobject
  • It also allows sourceportation, which basically means the enduser can teleport to the original XR Document of an src embedded object, and see a visible connection to the particular embedded object. Basically an embedded link becoming an outbound link by activating it. -
    - -
    List of URI Fragments - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    fragmenttypeexampleinfo
    #posvector3#pos=0.5,0,0positions camera (or XR floor) to xyz-coord 0.5,0,0,
    #rotvector3#rot=0,90,0rotates camera to xyz-coord 0.5,0,0
    Media Fragmentsmedia fragment#t=0,2&loopplay (and loop) 3D animation from 0 seconds till 2 seconds
    but can also crop, animate & configure uv-coordinates/shader uniforms
    -
    List of metadata for 3D nodes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    keytypeexample (JSON)functionexisting compatibility
    hrefstring"href": "b.gltf"XR teleportcustom property in 3D fileformats
    srcstring"src": "#cube"XR embed / teleportcustom property in 3D fileformats
    tagstring"tag": "cubes geo"tag object (for filter-use / XRWG highlighting)custom property in 3D fileformats
    #string"#": "#mypresettrigger default fragment on loadcustom property in 3D fileformats
    Supported popular compatible 3D fileformats: .gltf, .obj, .fbx, .usdz, .json (THREE.js), .dae and so on. -
    - +
    Fragment-to-metadata mapping These are automatic fragment-to-metadata mappings, which only trigger if the 3D scene metadata matches a specific identifier: