2023-09-01 14:20:02 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-02-08 14:05:44 +01:00
|
|
|
|
Jens & Leon Internet Engineering Task Force L.R. van Kammen
|
2025-09-20 10:46:23 +02:00
|
|
|
|
Internet-Draft 20 September 2025
|
2023-09-01 14:20:02 +02:00
|
|
|
|
Intended status: Informational
|
2023-09-04 21:20:59 +02:00
|
|
|
|
|
2023-09-01 14:20:02 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
XR Fragments
|
|
|
|
|
|
draft-XRFRAGMENTS-leonvankammen-00
|
|
|
|
|
|
|
|
|
|
|
|
Abstract
|
|
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
Version: 0.5
|
|
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
An open specification for hyperlinking & deeplinking 3D fileformats.
|
2024-09-20 16:53:07 +02:00
|
|
|
|
This draft is a specification for interactive URI-controllable 3D
|
|
|
|
|
|
files, enabling hypermediatic (https://github.com/coderofsalvation/
|
|
|
|
|
|
hypermediatic) navigation, to enable a spatial web for hypermedia
|
|
|
|
|
|
browsers with- or without a network-connection.
|
2025-09-01 17:47:16 +02:00
|
|
|
|
XR Fragments allows us to better use implicit metadata inside 3D
|
|
|
|
|
|
scene(files), by mapping it to proven technologies like URI Fragments
|
|
|
|
|
|
(https://en.wikipedia.org/wiki/URI_fragment).
|
2024-09-25 10:55:11 +02:00
|
|
|
|
|
2023-09-05 19:14:10 +02:00
|
|
|
|
Almost every idea in this document is demonstrated at
|
|
|
|
|
|
https://xrfragment.org (https://xrfragment.org)
|
2023-09-01 14:20:02 +02:00
|
|
|
|
|
|
|
|
|
|
Status of This Memo
|
|
|
|
|
|
|
|
|
|
|
|
This Internet-Draft is submitted in full conformance with the
|
|
|
|
|
|
provisions of BCP 78 and BCP 79.
|
|
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
Internet-Drafts are working documents of the Internet Engineering
|
|
|
|
|
|
Task Force (IETF). Note that other groups may also distribute
|
|
|
|
|
|
working documents as Internet-Drafts. The list of current Internet-
|
|
|
|
|
|
Drafts is at https://datatracker.ietf.org/drafts/current/.
|
|
|
|
|
|
|
2024-09-25 10:55:11 +02:00
|
|
|
|
Internet-Drafts are draft documents valid for a maximum of six months
|
|
|
|
|
|
and may be updated, replaced, or obsoleted by other documents at any
|
|
|
|
|
|
time. It is inappropriate to use Internet-Drafts as reference
|
|
|
|
|
|
material or to cite them other than as "work in progress."
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
This Internet-Draft will expire on 24 March 2026.
|
2024-09-25 10:55:11 +02:00
|
|
|
|
|
2024-04-25 19:06:03 +00:00
|
|
|
|
Copyright Notice
|
|
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
Copyright (c) 2025 IETF Trust and the persons identified as the
|
2024-04-25 19:06:03 +00:00
|
|
|
|
document authors. All rights reserved.
|
2023-09-01 14:20:02 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 1]
|
2025-09-19 20:00:50 +02:00
|
|
|
|
|
|
|
|
|
|
Internet-Draft XR Fragments September 2025
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-09-18 11:03:18 +02:00
|
|
|
|
This document is subject to BCP 78 and the IETF Trust's Legal
|
|
|
|
|
|
Provisions Relating to IETF Documents (https://trustee.ietf.org/
|
|
|
|
|
|
license-info) in effect on the date of publication of this document.
|
2023-09-05 19:14:10 +02:00
|
|
|
|
Please review these documents carefully, as they describe your rights
|
|
|
|
|
|
and restrictions with respect to this document. Code Components
|
2023-09-01 14:20:02 +02:00
|
|
|
|
extracted from this document must include Revised BSD License text as
|
|
|
|
|
|
described in Section 4.e of the Trust Legal Provisions and are
|
|
|
|
|
|
provided without warranty as described in the Revised BSD License.
|
|
|
|
|
|
|
|
|
|
|
|
Table of Contents
|
|
|
|
|
|
|
2025-09-19 19:53:30 +02:00
|
|
|
|
1. Quick reference . . . . . . . . . . . . . . . . . . . . . . . 3
|
|
|
|
|
|
2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4
|
2025-09-19 20:00:50 +02:00
|
|
|
|
3. How does it work . . . . . . . . . . . . . . . . . . . . . . 4
|
|
|
|
|
|
4. What does it solve . . . . . . . . . . . . . . . . . . . . . 4
|
|
|
|
|
|
5. HFL (Hypermediatic Feedback Loop) for XR Browsers . . . . . . 5
|
|
|
|
|
|
6. Conventions and Definitions . . . . . . . . . . . . . . . . . 8
|
|
|
|
|
|
6.1. XR Fragment URL Grammar . . . . . . . . . . . . . . . . . 8
|
|
|
|
|
|
7. Spatial Referencing 3D . . . . . . . . . . . . . . . . . . . 8
|
|
|
|
|
|
8. Level0: Files . . . . . . . . . . . . . . . . . . . . . . . . 9
|
2025-09-20 10:46:23 +02:00
|
|
|
|
8.1. via href metadata . . . . . . . . . . . . . . . . . . . . 10
|
2025-09-19 20:00:50 +02:00
|
|
|
|
8.2. via chained extension . . . . . . . . . . . . . . . . . . 10
|
|
|
|
|
|
8.3. via subdocuments/xattr . . . . . . . . . . . . . . . . . 10
|
|
|
|
|
|
8.4. JSON sidecar-file . . . . . . . . . . . . . . . . . . . . 11
|
2025-09-20 10:46:23 +02:00
|
|
|
|
9. Level1: URI . . . . . . . . . . . . . . . . . . . . . . . . . 12
|
2025-09-19 20:00:50 +02:00
|
|
|
|
9.1. List of URI Fragments . . . . . . . . . . . . . . . . . . 13
|
|
|
|
|
|
9.2. List of *_explicit_ metadata . . . . . . . . . . . . . . 14
|
|
|
|
|
|
10. Level2: href links . . . . . . . . . . . . . . . . . . . . . 14
|
|
|
|
|
|
10.1. Interaction behaviour . . . . . . . . . . . . . . . . . 14
|
|
|
|
|
|
10.2. XR Viewer implementation . . . . . . . . . . . . . . . . 14
|
|
|
|
|
|
11. Level3: Media Fragments . . . . . . . . . . . . . . . . . . . 15
|
|
|
|
|
|
11.1. Animation(s) timeline . . . . . . . . . . . . . . . . . 15
|
|
|
|
|
|
11.2. Specify playback loopmode . . . . . . . . . . . . . . . 15
|
|
|
|
|
|
11.3. Controlling embedded content . . . . . . . . . . . . . . 16
|
|
|
|
|
|
12. Level4: prefix operators . . . . . . . . . . . . . . . . . . 16
|
|
|
|
|
|
12.1. Object teleports (!) . . . . . . . . . . . . . . . . . . 16
|
|
|
|
|
|
12.2. Object multipliers (*) . . . . . . . . . . . . . . . . . 18
|
|
|
|
|
|
12.3. De/selectors (+ and -) . . . . . . . . . . . . . . . . . 18
|
|
|
|
|
|
12.4. Sharing object or file (#|) . . . . . . . . . . . . . . 18
|
|
|
|
|
|
12.5. xrf:// URI scheme . . . . . . . . . . . . . . . . . . . 19
|
|
|
|
|
|
13. Level5: URI Templates (RFC6570) . . . . . . . . . . . . . . . 19
|
|
|
|
|
|
14. Top-level URL processing . . . . . . . . . . . . . . . . . . 19
|
|
|
|
|
|
14.1. UX . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
|
|
|
|
|
|
15. Example: Navigating content href portals . . . . . . . . . . 20
|
|
|
|
|
|
15.1. Walking surfaces . . . . . . . . . . . . . . . . . . . . 21
|
|
|
|
|
|
16. Example: Virtual world rings . . . . . . . . . . . . . . . . 21
|
|
|
|
|
|
17. Additional scene metadata . . . . . . . . . . . . . . . . . . 22
|
|
|
|
|
|
18. Accessibility interface . . . . . . . . . . . . . . . . . . . 23
|
2025-09-19 19:19:37 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 2]
|
2023-12-06 16:40:55 +01:00
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
Internet-Draft XR Fragments September 2025
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
18.1. Two-button navigation . . . . . . . . . . . . . . . . . 24
|
|
|
|
|
|
18.2. Overlap with fileformat-specific extensions . . . . . . 25
|
|
|
|
|
|
19. Vendor Prefixes . . . . . . . . . . . . . . . . . . . . . . . 25
|
|
|
|
|
|
20. Security Considerations . . . . . . . . . . . . . . . . . . . 28
|
|
|
|
|
|
21. FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
|
|
|
|
|
|
22. authors . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
|
|
|
|
|
|
23. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 29
|
|
|
|
|
|
24. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 29
|
|
|
|
|
|
25. Appendix: Definitions . . . . . . . . . . . . . . . . . . . . 29
|
2025-09-19 19:53:30 +02:00
|
|
|
|
|
|
|
|
|
|
1. Quick reference
|
|
|
|
|
|
|
|
|
|
|
|
1. Abstract (#abstract)
|
|
|
|
|
|
2. Index (#index)
|
|
|
|
|
|
3. Introduction (#introduction)
|
2025-09-19 20:00:50 +02:00
|
|
|
|
4. How does it work (#how-does-it-work)
|
|
|
|
|
|
5. What does it solve (#what-does-it-solve)
|
|
|
|
|
|
6. HFL (Hypermediatic Feedback Loop) for XR Browsers (#hfl-
|
2025-09-19 19:53:30 +02:00
|
|
|
|
hypermediatic-feedback-loop-for-xr-browsers)
|
2025-09-19 20:00:50 +02:00
|
|
|
|
7. Conventions and Definitions (#conventions-and-definitions)
|
2025-09-19 19:53:30 +02:00
|
|
|
|
1. XR Fragment URL Grammar (#xr-fragment-url-grammar)
|
2025-09-19 20:00:50 +02:00
|
|
|
|
8. Spatial Referencing 3D (#spatial-referencing-3d)
|
|
|
|
|
|
9. Level0: Files (#level0-files)
|
2025-09-19 19:53:30 +02:00
|
|
|
|
1. via href metadata (#via-href-metadata)
|
|
|
|
|
|
2. via chained extension (#via-chained-extension)
|
|
|
|
|
|
3. via subdocuments/xattr (#via-subdocuments-xattr)
|
|
|
|
|
|
4. JSON sidecar-file (#json-sidecar-file)
|
2025-09-19 20:00:50 +02:00
|
|
|
|
10. Level1: URI (#level1-uri)
|
2025-09-19 19:53:30 +02:00
|
|
|
|
1. List of URI Fragments (#list-of-uri-fragments)
|
|
|
|
|
|
2. List of explicit metadata (#list-of-explicit-metadata)
|
2025-09-19 20:00:50 +02:00
|
|
|
|
11. Level2: href links (#level2-href-links)
|
2025-09-19 19:53:30 +02:00
|
|
|
|
1. Interaction behaviour (#interaction-behaviour)
|
|
|
|
|
|
2. XR Viewer implementation (#xr-viewer-implementation)
|
2025-09-19 20:00:50 +02:00
|
|
|
|
12. Level3: Media Fragments (#level3-media-fragments)
|
2025-09-19 19:53:30 +02:00
|
|
|
|
1. Animation(s) timeline (#animation-s-timeline)
|
|
|
|
|
|
2. Specify playback loopmode (#specify-playback-loopmode)
|
|
|
|
|
|
3. Controlling embedded content (#controlling-embedded-content)
|
2025-09-19 20:00:50 +02:00
|
|
|
|
13. Level4: prefix operators (#level4-prefix-operators)
|
2025-09-19 19:53:30 +02:00
|
|
|
|
1. Object teleports (#object-teleports)
|
|
|
|
|
|
2. Object multipliers (#object-multipliers)
|
|
|
|
|
|
3. De/selectors (+ and -) (#de-selectors-and)
|
|
|
|
|
|
4. Sharing object or file (#|) (#sharing-object-or-file)
|
|
|
|
|
|
5. xrf:// URI scheme (#xrf-uri-scheme)
|
2025-09-19 20:00:50 +02:00
|
|
|
|
14. Level5: URI Templates (RFC6570) (#level5-uri-templates-rfc6570)
|
|
|
|
|
|
15. Top-level URL processing (#top-level-url-processing)
|
2025-09-19 19:53:30 +02:00
|
|
|
|
1. UX (#ux)
|
2025-09-19 20:00:50 +02:00
|
|
|
|
16. Example: Navigating content href portals (#example-navigating-
|
2025-09-19 19:53:30 +02:00
|
|
|
|
content-href-portals)
|
2025-09-19 20:00:50 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 3]
|
2025-09-19 20:00:50 +02:00
|
|
|
|
|
|
|
|
|
|
Internet-Draft XR Fragments September 2025
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 19:53:30 +02:00
|
|
|
|
1. Walking surfaces (#walking-surfaces)
|
2025-09-19 20:00:50 +02:00
|
|
|
|
17. Example: Virtual world rings (#example-virtual-world-rings)
|
|
|
|
|
|
18. Additional scene metadata (#additional-scene-metadata)
|
|
|
|
|
|
19. Accessibility interface (#accessibility-interface)
|
2025-09-19 19:53:30 +02:00
|
|
|
|
1. Two-button navigation (#two-button-navigation)
|
|
|
|
|
|
2. Overlap with fileformat-specific extensions (#overlap-with-
|
|
|
|
|
|
fileformat-specific-extensions)
|
2025-09-19 20:00:50 +02:00
|
|
|
|
20. Vendor Prefixes (#vendor-prefixes)
|
|
|
|
|
|
21. Security Considerations (#security-considerations)
|
|
|
|
|
|
22. FAQ (#faq)
|
|
|
|
|
|
23. Authors (#authors)
|
|
|
|
|
|
24. IANA Considerations (#iana-considerations)
|
|
|
|
|
|
25. Acknowledgments (#acknowledgments)
|
|
|
|
|
|
26. Appendix: Definitions (#appendix-definitions)
|
2025-09-19 19:53:30 +02:00
|
|
|
|
|
|
|
|
|
|
2. Introduction
|
2023-09-01 14:20:02 +02:00
|
|
|
|
|
2024-04-25 19:06:03 +00:00
|
|
|
|
How can we add more control to existing text and 3D scenes, without
|
2023-09-04 21:20:59 +02:00
|
|
|
|
introducing new dataformats?
|
2024-04-25 19:06:03 +00:00
|
|
|
|
Historically, there's many attempts to create the ultimate 3D
|
|
|
|
|
|
fileformat.
|
2023-12-06 16:40:55 +01:00
|
|
|
|
The lowest common denominator is: designers describing/tagging/naming
|
|
|
|
|
|
things using *plain text*.
|
|
|
|
|
|
XR Fragments exploits the fact that all 3D models already contain
|
|
|
|
|
|
such metadata:
|
2023-09-05 19:14:10 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
*XR Fragments allows deeplinking of 3D objects by mapping objectnames
|
|
|
|
|
|
to URI fragments*
|
2023-09-05 19:14:10 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
3. How does it work
|
|
|
|
|
|
|
|
|
|
|
|
XR Fragments utilizes URLs:
|
|
|
|
|
|
|
|
|
|
|
|
1. for 3D viewers/browser to manipulate the camera or objects (via
|
|
|
|
|
|
URI fragments)
|
|
|
|
|
|
2. implicitly: by mapping 3D objectnames (of a 3D scene/file) to URI
|
|
|
|
|
|
fragments (3D deeplinking)
|
|
|
|
|
|
3. explicitly: by scanning href metadata *inside* 3D scene-files to
|
|
|
|
|
|
enable interactions
|
|
|
|
|
|
4. externally: progressively enhance a 3D (file) into an experience
|
|
|
|
|
|
via sidecarfiles (https://en.wikipedia.org/wiki/Sidecar_file)
|
|
|
|
|
|
|
|
|
|
|
|
4. What does it solve
|
|
|
|
|
|
|
2024-01-30 09:58:00 +00:00
|
|
|
|
It solves:
|
2023-10-12 17:04:46 +02:00
|
|
|
|
|
2023-09-18 11:03:18 +02:00
|
|
|
|
|
2024-09-24 16:12:10 +02:00
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
|
2025-09-19 19:53:30 +02:00
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 4]
|
2023-09-21 13:05:30 +02:00
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
Internet-Draft XR Fragments September 2025
|
2024-01-30 09:58:00 +00:00
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 19:53:30 +02:00
|
|
|
|
1. addressibility and hypermediatic
|
|
|
|
|
|
(https://github.com/coderofsalvation/hypermediatic) navigation of
|
|
|
|
|
|
3D scenes/objects: URI Fragments (https://en.wikipedia.org/wiki/
|
|
|
|
|
|
URI_fragment) using src/href spatial metadata
|
|
|
|
|
|
2. Interlinking text & spatial objects by collapsing space into a
|
|
|
|
|
|
Word Graph (XRWG) to show visible links (#visible-links)
|
2025-09-19 19:19:37 +02:00
|
|
|
|
3. unlocking spatial potential of the (originally 2D) hashtag (which
|
|
|
|
|
|
jumps to a chapter) for navigating XR documents
|
2025-09-01 17:47:16 +02:00
|
|
|
|
4. refraining from introducing scripting-engines for mundane tasks
|
|
|
|
|
|
(and preventing its inevitable security-headaches)
|
2024-09-25 16:00:36 +02:00
|
|
|
|
5. the gap between text an 3d objects: object-names directly map to
|
|
|
|
|
|
hashtags (=fragments), which allows 3D to text transcription.
|
|
|
|
|
|
|
2024-09-25 10:55:11 +02:00
|
|
|
|
| NOTE: The chapters in this document are ordered from highlevel to
|
|
|
|
|
|
| lowlevel (technical) as much as possible
|
|
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
XR Fragments views XR experiences through the lens of 3D deeplinked
|
|
|
|
|
|
URI's, rather than thru code(frameworks) or protocol-specific
|
|
|
|
|
|
browsers (webbrowser e.g.). To aid adoption, the standard comprises
|
|
|
|
|
|
of various (optional) support-levels, which incorporate existing
|
|
|
|
|
|
standards like W3C Media Fragments (https://www.w3.org/TR/media-
|
|
|
|
|
|
frags/) and URI Templates (RFC6570) (https://www.rfc-editor.org/rfc/
|
|
|
|
|
|
rfc6570) to promote spatial addressibility, sharing, navigation,
|
|
|
|
|
|
filtering and databinding objects for (XR) Browsers.
|
|
|
|
|
|
|
|
|
|
|
|
| XR Fragments is in a sense, a <b>heuristical 3D format</b> or
|
|
|
|
|
|
| meta-format, which leverages heuristic rules derived from any 3D
|
|
|
|
|
|
| scene or well-established 3D file formats, to extract meaningful
|
|
|
|
|
|
| features from scene hierarchies.
|
|
|
|
|
|
| These heuristics, enable features that are both meaningful and
|
|
|
|
|
|
| consistent across different scene representations, allowing
|
|
|
|
|
|
| <b>higher interop</b> between fileformats, 3D editors, viewers and
|
|
|
|
|
|
| game-engines.
|
|
|
|
|
|
|
|
|
|
|
|
5. HFL (Hypermediatic Feedback Loop) for XR Browsers
|
2025-09-19 19:53:30 +02:00
|
|
|
|
|
|
|
|
|
|
for XR Browsers)
|
2024-02-29 14:07:20 +00:00
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
href metadata traditionally implies *click* AND *navigate*, however
|
2025-09-19 19:19:37 +02:00
|
|
|
|
XR Fragments adds stateless *click* (xrf://....) via the xrf://
|
|
|
|
|
|
scheme, which does not change the top-level URL-adress (of the
|
|
|
|
|
|
browser). This allows for many extra interactions via URLs, which
|
|
|
|
|
|
otherwise needs a scripting language. These are called *hashbus*-
|
|
|
|
|
|
only events/
|
2024-02-29 14:07:20 +00:00
|
|
|
|
|
2024-10-07 08:57:20 +00:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
|
2024-10-07 08:57:20 +00:00
|
|
|
|
|
2025-09-19 19:53:30 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 5]
|
2025-09-19 19:53:30 +02:00
|
|
|
|
|
|
|
|
|
|
Internet-Draft XR Fragments September 2025
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
| Being able to use the same URI Fragment DSL for navigation (href:
|
|
|
|
|
|
| #foo) as well as interactions (href: xrf://#foo) greatly
|
|
|
|
|
|
| simplifies implementation, increases HFL, and reduces need for
|
|
|
|
|
|
| scripting languages.
|
|
|
|
|
|
|
|
|
|
|
|
This opens up the following benefits for traditional & future
|
|
|
|
|
|
webbrowsers:
|
|
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
* hypermediatic (https://github.com/coderofsalvation/hypermediatic)
|
|
|
|
|
|
loading/clicking 3D assets (gltf/fbx e.g.) natively (with or
|
|
|
|
|
|
without using HTML).
|
2025-09-19 19:19:37 +02:00
|
|
|
|
* potentially allowing 3D assets/nodes to publish XR Fragments to
|
|
|
|
|
|
themselves/eachother using the xrf:// hashbus (xrf://#person=walk
|
|
|
|
|
|
to trigger walk-animation for object person)
|
|
|
|
|
|
* potentially collapsing the 3D scene to an wordgraph (for essential
|
|
|
|
|
|
navigation purposes) controllable thru a hash(tag)bus
|
2025-09-01 17:47:16 +02:00
|
|
|
|
* completely bypassing the security-trap of loading external scripts
|
|
|
|
|
|
(by loading 3D model-files, not HTML-javascriptable resources)
|
2024-10-07 08:57:20 +00:00
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
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.
|
2024-10-07 08:57:20 +00:00
|
|
|
|
|
2025-09-19 19:53:30 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 6]
|
2025-09-19 19:53:30 +02:00
|
|
|
|
|
|
|
|
|
|
Internet-Draft XR Fragments September 2025
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-02-26 11:34:21 +00:00
|
|
|
|
+=========+======================+=====================================+
|
2025-09-19 19:19:37 +02:00
|
|
|
|
|principle|3D URL |HTML 2D URL |
|
2024-02-26 11:34:21 +00:00
|
|
|
|
+=========+======================+=====================================+
|
|
|
|
|
|
|the XRWG |wordgraph (collapses |Ctrl-F (find) |
|
|
|
|
|
|
| |3D scene to tags) | |
|
|
|
|
|
|
+---------+----------------------+-------------------------------------+
|
|
|
|
|
|
|the |hashtags alter |hashtags alter document positions |
|
|
|
|
|
|
|hashbus |camera/scene/object- | |
|
|
|
|
|
|
| |projections | |
|
|
|
|
|
|
+---------+----------------------+-------------------------------------+
|
|
|
|
|
|
|src |renders content and |renders content |
|
|
|
|
|
|
|metadata |offers sourceportation| |
|
|
|
|
|
|
+---------+----------------------+-------------------------------------+
|
|
|
|
|
|
|href |teleports to other XR |jumps to other HTML document |
|
|
|
|
|
|
|metadata |document | |
|
|
|
|
|
|
+---------+----------------------+-------------------------------------+
|
|
|
|
|
|
|href |triggers predefined |Media fragments |
|
|
|
|
|
|
|metadata |view | |
|
|
|
|
|
|
+---------+----------------------+-------------------------------------+
|
|
|
|
|
|
|href |triggers |n/a |
|
|
|
|
|
|
|metadata |camera/scene/object/ | |
|
|
|
|
|
|
| |projections | |
|
|
|
|
|
|
+---------+----------------------+-------------------------------------+
|
|
|
|
|
|
|href |draws visible |n/a |
|
|
|
|
|
|
|metadata |connection(s) for XRWG| |
|
|
|
|
|
|
| |'tag' | |
|
|
|
|
|
|
+---------+----------------------+-------------------------------------+
|
|
|
|
|
|
|href |filters certain |n/a |
|
|
|
|
|
|
|metadata |(in)visible objects | |
|
|
|
|
|
|
+---------+----------------------+-------------------------------------+
|
|
|
|
|
|
|href |href="xrf://#-foo&bar"|href="javascript:hideFooAndShowBar()`|
|
|
|
|
|
|
|metadata | | |
|
|
|
|
|
|
+---------+----------------------+-------------------------------------+
|
|
|
|
|
|
| |(this does not update |(this is non-standard, non- |
|
|
|
|
|
|
| |topLevel URI) |hypermediatic) |
|
|
|
|
|
|
+---------+----------------------+-------------------------------------+
|
|
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
Table 1
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:53:30 +02:00
|
|
|
|
| An important aspect of HFL is that URI Fragments can be triggered
|
|
|
|
|
|
| without updating the top-level URI (default href-behaviour) thru
|
|
|
|
|
|
| their own 'bus' (xrf://#.....). This decoupling between
|
|
|
|
|
|
| navigation and interaction prevents non-standard things like
|
|
|
|
|
|
| (href:javascript:dosomething()).
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 19:53:30 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 7]
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
|
|
|
|
|
Internet-Draft XR Fragments September 2025
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
6. Conventions and Definitions
|
2023-09-04 21:20:59 +02:00
|
|
|
|
|
2023-09-07 15:53:32 +02:00
|
|
|
|
See appendix below in case certain terms are not clear.
|
2023-09-04 21:20:59 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
6.1. XR Fragment URL Grammar
|
2024-01-30 09:58:00 +00:00
|
|
|
|
|
|
|
|
|
|
For typical HTTP-like browsers/applications:
|
2023-09-04 21:20:59 +02:00
|
|
|
|
|
2023-09-18 11:03:18 +02:00
|
|
|
|
reserved = gen-delims / sub-delims
|
|
|
|
|
|
gen-delims = "#" / "&"
|
|
|
|
|
|
sub-delims = "," / "="
|
|
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
| Example: ://foo.com/my3d.gltf#room1&prio=-5&t=0,100
|
2023-09-18 11:03:18 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
+============+=================================+
|
|
|
|
|
|
| Demo | Explanation |
|
|
|
|
|
|
+============+=================================+
|
|
|
|
|
|
| room1 | vector/coordinate argument e.g. |
|
|
|
|
|
|
+------------+---------------------------------+
|
|
|
|
|
|
| room1&cam1 | combinators |
|
|
|
|
|
|
+------------+---------------------------------+
|
2023-09-04 21:20:59 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
Table 2
|
2023-09-05 19:14:10 +02:00
|
|
|
|
|
2023-09-18 11:03:18 +02:00
|
|
|
|
| this is already implemented in all browsers
|
|
|
|
|
|
|
2024-01-30 09:58:00 +00:00
|
|
|
|
Pseudo (non-native) browser-implementations (supporting XR Fragments
|
|
|
|
|
|
using HTML+JS e.g.) can use the ? search-operator to address outbound
|
|
|
|
|
|
content.
|
|
|
|
|
|
In other words, the URL updates to: https://me.com?https://me.com/
|
|
|
|
|
|
other.glb when navigating to https://me.com/other.glb from inside a
|
|
|
|
|
|
https://me.com WebXR experience e.g.
|
|
|
|
|
|
That way, if the link gets shared, the XR Fragments implementation at
|
|
|
|
|
|
https://me.com can load the latter (and still indicates which XR
|
|
|
|
|
|
Fragments entrypoint-experience/client was used).
|
|
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
7. Spatial Referencing 3D
|
2024-04-25 19:06:03 +00:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
3D files contain an hierarchy of objects.
|
|
|
|
|
|
XR Fragments assumes the following objectname-to-URI-Fragment
|
|
|
|
|
|
mapping, in order to deeplink 3D objects:
|
2024-04-25 19:06:03 +00:00
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 19:53:30 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 8]
|
2024-04-25 19:06:03 +00:00
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
Internet-Draft XR Fragments September 2025
|
2024-04-25 19:06:03 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
my.io/scene.fbx
|
|
|
|
|
|
+─────────────────────────────+
|
|
|
|
|
|
│ sky │ src: http://my.io/scene.fbx#sky (includes building,mainobject,floor)
|
|
|
|
|
|
│ +─────────────────────────+ │
|
|
|
|
|
|
│ │ building │ │ src: http://my.io/scene.fbx#building (includes mainobject,floor)
|
|
|
|
|
|
│ │ +─────────────────────+ │ │
|
|
|
|
|
|
│ │ │ mainobject │ │ │ src: http://my.io/scene.fbx#mainobject (includes floor)
|
|
|
|
|
|
│ │ │ +─────────────────+ │ │ │
|
|
|
|
|
|
│ │ │ │ floor │ │ │ │ src: http://my.io/scene.fbx#floor (just floor object)
|
|
|
|
|
|
│ │ │ │ │ │ │ │
|
|
|
|
|
|
│ │ │ +─────────────────+ │ │ │
|
|
|
|
|
|
│ │ +─────────────────────+ │ │
|
|
|
|
|
|
│ +─────────────────────────+ │
|
|
|
|
|
|
+─────────────────────────────+
|
|
|
|
|
|
|
|
|
|
|
|
| Every 3D fileformat supports named 3D object, and this name allows
|
|
|
|
|
|
| URLs (fragments) to reference them (and their children objects).
|
|
|
|
|
|
|
|
|
|
|
|
Clever nested design of 3D scenes allow great ways for re-using
|
|
|
|
|
|
content, and/or previewing scenes.
|
|
|
|
|
|
For example, to render a portal with a preview-version of the scene,
|
|
|
|
|
|
create an 3D object with:
|
|
|
|
|
|
|
|
|
|
|
|
* href: https://scene.fbx
|
|
|
|
|
|
|
|
|
|
|
|
| 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.
|
|
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
8. Level0: Files
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
Compatible 3D fileformats: glTF (https://www.khronos.org/gltf/), usdz
|
|
|
|
|
|
(https://openusd.org/release/spec_usdz.html), obj
|
|
|
|
|
|
(https://en.wikipedia.org/wiki/Wavefront_.obj_file), collada
|
|
|
|
|
|
(https://www.khronos.org/collada), THREE.json
|
|
|
|
|
|
(https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4),
|
|
|
|
|
|
X3D (https://en.wikipedia.org/wiki/X3D) e.g.
|
|
|
|
|
|
|
|
|
|
|
|
A 3D scene-file can be considered <b>XR Fragment-compatible</b> when
|
|
|
|
|
|
it contains metadata: 1. implicit: there's at least one object with a
|
|
|
|
|
|
name (*) 2. explicit: (optional) object(s) have (level2) href extras.
|
|
|
|
|
|
|
|
|
|
|
|
| * = last wins in case of non-unique names
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
van Kammen Expires 24 March 2026 [Page 9]
|
|
|
|
|
|
|
|
|
|
|
|
Internet-Draft XR Fragments September 2025
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
There are *optional* auto-loaded side-car files to enable hasslefree
|
2025-09-19 19:19:37 +02:00
|
|
|
|
XR Movies (#XR%20Movies).
|
|
|
|
|
|
they can accomodate developers or applications who (for whatever
|
|
|
|
|
|
reason) must not modify the 3D scene-file (a .glb e.g.).
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
8.1. via href metadata
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
scene.glb <--- 'href' extra [heuristic] detected inside!
|
|
|
|
|
|
scene.png (preview thumbnail)
|
|
|
|
|
|
scene.ogg (soundtrack to plays when global 3D animation starts)
|
|
|
|
|
|
scene.vtt (subtitles for accessibility or screenreaders)
|
|
|
|
|
|
scene.json (sidecar JSON-file with explicit metadata)
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
*heuristics*:
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
* if at least one href custom property/extra is found in a 3D scene
|
|
|
|
|
|
* The viewer should poll for the above mentioned sidecar-file
|
|
|
|
|
|
extensions (and present accordingly)
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
8.2. via chained extension
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
scene.xrf.glb <--- '.xrf.' sidecar file heuristic detected!
|
|
|
|
|
|
scene.xrf.png (preview thumbnail)
|
|
|
|
|
|
scene.xrf.ogg (soundtrack to plays when global 3D animation starts)
|
|
|
|
|
|
scene.xrf.vtt (subtitles for accessibility or screenreaders)
|
|
|
|
|
|
scene.xrf.json (sidecar JSON-file with explicit metadata)
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| A fallback-mechanism to turn 3D files into XR Movies
|
|
|
|
|
|
| (#XR%20Movies) without editing them.
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
*heuristics*:
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
* the chained-extension heuristic .xrf. should be present in the
|
|
|
|
|
|
filename (scene.xrf.glb e.g.)
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
8.3. via subdocuments/xattr
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
More secure protocols (Nextgraph e.g.) don't allow for simply polling
|
|
|
|
|
|
files. In such case, subdocuments or extended attributes should be
|
|
|
|
|
|
polled:
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| NOTE: in the examples below we use the href-heuristic, but also
|
|
|
|
|
|
| the .xrf. chained-extension applies here.
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
van Kammen Expires 24 March 2026 [Page 10]
|
|
|
|
|
|
|
|
|
|
|
|
Internet-Draft XR Fragments September 2025
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
myspreadsheet.ods
|
|
|
|
|
|
└── explainer.glb <--- 'href' extra [heuristic] detected inside!
|
|
|
|
|
|
├── explainer.ogg (soundtrack to play when global 3D animation starts)
|
|
|
|
|
|
├── explainer.png (preview thumnbnail)
|
|
|
|
|
|
├── explainer.json (sidecar JSON-file with explicit metadata)
|
|
|
|
|
|
└── explainer.vtt (subtitles for accessibility or screenreaders)
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
If only extended attributes (xattr) are available, the respective
|
|
|
|
|
|
referenced file can be embedded:
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
$ setfattr -n explainer.ogg -v "soundtrack.ogg" explainer.glb
|
|
|
|
|
|
$ setfattr -n explainer.png -v "thumbnail.png" explainer.glb
|
|
|
|
|
|
$ setfattr -n explainer.vtt -v "subtitles.vtt" explainer.glb
|
2024-02-01 12:28:17 +00:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| NOTE: Linux's setfattr/getfattr is xattr on mac, and Set-Content/
|
|
|
|
|
|
| Get-content on Windows. See pxattr
|
|
|
|
|
|
| (https://www.lesbonscomptes.com/pxattr/index.html) for lowlevel
|
|
|
|
|
|
| access.
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
8.4. JSON sidecar-file
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
For developers, sidecar-file can allow for defining *explicit* XR
|
|
|
|
|
|
Fragments links (>level1), outside of the 3D file.
|
|
|
|
|
|
This can be done via (objectname/metadata) key/value-pairs in a JSON
|
|
|
|
|
|
sidecar-file (https://en.wikipedia.org/wiki/Sidecar_file):
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
* experience.glb
|
|
|
|
|
|
* experience.json <----
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
{
|
2025-09-20 10:46:23 +02:00
|
|
|
|
"aria-description": "description of scene",
|
2025-09-19 19:19:37 +02:00
|
|
|
|
"button": {
|
2025-09-20 10:46:23 +02:00
|
|
|
|
"href": "#roomB",
|
|
|
|
|
|
"aria-description": "description of room"
|
2025-09-19 19:19:37 +02:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| This will make object button clickable, and teleport the user to
|
|
|
|
|
|
| object roomB.
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
So after loading experience.glb the existence of experience.json is
|
|
|
|
|
|
detected, to apply the explicit metadata.
|
|
|
|
|
|
The sidecar will define (or *override* already existing) extras,
|
|
|
|
|
|
which can be handy for multi-user platforms (offer 3D scene
|
|
|
|
|
|
customization/personalization to users).
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| In THREE.js-code this would boil down to:
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
van Kammen Expires 24 March 2026 [Page 11]
|
|
|
|
|
|
|
|
|
|
|
|
Internet-Draft XR Fragments September 2025
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
scene.userData['aria-description'] = "description of scene"
|
|
|
|
|
|
scene.getObjectByName("button").userData.href = "#roomB"
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
// now the XR Fragments parser can process the XR Fragments userData 'extras' in the scene
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
9. Level1: URI
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| *XR Fragments allows deeplinking of 3D objects by mapping
|
|
|
|
|
|
| objectnames to URI fragments*
|
2023-09-18 11:03:18 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
XR Fragments tries to seek to connect the world of text (semantical
|
|
|
|
|
|
web / RDF), and the world of pixels.
|
|
|
|
|
|
Instead of forcing authors to combine 3D/2D objects programmatically
|
|
|
|
|
|
(publishing thru a game-editor e.g.), XR Fragments *integrates all*
|
|
|
|
|
|
which allows a universal viewing experience.
|
2025-09-01 18:03:35 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
+───────────────────────────────────────────────────────────────────────────────────────────────+
|
|
|
|
|
|
│ │
|
|
|
|
|
|
│ U R N │
|
|
|
|
|
|
│ U R L | │
|
|
|
|
|
|
│ | |-----------------+--------| │
|
|
|
|
|
|
│ +--------------------------------------------------| │
|
|
|
|
|
|
│ | │
|
|
|
|
|
|
│ + https://foo.com/some/foo/scene.glb#someview <-- http URI (=URL and has URN) │
|
|
|
|
|
|
│ | │
|
|
|
|
|
|
│ + ipfs://cfe0987ec9r9098ecr/cats.fbx#someview <-- an IPFS URI (=URL and has URN) │
|
|
|
|
|
|
│ │
|
|
|
|
|
|
│ ec09f7e9cf8e7f09c8e7f98e79c09ef89e000efece8f7ecfe9fe <-- an interpeer URI │
|
|
|
|
|
|
│ │
|
|
|
|
|
|
│ │
|
|
|
|
|
|
│ |------------------------+-------------------------| │
|
|
|
|
|
|
│ | │
|
|
|
|
|
|
│ U R I │
|
|
|
|
|
|
│ │
|
|
|
|
|
|
+───────────────────────────────────────────────────────────────────────────────────────────────+
|
2023-09-18 11:03:18 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
Fact: our typical browser URL's are just *a possible implementation*
|
|
|
|
|
|
of URI's (for untapped humancentric potential of URI's see
|
|
|
|
|
|
interpeer.io (https://interpeer.io) or NextGraph
|
|
|
|
|
|
(https://nextgraph.org) )
|
2025-09-02 16:38:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| XR Fragments does not look at XR (or the web) thru the lens of
|
|
|
|
|
|
| HTML or URLs.
|
|
|
|
|
|
| But approaches things from a higherlevel local-first 3D hypermedia
|
|
|
|
|
|
| browser-perspective.
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
Below you can see how this translates back into good-old URLs:
|
2023-09-18 11:03:18 +02:00
|
|
|
|
|
2023-12-06 16:40:55 +01:00
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 12]
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
|
|
|
|
|
Internet-Draft XR Fragments September 2025
|
|
|
|
|
|
|
2024-10-07 19:03:02 +00:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
+───────────────────────────────────────────────────────────────────────────────────────────────+
|
|
|
|
|
|
│ │
|
|
|
|
|
|
│ the soul of any URL: ://macro /meso ?micro #nano │
|
|
|
|
|
|
│ │
|
|
|
|
|
|
│ 2D URL: ://library.com /document ?search #chapter │
|
|
|
|
|
|
│ xrf:// │
|
|
|
|
|
|
│ 4D URL: ://park.com /4Dscene.fbx ─> ?other.glb ─> #object ─> hashbus │
|
|
|
|
|
|
│ │ #filter │ │
|
|
|
|
|
|
│ │ #tag │ │
|
|
|
|
|
|
│ │ (hypermediatic) #material │ │
|
|
|
|
|
|
│ │ ( feedback ) #animation │ │
|
|
|
|
|
|
│ │ ( loop ) #texture │ │
|
|
|
|
|
|
│ │ #variable │ │
|
|
|
|
|
|
│ │ │ │
|
|
|
|
|
|
│ XRWG <─────────────────────<─────────────+ │
|
|
|
|
|
|
│ │ │ │
|
|
|
|
|
|
│ └─ objects ──────────────>─────────────+ │
|
|
|
|
|
|
│ │
|
|
|
|
|
|
│ │
|
|
|
|
|
|
+───────────────────────────────────────────────────────────────────────────────────────────────+
|
2023-12-06 16:40:55 +01:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| ?-linked and #-linked navigation are JUST one possible way to
|
|
|
|
|
|
| implement XR Fragments: the essential goal is to allow a
|
|
|
|
|
|
| Hypermediatic FeedbackLoop (HFL) between external and internal 4D
|
|
|
|
|
|
| navigation.
|
|
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
9.1. List of URI Fragments
|
2025-09-19 19:19:37 +02:00
|
|
|
|
|
|
|
|
|
|
+=======================+======================================+===========+=============+
|
|
|
|
|
|
|fragment |type |example |info |
|
|
|
|
|
|
+=======================+======================================+===========+=============+
|
|
|
|
|
|
|#...... |vector3 |#room1 |positions/ |
|
|
|
|
|
|
| | |#room2 |parents |
|
|
|
|
|
|
| | |#cam2 |camera(rig) |
|
|
|
|
|
|
| | | |(or XR floor)|
|
|
|
|
|
|
| | | |to xyz- |
|
|
|
|
|
|
| | | |coord/object/|
|
|
|
|
|
|
| | | |camera and |
|
|
|
|
|
|
| | | |upvector |
|
|
|
|
|
|
+-----------------------+--------------------------------------+-----------+-------------+
|
|
|
|
|
|
|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 |
|
|
|
|
|
|
+-----------------------+--------------------------------------+-----------+-------------+
|
2023-12-06 16:40:55 +01:00
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 13]
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
|
|
|
|
|
Internet-Draft XR Fragments September 2025
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
Table 3
|
2023-09-21 13:30:14 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
9.2. List of *_explicit_ metadata
|
2023-09-07 14:06:50 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
These are the possible 'extras' for 3D nodes and sidecar-files
|
2023-09-07 14:06:50 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
+======+========+================+==========+===================+
|
|
|
|
|
|
| key | type | example (JSON) | function | existing |
|
|
|
|
|
|
| | | | | compatibility |
|
|
|
|
|
|
+======+========+================+==========+===================+
|
|
|
|
|
|
| href | string | "href": | XR | custom property |
|
|
|
|
|
|
| | | "b.gltf" | teleport | in 3D fileformats |
|
|
|
|
|
|
+------+--------+----------------+----------+-------------------+
|
2023-09-07 14:06:50 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
Table 4
|
2023-09-18 11:03:18 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
10. Level2: href links
|
2023-09-18 11:03:18 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
Explicit href metadata ('extras') in a 3D object (of a 3D file), hint
|
|
|
|
|
|
the viewer that the user ''can interact'' with that object :
|
2023-09-18 11:03:18 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| fragment | type | example value | |href| string (uri or predefined
|
|
|
|
|
|
view) | #pyramid
|
|
|
|
|
|
#lastvisit
|
|
|
|
|
|
xrf://#-someobject
|
|
|
|
|
|
://somefile.gltf#foo
|
|
|
|
|
|
|
|
2023-09-18 11:03:18 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
10.1. Interaction behaviour
|
2023-09-18 11:03:18 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
When clicking an ''href''-value, the user(camera) is teleport to the
|
|
|
|
|
|
referenced object.
|
2023-09-18 11:03:18 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
The imported/teleported destination can be another object in the same
|
|
|
|
|
|
scene-file, or a different file.
|
2023-09-21 13:05:30 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
10.2. XR Viewer implementation
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| *spec* | *action* | *feature* | |-|-|-| | level0+1 | hover 3D file
|
|
|
|
|
|
href (#via-href-metadata) | show the preview PNG thumbnail (if any).
|
|
|
|
|
|
| | level0+1 | launch 3D file href (#via-href-metadata) | replace
|
|
|
|
|
|
the current scene with a new 3D file (href: other.glb e.g.) | |
|
|
|
|
|
|
level2 | click internal 3D file href (#via-href-metadata) (#roomB
|
|
|
|
|
|
e.g.) | teleport the camera to the origin of object(name roomB). See
|
|
|
|
|
|
[[teleport camera]].| | level2 | click external 3D file href (#via-
|
|
|
|
|
|
href-metadata) (foo.glb e.g.) | replace the current scene with a new
|
|
|
|
|
|
3D file (href: other.glb e.g.) | | level2 | hover external 3D file
|
|
|
|
|
|
href (#via-href-metadata) | show the preview PNG thumbnail (if any
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 14]
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
|
|
|
|
|
Internet-Draft XR Fragments September 2025
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
sidecar, see level0) | | level2 | click href (#via-href-metadata) |
|
|
|
|
|
|
hashbus: execute without changing the toplevel URL location (href:
|
|
|
|
|
|
xrf://#someObjectName e.g.) | | level3 | click href (#via-href-
|
|
|
|
|
|
metadata) | set the global 3D animation timeline to its Media
|
|
|
|
|
|
Fragment value (#t=2,3 e.g.) |
|
2024-02-26 11:34:21 +00:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| NOTE: hashbus links (xrf://#foo&bar) don't change the toplevel
|
|
|
|
|
|
| URL, which makes it ideal for interactions (in contrast to typical
|
|
|
|
|
|
| #roomC navigation, which benefit back/forward browser-buttons),
|
|
|
|
|
|
| see <a href="#hashbus">hashbus</a> for more info.
|
2024-02-26 11:34:21 +00:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
11. Level3: Media Fragments
|
2024-02-26 11:34:21 +00:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| these allow for XR Movies with a controllable timeline using href
|
|
|
|
|
|
| URI's with Media Fragments
|
2024-02-26 11:34:21 +00:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
Just like with 2D media-files, W3C mediafragments (#t=1,2) can be
|
|
|
|
|
|
used to control a timeline via the #t (##t) primitive. XR Fragments
|
|
|
|
|
|
Level3 makes the 3D timeline, as well as URL-referenced files
|
|
|
|
|
|
*controllable* via Media Fragments like:
|
2023-09-21 13:05:30 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
* level2 hrefs (href: #t=4 e.g. to control 3D timeline)
|
|
|
|
|
|
* level4: xrf: URI scheme:
|
|
|
|
|
|
- href: xrf:foo.wav#t=0 to play a wav
|
|
|
|
|
|
- href: xrf:news.glb?clone#t=0 to instance and play another
|
|
|
|
|
|
experience
|
2023-12-06 16:40:55 +01:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
11.1. Animation(s) timeline
|
2023-12-06 16:40:55 +01:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
controls the animation(s) of the scene (or src resource which
|
|
|
|
|
|
contains a timeline)
|
2023-12-06 16:40:55 +01:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| fragment | type | functionality | | <b>#t</b>=start,stop |
|
2025-09-20 10:46:23 +02:00
|
|
|
|
[vector2] (default:`#t=0`) | start,stop (in seconds |
|
2023-12-06 16:40:55 +01:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| Example Value | Explanation | | #t=1 | play (3D) animations from 1
|
|
|
|
|
|
seconds till end (and stop) | | #t=1,100 | play (3D) animations from
|
2025-09-20 10:46:23 +02:00
|
|
|
|
1 till 100 seconds (and stop) |
|
2023-09-21 13:05:30 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
11.2. Specify playback loopmode
|
2025-09-19 19:19:37 +02:00
|
|
|
|
|
|
|
|
|
|
This compensates a missing element from Media Fragments to enable/
|
|
|
|
|
|
disable temporal looping. .
|
2023-09-21 13:05:30 +02:00
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
| fragment | type | functionality | | <b>#loop</b> | string | enables
|
|
|
|
|
|
animation/video/audio loop | | <b>#-loop</b> | string | disables
|
|
|
|
|
|
animation/video/audio loop |
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 15]
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
|
|
|
|
|
Internet-Draft XR Fragments September 2025
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
11.3. Controlling embedded content
|
2023-09-21 13:05:30 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
use [[URI Templates]] to control embedded media, for example a simple
|
|
|
|
|
|
video-player:
|
2023-09-21 13:05:30 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
foo.usdz
|
|
|
|
|
|
│
|
|
|
|
|
|
├── ◻ loopbutton_enable
|
|
|
|
|
|
│ └ href: #loop <-- enable global loop
|
|
|
|
|
|
│
|
|
|
|
|
|
├── ◻ loopbutton_enable
|
|
|
|
|
|
│ └ href: #-loop <-- disable global loop
|
|
|
|
|
|
│
|
|
|
|
|
|
├── ◻ playbutton
|
|
|
|
|
|
│ └ href: #t=10&loop <-- play global 3D timeline (all anims) (looped)
|
|
|
|
|
|
│
|
|
|
|
|
|
└── ◻ playbutton_external
|
|
|
|
|
|
└ href: https://my.org/animation.glb#!&t=3,10 <-- import & play external anim
|
2023-09-21 13:05:30 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
12. Level4: prefix operators
|
2023-12-06 16:40:55 +01:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
Prefixing objectnames with the following simple operators allow for
|
|
|
|
|
|
*extremely powerful* XR interactions:
|
2023-09-21 13:05:30 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
* #!
|
|
|
|
|
|
* #*
|
|
|
|
|
|
* #+ or #-
|
|
|
|
|
|
* #|
|
|
|
|
|
|
* xrf: URI scheme
|
2023-09-21 13:05:30 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| *Examples:* #+menu to show a object, #-menu to hide a menu, #!menu
|
|
|
|
|
|
| to teleport a menu, #*block to clone a grabbable block, #|object
|
|
|
|
|
|
| to share an object
|
2023-09-21 13:30:14 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
12.1. Object teleports (!)
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
Prefixing an object with an exclamation-symbol, will teleport a
|
|
|
|
|
|
(local or remote) referenced object from/to its original/usercamera
|
|
|
|
|
|
location.
|
2023-09-21 13:05:30 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
[img[objecteleport.png]]
|
2024-09-25 16:00:36 +02:00
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
Usecases: * show/hide objects/buttons (menu e.g.) in front of user *
|
|
|
|
|
|
embed remote (object within) 3D file via remote URL * instance an
|
|
|
|
|
|
interactive object near the user regardless of location * instance
|
|
|
|
|
|
HUD or semi-transparent-textured-sphere (LUT) around the user
|
2024-09-25 16:00:36 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-10-07 19:03:02 +00:00
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 16]
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
|
|
|
|
|
Internet-Draft XR Fragments September 2025
|
2024-10-07 19:03:02 +00:00
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
<div class="border padding" style="border:4px solid #888"> <span
|
|
|
|
|
|
class="big hi1">#!menu</span> </div>
|
2024-02-16 16:34:32 +00:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
Clicking the href (#via-href-metadata)-value above will:
|
2023-09-22 10:08:28 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
1. *reposition the referenced object* (menu) to the
|
|
|
|
|
|
usercamera's-coordinates.
|
|
|
|
|
|
2. *zoom* in case of (non-empty) mesh-object: rescale to 1 m³, and
|
|
|
|
|
|
position 1m in front of the camera
|
|
|
|
|
|
3. toggle behaviour: revert values if 1/2 were already applied
|
|
|
|
|
|
4. #+ is always implied (objects are always made visible)
|
2024-06-17 05:59:51 +00:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
This tiny but powerful symbol allows incredible interactive
|
|
|
|
|
|
possibilities, by carefully positioning re-usable objects outside of
|
|
|
|
|
|
a scene (below the usercamera's floor e.g.).
|
2023-12-06 16:40:55 +01:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
* href: #whiteroom&!explainer&!exitmenu
|
2023-12-06 16:40:55 +01:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| This will teleport the user to whiteroom and moves object
|
|
|
|
|
|
| explainer and exitmenu in front of the user.
|
2023-12-06 16:40:55 +01:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
* href: `https://my.org/foo.glb#! (https://my.org/foo.glb#!)
|
2023-12-06 16:40:55 +01:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
Clicking the href (#via-href-metadata)-value above will:
|
2023-12-06 16:40:55 +01:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
1. import foo.glb from my.org's webserver
|
|
|
|
|
|
2. show it in front of the user (because #! indicates object
|
|
|
|
|
|
teleport)
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
* href: https://foo.glb#roomB&!bar
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
Clicking the href (#via-href-metadata)-value above will:
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
1. replace the current scene with foo.glb
|
|
|
|
|
|
2. teleport the user to #roomB inside foo.glb
|
|
|
|
|
|
3. *instance the referenced object* (bar inside foo.glb) in front of
|
|
|
|
|
|
the user.
|
|
|
|
|
|
4. it will update the top-Level URL (because xrf: was not used)
|
|
|
|
|
|
5. hide the *instanced object* when clicked again (toggle
|
|
|
|
|
|
visibility)
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
| *NOTE*: level2 teleportation links, as well as instancing
|
|
|
|
|
|
| mitigates the 'broken embedded image'-issue of HTML: *always*
|
|
|
|
|
|
| attaching the href-values to *a 3D (preview) object* (that way
|
|
|
|
|
|
| broken links will not break the design).
|
|
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2023-12-06 16:40:55 +01:00
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 17]
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
|
|
|
|
|
Internet-Draft XR Fragments September 2025
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
*Example:* clicking a 3D button with title 'menu' and href (#href)-
|
|
|
|
|
|
value xrf:menu.glb?instance#t=4,5 would instance a 3D menu (menu.glb)
|
|
|
|
|
|
in front of the user, and loop its animation between from 4-5 seconds
|
|
|
|
|
|
(t=4,5)
|
2023-09-07 15:53:32 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| *NOTE*: combining instance-operators allows dynamic construction
|
|
|
|
|
|
| of 3D scenes (#london&!welcomeMenu&!fadeBox e.g.)
|
2023-09-21 13:30:14 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
12.2. Object multipliers (*)
|
2023-09-21 13:30:14 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
The star-prefix will clone a (local or remote) referenced object to
|
|
|
|
|
|
the usercamera's location, and make it grabbable.
|
|
|
|
|
|
Usecases: * object-picker (build stuff with objects)
|
2023-09-21 13:05:30 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| *NOTE*: this is basically the #! operator (#%23%21) which
|
|
|
|
|
|
| infinitely *clones* the referenced object (instead of
|
|
|
|
|
|
| repositioning the object).
|
2023-09-21 13:30:14 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
12.3. De/selectors (+ and -)
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
* href: #-welcome (or #+welcome)
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
Clicking href-value above will do:
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
1. show/hide the target object (and children)
|
2023-09-21 13:30:14 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
* href: #https://my.org/foo.glb/#bar&-welcome
|
2023-09-21 13:05:30 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| *NOTE:* the latter shows that (de)selectors can also be with
|
|
|
|
|
|
| regular href (#href)-values
|
2023-09-09 11:30:03 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
12.4. Sharing object or file (#|)
|
2023-09-18 11:03:18 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
The pipe-symbol (|) sends a (targeted) object to the OS. Clicking
|
|
|
|
|
|
the href-value below will:
|
2024-06-17 05:59:51 +00:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
1. share the (targeted object in the) file to a another application
|
2023-09-09 11:30:03 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| This URL can be fed straight into Web Share API
|
|
|
|
|
|
| (https://developer.mozilla.org/en-US/docs/Web/API/Web_Share_API)
|
|
|
|
|
|
| or xdg-open (https://www.freedesktop.org/wiki/Software/xdg-utils/)
|
2023-09-09 11:30:03 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
* href: xrf://#|bar
|
2024-04-25 19:06:03 +00:00
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
| *NOTE*: sharing is limited to (internal objects) via xrf: scheme-
|
|
|
|
|
|
| only
|
|
|
|
|
|
|
2024-04-25 19:06:03 +00:00
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
van Kammen Expires 24 March 2026 [Page 18]
|
2024-02-26 11:34:21 +00:00
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
Internet-Draft XR Fragments September 2025
|
2024-04-25 19:06:03 +00:00
|
|
|
|
|
2023-09-21 13:30:14 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
12.5. xrf:// URI scheme
|
2023-09-18 11:03:18 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
Prefixing the xrf: to href (#href)-values *will prevent* level2
|
|
|
|
|
|
(#📜%20level2:%20explicit%20links) href (#href)-values from changing
|
|
|
|
|
|
the top-Level URL.
|
2023-09-09 11:30:03 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| *Usecase*: for non-shareable URLs like href: xrf:#t=4,5, to
|
|
|
|
|
|
| display a stateful msg e.g.).
|
2023-09-18 11:03:18 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
*Reason:* XR Fragments is inspired by HTML's href-attribute
|
|
|
|
|
|
(https://en.wikipedia.org/wiki/Hyperlink), which does various things:
|
2023-09-18 11:03:18 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
1. it updates the browser-location
|
|
|
|
|
|
2. it makes something clickable
|
|
|
|
|
|
3. it jumps to another document / elsewhere in the same document
|
|
|
|
|
|
4. and more
|
2023-09-04 21:20:59 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
The xrf: scheme will just do 2 & 3 (so the URL-values will not leak
|
|
|
|
|
|
into the top-level URL).
|
2023-09-02 21:44:57 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| *compliance with RFC 3986*: unimplemented/unknown URI schemes
|
|
|
|
|
|
| (xrf:... e.g.) will not update the top-level URL
|
2023-09-02 21:44:57 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
13. Level5: URI Templates (RFC6570)
|
2025-09-19 19:53:30 +02:00
|
|
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
XR Fragments adopts Level1 URI *Fragment* expansion to provide safe
|
|
|
|
|
|
interactivity.
|
|
|
|
|
|
This is non-normative, and the draft spec is available on request.
|
|
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
14. Top-level URL processing
|
2023-09-02 21:44:57 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| Example URL: ://foo/world.gltf#room1&t=10&cam
|
2023-09-04 21:20:59 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
The URL-processing-flow for hypermedia browsers goes like this:
|
|
|
|
|
|
|
|
|
|
|
|
1. IF scene operators and/or animation operator (t) are present in
|
|
|
|
|
|
the URL then (re)position the camera (to room1) and/or animation-
|
|
|
|
|
|
range (10) accordingly.
|
|
|
|
|
|
2. IF no camera-position has been set in <b>step 1 or 2</b> assume
|
|
|
|
|
|
0,0,0 as camera coordinate (XR: add user-height) (example (https:
|
|
|
|
|
|
//github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/
|
|
|
|
|
|
three/navigator.js#L31]]))
|
2025-09-20 10:46:23 +02:00
|
|
|
|
3. IF a camera-object exists with name cam assume that user(camera)
|
|
|
|
|
|
position
|
2025-09-19 19:53:30 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
|
|
|
|
|
|
van Kammen Expires 24 March 2026 [Page 19]
|
2025-09-19 19:53:30 +02:00
|
|
|
|
|
|
|
|
|
|
Internet-Draft XR Fragments September 2025
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
14.1. UX
|
2023-09-04 21:20:59 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
End-users should always have read/write access to:
|
2024-04-25 19:06:03 +00:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
1. the current (toplevel) <b>URL</b> (an URLbar etc)
|
|
|
|
|
|
2. URL-history (a <b>back/forward</b> button e.g.)
|
|
|
|
|
|
3. Clicking/Touching an href navigates (and updates the URL) to
|
|
|
|
|
|
another scene/file (and coordinate e.g. in case the URL contains
|
|
|
|
|
|
XR Fragments).
|
2023-09-02 21:44:57 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
15. Example: Navigating content href portals
|
2023-09-02 21:44:57 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
navigation, portals & mutations
|
2023-09-09 11:30:03 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
+==========+==================+========================+
|
|
|
|
|
|
| fragment | type | example value |
|
|
|
|
|
|
+==========+==================+========================+
|
|
|
|
|
|
| href | string (uri or | #room1 |
|
|
|
|
|
|
| | predefined view) | #room1 |
|
|
|
|
|
|
| | | ://somefile.gltf#room1 |
|
|
|
|
|
|
+----------+------------------+------------------------+
|
2023-09-08 17:01:14 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
Table 5
|
2024-04-25 19:06:03 +00:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
1. clicking an outbound ''external''- or ''file URI'' fully replaces
|
|
|
|
|
|
the current scene and assumes room2 by default (unless specified)
|
2024-04-25 19:06:03 +00:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
2. relocation/reorientation should happen locally for local URI's
|
|
|
|
|
|
(#....)
|
2024-04-25 19:06:03 +00:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
3. navigation should not happen ''immediately'' when user is more
|
|
|
|
|
|
than 5 meter away from the portal/object containing the href (to
|
|
|
|
|
|
prevent accidental navigation e.g.)
|
2023-09-08 17:01:14 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
4. URL navigation should always be reflected in the client URL-bar
|
|
|
|
|
|
(in case of javascript: see [here
|
|
|
|
|
|
(https://github.com/coderofsalvation/xrfragment/blob/dev/src/3rd/
|
|
|
|
|
|
js/three/navigator.js) for an example navigator), and only update
|
|
|
|
|
|
the URL-bar after the scene (default fragment #) has been loaded.
|
2023-09-06 15:13:36 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
5. In immersive XR mode, the navigator back/forward-buttons should
|
|
|
|
|
|
be always visible (using a wearable e.g., see [here
|
|
|
|
|
|
(https://github.com/coderofsalvation/xrfragment/blob/dev/example/
|
|
|
|
|
|
aframe/sandbox/index.html#L26-L29) for an example wearable)
|
2023-09-06 15:13:36 +02:00
|
|
|
|
|
2025-09-19 19:53:30 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
van Kammen Expires 24 March 2026 [Page 20]
|
2025-09-19 19:53:30 +02:00
|
|
|
|
|
|
|
|
|
|
Internet-Draft XR Fragments September 2025
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
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/
|
|
|
|
|
|
href.js#L97))
|
2023-09-06 15:13:36 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
7. ignore previous rule in special cases, like clicking an href
|
|
|
|
|
|
using camera-portal collision (the back-button could cause a
|
|
|
|
|
|
teleport-loop if the previous position is too close)
|
2023-09-09 11:30:03 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
8. href-events should bubble upward the node-tree (from children to
|
|
|
|
|
|
ancestors, so that ancestors can also conain an href), however
|
|
|
|
|
|
only 1 href can be executed at the same time.
|
2023-09-22 10:08:28 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
9. the end-user navigator back/forward buttons should repeat a back/
|
|
|
|
|
|
forward action until a #... primitive is found (the stateless
|
|
|
|
|
|
xrf:// href-values should not be pushed to the url-history)
|
2024-07-12 15:12:40 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
» example implementation
|
|
|
|
|
|
(https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/
|
|
|
|
|
|
three/xrf/href.js)
|
|
|
|
|
|
» example 3D asset
|
|
|
|
|
|
(https://github.com/coderofsalvation/xrfragment/blob/main/example/
|
|
|
|
|
|
assets/href.gltf#L192)
|
|
|
|
|
|
» discussion (https://github.com/coderofsalvation/xrfragment/
|
|
|
|
|
|
issues/1)
|
2024-07-12 15:12:40 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
15.1. Walking surfaces
|
2024-07-12 16:19:19 +00:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| By default position 0,0,0 of the 3D scene represents the walkable
|
|
|
|
|
|
| plane, however this is overridden when the following applies:
|
2024-07-12 15:12:40 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
XR Fragment-compatible viewers can infer this data based scanning the
|
|
|
|
|
|
scene for:
|
2024-07-12 15:12:40 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
1. materialless (nameless & textureless) mesh-objects (without href
|
|
|
|
|
|
and >0 faces)
|
2024-07-12 15:12:40 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| optionally the viewer can offer thumbstick, mouse or joystick
|
|
|
|
|
|
| teleport-tools for non-roomscale VR/AR setups.
|
2024-07-12 15:12:40 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
16. Example: Virtual world rings
|
2024-07-12 15:12:40 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
Consider 3D scenes linking to eachother using these href values,
|
|
|
|
|
|
attached to 3D button-objects:
|
2024-07-12 15:12:40 +02:00
|
|
|
|
|
2024-09-20 16:53:07 +02:00
|
|
|
|
* href: schoolA.edu/projects.gltf#math
|
|
|
|
|
|
* href: schoolB.edu/projects.gltf#math
|
|
|
|
|
|
* href: university.edu/projects.gltf#math
|
2024-07-12 15:12:40 +02:00
|
|
|
|
|
2025-09-19 19:53:30 +02:00
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 21]
|
2025-09-19 19:53:30 +02:00
|
|
|
|
|
|
|
|
|
|
Internet-Draft XR Fragments September 2025
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
This would teleport users to the math-projects of those universities.
|
|
|
|
|
|
Now consider adding a 'webring index'-button to each file, with this
|
|
|
|
|
|
href-value:
|
2024-07-12 15:12:40 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
* href: workgroup.edu/webrings.glb#!webringmenu
|
2024-07-12 15:12:40 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
This would allow displaying the (remote 3D file) webring menu with
|
|
|
|
|
|
various href-buttons inside, all centrally curated by the workgroup.
|
2024-10-14 11:52:35 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
17. Additional scene metadata
|
2024-07-12 15:12:40 +02:00
|
|
|
|
|
2024-07-12 16:19:19 +00:00
|
|
|
|
XR Fragments does not aim to redefine the metadata-space or
|
|
|
|
|
|
accessibility-space by introducing its own cataloging-metadata
|
|
|
|
|
|
fields. Instead, it encourages browsers to scan nodes for the
|
|
|
|
|
|
following custom properties:
|
2024-07-12 15:12:40 +02:00
|
|
|
|
|
2024-02-29 14:07:20 +00:00
|
|
|
|
* SPDX (https://spdx.dev/) license information
|
|
|
|
|
|
* ARIA (https://www.w3.org/WAI/standards-guidelines/aria/)
|
|
|
|
|
|
attributes (aria-*: .....)
|
2025-09-19 19:19:37 +02:00
|
|
|
|
* datapackage.json (https://datapackage.org) findability,
|
|
|
|
|
|
accessibility, interoperability, and reusability of data
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
ARIA's aria-description-metadata is normative, to aid accessibility
|
|
|
|
|
|
and scene transcripts
|
2025-09-01 17:47:16 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
| *NOTE*: please always start aria-description with a verb to aid
|
|
|
|
|
|
| transcripts.
|
2024-09-20 16:53:07 +02:00
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
The following metadata are non-normative but encouraged, since they
|
|
|
|
|
|
are popular and cheap to parse:
|
2024-09-20 16:53:07 +02:00
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
* RDF/JSON-LD (https://json-ld.org) like this example
|
|
|
|
|
|
(https://mvmd.org/standards/gltf/) or via glTF's KHR_xmp_json_ld
|
|
|
|
|
|
extension
|
|
|
|
|
|
(https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/
|
|
|
|
|
|
Khronos/KHR_xmp_json_ld)
|
|
|
|
|
|
* Open Graph (https://ogp.me) attributes (og:*: .....)
|
|
|
|
|
|
* Dublin-Core (https://www.dublincore.org/specifications/dublin-
|
|
|
|
|
|
core/application-profile-guidelines/) attributes(dc:*: .....)
|
|
|
|
|
|
* BibTex (https://bibtex.eu/fields) when known bibtex-keys exist
|
|
|
|
|
|
with values enclosed in { and },
|
2024-10-14 11:52:35 +02:00
|
|
|
|
|
2024-02-29 14:07:20 +00:00
|
|
|
|
| Example: object 'tryceratops' with aria-description: is a huge
|
|
|
|
|
|
| dinosaurus standing on a #mountain generates transcript
|
|
|
|
|
|
| #tryceratops is a huge dinosaurus standing on a #mountain, where
|
|
|
|
|
|
| the hashtags are clickable XR Fragments (activating the visible-
|
|
|
|
|
|
| links in the XR browser).
|
|
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 22]
|
2025-09-19 19:19:37 +02:00
|
|
|
|
|
|
|
|
|
|
Internet-Draft XR Fragments September 2025
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 19:53:30 +02:00
|
|
|
|
Individual nodes can be enriched with such metadata, but most
|
|
|
|
|
|
importantly the scene node:
|
|
|
|
|
|
|
2024-02-29 14:07:20 +00:00
|
|
|
|
+================================+=========================+
|
|
|
|
|
|
| metadata key | example value |
|
|
|
|
|
|
+================================+=========================+
|
|
|
|
|
|
| aria-description, | An immersive experience |
|
|
|
|
|
|
| og:description, dc:description | about Triceratops (*) |
|
|
|
|
|
|
+--------------------------------+-------------------------+
|
|
|
|
|
|
| SPDX | CC0-1.0 |
|
|
|
|
|
|
+--------------------------------+-------------------------+
|
|
|
|
|
|
| dc:creator | John Doe |
|
|
|
|
|
|
+--------------------------------+-------------------------+
|
|
|
|
|
|
| dc:title, og:title | 'Triceratops` (*) |
|
|
|
|
|
|
+--------------------------------+-------------------------+
|
|
|
|
|
|
| og:site_name | https://xrfragment.org |
|
|
|
|
|
|
+--------------------------------+-------------------------+
|
|
|
|
|
|
| dc.publisher | NLNET |
|
|
|
|
|
|
+--------------------------------+-------------------------+
|
|
|
|
|
|
| dc.date | 2024-01-01 |
|
|
|
|
|
|
+--------------------------------+-------------------------+
|
|
|
|
|
|
| dc.identifier | XRFRAGMENT-001 |
|
|
|
|
|
|
+--------------------------------+-------------------------+
|
|
|
|
|
|
| journal (bibTeX) | {Future Of Text Vol 3}, |
|
|
|
|
|
|
+--------------------------------+-------------------------+
|
|
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
Table 6
|
2024-09-20 16:53:07 +02:00
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
| * = these are interchangable (only one needs to be defined)
|
2024-10-14 11:52:35 +02:00
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
There's no silver bullet when it comes to metadata, so XR Fragment-
|
|
|
|
|
|
implementations should support where the metadata is/goes.
|
2024-09-20 16:53:07 +02:00
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
| These attributes can be scanned and presented during an href or
|
|
|
|
|
|
| src eye/mouse-over.
|
2024-09-20 16:53:07 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
18. Accessibility interface
|
2024-10-14 11:52:35 +02:00
|
|
|
|
|
|
|
|
|
|
The addressibility of XR Fragments allows for unique 3D-to-text
|
|
|
|
|
|
transcripts, as well as an textual interface to navigate 3D content.
|
|
|
|
|
|
Spec:
|
|
|
|
|
|
<Br>
|
|
|
|
|
|
|
2024-04-25 19:26:22 +00:00
|
|
|
|
1. The enduser must be able to enable an accessibility-mode (which
|
|
|
|
|
|
persists across application/webpage restarts)
|
|
|
|
|
|
2. Accessibility-mode must contain a text-input for the user to
|
|
|
|
|
|
enter text
|
2025-09-19 19:19:37 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 19:53:30 +02:00
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 23]
|
2025-09-19 19:19:37 +02:00
|
|
|
|
|
|
|
|
|
|
Internet-Draft XR Fragments September 2025
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 19:53:30 +02:00
|
|
|
|
3. Accessibility-mode must contain a flexible textlog for the user
|
|
|
|
|
|
to read (via screenreader, screen, or TTS e.g.)
|
|
|
|
|
|
4. the textlog contains aria-descriptions, and its narration
|
|
|
|
|
|
(Screenreader e.g.) can be skipped (via 2-button navigation)
|
2024-06-17 13:58:13 +00:00
|
|
|
|
5. The back command should navigate back to the previous URL (alias
|
2024-04-25 19:26:22 +00:00
|
|
|
|
for browser-backbutton)
|
2024-06-17 13:58:13 +00:00
|
|
|
|
6. The forward command should navigate back to the next URL (alias
|
2024-04-25 19:26:22 +00:00
|
|
|
|
for browser-nextbutton)
|
2025-09-01 17:47:16 +02:00
|
|
|
|
7. A destination is a 3D node containing an href with a #... XR
|
|
|
|
|
|
fragment (which matches a 3d object name)
|
2024-06-17 13:58:13 +00:00
|
|
|
|
8. The go command should list all possible destinations
|
|
|
|
|
|
9. The go left command should move the camera around 0.3 meters to
|
2024-04-25 19:26:22 +00:00
|
|
|
|
the left
|
2024-06-17 13:58:13 +00:00
|
|
|
|
10. The go right command should move the camera around 0.3 meters to
|
2024-04-25 19:26:22 +00:00
|
|
|
|
the right
|
2024-06-17 13:58:13 +00:00
|
|
|
|
11. The go forward command should move the camera 0.3 meters forward
|
2024-04-25 19:26:22 +00:00
|
|
|
|
(direction of current rotation).
|
2024-06-17 13:58:13 +00:00
|
|
|
|
12. The rotate left command should rotate the camera 0.3 to the left
|
|
|
|
|
|
13. The rotate left command should rotate the camera 0.3 to the
|
2024-04-25 19:26:22 +00:00
|
|
|
|
right
|
2025-09-01 17:47:16 +02:00
|
|
|
|
14. The (dynamic) go abc command should navigate to #scene2 in case
|
|
|
|
|
|
there's a 3D node with name abc and href value #scene2
|
2024-06-17 13:58:13 +00:00
|
|
|
|
15. The look command should give an (contextual) 3D-to-text
|
2024-04-25 19:26:22 +00:00
|
|
|
|
transcript, by scanning the aria-description values of the
|
2025-09-01 17:47:16 +02:00
|
|
|
|
current #... (3D object) value (including its children)
|
2024-06-17 13:58:13 +00:00
|
|
|
|
16. The do command should list all possible href values which don't
|
2025-09-01 17:47:16 +02:00
|
|
|
|
contain an #... XR Fragment
|
2024-06-17 13:58:13 +00:00
|
|
|
|
17. The (dynamic) do abc command should navigate/execute
|
2024-04-25 19:26:22 +00:00
|
|
|
|
https://.../... in case a 3D node exist with name abc and href
|
|
|
|
|
|
value https://.../...
|
|
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
18.1. Two-button navigation
|
2024-06-17 05:59:51 +00:00
|
|
|
|
|
2024-06-17 13:58:13 +00:00
|
|
|
|
For specific user-profiles, gyroscope/mouse/keyboard/audio/visuals
|
|
|
|
|
|
will not be available.
|
|
|
|
|
|
Therefore a 2-button navigation-interface is the bare minimum
|
|
|
|
|
|
interface:
|
2024-06-17 05:59:51 +00:00
|
|
|
|
|
2024-06-17 13:58:13 +00:00
|
|
|
|
1. objects with href metadata can be cycled via a key (tab on a
|
|
|
|
|
|
keyboard)
|
|
|
|
|
|
2. objects with href metadata can be activated via a key (enter on a
|
|
|
|
|
|
keyboard)
|
|
|
|
|
|
3. the TTS reads the href-value (and/or aria-description if
|
|
|
|
|
|
available)
|
|
|
|
|
|
|
2024-09-24 16:12:10 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 19:53:30 +02:00
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 24]
|
2025-09-19 19:19:37 +02:00
|
|
|
|
|
|
|
|
|
|
Internet-Draft XR Fragments September 2025
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
18.2. Overlap with fileformat-specific extensions
|
2025-09-19 19:53:30 +02:00
|
|
|
|
|
|
|
|
|
|
Some 3D scene-fileformats have support for extensions. What if the
|
|
|
|
|
|
functionality of those overlap? For example, GLTF has the OMI_LINK
|
|
|
|
|
|
extension which might overlap with XR Fragment's href:
|
|
|
|
|
|
|
|
|
|
|
|
| Priority Order and Precedence, otherwise fallback applies
|
|
|
|
|
|
|
2024-09-25 10:55:11 +02:00
|
|
|
|
1.*Extensions Take Precedence*: Since glTF-specific extensions are
|
2024-09-24 16:12:10 +02:00
|
|
|
|
designed with the format’s specific needs and optimizations in mind,
|
|
|
|
|
|
they should take precedence over extras metadata in cases where both
|
|
|
|
|
|
contain overlapping functionality. This approach aligns with the
|
|
|
|
|
|
idea that extensions are more likely to be interpreted uniformly by
|
|
|
|
|
|
glTF-compatible software.
|
|
|
|
|
|
|
2024-09-25 10:55:11 +02:00
|
|
|
|
2. *Fallback Fall-through Mechanism*: If a glTF implementation does
|
2024-09-25 10:21:27 +02:00
|
|
|
|
not support a particular extension, the (XRF) extras field can
|
|
|
|
|
|
serve as a fallback. This way, metadata provided in extras can
|
|
|
|
|
|
still be useful for applications that don't handle certain
|
|
|
|
|
|
extensions.
|
|
|
|
|
|
|
|
|
|
|
|
| *Example 1* In case of the OMI_LINK glTF extension (href:
|
2025-09-01 17:57:59 +02:00
|
|
|
|
| https://nlnet.nl) and an XR Fragment (href: #otherroom or href:
|
|
|
|
|
|
| otherplanet.glb), it is clear that https://nlnet.nl should open in
|
|
|
|
|
|
| a browsertab, whereas the XR Fragment links should teleport the
|
|
|
|
|
|
| user. If the OMI_LINK contains an XR Fragment (#room1 e.g.) a
|
|
|
|
|
|
| teleport should be performed only (and other [overlapping]
|
2024-09-25 10:21:27 +02:00
|
|
|
|
| metadata should be ignored).
|
|
|
|
|
|
|
|
|
|
|
|
|
| *Example 2* If an Extensions uses XR Fragments in URI's (href:
|
2025-09-01 17:57:59 +02:00
|
|
|
|
| #otherroom or href: xrf://-walls in OMI_LINK e.g.), then perform
|
|
|
|
|
|
| them according to XR Fragment spec (teleport user). But only
|
|
|
|
|
|
| once: ignore further overlapping metadata for that usecase.
|
2024-09-24 16:12:10 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
19. Vendor Prefixes
|
2024-09-20 16:53:07 +02:00
|
|
|
|
|
|
|
|
|
|
Vendor-specific metadata in a 3D scenefiles, are similar to vendor-
|
|
|
|
|
|
specific CSS-prefixes (https://en.wikipedia.org/wiki/
|
|
|
|
|
|
CSS#Vendor_prefixes) (-moz-opacity: 0.2 e.g.). This allows popular
|
|
|
|
|
|
3D engines/frameworks, to initialize specific features when loading a
|
|
|
|
|
|
scene/object, in a progressive enhanced way.
|
|
|
|
|
|
|
2024-10-14 11:52:35 +02:00
|
|
|
|
Vendor Prefixes allows embedding 3D engines/framework-specific
|
|
|
|
|
|
features a 3D file via metadata:
|
|
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 25]
|
2025-09-19 19:19:37 +02:00
|
|
|
|
|
|
|
|
|
|
Internet-Draft XR Fragments September 2025
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-09-20 17:02:24 +02:00
|
|
|
|
+===========+===================+==============================+
|
|
|
|
|
|
| what | XR metadata | Lowest common denominator |
|
|
|
|
|
|
+===========+===================+==============================+
|
|
|
|
|
|
| CSS | vendor-agnostic | 2D canvas + object |
|
|
|
|
|
|
| | | referencing/styling |
|
|
|
|
|
|
+-----------+-------------------+------------------------------+
|
|
|
|
|
|
| XR | vendor-agnostic | 3D camera + object(file) |
|
|
|
|
|
|
| Fragments | | load/embed/click/referencing |
|
|
|
|
|
|
+-----------+-------------------+------------------------------+
|
|
|
|
|
|
| Vendor | vendor-*specific* | Specialized Entity-Component |
|
|
|
|
|
|
| prefixs | | implementation |
|
|
|
|
|
|
+-----------+-------------------+------------------------------+
|
|
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
Table 7
|
2024-09-20 17:02:24 +02:00
|
|
|
|
|
2024-09-24 16:12:10 +02:00
|
|
|
|
| Why? Because not all XR interactions can/should be solved/
|
|
|
|
|
|
| standardized by embedding XR Fragments into any 3D file. The
|
|
|
|
|
|
| lowest common denominator between 3D engines is the 'entity'-part
|
|
|
|
|
|
| of their entity-component-system (ECS). The 'component'-part can
|
|
|
|
|
|
| be progressively enhanced via vendor prefixes.
|
|
|
|
|
|
|
|
|
|
|
|
For example, the following metadata can be added to a .glb file, to
|
|
|
|
|
|
make an object grabbable in AFRAME:
|
|
|
|
|
|
|
2024-09-25 10:21:27 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 26]
|
2024-09-25 10:21:27 +02:00
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
Internet-Draft XR Fragments September 2025
|
2024-09-25 10:21:27 +02:00
|
|
|
|
|
|
|
|
|
|
|
2024-09-20 16:53:07 +02:00
|
|
|
|
+────────────────────────────────────────────────────────────────────────────────────────────────────────+
|
|
|
|
|
|
│ http://y.io/z.glb | AFRAME app │
|
|
|
|
|
|
│-----------------------------------------------+--------------------------------------------------------│
|
|
|
|
|
|
│ | │
|
|
|
|
|
|
│ | after loading the glb, john can be placed into the │
|
|
|
|
|
|
│ +-[3D mesh]-+ | castle via hands, because the author added metadata to │
|
|
|
|
|
|
│ | / \ | | john via either: │
|
|
|
|
|
|
│ | / \ | | │
|
|
|
|
|
|
│ | / \ | | 1. Blender (custom property-box, no plugins needed) │
|
|
|
|
|
|
│ | |_____| | | │
|
|
|
|
|
|
│ +-----│-----+ | 2. javascript-code: │
|
|
|
|
|
|
│ │ | │
|
|
|
|
|
|
│ ├─ name: castle | for( var com in this.el.components ){ │
|
|
|
|
|
|
│ └─ tag: house baroque | this.el.object3D.userData[`-AFRAME-${com}`] = '' │
|
|
|
|
|
|
│ | } │
|
|
|
|
|
|
│ [3D mesh-+ | // save to z.glb in AFRAME inspector │
|
|
|
|
|
|
│ | ├─ name: john | │
|
|
|
|
|
|
│ | O ├─ age: 23 | │
|
2024-09-20 17:02:24 +02:00
|
|
|
|
│ | /|\ ├─ -aframe-grabbable: '' | > inits 'grabbable' component on object john │
|
|
|
|
|
|
│ | / \ ├─ -aframe-material.color: '#F0A' | > inits 'material' component on object john │
|
|
|
|
|
|
│ | ├─ -aframe-text.value: '{name}{age}'| > inits 'text' component (*) with value 'john' │
|
|
|
|
|
|
│ | ├─ -three-material.fog: false | > changes material settings in THREE.js app │
|
|
|
|
|
|
│ | ├─ -godot-Label3D.text: '{name}{age}'| > inits 'Label3D' component (*) in Godot │
|
2024-09-20 16:53:07 +02:00
|
|
|
|
│ +--------+ | │
|
|
|
|
|
|
│ | │
|
|
|
|
|
|
├─ -GODOT-version: '4.3' | > exporters/authors can report targeted version │
|
2024-09-24 16:12:10 +02:00
|
|
|
|
├─ -AFRAME-version: '1.6.0' | and (optionally) hint component-repo│
|
|
|
|
|
|
├─ -AFRAME-info: 'https://git.benetou.fr/comps' │
|
2024-09-20 16:53:07 +02:00
|
|
|
|
│ | │
|
|
|
|
|
|
+────────────────────────────────────────────────────────────────────────────────────────────────────────+
|
|
|
|
|
|
|
|
|
|
|
|
* key/value syntax: -<vendorname>-<component|version>.<key>
|
|
|
|
|
|
[string/boolean/float/int]-value
|
|
|
|
|
|
|
|
|
|
|
|
String-templatevalues are evaluated as per URI Templates (RFC6570)
|
|
|
|
|
|
(https://www.rfc-editor.org/rfc/rfc6570) Level 1.
|
|
|
|
|
|
|
2024-09-25 10:21:27 +02:00
|
|
|
|
| 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.
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-09-20 16:53:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-09-25 10:21:27 +02:00
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 27]
|
2024-09-20 16:53:07 +02:00
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
Internet-Draft XR Fragments September 2025
|
2024-09-20 16:53:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
20. Security Considerations
|
2024-02-08 14:05:44 +01:00
|
|
|
|
|
|
|
|
|
|
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).
|
|
|
|
|
|
The use of URI Templates is limited to pre-defined variables and
|
|
|
|
|
|
Level0 fragments-expansion only, which makes it quite safe.
|
2024-09-20 16:53:07 +02:00
|
|
|
|
n fact, it is much safer than relying on a scripting language
|
2024-02-08 14:05:44 +01:00
|
|
|
|
(javascript) which can change URN too.
|
|
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
21. FAQ
|
2023-09-06 15:13:36 +02:00
|
|
|
|
|
2023-09-21 13:05:30 +02:00
|
|
|
|
*Q:* Why is everything HTTP GET-based, what about POST/PUT/DELETE
|
|
|
|
|
|
HATEOS
|
|
|
|
|
|
*A:* Because it's out of scope: XR Fragment specifies a read-only way
|
|
|
|
|
|
to surf XR documents. These things belong in the application layer
|
|
|
|
|
|
(for example, an XR Hypermedia browser can decide to support
|
|
|
|
|
|
POST/PUT/DELETE requests for embedded HTML thru src values)
|
2023-09-01 14:20:02 +02:00
|
|
|
|
|
2024-02-08 14:05:44 +01:00
|
|
|
|
*Q:* Why isn't there support for scripting, URI Template Fragments
|
|
|
|
|
|
are so limited compared to WASM & javascript *A:* This is out of
|
|
|
|
|
|
scope as it unhyperifies hypermedia, and this is up to XR hypermedia
|
|
|
|
|
|
browser-extensions.
|
2023-10-12 17:04:46 +02:00
|
|
|
|
Historically scripting/Javascript seems to been able to turn webpages
|
|
|
|
|
|
from hypermedia documents into its opposite (hyperscripted
|
|
|
|
|
|
nonhypermedia documents).
|
|
|
|
|
|
In order to prevent this backward-movement (hypermedia tends to
|
2024-02-08 14:05:44 +01:00
|
|
|
|
liberate people from finnicky scripting) XR Fragment uses W3C Media
|
|
|
|
|
|
Fragments (https://www.w3.org/TR/media-frags/) and URI Templates
|
|
|
|
|
|
(RFC6570) (https://www.rfc-editor.org/rfc/rfc6570), to prevent
|
|
|
|
|
|
unhyperifying itself by hardcoupling to a particular markup or
|
|
|
|
|
|
scripting language.
|
2023-10-12 17:04:46 +02:00
|
|
|
|
XR Fragments supports filtering objects in a scene only, because in
|
|
|
|
|
|
the history of the javascript-powered web, showing/hiding document-
|
|
|
|
|
|
entities seems to be one of the most popular basic usecases.
|
|
|
|
|
|
Doing advanced scripting & networkrequests under the hood are
|
|
|
|
|
|
obviously interesting endavours, but this is something which should
|
2024-02-08 14:05:44 +01:00
|
|
|
|
not be hardcoupled with XR Fragments or hypermedia.
|
|
|
|
|
|
This perhaps belongs more to browser extensions.
|
2023-10-12 17:04:46 +02:00
|
|
|
|
Non-HTML Hypermedia browsers should make browser extensions the right
|
|
|
|
|
|
place, to 'extend' experiences, in contrast to code/javascript inside
|
|
|
|
|
|
hypermedia documents (this turned out as a hypermedia antipattern).
|
2023-09-21 13:05:30 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
22. authors
|
2024-09-20 16:53:07 +02:00
|
|
|
|
|
2024-09-25 10:21:27 +02:00
|
|
|
|
* Leon van Kammen (@lvk@mastodon.online)
|
|
|
|
|
|
* Jens Finkhäuser (@jens@social.finkhaeuser.de)
|
2024-09-20 16:53:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-09-24 16:12:10 +02:00
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 28]
|
2024-09-25 10:21:27 +02:00
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
Internet-Draft XR Fragments September 2025
|
2024-09-25 10:21:27 +02:00
|
|
|
|
|
2024-09-24 16:12:10 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
23. IANA Considerations
|
2023-09-08 17:01:14 +02:00
|
|
|
|
|
2024-06-17 05:59:51 +00:00
|
|
|
|
This document has no IANA actions.
|
2023-09-08 17:01:14 +02:00
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
24. Acknowledgments
|
2023-09-08 17:01:14 +02:00
|
|
|
|
|
2024-06-17 05:59:51 +00:00
|
|
|
|
* NLNET (https://nlnet.nl)
|
|
|
|
|
|
* Future of Text (https://futureoftext.org)
|
2023-09-07 15:53:32 +02:00
|
|
|
|
* visual-meta.info (https://visual-meta.info)
|
2023-12-06 16:40:55 +01:00
|
|
|
|
* Michiel Leenaars
|
|
|
|
|
|
* Gerben van der Broeke
|
|
|
|
|
|
* Mauve
|
2024-07-12 15:12:40 +02:00
|
|
|
|
* Jens Finkhäuser
|
2023-12-06 16:40:55 +01:00
|
|
|
|
* Marc Belmont
|
|
|
|
|
|
* Tim Gerritsen
|
|
|
|
|
|
* Frode Hegland
|
|
|
|
|
|
* Brandel Zackernuk
|
|
|
|
|
|
* Mark Anderson
|
|
|
|
|
|
|
2025-09-19 20:00:50 +02:00
|
|
|
|
25. Appendix: Definitions
|
2023-09-21 13:05:30 +02:00
|
|
|
|
|
2024-01-30 09:58:00 +00:00
|
|
|
|
+=================+=============================================+
|
|
|
|
|
|
| definition | explanation |
|
|
|
|
|
|
+=================+=============================================+
|
|
|
|
|
|
| human | a sentient being who thinks fuzzy, absorbs, |
|
|
|
|
|
|
| | and shares thought (by plain text, not |
|
|
|
|
|
|
| | markuplanguage) |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| scene | a (local/remote) 3D scene or 3D file |
|
|
|
|
|
|
| | (index.gltf e.g.) |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| 3D object | an object inside a scene characterized by |
|
|
|
|
|
|
| | vertex-, face- and customproperty data. |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| URI | some resource at something somewhere via |
|
|
|
|
|
|
| | someprotocol (http://me.com/foo.glb#foo or |
|
|
|
|
|
|
| | e76f8efec8efce98e6f see interpeer.io |
|
|
|
|
|
|
| | (https://interpeer.io)) |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| URL | something somewhere via someprotocol |
|
|
|
|
|
|
| | (http://me.com/foo.glb) |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
2024-02-08 14:05:44 +01:00
|
|
|
|
| URN | something at some domain (me.com/foo.glb) |
|
2024-09-25 10:21:27 +02:00
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| metadata | custom properties of text, 3D Scene or |
|
|
|
|
|
|
| | Object(nodes), relevant to machines and a |
|
|
|
|
|
|
| | human minority (academics/developers) |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
2024-09-20 16:53:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 29]
|
2024-09-20 16:53:07 +02:00
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
Internet-Draft XR Fragments September 2025
|
2024-09-20 16:53:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
| XR fragment | URI Fragment with spatial hints (which |
|
|
|
|
|
|
| | match the name of a 3D object-, camera-, |
|
|
|
|
|
|
| | animation-object) |
|
2024-01-30 09:58:00 +00:00
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| the XRWG | wordgraph (collapses 3D scene to tags) |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| the hashbus | hashtags map to camera/scene-projections |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| spacetime | positions camera, triggers scene-preset/ |
|
|
|
|
|
|
| hashtags | time |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| teleportation | repositioning the enduser to a different |
|
|
|
|
|
|
| | position (or 3D scene/file) |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| sourceportation | teleporting the enduser to the original XR |
|
|
|
|
|
|
| | Document of an src embedded object. |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| placeholder | a 3D object which with src-metadata (which |
|
|
|
|
|
|
| object | will be replaced by the src-data.) |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| src | (HTML-piggybacked) metadata of a 3D object |
|
|
|
|
|
|
| | which instances content |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| href | (HTML-piggybacked) metadata of a 3D object |
|
|
|
|
|
|
| | which links to content |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| filter | URI Fragment(s) which show/hide object(s) |
|
|
|
|
|
|
| | in a scene based on name/tag/property |
|
|
|
|
|
|
| | (#cube&-price=>3) |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| visual-meta | visual-meta (https://visual.meta.info) data |
|
|
|
|
|
|
| | appended to text/books/papers which is |
|
|
|
|
|
|
| | indirectly visible/editable in XR. |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| requestless | metadata which never spawns new requests |
|
|
|
|
|
|
| metadata | (unlike RDF/HTML, which can cause |
|
|
|
|
|
|
| | framerate-dropping, hence not used a lot in |
|
|
|
|
|
|
| | games) |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| FPS | frames per second in spatial experiences |
|
|
|
|
|
|
| | (games,VR,AR e.g.), should be as high as |
|
|
|
|
|
|
| | possible |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| introspective | inward sensemaking ("I feel this belongs to |
|
2024-09-25 10:21:27 +02:00
|
|
|
|
| | that") |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| extrospective | outward sensemaking ("I'm fairly sure John |
|
|
|
|
|
|
| | is a person who lives in oklahoma") |
|
2024-09-20 16:53:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 30]
|
2024-09-20 16:53:07 +02:00
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
Internet-Draft XR Fragments September 2025
|
2024-09-20 16:53:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
2025-09-01 17:47:16 +02:00
|
|
|
|
+-----------------+---------------------------------------------+
|
2024-07-12 15:12:40 +02:00
|
|
|
|
| ◻ | ascii representation of an 3D object/mesh |
|
2024-01-30 09:58:00 +00:00
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| (un)obtrusive | obtrusive: wrapping human text/thought in |
|
|
|
|
|
|
| | XML/HTML/JSON obfuscates human text into a |
|
|
|
|
|
|
| | salad of machine-symbols and words |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| flat 3D object | a 3D object of which all verticies share a |
|
|
|
|
|
|
| | plane |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| BibTeX | simple tagging/citing/referencing standard |
|
|
|
|
|
|
| | for plaintext |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| BibTag | a BibTeX tag |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
|
|
|
|
|
| (hashtag)bibs | an easy to speak/type/scan tagging SDL (see |
|
|
|
|
|
|
| | here (https://github.com/coderofsalvation/ |
|
|
|
|
|
|
| | hashtagbibs) which expands to BibTex/JSON/ |
|
|
|
|
|
|
| | XML |
|
|
|
|
|
|
+-----------------+---------------------------------------------+
|
2023-09-21 13:05:30 +02:00
|
|
|
|
|
2025-09-19 19:19:37 +02:00
|
|
|
|
Table 8
|
2024-09-20 16:53:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-06 16:40:55 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-02-08 14:05:44 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-09-25 10:21:27 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 10:46:23 +02:00
|
|
|
|
van Kammen Expires 24 March 2026 [Page 31]
|