stream: IETF area: Internet status: informational author: Leon van Kammen date: 2023-04-12T00:00:00Z workgroup: Internet Engineering Task Force value: draft-XRMACROS-leonvankammen-00
This draft offers a specification for embedding macros in existing 3D scenes/assets, to offer simple interactions and configure the renderer further.
Together with URI Fragments, it allows for rich immersive experiences without the need of a complicated sandboxed scripting languages.
Almost every idea in this document is demonstrated at https://xrfragment.org, as this spec was created during the XR Fragments spec.
How can we add more features to existing text & 3D scenes, without introducing new dataformats?
Historically, there’s many attempts to create the ultimate markuplanguage or 3D fileformat.
Their lowest common denominator is: (co)authoring using plain text.
Therefore, XR Macros allows us to enrich/connect existing dataformats, by offering a polyglot notation based on existing notations:
NOTE: The chapters in this document are ordered from highlevel to lowlevel (technical) as much as possible
See appendix below in case certain terms are not clear.
(XR) Macros can be embedded in 3D assets/scenes.
Macros enrich existing spatial content with a lowcode, limited logic-layer, by recursive (economic) use of the querystring syntax (which search engines and XR Fragments already uses.
This is done by allowing string/integer variables, and the |
symbol to roundrobin variable values.
Macros also act as events, so more serious scripting languages can react to them as well.
custom property | value | trigger when |
---|---|---|
!clickme | bg=1,1,1&foo=2 | object clicked |
custom property | value | trigger when |
---|---|---|
# | foo=1 | scene |
!clickme | q=foo>2&bg=1,1,1 | object clicked and foo > 2 |
when a user clicks an object with the custom properties above, it should set the backgroundcolor to
1,1,1
whenfoo
is greater than2
(see previous example)
custom property | value | trigger when |
---|---|---|
!clickme | day|noon|night | object clicked |
day | bg=1,1,1 | roundrobin |
noon | bg=0.5,0.5,0.5 | roundrobin |
night | bg=0,0,0&foo=2 | roundrobin |
when a user clicks an object with the custom properties above, it should trigger either
day
noon
ornight
in roundrobin fashion.
custom property | value | trigger when |
---|---|---|
# | random | scene loaded |
#random | random | URL contains #random |
!random | day|noon|night | #random, # or click |
day | bg=1,1,1 | roundrobin |
noon | bg=0.5,0.5,0.5 | roundrobin |
night | bg=0,0,0&foo=2 | roundrobin |
custom property | value | trigger when |
---|---|---|
!random | day | noon |
!day | bg=1,1,1 | clicked in contextmenu |
!noon | bg=0.5,0.5,0.5 | clicked in contextmenu |
!night | bg=0,0,0&foo=2 | clicked in contextmenu |
The XR Browser should offer a contextmenu with these options when more than one
!
-macro is present on an object.
This document has no IANA actions.
definition | explanation |
---|---|
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. |
XR fragments | URI Fragment with spatial hints like #pos=0,0,0&t=1,100 e.g. |
query | an URI Fragment-operator which queries object(s) from a scene like #q=cube |
FPS | frames per second in spatial experiences (games,VR,AR e.g.), should be as high as possible |
◻ |
ascii representation of an 3D object/mesh |
(un)obtrusive | obtrusive: wrapping human text/thought in XML/HTML/JSON obfuscates human text into a salad of machine-symbols and words |