From 746762e0a8cb121d8efe8e94fc16a65d28a832ff Mon Sep 17 00:00:00 2001
From: Leon van Kammen
Date: Sat, 20 Sep 2025 10:46:23 +0200
Subject: [PATCH] finetune docs + spec
---
doc/RFC_XR_Fragments.html | 29 +++--
doc/RFC_XR_Fragments.md | 23 ++--
doc/RFC_XR_Fragments.txt | 232 +++++++++++++++++++-------------------
doc/RFC_XR_Fragments.xml | 24 ++--
index.html | 27 +++--
5 files changed, 176 insertions(+), 159 deletions(-)
diff --git a/doc/RFC_XR_Fragments.html b/doc/RFC_XR_Fragments.html
index d804fdb..fd10359 100644
--- a/doc/RFC_XR_Fragments.html
+++ b/doc/RFC_XR_Fragments.html
@@ -413,7 +413,18 @@ For example, to render a portal with a preview-version of the scene, create an 3
-These are optional auto-loaded side-car files to enable hasslefree XR Movies.
+
Compatible 3D fileformats: glTF, usdz, obj, collada, THREE.json, X3D e.g.
+
+
+A 3D scene-file can be considered XR Fragment-compatible 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
+
+
+There are optional auto-loaded side-car files to enable hasslefree XR Movies.
they can accomodate developers or applications who (for whatever reason) must not modify the 3D scene-file (a .glb e.g.).
@@ -490,11 +501,10 @@ This can be done via (objectname/metadata) key/value-pairs in a JSON {
- "/":
- "aria-description": "description of scene",
- },
+ "aria-description": "description of scene",
"button": {
- "href": "#roomB"
+ "href": "#roomB",
+ "aria-description": "description of room"
}
}
@@ -696,16 +706,11 @@ XR Fragments Level3 makes the 3D timeline, as well as URL-referenced files controls the animation(s) of the scene (or src resource which contains a timeline)
| fragment | type | functionality |
-| #t=start,stop | [vector2] | start,stop (in seconds |
+| #t=start,stop | [vector2] | start,stop (in seconds |
| Example Value | Explanation |
| #t=1 | play (3D) animations from 1 seconds till end (and stop) |
-| #t=1,100 | play (3D) animations from 1 till 100 seconds (and stop) |
-| #t=0,0 | stop (3D) animations at frame 0 |
-
-
-Use [[#s π±]] to control playback speed
-
+| #t=1,100 | play (3D) animations from 1 till 100 seconds (and stop) |
Specify playback loopmode
diff --git a/doc/RFC_XR_Fragments.md b/doc/RFC_XR_Fragments.md
index 0050a88..a5f8960 100644
--- a/doc/RFC_XR_Fragments.md
+++ b/doc/RFC_XR_Fragments.md
@@ -292,7 +292,16 @@ For example, to render a portal with a preview-version of the scene, create an 3
(!Level0: Files )
(!Level0: Files)
-These are **optional** auto-loaded [side-car files]() to enable hasslefree [XR Movies](#XR%20Movies).
+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 XR Fragment-compatible 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
+
+There are **optional** auto-loaded [side-car files]() to enable hasslefree [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.).
## via href metadata
@@ -363,11 +372,10 @@ This can be done via (objectname/metadata) key/value-pairs in a JSON [sidecar-fi
```json
{
- "/":
- "aria-description": "description of scene",
- },
+ "aria-description": "description of scene",
"button": {
- "href": "#roomB"
+ "href": "#roomB",
+ "aria-description": "description of room"
}
}
```
@@ -512,15 +520,12 @@ XR Fragments Level3 makes the 3D timeline, as well as URL-referenced files **con
controls the animation(s) of the scene (or `src` resource which contains a timeline)
| fragment | type | functionality |
-| #t=start,stop | [[vector2]] (default:`#t=0,0`) | start,stop (in seconds |
+| #t=start,stop | [[vector2]] (default:`#t=0`) | start,stop (in seconds |
| Example Value | Explanation |
| `#t=1` | play (3D) animations from 1 seconds till end (and stop) |
| `#t=1,100` | play (3D) animations from 1 till 100 seconds (and stop) |
-| `#t=0,0` | stop (3D) animations at frame 0 |
-
-> Use [[#s π±]] to control playback speed
## Specify playback loopmode
diff --git a/doc/RFC_XR_Fragments.txt b/doc/RFC_XR_Fragments.txt
index 8ef464f..174427c 100644
--- a/doc/RFC_XR_Fragments.txt
+++ b/doc/RFC_XR_Fragments.txt
@@ -3,7 +3,7 @@
Jens & Leon Internet Engineering Task Force L.R. van Kammen
-Internet-Draft 19 September 2025
+Internet-Draft 20 September 2025
Intended status: Informational
@@ -42,7 +42,7 @@ Status of This Memo
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
- This Internet-Draft will expire on 23 March 2026.
+ This Internet-Draft will expire on 24 March 2026.
Copyright Notice
@@ -53,7 +53,7 @@ Copyright Notice
-van Kammen Expires 23 March 2026 [Page 1]
+van Kammen Expires 24 March 2026 [Page 1]
Internet-Draft XR Fragments September 2025
@@ -78,11 +78,11 @@ Table of Contents
6.1. XR Fragment URL Grammar . . . . . . . . . . . . . . . . . 8
7. Spatial Referencing 3D . . . . . . . . . . . . . . . . . . . 8
8. Level0: Files . . . . . . . . . . . . . . . . . . . . . . . . 9
- 8.1. via href metadata . . . . . . . . . . . . . . . . . . . . 9
+ 8.1. via href metadata . . . . . . . . . . . . . . . . . . . . 10
8.2. via chained extension . . . . . . . . . . . . . . . . . . 10
8.3. via subdocuments/xattr . . . . . . . . . . . . . . . . . 10
8.4. JSON sidecar-file . . . . . . . . . . . . . . . . . . . . 11
- 9. Level1: URI . . . . . . . . . . . . . . . . . . . . . . . . . 11
+ 9. Level1: URI . . . . . . . . . . . . . . . . . . . . . . . . . 12
9.1. List of URI Fragments . . . . . . . . . . . . . . . . . . 13
9.2. List of *_explicit_ metadata . . . . . . . . . . . . . . 14
10. Level2: href links . . . . . . . . . . . . . . . . . . . . . 14
@@ -109,7 +109,7 @@ Table of Contents
-van Kammen Expires 23 March 2026 [Page 2]
+van Kammen Expires 24 March 2026 [Page 2]
Internet-Draft XR Fragments September 2025
@@ -165,7 +165,7 @@ Internet-Draft XR Fragments September 2025
-van Kammen Expires 23 March 2026 [Page 3]
+van Kammen Expires 24 March 2026 [Page 3]
Internet-Draft XR Fragments September 2025
@@ -221,7 +221,7 @@ Internet-Draft XR Fragments September 2025
-van Kammen Expires 23 March 2026 [Page 4]
+van Kammen Expires 24 March 2026 [Page 4]
Internet-Draft XR Fragments September 2025
@@ -277,7 +277,7 @@ Internet-Draft XR Fragments September 2025
-van Kammen Expires 23 March 2026 [Page 5]
+van Kammen Expires 24 March 2026 [Page 5]
Internet-Draft XR Fragments September 2025
@@ -333,7 +333,7 @@ Internet-Draft XR Fragments September 2025
-van Kammen Expires 23 March 2026 [Page 6]
+van Kammen Expires 24 March 2026 [Page 6]
Internet-Draft XR Fragments September 2025
@@ -389,7 +389,7 @@ Internet-Draft XR Fragments September 2025
-van Kammen Expires 23 March 2026 [Page 7]
+van Kammen Expires 24 March 2026 [Page 7]
Internet-Draft XR Fragments September 2025
@@ -445,7 +445,7 @@ Internet-Draft XR Fragments September 2025
-van Kammen Expires 23 March 2026 [Page 8]
+van Kammen Expires 24 March 2026 [Page 8]
Internet-Draft XR Fragments September 2025
@@ -483,7 +483,30 @@ Internet-Draft XR Fragments September 2025
8. Level0: Files
- These are *optional* auto-loaded side-car files to enable hasslefree
+ 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 XR Fragment-compatible 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
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.).
@@ -498,14 +521,6 @@ Internet-Draft XR Fragments September 2025
*heuristics*:
-
-
-
-van Kammen Expires 23 March 2026 [Page 9]
-
-Internet-Draft XR Fragments September 2025
-
-
* 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)
@@ -535,6 +550,18 @@ Internet-Draft XR Fragments September 2025
| NOTE: in the examples below we use the href-heuristic, but also
| the .xrf. chained-extension applies here.
+
+
+
+
+
+
+
+van Kammen Expires 24 March 2026 [Page 10]
+
+Internet-Draft XR Fragments September 2025
+
+
myspreadsheet.ods
βββ explainer.glb <--- 'href' extra [heuristic] detected inside!
βββ explainer.ogg (soundtrack to play when global 3D animation starts)
@@ -554,14 +581,6 @@ myspreadsheet.ods
| (https://www.lesbonscomptes.com/pxattr/index.html) for lowlevel
| access.
-
-
-
-van Kammen Expires 23 March 2026 [Page 10]
-
-Internet-Draft XR Fragments September 2025
-
-
8.4. JSON sidecar-file
For developers, sidecar-file can allow for defining *explicit* XR
@@ -573,11 +592,10 @@ Internet-Draft XR Fragments September 2025
* experience.json <----
{
- "/":
- "aria-description": "description of scene",
- },
+ "aria-description": "description of scene",
"button": {
- "href": "#roomB"
+ "href": "#roomB",
+ "aria-description": "description of room"
}
}
@@ -592,6 +610,14 @@ Internet-Draft XR Fragments September 2025
| In THREE.js-code this would boil down to:
+
+
+
+van Kammen Expires 24 March 2026 [Page 11]
+
+Internet-Draft XR Fragments September 2025
+
+
scene.userData['aria-description'] = "description of scene"
scene.getObjectByName("button").userData.href = "#roomB"
@@ -608,16 +634,6 @@ Internet-Draft XR Fragments September 2025
(publishing thru a game-editor e.g.), XR Fragments *integrates all*
which allows a universal viewing experience.
-
-
-
-
-
-van Kammen Expires 23 March 2026 [Page 11]
-
-Internet-Draft XR Fragments September 2025
-
-
+βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ+
β β
β U R N β
@@ -653,23 +669,7 @@ Internet-Draft XR Fragments September 2025
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-van Kammen Expires 23 March 2026 [Page 12]
+van Kammen Expires 24 March 2026 [Page 12]
Internet-Draft XR Fragments September 2025
@@ -725,7 +725,7 @@ Internet-Draft XR Fragments September 2025
-van Kammen Expires 23 March 2026 [Page 13]
+van Kammen Expires 24 March 2026 [Page 13]
Internet-Draft XR Fragments September 2025
@@ -781,7 +781,7 @@ Internet-Draft XR Fragments September 2025
-van Kammen Expires 23 March 2026 [Page 14]
+van Kammen Expires 24 March 2026 [Page 14]
Internet-Draft XR Fragments September 2025
@@ -819,33 +819,29 @@ Internet-Draft XR Fragments September 2025
contains a timeline)
| fragment | type | functionality | | #t=start,stop |
- [vector2] (default:`#t=0,0`) | start,stop (in seconds |
+ [vector2] (default:`#t=0`) | start,stop (in seconds |
| Example Value | Explanation | | #t=1 | play (3D) animations from 1
seconds till end (and stop) | | #t=1,100 | play (3D) animations from
- 1 till 100 seconds (and stop) | | #t=0,0 | stop (3D) animations at
- frame 0 |
-
- | Use [[#s π±]] to control playback speed
+ 1 till 100 seconds (and stop) |
11.2. Specify playback loopmode
This compensates a missing element from Media Fragments to enable/
disable temporal looping. .
-
-
-
-
-van Kammen Expires 23 March 2026 [Page 15]
-
-Internet-Draft XR Fragments September 2025
-
-
| fragment | type | functionality | | #loop | string | enables
animation/video/audio loop | | #-loop | string | disables
animation/video/audio loop |
+
+
+
+van Kammen Expires 24 March 2026 [Page 15]
+
+Internet-Draft XR Fragments September 2025
+
+
11.3. Controlling embedded content
use [[URI Templates]] to control embedded media, for example a simple
@@ -888,21 +884,20 @@ Internet-Draft XR Fragments September 2025
[img[objecteleport.png]]
-
-
-
-
-
-van Kammen Expires 23 March 2026 [Page 16]
-
-Internet-Draft XR Fragments September 2025
-
-
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
+
+
+
+
+van Kammen Expires 24 March 2026 [Page 16]
+
+Internet-Draft XR Fragments September 2025
+
+
#!menu
@@ -944,21 +939,21 @@ Internet-Draft XR Fragments September 2025
5. hide the *instanced object* when clicked again (toggle
visibility)
-
-
-
-
-
-van Kammen Expires 23 March 2026 [Page 17]
-
-Internet-Draft XR Fragments September 2025
-
-
| *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).
+
+
+
+
+
+van Kammen Expires 24 March 2026 [Page 17]
+
+Internet-Draft XR Fragments September 2025
+
+
*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
@@ -1003,16 +998,18 @@ Internet-Draft XR Fragments September 2025
* href: xrf://#|bar
+ | *NOTE*: sharing is limited to (internal objects) via xrf: scheme-
+ | only
-van Kammen Expires 23 March 2026 [Page 18]
+
+
+
+van Kammen Expires 24 March 2026 [Page 18]
Internet-Draft XR Fragments September 2025
- | *NOTE*: sharing is limited to (internal objects) via xrf: scheme-
- | only
-
12.5. xrf:// URI scheme
Prefixing the xrf: to href (#href)-values *will prevent* level2
@@ -1057,18 +1054,18 @@ Internet-Draft XR Fragments September 2025
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]]))
+ 3. IF a camera-object exists with name cam assume that user(camera)
+ position
-van Kammen Expires 23 March 2026 [Page 19]
+
+van Kammen Expires 24 March 2026 [Page 19]
Internet-Draft XR Fragments September 2025
- 3. IF a camera-object exists with name cam assume that user(camera)
- position
-
14.1. UX
End-users should always have read/write access to:
@@ -1117,7 +1114,10 @@ Internet-Draft XR Fragments September 2025
-van Kammen Expires 23 March 2026 [Page 20]
+
+
+
+van Kammen Expires 24 March 2026 [Page 20]
Internet-Draft XR Fragments September 2025
@@ -1173,7 +1173,7 @@ Internet-Draft XR Fragments September 2025
-van Kammen Expires 23 March 2026 [Page 21]
+van Kammen Expires 24 March 2026 [Page 21]
Internet-Draft XR Fragments September 2025
@@ -1229,7 +1229,7 @@ Internet-Draft XR Fragments September 2025
-van Kammen Expires 23 March 2026 [Page 22]
+van Kammen Expires 24 March 2026 [Page 22]
Internet-Draft XR Fragments September 2025
@@ -1285,7 +1285,7 @@ Internet-Draft XR Fragments September 2025
-van Kammen Expires 23 March 2026 [Page 23]
+van Kammen Expires 24 March 2026 [Page 23]
Internet-Draft XR Fragments September 2025
@@ -1341,7 +1341,7 @@ Internet-Draft XR Fragments September 2025
-van Kammen Expires 23 March 2026 [Page 24]
+van Kammen Expires 24 March 2026 [Page 24]
Internet-Draft XR Fragments September 2025
@@ -1397,7 +1397,7 @@ Internet-Draft XR Fragments September 2025
-van Kammen Expires 23 March 2026 [Page 25]
+van Kammen Expires 24 March 2026 [Page 25]
Internet-Draft XR Fragments September 2025
@@ -1453,7 +1453,7 @@ Internet-Draft XR Fragments September 2025
-van Kammen Expires 23 March 2026 [Page 26]
+van Kammen Expires 24 March 2026 [Page 26]
Internet-Draft XR Fragments September 2025
@@ -1509,7 +1509,7 @@ Internet-Draft XR Fragments September 2025
-van Kammen Expires 23 March 2026 [Page 27]
+van Kammen Expires 24 March 2026 [Page 27]
Internet-Draft XR Fragments September 2025
@@ -1565,7 +1565,7 @@ Internet-Draft XR Fragments September 2025
-van Kammen Expires 23 March 2026 [Page 28]
+van Kammen Expires 24 March 2026 [Page 28]
Internet-Draft XR Fragments September 2025
@@ -1621,7 +1621,7 @@ Internet-Draft XR Fragments September 2025
-van Kammen Expires 23 March 2026 [Page 29]
+van Kammen Expires 24 March 2026 [Page 29]
Internet-Draft XR Fragments September 2025
@@ -1677,7 +1677,7 @@ Internet-Draft XR Fragments September 2025
-van Kammen Expires 23 March 2026 [Page 30]
+van Kammen Expires 24 March 2026 [Page 30]
Internet-Draft XR Fragments September 2025
@@ -1733,4 +1733,4 @@ Internet-Draft XR Fragments September 2025
-van Kammen Expires 23 March 2026 [Page 31]
+van Kammen Expires 24 March 2026 [Page 31]
diff --git a/doc/RFC_XR_Fragments.xml b/doc/RFC_XR_Fragments.xml
index f4bfa33..ca4babf 100644
--- a/doc/RFC_XR_Fragments.xml
+++ b/doc/RFC_XR_Fragments.xml
@@ -307,7 +307,14 @@ For example, to render a portal with a preview-version of the scene, create an 3
Level0: Files
-These are optional auto-loaded side-car files to enable hasslefree XR Movies.
+Compatible 3D fileformats: glTF, usdz, obj, collada, THREE.json, 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
+
There are optional auto-loaded side-car files to enable hasslefree XR Movies.
they can accomodate developers or applications who (for whatever reason) must not modify the 3D scene-file (a .glb e.g.).
@@ -379,11 +386,10 @@ This can be done via (objectname/metadata) key/value-pairs in a JSON
@@ -561,13 +567,11 @@ XR Fragments Level3 makes the 3D timeline, as well as URL-referenced files Animation(s) timeline
controls the animation(s) of the scene (or src resource which contains a timeline)
| fragment | type | functionality |
-| <b>#t</b>=start,stop | [vector2] | start,stop (in seconds |
+| <b>#t</b>=start,stop | [vector2] | start,stop (in seconds |
| Example Value | Explanation |
| #t=1 | play (3D) animations from 1 seconds till end (and stop) |
-| #t=1,100 | play (3D) animations from 1 till 100 seconds (and stop) |
-| #t=0,0 | stop (3D) animations at frame 0 |
-Use [[#s π±]] to control playback speed
-
+| #t=1,100 | play (3D) animations from 1 till 100 seconds (and stop) |
+
Specify playback loopmode
This compensates a missing element from Media Fragments to enable/disable temporal looping. .
diff --git a/index.html b/index.html
index 8d8f262..4b65c61 100644
--- a/index.html
+++ b/index.html
@@ -470,6 +470,8 @@ button.sidebar-toggle{
π XR fragments
+πlevel5: engine prefixes
+
π URL
π₯ Remotestorage
@@ -1005,26 +1007,27 @@ button.sidebar-toggle{