XR Macros
Internet Internet Engineering Task Force 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.
Introduction 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:
  1. getting/setting common used 3D properties using querystring- or JSON-notation
  2. querying 3D properties using the lightweight searchengine notation used in XR Fragments
NOTE: The chapters in this document are ordered from highlevel to lowlevel (technical) as much as possible
Core principle
  1. XR Macros use querystrings, but are HTML-agnostic (though pseudo-XR Fragment browsers can be implemented on top of HTML/Javascript).
  2. XR Macros represents setting/getting common used properties found in all popular 3D frameworks/(game)editors/internet browsers.
  3. XR Macros acts as simple eventhandlers for URI Fragments
Conventions and Definitions See appendix below in case certain terms are not clear.
List of XR Macros (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.
Usecase: click object
custom property value trigger when
!clickme bg=1,1,1&foo=2 object clicked
Usecase: conditional click object
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 when foo is greater than 2 (see previous example)
Usecase: click object (roundrobin)
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 or night in roundrobin fashion.
Usecase: click object, URI fragment and scene load
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
Usecase: present context menu with options
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.
Security Considerations
IANA Considerations This document has no IANA actions.
Acknowledgments
  • NLNET
  • Future of Text
  • visual-meta.info
Appendix: Definitions
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