diff --git a/pages/xr-media-integration-in-5g/features.md b/pages/xr-media-integration-in-5g/features.md index b8cedb9f..9eda1b99 100644 --- a/pages/xr-media-integration-in-5g/features.md +++ b/pages/xr-media-integration-in-5g/features.md @@ -1,9 +1,834 @@ --- layout: default -title: Features +title: Features parent: XR Media Integration in 5G has_children: false -nav_order: 1 +nav_order: 0 --- -# List of features under implementation +## XR Player Features + +### Planned for v1.0.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ExtensionPropertyRequirementStatusTest content
MPEG_anchoranchorsM
MPEG_anchortrackableM
MPEG_anchor.trackableTRACKABLE_CONTROLLER
TRACKABLE_GEOMETRIC
TRACKABLE_MARKER_2D
TRACKABLE_MARKER_3D
TRACKABLE_MARKER_GEO
TRACKABLE_APPLICATION
MPEG_anchoranchorsM
+ + +* anchoring and overlay of 3D content on real world + +### Featured in v0.9.0 + +See also: [detailed implementation status of the scene description format](#scene-description-format). + +| Feature | | Target | | +|:-------------------------|:----------------------|:---------|:---------| +| | | Windows | Android | +| media player * | | ☐ | ☐ | +| video texture * | | ☑ | ☐ | +| audio sources * | | ☑ | ☐ | +| interactivity | ACTION_ACTIVATE | ☑ | ☑ | +| | ACTION_MEDIA | ☐ | ☐ | +| | ACTION_TRANSFORM | ☑ | ☑ | +| | ACTION_BLOCK | ☑ | ☑ | +| | ACTION_ANIMATION | ☑ | ☑ | +| | ACTION_MANIPULATE | ☑ | ☑ | +| | ACTION_SET_MATERIAL | ☑ | ☑ | +| | ACTION_HAPTIC | ☐ | ☐ | +| | ACTION_SET_AVATAR | ☐ | ☐ | + + +* Depends on media pipelines, see [supported platforms](#supported-platforms) below. + + +### Supported platforms + +| Dependency | Build target platform | | | | | +|:-------------------------|:---------|:-------------|:-----------|:---------|:---------| +| | Windows | Android | Linux | OSX | iOS | +| rt-xr-unity-player | ☑ | ☑ | * | * | * | +| Media Pipeline factory | ☑ | ☐ | ☐ | ☐ | ☐ | +| avpipeline plugin | ☑ | ☐ | ☐ | ☐ | ☐ | + +* untested, the application is expected to compile without issues. + +#### Tested devices + +**Smartphones** + +- Android 13 + +**HMD** + +- Meta Quest 2, 3, Pro - currently tested through Meta Quest Link on Windows 11. [XR Player - Meta Quest Link tutrial](tutorials/xr-player-win11-openXR.md). + + +### Scene Description format + +The table below provide the implementation status of the latest stable release of [rt-xr-unity-player](https://github.com/5G-MAG/rt-xr-unity-player). + +### Implemented in v0.9.0 + +Status: + +- ☑ the feature is implemented the XR player. +- ☐ the feature is implemented by the glTF parser, but the corresponding behavior is not implemented by the XR player. + +Requirement (as defined in ISO/IEC 23090-14): + +- **O** : Optional +- **M** : Mandatory + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ExtensionPropertyRequirementStatusTest content
MPEG_mediastartTimeO
startTimeOffsetO
endTimeOffsetO
autoplayO
autoplayGroupO
loopO
controlsO
alternativesM
MPEG_media.media.alternativeuriM
mimeTypeM
tracksO
MPEG_media.media.alternative.tracktrackM
codecsM
MPEG_buffer_circularcountO
mediaM
tracksO
MPEG_accessor_timedimmutableO
bufferViewO
suggestedUpdateRateO
MPEG_audio_spatialsourcesO
listenerO
reverbsO
MPEG_audio_spatial.sourcesidM
typeM
pregainO
playbackSpeedO
attenuationO
attenuationParametersO
referenceDistanceO
accessorsM
reverbFeedO
reverbFeedGainO
MPEG_audio_spatial.listeneridM
MPEG_texture_videoaccessorM
widthM
heightM
formatO
MPEG_scene_interactivitytriggersM
actionsM
behaviorsM
MPEG_scene_interactivity.triggersTRIGGER_COLLISION
TRIGGER_PROXIMITY
TRIGGER_USER_INPUT
TRIGGER_VISIBILITY
MPEG_scene_interactivity.actionsACTION_ACTIVATE
ACTION_TRANSFORM
ACTION_BLOCK
ACTION_ANIMATION
ACTION_MEDIA
ACTION_MANIPULATE
ACTION_SET_MATERIAL
ACTION_HAPTIC
ACTION_SET_AVATAR
MPEG_scene_interactivity.behaviorstriggersM
actionsM
triggersCombinationControlM
triggersActivationControlM
actionsControlM
interruptActionO
priorityO
MPEG_node_interactivitytypeM
MPEG_node_interactivity.typeTRIGGER_COLLISION
TRIGGER_PROXIMITY
TRIGGER_USER_INPUT
TRIGGER_VISIBILITY
+ + + +### Unimplemented + +The following is a list of glTF extensions currently not implemented: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ExtensionPropertyRequirementStatusTest content
MPEG_sampler_YCbCr
MPEG_primitive_V3C
MPEG_node_avatar
MPEG_lights_texture_based
MPEG_light_punctual
MPEG_haptic
MPEG_mesh_linking
MPEG_scene_dynamic
MPEG_viewport_recommended
MPEG_animation_timing
+ + + diff --git a/pages/xr-media-integration-in-5g/features/csv2md.py b/pages/xr-media-integration-in-5g/features/csv2md.py new file mode 100644 index 00000000..4f1ef454 --- /dev/null +++ b/pages/xr-media-integration-in-5g/features/csv2md.py @@ -0,0 +1,60 @@ +import pandas as pd +from collections import defaultdict +import markdown +import sys +from pathlib import Path + +# columns = [ +# "Extension", +# "Property", +# "Status", +# "Requirement", +# "Test content" ] +# #, "notes" ] + +class StringConverter(dict): + def __contains__(self, item): + return True + + def __getitem__(self, item): + return str + + def get(self, default=None): + return str + +def main(fp, csv2md, md2html): + + mdfp = fp.with_suffix('.md') + htmlfp = fp.with_suffix('.html') + + # df = pd.read_csv(fp, usecols=columns, converters=StringConverter()) + + if csv2md: + df = pd.read_csv(fp, converters=StringConverter()) + with open(mdfp, 'w') as md: + df.to_markdown(buf=md, index=False) + + if md2html: + with open(htmlfp, 'w') as fo: + with open(mdfp, 'r') as md: + data = md.read() + data = data.replace("[ ]", "☐") + data = data.replace("[x]", "☑") + html = markdown.markdown(data, extensions=['markdown.extensions.tables']) + fo.write(html) + +if __name__ == "__main__": + + assert len(sys.argv) > 1 + fp = Path(sys.argv[1]) + assert fp.exists() + + if len(sys.argv) == 2: + csv2md = True + md2html = True + else: + csv2md = 'csv2md' in sys.argv + md2html = 'md2html' in sys.argv + + + main(fp, csv2md, md2html) \ No newline at end of file diff --git a/pages/xr-media-integration-in-5g/images/rt-xr-maf-implementation.jpg b/pages/xr-media-integration-in-5g/images/rt-xr-maf-implementation.jpg new file mode 100755 index 00000000..158959da Binary files /dev/null and b/pages/xr-media-integration-in-5g/images/rt-xr-maf-implementation.jpg differ diff --git a/pages/xr-media-integration-in-5g/images/rt-xr-overview.jpg b/pages/xr-media-integration-in-5g/images/rt-xr-overview.jpg new file mode 100755 index 00000000..5c8a1761 Binary files /dev/null and b/pages/xr-media-integration-in-5g/images/rt-xr-overview.jpg differ diff --git a/pages/xr-media-integration-in-5g/images/rt-xr-presentation-engine.jpg b/pages/xr-media-integration-in-5g/images/rt-xr-presentation-engine.jpg new file mode 100755 index 00000000..be62dcfe Binary files /dev/null and b/pages/xr-media-integration-in-5g/images/rt-xr-presentation-engine.jpg differ diff --git a/pages/xr-media-integration-in-5g/images/unity-build-change-target.png b/pages/xr-media-integration-in-5g/images/unity-build-change-target.png new file mode 100755 index 00000000..a354ca52 Binary files /dev/null and b/pages/xr-media-integration-in-5g/images/unity-build-change-target.png differ diff --git a/pages/xr-media-integration-in-5g/images/unity-build-player.png b/pages/xr-media-integration-in-5g/images/unity-build-player.png new file mode 100755 index 00000000..b7ad888a Binary files /dev/null and b/pages/xr-media-integration-in-5g/images/unity-build-player.png differ diff --git a/pages/xr-media-integration-in-5g/images/unity-dll-config.jpeg b/pages/xr-media-integration-in-5g/images/unity-dll-config.jpeg new file mode 100755 index 00000000..ab4f9541 Binary files /dev/null and b/pages/xr-media-integration-in-5g/images/unity-dll-config.jpeg differ diff --git a/pages/xr-media-integration-in-5g/images/unity-mock-HMD-loader.png b/pages/xr-media-integration-in-5g/images/unity-mock-HMD-loader.png new file mode 100755 index 00000000..281fc0b3 Binary files /dev/null and b/pages/xr-media-integration-in-5g/images/unity-mock-HMD-loader.png differ diff --git a/pages/xr-media-integration-in-5g/images/unity-player-default-scene-config.png b/pages/xr-media-integration-in-5g/images/unity-player-default-scene-config.png new file mode 100755 index 00000000..45ad7a95 Binary files /dev/null and b/pages/xr-media-integration-in-5g/images/unity-player-default-scene-config.png differ diff --git a/pages/xr-media-integration-in-5g/images/xr-player-usage-cli-http.png b/pages/xr-media-integration-in-5g/images/xr-player-usage-cli-http.png new file mode 100755 index 00000000..ec17f933 Binary files /dev/null and b/pages/xr-media-integration-in-5g/images/xr-player-usage-cli-http.png differ diff --git a/pages/xr-media-integration-in-5g/images/xr-player-usage-cli.png b/pages/xr-media-integration-in-5g/images/xr-player-usage-cli.png new file mode 100755 index 00000000..0e32de08 Binary files /dev/null and b/pages/xr-media-integration-in-5g/images/xr-player-usage-cli.png differ diff --git a/pages/xr-media-integration-in-5g/images/xr-player-usage-drag-n-drop-scene.png b/pages/xr-media-integration-in-5g/images/xr-player-usage-drag-n-drop-scene.png new file mode 100755 index 00000000..ad62d773 Binary files /dev/null and b/pages/xr-media-integration-in-5g/images/xr-player-usage-drag-n-drop-scene.png differ diff --git a/pages/xr-media-integration-in-5g/images/xr-player-usage-locate-content.png b/pages/xr-media-integration-in-5g/images/xr-player-usage-locate-content.png new file mode 100755 index 00000000..da9b8a13 Binary files /dev/null and b/pages/xr-media-integration-in-5g/images/xr-player-usage-locate-content.png differ diff --git a/pages/xr-media-integration-in-5g/index.md b/pages/xr-media-integration-in-5g/index.md index aaf705f3..fc70d6c1 100644 --- a/pages/xr-media-integration-in-5g/index.md +++ b/pages/xr-media-integration-in-5g/index.md @@ -6,4 +6,4 @@ nav_order: 7 --- # XR Media integration in 5G - + \ No newline at end of file diff --git a/pages/xr-media-integration-in-5g/projects.md b/pages/xr-media-integration-in-5g/projects.md index a20929ea..8c2940e0 100644 --- a/pages/xr-media-integration-in-5g/projects.md +++ b/pages/xr-media-integration-in-5g/projects.md @@ -7,6 +7,8 @@ nav_order: 2 --- # 🚧 Related projects -## XR: Repositories with ISO/IEC 23090-14:2023 functionalities - Release 1.0.0 -All issues related to the release of version 1.0.0 of the XR repositories dealing with functionalities defined in ISO/IEC 23090-14 + +## XR : reference XR Player implemented in Unity3D + +All issues related to the release of development of the Unity3D XR Player supporting [functionalities defined in ISO/IEC 23090-14](features) * [Kanban board](https://github.com/orgs/5G-MAG/projects/22) diff --git a/pages/xr-media-integration-in-5g/repositories.md b/pages/xr-media-integration-in-5g/repositories.md index e56e958c..b247e733 100644 --- a/pages/xr-media-integration-in-5g/repositories.md +++ b/pages/xr-media-integration-in-5g/repositories.md @@ -9,22 +9,24 @@ nav_order: 3 # ⭐ Related repositories Note that these repositories are currently private and under testing. Early access can be requested at: https://www.5g-mag.com/early-access +See also: [xr-player-overview](tutorials/xr-player-overview) + ## XR Unity Player: [rt-xr-unity-player](https://github.com/5G-MAG/rt-xr-unity-player) * [Information and how to download, build, install and run](https://github.com/5G-MAG/rt-xr-unity-player#readme) * [Releases](https://github.com/5G-MAG/rt-xr-unity-player/releases) -## XR Blender Exporter: [rt-xr-blender-exporter](https://github.com/5G-MAG/rt-xr-blender-exporter) -* [Information and how to download, build, install and run](https://github.com/5G-MAG/rt-xr-blender-exporter#readme) -* [Releases](https://github.com/5G-MAG/rt-xr-blender-exporter/releases) - -## Efficient glTF 3D import / export package for Unity: [rt-xr-gITFast](https://github.com/5G-MAG/rt-xr-gITFast) +## A fork of Unity's glTF parser: [rt-xr-gITFast](https://github.com/5G-MAG/rt-xr-gITFast) * [Information and how to download, build, install and run](https://github.com/5G-MAG/rt-xr-gITFast#readme) * [Releases](https://github.com/5G-MAG/rt-xr-gITFast/releases) -## XR MAF Plugin: [rt-xr-maf-plugin](https://github.com/5G-MAG/rt-xr-maf-plugin) -* [Information and how to download, build, install and run](https://github.com/5G-MAG/rt-xr-maf-plugin#readme) -* [Releases](https://github.com/5G-MAG/rt-xr-maf-plugin/releases) - -## XR MAF Native: [rt-xr-maf-native](https://github.com/5G-MAG/rt-xr-maf-native) +## Media pipelines factory and plugins implementing the MAF API: [rt-xr-maf-native](https://github.com/5G-MAG/rt-xr-maf-native) * [Information and how to download, build, install and run](https://github.com/5G-MAG/rt-xr-maf-native#readme) -* [Releases](https://github.com/5G-MAG/rt-xr-maf-native/releases) +* [Releases](https://github.com/5G-MAG/rt-xr-maf-native/tags) + +## Test content: [rt-xr-content](https://github.com/5G-MAG/rt-xr-content) +* [Information](https://github.com/5G-MAG/rt-xr-content#readme) +* [Releases](https://github.com/5G-MAG/rt-xr-maf-native/tags) + +## Blender Exporter: [rt-xr-blender-exporter](https://github.com/5G-MAG/rt-xr-blender-exporter) +* [Information and how to download, build, install and run](https://github.com/5G-MAG/rt-xr-blender-exporter#readme) +* [Releases](https://github.com/5G-MAG/rt-xr-blender-exporter/releases) diff --git a/pages/xr-media-integration-in-5g/specifications.md b/pages/xr-media-integration-in-5g/specifications.md index af06e731..d0bf2066 100644 --- a/pages/xr-media-integration-in-5g/specifications.md +++ b/pages/xr-media-integration-in-5g/specifications.md @@ -5,6 +5,8 @@ parent: XR Media Integration in 5G has_children: false nav_order: 0 --- + # 📑 Specifications and relevant references * Information about relevant specifications can be found at the [Standards Wiki](https://github.com/5G-MAG/Standards/wiki/XR-(eXtended-Reality):-Relevant-Specifications) * A list of relevant 3GPP Work Items can be found at [Standards Wiki](https://github.com/5G-MAG/Standards/wiki/XR-(eXtended-Reality):-Relevant-Work-Items) +* The XR Player supports loading interactive 3D scenes in the format specified in [ISO/IEC 23090-14:2023](https://www.iso.org/standard/86439.html). diff --git a/pages/xr-media-integration-in-5g/tutorials.md b/pages/xr-media-integration-in-5g/tutorials.md index fbc7473f..4693b2c4 100644 --- a/pages/xr-media-integration-in-5g/tutorials.md +++ b/pages/xr-media-integration-in-5g/tutorials.md @@ -5,7 +5,4 @@ parent: XR Media Integration in 5G has_children: true nav_order: 4 --- - -# ▶️ Using the tools Check the [TUTORIALS & DEVELOPER XCHANGES](https://www.5g-mag.com/tutorials) in the 5G-MAG website and the information below. -* We are working on it... diff --git a/pages/xr-media-integration-in-5g/tutorials/xr-player-overview.md b/pages/xr-media-integration-in-5g/tutorials/xr-player-overview.md new file mode 100644 index 00000000..dfe8b693 --- /dev/null +++ b/pages/xr-media-integration-in-5g/tutorials/xr-player-overview.md @@ -0,0 +1,69 @@ +--- +layout: default +title: XR Player project overview +parent: Tutorials +grand_parent: XR Media Integration in 5G +has_children: false +nav_order: 0 +--- + +# XR Player : project overview + +## Scene description format + +The Scene Description format standardized by [ISO/IEC JTC 1/SC29/WG03](https://www.iso.org/committee/45316.html) MPEG Systems in [ISO/IEC 23090-14](https://www.iso.org/standard/86439.html) specifies a framework enabling the composition of 3D scenes for immersive experiences, anchoring 3D assets in the real world, facilitating rich interactivity, supporting real-time media delivery. + +It establishes interfaces like the Media Access Function (MAF) API to enable cross-platform interoperability, ensuring efficient retrieval and processing of media data, by decoupling the Presentation Engine from media pipeline. + + +## XR Player implementation + +![Alt text](../images/rt-xr-overview.jpg) + +The XR Player is implemented as a Unity3D project: [rt-xr-unity-player](https://github.com/5G-MAG/rt-xr-unity-player). + +The unity project builds on the following dependencies: +* [rt-xr-glTFast](https://github.com/5G-MAG/rt-xr-gITFast): parsing and instantiating of 3D scenes in Unity. +* [rt-xr-maf-native](https://github.com/5G-MAG/rt-xr-maf-native): a C++ Media Access Functions (MAF) API implementation, extensible with custom media pipeline plugins. + + + + +### Test content + +* [rt-xr-content](https://github.com/5G-MAG/rt-xr-content): test content implementing the scene description format. + + +See the [features page](features) for implementation status of the scene description format. + + +## MAF API & Media pipelines + +The Media Access Functions (MAF) API is specified in ISO/IEC 23090-14:2023. + +It's purpose is to decouple the presentation engine from media pipeline management, it allows the Presentation Engine to: +- pass View informations to the media pipelines (eg. to optimize fetching media ) +- read media buffers updated by the media pipelines + + +The MAF API is protocol and codec agnostic, media can be fetched a remote URL. + + + +### Media player implementation + +#### MediaPlayer component + +The MediaPlayer component is part of the Presentation Engine layer: + +![Alt text](../images/rt-xr-presentation-engine.jpg) + +The MediaPlayer component uses the MAF API implemented by Media Pipelines: + +![Alt text](../images/rt-xr-maf-implementation.jpg) + +The XR Player uses a C++ implementation of the MAF API. It uses a factory / plugin pattern to allow development of media pipelines. + +The mechanism by which a media pipeline is instantiated and buffers initialized, is out of the scope of ISO/IEC 23090-14. + +For more on the MAF API implementation, review the [rt-xr-maf-native](https://github.com/5G-MAG/rt-xr-maf-native) repository. diff --git a/pages/xr-media-integration-in-5g/tutorials/xr-player-win11-openXR.md b/pages/xr-media-integration-in-5g/tutorials/xr-player-win11-openXR.md new file mode 100644 index 00000000..715e277e --- /dev/null +++ b/pages/xr-media-integration-in-5g/tutorials/xr-player-win11-openXR.md @@ -0,0 +1,81 @@ +--- +layout: default +title: Using the XR Player on windows +parent: Tutorials +grand_parent: XR Media Integration in 5G +has_children: false +nav_order: 0 +--- + +The XR Player Windows release supports rendering on an HMD by default if an OpenXR runtime is installed. + +This tutorial covers usage of XR Player on Windows, rendering on a Meta Quest HMD using Meta Quest Link. + +When no OpenXR runtime is detected, the player runs in a regular desktop window. + + +## Requirements + +- Windows 11 + +In order to support Meta Quest link: + +- a Meta Quest headset ( 2, 3 and Pro are confirmed to work) +- a machine compatible with the [Meta Quest link requirements](https://www.meta.com/en-gb/help/quest/articles/headsets-and-accessories/oculus-link/requirements-quest-link/) +- the [Oculus PC app for Meta Quest Link](https://www.meta.com/en-gb/help/quest/articles/headsets-and-accessories/oculus-rift-s/install-app-for-link/) + + +### Meta Quest Link support + +- Follow the instructions on [Meta's support article](https://www.meta.com/en-gb/help/quest/articles/headsets-and-accessories/oculus-rift-s/install-app-for-link/). The step by step [developer tutorial](https://developer.oculus.com/documentation/unity/unity-link/) also provides some usefull screenshots if you aren't familiar with the Meta Quest platform - note that beta features aren't needed. +- Meta Quest Link supports a USB mode as well as a [WiFi](https://www.meta.com/en-gb/help/quest/articles/headsets-and-accessories/oculus-link/connect-with-air-link/) mode. +- [Adjust graphics perfomance settings](https://www.meta.com/en-gb/help/quest/articles/headsets-and-accessories/oculus-link/link-performance-preferences/) depending on your computer's configuration. + + +## Getting Started + +**1. Get the player** + +Download the [latest release](https://github.com/5G-MAG/rt-xr-unity-player/tags) or [build](https://github.com/5G-MAG/rt-xr-unity-player?tab=readme-ov-file#build) the XR player. + + +**2. Get the test content** + +[Download the latest test content](https://github.com/5G-MAG/rt-xr-content/archive/refs/heads/main.zip) from github's rt-xr-content repository. + +**3. Locate the test content to the player directory** + +By default the player expects the `rt-xr-content` directory to be located next to the executable so that double clicking on `rt-xr-player.exe` launches without further configuration. + +![XR player default content location](../images/xr-player-usage-locate-content.png) + +**4. [Start the Meta Quest Link Mode](#meta-quest-link-support) on the headset** + +**5. Launch the `rt-xr-player.exe` application** + + +### Command line usage + +Launching custom scenes is normaly achieved from the command line, typically PowerShell on windows. +In that case the content can be located anywhere on the file system or downloaded over http: + +#### Launch a scene available over http + +![http scene](../images/xr-player-usage-cli-http.png) + + +### Using a custom launcher shortcut + +If you downloaded an XR Player release, a drag and drop launcher is provided. + +Such a launcher is just create a file with a `.bat` extension and the following content: +``` +%~dp0rt-xr-player.exe --gltf "%1" +pause +``` + +> "%1" means the dropped argument, and could be replaced by an URI. + + +![Drag and drop scene](../images/xr-player-usage-drag-n-drop-scene.png) +