added default spawn-location
This commit is contained in:
parent
62dde2e538
commit
864a81d491
2 changed files with 112 additions and 6 deletions
|
|
@ -146,6 +146,7 @@ XR Fragments allows us to better use implicit metadata inside 3D scene(files), b
|
||||||
1. [Accessibility interface](#accessibility-interface)
|
1. [Accessibility interface](#accessibility-interface)
|
||||||
1. [Two-button navigation](#two-button-navigation)
|
1. [Two-button navigation](#two-button-navigation)
|
||||||
1. [Overlap with fileformat-specific extensions](#overlap-with-fileformat-specific-extensions)
|
1. [Overlap with fileformat-specific extensions](#overlap-with-fileformat-specific-extensions)
|
||||||
|
1. [XRF microformat](#XRF-microformat)
|
||||||
1. [Vendor Prefixes](#vendor-prefixes)
|
1. [Vendor Prefixes](#vendor-prefixes)
|
||||||
1. [Security Considerations](#security-considerations)
|
1. [Security Considerations](#security-considerations)
|
||||||
1. [FAQ](#faq)
|
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)
|
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)
|
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/) :
|
||||||
|
|
||||||
|
```
|
||||||
|
<link rel="alternate" as="spatial-entrypoint" href="scene.xrf.glb">
|
||||||
|
```
|
||||||
|
|
||||||
|
This way the application loads `https://nlnet.nl/scene.xrf.glb` when the user types `nlnet.nl` into the URLbar.<br>
|
||||||
|
Optionally, `type` can be specified for dynamically generated 3D files:
|
||||||
|
|
||||||
|
```
|
||||||
|
<link rel="alternate" as="spatial-entrypoint" href="https://worlds.org/scene.php#platformB" type="model/gltf+binary" />
|
||||||
|
```
|
||||||
|
|
||||||
|
The `type`-attribute is for fallback-purposes.<br>
|
||||||
|
Viewer-supported 3D file-extensions (`.glb` e.g.) will **ALWAYS** take precedence over the (non)presence of the `type` attribute.<br>
|
||||||
|
The reason is that platforms (Mastodon 'labels' e.g.) don't allow specifying type-attributes.<br>
|
||||||
|
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 `<link rel="me"`, only the first (supported 3D filetype) will be chosen.
|
||||||
|
|
||||||
|
Example of multiple spatial microformats:
|
||||||
|
|
||||||
|
```
|
||||||
|
<link rel="alternate" as="spatial-entrypoint" href="scene.xrf.glb"/>
|
||||||
|
<link rel="me" href="myavatar.vrm"/>
|
||||||
|
<!-- JanusXR microformat https://github.com/jbaicoianu/janusweb
|
||||||
|
<FireBoxRoom>
|
||||||
|
<Assets>
|
||||||
|
<assetobject id="experience" src="scene.xrf.glb"/>
|
||||||
|
</Assets>
|
||||||
|
<Room>
|
||||||
|
<object pos="0 0 0" collision_id="experience" id="experience" />
|
||||||
|
</Room>
|
||||||
|
</FireBoxRoom>
|
||||||
|
-->
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 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
|
## Overlap with fileformat-specific extensions
|
||||||
|
|
||||||
Some 3D scene-fileformats have support for extensions.
|
Some 3D scene-fileformats have support for extensions.
|
||||||
|
|
|
||||||
12
index.html
12
index.html
File diff suppressed because one or more lines are too long
Loading…
Add table
Reference in a new issue