From 2fca1814bdde2a2e27494d649496e8cdbd7e7b30 Mon Sep 17 00:00:00 2001 From: devloglogan Date: Tue, 21 May 2024 10:47:11 -0500 Subject: [PATCH] Add fb-composition-layer-sample project --- .../example_panel.gd | 19 + .../example_panel.tscn | 44 + .../export_presets.cfg | 227 +++++ samples/fb-composition-layers-sample/icon.svg | 1 + .../icon.svg.import | 37 + samples/fb-composition-layers-sample/main.gd | 154 +++ .../fb-composition-layers-sample/main.tscn | 707 ++++++++++++++ .../openxr_action_map.tres | 885 ++++++++++++++++++ .../project.godot | 32 + .../fb-composition-layers-sample/raycast.gd | 16 + 10 files changed, 2122 insertions(+) create mode 100644 samples/fb-composition-layers-sample/example_panel.gd create mode 100644 samples/fb-composition-layers-sample/example_panel.tscn create mode 100644 samples/fb-composition-layers-sample/export_presets.cfg create mode 100644 samples/fb-composition-layers-sample/icon.svg create mode 100644 samples/fb-composition-layers-sample/icon.svg.import create mode 100644 samples/fb-composition-layers-sample/main.gd create mode 100644 samples/fb-composition-layers-sample/main.tscn create mode 100644 samples/fb-composition-layers-sample/openxr_action_map.tres create mode 100644 samples/fb-composition-layers-sample/project.godot create mode 100644 samples/fb-composition-layers-sample/raycast.gd diff --git a/samples/fb-composition-layers-sample/example_panel.gd b/samples/fb-composition-layers-sample/example_panel.gd new file mode 100644 index 00000000..6e432b40 --- /dev/null +++ b/samples/fb-composition-layers-sample/example_panel.gd @@ -0,0 +1,19 @@ +extends Control + +@export var display_string: String = "" + +@onready var pointer_left: ColorRect = $PointerLeft +@onready var pointer_right: ColorRect = $PointerRight + +var start_pos: Vector2 + +func _ready() -> void: + start_pos = $Label.position + $Label.text = display_string + +func _process(delta: float) -> void: + $Label.position = Vector2(start_pos.x + (100.0 * sin(Time.get_ticks_msec() * 0.001 * 2)), start_pos.y) + +func update_pointers(p_position_left: Vector2, p_position_right: Vector2) -> void: + pointer_left.position = size * p_position_left - (0.5 * pointer_left.size) + pointer_right.position = size * p_position_right - (0.5 * pointer_left.size) diff --git a/samples/fb-composition-layers-sample/example_panel.tscn b/samples/fb-composition-layers-sample/example_panel.tscn new file mode 100644 index 00000000..8341be4e --- /dev/null +++ b/samples/fb-composition-layers-sample/example_panel.tscn @@ -0,0 +1,44 @@ +[gd_scene load_steps=3 format=3 uid="uid://v75csjjxgtpx"] + +[ext_resource type="Script" path="res://example_panel.gd" id="1_tdwln"] + +[sub_resource type="LabelSettings" id="LabelSettings_8sbod"] + +[node name="ExamplePanel" type="Control"] +auto_translate_mode = 1 +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_tdwln") + +[node name="Label" type="Label" parent="."] +auto_translate_mode = 1 +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -22.5 +offset_top = -11.5 +offset_right = 22.5 +offset_bottom = 11.5 +grow_horizontal = 2 +grow_vertical = 2 +text = "Hello!" +label_settings = SubResource("LabelSettings_8sbod") + +[node name="PointerRight" type="ColorRect" parent="."] +layout_mode = 0 +offset_right = 10.0 +offset_bottom = 10.0 +color = Color(1, 0, 1, 1) + +[node name="PointerLeft" type="ColorRect" parent="."] +layout_mode = 0 +offset_right = 10.0 +offset_bottom = 10.0 +color = Color(1, 1, 0, 1) diff --git a/samples/fb-composition-layers-sample/export_presets.cfg b/samples/fb-composition-layers-sample/export_presets.cfg new file mode 100644 index 00000000..5081477d --- /dev/null +++ b/samples/fb-composition-layers-sample/export_presets.cfg @@ -0,0 +1,227 @@ +[preset.0] + +name="Quest" +platform="Android" +runnable=true +advanced_options=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="../builds/FbCompositionLayerSample.apk" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.0.options] + +custom_template/debug="" +custom_template/release="" +gradle_build/use_gradle_build=true +gradle_build/gradle_build_directory="" +gradle_build/android_source_template="" +gradle_build/compress_native_libraries=false +gradle_build/export_format=0 +gradle_build/min_sdk="" +gradle_build/target_sdk="" +architectures/armeabi-v7a=false +architectures/arm64-v8a=true +architectures/x86=false +architectures/x86_64=false +version/code=1 +version/name="" +package/unique_name="com.godotopenxrvendors.fbcompositionlayersample" +package/name="" +package/signed=true +package/app_category=2 +package/retain_data_on_uninstall=false +package/exclude_from_recents=false +package/show_in_android_tv=false +package/show_in_app_library=true +package/show_as_launcher_app=false +launcher_icons/main_192x192="" +launcher_icons/adaptive_foreground_432x432="" +launcher_icons/adaptive_background_432x432="" +graphics/opengl_debug=false +xr_features/xr_mode=1 +screen/immersive_mode=true +screen/support_small=true +screen/support_normal=true +screen/support_large=true +screen/support_xlarge=true +user_data_backup/allow=false +command_line/extra_args="" +apk_expansion/enable=false +apk_expansion/SALT="" +apk_expansion/public_key="" +permissions/custom_permissions=PackedStringArray() +permissions/access_checkin_properties=false +permissions/access_coarse_location=false +permissions/access_fine_location=false +permissions/access_location_extra_commands=false +permissions/access_mock_location=false +permissions/access_network_state=false +permissions/access_surface_flinger=false +permissions/access_wifi_state=false +permissions/account_manager=false +permissions/add_voicemail=false +permissions/authenticate_accounts=false +permissions/battery_stats=false +permissions/bind_accessibility_service=false +permissions/bind_appwidget=false +permissions/bind_device_admin=false +permissions/bind_input_method=false +permissions/bind_nfc_service=false +permissions/bind_notification_listener_service=false +permissions/bind_print_service=false +permissions/bind_remoteviews=false +permissions/bind_text_service=false +permissions/bind_vpn_service=false +permissions/bind_wallpaper=false +permissions/bluetooth=false +permissions/bluetooth_admin=false +permissions/bluetooth_privileged=false +permissions/brick=false +permissions/broadcast_package_removed=false +permissions/broadcast_sms=false +permissions/broadcast_sticky=false +permissions/broadcast_wap_push=false +permissions/call_phone=false +permissions/call_privileged=false +permissions/camera=false +permissions/capture_audio_output=false +permissions/capture_secure_video_output=false +permissions/capture_video_output=false +permissions/change_component_enabled_state=false +permissions/change_configuration=false +permissions/change_network_state=false +permissions/change_wifi_multicast_state=false +permissions/change_wifi_state=false +permissions/clear_app_cache=false +permissions/clear_app_user_data=false +permissions/control_location_updates=false +permissions/delete_cache_files=false +permissions/delete_packages=false +permissions/device_power=false +permissions/diagnostic=false +permissions/disable_keyguard=false +permissions/dump=false +permissions/expand_status_bar=false +permissions/factory_test=false +permissions/flashlight=false +permissions/force_back=false +permissions/get_accounts=false +permissions/get_package_size=false +permissions/get_tasks=false +permissions/get_top_activity_info=false +permissions/global_search=false +permissions/hardware_test=false +permissions/inject_events=false +permissions/install_location_provider=false +permissions/install_packages=false +permissions/install_shortcut=false +permissions/internal_system_window=false +permissions/internet=false +permissions/kill_background_processes=false +permissions/location_hardware=false +permissions/manage_accounts=false +permissions/manage_app_tokens=false +permissions/manage_documents=false +permissions/manage_external_storage=false +permissions/master_clear=false +permissions/media_content_control=false +permissions/modify_audio_settings=false +permissions/modify_phone_state=false +permissions/mount_format_filesystems=false +permissions/mount_unmount_filesystems=false +permissions/nfc=false +permissions/persistent_activity=false +permissions/post_notifications=false +permissions/process_outgoing_calls=false +permissions/read_calendar=false +permissions/read_call_log=false +permissions/read_contacts=false +permissions/read_external_storage=false +permissions/read_frame_buffer=false +permissions/read_history_bookmarks=false +permissions/read_input_state=false +permissions/read_logs=false +permissions/read_phone_state=false +permissions/read_profile=false +permissions/read_sms=false +permissions/read_social_stream=false +permissions/read_sync_settings=false +permissions/read_sync_stats=false +permissions/read_user_dictionary=false +permissions/reboot=false +permissions/receive_boot_completed=false +permissions/receive_mms=false +permissions/receive_sms=false +permissions/receive_wap_push=false +permissions/record_audio=false +permissions/reorder_tasks=false +permissions/restart_packages=false +permissions/send_respond_via_message=false +permissions/send_sms=false +permissions/set_activity_watcher=false +permissions/set_alarm=false +permissions/set_always_finish=false +permissions/set_animation_scale=false +permissions/set_debug_app=false +permissions/set_orientation=false +permissions/set_pointer_speed=false +permissions/set_preferred_applications=false +permissions/set_process_limit=false +permissions/set_time=false +permissions/set_time_zone=false +permissions/set_wallpaper=false +permissions/set_wallpaper_hints=false +permissions/signal_persistent_processes=false +permissions/status_bar=false +permissions/subscribed_feeds_read=false +permissions/subscribed_feeds_write=false +permissions/system_alert_window=false +permissions/transmit_ir=false +permissions/uninstall_shortcut=false +permissions/update_device_stats=false +permissions/use_credentials=false +permissions/use_sip=false +permissions/vibrate=false +permissions/wake_lock=false +permissions/write_apn_settings=false +permissions/write_calendar=false +permissions/write_call_log=false +permissions/write_contacts=false +permissions/write_external_storage=false +permissions/write_gservices=false +permissions/write_history_bookmarks=false +permissions/write_profile=false +permissions/write_secure_settings=false +permissions/write_settings=false +permissions/write_sms=false +permissions/write_social_stream=false +permissions/write_sync_settings=false +permissions/write_user_dictionary=false +xr_features/enable_meta_plugin=true +meta_xr_features/eye_tracking=0 +meta_xr_features/hand_tracking=2 +meta_xr_features/hand_tracking_frequency=0 +meta_xr_features/passthrough=2 +meta_xr_features/use_anchor_api=false +meta_xr_features/quest_1_support=false +meta_xr_features/quest_2_support=true +meta_xr_features/quest_3_support=true +meta_xr_features/quest_pro_support=true +xr_features/enable_pico_plugin=false +xr_features/enable_lynx_plugin=false +xr_features/enable_khronos_plugin=false +meta_xr_features/face_tracking=0 +meta_xr_features/body_tracking=0 +meta_xr_features/render_model=2 +meta_xr_features/use_scene_api=false +meta_xr_features/use_overlay_keyboard=false +meta_xr_features/use_experimental_features=false +meta_xr_features/boundary_mode=0 diff --git a/samples/fb-composition-layers-sample/icon.svg b/samples/fb-composition-layers-sample/icon.svg new file mode 100644 index 00000000..b370ceb7 --- /dev/null +++ b/samples/fb-composition-layers-sample/icon.svg @@ -0,0 +1 @@ + diff --git a/samples/fb-composition-layers-sample/icon.svg.import b/samples/fb-composition-layers-sample/icon.svg.import new file mode 100644 index 00000000..6010e03b --- /dev/null +++ b/samples/fb-composition-layers-sample/icon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c6hb7s0wxu0vc" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/samples/fb-composition-layers-sample/main.gd b/samples/fb-composition-layers-sample/main.gd new file mode 100644 index 00000000..bce94c17 --- /dev/null +++ b/samples/fb-composition-layers-sample/main.gd @@ -0,0 +1,154 @@ +extends Node3D + +const TURN_THRESHOLD := 0.8 +const TURN_ANGLE := TAU / 16 + +@onready var xr_origin: XROrigin3D = $XROrigin3D +@onready var xr_camera: XRCamera3D = $XROrigin3D/XRCamera3D +@onready var left_controller: XRController3D = $XROrigin3D/LeftController +@onready var right_controller: XRController3D = $XROrigin3D/RightController +@onready var left_controller_ray_cast: RayCast3D = $XROrigin3D/LeftController/LeftControllerRayCast +@onready var right_controller_ray_cast: RayCast3D = $XROrigin3D/RightController/RightControllerRayCast +@onready var turn_timer: Timer = $XROrigin3D/TurnTimer + +@onready var composition_layer_quad: OpenXRCompositionLayerQuad = $XROrigin3D/OpenXRCompositionLayerQuad +@onready var composition_layer_cylinder: OpenXRCompositionLayerCylinder = $XROrigin3D/OpenXRCompositionLayerCylinder +@onready var composition_layer_equirect: OpenXRCompositionLayerEquirect = $XROrigin3D/OpenXRCompositionLayerEquirect +@onready var quad_panel: Control = $QuadViewport/ExamplePanel +@onready var clylinder_panel: Control = $CylinderViewport/ExamplePanel +@onready var equirect_panel: Control = $EquirectViewport/ExamplePanel + +@onready var settings_composition_layer: OpenXRCompositionLayerCylinder = $XROrigin3D/SettingsCompositionLayer +@onready var secure_content_composition_layer: OpenXRCompositionLayerCylinder = $XROrigin3D/SecureContentCompositionLayer +@onready var disabled_supersampling_mesh: MeshInstance3D = $XROrigin3D/SettingsCompositionLayer/DisabledSupersampling/MeshInstance3D +@onready var normal_supersampling_mesh: MeshInstance3D = $XROrigin3D/SettingsCompositionLayer/NormalSupersampling/MeshInstance3D +@onready var quality_supersampling_mesh: MeshInstance3D = $XROrigin3D/SettingsCompositionLayer/QualitySupersampling/MeshInstance3D +@onready var disabled_sharpening_mesh: MeshInstance3D = $XROrigin3D/SettingsCompositionLayer/DisabledSharpening/MeshInstance3D +@onready var normal_sharpening_mesh: MeshInstance3D = $XROrigin3D/SettingsCompositionLayer/NormalSharpening/MeshInstance3D +@onready var quality_sharpening_mesh: MeshInstance3D = $XROrigin3D/SettingsCompositionLayer/QualitySharpening/MeshInstance3D +@onready var display_secure_content_mesh: MeshInstance3D = $XROrigin3D/SecureContentCompositionLayer/DisplaySecureContent/MeshInstance3D +@onready var replace_secure_content_mesh: MeshInstance3D = $XROrigin3D/SecureContentCompositionLayer/ReplaceSecureContent/MeshInstance3D +@onready var exclude_secure_content_mesh: MeshInstance3D = $XROrigin3D/SecureContentCompositionLayer/ExcludeSecureContent/MeshInstance3D + +var xr_interface : XRInterface = null + +func _ready(): + xr_interface = XRServer.find_interface("OpenXR") + if xr_interface and xr_interface.is_initialized(): + var vp: Viewport = get_viewport() + vp.use_xr = true + DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_DISABLED) + + for composition_layer in get_tree().get_nodes_in_group("composition_layer"): + var node_3d := Node3D.new() + node_3d.global_transform = composition_layer.global_transform + node_3d.name = composition_layer.name + add_child(node_3d) + + +func _process(_delta: float) -> void: + var ray_intersection_left: Vector2 + var ray_intersection_right: Vector2 + + ray_intersection_right = composition_layer_cylinder.intersects_ray(right_controller_ray_cast.global_transform.origin, -right_controller_ray_cast.global_transform.basis.y) + ray_intersection_left = composition_layer_cylinder.intersects_ray(left_controller_ray_cast.global_transform.origin, -left_controller_ray_cast.global_transform.basis.y) + clylinder_panel.update_pointers(ray_intersection_left, ray_intersection_right) + + ray_intersection_right = composition_layer_equirect.intersects_ray(right_controller_ray_cast.global_transform.origin, -right_controller_ray_cast.global_transform.basis.y) + ray_intersection_left = composition_layer_equirect.intersects_ray(left_controller_ray_cast.global_transform.origin, -left_controller_ray_cast.global_transform.basis.y) + equirect_panel.update_pointers(ray_intersection_left, ray_intersection_right) + + ray_intersection_right = composition_layer_quad.intersects_ray(right_controller_ray_cast.global_transform.origin, -right_controller_ray_cast.global_transform.basis.y) + ray_intersection_left = composition_layer_quad.intersects_ray(left_controller_ray_cast.global_transform.origin, -left_controller_ray_cast.global_transform.basis.y) + quad_panel.update_pointers(ray_intersection_left, ray_intersection_right) + + +func _on_left_controller_button_pressed(name: String) -> void: + if name == "trigger_click" and left_controller_ray_cast.is_colliding(): + var collider = left_controller_ray_cast.get_collider() + update(collider.name) + + +func _on_right_hand_button_pressed(name: String) -> void: + if name == "trigger_click" and right_controller_ray_cast.is_colliding(): + var collider = right_controller_ray_cast.get_collider() + update(collider.name) + + +func _on_left_controller_input_vector_2_changed(name: String, value: Vector2) -> void: + check_turn(name, value) + + +func _on_right_controller_input_vector_2_changed(name: String, value: Vector2) -> void: + check_turn(name, value) + + +func update(button_name: String) -> void: + if button_name.contains("Supersampling"): + disabled_supersampling_mesh.get_surface_override_material(0).albedo_color = Color.RED + normal_supersampling_mesh.get_surface_override_material(0).albedo_color = Color.RED + quality_supersampling_mesh.get_surface_override_material(0).albedo_color = Color.RED + elif button_name.contains("Sharpening"): + disabled_sharpening_mesh.get_surface_override_material(0).albedo_color = Color.RED + normal_sharpening_mesh.get_surface_override_material(0).albedo_color = Color.RED + quality_sharpening_mesh.get_surface_override_material(0).albedo_color = Color.RED + elif button_name.contains("SecureContent"): + display_secure_content_mesh.get_surface_override_material(0).albedo_color = Color.RED + replace_secure_content_mesh.get_surface_override_material(0).albedo_color = Color.RED + exclude_secure_content_mesh.get_surface_override_material(0).albedo_color = Color.RED + + match button_name: + "DisabledSupersampling": + settings_composition_layer.set("XR_FB_composition_layer_settings/manual/supersampling_mode", OpenXRFbCompositionLayerSettingsExtensionWrapper.SUPERSAMPLING_MODE_DISABLED) + disabled_supersampling_mesh.get_surface_override_material(0).albedo_color = Color.GREEN + "NormalSupersampling": + settings_composition_layer.set("XR_FB_composition_layer_settings/manual/supersampling_mode", OpenXRFbCompositionLayerSettingsExtensionWrapper.SUPERSAMPLING_MODE_NORMAL) + normal_supersampling_mesh.get_surface_override_material(0).albedo_color = Color.GREEN + "QualitySupersampling": + settings_composition_layer.set("XR_FB_composition_layer_settings/manual/supersampling_mode", OpenXRFbCompositionLayerSettingsExtensionWrapper.SUPERSAMPLING_MODE_QUALITY) + quality_supersampling_mesh.get_surface_override_material(0).albedo_color = Color.GREEN + "DisabledSharpening": + settings_composition_layer.set("XR_FB_composition_layer_settings/manual/sharpening_mode", OpenXRFbCompositionLayerSettingsExtensionWrapper.SHARPENING_MODE_DISABLED) + disabled_sharpening_mesh.get_surface_override_material(0).albedo_color = Color.GREEN + "NormalSharpening": + settings_composition_layer.set("XR_FB_composition_layer_settings/manual/sharpening_mode", OpenXRFbCompositionLayerSettingsExtensionWrapper.SHARPENING_MODE_NORMAL) + normal_sharpening_mesh.get_surface_override_material(0).albedo_color = Color.GREEN + "QualitySharpening": + settings_composition_layer.set("XR_FB_composition_layer_settings/manual/sharpening_mode", OpenXRFbCompositionLayerSettingsExtensionWrapper.SHARPENING_MODE_QUALITY) + quality_sharpening_mesh.get_surface_override_material(0).albedo_color = Color.GREEN + "DisplaySecureContent": + secure_content_composition_layer.set("XR_FB_composition_layer_secure_content/external_output", 0) + display_secure_content_mesh.get_surface_override_material(0).albedo_color = Color.GREEN + "ReplaceSecureContent": + secure_content_composition_layer.set("XR_FB_composition_layer_secure_content/external_output", 2) + replace_secure_content_mesh.get_surface_override_material(0).albedo_color = Color.GREEN + "ExcludeSecureContent": + secure_content_composition_layer.set("XR_FB_composition_layer_secure_content/external_output", 1) + exclude_secure_content_mesh.get_surface_override_material(0).albedo_color = Color.GREEN + + +func check_turn(name: String, value: Vector2) -> void: + if not turn_timer.is_stopped(): + return + + if name == "primary": + if value.x > TURN_THRESHOLD: + rotate_player(TURN_ANGLE) + turn_timer.start() + if value.x < -TURN_THRESHOLD: + rotate_player(-TURN_ANGLE) + turn_timer.start() + + +func rotate_player(angle: float): + var t1 := Transform3D() + var t2 := Transform3D() + var rot := Transform3D() + + t1.origin = -xr_camera.transform.origin + t2.origin = xr_camera.transform.origin + rot = rot.rotated(Vector3.DOWN, angle) + xr_origin.transform = (xr_origin.transform * t2 * rot * t1).orthonormalized() + + for composition_layer in get_tree().get_nodes_in_group("composition_layer"): + composition_layer.global_transform = get_node(NodePath(composition_layer.name)).global_transform diff --git a/samples/fb-composition-layers-sample/main.tscn b/samples/fb-composition-layers-sample/main.tscn new file mode 100644 index 00000000..d7712f30 --- /dev/null +++ b/samples/fb-composition-layers-sample/main.tscn @@ -0,0 +1,707 @@ +[gd_scene load_steps=26 format=3 uid="uid://cqsodpswgup8w"] + +[ext_resource type="Script" path="res://main.gd" id="1_fsva1"] +[ext_resource type="Script" path="res://raycast.gd" id="2_u4cnn"] +[ext_resource type="Texture2D" uid="uid://c6hb7s0wxu0vc" path="res://icon.svg" id="4_wy534"] +[ext_resource type="PackedScene" uid="uid://v75csjjxgtpx" path="res://example_panel.tscn" id="6_kubns"] + +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_0x6cv"] +sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) +ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) + +[sub_resource type="Sky" id="Sky_dqyx0"] +sky_material = SubResource("ProceduralSkyMaterial_0x6cv") + +[sub_resource type="Environment" id="Environment_m0xew"] +background_mode = 2 +sky = SubResource("Sky_dqyx0") +ambient_light_source = 2 +ambient_light_color = Color(0.270588, 0.270588, 0.270588, 1) +tonemap_mode = 2 + +[sub_resource type="CylinderMesh" id="CylinderMesh_is4ih"] +top_radius = 0.005 +bottom_radius = 0.005 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_xpljd"] +shading_mode = 0 + +[sub_resource type="CylinderMesh" id="CylinderMesh_k07us"] +top_radius = 0.005 +bottom_radius = 0.005 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_0b4kl"] +shading_mode = 0 + +[sub_resource type="BoxShape3D" id="BoxShape3D_7mtgu"] +size = Vector3(0.642334, 0.300781, 0.107422) + +[sub_resource type="BoxMesh" id="BoxMesh_3ttch"] +size = Vector3(0.64, 0.3, 0.1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ccovu"] +shading_mode = 0 +albedo_color = Color(0, 1, 0, 1) + +[sub_resource type="BoxMesh" id="BoxMesh_2e18c"] +size = Vector3(0.64, 0.3, 0.1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_7qm33"] +shading_mode = 0 +albedo_color = Color(1, 0, 0, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_81dfm"] +shading_mode = 0 +albedo_color = Color(1, 0, 0, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_uo2xa"] +shading_mode = 0 +albedo_color = Color(0, 1, 0, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_sl84k"] +shading_mode = 0 +albedo_color = Color(1, 0, 0, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_au24c"] +shading_mode = 0 +albedo_color = Color(1, 0, 0, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_j2lf0"] +shading_mode = 0 +albedo_color = Color(0, 1, 0, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_x4pwl"] +shading_mode = 0 +albedo_color = Color(1, 0, 0, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_53uq1"] +shading_mode = 0 +albedo_color = Color(1, 0, 0, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_k604q"] + +[sub_resource type="PlaneMesh" id="PlaneMesh_mjcgt"] +material = SubResource("StandardMaterial3D_k604q") +size = Vector2(10, 10) + +[node name="Main" type="Node3D"] +script = ExtResource("1_fsva1") + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_m0xew") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(0.677077, -0.692092, 0.25015, 0.264251, 0.545897, 0.79509, -0.686831, -0.472235, 0.552501, 0, 0, 0) + +[node name="XROrigin3D" type="XROrigin3D" parent="."] +transform = Transform3D(0.813436, 0, 0.581655, 0, 1, 0, -0.581655, 0, 0.813436, 1.32074, 0, 1.72285) + +[node name="XRCamera3D" type="XRCamera3D" parent="XROrigin3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.352791, 0) + +[node name="LeftController" type="XRController3D" parent="XROrigin3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.460909, 0.388594, -0.241118) +tracker = &"left_hand" +pose = &"grip" + +[node name="OpenXRFbRenderModel" type="OpenXRFbRenderModel" parent="XROrigin3D/LeftController"] + +[node name="LeftControllerRayCast" type="RayCast3D" parent="XROrigin3D/LeftController"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.059, -0.052) +target_position = Vector3(0, -10, 0) +script = ExtResource("2_u4cnn") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="XROrigin3D/LeftController/LeftControllerRayCast"] +mesh = SubResource("CylinderMesh_is4ih") +surface_material_override/0 = SubResource("StandardMaterial3D_xpljd") + +[node name="RightController" type="XRController3D" parent="XROrigin3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.479, 0.389, -0.241) +tracker = &"right_hand" +pose = &"grip" + +[node name="OpenXRFbRenderModel" type="OpenXRFbRenderModel" parent="XROrigin3D/RightController"] +render_model_type = 1 + +[node name="RightControllerRayCast" type="RayCast3D" parent="XROrigin3D/RightController"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.059, -0.052) +target_position = Vector3(0, -10, 0) +script = ExtResource("2_u4cnn") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="XROrigin3D/RightController/RightControllerRayCast"] +mesh = SubResource("CylinderMesh_k07us") +surface_material_override/0 = SubResource("StandardMaterial3D_0b4kl") + +[node name="TurnTimer" type="Timer" parent="XROrigin3D"] +wait_time = 0.2 +one_shot = true + +[node name="OpenXRCompositionLayerQuad" type="OpenXRCompositionLayerQuad" parent="XROrigin3D" node_paths=PackedStringArray("layer_viewport") groups=["composition_layer"]] +transform = Transform3D(1, 0, -2.98023e-08, 0, 0.945712, -0.325007, 0, 0.325007, 0.945712, -5.96046e-08, 1.568, -2.37176) +layer_viewport = NodePath("../../QuadViewport") +sort_order = -1 +enable_hole_punch = true +quad_size = Vector2(1.5, 1.5) + +[node name="OpenXRCompositionLayerCylinder" type="OpenXRCompositionLayerCylinder" parent="XROrigin3D" node_paths=PackedStringArray("layer_viewport") groups=["composition_layer"]] +transform = Transform3D(0.671385, 0.0782645, 0.736964, -1.10785e-08, 0.994408, -0.105605, -0.741109, 0.0709012, 0.66763, -0.772507, 1.55166, -1.30867) +layer_viewport = NodePath("../../CylinderViewport") +sort_order = -1 +enable_hole_punch = true +radius = 0.75 + +[node name="OpenXRCompositionLayerEquirect" type="OpenXRCompositionLayerEquirect" parent="XROrigin3D" node_paths=PackedStringArray("layer_viewport") groups=["composition_layer"]] +transform = Transform3D(0.765506, -0.0578683, -0.640822, 2.39438e-09, 0.995947, -0.0899373, 0.643429, 0.0688475, 0.762403, 0.916254, 1.51524, -1.27907) +layer_viewport = NodePath("../../EquirectViewport") +sort_order = -1 +enable_hole_punch = true +radius = 0.75 + +[node name="HPDisabledCompositionLayer" type="OpenXRCompositionLayerQuad" parent="XROrigin3D" node_paths=PackedStringArray("layer_viewport") groups=["composition_layer"]] +transform = Transform3D(0.140538, 0, -0.990075, 0, 1, 0, 0.990075, 0, 0.140538, 1.89042, 1.11189, -0.494546) +layer_viewport = NodePath("../../NonHPViewport") + +[node name="HPEnabledCompositionLayer" type="OpenXRCompositionLayerQuad" parent="XROrigin3D" node_paths=PackedStringArray("layer_viewport") groups=["composition_layer"]] +transform = Transform3D(0.140538, 0, -0.990074, 0, 1, 0, 0.990074, 0, 0.140538, 1.88959, 2.13777, -0.497513) +layer_viewport = NodePath("../../HPViewport") +sort_order = -1 +enable_hole_punch = true + +[node name="SettingsCompositionLayer" type="OpenXRCompositionLayerCylinder" parent="XROrigin3D" node_paths=PackedStringArray("layer_viewport") groups=["composition_layer"]] +transform = Transform3D(-0.447884, 0, 0.894091, 0, 1, 0, -0.894091, 0, -0.447884, -0.876689, 1.43458, 2.10925) +layer_viewport = NodePath("../../SettingsViewport") + +[node name="Label3D" type="Label3D" parent="XROrigin3D/SettingsCompositionLayer"] +transform = Transform3D(1, 0, 1.49012e-07, 0, 1, 0, -1.49012e-07, 0, 1, 0.757602, 0.990318, -0.724057) +text = "Manual Layer Filtering" + +[node name="DisabledSupersampling" type="StaticBody3D" parent="XROrigin3D/SettingsCompositionLayer"] +transform = Transform3D(1, 0, -2.98023e-08, 0, 1, 0, 2.98023e-08, 0, 1, 1.25252, 0.432407, -0.74741) +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="XROrigin3D/SettingsCompositionLayer/DisabledSupersampling"] +shape = SubResource("BoxShape3D_7mtgu") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="XROrigin3D/SettingsCompositionLayer/DisabledSupersampling"] +mesh = SubResource("BoxMesh_3ttch") +surface_material_override/0 = SubResource("StandardMaterial3D_ccovu") + +[node name="Label3D" type="Label3D" parent="XROrigin3D/SettingsCompositionLayer/DisabledSupersampling"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.0654687) +text = "Disabled +Supersampling" +font_size = 16 + +[node name="NormalSupersampling" type="StaticBody3D" parent="XROrigin3D/SettingsCompositionLayer"] +transform = Transform3D(1, 0, -2.98023e-08, 0, 1, 0, 2.98023e-08, 0, 1, 1.25252, 0.0872573, -0.74741) +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="XROrigin3D/SettingsCompositionLayer/NormalSupersampling"] +shape = SubResource("BoxShape3D_7mtgu") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="XROrigin3D/SettingsCompositionLayer/NormalSupersampling"] +mesh = SubResource("BoxMesh_2e18c") +surface_material_override/0 = SubResource("StandardMaterial3D_7qm33") + +[node name="Label3D" type="Label3D" parent="XROrigin3D/SettingsCompositionLayer/NormalSupersampling"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.0654687) +text = "Normal +Supersampling" +font_size = 16 + +[node name="QualitySupersampling" type="StaticBody3D" parent="XROrigin3D/SettingsCompositionLayer"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.25252, -0.270333, -0.74741) +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="XROrigin3D/SettingsCompositionLayer/QualitySupersampling"] +shape = SubResource("BoxShape3D_7mtgu") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="XROrigin3D/SettingsCompositionLayer/QualitySupersampling"] +mesh = SubResource("BoxMesh_2e18c") +surface_material_override/0 = SubResource("StandardMaterial3D_81dfm") + +[node name="Label3D" type="Label3D" parent="XROrigin3D/SettingsCompositionLayer/QualitySupersampling"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.0654687) +text = "Quality +Supersampling" +font_size = 16 + +[node name="DisabledSharpening" type="StaticBody3D" parent="XROrigin3D/SettingsCompositionLayer"] +transform = Transform3D(1, 0, -2.98023e-08, 0, 1, 0, 2.98023e-08, 0, 1, 1.96023, 0.432407, -0.74741) +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="XROrigin3D/SettingsCompositionLayer/DisabledSharpening"] +shape = SubResource("BoxShape3D_7mtgu") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="XROrigin3D/SettingsCompositionLayer/DisabledSharpening"] +mesh = SubResource("BoxMesh_2e18c") +surface_material_override/0 = SubResource("StandardMaterial3D_uo2xa") + +[node name="Label3D" type="Label3D" parent="XROrigin3D/SettingsCompositionLayer/DisabledSharpening"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.0654687) +text = "Disabled +Sharpening" +font_size = 16 + +[node name="NormalSharpening" type="StaticBody3D" parent="XROrigin3D/SettingsCompositionLayer"] +transform = Transform3D(1, 0, -2.98023e-08, 0, 1, 0, 2.98023e-08, 0, 1, 1.96023, 0.0872573, -0.74741) +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="XROrigin3D/SettingsCompositionLayer/NormalSharpening"] +shape = SubResource("BoxShape3D_7mtgu") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="XROrigin3D/SettingsCompositionLayer/NormalSharpening"] +mesh = SubResource("BoxMesh_2e18c") +surface_material_override/0 = SubResource("StandardMaterial3D_sl84k") + +[node name="Label3D" type="Label3D" parent="XROrigin3D/SettingsCompositionLayer/NormalSharpening"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.0654687) +text = "Normal +Sharpening" +font_size = 16 + +[node name="QualitySharpening" type="StaticBody3D" parent="XROrigin3D/SettingsCompositionLayer"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.96023, -0.270333, -0.74741) +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="XROrigin3D/SettingsCompositionLayer/QualitySharpening"] +shape = SubResource("BoxShape3D_7mtgu") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="XROrigin3D/SettingsCompositionLayer/QualitySharpening"] +mesh = SubResource("BoxMesh_2e18c") +surface_material_override/0 = SubResource("StandardMaterial3D_au24c") + +[node name="Label3D" type="Label3D" parent="XROrigin3D/SettingsCompositionLayer/QualitySharpening"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.0654687) +text = "Quality +Sharpening" +font_size = 16 + +[node name="AutoSettingsCompositionLayer" type="OpenXRCompositionLayerCylinder" parent="XROrigin3D" node_paths=PackedStringArray("layer_viewport") groups=["composition_layer"]] +transform = Transform3D(0.485222, 0, 0.874391, 0, 1, 0, -0.874391, 0, 0.485222, -1.40387, 1.43458, -0.184307) +layer_viewport = NodePath("../../AutoSettingsViewport") +XR_FB_composition_layer_settings/auto/enable_auto_filter = true +XR_FB_composition_layer_settings/auto/options = 15 + +[node name="Label3D" type="Label3D" parent="XROrigin3D/AutoSettingsCompositionLayer"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0189411, 0.962373, -0.895034) +text = "Auto Layer Filtering" + +[node name="ABBaseCompositionLayer" type="OpenXRCompositionLayerQuad" parent="XROrigin3D" node_paths=PackedStringArray("layer_viewport") groups=["composition_layer"]] +transform = Transform3D(-0.24551, 0, -0.969392, 0, 1, 0, 0.969392, 0, -0.24551, 1.67856, 1.6875, 1.46923) +layer_viewport = NodePath("../../AlphaBlendBaseViewport") +sort_order = -1 +enable_hole_punch = true +quad_size = Vector2(2, 2) + +[node name="Label3D" type="Label3D" parent="XROrigin3D/ABBaseCompositionLayer"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0189411, 1.17098, 0.0236711) +text = "Alpha Blend" + +[node name="ABNormalCompositionLayer" type="OpenXRCompositionLayerQuad" parent="XROrigin3D" node_paths=PackedStringArray("layer_viewport") groups=["composition_layer"]] +transform = Transform3D(-0.24551, 0, -0.969392, 0, 1, 0, 0.969392, 0, -0.24551, 1.77818, 2.00648, 0.85672) +layer_viewport = NodePath("../../AlphaBlendNormalViewport") +sort_order = 2 +alpha_blend = true +quad_size = Vector2(0.33, 0.33) + +[node name="Label3D" type="Label3D" parent="XROrigin3D/ABNormalCompositionLayer"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.395301, 0) +text = "Normal Alpha" +font_size = 16 + +[node name="ABOneCompositionLayer" type="OpenXRCompositionLayerQuad" parent="XROrigin3D" node_paths=PackedStringArray("layer_viewport") groups=["composition_layer"]] +transform = Transform3D(-0.24551, 0, -0.969392, 0, 1, 0, 0.969392, 0, -0.24551, 1.62958, 2.00648, 1.44344) +layer_viewport = NodePath("../../AlphaBlendOneViewport") +sort_order = 2 +XR_FB_composition_layer_alpha_blend/enable_alpha_blend_extension = true +XR_FB_composition_layer_alpha_blend/destination_color_blend_factor = 1 +XR_FB_composition_layer_alpha_blend/destination_alpha_blend_factor = 1 +quad_size = Vector2(0.33, 0.33) + +[node name="Label3D" type="Label3D" parent="XROrigin3D/ABOneCompositionLayer"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.395301, 0) +text = "Src Color: One +Dst Color: One +Src Alpha: One +Dst Alpha: One" +font_size = 16 + +[node name="ABZeroCompositionLayer" type="OpenXRCompositionLayerQuad" parent="XROrigin3D" node_paths=PackedStringArray("layer_viewport") groups=["composition_layer"]] +transform = Transform3D(-0.24551, 0, -0.969392, 0, 1, 0, 0.969392, 0, -0.24551, 1.47291, 2.00648, 2.06203) +layer_viewport = NodePath("../../AlphaBlendZeroViewport") +sort_order = 2 +XR_FB_composition_layer_alpha_blend/enable_alpha_blend_extension = true +XR_FB_composition_layer_alpha_blend/source_color_blend_factor = 0 +XR_FB_composition_layer_alpha_blend/source_alpha_blend_factor = 0 +quad_size = Vector2(0.33, 0.33) + +[node name="Label3D" type="Label3D" parent="XROrigin3D/ABZeroCompositionLayer"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.395301, 0) +text = "Src Color: Zero +Dst Color: Zero +Src Alpha: Zero +Dst Alpha: Zero" +font_size = 16 + +[node name="ABSrcOneCompositionLayer" type="OpenXRCompositionLayerQuad" parent="XROrigin3D" node_paths=PackedStringArray("layer_viewport") groups=["composition_layer"]] +transform = Transform3D(-0.24551, 0, -0.969392, 0, 1, 0, 0.969392, 0, -0.24551, 1.78034, 1.09783, 0.848158) +layer_viewport = NodePath("../../AlphaBlendSrcOneViewport") +sort_order = 2 +XR_FB_composition_layer_alpha_blend/enable_alpha_blend_extension = true +quad_size = Vector2(0.33, 0.33) + +[node name="Label3D" type="Label3D" parent="XROrigin3D/ABSrcOneCompositionLayer"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.395301, 0) +text = "Src Color: One +Dst Color: Zero +Src Alpha: One +Dst Alpha: Zero" +font_size = 16 + +[node name="ABDstOneCompositionLayer" type="OpenXRCompositionLayerQuad" parent="XROrigin3D" node_paths=PackedStringArray("layer_viewport") groups=["composition_layer"]] +transform = Transform3D(-0.24551, 0, -0.969392, 0, 1, 0, 0.969392, 0, -0.24551, 1.62833, 1.09783, 1.44836) +layer_viewport = NodePath("../../AlphaBlendDstOneViewport") +sort_order = 2 +XR_FB_composition_layer_alpha_blend/enable_alpha_blend_extension = true +XR_FB_composition_layer_alpha_blend/source_color_blend_factor = 0 +XR_FB_composition_layer_alpha_blend/destination_color_blend_factor = 1 +XR_FB_composition_layer_alpha_blend/source_alpha_blend_factor = 0 +XR_FB_composition_layer_alpha_blend/destination_alpha_blend_factor = 1 +quad_size = Vector2(0.33, 0.33) + +[node name="Label3D" type="Label3D" parent="XROrigin3D/ABDstOneCompositionLayer"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.395301, 0) +text = "Src Color: Zero +Dst Color: One +Src Alpha: Zero +Dst Alpha: One" +font_size = 16 + +[node name="ABOneMinusCompositionLayer" type="OpenXRCompositionLayerQuad" parent="XROrigin3D" node_paths=PackedStringArray("layer_viewport") groups=["composition_layer"]] +transform = Transform3D(-0.24551, 0, -0.969392, 0, 1, 0, 0.969392, 0, -0.24551, 1.47416, 1.09783, 2.05712) +layer_viewport = NodePath("../../AlphaBlendOneMinusViewport") +sort_order = 2 +XR_FB_composition_layer_alpha_blend/enable_alpha_blend_extension = true +XR_FB_composition_layer_alpha_blend/source_color_blend_factor = 3 +XR_FB_composition_layer_alpha_blend/source_alpha_blend_factor = 3 +quad_size = Vector2(0.33, 0.33) + +[node name="Label3D" type="Label3D" parent="XROrigin3D/ABOneMinusCompositionLayer"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.395301, 0) +text = "Src Color: 1-SA +Dst Color: Zero +Src Alpha: 1-SA +Dst Alpha: Zero" +font_size = 16 + +[node name="SecureContentCompositionLayer" type="OpenXRCompositionLayerCylinder" parent="XROrigin3D" node_paths=PackedStringArray("layer_viewport") groups=["composition_layer"]] +transform = Transform3D(-0.966657, 0, -0.25607, 0, 1, 0, 0.25607, 0, -0.966657, 0.245687, 1.88364, 2.10131) +layer_viewport = NodePath("../../SecureContentViewport") + +[node name="Label3D" type="Label3D" parent="XROrigin3D/SecureContentCompositionLayer"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0189411, 0.962373, -0.895034) +text = "Secure Content" + +[node name="Label3D2" type="Label3D" parent="XROrigin3D/SecureContentCompositionLayer"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.365376, -1.15321, -0.895034) +text = "These settings will change +how the composition layer +appears when viewed via casting" + +[node name="DisplaySecureContent" type="StaticBody3D" parent="XROrigin3D/SecureContentCompositionLayer"] +transform = Transform3D(1, 0, -2.98023e-08, 0, 1, 0, 2.98023e-08, 0, 1, 1.12945, 0.489884, -0.855458) +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="XROrigin3D/SecureContentCompositionLayer/DisplaySecureContent"] +shape = SubResource("BoxShape3D_7mtgu") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="XROrigin3D/SecureContentCompositionLayer/DisplaySecureContent"] +mesh = SubResource("BoxMesh_3ttch") +surface_material_override/0 = SubResource("StandardMaterial3D_j2lf0") + +[node name="Label3D" type="Label3D" parent="XROrigin3D/SecureContentCompositionLayer/DisplaySecureContent"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.0654687) +text = "Display" +font_size = 16 + +[node name="ReplaceSecureContent" type="StaticBody3D" parent="XROrigin3D/SecureContentCompositionLayer"] +transform = Transform3D(1, 0, -2.98023e-08, 0, 1, 0, 2.98023e-08, 0, 1, 1.12945, 0.0932691, -0.855458) +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="XROrigin3D/SecureContentCompositionLayer/ReplaceSecureContent"] +shape = SubResource("BoxShape3D_7mtgu") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="XROrigin3D/SecureContentCompositionLayer/ReplaceSecureContent"] +mesh = SubResource("BoxMesh_3ttch") +surface_material_override/0 = SubResource("StandardMaterial3D_x4pwl") + +[node name="Label3D" type="Label3D" parent="XROrigin3D/SecureContentCompositionLayer/ReplaceSecureContent"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.0654687) +text = "Replace" +font_size = 16 + +[node name="ExcludeSecureContent" type="StaticBody3D" parent="XROrigin3D/SecureContentCompositionLayer"] +transform = Transform3D(1, 0, -2.98023e-08, 0, 1, 0, 2.98023e-08, 0, 1, 1.12945, -0.334742, -0.855458) +metadata/_edit_group_ = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="XROrigin3D/SecureContentCompositionLayer/ExcludeSecureContent"] +shape = SubResource("BoxShape3D_7mtgu") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="XROrigin3D/SecureContentCompositionLayer/ExcludeSecureContent"] +mesh = SubResource("BoxMesh_3ttch") +surface_material_override/0 = SubResource("StandardMaterial3D_53uq1") + +[node name="Label3D" type="Label3D" parent="XROrigin3D/SecureContentCompositionLayer/ExcludeSecureContent"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.0654687) +text = "Exclude" +font_size = 16 + +[node name="Floor" type="MeshInstance3D" parent="."] +mesh = SubResource("PlaneMesh_mjcgt") + +[node name="QuadViewport" type="SubViewport" parent="."] +disable_3d = true +gui_embed_subwindows = true +render_target_update_mode = 4 + +[node name="ExamplePanel" parent="QuadViewport" instance=ExtResource("6_kubns")] +display_string = "This is a Quad!" + +[node name="CylinderViewport" type="SubViewport" parent="."] +disable_3d = true +gui_embed_subwindows = true +render_target_update_mode = 4 + +[node name="ExamplePanel" parent="CylinderViewport" instance=ExtResource("6_kubns")] +display_string = "This is a Cylinder!" + +[node name="EquirectViewport" type="SubViewport" parent="."] +disable_3d = true +gui_embed_subwindows = true +render_target_update_mode = 4 + +[node name="ExamplePanel" parent="EquirectViewport" instance=ExtResource("6_kubns")] +display_string = "This is an Equirect!" + +[node name="NonHPViewport" type="SubViewport" parent="."] +render_target_update_mode = 4 + +[node name="Label" type="Label" parent="NonHPViewport"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_font_sizes/font_size = 32 +text = "Hole punch disabled +Sort order = 1" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="HPViewport" type="SubViewport" parent="."] +render_target_update_mode = 4 + +[node name="Label" type="Label" parent="HPViewport"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_font_sizes/font_size = 32 +text = "Hole punch enabled +Sort order = -1" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="SettingsViewport" type="SubViewport" parent="."] +size = Vector2i(2048, 2048) +render_target_update_mode = 4 + +[node name="TextEdit" type="TextEdit" parent="SettingsViewport"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam vulputate dignissim suspendisse in est ante. Bibendum arcu vitae elementum curabitur. Egestas purus viverra accumsan in nisl nisi scelerisque. Et pharetra pharetra massa massa ultricies mi quis hendrerit dolor. Turpis egestas sed tempus urna et pharetra. Donec massa sapien faucibus et. Nec ullamcorper sit amet risus nullam eget felis eget. Integer eget aliquet nibh praesent tristique magna sit amet. Tellus pellentesque eu tincidunt tortor aliquam nulla facilisi cras. Venenatis urna cursus eget nunc scelerisque viverra. Sapien eget mi proin sed libero. + +Non curabitur gravida arcu ac tortor. Euismod elementum nisi quis eleifend quam. Pulvinar etiam non quam lacus suspendisse faucibus interdum posuere. Massa id neque aliquam vestibulum morbi blandit cursus. Tellus id interdum velit laoreet id donec ultrices tincidunt arcu. Ultricies mi eget mauris pharetra et ultrices. Lorem sed risus ultricies tristique nulla. Faucibus ornare suspendisse sed nisi lacus. Libero enim sed faucibus turpis in. In ornare quam viverra orci sagittis eu volutpat odio facilisis. Malesuada fames ac turpis egestas sed. Vulputate odio ut enim blandit volutpat. Egestas tellus rutrum tellus pellentesque eu tincidunt tortor. Et egestas quis ipsum suspendisse ultrices gravida dictum. + +Justo eget magna fermentum iaculis eu non diam. Dui faucibus in ornare quam viverra. Risus nec feugiat in fermentum posuere urna. Eu scelerisque felis imperdiet proin fermentum leo vel. Massa vitae tortor condimentum lacinia quis. Vel pretium lectus quam id leo in vitae. Ornare quam viverra orci sagittis. Nisl pretium fusce id velit ut tortor pretium viverra suspendisse. Adipiscing elit duis tristique sollicitudin. Quis auctor elit sed vulputate mi. Ipsum consequat nisl vel pretium lectus quam id. Odio facilisis mauris sit amet massa vitae tortor condimentum. Eget nulla facilisi etiam dignissim diam quis enim. + +Eget sit amet tellus cras adipiscing enim eu turpis. Est placerat in egestas erat imperdiet sed euismod nisi. Tellus at urna condimentum mattis pellentesque id nibh tortor. Aliquet bibendum enim facilisis gravida neque convallis a. Ipsum suspendisse ultrices gravida dictum fusce ut placerat. Cras fermentum odio eu feugiat pretium. Vel turpis nunc eget lorem dolor sed. Sed faucibus turpis in eu mi. Proin sed libero enim sed faucibus turpis. Tortor id aliquet lectus proin nibh nisl condimentum. Tempus urna et pharetra pharetra massa massa ultricies mi. Dolor morbi non arcu risus quis varius. Porttitor eget dolor morbi non arcu. Amet nisl purus in mollis nunc sed id. Tellus cras adipiscing enim eu. Aliquet lectus proin nibh nisl condimentum id. Volutpat ac tincidunt vitae semper quis lectus nulla. + +At varius vel pharetra vel turpis nunc eget. Leo vel orci porta non. In iaculis nunc sed augue lacus viverra. Amet venenatis urna cursus eget nunc scelerisque. Mauris a diam maecenas sed enim ut sem viverra. Mattis ullamcorper velit sed ullamcorper morbi tincidunt ornare. Vitae congue mauris rhoncus aenean. Elit pellentesque habitant morbi tristique senectus et netus et. Mattis nunc sed blandit libero. Vitae nunc sed velit dignissim sodales ut eu sem integer. Ullamcorper eget nulla facilisi etiam. Pulvinar mattis nunc sed blandit libero. Hac habitasse platea dictumst quisque. Egestas sed tempus urna et pharetra pharetra massa massa ultricies. Eu lobortis elementum nibh tellus molestie. + +Id nibh tortor id aliquet lectus. Purus semper eget duis at tellus at urna condimentum mattis. Lectus vestibulum mattis ullamcorper velit sed ullamcorper morbi tincidunt. Sollicitudin tempor id eu nisl. Ullamcorper dignissim cras tincidunt lobortis feugiat. Ultrices vitae auctor eu augue ut lectus. Massa massa ultricies mi quis hendrerit dolor magna eget est. Dui sapien eget mi proin sed libero enim. Id neque aliquam vestibulum morbi blandit cursus. At urna condimentum mattis pellentesque id nibh tortor id aliquet. Quam lacus suspendisse faucibus interdum posuere lorem. Sapien nec sagittis aliquam malesuada bibendum arcu vitae. Non blandit massa enim nec. Sollicitudin tempor id eu nisl nunc mi. + +Et odio pellentesque diam volutpat commodo sed. Aliquet enim tortor at auctor urna nunc id. Nunc aliquet bibendum enim facilisis gravida. Ultrices mi tempus imperdiet nulla malesuada pellentesque elit. Nibh nisl condimentum id venenatis a condimentum. Fusce id velit ut tortor pretium viverra suspendisse potenti nullam. Posuere ac ut consequat semper. Fringilla est ullamcorper eget nulla facilisi etiam dignissim diam quis. Volutpat ac tincidunt vitae semper. Posuere lorem ipsum dolor sit amet consectetur. Aenean euismod elementum nisi quis eleifend quam adipiscing. Sit amet justo donec enim diam. Ante metus dictum at tempor. Tristique senectus et netus et malesuada fames ac. Nunc sed augue lacus viverra. + +Ut placerat orci nulla pellentesque dignissim enim. Eget lorem dolor sed viverra ipsum. Vel risus commodo viverra maecenas accumsan lacus. Suspendisse sed nisi lacus sed viverra tellus. Eu mi bibendum neque egestas congue quisque egestas diam. Fusce ut placerat orci nulla pellentesque. Nunc scelerisque viverra mauris in aliquam sem. Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Donec pretium vulputate sapien nec sagittis. Cursus metus aliquam eleifend mi in nulla posuere sollicitudin aliquam. Arcu non odio euismod lacinia at. Ultrices tincidunt arcu non sodales neque sodales ut etiam. Lorem donec massa sapien faucibus. Et netus et malesuada fames ac. Lacus suspendisse faucibus interdum posuere lorem ipsum. Ornare lectus sit amet est placerat in egestas erat imperdiet. Ultrices sagittis orci a scelerisque purus. Sociis natoque penatibus et magnis dis parturient montes nascetur ridiculus. Tellus cras adipiscing enim eu turpis egestas pretium aenean. Turpis massa tincidunt dui ut ornare lectus sit amet. + +Massa sed elementum tempus egestas. Massa sed elementum tempus egestas sed sed risus. Etiam sit amet nisl purus in mollis nunc. Venenatis cras sed felis eget velit. Metus aliquam eleifend mi in nulla posuere. Mattis molestie a iaculis at erat pellentesque. Mi proin sed libero enim sed faucibus turpis in. Accumsan in nisl nisi scelerisque eu ultrices vitae auctor eu. Mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus et. Mauris cursus mattis molestie a iaculis at. Ultrices mi tempus imperdiet nulla. Est ultricies integer quis auctor elit sed vulputate mi. Eget velit aliquet sagittis id consectetur purus. Maecenas ultricies mi eget mauris pharetra et ultrices neque ornare. Enim nunc faucibus a pellentesque sit amet porttitor eget dolor. + +Velit egestas dui id ornare. In cursus turpis massa tincidunt dui ut ornare lectus sit. Mattis rhoncus urna neque viverra. Egestas purus viverra accumsan in nisl nisi scelerisque eu ultrices. Eu augue ut lectus arcu bibendum at varius. Platea dictumst vestibulum rhoncus est pellentesque elit. Facilisis magna etiam tempor orci eu lobortis elementum nibh. Enim facilisis gravida neque convallis a cras semper. Sit amet tellus cras adipiscing enim eu turpis. Habitant morbi tristique senectus et netus et malesuada fames ac. Eget felis eget nunc lobortis mattis aliquam faucibus purus. Cursus vitae congue mauris rhoncus aenean vel elit scelerisque mauris. Eu tincidunt tortor aliquam nulla facilisi cras fermentum odio eu. Lobortis mattis aliquam faucibus purus in massa tempor nec. Ultricies mi eget mauris pharetra et ultrices neque ornare aenean. Turpis tincidunt id aliquet risus feugiat in ante metus. Suscipit tellus mauris a diam. Egestas quis ipsum suspendisse ultrices gravida dictum. Neque viverra justo nec ultrices dui sapien eget mi proin. + +Duis at consectetur lorem donec massa sapien faucibus et molestie. Enim ut sem viverra aliquet eget sit amet. Tempor orci dapibus ultrices in iaculis nunc. Sit amet nisl suscipit adipiscing bibendum est ultricies. Lorem dolor sed viverra ipsum. Elementum nibh tellus molestie nunc non. Turpis massa tincidunt dui ut. Pellentesque massa placerat duis ultricies lacus sed. Nunc sed velit dignissim sodales ut eu sem integer vitae. Tortor aliquam nulla facilisi cras fermentum odio. Convallis aenean et tortor at risus viverra adipiscing at in. Ut sem viverra aliquet eget sit amet. Amet aliquam id diam maecenas. Integer eget aliquet nibh praesent. Morbi non arcu risus quis varius quam quisque id. Faucibus a pellentesque sit amet porttitor eget dolor morbi non. Magna fermentum iaculis eu non diam. + +Id consectetur purus ut faucibus. Adipiscing elit ut aliquam purus sit amet luctus venenatis lectus. At varius vel pharetra vel turpis. Fermentum posuere urna nec tincidunt praesent semper feugiat. Elementum eu facilisis sed odio morbi. Augue interdum velit euismod in pellentesque massa placerat duis ultricies. Tempus egestas sed sed risus pretium. Condimentum mattis pellentesque id nibh. Sit amet massa vitae tortor condimentum lacinia quis vel eros. Dui vivamus arcu felis bibendum ut tristique et egestas quis. Ultricies lacus sed turpis tincidunt. Sit amet risus nullam eget. Cursus mattis molestie a iaculis at erat pellentesque adipiscing. Proin fermentum leo vel orci porta non. Sed velit dignissim sodales ut. Nulla facilisi morbi tempus iaculis urna id. Parturient montes nascetur ridiculus mus. Sed tempus urna et pharetra pharetra massa massa. Maecenas pharetra convallis posuere morbi. At risus viverra adipiscing at in tellus integer feugiat. + +Facilisis sed odio morbi quis commodo odio. Tortor at auctor urna nunc id cursus metus. Id semper risus in hendrerit gravida rutrum quisque. Diam sit amet nisl suscipit adipiscing bibendum est ultricies. Vulputate sapien nec sagittis aliquam malesuada bibendum arcu. Senectus et netus et malesuada. Volutpat sed cras ornare arcu dui vivamus arcu felis bibendum. Nisi vitae suscipit tellus mauris a. Senectus et netus et malesuada fames. Non quam lacus suspendisse faucibus interdum posuere lorem ipsum. Amet venenatis urna cursus eget nunc. Malesuada fames ac turpis egestas. Sed nisi lacus sed viverra tellus in. Nunc eget lorem dolor sed. Nisl purus in mollis nunc sed id semper risus in. Suscipit tellus mauris a diam maecenas sed enim. Lectus arcu bibendum at varius vel pharetra vel turpis nunc. + +Non diam phasellus vestibulum lorem sed risus. Morbi enim nunc faucibus a pellentesque sit. Libero justo laoreet sit amet cursus sit. Faucibus purus in massa tempor nec feugiat nisl pretium fusce. Pulvinar pellentesque habitant morbi tristique senectus et. Elementum sagittis vitae et leo duis ut diam quam. Vel facilisis volutpat est velit egestas dui. Euismod in pellentesque massa placerat duis ultricies. Sem et tortor consequat id porta nibh venenatis. Nunc sed blandit libero volutpat sed cras ornare arcu. Mi ipsum faucibus vitae aliquet nec. Pretium quam vulputate dignissim suspendisse. + +Ac tortor vitae purus faucibus ornare suspendisse sed nisi. Eget gravida cum sociis natoque penatibus et. Consectetur lorem donec massa sapien faucibus et. At consectetur lorem donec massa sapien faucibus et molestie ac. Malesuada pellentesque elit eget gravida. Auctor augue mauris augue neque gravida in fermentum et. In est ante in nibh mauris cursus mattis molestie. Mus mauris vitae ultricies leo integer malesuada nunc. Dictum sit amet justo donec enim diam vulputate ut. Amet consectetur adipiscing elit pellentesque habitant morbi. Ultrices neque ornare aenean euismod elementum nisi quis eleifend. Ullamcorper morbi tincidunt ornare massa eget. Morbi enim nunc faucibus a pellentesque sit amet porttitor. Aliquet sagittis id consectetur purus ut faucibus pulvinar. Sed elementum tempus egestas sed sed risus. Quis risus sed vulputate odio ut enim blandit. Vestibulum sed arcu non odio euismod lacinia at quis. Lacinia quis vel eros donec ac odio tempor orci. + +Egestas congue quisque egestas diam in arcu cursus euismod. Eu lobortis elementum nibh tellus molestie nunc non. Arcu dui vivamus arcu felis bibendum. Sagittis vitae et leo duis ut. Lorem sed risus ultricies tristique nulla aliquet enim tortor at. Nec tincidunt praesent semper feugiat nibh sed pulvinar proin. Id eu nisl nunc mi. Sed vulputate mi sit amet mauris commodo. Diam donec adipiscing tristique risus nec feugiat in fermentum. Condimentum mattis pellentesque id nibh tortor id aliquet lectus proin. Vitae turpis massa sed elementum tempus egestas sed. Enim ut sem viverra aliquet eget. Mauris rhoncus aenean vel elit. Ornare arcu odio ut sem nulla pharetra diam sit amet. Nisl nisi scelerisque eu ultrices vitae auctor eu augue ut. Adipiscing elit pellentesque habitant morbi tristique senectus et netus. Convallis aenean et tortor at risus viverra adipiscing at in. Ipsum dolor sit amet consectetur adipiscing elit." +wrap_mode = 1 + +[node name="AutoSettingsViewport" type="SubViewport" parent="."] +size = Vector2i(2048, 2048) +render_target_update_mode = 4 + +[node name="TextEdit" type="TextEdit" parent="AutoSettingsViewport"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam vulputate dignissim suspendisse in est ante. Bibendum arcu vitae elementum curabitur. Egestas purus viverra accumsan in nisl nisi scelerisque. Et pharetra pharetra massa massa ultricies mi quis hendrerit dolor. Turpis egestas sed tempus urna et pharetra. Donec massa sapien faucibus et. Nec ullamcorper sit amet risus nullam eget felis eget. Integer eget aliquet nibh praesent tristique magna sit amet. Tellus pellentesque eu tincidunt tortor aliquam nulla facilisi cras. Venenatis urna cursus eget nunc scelerisque viverra. Sapien eget mi proin sed libero. + +Non curabitur gravida arcu ac tortor. Euismod elementum nisi quis eleifend quam. Pulvinar etiam non quam lacus suspendisse faucibus interdum posuere. Massa id neque aliquam vestibulum morbi blandit cursus. Tellus id interdum velit laoreet id donec ultrices tincidunt arcu. Ultricies mi eget mauris pharetra et ultrices. Lorem sed risus ultricies tristique nulla. Faucibus ornare suspendisse sed nisi lacus. Libero enim sed faucibus turpis in. In ornare quam viverra orci sagittis eu volutpat odio facilisis. Malesuada fames ac turpis egestas sed. Vulputate odio ut enim blandit volutpat. Egestas tellus rutrum tellus pellentesque eu tincidunt tortor. Et egestas quis ipsum suspendisse ultrices gravida dictum. + +Justo eget magna fermentum iaculis eu non diam. Dui faucibus in ornare quam viverra. Risus nec feugiat in fermentum posuere urna. Eu scelerisque felis imperdiet proin fermentum leo vel. Massa vitae tortor condimentum lacinia quis. Vel pretium lectus quam id leo in vitae. Ornare quam viverra orci sagittis. Nisl pretium fusce id velit ut tortor pretium viverra suspendisse. Adipiscing elit duis tristique sollicitudin. Quis auctor elit sed vulputate mi. Ipsum consequat nisl vel pretium lectus quam id. Odio facilisis mauris sit amet massa vitae tortor condimentum. Eget nulla facilisi etiam dignissim diam quis enim. + +Eget sit amet tellus cras adipiscing enim eu turpis. Est placerat in egestas erat imperdiet sed euismod nisi. Tellus at urna condimentum mattis pellentesque id nibh tortor. Aliquet bibendum enim facilisis gravida neque convallis a. Ipsum suspendisse ultrices gravida dictum fusce ut placerat. Cras fermentum odio eu feugiat pretium. Vel turpis nunc eget lorem dolor sed. Sed faucibus turpis in eu mi. Proin sed libero enim sed faucibus turpis. Tortor id aliquet lectus proin nibh nisl condimentum. Tempus urna et pharetra pharetra massa massa ultricies mi. Dolor morbi non arcu risus quis varius. Porttitor eget dolor morbi non arcu. Amet nisl purus in mollis nunc sed id. Tellus cras adipiscing enim eu. Aliquet lectus proin nibh nisl condimentum id. Volutpat ac tincidunt vitae semper quis lectus nulla. + +At varius vel pharetra vel turpis nunc eget. Leo vel orci porta non. In iaculis nunc sed augue lacus viverra. Amet venenatis urna cursus eget nunc scelerisque. Mauris a diam maecenas sed enim ut sem viverra. Mattis ullamcorper velit sed ullamcorper morbi tincidunt ornare. Vitae congue mauris rhoncus aenean. Elit pellentesque habitant morbi tristique senectus et netus et. Mattis nunc sed blandit libero. Vitae nunc sed velit dignissim sodales ut eu sem integer. Ullamcorper eget nulla facilisi etiam. Pulvinar mattis nunc sed blandit libero. Hac habitasse platea dictumst quisque. Egestas sed tempus urna et pharetra pharetra massa massa ultricies. Eu lobortis elementum nibh tellus molestie. + +Id nibh tortor id aliquet lectus. Purus semper eget duis at tellus at urna condimentum mattis. Lectus vestibulum mattis ullamcorper velit sed ullamcorper morbi tincidunt. Sollicitudin tempor id eu nisl. Ullamcorper dignissim cras tincidunt lobortis feugiat. Ultrices vitae auctor eu augue ut lectus. Massa massa ultricies mi quis hendrerit dolor magna eget est. Dui sapien eget mi proin sed libero enim. Id neque aliquam vestibulum morbi blandit cursus. At urna condimentum mattis pellentesque id nibh tortor id aliquet. Quam lacus suspendisse faucibus interdum posuere lorem. Sapien nec sagittis aliquam malesuada bibendum arcu vitae. Non blandit massa enim nec. Sollicitudin tempor id eu nisl nunc mi. + +Et odio pellentesque diam volutpat commodo sed. Aliquet enim tortor at auctor urna nunc id. Nunc aliquet bibendum enim facilisis gravida. Ultrices mi tempus imperdiet nulla malesuada pellentesque elit. Nibh nisl condimentum id venenatis a condimentum. Fusce id velit ut tortor pretium viverra suspendisse potenti nullam. Posuere ac ut consequat semper. Fringilla est ullamcorper eget nulla facilisi etiam dignissim diam quis. Volutpat ac tincidunt vitae semper. Posuere lorem ipsum dolor sit amet consectetur. Aenean euismod elementum nisi quis eleifend quam adipiscing. Sit amet justo donec enim diam. Ante metus dictum at tempor. Tristique senectus et netus et malesuada fames ac. Nunc sed augue lacus viverra. + +Ut placerat orci nulla pellentesque dignissim enim. Eget lorem dolor sed viverra ipsum. Vel risus commodo viverra maecenas accumsan lacus. Suspendisse sed nisi lacus sed viverra tellus. Eu mi bibendum neque egestas congue quisque egestas diam. Fusce ut placerat orci nulla pellentesque. Nunc scelerisque viverra mauris in aliquam sem. Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Donec pretium vulputate sapien nec sagittis. Cursus metus aliquam eleifend mi in nulla posuere sollicitudin aliquam. Arcu non odio euismod lacinia at. Ultrices tincidunt arcu non sodales neque sodales ut etiam. Lorem donec massa sapien faucibus. Et netus et malesuada fames ac. Lacus suspendisse faucibus interdum posuere lorem ipsum. Ornare lectus sit amet est placerat in egestas erat imperdiet. Ultrices sagittis orci a scelerisque purus. Sociis natoque penatibus et magnis dis parturient montes nascetur ridiculus. Tellus cras adipiscing enim eu turpis egestas pretium aenean. Turpis massa tincidunt dui ut ornare lectus sit amet. + +Massa sed elementum tempus egestas. Massa sed elementum tempus egestas sed sed risus. Etiam sit amet nisl purus in mollis nunc. Venenatis cras sed felis eget velit. Metus aliquam eleifend mi in nulla posuere. Mattis molestie a iaculis at erat pellentesque. Mi proin sed libero enim sed faucibus turpis in. Accumsan in nisl nisi scelerisque eu ultrices vitae auctor eu. Mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus et. Mauris cursus mattis molestie a iaculis at. Ultrices mi tempus imperdiet nulla. Est ultricies integer quis auctor elit sed vulputate mi. Eget velit aliquet sagittis id consectetur purus. Maecenas ultricies mi eget mauris pharetra et ultrices neque ornare. Enim nunc faucibus a pellentesque sit amet porttitor eget dolor. + +Velit egestas dui id ornare. In cursus turpis massa tincidunt dui ut ornare lectus sit. Mattis rhoncus urna neque viverra. Egestas purus viverra accumsan in nisl nisi scelerisque eu ultrices. Eu augue ut lectus arcu bibendum at varius. Platea dictumst vestibulum rhoncus est pellentesque elit. Facilisis magna etiam tempor orci eu lobortis elementum nibh. Enim facilisis gravida neque convallis a cras semper. Sit amet tellus cras adipiscing enim eu turpis. Habitant morbi tristique senectus et netus et malesuada fames ac. Eget felis eget nunc lobortis mattis aliquam faucibus purus. Cursus vitae congue mauris rhoncus aenean vel elit scelerisque mauris. Eu tincidunt tortor aliquam nulla facilisi cras fermentum odio eu. Lobortis mattis aliquam faucibus purus in massa tempor nec. Ultricies mi eget mauris pharetra et ultrices neque ornare aenean. Turpis tincidunt id aliquet risus feugiat in ante metus. Suscipit tellus mauris a diam. Egestas quis ipsum suspendisse ultrices gravida dictum. Neque viverra justo nec ultrices dui sapien eget mi proin. + +Duis at consectetur lorem donec massa sapien faucibus et molestie. Enim ut sem viverra aliquet eget sit amet. Tempor orci dapibus ultrices in iaculis nunc. Sit amet nisl suscipit adipiscing bibendum est ultricies. Lorem dolor sed viverra ipsum. Elementum nibh tellus molestie nunc non. Turpis massa tincidunt dui ut. Pellentesque massa placerat duis ultricies lacus sed. Nunc sed velit dignissim sodales ut eu sem integer vitae. Tortor aliquam nulla facilisi cras fermentum odio. Convallis aenean et tortor at risus viverra adipiscing at in. Ut sem viverra aliquet eget sit amet. Amet aliquam id diam maecenas. Integer eget aliquet nibh praesent. Morbi non arcu risus quis varius quam quisque id. Faucibus a pellentesque sit amet porttitor eget dolor morbi non. Magna fermentum iaculis eu non diam. + +Id consectetur purus ut faucibus. Adipiscing elit ut aliquam purus sit amet luctus venenatis lectus. At varius vel pharetra vel turpis. Fermentum posuere urna nec tincidunt praesent semper feugiat. Elementum eu facilisis sed odio morbi. Augue interdum velit euismod in pellentesque massa placerat duis ultricies. Tempus egestas sed sed risus pretium. Condimentum mattis pellentesque id nibh. Sit amet massa vitae tortor condimentum lacinia quis vel eros. Dui vivamus arcu felis bibendum ut tristique et egestas quis. Ultricies lacus sed turpis tincidunt. Sit amet risus nullam eget. Cursus mattis molestie a iaculis at erat pellentesque adipiscing. Proin fermentum leo vel orci porta non. Sed velit dignissim sodales ut. Nulla facilisi morbi tempus iaculis urna id. Parturient montes nascetur ridiculus mus. Sed tempus urna et pharetra pharetra massa massa. Maecenas pharetra convallis posuere morbi. At risus viverra adipiscing at in tellus integer feugiat. + +Facilisis sed odio morbi quis commodo odio. Tortor at auctor urna nunc id cursus metus. Id semper risus in hendrerit gravida rutrum quisque. Diam sit amet nisl suscipit adipiscing bibendum est ultricies. Vulputate sapien nec sagittis aliquam malesuada bibendum arcu. Senectus et netus et malesuada. Volutpat sed cras ornare arcu dui vivamus arcu felis bibendum. Nisi vitae suscipit tellus mauris a. Senectus et netus et malesuada fames. Non quam lacus suspendisse faucibus interdum posuere lorem ipsum. Amet venenatis urna cursus eget nunc. Malesuada fames ac turpis egestas. Sed nisi lacus sed viverra tellus in. Nunc eget lorem dolor sed. Nisl purus in mollis nunc sed id semper risus in. Suscipit tellus mauris a diam maecenas sed enim. Lectus arcu bibendum at varius vel pharetra vel turpis nunc. + +Non diam phasellus vestibulum lorem sed risus. Morbi enim nunc faucibus a pellentesque sit. Libero justo laoreet sit amet cursus sit. Faucibus purus in massa tempor nec feugiat nisl pretium fusce. Pulvinar pellentesque habitant morbi tristique senectus et. Elementum sagittis vitae et leo duis ut diam quam. Vel facilisis volutpat est velit egestas dui. Euismod in pellentesque massa placerat duis ultricies. Sem et tortor consequat id porta nibh venenatis. Nunc sed blandit libero volutpat sed cras ornare arcu. Mi ipsum faucibus vitae aliquet nec. Pretium quam vulputate dignissim suspendisse. + +Ac tortor vitae purus faucibus ornare suspendisse sed nisi. Eget gravida cum sociis natoque penatibus et. Consectetur lorem donec massa sapien faucibus et. At consectetur lorem donec massa sapien faucibus et molestie ac. Malesuada pellentesque elit eget gravida. Auctor augue mauris augue neque gravida in fermentum et. In est ante in nibh mauris cursus mattis molestie. Mus mauris vitae ultricies leo integer malesuada nunc. Dictum sit amet justo donec enim diam vulputate ut. Amet consectetur adipiscing elit pellentesque habitant morbi. Ultrices neque ornare aenean euismod elementum nisi quis eleifend. Ullamcorper morbi tincidunt ornare massa eget. Morbi enim nunc faucibus a pellentesque sit amet porttitor. Aliquet sagittis id consectetur purus ut faucibus pulvinar. Sed elementum tempus egestas sed sed risus. Quis risus sed vulputate odio ut enim blandit. Vestibulum sed arcu non odio euismod lacinia at quis. Lacinia quis vel eros donec ac odio tempor orci. + +Egestas congue quisque egestas diam in arcu cursus euismod. Eu lobortis elementum nibh tellus molestie nunc non. Arcu dui vivamus arcu felis bibendum. Sagittis vitae et leo duis ut. Lorem sed risus ultricies tristique nulla aliquet enim tortor at. Nec tincidunt praesent semper feugiat nibh sed pulvinar proin. Id eu nisl nunc mi. Sed vulputate mi sit amet mauris commodo. Diam donec adipiscing tristique risus nec feugiat in fermentum. Condimentum mattis pellentesque id nibh tortor id aliquet lectus proin. Vitae turpis massa sed elementum tempus egestas sed. Enim ut sem viverra aliquet eget. Mauris rhoncus aenean vel elit. Ornare arcu odio ut sem nulla pharetra diam sit amet. Nisl nisi scelerisque eu ultrices vitae auctor eu augue ut. Adipiscing elit pellentesque habitant morbi tristique senectus et netus. Convallis aenean et tortor at risus viverra adipiscing at in. Ipsum dolor sit amet consectetur adipiscing elit." +wrap_mode = 1 + +[node name="AlphaBlendBaseViewport" type="SubViewport" parent="."] +transparent_bg = true +render_target_update_mode = 4 + +[node name="TextureRect" type="TextureRect" parent="AlphaBlendBaseViewport"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("4_wy534") + +[node name="AlphaBlendNormalViewport" type="SubViewport" parent="."] +transparent_bg = true +render_target_update_mode = 4 + +[node name="TextureRect" type="TextureRect" parent="AlphaBlendNormalViewport"] +modulate = Color(1, 1, 1, 0.588235) +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("4_wy534") + +[node name="AlphaBlendOneViewport" type="SubViewport" parent="."] +transparent_bg = true +render_target_update_mode = 4 + +[node name="TextureRect" type="TextureRect" parent="AlphaBlendOneViewport"] +modulate = Color(1, 1, 1, 0.588235) +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("4_wy534") + +[node name="AlphaBlendZeroViewport" type="SubViewport" parent="."] +transparent_bg = true +render_target_update_mode = 4 + +[node name="TextureRect" type="TextureRect" parent="AlphaBlendZeroViewport"] +modulate = Color(1, 1, 1, 0.588235) +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("4_wy534") + +[node name="AlphaBlendSrcOneViewport" type="SubViewport" parent="."] +transparent_bg = true +render_target_update_mode = 4 + +[node name="TextureRect" type="TextureRect" parent="AlphaBlendSrcOneViewport"] +modulate = Color(1, 1, 1, 0.588235) +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("4_wy534") + +[node name="AlphaBlendDstOneViewport" type="SubViewport" parent="."] +transparent_bg = true +render_target_update_mode = 4 + +[node name="TextureRect" type="TextureRect" parent="AlphaBlendDstOneViewport"] +modulate = Color(1, 1, 1, 0.588235) +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("4_wy534") + +[node name="AlphaBlendOneMinusViewport" type="SubViewport" parent="."] +transparent_bg = true +render_target_update_mode = 4 + +[node name="TextureRect" type="TextureRect" parent="AlphaBlendOneMinusViewport"] +modulate = Color(1, 1, 1, 0.588235) +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("4_wy534") + +[node name="SecureContentViewport" type="SubViewport" parent="."] +render_target_update_mode = 4 + +[node name="TextureRect" type="TextureRect" parent="SecureContentViewport"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("4_wy534") + +[connection signal="button_pressed" from="XROrigin3D/LeftController" to="." method="_on_left_controller_button_pressed"] +[connection signal="input_vector2_changed" from="XROrigin3D/LeftController" to="." method="_on_left_controller_input_vector_2_changed"] +[connection signal="button_pressed" from="XROrigin3D/RightController" to="." method="_on_right_hand_button_pressed"] +[connection signal="input_vector2_changed" from="XROrigin3D/RightController" to="." method="_on_right_controller_input_vector_2_changed"] diff --git a/samples/fb-composition-layers-sample/openxr_action_map.tres b/samples/fb-composition-layers-sample/openxr_action_map.tres new file mode 100644 index 00000000..1768b079 --- /dev/null +++ b/samples/fb-composition-layers-sample/openxr_action_map.tres @@ -0,0 +1,885 @@ +[gd_resource type="OpenXRActionMap" load_steps=210 format=3 uid="uid://j6gmegycsx3m"] + +[sub_resource type="OpenXRAction" id="OpenXRAction_v1tfl"] +resource_name = "trigger" +localized_name = "Trigger" +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_4p24q"] +resource_name = "trigger_click" +localized_name = "Trigger click" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_whe2n"] +resource_name = "trigger_touch" +localized_name = "Trigger touching" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_13s22"] +resource_name = "grip" +localized_name = "Grip" +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_cj3we"] +resource_name = "grip_click" +localized_name = "Grip click" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_v7xp5"] +resource_name = "grip_force" +localized_name = "Grip force" +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_dl6w2"] +resource_name = "primary" +localized_name = "Primary joystick/thumbstick/trackpad" +action_type = 2 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_i1g0i"] +resource_name = "primary_click" +localized_name = "Primary joystick/thumbstick/trackpad click" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_4la1n"] +resource_name = "primary_touch" +localized_name = "Primary joystick/thumbstick/trackpad touching" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_f3fqy"] +resource_name = "secondary" +localized_name = "Secondary joystick/thumbstick/trackpad" +action_type = 2 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_337ox"] +resource_name = "secondary_click" +localized_name = "Secondary joystick/thumbstick/trackpad click" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_lv8y2"] +resource_name = "secondary_touch" +localized_name = "Secondary joystick/thumbstick/trackpad touching" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_spm4n"] +resource_name = "menu_button" +localized_name = "Menu button" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_ok0wc"] +resource_name = "select_button" +localized_name = "Select button" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_0gbo1"] +resource_name = "ax_button" +localized_name = "A/X button" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_dlclo"] +resource_name = "ax_touch" +localized_name = "A/X touching" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_hdvv8"] +resource_name = "by_button" +localized_name = "B/Y button" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_ti7q2"] +resource_name = "by_touch" +localized_name = "B/Y touching" +action_type = 0 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_2mhc1"] +resource_name = "default_pose" +localized_name = "Default pose" +action_type = 3 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right", "/user/vive_tracker_htcx/role/left_foot", "/user/vive_tracker_htcx/role/right_foot", "/user/vive_tracker_htcx/role/left_shoulder", "/user/vive_tracker_htcx/role/right_shoulder", "/user/vive_tracker_htcx/role/left_elbow", "/user/vive_tracker_htcx/role/right_elbow", "/user/vive_tracker_htcx/role/left_knee", "/user/vive_tracker_htcx/role/right_knee", "/user/vive_tracker_htcx/role/waist", "/user/vive_tracker_htcx/role/chest", "/user/vive_tracker_htcx/role/camera", "/user/vive_tracker_htcx/role/keyboard", "/user/eyes_ext") + +[sub_resource type="OpenXRAction" id="OpenXRAction_qkbr7"] +resource_name = "aim_pose" +localized_name = "Aim pose" +action_type = 3 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_u5uoa"] +resource_name = "grip_pose" +localized_name = "Grip pose" +action_type = 3 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_c0sht"] +resource_name = "palm_pose" +localized_name = "Palm pose" +action_type = 3 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") + +[sub_resource type="OpenXRAction" id="OpenXRAction_8dhib"] +resource_name = "haptic" +localized_name = "Haptic" +action_type = 4 +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right", "/user/vive_tracker_htcx/role/left_foot", "/user/vive_tracker_htcx/role/right_foot", "/user/vive_tracker_htcx/role/left_shoulder", "/user/vive_tracker_htcx/role/right_shoulder", "/user/vive_tracker_htcx/role/left_elbow", "/user/vive_tracker_htcx/role/right_elbow", "/user/vive_tracker_htcx/role/left_knee", "/user/vive_tracker_htcx/role/right_knee", "/user/vive_tracker_htcx/role/waist", "/user/vive_tracker_htcx/role/chest", "/user/vive_tracker_htcx/role/camera", "/user/vive_tracker_htcx/role/keyboard") + +[sub_resource type="OpenXRActionSet" id="OpenXRActionSet_5j4cb"] +resource_name = "godot" +localized_name = "Godot action set" +actions = [SubResource("OpenXRAction_v1tfl"), SubResource("OpenXRAction_4p24q"), SubResource("OpenXRAction_whe2n"), SubResource("OpenXRAction_13s22"), SubResource("OpenXRAction_cj3we"), SubResource("OpenXRAction_v7xp5"), SubResource("OpenXRAction_dl6w2"), SubResource("OpenXRAction_i1g0i"), SubResource("OpenXRAction_4la1n"), SubResource("OpenXRAction_f3fqy"), SubResource("OpenXRAction_337ox"), SubResource("OpenXRAction_lv8y2"), SubResource("OpenXRAction_spm4n"), SubResource("OpenXRAction_ok0wc"), SubResource("OpenXRAction_0gbo1"), SubResource("OpenXRAction_dlclo"), SubResource("OpenXRAction_hdvv8"), SubResource("OpenXRAction_ti7q2"), SubResource("OpenXRAction_2mhc1"), SubResource("OpenXRAction_qkbr7"), SubResource("OpenXRAction_u5uoa"), SubResource("OpenXRAction_c0sht"), SubResource("OpenXRAction_8dhib")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_27ecp"] +action = SubResource("OpenXRAction_2mhc1") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_6y6eh"] +action = SubResource("OpenXRAction_qkbr7") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_3nkxs"] +action = SubResource("OpenXRAction_u5uoa") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_n8wdw"] +action = SubResource("OpenXRAction_c0sht") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_mfrwn"] +action = SubResource("OpenXRAction_spm4n") +paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/menu/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_su7kc"] +action = SubResource("OpenXRAction_ok0wc") +paths = PackedStringArray("/user/hand/left/input/select/click", "/user/hand/right/input/select/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_woq7r"] +action = SubResource("OpenXRAction_8dhib") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_mm0ua"] +interaction_profile_path = "/interaction_profiles/khr/simple_controller" +bindings = [SubResource("OpenXRIPBinding_27ecp"), SubResource("OpenXRIPBinding_6y6eh"), SubResource("OpenXRIPBinding_3nkxs"), SubResource("OpenXRIPBinding_n8wdw"), SubResource("OpenXRIPBinding_mfrwn"), SubResource("OpenXRIPBinding_su7kc"), SubResource("OpenXRIPBinding_woq7r")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_wdx36"] +action = SubResource("OpenXRAction_2mhc1") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_0c5jj"] +action = SubResource("OpenXRAction_qkbr7") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_rjefq"] +action = SubResource("OpenXRAction_u5uoa") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_48ttp"] +action = SubResource("OpenXRAction_c0sht") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_iedl8"] +action = SubResource("OpenXRAction_spm4n") +paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/menu/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ghmlt"] +action = SubResource("OpenXRAction_ok0wc") +paths = PackedStringArray("/user/hand/left/input/system/click", "/user/hand/right/input/system/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_icum6"] +action = SubResource("OpenXRAction_v1tfl") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_itw68"] +action = SubResource("OpenXRAction_4p24q") +paths = PackedStringArray("/user/hand/left/input/trigger/click", "/user/hand/right/input/trigger/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_f6q5f"] +action = SubResource("OpenXRAction_13s22") +paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_mgbea"] +action = SubResource("OpenXRAction_cj3we") +paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_cxrjc"] +action = SubResource("OpenXRAction_dl6w2") +paths = PackedStringArray("/user/hand/left/input/trackpad", "/user/hand/right/input/trackpad") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_odpmd"] +action = SubResource("OpenXRAction_i1g0i") +paths = PackedStringArray("/user/hand/left/input/trackpad/click", "/user/hand/right/input/trackpad/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_lwbg2"] +action = SubResource("OpenXRAction_4la1n") +paths = PackedStringArray("/user/hand/left/input/trackpad/touch", "/user/hand/right/input/trackpad/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qno20"] +action = SubResource("OpenXRAction_8dhib") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_wtmes"] +interaction_profile_path = "/interaction_profiles/htc/vive_controller" +bindings = [SubResource("OpenXRIPBinding_wdx36"), SubResource("OpenXRIPBinding_0c5jj"), SubResource("OpenXRIPBinding_rjefq"), SubResource("OpenXRIPBinding_48ttp"), SubResource("OpenXRIPBinding_iedl8"), SubResource("OpenXRIPBinding_ghmlt"), SubResource("OpenXRIPBinding_icum6"), SubResource("OpenXRIPBinding_itw68"), SubResource("OpenXRIPBinding_f6q5f"), SubResource("OpenXRIPBinding_mgbea"), SubResource("OpenXRIPBinding_cxrjc"), SubResource("OpenXRIPBinding_odpmd"), SubResource("OpenXRIPBinding_lwbg2"), SubResource("OpenXRIPBinding_qno20")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_hg4ws"] +action = SubResource("OpenXRAction_2mhc1") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_2mlxm"] +action = SubResource("OpenXRAction_qkbr7") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_i6n54"] +action = SubResource("OpenXRAction_u5uoa") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_3x7xb"] +action = SubResource("OpenXRAction_c0sht") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_hlndh"] +action = SubResource("OpenXRAction_spm4n") +paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/menu/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_8e4bx"] +action = SubResource("OpenXRAction_v1tfl") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_5dllj"] +action = SubResource("OpenXRAction_4p24q") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_wkoq7"] +action = SubResource("OpenXRAction_13s22") +paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_0p56e"] +action = SubResource("OpenXRAction_cj3we") +paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_s0tvr"] +action = SubResource("OpenXRAction_dl6w2") +paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_h6k71"] +action = SubResource("OpenXRAction_i1g0i") +paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_eouj4"] +action = SubResource("OpenXRAction_f3fqy") +paths = PackedStringArray("/user/hand/left/input/trackpad", "/user/hand/right/input/trackpad") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_57fks"] +action = SubResource("OpenXRAction_337ox") +paths = PackedStringArray("/user/hand/left/input/trackpad/click", "/user/hand/right/input/trackpad/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_j45sb"] +action = SubResource("OpenXRAction_lv8y2") +paths = PackedStringArray("/user/hand/left/input/trackpad/touch", "/user/hand/right/input/trackpad/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_vx15r"] +action = SubResource("OpenXRAction_8dhib") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_iryl2"] +interaction_profile_path = "/interaction_profiles/microsoft/motion_controller" +bindings = [SubResource("OpenXRIPBinding_hg4ws"), SubResource("OpenXRIPBinding_2mlxm"), SubResource("OpenXRIPBinding_i6n54"), SubResource("OpenXRIPBinding_3x7xb"), SubResource("OpenXRIPBinding_hlndh"), SubResource("OpenXRIPBinding_8e4bx"), SubResource("OpenXRIPBinding_5dllj"), SubResource("OpenXRIPBinding_wkoq7"), SubResource("OpenXRIPBinding_0p56e"), SubResource("OpenXRIPBinding_s0tvr"), SubResource("OpenXRIPBinding_h6k71"), SubResource("OpenXRIPBinding_eouj4"), SubResource("OpenXRIPBinding_57fks"), SubResource("OpenXRIPBinding_j45sb"), SubResource("OpenXRIPBinding_vx15r")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_h0nh8"] +action = SubResource("OpenXRAction_2mhc1") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ikkup"] +action = SubResource("OpenXRAction_qkbr7") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_kxjx8"] +action = SubResource("OpenXRAction_u5uoa") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_gyh43"] +action = SubResource("OpenXRAction_c0sht") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_h26ha"] +action = SubResource("OpenXRAction_spm4n") +paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/system/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_hgqo2"] +action = SubResource("OpenXRAction_0gbo1") +paths = PackedStringArray("/user/hand/left/input/x/click", "/user/hand/right/input/a/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_wtpdy"] +action = SubResource("OpenXRAction_dlclo") +paths = PackedStringArray("/user/hand/left/input/x/touch", "/user/hand/right/input/a/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_xqewn"] +action = SubResource("OpenXRAction_hdvv8") +paths = PackedStringArray("/user/hand/left/input/y/click", "/user/hand/right/input/b/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_cws8o"] +action = SubResource("OpenXRAction_ti7q2") +paths = PackedStringArray("/user/hand/left/input/y/touch", "/user/hand/right/input/b/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_83qg4"] +action = SubResource("OpenXRAction_v1tfl") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_vn7qa"] +action = SubResource("OpenXRAction_4p24q") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_dhc0m"] +action = SubResource("OpenXRAction_whe2n") +paths = PackedStringArray("/user/hand/left/input/trigger/touch", "/user/hand/right/input/trigger/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_eagco"] +action = SubResource("OpenXRAction_13s22") +paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_fjv85"] +action = SubResource("OpenXRAction_cj3we") +paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_2wsib"] +action = SubResource("OpenXRAction_dl6w2") +paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_userk"] +action = SubResource("OpenXRAction_i1g0i") +paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_srox3"] +action = SubResource("OpenXRAction_4la1n") +paths = PackedStringArray("/user/hand/left/input/thumbstick/touch", "/user/hand/right/input/thumbstick/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_i4fx0"] +action = SubResource("OpenXRAction_8dhib") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_mbp1w"] +interaction_profile_path = "/interaction_profiles/oculus/touch_controller" +bindings = [SubResource("OpenXRIPBinding_h0nh8"), SubResource("OpenXRIPBinding_ikkup"), SubResource("OpenXRIPBinding_kxjx8"), SubResource("OpenXRIPBinding_gyh43"), SubResource("OpenXRIPBinding_h26ha"), SubResource("OpenXRIPBinding_hgqo2"), SubResource("OpenXRIPBinding_wtpdy"), SubResource("OpenXRIPBinding_xqewn"), SubResource("OpenXRIPBinding_cws8o"), SubResource("OpenXRIPBinding_83qg4"), SubResource("OpenXRIPBinding_vn7qa"), SubResource("OpenXRIPBinding_dhc0m"), SubResource("OpenXRIPBinding_eagco"), SubResource("OpenXRIPBinding_fjv85"), SubResource("OpenXRIPBinding_2wsib"), SubResource("OpenXRIPBinding_userk"), SubResource("OpenXRIPBinding_srox3"), SubResource("OpenXRIPBinding_i4fx0")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ur8if"] +action = SubResource("OpenXRAction_2mhc1") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_aboow"] +action = SubResource("OpenXRAction_qkbr7") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_5urr5"] +action = SubResource("OpenXRAction_u5uoa") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_8kwuq"] +action = SubResource("OpenXRAction_c0sht") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_cacge"] +action = SubResource("OpenXRAction_ok0wc") +paths = PackedStringArray("/user/hand/left/input/system/click", "/user/hand/right/input/system/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_dynt3"] +action = SubResource("OpenXRAction_spm4n") +paths = PackedStringArray("/user/hand/left/input/menu/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_yekfi"] +action = SubResource("OpenXRAction_0gbo1") +paths = PackedStringArray("/user/hand/left/input/x/click", "/user/hand/right/input/a/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_6oq71"] +action = SubResource("OpenXRAction_dlclo") +paths = PackedStringArray("/user/hand/left/input/x/touch", "/user/hand/right/input/a/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_wnioo"] +action = SubResource("OpenXRAction_hdvv8") +paths = PackedStringArray("/user/hand/left/input/y/click", "/user/hand/right/input/b/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_sxqk7"] +action = SubResource("OpenXRAction_ti7q2") +paths = PackedStringArray("/user/hand/left/input/y/touch", "/user/hand/right/input/b/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_8aoo7"] +action = SubResource("OpenXRAction_v1tfl") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_apte3"] +action = SubResource("OpenXRAction_4p24q") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_c8nex"] +action = SubResource("OpenXRAction_whe2n") +paths = PackedStringArray("/user/hand/left/input/trigger/touch", "/user/hand/right/input/trigger/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_edhpx"] +action = SubResource("OpenXRAction_13s22") +paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_1h74f"] +action = SubResource("OpenXRAction_cj3we") +paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_f6adi"] +action = SubResource("OpenXRAction_dl6w2") +paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_cg4lv"] +action = SubResource("OpenXRAction_i1g0i") +paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_4mtnm"] +action = SubResource("OpenXRAction_4la1n") +paths = PackedStringArray("/user/hand/left/input/thumbstick/touch", "/user/hand/right/input/thumbstick/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_64lqr"] +action = SubResource("OpenXRAction_8dhib") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_dre2y"] +interaction_profile_path = "/interaction_profiles/bytedance/pico4_controller" +bindings = [SubResource("OpenXRIPBinding_ur8if"), SubResource("OpenXRIPBinding_aboow"), SubResource("OpenXRIPBinding_5urr5"), SubResource("OpenXRIPBinding_8kwuq"), SubResource("OpenXRIPBinding_cacge"), SubResource("OpenXRIPBinding_dynt3"), SubResource("OpenXRIPBinding_yekfi"), SubResource("OpenXRIPBinding_6oq71"), SubResource("OpenXRIPBinding_wnioo"), SubResource("OpenXRIPBinding_sxqk7"), SubResource("OpenXRIPBinding_8aoo7"), SubResource("OpenXRIPBinding_apte3"), SubResource("OpenXRIPBinding_c8nex"), SubResource("OpenXRIPBinding_edhpx"), SubResource("OpenXRIPBinding_1h74f"), SubResource("OpenXRIPBinding_f6adi"), SubResource("OpenXRIPBinding_cg4lv"), SubResource("OpenXRIPBinding_4mtnm"), SubResource("OpenXRIPBinding_64lqr")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_fbo3f"] +action = SubResource("OpenXRAction_2mhc1") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_xqyna"] +action = SubResource("OpenXRAction_qkbr7") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_cqdgf"] +action = SubResource("OpenXRAction_u5uoa") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ul85l"] +action = SubResource("OpenXRAction_c0sht") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_e5lgg"] +action = SubResource("OpenXRAction_spm4n") +paths = PackedStringArray("/user/hand/left/input/system/click", "/user/hand/right/input/system/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_fcfga"] +action = SubResource("OpenXRAction_0gbo1") +paths = PackedStringArray("/user/hand/left/input/a/click", "/user/hand/right/input/a/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_00mq7"] +action = SubResource("OpenXRAction_dlclo") +paths = PackedStringArray("/user/hand/left/input/a/touch", "/user/hand/right/input/a/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_g2pns"] +action = SubResource("OpenXRAction_hdvv8") +paths = PackedStringArray("/user/hand/left/input/b/click", "/user/hand/right/input/b/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qpt63"] +action = SubResource("OpenXRAction_ti7q2") +paths = PackedStringArray("/user/hand/left/input/b/touch", "/user/hand/right/input/b/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_oy6ip"] +action = SubResource("OpenXRAction_v1tfl") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_k38xd"] +action = SubResource("OpenXRAction_4p24q") +paths = PackedStringArray("/user/hand/left/input/trigger/click", "/user/hand/right/input/trigger/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_vt6a3"] +action = SubResource("OpenXRAction_whe2n") +paths = PackedStringArray("/user/hand/left/input/trigger/touch", "/user/hand/right/input/trigger/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_prltq"] +action = SubResource("OpenXRAction_13s22") +paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_3xngg"] +action = SubResource("OpenXRAction_cj3we") +paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_rf13m"] +action = SubResource("OpenXRAction_v7xp5") +paths = PackedStringArray("/user/hand/left/input/squeeze/force", "/user/hand/right/input/squeeze/force") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_5jotm"] +action = SubResource("OpenXRAction_dl6w2") +paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ksp8f"] +action = SubResource("OpenXRAction_i1g0i") +paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_21fc2"] +action = SubResource("OpenXRAction_4la1n") +paths = PackedStringArray("/user/hand/left/input/thumbstick/touch", "/user/hand/right/input/thumbstick/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_o0ayc"] +action = SubResource("OpenXRAction_f3fqy") +paths = PackedStringArray("/user/hand/left/input/trackpad", "/user/hand/right/input/trackpad") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_wt7k2"] +action = SubResource("OpenXRAction_337ox") +paths = PackedStringArray("/user/hand/left/input/trackpad/force", "/user/hand/right/input/trackpad/force") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_lspi3"] +action = SubResource("OpenXRAction_lv8y2") +paths = PackedStringArray("/user/hand/left/input/trackpad/touch", "/user/hand/right/input/trackpad/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_cu1g6"] +action = SubResource("OpenXRAction_8dhib") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_jyev0"] +interaction_profile_path = "/interaction_profiles/valve/index_controller" +bindings = [SubResource("OpenXRIPBinding_fbo3f"), SubResource("OpenXRIPBinding_xqyna"), SubResource("OpenXRIPBinding_cqdgf"), SubResource("OpenXRIPBinding_ul85l"), SubResource("OpenXRIPBinding_e5lgg"), SubResource("OpenXRIPBinding_fcfga"), SubResource("OpenXRIPBinding_00mq7"), SubResource("OpenXRIPBinding_g2pns"), SubResource("OpenXRIPBinding_qpt63"), SubResource("OpenXRIPBinding_oy6ip"), SubResource("OpenXRIPBinding_k38xd"), SubResource("OpenXRIPBinding_vt6a3"), SubResource("OpenXRIPBinding_prltq"), SubResource("OpenXRIPBinding_3xngg"), SubResource("OpenXRIPBinding_rf13m"), SubResource("OpenXRIPBinding_5jotm"), SubResource("OpenXRIPBinding_ksp8f"), SubResource("OpenXRIPBinding_21fc2"), SubResource("OpenXRIPBinding_o0ayc"), SubResource("OpenXRIPBinding_wt7k2"), SubResource("OpenXRIPBinding_lspi3"), SubResource("OpenXRIPBinding_cu1g6")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_vjgk5"] +action = SubResource("OpenXRAction_2mhc1") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_p5rlt"] +action = SubResource("OpenXRAction_qkbr7") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_cprca"] +action = SubResource("OpenXRAction_u5uoa") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_m1bqi"] +action = SubResource("OpenXRAction_c0sht") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_jcg4w"] +action = SubResource("OpenXRAction_spm4n") +paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/menu/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_3ec4g"] +action = SubResource("OpenXRAction_0gbo1") +paths = PackedStringArray("/user/hand/left/input/x/click", "/user/hand/right/input/a/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ks361"] +action = SubResource("OpenXRAction_hdvv8") +paths = PackedStringArray("/user/hand/left/input/y/click", "/user/hand/right/input/b/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_4vxq4"] +action = SubResource("OpenXRAction_v1tfl") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_4knnu"] +action = SubResource("OpenXRAction_4p24q") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_2usl1"] +action = SubResource("OpenXRAction_13s22") +paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_4nx8d"] +action = SubResource("OpenXRAction_cj3we") +paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_w767x"] +action = SubResource("OpenXRAction_dl6w2") +paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_618sl"] +action = SubResource("OpenXRAction_i1g0i") +paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_0nqek"] +action = SubResource("OpenXRAction_8dhib") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_70gww"] +interaction_profile_path = "/interaction_profiles/hp/mixed_reality_controller" +bindings = [SubResource("OpenXRIPBinding_vjgk5"), SubResource("OpenXRIPBinding_p5rlt"), SubResource("OpenXRIPBinding_cprca"), SubResource("OpenXRIPBinding_m1bqi"), SubResource("OpenXRIPBinding_jcg4w"), SubResource("OpenXRIPBinding_3ec4g"), SubResource("OpenXRIPBinding_ks361"), SubResource("OpenXRIPBinding_4vxq4"), SubResource("OpenXRIPBinding_4knnu"), SubResource("OpenXRIPBinding_2usl1"), SubResource("OpenXRIPBinding_4nx8d"), SubResource("OpenXRIPBinding_w767x"), SubResource("OpenXRIPBinding_618sl"), SubResource("OpenXRIPBinding_0nqek")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_amm3a"] +action = SubResource("OpenXRAction_2mhc1") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_f5eq8"] +action = SubResource("OpenXRAction_qkbr7") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_f7tc3"] +action = SubResource("OpenXRAction_u5uoa") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_p12yf"] +action = SubResource("OpenXRAction_c0sht") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_pbqwu"] +action = SubResource("OpenXRAction_spm4n") +paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/menu/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ol0vq"] +action = SubResource("OpenXRAction_v1tfl") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_u5r3l"] +action = SubResource("OpenXRAction_4p24q") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_x86r3"] +action = SubResource("OpenXRAction_13s22") +paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ojbh0"] +action = SubResource("OpenXRAction_cj3we") +paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_itd8g"] +action = SubResource("OpenXRAction_dl6w2") +paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_7d0yk"] +action = SubResource("OpenXRAction_i1g0i") +paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_nhyds"] +action = SubResource("OpenXRAction_f3fqy") +paths = PackedStringArray("/user/hand/left/input/trackpad", "/user/hand/right/input/trackpad") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_70nqy"] +action = SubResource("OpenXRAction_337ox") +paths = PackedStringArray("/user/hand/left/input/trackpad/click", "/user/hand/right/input/trackpad/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_v7voe"] +action = SubResource("OpenXRAction_lv8y2") +paths = PackedStringArray("/user/hand/left/input/trackpad/touch", "/user/hand/right/input/trackpad/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_u3s4w"] +action = SubResource("OpenXRAction_8dhib") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_4c3j7"] +interaction_profile_path = "/interaction_profiles/samsung/odyssey_controller" +bindings = [SubResource("OpenXRIPBinding_amm3a"), SubResource("OpenXRIPBinding_f5eq8"), SubResource("OpenXRIPBinding_f7tc3"), SubResource("OpenXRIPBinding_p12yf"), SubResource("OpenXRIPBinding_pbqwu"), SubResource("OpenXRIPBinding_ol0vq"), SubResource("OpenXRIPBinding_u5r3l"), SubResource("OpenXRIPBinding_x86r3"), SubResource("OpenXRIPBinding_ojbh0"), SubResource("OpenXRIPBinding_itd8g"), SubResource("OpenXRIPBinding_7d0yk"), SubResource("OpenXRIPBinding_nhyds"), SubResource("OpenXRIPBinding_70nqy"), SubResource("OpenXRIPBinding_v7voe"), SubResource("OpenXRIPBinding_u3s4w")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_c8jne"] +action = SubResource("OpenXRAction_2mhc1") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_rqf28"] +action = SubResource("OpenXRAction_qkbr7") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_nx376"] +action = SubResource("OpenXRAction_u5uoa") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_sj6gs"] +action = SubResource("OpenXRAction_c0sht") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_j1rgw"] +action = SubResource("OpenXRAction_spm4n") +paths = PackedStringArray("/user/hand/left/input/menu/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_vrf75"] +action = SubResource("OpenXRAction_ok0wc") +paths = PackedStringArray("/user/hand/right/input/system/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_n37nq"] +action = SubResource("OpenXRAction_0gbo1") +paths = PackedStringArray("/user/hand/left/input/x/click", "/user/hand/right/input/a/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_x701w"] +action = SubResource("OpenXRAction_hdvv8") +paths = PackedStringArray("/user/hand/left/input/y/click", "/user/hand/right/input/b/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_o14ey"] +action = SubResource("OpenXRAction_v1tfl") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_pnj3f"] +action = SubResource("OpenXRAction_4p24q") +paths = PackedStringArray("/user/hand/left/input/trigger/click", "/user/hand/right/input/trigger/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_evthi"] +action = SubResource("OpenXRAction_13s22") +paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_2brg4"] +action = SubResource("OpenXRAction_cj3we") +paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qig2h"] +action = SubResource("OpenXRAction_dl6w2") +paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qqfef"] +action = SubResource("OpenXRAction_i1g0i") +paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_5qt5n"] +action = SubResource("OpenXRAction_4la1n") +paths = PackedStringArray("/user/hand/left/input/thumbstick/touch", "/user/hand/right/input/thumbstick/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_fqb8x"] +action = SubResource("OpenXRAction_8dhib") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_assdq"] +interaction_profile_path = "/interaction_profiles/htc/vive_cosmos_controller" +bindings = [SubResource("OpenXRIPBinding_c8jne"), SubResource("OpenXRIPBinding_rqf28"), SubResource("OpenXRIPBinding_nx376"), SubResource("OpenXRIPBinding_sj6gs"), SubResource("OpenXRIPBinding_j1rgw"), SubResource("OpenXRIPBinding_vrf75"), SubResource("OpenXRIPBinding_n37nq"), SubResource("OpenXRIPBinding_x701w"), SubResource("OpenXRIPBinding_o14ey"), SubResource("OpenXRIPBinding_pnj3f"), SubResource("OpenXRIPBinding_evthi"), SubResource("OpenXRIPBinding_2brg4"), SubResource("OpenXRIPBinding_qig2h"), SubResource("OpenXRIPBinding_qqfef"), SubResource("OpenXRIPBinding_5qt5n"), SubResource("OpenXRIPBinding_fqb8x")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_0y3g0"] +action = SubResource("OpenXRAction_2mhc1") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_hkfr5"] +action = SubResource("OpenXRAction_qkbr7") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_2sbaq"] +action = SubResource("OpenXRAction_u5uoa") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_v8t5v"] +action = SubResource("OpenXRAction_c0sht") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_vcnit"] +action = SubResource("OpenXRAction_spm4n") +paths = PackedStringArray("/user/hand/left/input/menu/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_rwucd"] +action = SubResource("OpenXRAction_ok0wc") +paths = PackedStringArray("/user/hand/right/input/system/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_xumor"] +action = SubResource("OpenXRAction_0gbo1") +paths = PackedStringArray("/user/hand/left/input/x/click", "/user/hand/right/input/a/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_efksl"] +action = SubResource("OpenXRAction_hdvv8") +paths = PackedStringArray("/user/hand/left/input/y/click", "/user/hand/right/input/b/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_mlghr"] +action = SubResource("OpenXRAction_v1tfl") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_gcqor"] +action = SubResource("OpenXRAction_4p24q") +paths = PackedStringArray("/user/hand/left/input/trigger/click", "/user/hand/right/input/trigger/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_rqh8j"] +action = SubResource("OpenXRAction_whe2n") +paths = PackedStringArray("/user/hand/left/input/trigger/touch", "/user/hand/right/input/trigger/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ll0rr"] +action = SubResource("OpenXRAction_13s22") +paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_chlo0"] +action = SubResource("OpenXRAction_cj3we") +paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ff3in"] +action = SubResource("OpenXRAction_dl6w2") +paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_rcfwm"] +action = SubResource("OpenXRAction_i1g0i") +paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_uetse"] +action = SubResource("OpenXRAction_4la1n") +paths = PackedStringArray("/user/hand/left/input/thumbstick/touch", "/user/hand/right/input/thumbstick/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_f67x1"] +action = SubResource("OpenXRAction_lv8y2") +paths = PackedStringArray("/user/hand/left/input/thumbrest/touch", "/user/hand/right/input/thumbrest/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_xjh01"] +action = SubResource("OpenXRAction_8dhib") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_1m75p"] +interaction_profile_path = "/interaction_profiles/htc/vive_focus3_controller" +bindings = [SubResource("OpenXRIPBinding_0y3g0"), SubResource("OpenXRIPBinding_hkfr5"), SubResource("OpenXRIPBinding_2sbaq"), SubResource("OpenXRIPBinding_v8t5v"), SubResource("OpenXRIPBinding_vcnit"), SubResource("OpenXRIPBinding_rwucd"), SubResource("OpenXRIPBinding_xumor"), SubResource("OpenXRIPBinding_efksl"), SubResource("OpenXRIPBinding_mlghr"), SubResource("OpenXRIPBinding_gcqor"), SubResource("OpenXRIPBinding_rqh8j"), SubResource("OpenXRIPBinding_ll0rr"), SubResource("OpenXRIPBinding_chlo0"), SubResource("OpenXRIPBinding_ff3in"), SubResource("OpenXRIPBinding_rcfwm"), SubResource("OpenXRIPBinding_uetse"), SubResource("OpenXRIPBinding_f67x1"), SubResource("OpenXRIPBinding_xjh01")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_7nnxn"] +action = SubResource("OpenXRAction_2mhc1") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_w8luo"] +action = SubResource("OpenXRAction_qkbr7") +paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_v1g4g"] +action = SubResource("OpenXRAction_u5uoa") +paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ksyb5"] +action = SubResource("OpenXRAction_c0sht") +paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_m7ngm"] +action = SubResource("OpenXRAction_spm4n") +paths = PackedStringArray("/user/hand/left/input/home/click", "/user/hand/right/input/home/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_6lscs"] +action = SubResource("OpenXRAction_v1tfl") +paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_jisvr"] +action = SubResource("OpenXRAction_4p24q") +paths = PackedStringArray("/user/hand/left/input/trigger/click", "/user/hand/right/input/trigger/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_yawds"] +action = SubResource("OpenXRAction_dl6w2") +paths = PackedStringArray("/user/hand/left/input/trackpad", "/user/hand/right/input/trackpad") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_kjbiv"] +action = SubResource("OpenXRAction_i1g0i") +paths = PackedStringArray("/user/hand/left/input/trackpad/click", "/user/hand/right/input/trackpad/click") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_5babp"] +action = SubResource("OpenXRAction_4la1n") +paths = PackedStringArray("/user/hand/left/input/trackpad/touch", "/user/hand/right/input/trackpad/touch") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_0r65w"] +action = SubResource("OpenXRAction_8dhib") +paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_o6luy"] +interaction_profile_path = "/interaction_profiles/huawei/controller" +bindings = [SubResource("OpenXRIPBinding_7nnxn"), SubResource("OpenXRIPBinding_w8luo"), SubResource("OpenXRIPBinding_v1g4g"), SubResource("OpenXRIPBinding_ksyb5"), SubResource("OpenXRIPBinding_m7ngm"), SubResource("OpenXRIPBinding_6lscs"), SubResource("OpenXRIPBinding_jisvr"), SubResource("OpenXRIPBinding_yawds"), SubResource("OpenXRIPBinding_kjbiv"), SubResource("OpenXRIPBinding_5babp"), SubResource("OpenXRIPBinding_0r65w")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_2ecu6"] +action = SubResource("OpenXRAction_2mhc1") +paths = PackedStringArray("/user/vive_tracker_htcx/role/left_foot/input/grip/pose", "/user/vive_tracker_htcx/role/right_foot/input/grip/pose", "/user/vive_tracker_htcx/role/left_shoulder/input/grip/pose", "/user/vive_tracker_htcx/role/right_shoulder/input/grip/pose", "/user/vive_tracker_htcx/role/left_elbow/input/grip/pose", "/user/vive_tracker_htcx/role/right_elbow/input/grip/pose", "/user/vive_tracker_htcx/role/left_knee/input/grip/pose", "/user/vive_tracker_htcx/role/right_knee/input/grip/pose", "/user/vive_tracker_htcx/role/waist/input/grip/pose", "/user/vive_tracker_htcx/role/chest/input/grip/pose", "/user/vive_tracker_htcx/role/camera/input/grip/pose", "/user/vive_tracker_htcx/role/keyboard/input/grip/pose") + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_dmlrb"] +action = SubResource("OpenXRAction_8dhib") +paths = PackedStringArray("/user/vive_tracker_htcx/role/left_foot/output/haptic", "/user/vive_tracker_htcx/role/right_foot/output/haptic", "/user/vive_tracker_htcx/role/left_shoulder/output/haptic", "/user/vive_tracker_htcx/role/right_shoulder/output/haptic", "/user/vive_tracker_htcx/role/left_elbow/output/haptic", "/user/vive_tracker_htcx/role/right_elbow/output/haptic", "/user/vive_tracker_htcx/role/left_knee/output/haptic", "/user/vive_tracker_htcx/role/right_knee/output/haptic", "/user/vive_tracker_htcx/role/waist/output/haptic", "/user/vive_tracker_htcx/role/chest/output/haptic", "/user/vive_tracker_htcx/role/camera/output/haptic", "/user/vive_tracker_htcx/role/keyboard/output/haptic") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_bm6ak"] +interaction_profile_path = "/interaction_profiles/htc/vive_tracker_htcx" +bindings = [SubResource("OpenXRIPBinding_2ecu6"), SubResource("OpenXRIPBinding_dmlrb")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_hbx0j"] +action = SubResource("OpenXRAction_2mhc1") +paths = PackedStringArray("/user/eyes_ext/input/gaze_ext/pose") + +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_aofyq"] +interaction_profile_path = "/interaction_profiles/ext/eye_gaze_interaction" +bindings = [SubResource("OpenXRIPBinding_hbx0j")] + +[resource] +action_sets = [SubResource("OpenXRActionSet_5j4cb")] +interaction_profiles = [SubResource("OpenXRInteractionProfile_mm0ua"), SubResource("OpenXRInteractionProfile_wtmes"), SubResource("OpenXRInteractionProfile_iryl2"), SubResource("OpenXRInteractionProfile_mbp1w"), SubResource("OpenXRInteractionProfile_dre2y"), SubResource("OpenXRInteractionProfile_jyev0"), SubResource("OpenXRInteractionProfile_70gww"), SubResource("OpenXRInteractionProfile_4c3j7"), SubResource("OpenXRInteractionProfile_assdq"), SubResource("OpenXRInteractionProfile_1m75p"), SubResource("OpenXRInteractionProfile_o6luy"), SubResource("OpenXRInteractionProfile_bm6ak"), SubResource("OpenXRInteractionProfile_aofyq")] diff --git a/samples/fb-composition-layers-sample/project.godot b/samples/fb-composition-layers-sample/project.godot new file mode 100644 index 00000000..6112b394 --- /dev/null +++ b/samples/fb-composition-layers-sample/project.godot @@ -0,0 +1,32 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="Fb Composition Layer Sample" +run/main_scene="res://main.tscn" +config/features=PackedStringArray("4.3", "GL Compatibility") +config/icon="res://icon.svg" + +[editor_plugins] + +enabled=PackedStringArray("res://addons/godotopenxrvendors/plugin.cfg") + +[rendering] + +renderer/rendering_method="gl_compatibility" +renderer/rendering_method.mobile="gl_compatibility" +textures/vram_compression/import_etc2_astc=true + +[xr] + +openxr/enabled=true +openxr/reference_space=2 +shaders/enabled=true diff --git a/samples/fb-composition-layers-sample/raycast.gd b/samples/fb-composition-layers-sample/raycast.gd new file mode 100644 index 00000000..b0f43716 --- /dev/null +++ b/samples/fb-composition-layers-sample/raycast.gd @@ -0,0 +1,16 @@ +extends RayCast3D + +@onready var mesh_instance_3d: MeshInstance3D = $MeshInstance3D + +func _process(delta: float) -> void: + var mat = mesh_instance_3d.get_surface_override_material(0) + + if not is_colliding(): + mesh_instance_3d.mesh.height = 10 + mesh_instance_3d.position.y = -5 + mat.albedo_color = Color.RED + else: + var height = (get_collision_point() - global_position).length() + mesh_instance_3d.mesh.height = height + mesh_instance_3d.position.y = -(height / 2) + mat.albedo_color = Color.GREEN