From 864a81d4915690bcfcc6380978fcfea83c55bfe8 Mon Sep 17 00:00:00 2001 From: Leon van Kammen Date: Thu, 13 Nov 2025 16:16:59 +0100 Subject: [PATCH] added default spawn-location --- doc/RFC_XR_Fragments.md | 106 ++++++++++++++++++++++++++++++++++++++++ index.html | 12 ++--- 2 files changed, 112 insertions(+), 6 deletions(-) diff --git a/doc/RFC_XR_Fragments.md b/doc/RFC_XR_Fragments.md index 9b72c22..d2b5b7e 100644 --- a/doc/RFC_XR_Fragments.md +++ b/doc/RFC_XR_Fragments.md @@ -146,6 +146,7 @@ XR Fragments allows us to better use implicit metadata inside 3D scene(files), b 1. [Accessibility interface](#accessibility-interface) 1. [Two-button navigation](#two-button-navigation) 1. [Overlap with fileformat-specific extensions](#overlap-with-fileformat-specific-extensions) +1. [XRF microformat](#XRF-microformat) 1. [Vendor Prefixes](#vendor-prefixes) 1. [Security Considerations](#security-considerations) 1. [FAQ](#faq) @@ -869,6 +870,111 @@ Therefore a 2-button navigation-interface is the bare minimum interface: 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) +## XRF microformat + +How can applications discover 3D experiences on a network? + +> Answer: **spatial microformats** + +The XRF microformat is an [optional](#Progressive%20enhancement) text heuristics which applications can detect across various usecases. + +#### via HTML webpage + +If the browser/application requests an webpage (`https://nlnet.nl` e.g.) it should check for the [rel-me microformat](https://gmpg.org/xfn/) : + +``` + +``` + +This way the application loads `https://nlnet.nl/scene.xrf.glb` when the user types `nlnet.nl` into the URLbar.
+Optionally, `type` can be specified for dynamically generated 3D files: + +``` + +``` + +The `type`-attribute is for fallback-purposes.
+Viewer-supported 3D file-extensions (`.glb` e.g.) will **ALWAYS** take precedence over the (non)presence of the `type` attribute.
+The reason is that platforms (Mastodon 'labels' e.g.) don't allow specifying type-attributes.
+Another reason is that XR Fragments is filetype-agnostic, so flexibility is expected on the viewer-side. + +> NOTE: in case of multiple 3D files mentioned in ` + + +``` + +#### via WebFinger + +When John has an account on foo.com, how can other applications request his 3D homepage by simply entering `john@foo.com`? + +> Answer: it can be requested at `https://foo.com/.well-known/webfinger?resource=acct:john@foo.com`, resulting in: + +``` +{ + "subject": "acct:john@foo.com", + "aliases": [ + "https://mastodon.example/social/john", + "https://john.foo.com", + "https://3d.john.foo.com/model/scene.glb" + ], + "properties": { + "http://schema.org/name": "John Doe", + "http://schema.org/description": "Developer, 3D Enthusiast, and Social Explorer" + }, + "links": [ + { + "rel": "http://ostatus.org/schema/1.0/subscribe", + "template": "https://mastodon.example/social/john/{uri}" + }, + { + "rel": "self", + "type": "text/html", + "href": "https://john.foo.com" + }, + { + "rel": "me", + "type": "text/html", + "href": "https://john.foo.com" + }, + { + "rel": "me", + "type": "model/gltf+binary", + "href": "https://3d.john.foo.com/model/avatar.vrm" + }, + { + "rel": "scene", + "type": "model/gltf+binary", + "href": "https://3d.john.foo.com/model/scene.xrf.glb" + } + ] +} +``` + +This way the application will load `https://3d.john.foo.com/model/scene.glb` when the user types `john@foo.com` into the user field. + +#### via Text (URI) + +Another way for an application to trigger loading a 3D scene is by detecting URI's of 3D scene-files any text: + +* `foo.glb` (or any other popular 3D extension) +* `https://foo.com/scene.glb` (or any other popular protocol) + +This way, the application can highlight the link whenever it detects the URI (in a text-file or text-section of a 3D model) + ## Overlap with fileformat-specific extensions Some 3D scene-fileformats have support for extensions. diff --git a/index.html b/index.html index 7dc97d2..2a23d7a 100644 --- a/index.html +++ b/index.html @@ -83,7 +83,7 @@ A cute standard for (deep)linking 3D files via URI's. var DOMReady = function(a,b,c){b=document,c='addEventListener';b[c]?b[c]('DOMContentLoaded',a):window.attachEvent('onload',a)} - +