diff --git a/com.htc.upm.vive.openxr/CHANGELOG.md b/com.htc.upm.vive.openxr/CHANGELOG.md
new file mode 100644
index 0000000..7c8a4e3
--- /dev/null
+++ b/com.htc.upm.vive.openxr/CHANGELOG.md
@@ -0,0 +1,75 @@
+# **VIVE OpenXR Plugin - Windows** For Unity - v1.0.12
+Copyright HTC Corporation. All Rights Reserved.
+
+**VIVE OpenXR Plugin - Windows**: This plugin provides support for openxr based on the following specifications.
+ - [Vive Facial Tracking](https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html#XR_HTC_facial_tracking)
+ - [Vive Cosmos Controller](https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html#XR_HTC_vive_cosmos_controller_interaction)
+ - [Scene Understanding](https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html#XR_MSFT_scene_understanding)
+ - [Hand Tracking](https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html#XR_EXT_hand_tracking)
+ - [Vive Focus3 Controller](https://registry.khronos.org/OpenXR/specs/1.0/html/xrspec.html#XR_HTC_vive_focus3_controller_interaction)
+ - [Hand Interaction](https://registry.khronos.org/OpenXR/specs/1.0/html/xrspec.html#XR_HTC_hand_interaction)
+ - [Palm pose](https://registry.khronos.org/OpenXR/specs/1.0/html/xrspec.html#XR_EXT_palm_pose)
+---
+## Changes for v1.0.12 - 2023/06/02
+ - Remove Eye gaze sample.It is recommended to use the Controller sample provided by the Unity OpenXR Plugin to test eye gaze.
+
+## Changes for v1.0.11 - 2023/02/16
+ - Add openxr XR_EXT_palm_pose support for Vive Focus3 controller and Vive Cosmos controller.
+ - Add Hand Interaction extension support.
+ - Add hand interaction demo in hand tracking sample.
+
+## Changes for v1.0.10 - 2023/01/13
+ - Add eye gaze sample.
+
+## Changes for v1.0.9 - 2022/11/10
+ - Fix the dependency issue with OpenXR plugin.
+
+
+## Changes for v1.0.8 - 2022/10/11
+ - Update the package name from **Vive Wave OpenXR Plugin - Windows** to **VIVE OpenXR Plugin - Windows**.
+ - Fixed problem that blendshapes and input element columns of facial tracking sample not aligned correctly in Unity Inspector.
+ - Fix haptic problem for cosmos controller profile.
+ - Add Focus3 controller extension support.
+
+## Changes for v1.0.7 - 2022/09/26
+ - Fixed function type conversion problem when using handtracking feature with other OpenXR features at the same time.
+
+## Changes for v1.0.6 - 2022/09/15
+### Vive Hand Tracking
+ - Fixed delay problem when locating controller with HandTracking extension.
+
+## Changes for v1.0.5 - 2022/06/24
+ - Update documentation links for (1) Vive Facial Tracking (2) Vive Cosmos Controller (3) Scene Understanding (4) Hand Tracking.
+ - Refine plugin and sample for (1) Vive Facial Tracking (2) Hand Tracking.
+### Vive Hand Tracking
+ - Implement extension XR_EXT_hand_joints_motion_range for Hand tracking.
+ - Fixed incorrect joint rotation.
+
+### Vive Facial Tracking
+ - Fixed incorrect eye gaze direction for sample.
+
+## Changes for v1.0.4 - 2022/4/28:
+ - Update the package name from **Vive OpenXR Plugin** to **VIVE Wave OpenXR Plugin - Windows**.
+ - Fixed missing material for Hand Tracking sample.
+ - Fixed Hand tracking sample crashed issue.
+ - Add 3D HandTracking Sample.
+
+## Changes for v1.0.3 - 2022/4/08:
+ - Refactor Hand Tracking sample.
+ - Fixed build error related to Scene Understanding plugin.
+
+## Changes for v1.0.2 - 2022/3/23:
+ - Add support for openxr hand tracking extension.
+
+## Changes for v1.0.1 - 2022/2/10:
+
+### Vive Cosmos Controller
+ - Correct the input path of menu key.
+
+### Scene Understanding
+ - Move Mesh subsystem from plugin part to sample code.
+
+## Changes for v1.0.0 - 2021/1/06:
+
+* This is the first release of Vive OpenXR Unity Plugin.
+
diff --git a/com.htc.upm.vive.openxr/CHANGELOG.md.meta b/com.htc.upm.vive.openxr/CHANGELOG.md.meta
new file mode 100644
index 0000000..95f4e32
--- /dev/null
+++ b/com.htc.upm.vive.openxr/CHANGELOG.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 246f86eb5fe015f4c8d5f3104a3ee3c0
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/Editor.meta b/com.htc.upm.vive.openxr/Editor.meta
new file mode 100644
index 0000000..3a7981a
--- /dev/null
+++ b/com.htc.upm.vive.openxr/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 28769a4eba0d8bf448df06f6edc80599
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/Editor/FeatureSets.meta b/com.htc.upm.vive.openxr/Editor/FeatureSets.meta
new file mode 100644
index 0000000..0519cfd
--- /dev/null
+++ b/com.htc.upm.vive.openxr/Editor/FeatureSets.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ec562c28cd0f3494e93c60ccddce2117
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/Editor/FeatureSets/ViveFeatureSet.cs b/com.htc.upm.vive.openxr/Editor/FeatureSets/ViveFeatureSet.cs
new file mode 100644
index 0000000..d06f364
--- /dev/null
+++ b/com.htc.upm.vive.openxr/Editor/FeatureSets/ViveFeatureSet.cs
@@ -0,0 +1,34 @@
+using UnityEditor;
+using UnityEditor.XR.OpenXR.Features;
+
+namespace HTC.Vive.OpenXR.Editor
+{
+ [OpenXRFeatureSet(
+ FeatureSetId = featureSetId,
+ FeatureIds = new string[]
+ {
+ "com.htc.openxr.sceneunderstanding.feature",
+ "com.htc.openxr.facialtracking.feature",
+ "com.htc.openxr.feature.input.htcvivecosmos",
+ "com.company.openxr.handtracking.feature",
+ "com.htc.openxr.feature.input.htcvivefocus3",
+ "com.htc.openxr.feature.input.htcvivehandinteraction"
+ },
+ DefaultFeatureIds = new string[]
+ {
+ "com.htc.openxr.sceneunderstanding.feature",
+ "com.htc.openxr.facialtracking.feature",
+ "com.htc.openxr.feature.input.htcvivecosmos",
+ "com.company.openxr.handtracking.feature",
+ "com.htc.openxr.feature.input.htcvivefocus3",
+ "com.htc.openxr.feature.input.htcvivehandinteraction"
+ },
+ UiName = "VIVE OpenXR",
+ Description = "Enable the full suite of features for Vive OpenXR.",
+ SupportedBuildTargets = new BuildTargetGroup[] { BuildTargetGroup.Standalone }
+ )]
+ sealed class VIVEFeatureSet
+ {
+ internal const string featureSetId = "com.HTC.openxr.featureset.vive";
+ }
+}
diff --git a/com.htc.upm.vive.openxr/Editor/FeatureSets/ViveFeatureSet.cs.meta b/com.htc.upm.vive.openxr/Editor/FeatureSets/ViveFeatureSet.cs.meta
new file mode 100644
index 0000000..b8420de
--- /dev/null
+++ b/com.htc.upm.vive.openxr/Editor/FeatureSets/ViveFeatureSet.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 72994ea3e7babea4daa8c5d92f610bf3
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/Editor/HTC.Vive.OpenXR.Editor.asmdef b/com.htc.upm.vive.openxr/Editor/HTC.Vive.OpenXR.Editor.asmdef
new file mode 100644
index 0000000..b53e35f
--- /dev/null
+++ b/com.htc.upm.vive.openxr/Editor/HTC.Vive.OpenXR.Editor.asmdef
@@ -0,0 +1,21 @@
+{
+ "name": "HTC.Vive.OpenXR.Editor",
+ "rootNamespace": "HTC.Vive.OpenXR.Editor",
+ "references": [
+ "GUID:e40ba710768534012815d3193fa296cb",
+ "GUID:f9fe0089ec81f4079af78eb2287a6163",
+ "GUID:4847341ff46394e83bb78fbd0652937e",
+ "GUID:96aa6ba065960476598f8f643e7252b6"
+ ],
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": false,
+ "precompiledReferences": [],
+ "autoReferenced": true,
+ "defineConstraints": [],
+ "versionDefines": [],
+ "noEngineReferences": false
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/Editor/HTC.Vive.OpenXR.Editor.asmdef.meta b/com.htc.upm.vive.openxr/Editor/HTC.Vive.OpenXR.Editor.asmdef.meta
new file mode 100644
index 0000000..a8e6000
--- /dev/null
+++ b/com.htc.upm.vive.openxr/Editor/HTC.Vive.OpenXR.Editor.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 09e2b6d68cbe25441a6d03f68841252e
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/HTC.VIVE.OPENXR.asmdef b/com.htc.upm.vive.openxr/HTC.VIVE.OPENXR.asmdef
new file mode 100644
index 0000000..485b471
--- /dev/null
+++ b/com.htc.upm.vive.openxr/HTC.VIVE.OPENXR.asmdef
@@ -0,0 +1,18 @@
+{
+ "name": "HTC.VIVE.OPENXR",
+ "rootNamespace": "",
+ "references": [
+ "GUID:4847341ff46394e83bb78fbd0652937e",
+ "GUID:75469ad4d38634e559750d17036d5f7c",
+ "GUID:96aa6ba065960476598f8f643e7252b6"
+ ],
+ "includePlatforms": [],
+ "excludePlatforms": [],
+ "allowUnsafeCode": true,
+ "overrideReferences": false,
+ "precompiledReferences": [],
+ "autoReferenced": true,
+ "defineConstraints": [],
+ "versionDefines": [],
+ "noEngineReferences": false
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/HTC.VIVE.OPENXR.asmdef.meta b/com.htc.upm.vive.openxr/HTC.VIVE.OPENXR.asmdef.meta
new file mode 100644
index 0000000..1358951
--- /dev/null
+++ b/com.htc.upm.vive.openxr/HTC.VIVE.OPENXR.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: c34271c4bb951904aa11cacc978a4396
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/Include.meta b/com.htc.upm.vive.openxr/Include.meta
new file mode 100644
index 0000000..abe05ee
--- /dev/null
+++ b/com.htc.upm.vive.openxr/Include.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3af3c139ab2eee9498a484a154cad9af
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/Include/OpenXR.cs b/com.htc.upm.vive.openxr/Include/OpenXR.cs
new file mode 100644
index 0000000..561a1d5
--- /dev/null
+++ b/com.htc.upm.vive.openxr/Include/OpenXR.cs
@@ -0,0 +1,1413 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+using UnityEngine;
+
+namespace VIVE
+{
+ delegate int xrGetInstanceProcDelegate(ulong instance, string name, out IntPtr function);
+
+ public enum XrStructureType
+ {
+ XR_TYPE_UNKNOWN = 0,
+ XR_TYPE_API_LAYER_PROPERTIES = 1,
+ XR_TYPE_EXTENSION_PROPERTIES = 2,
+ XR_TYPE_INSTANCE_CREATE_INFO = 3,
+ XR_TYPE_SYSTEM_GET_INFO = 4,
+ XR_TYPE_SYSTEM_PROPERTIES = 5,
+ XR_TYPE_VIEW_LOCATE_INFO = 6,
+ XR_TYPE_VIEW = 7,
+ XR_TYPE_SESSION_CREATE_INFO = 8,
+ XR_TYPE_SWAPCHAIN_CREATE_INFO = 9,
+ XR_TYPE_SESSION_BEGIN_INFO = 10,
+ XR_TYPE_VIEW_STATE = 11,
+ XR_TYPE_FRAME_END_INFO = 12,
+ XR_TYPE_HAPTIC_VIBRATION = 13,
+ XR_TYPE_EVENT_DATA_BUFFER = 16,
+ XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING = 17,
+ XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED = 18,
+ XR_TYPE_ACTION_STATE_BOOLEAN = 23,
+ XR_TYPE_ACTION_STATE_FLOAT = 24,
+ XR_TYPE_ACTION_STATE_VECTOR2F = 25,
+ XR_TYPE_ACTION_STATE_POSE = 27,
+ XR_TYPE_ACTION_SET_CREATE_INFO = 28,
+ XR_TYPE_ACTION_CREATE_INFO = 29,
+ XR_TYPE_INSTANCE_PROPERTIES = 32,
+ XR_TYPE_FRAME_WAIT_INFO = 33,
+ XR_TYPE_COMPOSITION_LAYER_PROJECTION = 35,
+ XR_TYPE_COMPOSITION_LAYER_QUAD = 36,
+ XR_TYPE_REFERENCE_SPACE_CREATE_INFO = 37,
+ XR_TYPE_ACTION_SPACE_CREATE_INFO = 38,
+ XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING = 40,
+ XR_TYPE_VIEW_CONFIGURATION_VIEW = 41,
+ XR_TYPE_SPACE_LOCATION = 42,
+ XR_TYPE_SPACE_VELOCITY = 43,
+ XR_TYPE_FRAME_STATE = 44,
+ XR_TYPE_VIEW_CONFIGURATION_PROPERTIES = 45,
+ XR_TYPE_FRAME_BEGIN_INFO = 46,
+ XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW = 48,
+ XR_TYPE_EVENT_DATA_EVENTS_LOST = 49,
+ XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING = 51,
+ XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED = 52,
+ XR_TYPE_INTERACTION_PROFILE_STATE = 53,
+ XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO = 55,
+ XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO = 56,
+ XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO = 57,
+ XR_TYPE_ACTION_STATE_GET_INFO = 58,
+ XR_TYPE_HAPTIC_ACTION_INFO = 59,
+ XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO = 60,
+ XR_TYPE_ACTIONS_SYNC_INFO = 61,
+ XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO = 62,
+ XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO = 63,
+ XR_TYPE_COMPOSITION_LAYER_CUBE_KHR = 1000006000,
+ XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR = 1000008000,
+ XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR = 1000010000,
+ XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR = 1000014000,
+ XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT = 1000015000,
+ XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR = 1000017000,
+ XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR = 1000018000,
+ XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT = 1000019000,
+ XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT = 1000019001,
+ XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT = 1000019002,
+ XR_TYPE_DEBUG_UTILS_LABEL_EXT = 1000019003,
+ XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR = 1000023000,
+ XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR = 1000023001,
+ XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR = 1000023002,
+ XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR = 1000023003,
+ XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR = 1000023004,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR = 1000023005,
+ XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR = 1000024001,
+ XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR = 1000024002,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR = 1000024003,
+ XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR = 1000025000,
+ XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR = 1000025001,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR = 1000025002,
+ XR_TYPE_GRAPHICS_BINDING_D3D11_KHR = 1000027000,
+ XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR = 1000027001,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR = 1000027002,
+ XR_TYPE_GRAPHICS_BINDING_D3D12_KHR = 1000028000,
+ XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR = 1000028001,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR = 1000028002,
+ XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT = 1000030000,
+ XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT = 1000030001,
+ XR_TYPE_VISIBILITY_MASK_KHR = 1000031000,
+ XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR = 1000031001,
+ XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX = 1000033000,
+ XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX = 1000033003,
+ XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR = 1000034000,
+ XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT = 1000039000,
+ XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT = 1000039001,
+ XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT = 1000046000,
+ XR_TYPE_GRAPHICS_BINDING_EGL_MNDX = 1000048004,
+ XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT = 1000049000,
+ XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT = 1000051000,
+ XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT = 1000051001,
+ XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT = 1000051002,
+ XR_TYPE_HAND_JOINT_LOCATIONS_EXT = 1000051003,
+ XR_TYPE_HAND_JOINT_VELOCITIES_EXT = 1000051004,
+ XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT = 1000052000,
+ XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT = 1000052001,
+ XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT = 1000052002,
+ XR_TYPE_HAND_MESH_MSFT = 1000052003,
+ XR_TYPE_HAND_POSE_TYPE_INFO_MSFT = 1000052004,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT = 1000053000,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT = 1000053001,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT = 1000053002,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT = 1000053003,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT = 1000053004,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT = 1000053005,
+ XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT = 1000055000,
+ XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT = 1000055001,
+ XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT = 1000055002,
+ XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT = 1000055003,
+ XR_TYPE_CONTROLLER_MODEL_STATE_MSFT = 1000055004,
+ XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC = 1000059000,
+ XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT = 1000063000,
+ XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB = 1000070000,
+ XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB = 1000071000,
+ XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB = 1000071001,
+ XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE = 1000079000,
+ XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT = 1000080000,
+ XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR = 1000089000,
+ XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR = 1000090000,
+ XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR = 1000090001,
+ XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR = 1000090003,
+ XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR = 1000091000,
+ XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT = 1000097000,
+ XR_TYPE_SCENE_CREATE_INFO_MSFT = 1000097001,
+ XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT = 1000097002,
+ XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT = 1000097003,
+ XR_TYPE_SCENE_COMPONENTS_MSFT = 1000097004,
+ XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT = 1000097005,
+ XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT = 1000097006,
+ XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT = 1000097007,
+ XR_TYPE_SCENE_OBJECTS_MSFT = 1000097008,
+ XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT = 1000097009,
+ XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT = 1000097010,
+ XR_TYPE_SCENE_PLANES_MSFT = 1000097011,
+ XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT = 1000097012,
+ XR_TYPE_SCENE_MESHES_MSFT = 1000097013,
+ XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT = 1000097014,
+ XR_TYPE_SCENE_MESH_BUFFERS_MSFT = 1000097015,
+ XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT = 1000097016,
+ XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT = 1000097017,
+ XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT = 1000097018,
+ XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT = 1000098000,
+ XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT = 1000098001,
+ XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB = 1000101000,
+ XR_TYPE_SYSTEM_PASS_THROUGH_PROPERTIES_HTC = 1000103000,
+ XR_TYPE_PASS_THROUGH_CREATE_INFO_HTC = 1000103001,
+ XR_TYPE_PASS_THROUGH_FRAME_HTC = 1000103002,
+ XR_TYPE_PASS_THROUGH_ACQUIRE_INFO_HTC = 1000103003,
+ XR_TYPE_EVENT_DATA_RUNTIME_EVENT_HTC = 1000103004,
+ XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC = 1000104000,
+ XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC = 1000104001,
+ XR_TYPE_FACIAL_EXPRESSIONS_HTC = 1000104002,
+ XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB = 1000108000,
+ XR_TYPE_BINDING_MODIFICATIONS_KHR = 1000120000,
+ XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO = 1000121000,
+ XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO = 1000121001,
+ XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO = 1000121002,
+ XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO = 1000122000,
+ XR_TYPE_GRAPHICS_BINDING_VULKAN2_KHR = XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR,
+ XR_TYPE_SWAPCHAIN_IMAGE_VULKAN2_KHR = XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN2_KHR = XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR,
+ XR_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
+ }
+ public enum XrResult
+ {
+ XR_SUCCESS = 0,
+ XR_TIMEOUT_EXPIRED = 1,
+ XR_SESSION_LOSS_PENDING = 3,
+ XR_EVENT_UNAVAILABLE = 4,
+ XR_SPACE_BOUNDS_UNAVAILABLE = 7,
+ XR_SESSION_NOT_FOCUSED = 8,
+ XR_FRAME_DISCARDED = 9,
+ XR_ERROR_VALIDATION_FAILURE = -1,
+ XR_ERROR_RUNTIME_FAILURE = -2,
+ XR_ERROR_OUT_OF_MEMORY = -3,
+ XR_ERROR_API_VERSION_UNSUPPORTED = -4,
+ XR_ERROR_INITIALIZATION_FAILED = -6,
+ XR_ERROR_FUNCTION_UNSUPPORTED = -7,
+ XR_ERROR_FEATURE_UNSUPPORTED = -8,
+ XR_ERROR_EXTENSION_NOT_PRESENT = -9,
+ XR_ERROR_LIMIT_REACHED = -10,
+ XR_ERROR_SIZE_INSUFFICIENT = -11,
+ XR_ERROR_HANDLE_INVALID = -12,
+ XR_ERROR_INSTANCE_LOST = -13,
+ XR_ERROR_SESSION_RUNNING = -14,
+ XR_ERROR_SESSION_NOT_RUNNING = -16,
+ XR_ERROR_SESSION_LOST = -17,
+ XR_ERROR_SYSTEM_INVALID = -18,
+ XR_ERROR_PATH_INVALID = -19,
+ XR_ERROR_PATH_COUNT_EXCEEDED = -20,
+ XR_ERROR_PATH_FORMAT_INVALID = -21,
+ XR_ERROR_PATH_UNSUPPORTED = -22,
+ XR_ERROR_LAYER_INVALID = -23,
+ XR_ERROR_LAYER_LIMIT_EXCEEDED = -24,
+ XR_ERROR_SWAPCHAIN_RECT_INVALID = -25,
+ XR_ERROR_SWAPCHAIN_FORMAT_UNSUPPORTED = -26,
+ XR_ERROR_ACTION_TYPE_MISMATCH = -27,
+ XR_ERROR_SESSION_NOT_READY = -28,
+ XR_ERROR_SESSION_NOT_STOPPING = -29,
+ XR_ERROR_TIME_INVALID = -30,
+ XR_ERROR_REFERENCE_SPACE_UNSUPPORTED = -31,
+ XR_ERROR_FILE_ACCESS_ERROR = -32,
+ XR_ERROR_FILE_CONTENTS_INVALID = -33,
+ XR_ERROR_FORM_FACTOR_UNSUPPORTED = -34,
+ XR_ERROR_FORM_FACTOR_UNAVAILABLE = -35,
+ XR_ERROR_API_LAYER_NOT_PRESENT = -36,
+ XR_ERROR_CALL_ORDER_INVALID = -37,
+ XR_ERROR_GRAPHICS_DEVICE_INVALID = -38,
+ XR_ERROR_POSE_INVALID = -39,
+ XR_ERROR_INDEX_OUT_OF_RANGE = -40,
+ XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED = -41,
+ XR_ERROR_ENVIRONMENT_BLEND_MODE_UNSUPPORTED = -42,
+ XR_ERROR_NAME_DUPLICATED = -44,
+ XR_ERROR_NAME_INVALID = -45,
+ XR_ERROR_ACTIONSET_NOT_ATTACHED = -46,
+ XR_ERROR_ACTIONSETS_ALREADY_ATTACHED = -47,
+ XR_ERROR_LOCALIZED_NAME_DUPLICATED = -48,
+ XR_ERROR_LOCALIZED_NAME_INVALID = -49,
+ XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING = -50,
+ XR_ERROR_RUNTIME_UNAVAILABLE = -51,
+ XR_ERROR_ANDROID_THREAD_SETTINGS_ID_INVALID_KHR = -1000003000,
+ XR_ERROR_ANDROID_THREAD_SETTINGS_FAILURE_KHR = -1000003001,
+ XR_ERROR_CREATE_SPATIAL_ANCHOR_FAILED_MSFT = -1000039001,
+ XR_ERROR_SECONDARY_VIEW_CONFIGURATION_TYPE_NOT_ENABLED_MSFT = -1000053000,
+ XR_ERROR_CONTROLLER_MODEL_KEY_INVALID_MSFT = -1000055000,
+ XR_ERROR_REPROJECTION_MODE_UNSUPPORTED_MSFT = -1000066000,
+ XR_ERROR_COMPUTE_NEW_SCENE_NOT_COMPLETED_MSFT = -1000097000,
+ XR_ERROR_SCENE_COMPONENT_ID_INVALID_MSFT = -1000097001,
+ XR_ERROR_SCENE_COMPONENT_TYPE_MISMATCH_MSFT = -1000097002,
+ XR_ERROR_SCENE_MESH_BUFFER_ID_INVALID_MSFT = -1000097003,
+ XR_ERROR_SCENE_COMPUTE_FEATURE_INCOMPATIBLE_MSFT = -1000097004,
+ XR_ERROR_SCENE_COMPUTE_CONSISTENCY_MISMATCH_MSFT = -1000097005,
+ XR_ERROR_DISPLAY_REFRESH_RATE_UNSUPPORTED_FB = -1000101000,
+ XR_ERROR_COLOR_SPACE_UNSUPPORTED_FB = -1000108000,
+ XR_ERROR_SPATIAL_ANCHOR_NAME_NOT_FOUND_MSFT = -1000142001,
+ XR_ERROR_SPATIAL_ANCHOR_NAME_INVALID_MSFT = -1000142002,
+ XR_RESULT_MAX_ENUM = 0x7FFFFFFF
+ }
+
+ public struct XrSystemGraphicsProperties
+ {
+ public uint maxSwapchainImageHeight;
+ public uint maxSwapchainImageWidth;
+ public uint maxLayerCount;
+ }
+
+ public struct XrSystemTrackingProperties
+ {
+ public uint orientationTracking;
+ public uint positionTracking;
+ }
+ [StructLayout(LayoutKind.Sequential)]
+ public struct XrSystemProperties
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public ulong systemId;
+ public uint vendorId;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
+ public char[] systemName;//char systemName[XR_MAX_SYSTEM_NAME_SIZE];
+ public XrSystemGraphicsProperties graphicsProperties;
+ public XrSystemTrackingProperties trackingProperties;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct XrSystemFacialTrackingPropertiesHTC
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public uint supportEyeFacialTracking;
+ public uint supportLipFacialTracking;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct XrFacialExpressionsHTC
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public uint isActive;
+ public Int64 sampleTime;
+ public int expressionCount;
+ public IntPtr blendShapeWeightings;
+ public XrFacialExpressionsHTC(XrStructureType type_, IntPtr next_, uint isActive_, Int64 sampleTime_, int expressionCount_, IntPtr blendShapeWeightings_)
+ {
+ type = type_;
+ next = next_;
+ isActive = isActive_;
+ sampleTime = sampleTime_;
+ expressionCount = expressionCount_;
+ blendShapeWeightings = blendShapeWeightings_;
+ }
+ }
+ public struct XrFacialTrackerCreateInfoHTC
+ {
+ XrStructureType type;
+ public IntPtr next;
+ XrFacialTrackingTypeHTC expressionType;
+ public XrFacialTrackerCreateInfoHTC(XrStructureType type_, IntPtr next_, XrFacialTrackingTypeHTC expressionType_)
+ {
+ type = type_;
+ next = next_;
+ expressionType = expressionType_;
+ }
+ }
+
+ public enum XrFacialTrackingTypeHTC
+ {
+ XR_FACIAL_TRACKING_TYPE_EYE_DEFAULT_HTC = 1,
+ XR_FACIAL_TRACKING_TYPE_LIP_DEFAULT_HTC = 2,
+ }
+
+ public enum XrEyeShapeHTC
+ {
+ XR_EYE_SHAPE_NONE_HTC = -1,
+ XR_EYE_EXPRESSION_LEFT_BLINK_HTC = 0,
+ XR_EYE_EXPRESSION_LEFT_WIDE_HTC = 1,
+ XR_EYE_EXPRESSION_RIGHT_BLINK_HTC = 2,
+ XR_EYE_EXPRESSION_RIGHT_WIDE_HTC = 3,
+ XR_EYE_EXPRESSION_LEFT_SQUEEZE_HTC = 4,
+ XR_EYE_EXPRESSION_RIGHT_SQUEEZE_HTC = 5,
+ XR_EYE_EXPRESSION_LEFT_DOWN_HTC = 6,
+ XR_EYE_EXPRESSION_RIGHT_DOWN_HTC = 7,
+ XR_EYE_EXPRESSION_LEFT_OUT_HTC = 8,
+ XR_EYE_EXPRESSION_RIGHT_IN_HTC = 9,
+ XR_EYE_EXPRESSION_LEFT_IN_HTC = 10,
+ XR_EYE_EXPRESSION_RIGHT_OUT_HTC = 11,
+ XR_EYE_EXPRESSION_LEFT_UP_HTC = 12,
+ XR_EYE_EXPRESSION_RIGHT_UP_HTC = 13,
+ XR_EYE_EXPRESSION_MAX_ENUM_HTC = 14,
+ }
+
+ public enum XrLipShapeHTC
+ {
+ XR_LIP_SHAPE_NONE_HTC = -1,
+ XR_LIP_SHAPE_JAW_RIGHT_HTC = 0,
+ XR_LIP_SHAPE_JAW_LEFT_HTC = 1,
+ XR_LIP_SHAPE_JAW_FORWARD_HTC = 2,
+ XR_LIP_SHAPE_JAW_OPEN_HTC = 3,
+ XR_LIP_SHAPE_MOUTH_APE_SHAPE_HTC = 4,
+ XR_LIP_SHAPE_MOUTH_UPPER_RIGHT_HTC = 5,
+ XR_LIP_SHAPE_MOUTH_UPPER_LEFT_HTC = 6,
+ XR_LIP_SHAPE_MOUTH_LOWER_RIGHT_HTC = 7,
+ XR_LIP_SHAPE_MOUTH_LOWER_LEFT_HTC = 8,
+ XR_LIP_SHAPE_MOUTH_UPPER_OVERTURN_HTC = 9,
+ XR_LIP_SHAPE_MOUTH_LOWER_OVERTURN_HTC = 10,
+ XR_LIP_SHAPE_MOUTH_POUT_HTC = 11,
+ XR_LIP_SHAPE_MOUTH_SMILE_RIGHT_HTC = 12,
+ XR_LIP_SHAPE_MOUTH_SMILE_LEFT_HTC = 13,
+ XR_LIP_SHAPE_MOUTH_SAD_RIGHT_HTC = 14,
+ XR_LIP_SHAPE_MOUTH_SAD_LEFT_HTC = 15,
+ XR_LIP_SHAPE_CHEEK_PUFF_RIGHT_HTC = 16,
+ XR_LIP_SHAPE_CHEEK_PUFF_LEFT_HTC = 17,
+ XR_LIP_SHAPE_CHEEK_SUCK_HTC = 18,
+ XR_LIP_SHAPE_MOUTH_UPPER_UPRIGHT_HTC = 19,
+ XR_LIP_SHAPE_MOUTH_UPPER_UPLEFT_HTC = 20,
+ XR_LIP_SHAPE_MOUTH_LOWER_DOWNRIGHT_HTC = 21,
+ XR_LIP_SHAPE_MOUTH_LOWER_DOWNLEFT_HTC = 22,
+ XR_LIP_SHAPE_MOUTH_UPPER_INSIDE_HTC = 23,
+ XR_LIP_SHAPE_MOUTH_LOWER_INSIDE_HTC = 24,
+ XR_LIP_SHAPE_MOUTH_LOWER_OVERLAY_HTC = 25,
+ XR_LIP_SHAPE_TONGUE_LONGSTEP1_HTC = 26,
+ XR_LIP_SHAPE_TONGUE_LEFT_HTC = 27,
+ XR_LIP_SHAPE_TONGUE_RIGHT_HTC = 28,
+ XR_LIP_SHAPE_TONGUE_UP_HTC = 29,
+ XR_LIP_SHAPE_TONGUE_DOWN_HTC = 30,
+ XR_LIP_SHAPE_TONGUE_ROLL_HTC = 31,
+ XR_LIP_SHAPE_TONGUE_LONGSTEP2_HTC = 32,
+ XR_LIP_SHAPE_TONGUE_UPRIGHT_MORPH_HTC = 33,
+ XR_LIP_SHAPE_TONGUE_UPLEFT_MORPH_HTC = 34,
+ XR_LIP_SHAPE_TONGUE_DOWNRIGHT_MORPH_HTC = 35,
+ XR_LIP_SHAPE_TONGUE_DOWNLEFT_MORPH_HTC = 36,
+ XR_LIP_SHAPE_MAX_ENUM_HTC = 37
+ }
+
+ public struct XrFrameWaitInfo
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public XrFrameWaitInfo(IntPtr next_, XrStructureType type_)
+ {
+ next = next_;
+ type = type_;
+ }
+ }
+
+ public struct XrFrameState
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public Int64 predictedDisplayTime;
+ public Int64 predictedDisplayPeriod;
+ public bool shouldRender;
+ }
+
+ public struct XrVector3f
+ {
+ public float x;
+ public float y;
+ public float z;
+ public XrVector3f(float x_, float y_, float z_)
+ {
+ x = x_;
+ y = y_;
+ z = z_;
+ }
+ }
+
+ public struct XrQuaternionf
+ {
+ public float x;
+ public float y;
+ public float z;
+ public float w;
+ public XrQuaternionf(float x_, float y_, float z_, float w_)
+ {
+ x = x_;
+ y = y_;
+ z = z_;
+ w = w_;
+ }
+ }
+
+ public struct XrPosef
+ {
+ public XrQuaternionf orientation;
+ public XrVector3f position;
+ }
+
+ #region XRSPace
+ [Flags]
+ public enum XrSpaceLocationFlags : UInt64
+ {
+ XR_SPACE_LOCATION_ORIENTATION_VALID_BIT = 0x00000001,
+ XR_SPACE_LOCATION_POSITION_VALID_BIT = 0x00000002,
+ XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT = 0x00000004,
+ XR_SPACE_LOCATION_POSITION_TRACKED_BIT = 0x00000008,
+ }
+
+ public enum XrReferenceSpaceType
+ {
+ XR_REFERENCE_SPACE_TYPE_VIEW = 1,
+ XR_REFERENCE_SPACE_TYPE_LOCAL = 2,
+ XR_REFERENCE_SPACE_TYPE_STAGE = 3,
+ XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT = 1000038000,
+ XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO = 1000121000,
+ XR_REFERENCE_SPACE_TYPE_MAX_ENUM = 0x7FFFFFFF
+ }
+
+ public struct XrReferenceSpaceCreateInfo
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public XrReferenceSpaceType referencespacetype;
+ public XrPosef poseInReferenceSpace;
+ }
+ #endregion
+
+ namespace HandTracking
+ {
+ public enum XrResult
+ {
+ XR_SUCCESS = 0,
+ XR_TIMEOUT_EXPIRED = 1,
+ XR_SESSION_LOSS_PENDING = 3,
+ XR_EVENT_UNAVAILABLE = 4,
+ XR_SPACE_BOUNDS_UNAVAILABLE = 7,
+ XR_SESSION_NOT_FOCUSED = 8,
+ XR_FRAME_DISCARDED = 9,
+ XR_ERROR_VALIDATION_FAILURE = -1,
+ XR_ERROR_RUNTIME_FAILURE = -2,
+ XR_ERROR_OUT_OF_MEMORY = -3,
+ XR_ERROR_API_VERSION_UNSUPPORTED = -4,
+ XR_ERROR_INITIALIZATION_FAILED = -6,
+ XR_ERROR_FUNCTION_UNSUPPORTED = -7,
+ XR_ERROR_FEATURE_UNSUPPORTED = -8,
+ XR_ERROR_EXTENSION_NOT_PRESENT = -9,
+ XR_ERROR_LIMIT_REACHED = -10,
+ XR_ERROR_SIZE_INSUFFICIENT = -11,
+ XR_ERROR_HANDLE_INVALID = -12,
+ XR_ERROR_INSTANCE_LOST = -13,
+ XR_ERROR_SESSION_RUNNING = -14,
+ XR_ERROR_SESSION_NOT_RUNNING = -16,
+ XR_ERROR_SESSION_LOST = -17,
+ XR_ERROR_SYSTEM_INVALID = -18,
+ XR_ERROR_PATH_INVALID = -19,
+ XR_ERROR_PATH_COUNT_EXCEEDED = -20,
+ XR_ERROR_PATH_FORMAT_INVALID = -21,
+ XR_ERROR_PATH_UNSUPPORTED = -22,
+ XR_ERROR_LAYER_INVALID = -23,
+ XR_ERROR_LAYER_LIMIT_EXCEEDED = -24,
+ XR_ERROR_SWAPCHAIN_RECT_INVALID = -25,
+ XR_ERROR_SWAPCHAIN_FORMAT_UNSUPPORTED = -26,
+ XR_ERROR_ACTION_TYPE_MISMATCH = -27,
+ XR_ERROR_SESSION_NOT_READY = -28,
+ XR_ERROR_SESSION_NOT_STOPPING = -29,
+ XR_ERROR_TIME_INVALID = -30,
+ XR_ERROR_REFERENCE_SPACE_UNSUPPORTED = -31,
+ XR_ERROR_FILE_ACCESS_ERROR = -32,
+ XR_ERROR_FILE_CONTENTS_INVALID = -33,
+ XR_ERROR_FORM_FACTOR_UNSUPPORTED = -34,
+ XR_ERROR_FORM_FACTOR_UNAVAILABLE = -35,
+ XR_ERROR_API_LAYER_NOT_PRESENT = -36,
+ XR_ERROR_CALL_ORDER_INVALID = -37,
+ XR_ERROR_GRAPHICS_DEVICE_INVALID = -38,
+ XR_ERROR_POSE_INVALID = -39,
+ XR_ERROR_INDEX_OUT_OF_RANGE = -40,
+ XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED = -41,
+ XR_ERROR_ENVIRONMENT_BLEND_MODE_UNSUPPORTED = -42,
+ XR_ERROR_NAME_DUPLICATED = -44,
+ XR_ERROR_NAME_INVALID = -45,
+ XR_ERROR_ACTIONSET_NOT_ATTACHED = -46,
+ XR_ERROR_ACTIONSETS_ALREADY_ATTACHED = -47,
+ XR_ERROR_LOCALIZED_NAME_DUPLICATED = -48,
+ XR_ERROR_LOCALIZED_NAME_INVALID = -49,
+ XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING = -50,
+ XR_ERROR_RUNTIME_UNAVAILABLE = -51,
+ XR_ERROR_ANDROID_THREAD_SETTINGS_ID_INVALID_KHR = -1000003000,
+ XR_ERROR_ANDROID_THREAD_SETTINGS_FAILURE_KHR = -1000003001,
+ XR_ERROR_CREATE_SPATIAL_ANCHOR_FAILED_MSFT = -1000039001,
+ XR_ERROR_SECONDARY_VIEW_CONFIGURATION_TYPE_NOT_ENABLED_MSFT = -1000053000,
+ XR_ERROR_CONTROLLER_MODEL_KEY_INVALID_MSFT = -1000055000,
+ XR_ERROR_REPROJECTION_MODE_UNSUPPORTED_MSFT = -1000066000,
+ XR_ERROR_COMPUTE_NEW_SCENE_NOT_COMPLETED_MSFT = -1000097000,
+ XR_ERROR_SCENE_COMPONENT_ID_INVALID_MSFT = -1000097001,
+ XR_ERROR_SCENE_COMPONENT_TYPE_MISMATCH_MSFT = -1000097002,
+ XR_ERROR_SCENE_MESH_BUFFER_ID_INVALID_MSFT = -1000097003,
+ XR_ERROR_SCENE_COMPUTE_FEATURE_INCOMPATIBLE_MSFT = -1000097004,
+ XR_ERROR_SCENE_COMPUTE_CONSISTENCY_MISMATCH_MSFT = -1000097005,
+ XR_ERROR_DISPLAY_REFRESH_RATE_UNSUPPORTED_FB = -1000101000,
+ XR_ERROR_COLOR_SPACE_UNSUPPORTED_FB = -1000108000,
+ XR_ERROR_SPATIAL_ANCHOR_NAME_NOT_FOUND_MSFT = -1000142001,
+ XR_ERROR_SPATIAL_ANCHOR_NAME_INVALID_MSFT = -1000142002,
+ XR_RESULT_MAX_ENUM = 0x7FFFFFFF
+ }
+ public struct XrVector3f
+ {
+ public float x;
+ public float y;
+ public float z;
+ public XrVector3f(float x_, float y_, float z_)
+ {
+ x = x_;
+ y = y_;
+ z = z_;
+ }
+ }
+
+ public struct XrQuaternionf
+ {
+ public float x;
+ public float y;
+ public float z;
+ public float w;
+ public XrQuaternionf(float x_, float y_, float z_, float w_)
+ {
+ x = x_;
+ y = y_;
+ z = z_;
+ w = w_;
+ }
+ }
+
+ public struct XrPosef
+ {
+ public XrQuaternionf orientation;
+ public XrVector3f position;
+ }
+ public enum XrHandJointEXT
+ {
+ XR_HAND_JOINT_PALM_EXT = 0,
+ XR_HAND_JOINT_WRIST_EXT = 1,
+ XR_HAND_JOINT_THUMB_METACARPAL_EXT = 2,
+ XR_HAND_JOINT_THUMB_PROXIMAL_EXT = 3,
+ XR_HAND_JOINT_THUMB_DISTAL_EXT = 4,
+ XR_HAND_JOINT_THUMB_TIP_EXT = 5,
+ XR_HAND_JOINT_INDEX_METACARPAL_EXT = 6,
+ XR_HAND_JOINT_INDEX_PROXIMAL_EXT = 7,
+ XR_HAND_JOINT_INDEX_INTERMEDIATE_EXT = 8,
+ XR_HAND_JOINT_INDEX_DISTAL_EXT = 9,
+ XR_HAND_JOINT_INDEX_TIP_EXT = 10,
+ XR_HAND_JOINT_MIDDLE_METACARPAL_EXT = 11,
+ XR_HAND_JOINT_MIDDLE_PROXIMAL_EXT = 12,
+ XR_HAND_JOINT_MIDDLE_INTERMEDIATE_EXT = 13,
+ XR_HAND_JOINT_MIDDLE_DISTAL_EXT = 14,
+ XR_HAND_JOINT_MIDDLE_TIP_EXT = 15,
+ XR_HAND_JOINT_RING_METACARPAL_EXT = 16,
+ XR_HAND_JOINT_RING_PROXIMAL_EXT = 17,
+ XR_HAND_JOINT_RING_INTERMEDIATE_EXT = 18,
+ XR_HAND_JOINT_RING_DISTAL_EXT = 19,
+ XR_HAND_JOINT_RING_TIP_EXT = 20,
+ XR_HAND_JOINT_LITTLE_METACARPAL_EXT = 21,
+ XR_HAND_JOINT_LITTLE_PROXIMAL_EXT = 22,
+ XR_HAND_JOINT_LITTLE_INTERMEDIATE_EXT = 23,
+ XR_HAND_JOINT_LITTLE_DISTAL_EXT = 24,
+ XR_HAND_JOINT_LITTLE_TIP_EXT = 25,
+ XR_HAND_JOINT_MAX_ENUM_EXT = 26
+ }
+ public enum XrHandEXT
+ {
+ XR_HAND_LEFT_EXT = 1,
+ XR_HAND_RIGHT_EXT = 2,
+ XR_HAND_MAX_ENUM_EXT = 0x7FFFFFFF
+ }
+
+ public enum XrHandJointSetEXT
+ {
+ XR_HAND_JOINT_SET_DEFAULT_EXT = 0,
+ XR_HAND_JOINT_SET_HAND_WITH_FOREARM_ULTRALEAP = 1000149000,
+ XR_HAND_JOINT_SET_MAX_ENUM_EXT = 0x7FFFFFFF
+ }
+ public struct XrSystemHandTrackingPropertiesEXT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public uint supportsHandTracking;
+ }
+
+ public struct XrHandJointsLocateInfoEXT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public ulong baseSpace; //XrSpace
+ public Int64 time;
+
+ public XrHandJointsLocateInfoEXT(XrStructureType type_, ref IntPtr next_, ulong baseSpace_, Int64 time_)
+ {
+ type = type_;
+ next = next_;
+ baseSpace = baseSpace_;
+ time = time_;
+ }
+ }
+
+ public struct XrHandJointLocationsEXT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public uint isActive;
+ public int jointCount;
+ public IntPtr jointLocations; // XrHandJointLocationEXT*
+
+ public XrHandJointLocationsEXT(XrStructureType type_, IntPtr next_, uint isActive_, int jointCount_, IntPtr jointLocations_)
+ {
+ type = type_;
+ next = next_;
+ isActive = isActive_;
+ jointCount = jointCount_;
+ jointLocations = jointLocations_;
+ }
+ }
+
+ public struct XrHandJointsMotionRangeInfoEXT // chain under XrHandJointsLocateInfoEXT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public XrHandJointsMotionRangeEXT handJointsMotionRange;
+ }
+
+ public struct XrHandJointLocationEXT
+ {
+ public UInt64 locationFlags; // XrSpaceLocationFlags
+ public XrPosef pose;
+ public float radius;
+ }
+
+ public struct XrHandTrackerCreateInfoEXT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public XrHandEXT hand;
+ public XrHandJointSetEXT handJointSet;
+
+ public XrHandTrackerCreateInfoEXT(XrStructureType type_, IntPtr next_, XrHandEXT hand_, XrHandJointSetEXT handJointSet_)
+ {
+ type = type_;
+ next = next_;
+ hand = hand_;
+ handJointSet = handJointSet_;
+ }
+ }
+
+ public struct XrHandJointVelocitiesEXT // chain under XrHandJointLocationsEXT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public UInt32 jointCount;
+ public IntPtr jointVelocities; // XrHandJointVelocitiesEXT*
+ }
+
+ public struct XrHandJointVelocityEXT
+ {
+ public XrSpaceVelocityFlags velocityFlags;
+ public XrVector3f linearVelocity;
+ public XrVector3f angularVelocity;
+ }
+
+ [Flags]
+ public enum XrSpaceVelocityFlags : UInt64
+ {
+ XR_SPACE_VELOCITY_LINEAR_VALID_BIT = 0x00000001,
+ XR_SPACE_VELOCITY_ANGULAR_VALID_BIT = 0x00000002,
+ }
+ #region XRSPace
+ [Flags]
+ public enum XrSpaceLocationFlags : UInt64
+ {
+ XR_SPACE_LOCATION_ORIENTATION_VALID_BIT = 0x00000001,
+ XR_SPACE_LOCATION_POSITION_VALID_BIT = 0x00000002,
+ XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT = 0x00000004,
+ XR_SPACE_LOCATION_POSITION_TRACKED_BIT = 0x00000008,
+ }
+
+ public enum XrReferenceSpaceType
+ {
+ XR_REFERENCE_SPACE_TYPE_VIEW = 1,
+ XR_REFERENCE_SPACE_TYPE_LOCAL = 2,
+ XR_REFERENCE_SPACE_TYPE_STAGE = 3,
+ XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT = 1000038000,
+ XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO = 1000121000,
+ XR_REFERENCE_SPACE_TYPE_MAX_ENUM = 0x7FFFFFFF
+ }
+
+ public struct XrReferenceSpaceCreateInfo
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public XrReferenceSpaceType referencespacetype;
+ public XrPosef poseInReferenceSpace;
+ }
+ #endregion
+
+ public enum XrHandJointsMotionRangeEXT
+ {
+ XR_HAND_JOINTS_MOTION_RANGE_UNOBSTRUCTED_EXT = 1,
+ XR_HAND_JOINTS_MOTION_RANGE_CONFORMING_TO_CONTROLLER_EXT = 2,
+ XR_HAND_JOINTS_MOTION_RANGE_MAX_ENUM_EXT = 0x7FFFFFFF
+ }
+ }
+
+
+
+
+
+ public struct XrFovf
+ {
+ public float angleLeft;
+ public float angleRight;
+ public float angleUp;
+ public float angleDown;
+ }
+
+ public struct XrExtent2Df
+ {
+ public float width;
+ public float height;
+ }
+
+
+ namespace SceneUnderstanding
+ {
+ public struct XrSystemTrackingProperties
+ {
+ public uint orientationTracking;
+ public uint positionTracking;
+ }
+ [StructLayout(LayoutKind.Sequential)]
+ public struct XrSystemProperties
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public ulong systemId;
+ public uint vendorId;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
+ public char[] systemName;//char systemName[XR_MAX_SYSTEM_NAME_SIZE];
+ public XrSystemGraphicsProperties graphicsProperties;
+ public XrSystemTrackingProperties trackingProperties;
+ }
+ public enum XrStructureType
+ {
+ XR_TYPE_UNKNOWN = 0,
+ XR_TYPE_API_LAYER_PROPERTIES = 1,
+ XR_TYPE_EXTENSION_PROPERTIES = 2,
+ XR_TYPE_INSTANCE_CREATE_INFO = 3,
+ XR_TYPE_SYSTEM_GET_INFO = 4,
+ XR_TYPE_SYSTEM_PROPERTIES = 5,
+ XR_TYPE_VIEW_LOCATE_INFO = 6,
+ XR_TYPE_VIEW = 7,
+ XR_TYPE_SESSION_CREATE_INFO = 8,
+ XR_TYPE_SWAPCHAIN_CREATE_INFO = 9,
+ XR_TYPE_SESSION_BEGIN_INFO = 10,
+ XR_TYPE_VIEW_STATE = 11,
+ XR_TYPE_FRAME_END_INFO = 12,
+ XR_TYPE_HAPTIC_VIBRATION = 13,
+ XR_TYPE_EVENT_DATA_BUFFER = 16,
+ XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING = 17,
+ XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED = 18,
+ XR_TYPE_ACTION_STATE_BOOLEAN = 23,
+ XR_TYPE_ACTION_STATE_FLOAT = 24,
+ XR_TYPE_ACTION_STATE_VECTOR2F = 25,
+ XR_TYPE_ACTION_STATE_POSE = 27,
+ XR_TYPE_ACTION_SET_CREATE_INFO = 28,
+ XR_TYPE_ACTION_CREATE_INFO = 29,
+ XR_TYPE_INSTANCE_PROPERTIES = 32,
+ XR_TYPE_FRAME_WAIT_INFO = 33,
+ XR_TYPE_COMPOSITION_LAYER_PROJECTION = 35,
+ XR_TYPE_COMPOSITION_LAYER_QUAD = 36,
+ XR_TYPE_REFERENCE_SPACE_CREATE_INFO = 37,
+ XR_TYPE_ACTION_SPACE_CREATE_INFO = 38,
+ XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING = 40,
+ XR_TYPE_VIEW_CONFIGURATION_VIEW = 41,
+ XR_TYPE_SPACE_LOCATION = 42,
+ XR_TYPE_SPACE_VELOCITY = 43,
+ XR_TYPE_FRAME_STATE = 44,
+ XR_TYPE_VIEW_CONFIGURATION_PROPERTIES = 45,
+ XR_TYPE_FRAME_BEGIN_INFO = 46,
+ XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW = 48,
+ XR_TYPE_EVENT_DATA_EVENTS_LOST = 49,
+ XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING = 51,
+ XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED = 52,
+ XR_TYPE_INTERACTION_PROFILE_STATE = 53,
+ XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO = 55,
+ XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO = 56,
+ XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO = 57,
+ XR_TYPE_ACTION_STATE_GET_INFO = 58,
+ XR_TYPE_HAPTIC_ACTION_INFO = 59,
+ XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO = 60,
+ XR_TYPE_ACTIONS_SYNC_INFO = 61,
+ XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO = 62,
+ XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO = 63,
+ XR_TYPE_COMPOSITION_LAYER_CUBE_KHR = 1000006000,
+ XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR = 1000008000,
+ XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR = 1000010000,
+ XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR = 1000014000,
+ XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT = 1000015000,
+ XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR = 1000017000,
+ XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR = 1000018000,
+ XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT = 1000019000,
+ XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT = 1000019001,
+ XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT = 1000019002,
+ XR_TYPE_DEBUG_UTILS_LABEL_EXT = 1000019003,
+ XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR = 1000023000,
+ XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR = 1000023001,
+ XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR = 1000023002,
+ XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR = 1000023003,
+ XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR = 1000023004,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR = 1000023005,
+ XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR = 1000024001,
+ XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR = 1000024002,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR = 1000024003,
+ XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR = 1000025000,
+ XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR = 1000025001,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR = 1000025002,
+ XR_TYPE_GRAPHICS_BINDING_D3D11_KHR = 1000027000,
+ XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR = 1000027001,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR = 1000027002,
+ XR_TYPE_GRAPHICS_BINDING_D3D12_KHR = 1000028000,
+ XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR = 1000028001,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR = 1000028002,
+ XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT = 1000030000,
+ XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT = 1000030001,
+ XR_TYPE_VISIBILITY_MASK_KHR = 1000031000,
+ XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR = 1000031001,
+ XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX = 1000033000,
+ XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX = 1000033003,
+ XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR = 1000034000,
+ XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT = 1000039000,
+ XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT = 1000039001,
+ XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT = 1000046000,
+ XR_TYPE_GRAPHICS_BINDING_EGL_MNDX = 1000048004,
+ XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT = 1000049000,
+ XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT = 1000051000,
+ XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT = 1000051001,
+ XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT = 1000051002,
+ XR_TYPE_HAND_JOINT_LOCATIONS_EXT = 1000051003,
+ XR_TYPE_HAND_JOINT_VELOCITIES_EXT = 1000051004,
+ XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT = 1000052000,
+ XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT = 1000052001,
+ XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT = 1000052002,
+ XR_TYPE_HAND_MESH_MSFT = 1000052003,
+ XR_TYPE_HAND_POSE_TYPE_INFO_MSFT = 1000052004,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT = 1000053000,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT = 1000053001,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT = 1000053002,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT = 1000053003,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT = 1000053004,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT = 1000053005,
+ XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT = 1000055000,
+ XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT = 1000055001,
+ XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT = 1000055002,
+ XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT = 1000055003,
+ XR_TYPE_CONTROLLER_MODEL_STATE_MSFT = 1000055004,
+ XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC = 1000059000,
+ XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT = 1000063000,
+ XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB = 1000070000,
+ XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB = 1000071000,
+ XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB = 1000071001,
+ XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE = 1000079000,
+ XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT = 1000080000,
+ XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR = 1000089000,
+ XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR = 1000090000,
+ XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR = 1000090001,
+ XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR = 1000090003,
+ XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR = 1000091000,
+ XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT = 1000097000,
+ XR_TYPE_SCENE_CREATE_INFO_MSFT = 1000097001,
+ XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT = 1000097002,
+ XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT = 1000097003,
+ XR_TYPE_SCENE_COMPONENTS_MSFT = 1000097004,
+ XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT = 1000097005,
+ XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT = 1000097006,
+ XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT = 1000097007,
+ XR_TYPE_SCENE_OBJECTS_MSFT = 1000097008,
+ XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT = 1000097009,
+ XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT = 1000097010,
+ XR_TYPE_SCENE_PLANES_MSFT = 1000097011,
+ XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT = 1000097012,
+ XR_TYPE_SCENE_MESHES_MSFT = 1000097013,
+ XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT = 1000097014,
+ XR_TYPE_SCENE_MESH_BUFFERS_MSFT = 1000097015,
+ XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT = 1000097016,
+ XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT = 1000097017,
+ XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT = 1000097018,
+ XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT = 1000098000,
+ XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT = 1000098001,
+ XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB = 1000101000,
+ XR_TYPE_SYSTEM_PASS_THROUGH_PROPERTIES_HTC = 1000103000,
+ XR_TYPE_PASS_THROUGH_CREATE_INFO_HTC = 1000103001,
+ XR_TYPE_PASS_THROUGH_FRAME_HTC = 1000103002,
+ XR_TYPE_PASS_THROUGH_ACQUIRE_INFO_HTC = 1000103003,
+ XR_TYPE_EVENT_DATA_RUNTIME_EVENT_HTC = 1000103004,
+ XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC = 1000104000,
+ XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC = 1000104001,
+ XR_TYPE_FACIAL_EXPRESSIONS_HTC = 1000104002,
+ XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB = 1000108000,
+ XR_TYPE_BINDING_MODIFICATIONS_KHR = 1000120000,
+ XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO = 1000121000,
+ XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO = 1000121001,
+ XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO = 1000121002,
+ XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO = 1000122000,
+ XR_TYPE_GRAPHICS_BINDING_VULKAN2_KHR = XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR,
+ XR_TYPE_SWAPCHAIN_IMAGE_VULKAN2_KHR = XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN2_KHR = XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR,
+ XR_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
+ }
+ public enum XrResult
+ {
+ XR_SUCCESS = 0,
+ XR_TIMEOUT_EXPIRED = 1,
+ XR_SESSION_LOSS_PENDING = 3,
+ XR_EVENT_UNAVAILABLE = 4,
+ XR_SPACE_BOUNDS_UNAVAILABLE = 7,
+ XR_SESSION_NOT_FOCUSED = 8,
+ XR_FRAME_DISCARDED = 9,
+ XR_ERROR_VALIDATION_FAILURE = -1,
+ XR_ERROR_RUNTIME_FAILURE = -2,
+ XR_ERROR_OUT_OF_MEMORY = -3,
+ XR_ERROR_API_VERSION_UNSUPPORTED = -4,
+ XR_ERROR_INITIALIZATION_FAILED = -6,
+ XR_ERROR_FUNCTION_UNSUPPORTED = -7,
+ XR_ERROR_FEATURE_UNSUPPORTED = -8,
+ XR_ERROR_EXTENSION_NOT_PRESENT = -9,
+ XR_ERROR_LIMIT_REACHED = -10,
+ XR_ERROR_SIZE_INSUFFICIENT = -11,
+ XR_ERROR_HANDLE_INVALID = -12,
+ XR_ERROR_INSTANCE_LOST = -13,
+ XR_ERROR_SESSION_RUNNING = -14,
+ XR_ERROR_SESSION_NOT_RUNNING = -16,
+ XR_ERROR_SESSION_LOST = -17,
+ XR_ERROR_SYSTEM_INVALID = -18,
+ XR_ERROR_PATH_INVALID = -19,
+ XR_ERROR_PATH_COUNT_EXCEEDED = -20,
+ XR_ERROR_PATH_FORMAT_INVALID = -21,
+ XR_ERROR_PATH_UNSUPPORTED = -22,
+ XR_ERROR_LAYER_INVALID = -23,
+ XR_ERROR_LAYER_LIMIT_EXCEEDED = -24,
+ XR_ERROR_SWAPCHAIN_RECT_INVALID = -25,
+ XR_ERROR_SWAPCHAIN_FORMAT_UNSUPPORTED = -26,
+ XR_ERROR_ACTION_TYPE_MISMATCH = -27,
+ XR_ERROR_SESSION_NOT_READY = -28,
+ XR_ERROR_SESSION_NOT_STOPPING = -29,
+ XR_ERROR_TIME_INVALID = -30,
+ XR_ERROR_REFERENCE_SPACE_UNSUPPORTED = -31,
+ XR_ERROR_FILE_ACCESS_ERROR = -32,
+ XR_ERROR_FILE_CONTENTS_INVALID = -33,
+ XR_ERROR_FORM_FACTOR_UNSUPPORTED = -34,
+ XR_ERROR_FORM_FACTOR_UNAVAILABLE = -35,
+ XR_ERROR_API_LAYER_NOT_PRESENT = -36,
+ XR_ERROR_CALL_ORDER_INVALID = -37,
+ XR_ERROR_GRAPHICS_DEVICE_INVALID = -38,
+ XR_ERROR_POSE_INVALID = -39,
+ XR_ERROR_INDEX_OUT_OF_RANGE = -40,
+ XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED = -41,
+ XR_ERROR_ENVIRONMENT_BLEND_MODE_UNSUPPORTED = -42,
+ XR_ERROR_NAME_DUPLICATED = -44,
+ XR_ERROR_NAME_INVALID = -45,
+ XR_ERROR_ACTIONSET_NOT_ATTACHED = -46,
+ XR_ERROR_ACTIONSETS_ALREADY_ATTACHED = -47,
+ XR_ERROR_LOCALIZED_NAME_DUPLICATED = -48,
+ XR_ERROR_LOCALIZED_NAME_INVALID = -49,
+ XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING = -50,
+ XR_ERROR_RUNTIME_UNAVAILABLE = -51,
+ XR_ERROR_ANDROID_THREAD_SETTINGS_ID_INVALID_KHR = -1000003000,
+ XR_ERROR_ANDROID_THREAD_SETTINGS_FAILURE_KHR = -1000003001,
+ XR_ERROR_CREATE_SPATIAL_ANCHOR_FAILED_MSFT = -1000039001,
+ XR_ERROR_SECONDARY_VIEW_CONFIGURATION_TYPE_NOT_ENABLED_MSFT = -1000053000,
+ XR_ERROR_CONTROLLER_MODEL_KEY_INVALID_MSFT = -1000055000,
+ XR_ERROR_REPROJECTION_MODE_UNSUPPORTED_MSFT = -1000066000,
+ XR_ERROR_COMPUTE_NEW_SCENE_NOT_COMPLETED_MSFT = -1000097000,
+ XR_ERROR_SCENE_COMPONENT_ID_INVALID_MSFT = -1000097001,
+ XR_ERROR_SCENE_COMPONENT_TYPE_MISMATCH_MSFT = -1000097002,
+ XR_ERROR_SCENE_MESH_BUFFER_ID_INVALID_MSFT = -1000097003,
+ XR_ERROR_SCENE_COMPUTE_FEATURE_INCOMPATIBLE_MSFT = -1000097004,
+ XR_ERROR_SCENE_COMPUTE_CONSISTENCY_MISMATCH_MSFT = -1000097005,
+ XR_ERROR_DISPLAY_REFRESH_RATE_UNSUPPORTED_FB = -1000101000,
+ XR_ERROR_COLOR_SPACE_UNSUPPORTED_FB = -1000108000,
+ XR_ERROR_SPATIAL_ANCHOR_NAME_NOT_FOUND_MSFT = -1000142001,
+ XR_ERROR_SPATIAL_ANCHOR_NAME_INVALID_MSFT = -1000142002,
+ XR_RESULT_MAX_ENUM = 0x7FFFFFFF
+ }
+ public enum XrSceneComputeConsistencyMSFT
+ {
+ SnapshotComplete = 1,
+ SnapshotIncompleteFast = 2,
+ OcclusionOptimized = 3,
+ }
+
+ public enum XrSceneBoundType
+ {
+ Sphere = 1,
+ OrientedBox = 2,
+ Frustum = 3,
+ }
+
+ #region XR_MSFT_scene_understanding
+
+ public enum XrSceneComputeFeatureMSFT
+ {
+ XR_SCENE_COMPUTE_FEATURE_PLANE_MSFT = 1,
+ XR_SCENE_COMPUTE_FEATURE_PLANE_MESH_MSFT = 2,
+ XR_SCENE_COMPUTE_FEATURE_VISUAL_MESH_MSFT = 3,
+ XR_SCENE_COMPUTE_FEATURE_COLLIDER_MESH_MSFT = 4,
+ XR_SCENE_COMPUTE_FEATURE_SERIALIZE_SCENE_MSFT = 1000098000,
+ XR_SCENE_COMPUTE_FEATURE_OCCLUSION_HINT_MSFT = 1000099000,
+ XR_SCENE_COMPUTE_FEATURE_MAX_ENUM_MSFT = 0x7FFFFFFF
+ }
+
+ public enum XrMeshComputeLodMSFT
+ {
+ Coarse = 1,
+ Medium = 2,
+ Fine = 3,
+ Unlimited = 4,
+ }
+
+ public enum XrSceneComponentTypeMSFT
+ {
+ XR_SCENE_COMPONENT_TYPE_INVALID_MSFT = -1,
+ XR_SCENE_COMPONENT_TYPE_OBJECT_MSFT = 1,
+ XR_SCENE_COMPONENT_TYPE_PLANE_MSFT = 2,
+ XR_SCENE_COMPONENT_TYPE_VISUAL_MESH_MSFT = 3,
+ XR_SCENE_COMPONENT_TYPE_COLLIDER_MESH_MSFT = 4,
+ XR_SCENE_COMPONENT_TYPE_SERIALIZED_SCENE_FRAGMENT_MSFT = 1000098000,
+ XR_SCENE_COMPONENT_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF
+ }
+
+ public enum XrSceneObjectTypeMSFT
+ {
+ XR_SCENE_OBJECT_TYPE_UNCATEGORIZED_MSFT = -1,
+ XR_SCENE_OBJECT_TYPE_BACKGROUND_MSFT = 1,
+ XR_SCENE_OBJECT_TYPE_WALL_MSFT = 2,
+ XR_SCENE_OBJECT_TYPE_FLOOR_MSFT = 3,
+ XR_SCENE_OBJECT_TYPE_CEILING_MSFT = 4,
+ XR_SCENE_OBJECT_TYPE_PLATFORM_MSFT = 5,
+ XR_SCENE_OBJECT_TYPE_INFERRED_MSFT = 6,
+ XR_SCENE_OBJECT_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF
+ }
+
+ public enum XrScenePlaneAlignmentTypeMSFT
+ {
+ XR_SCENE_PLANE_ALIGNMENT_TYPE_NON_ORTHOGONAL_MSFT = 0,
+ XR_SCENE_PLANE_ALIGNMENT_TYPE_HORIZONTAL_MSFT = 1,
+ XR_SCENE_PLANE_ALIGNMENT_TYPE_VERTICAL_MSFT = 2,
+ XR_SCENE_PLANE_ALIGNMENT_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF
+ }
+
+ public enum XrSceneComputeStateMSFT
+ {
+ XR_SCENE_COMPUTE_STATE_NONE_MSFT = 0,
+ XR_SCENE_COMPUTE_STATE_UPDATING_MSFT = 1,
+ XR_SCENE_COMPUTE_STATE_COMPLETED_MSFT = 2,
+ XR_SCENE_COMPUTE_STATE_COMPLETED_WITH_ERROR_MSFT = 3,
+ XR_SCENE_COMPUTE_STATE_MAX_ENUM_MSFT = 0x7FFFFFFF
+ }
+
+ public struct XrUuidMSFT
+ {
+ public byte byte0;
+ public byte byte1;
+ public byte byte2;
+ public byte byte3;
+ public byte byte4;
+ public byte byte5;
+ public byte byte6;
+ public byte byte7;
+ public byte byte8;
+ public byte byte9;
+ public byte byte10;
+ public byte byte11;
+ public byte byte12;
+ public byte byte13;
+ public byte byte14;
+ public byte byte15;
+ public byte byte16;
+
+ }
+
+ public struct XrSceneObserverCreateInfoMSFT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ }
+
+ public struct XrSceneCreateInfoMSFT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ }
+
+ public struct XrSceneSphereBoundMSFT
+ {
+ public XrVector3f center;
+ public float radius;
+ }
+
+ public struct XrSceneOrientedBoxBoundMSFT
+ {
+ public XrPosef pose;
+ public XrVector3f extents;
+ }
+
+ public struct XrSceneFrustumBoundMSFT
+ {
+ public XrPosef pose;
+ public XrFovf fov;
+ public float farDistance;
+ }
+
+ public struct XrSceneBoundsMSFT
+ {
+ public ulong space;
+ public long time;
+ public uint sphereCount;
+
+ // XrSceneSphereBoundMSFT
+ public IntPtr spheres;
+ public uint boxCount;
+
+ // XrSceneOrientedBoxBoundMSFT
+ public IntPtr boxes;
+ public uint frustumCount;
+
+ // XrSceneFrustumBoundMSFT
+ public IntPtr frustums;
+ }
+
+ public struct XrNewSceneComputeInfoMSFT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public uint requestedFeatureCount;
+
+ // XrSceneComputeFeatureMSFT array
+ public IntPtr requestedFeatures;
+ public uint disableInferredSceneObjects;
+ public XrSceneBoundsMSFT bounds;
+ }
+
+ // XrVisualMeshComputeLodInfoMSFT extends XrNewSceneComputeInfoMSFT
+ public struct XrVisualMeshComputeLodInfoMSFT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public XrMeshComputeLodMSFT lod;
+ }
+
+ public struct XrSceneComponentMSFT
+ {
+ public XrSceneComponentTypeMSFT componentType;
+ public XrUuidMSFT componentId;
+ public XrUuidMSFT parentObjectId;
+ public long updateTime;
+ }
+
+ public struct XrSceneComponentsMSFT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public uint componentCapacityInput;
+ public uint componentCountOutput;
+
+ // XrSceneComponentMSFT array
+ public IntPtr components;
+ }
+
+ public struct XrSceneComponentsGetInfoMSFT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public XrSceneComponentTypeMSFT componentType;
+ }
+
+ public struct XrSceneComponentLocationMSFT
+ {
+ public ulong flags;
+ public XrPosef pose;
+ }
+
+ public struct XrSceneComponentLocationsMSFT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public uint locationCount;
+
+ // XrSceneComponentLocationMSFT array
+ public IntPtr locations;
+ }
+
+ public struct XrSceneComponentsLocateInfoMSFT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+
+ // XrSpace
+ public ulong baseSpace;
+
+ // XrTime
+ public long time;
+ public uint idCount;
+
+ // XrUuidMSFT array
+ public IntPtr ids;
+ }
+
+ public struct XrSceneObjectMSFT
+ {
+ public XrSceneObjectTypeMSFT objectType;
+ }
+
+ // XrSceneObjectsMSFT extends XrSceneComponentsMSFT
+ public struct XrSceneObjectsMSFT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public uint sceneObjectCount;
+
+ // XrSceneObjectMSFT array
+ public IntPtr sceneObjects;
+ }
+
+ // XrSceneComponentParentFilterInfoMSFT extends XrSceneComponentsGetInfoMSFT
+ public struct XrSceneComponentParentFilterInfoMSFT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public XrUuidMSFT parentObjectId;
+ }
+
+ // XrSceneObjectTypesFilterInfoMSFT extends XrSceneComponentsGetInfoMSFT
+ public struct XrSceneObjectTypesFilterInfoMSFT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public uint objectTypeCount;
+
+ // XrSceneObjectTypeMSFT array
+ public IntPtr objectTypes;
+ }
+
+ public struct XrScenePlaneMSFT
+ {
+ public XrScenePlaneAlignmentTypeMSFT alignment;
+ public XrExtent2Df size;
+ public ulong meshBufferId;
+
+ // XrBool32
+ public uint supportsIndicesUint16;
+ }
+
+ // XrScenePlanesMSFT extends XrSceneComponentsMSFT
+ public struct XrScenePlanesMSFT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public uint scenePlaneCount;
+
+ // XrScenePlaneMSFT array
+ public IntPtr scenePlanes;
+ }
+
+ // XrScenePlaneAlignmentFilterInfoMSFT extends XrSceneComponentsGetInfoMSFT
+ public struct XrScenePlaneAlignmentFilterInfoMSFT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public uint alignmentCount;
+
+ // XrScenePlaneAlignmentTypeMSFT array
+ public IntPtr alignments;
+ }
+
+ public struct XrSceneMeshMSFT
+ {
+ public ulong meshBufferId;
+
+ // XrBool32
+ public uint supportsIndicesUint16;
+ }
+
+ // XrSceneMeshesMSFT extends XrSceneComponentsMSFT
+ public struct XrSceneMeshesMSFT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public uint sceneMeshCount;
+
+ // XrSceneMeshMSFT array
+ public IntPtr sceneMeshes;
+ }
+
+ public struct XrSceneMeshBuffersGetInfoMSFT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public ulong meshBufferId;
+ }
+
+ public struct XrSceneMeshBuffersMSFT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ }
+
+ public struct XrSceneMeshVertexBufferMSFT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public uint vertexCapacityInput;
+ public uint vertexCountOutput;
+
+ // XrVector3f array
+ public IntPtr vertices;
+ }
+
+ public struct XrSceneMeshIndicesUint32MSFT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public uint indexCapacityInput;
+ public uint indexCountOutput;
+
+ // uint32_t array
+ public IntPtr indices;
+ }
+
+ public struct XrSceneMeshIndicesUint16MSFT
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public uint indexCapacityInput;
+ public uint indexCountOutput;
+
+ // uint16_t array
+ public IntPtr indices;
+ }
+
+ public struct XrSystemPassThroughCameraInfoHTC
+ {
+ public float focalLengthX;
+ public float focalLengthY;
+ public float opticalCenterX;
+ public float opticalCenterY;
+ public uint imageWidth;
+ public uint imageHeight;
+ public uint imageChannelCount;
+ }
+ public struct XrSystemPassThroughPropertiesHTC
+ {
+ public XrStructureType type;
+ public IntPtr next;
+ public uint supportsPassThrough;
+ XrSystemPassThroughCameraInfoHTC leftCameraInfo;
+ XrSystemPassThroughCameraInfoHTC rightCameraInfo;
+ public int deviceType;
+ public long format;
+ }
+#endregion
+ }
+
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/Include/OpenXR.cs.meta b/com.htc.upm.vive.openxr/Include/OpenXR.cs.meta
new file mode 100644
index 0000000..3c8620e
--- /dev/null
+++ b/com.htc.upm.vive.openxr/Include/OpenXR.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a99cc2a2471f1e7499276e561bbb8d1e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRCosmosController.meta b/com.htc.upm.vive.openxr/OpenXRCosmosController.meta
new file mode 100644
index 0000000..507948d
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRCosmosController.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8d3cf59612880f3488745edeb4a77259
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRCosmosController/Runtime.meta b/com.htc.upm.vive.openxr/OpenXRCosmosController/Runtime.meta
new file mode 100644
index 0000000..7b397be
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRCosmosController/Runtime.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 661e7acd9eb00954994e90a733ef85c3
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRCosmosController/Runtime/input.meta b/com.htc.upm.vive.openxr/OpenXRCosmosController/Runtime/input.meta
new file mode 100644
index 0000000..5ee7a07
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRCosmosController/Runtime/input.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 42871fe047fc3f6428246272b42a0630
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRCosmosController/Runtime/input/Features.meta b/com.htc.upm.vive.openxr/OpenXRCosmosController/Runtime/input/Features.meta
new file mode 100644
index 0000000..c577e07
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRCosmosController/Runtime/input/Features.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7cc26b297a5859041aa2a4c1b6ea8d45
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRCosmosController/Runtime/input/Features/HtcViveCosmosInputFeature.cs b/com.htc.upm.vive.openxr/OpenXRCosmosController/Runtime/input/Features/HtcViveCosmosInputFeature.cs
new file mode 100644
index 0000000..1430691
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRCosmosController/Runtime/input/Features/HtcViveCosmosInputFeature.cs
@@ -0,0 +1,620 @@
+using System.Collections.Generic;
+using UnityEngine.Scripting;
+using UnityEngine.XR.OpenXR.Input;
+using UnityEngine.InputSystem.Layouts;
+using UnityEngine.InputSystem.Controls;
+using UnityEngine.InputSystem.XR;
+
+#if UNITY_EDITOR
+using UnityEditor;
+#endif
+
+using PoseControl = UnityEngine.XR.OpenXR.Input.PoseControl;
+
+
+namespace UnityEngine.XR.OpenXR.Features
+{
+ ///
+ /// This enables the use of HTC Vive Controllers interaction profiles in OpenXR.
+ ///
+#if UNITY_EDITOR
+ [UnityEditor.XR.OpenXR.Features.OpenXRFeature(UiName = "HTC Vive Cosmos Controller Support",
+ BuildTargetGroups = new[] { BuildTargetGroup.Standalone, BuildTargetGroup.WSA },
+ Company = "HTC",
+ Desc = "Allows for mapping input to the HTC Vive Cosmos Controller interaction profile.",
+ DocumentationLink = "https://developer.vive.com/resources/openxr/openxr-pcvr/tutorials/unity/cosmos-controller-openxr-feature-unity/",
+ OpenxrExtensionStrings = "XR_HTC_vive_cosmos_controller_interaction XR_EXT_palm_pose",
+ Version = "0.0.2",
+ Category = UnityEditor.XR.OpenXR.Features.FeatureCategory.Interaction,
+ FeatureId = featureId)]
+#endif
+ public class HtcViveCosmosInputFeature : OpenXRInteractionFeature
+ {
+ ///
+ /// The feature id string. This is used to give the feature a well known id for reference.
+ ///
+ public const string featureId = "com.htc.openxr.feature.input.htcvivecosmos";
+
+ ///
+ /// An Input System device based off the HTC Vive Controller.
+ ///
+ ///
+ [Preserve, InputControlLayout(displayName = "HTC Vive Cosmos Controller (OpenXR)", commonUsages = new[] { "LeftHand", "RightHand" })]
+ public class ViveCosmosController : XRControllerWithRumble
+ {
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "GripAxis" })]
+ public AxisControl grip { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "GripButton" })]
+ public ButtonControl gripPressed { get; private set; }
+
+ ///
+ /// A representing the OpenXR bindings, depending on handedness.
+ ///
+ [Preserve, InputControl(aliases = new[] { "B", "Y" })]
+ public ButtonControl secondaryButton { get; private set; }
+
+ ///
+ /// A representing the OpenXR bindings, depending on handedness.
+ ///
+ [Preserve, InputControl(aliases = new[] { "A", "X" })]
+ public ButtonControl primaryButton { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "ShoulderButton" })]
+ public ButtonControl shoulderPressed { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "Primary", "menubutton" })]
+ public ButtonControl menu { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "triggeraxis" })]
+ public AxisControl trigger { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "triggerbutton" })]
+ public ButtonControl triggerPressed { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "Primary2DAxis", "joystickaxes" })]
+ public Vector2Control joystick { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "joystickorpadpressed", "joystickpressed" })]
+ public ButtonControl joystickClicked { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "joystickorpadtouched", "joysticktouched" })]
+ public ButtonControl joystickTouched { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(offset = 0, alias = "device")]
+ public PoseControl devicePose { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(offset = 0)]
+ public PoseControl pointer { get; private set; }
+
+ ///
+ /// A required for back compatibility with the XRSDK layouts. this represents the overall tracking state of the device. this value is equivalent to mapping devicePose/isTracked
+ ///
+ [Preserve, InputControl(offset = 28)]
+ new public ButtonControl isTracked { get; private set; }
+
+ ///
+ /// A required for back compatibility with the XRSDK layouts. this represents the bit flag set indicating what data is valid. this value is equivalent to mapping devicePose/trackingState
+ ///
+ [Preserve, InputControl(offset = 32)]
+ new public IntegerControl trackingState { get; private set; }
+
+ ///
+ /// A required for back compatibility with the XRSDK layouts. this is the device position, or grip position. this value is equivalent to mapping devicePose/position
+ ///
+ [Preserve, InputControl(offset = 36, aliases = new[] { "gripPosition" })]
+ new public Vector3Control devicePosition { get; private set; }
+
+ ///
+ /// A required for back compatibility with the XRSDK layouts. this is the device orientation, or grip orientation. this value is equivalent to mapping devicePose/rotation
+ ///
+ [Preserve, InputControl(offset = 48, aliases = new[] { "gripOrientation", "gripRotation" })]
+ new public QuaternionControl deviceRotation { get; private set; }
+
+ ///
+ /// A required for back compatibility with the XRSDK layouts. this is the pointer position. this value is equivalent to mapping pointerPose/position
+ ///
+ [Preserve, InputControl(offset = 96)]
+ public Vector3Control pointerPosition { get; private set; }
+
+ ///
+ /// A required for back compatibility with the XRSDK layouts. this is the pointer rotation. this value is equivalent to mapping pointerPose/rotation
+ ///
+ [Preserve, InputControl(offset = 108, aliases = new[] { "pointerOrientation" })]
+ public QuaternionControl pointerRotation { get; private set; }
+ ///
+ /// A that represents the binding.
+ ///
+ [Preserve, InputControl(usage = "Haptic")]
+ public HapticControl haptic { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl()]
+ public PoseControl palm { get; private set; }
+
+
+ ///
+ protected override void FinishSetup()
+ {
+ base.FinishSetup();
+ grip = GetChildControl("grip");
+ gripPressed = GetChildControl("gripPressed");
+ primaryButton = GetChildControl("primaryButton");
+ secondaryButton = GetChildControl("secondaryButton");
+ shoulderPressed = GetChildControl("shoulderPressed");
+ menu = GetChildControl("menu");
+ trigger = GetChildControl("trigger");
+ triggerPressed = GetChildControl("triggerPressed");
+ joystick = GetChildControl("joystick");
+ joystickClicked = GetChildControl("joystickClicked");
+ joystickTouched = GetChildControl("joystickTouched");
+
+ devicePose = GetChildControl("devicePose");
+ pointer = GetChildControl("pointer");
+
+ isTracked = GetChildControl("isTracked");
+ trackingState = GetChildControl("trackingState");
+ devicePosition = GetChildControl("devicePosition");
+ deviceRotation = GetChildControl("deviceRotation");
+ pointerPosition = GetChildControl("pointerPosition");
+ pointerRotation = GetChildControl("pointerRotation");
+ haptic = GetChildControl("haptic");
+ palm = GetChildControl("palm");
+ }
+ }
+ /// The interaction profile string used to reference the HTC Vive Controller.
+ public const string profile = "/interaction_profiles/htc/vive_cosmos_controller";
+
+ ///
+ /// Constant for a interaction binding '.../input/trigger/click' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string select = "/input/trigger/click";
+
+ ///
+ /// Constant for a interaction binding '.../input/a/click' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string a = "/input/a/click";
+
+ ///
+ /// Constant for a interaction binding '.../input/b/click' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string b = "/input/b/click";
+
+ ///
+ /// Constant for a interaction binding '.../input/x/click' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string x = "/input/x/click";
+
+ ///
+ /// Constant for a interaction binding '.../input/y/click' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string y = "/input/y/click";
+
+
+ ///
+ /// Constant for a interaction binding '.../input/y/shoulder' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string shoulder = "/input/shoulder/click";
+
+ ///
+ /// Constant for a interaction binding '.../input/squeeze/click' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string squeeze = "/input/squeeze/click";
+ ///
+ /// Constant for a interaction binding '.../input/menu/click' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string menu = "/input/menu/click";
+ ///
+ /// Constant for a interaction binding '.../input/trigger/value' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string trigger = "/input/trigger/value";
+ ///
+ /// Constant for a interaction binding '.../input/trigger/click' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string triggerClick = "/input/trigger/click";
+ ///
+ /// Constant for a interaction binding '.../input/trackpad' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string thumbstick = "/input/thumbstick";
+ ///
+ /// Constant for a interaction binding '.../input/trackpad/click' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string thumbstickClick = "/input/thumbstick/click";
+ ///
+ /// Constant for a interaction binding '.../input/trackpad/touch' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string thumbstickTouch = "/input/thumbstick/touch";
+ ///
+ /// Constant for a interaction binding '.../input/grip/pose' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string grip = "/input/grip/pose";
+ ///
+ /// Constant for a interaction binding '.../input/aim/pose' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string aim = "/input/aim/pose";
+ ///
+ /// Constant for a interaction binding '.../output/haptic' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string haptic = "/output/haptic";
+
+ ///
+ /// Constant for a interaction binding '.../input/palm_ext/pose' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string palm = "/input/palm_ext/pose";
+
+
+ private const string kDeviceLocalizedName = "HTC Vive Cosmos Controller OpenXR";
+
+ ///
+ /// Registers the layout with the Input System. Matches the that is registered with .
+ ///
+ protected override void RegisterDeviceLayout()
+ {
+ InputSystem.InputSystem.RegisterLayout(typeof(ViveCosmosController),
+ matches: new InputDeviceMatcher()
+ .WithInterface(XRUtilities.InterfaceMatchAnyVersion)
+ .WithProduct(kDeviceLocalizedName));
+ }
+
+
+ ///
+ /// Removes the layout from the Input System. Matches the that is registered with .
+ ///
+ protected override void UnregisterDeviceLayout()
+ {
+ InputSystem.InputSystem.RemoveLayout(typeof(ViveCosmosController).Name);
+ }
+
+ ///
+ /// Registers an with OpenXR that matches the HTC Vive Controller. Also calls when the Input System package is available.
+ ///
+ protected override void RegisterActionMapsWithRuntime()
+ {
+ ActionMapConfig actionMap = new ActionMapConfig()
+ {
+ name = "vivecosmoscontroller",
+ localizedName = kDeviceLocalizedName,
+ desiredInteractionProfile = profile,
+ manufacturer = "HTC",
+ serialNumber = "",
+ deviceInfos = new List()
+ {
+ new DeviceConfig()
+ {
+ characteristics = (InputDeviceCharacteristics)(InputDeviceCharacteristics.HeldInHand | InputDeviceCharacteristics.TrackedDevice | InputDeviceCharacteristics.Controller | InputDeviceCharacteristics.Left),
+ userPath = UserPaths.leftHand
+ },
+ new DeviceConfig()
+ {
+ characteristics = (InputDeviceCharacteristics)(InputDeviceCharacteristics.HeldInHand | InputDeviceCharacteristics.TrackedDevice | InputDeviceCharacteristics.Controller | InputDeviceCharacteristics.Right),
+ userPath = UserPaths.rightHand
+ }
+ },
+ actions = new List()
+ {
+ new ActionConfig()
+ {
+ name = "primarybutton",
+ localizedName = "Primary Button",
+ type = ActionType.Binary,
+ usages = new List()
+ {
+ "PrimaryButton"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = x,
+ interactionProfileName = profile,
+ userPaths = new List() { UserPaths.leftHand }
+ },
+ new ActionBinding()
+ {
+ interactionPath = a,
+ interactionProfileName = profile,
+ userPaths = new List() { UserPaths.rightHand }
+ },
+ }
+ },
+ new ActionConfig()
+ {
+ name = "secondarybutton",
+ localizedName = "Secondary Button",
+ type = ActionType.Binary,
+ usages = new List()
+ {
+ "SecondaryButton"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = y,
+ interactionProfileName = profile,
+ userPaths = new List() { UserPaths.leftHand }
+ },
+ new ActionBinding()
+ {
+ interactionPath = b,
+ interactionProfileName = profile,
+ userPaths = new List() { UserPaths.rightHand }
+ },
+ }
+ },
+ new ActionConfig()
+ {
+ name = "grip",
+ localizedName = "Grip",
+ type = ActionType.Axis1D,
+ usages = new List()
+ {
+ "Grip"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = squeeze,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "grippressed",
+ localizedName = "Grip Pressed",
+ type = ActionType.Binary,
+ usages = new List()
+ {
+ "GripPressed",
+ "GripButton"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = squeeze,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "menu",
+ localizedName = "Menu",
+ type = ActionType.Binary,
+ usages = new List()
+ {
+ "MenuButton"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = menu,
+ interactionProfileName = profile,
+ userPaths = new List() { UserPaths.leftHand }
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "shoulderpressed",
+ localizedName = "Shoulder Pressed",
+ type = ActionType.Binary,
+ usages = new List()
+ {
+ "ShoulderButton"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = shoulder,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "trigger",
+ localizedName = "Trigger",
+ type = ActionType.Axis1D,
+ usages = new List()
+ {
+ "Trigger"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = trigger,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "triggerpressed",
+ localizedName = "Trigger Pressed",
+ type = ActionType.Binary,
+ usages = new List()
+ {
+ "TriggerPressed",
+ "TriggerButton"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = triggerClick,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "thumbstick",
+ localizedName = "Thumbstick",
+ type = ActionType.Axis2D,
+ usages = new List()
+ {
+ "Primary2DAxis"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = thumbstick,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "thumbsticktouched",
+ localizedName = "Thumbstick Touched",
+ type = ActionType.Binary,
+ usages = new List()
+ {
+ "Primary2DAxisTouch"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = thumbstickTouch,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "thumbstickclicked",
+ localizedName = "Thumbstick Clicked",
+ type = ActionType.Binary,
+ usages = new List()
+ {
+ "Primary2DAxisClick"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = thumbstickClick,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "devicepose",
+ localizedName = "Device Pose",
+ type = ActionType.Pose,
+ usages = new List()
+ {
+ "Device"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = grip,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "pointer",
+ localizedName = "Pointer Pose",
+ type = ActionType.Pose,
+ usages = new List()
+ {
+ "Pointer"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = aim,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "haptic",
+ localizedName = "Haptic Output",
+ type = ActionType.Vibrate,
+ usages = new List(){ "Haptic" },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = haptic,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "palm",
+ localizedName = "Palm Pose",
+ type = ActionType.Pose,
+ usages = new List()
+ {
+ "Palm"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = palm,
+ interactionProfileName = profile,
+ }
+ }
+ }
+ }
+ };
+
+ AddActionMap(actionMap);
+ }
+ }
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRCosmosController/Runtime/input/Features/HtcViveCosmosInputFeature.cs.meta b/com.htc.upm.vive.openxr/OpenXRCosmosController/Runtime/input/Features/HtcViveCosmosInputFeature.cs.meta
new file mode 100644
index 0000000..736834f
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRCosmosController/Runtime/input/Features/HtcViveCosmosInputFeature.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d008d94966c2e9e4c868ca2c0d777357
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking.meta
new file mode 100644
index 0000000..370dfe5
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 11437acb07f69f0488ff34fc80714d41
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Editor.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Editor.meta
new file mode 100644
index 0000000..369dd0f
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d308a0a31ed751c4e8732edd46dab7a0
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Editor/FacialTrackingFeatureInstaller.cs b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Editor/FacialTrackingFeatureInstaller.cs
new file mode 100644
index 0000000..d551b2a
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Editor/FacialTrackingFeatureInstaller.cs
@@ -0,0 +1,43 @@
+using UnityEditor;
+using UnityEditor.XR.OpenXR.Features;
+using UnityEngine;
+using UnityEngine.XR.OpenXR;
+using System.Linq;
+using System.IO;
+using VIVE.FacialTracking;
+namespace UnityEditor.XR.OpenXR.Samples.FacialTracking
+{
+ [InitializeOnLoad]
+ public class FacialTrackingFeatureInstaller : Editor
+ {
+#if !UNITY_SAMPLE_DEV
+ private const string k_ScriptPath = "FacialTracking Example/Editor/FacialTrackingFeatureInstaller.cs";
+ static FacialTrackingFeatureInstaller()
+ {
+ FeatureHelpers.RefreshFeatures(BuildTargetGroup.Standalone);
+ var feature = OpenXRSettings.Instance.GetFeature();
+ if (feature != null)
+ {
+ if (feature.enabled != true)
+ {
+ feature.enabled = true;
+ }
+ }
+ Debug.Log(AssetDatabase.FindAssets(Path.GetFileNameWithoutExtension(k_ScriptPath)).Select(AssetDatabase.GUIDToAssetPath));
+ var source = AssetDatabase.FindAssets(Path.GetFileNameWithoutExtension(k_ScriptPath))
+ .Select(AssetDatabase.GUIDToAssetPath)
+ .FirstOrDefault(r => r.Contains(k_ScriptPath));
+
+ if (string.IsNullOrEmpty(source))
+ {
+ Debug.LogError("File Not Exist");
+ return;
+ }
+
+ source = Path.GetDirectoryName(source);
+ Debug.Log(source);
+ AssetDatabase.DeleteAsset(Path.Combine(Path.GetDirectoryName(source), "Editor"));
+ }
+#endif
+ }
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Editor/FacialTrackingFeatureInstaller.cs.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Editor/FacialTrackingFeatureInstaller.cs.meta
new file mode 100644
index 0000000..9842389
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Editor/FacialTrackingFeatureInstaller.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a81422121780bf041a3c72f79f71bd2c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light.meta
new file mode 100644
index 0000000..6df83cd
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3db97ef06df531243bb52fd4a70723ea
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/BG_HDRI_mat.mat b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/BG_HDRI_mat.mat
new file mode 100644
index 0000000..ace83cd
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/BG_HDRI_mat.mat
@@ -0,0 +1,84 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: BG_HDRI_mat
+ m_Shader: {fileID: 108, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords: _MAPPING_LATITUDE_LONGITUDE_LAYOUT _MIRRORONBACK_ON
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 2800000, guid: 4f5cea95371d40449ae3843c39c2ad0d, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _Exposure: 1
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _ImageType: 0
+ - _Layout: 0
+ - _Mapping: 1
+ - _Metallic: 0
+ - _MirrorOnBack: 1
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _Rotation: 15
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ - _Tint: {r: 1, g: 1, b: 1, a: 0.5}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/BG_HDRI_mat.mat.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/BG_HDRI_mat.mat.meta
new file mode 100644
index 0000000..a4ff121
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/BG_HDRI_mat.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 07feae72eb0d201478ff416324676cf3
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/BG_Sphere.fbx b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/BG_Sphere.fbx
new file mode 100644
index 0000000..2c8dbc5
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/BG_Sphere.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a6f1d6f29e0bd0c1df7f8f0086052987dd7b6c5bbb3f46a005318fbf6180731d
+size 83226
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/BG_Sphere.fbx.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/BG_Sphere.fbx.meta
new file mode 100644
index 0000000..30e1f9d
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/BG_Sphere.fbx.meta
@@ -0,0 +1,97 @@
+fileFormatVersion: 2
+guid: 199c3bd67beb8c6469f1453fe2a36ff8
+ModelImporter:
+ serializedVersion: 23
+ fileIDToRecycleName:
+ 100000: //RootNode
+ 400000: //RootNode
+ 2100000: lambert1
+ 2300000: //RootNode
+ 3300000: //RootNode
+ 4300000: BG_Sphere
+ externalObjects: {}
+ materials:
+ importMaterials: 1
+ materialName: 0
+ materialSearch: 1
+ materialLocation: 1
+ animations:
+ legacyGenerateAnimations: 4
+ bakeSimulation: 0
+ resampleCurves: 1
+ optimizeGameObjects: 0
+ motionNodeName:
+ rigImportErrors:
+ rigImportWarnings:
+ animationImportErrors:
+ animationImportWarnings:
+ animationRetargetingWarnings:
+ animationDoRetargetingWarnings: 0
+ importAnimatedCustomProperties: 0
+ importConstraints: 0
+ animationCompression: 1
+ animationRotationError: 0.5
+ animationPositionError: 0.5
+ animationScaleError: 0.5
+ animationWrapMode: 0
+ extraExposedTransformPaths: []
+ extraUserProperties: []
+ clipAnimations: []
+ isReadable: 1
+ meshes:
+ lODScreenPercentages: []
+ globalScale: 1
+ meshCompression: 0
+ addColliders: 0
+ useSRGBMaterialColor: 1
+ importVisibility: 1
+ importBlendShapes: 1
+ importCameras: 1
+ importLights: 1
+ swapUVChannels: 1
+ generateSecondaryUV: 1
+ useFileUnits: 1
+ optimizeMeshForGPU: 1
+ keepQuads: 0
+ weldVertices: 1
+ preserveHierarchy: 0
+ indexFormat: 0
+ secondaryUVAngleDistortion: 8
+ secondaryUVAreaDistortion: 15.000001
+ secondaryUVHardAngle: 88
+ secondaryUVPackMargin: 4
+ useFileScale: 1
+ previousCalculatedGlobalScale: 1
+ hasPreviousCalculatedGlobalScale: 0
+ tangentSpace:
+ normalSmoothAngle: 180
+ normalImportMode: 0
+ tangentImportMode: 3
+ normalCalculationMode: 4
+ legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
+ blendShapeNormalImportMode: 1
+ normalSmoothingSource: 0
+ importAnimation: 1
+ copyAvatar: 0
+ humanDescription:
+ serializedVersion: 2
+ human: []
+ skeleton: []
+ armTwist: 0.5
+ foreArmTwist: 0.5
+ upperLegTwist: 0.5
+ legTwist: 0.5
+ armStretch: 0.05
+ legStretch: 0.05
+ feetSpacing: 0
+ rootMotionBoneName:
+ hasTranslationDoF: 0
+ hasExtraRoot: 0
+ skeletonHasParents: 1
+ lastHumanDescriptionAvatarSource: {instanceID: 0}
+ animationType: 0
+ humanoidOversampling: 1
+ additionalBone: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/BG_mat.mat b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/BG_mat.mat
new file mode 100644
index 0000000..47db27b
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/BG_mat.mat
@@ -0,0 +1,123 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: BG_mat
+ m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses:
+ - DistortionVectors
+ - MOTIONVECTORS
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DistortionVectorMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissiveColorMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _UnlitColorMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _AlphaCutoff: 0.5
+ - _AlphaCutoffEnable: 0
+ - _BlendMode: 0
+ - _BumpScale: 1
+ - _CullMode: 2
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DistortionBlendMode: 0
+ - _DistortionBlurBlendMode: 0
+ - _DistortionBlurDstBlend: 1
+ - _DistortionBlurRemapMax: 1
+ - _DistortionBlurRemapMin: 0
+ - _DistortionBlurScale: 1
+ - _DistortionBlurSrcBlend: 1
+ - _DistortionDepthTest: 1
+ - _DistortionDstBlend: 1
+ - _DistortionEnable: 0
+ - _DistortionOnly: 0
+ - _DistortionScale: 1
+ - _DistortionSrcBlend: 1
+ - _DistortionVectorBias: -1
+ - _DistortionVectorScale: 2
+ - _DoubleSidedEnable: 0
+ - _DstBlend: 0
+ - _EnableFogOnTransparent: 0
+ - _GlossMapScale: 0
+ - _Glossiness: 0
+ - _GlossyReflections: 1
+ - _HdrpVersion: 2
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _PreRefractionPass: 0
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _StencilRef: 2
+ - _StencilRefMV: 128
+ - _StencilWriteMask: 7
+ - _StencilWriteMaskMV: 128
+ - _SurfaceType: 0
+ - _TransparentSortPriority: 0
+ - _UVSec: 0
+ - _ZTestModeDistortion: 4
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 0.0627451, g: 0.0627451, b: 0.0627451, a: 1}
+ - _EmissionColor: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1}
+ - _UnlitColor: {r: 1, g: 1, b: 1, a: 1}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/BG_mat.mat.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/BG_mat.mat.meta
new file mode 100644
index 0000000..04d74f4
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/BG_mat.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8a5a89b610f3b1849965dba78a1458f1
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/SphereUV_Tex.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/SphereUV_Tex.png
new file mode 100644
index 0000000..61a232c
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/SphereUV_Tex.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:acd6e661924dc896acf61b0617dbce999d5fc89549dcd2cd5d39b337ec53679f
+size 5214
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/SphereUV_Tex.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/SphereUV_Tex.png.meta
new file mode 100644
index 0000000..4c6d296
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/SphereUV_Tex.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: bcdf0ee249a91f64bb8b5c7b38521708
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 0
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: 0
+ mipBias: -100
+ wrapU: 1
+ wrapV: 1
+ wrapW: 1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 2
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 10
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/studio_small_04_4k.hdr b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/studio_small_04_4k.hdr
new file mode 100644
index 0000000..c5d2454
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/studio_small_04_4k.hdr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:84a41cc648affca9d36c766486b7b12522b1fc90ebde2716b22f476478e75611
+size 26084423
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/studio_small_04_4k.hdr.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/studio_small_04_4k.hdr.meta
new file mode 100644
index 0000000..ed680dc
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Environment_Light/studio_small_04_4k.hdr.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 4f5cea95371d40449ae3843c39c2ad0d
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials.meta
new file mode 100644
index 0000000..b41930f
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 56a49c013c6e3bf418a2832ae71d93b5
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/DartBoardMaterial.mat b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/DartBoardMaterial.mat
new file mode 100644
index 0000000..3112d1e
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/DartBoardMaterial.mat
@@ -0,0 +1,47 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: DartBoardMaterial
+ m_Shader: {fileID: 4800000, guid: 3a9024653b4a9fa499d136839799ad85, type: 3}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: 3000
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - :
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - : 0
+ - _BendCount: 1
+ - _BendIndex: -2
+ - _FrameWidth: 1
+ - _PieCount: 1
+ - _PieIndex: 1
+ - _Scale: 1
+ m_Colors:
+ - : {r: 0, g: 1.5737913e-34, b: 0, a: 1.573784e-34}
+ - _Color0: {r: 0.4862745, g: 0.44313726, b: 0.32941177, a: 1}
+ - _Color1: {r: 0.078431375, g: 0.07058824, b: 0.08235294, a: 1}
+ - _Color2: {r: 0.39215687, g: 0.09019608, b: 0.09019608, a: 1}
+ - _Color3: {r: 1, g: 0, b: 0, a: 1}
+ - _Color4: {r: 0.09411765, g: 0.27058825, b: 0.09803922, a: 1}
+ - _ColorHit: {r: 0.80784315, g: 0.7882353, b: 0, a: 1}
+ - _MeshCenter: {r: 0, g: 0, b: 0, a: 0}
+ - _MeshForward: {r: 0, g: 0, b: 0, a: 0}
+ - _MeshRight: {r: 0, g: 0, b: 0, a: 0}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/DartBoardMaterial.mat.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/DartBoardMaterial.mat.meta
new file mode 100644
index 0000000..69df02c
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/DartBoardMaterial.mat.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 733fa7de874ca6f4abd64315e0336799
+timeCreated: 1547524415
+licenseType: Pro
+NativeFormatImporter:
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/MirrorMaterial.mat b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/MirrorMaterial.mat
new file mode 100644
index 0000000..28e30e5
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/MirrorMaterial.mat
@@ -0,0 +1,127 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: MirrorMaterial
+ m_Shader: {fileID: 10752, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords: _EMISSION
+ m_LightmapFlags: 1
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ m_SavedProperties:
+ serializedVersion: 2
+ m_TexEnvs:
+ - first:
+ name: _BumpMap
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _DetailAlbedoMap
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _DetailMask
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _DetailNormalMap
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _EmissionMap
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _MainTex
+ second:
+ m_Texture: {fileID: 8400000, guid: 600a6f0266444c145945aa3e7f2a29a6, type: 2}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _MetallicGlossMap
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _OcclusionMap
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _ParallaxMap
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - first:
+ name: _BumpScale
+ second: 1
+ - first:
+ name: _Cutoff
+ second: 0.5
+ - first:
+ name: _DetailNormalMapScale
+ second: 1
+ - first:
+ name: _DstBlend
+ second: 0
+ - first:
+ name: _GlossMapScale
+ second: 1
+ - first:
+ name: _Glossiness
+ second: 0.5
+ - first:
+ name: _GlossyReflections
+ second: 1
+ - first:
+ name: _Metallic
+ second: 0
+ - first:
+ name: _Mode
+ second: 0
+ - first:
+ name: _OcclusionStrength
+ second: 1
+ - first:
+ name: _Parallax
+ second: 0.02
+ - first:
+ name: _SmoothnessTextureChannel
+ second: 0
+ - first:
+ name: _SpecularHighlights
+ second: 1
+ - first:
+ name: _SrcBlend
+ second: 1
+ - first:
+ name: _UVSec
+ second: 0
+ - first:
+ name: _ZWrite
+ second: 1
+ m_Colors:
+ - first:
+ name: _Color
+ second: {r: 1, g: 1, b: 1, a: 1}
+ - first:
+ name: _EmissionColor
+ second: {r: 0, g: 0, b: 0, a: 1}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/MirrorMaterial.mat.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/MirrorMaterial.mat.meta
new file mode 100644
index 0000000..48fe186
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/MirrorMaterial.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 20c0a6a4ee4540848b1ad902026d6110
+timeCreated: 1539743270
+licenseType: Pro
+NativeFormatImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/MirrorRenderTexture.renderTexture b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/MirrorRenderTexture.renderTexture
new file mode 100644
index 0000000..a2a7e55
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/MirrorRenderTexture.renderTexture
@@ -0,0 +1,24 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!84 &8400000
+RenderTexture:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: MirrorRenderTexture
+ m_ImageContentsHash:
+ serializedVersion: 2
+ Hash: 00000000000000000000000000000000
+ m_Width: 1024
+ m_Height: 1024
+ m_AntiAliasing: 1
+ m_DepthFormat: 2
+ m_ColorFormat: 0
+ m_MipMap: 0
+ m_GenerateMips: 1
+ m_SRGB: 0
+ m_TextureSettings:
+ m_FilterMode: 2
+ m_Aniso: 0
+ m_MipBias: 0
+ m_WrapMode: 1
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/MirrorRenderTexture.renderTexture.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/MirrorRenderTexture.renderTexture.meta
new file mode 100644
index 0000000..a895dd3
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/MirrorRenderTexture.renderTexture.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 600a6f0266444c145945aa3e7f2a29a6
+timeCreated: 1539743288
+licenseType: Pro
+NativeFormatImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/NoticeBoardMaterial.mat b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/NoticeBoardMaterial.mat
new file mode 100644
index 0000000..75d0d1d
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/NoticeBoardMaterial.mat
@@ -0,0 +1,127 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: NoticeBoardMaterial
+ m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords: _ALPHAPREMULTIPLY_ON _EMISSION
+ m_LightmapFlags: 1
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ m_SavedProperties:
+ serializedVersion: 2
+ m_TexEnvs:
+ - first:
+ name: _BumpMap
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _DetailAlbedoMap
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _DetailMask
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _DetailNormalMap
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _EmissionMap
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _MainTex
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _MetallicGlossMap
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _OcclusionMap
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _ParallaxMap
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - first:
+ name: _BumpScale
+ second: 1
+ - first:
+ name: _Cutoff
+ second: 0.5
+ - first:
+ name: _DetailNormalMapScale
+ second: 1
+ - first:
+ name: _DstBlend
+ second: 10
+ - first:
+ name: _GlossMapScale
+ second: 1
+ - first:
+ name: _Glossiness
+ second: 0.5
+ - first:
+ name: _GlossyReflections
+ second: 1
+ - first:
+ name: _Metallic
+ second: 0
+ - first:
+ name: _Mode
+ second: 3
+ - first:
+ name: _OcclusionStrength
+ second: 1
+ - first:
+ name: _Parallax
+ second: 0.02
+ - first:
+ name: _SmoothnessTextureChannel
+ second: 0
+ - first:
+ name: _SpecularHighlights
+ second: 1
+ - first:
+ name: _SrcBlend
+ second: 1
+ - first:
+ name: _UVSec
+ second: 0
+ - first:
+ name: _ZWrite
+ second: 0
+ m_Colors:
+ - first:
+ name: _Color
+ second: {r: 0.28627452, g: 0.28627452, b: 0.28627452, a: 0.5882353}
+ - first:
+ name: _EmissionColor
+ second: {r: 0, g: 0, b: 0, a: 1}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/NoticeBoardMaterial.mat.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/NoticeBoardMaterial.mat.meta
new file mode 100644
index 0000000..f1844c8
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Materials/NoticeBoardMaterial.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 585cd6b809553e7478f5a57cc86be19f
+timeCreated: 1547781500
+licenseType: Pro
+NativeFormatImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models.meta
new file mode 100644
index 0000000..9de31e4
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ee339e53c339d77448020fc71d474dfd
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1.meta
new file mode 100644
index 0000000..ecce585
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a973f4662aff486448146cf2b9bd4755
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh.meta
new file mode 100644
index 0000000..f1449ea
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5f0401084408f3e4aaf32b5827e19ab6
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_albedo.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_albedo.png
new file mode 100644
index 0000000..c56abb1
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_albedo.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:00431fe5f8c9ce31c7c4990dbae390c49ce442acb8112ab0d440167acb31aa30
+size 17230241
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_albedo.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_albedo.png.meta
new file mode 100644
index 0000000..5b49802
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_albedo.png.meta
@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 652f3a0713d910a48a2a62fcaefd72ac
+timeCreated: 1536217085
+licenseType: Pro
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 4
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_ao.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_ao.png
new file mode 100644
index 0000000..ff4438a
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_ao.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4bc44a74158dc6a7b0e6022ed9538a513d9457e73086f9e0f4fb85d24c97d210
+size 4034375
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_ao.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_ao.png.meta
new file mode 100644
index 0000000..1e5be04
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_ao.png.meta
@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: e65b11d96b6e96b46a8b4bf2aa19344f
+timeCreated: 1536217082
+licenseType: Pro
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 4
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_metallic.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_metallic.png
new file mode 100644
index 0000000..12448e6
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_metallic.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bac076f20d5697793b149b1e4b406677f514377631df2edfe9392f8575830597
+size 8432055
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_metallic.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_metallic.png.meta
new file mode 100644
index 0000000..46bfed8
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_metallic.png.meta
@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 2ef75489dda574346a294ffc114c92d5
+timeCreated: 1536217079
+licenseType: Pro
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 4
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_normal.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_normal.png
new file mode 100644
index 0000000..a928f76
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_normal.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8d4daa8adbffc2a6bb5ffee5c2dce269203fb66f724bcfd1546f892dbe67f5d7
+size 22664076
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_normal.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_normal.png.meta
new file mode 100644
index 0000000..d403849
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Head_b_normal.png.meta
@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: e6353fa07def4bd41b8b64a3387053cc
+timeCreated: 1536217112
+licenseType: Pro
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 4
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 0
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 1
+ textureShape: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Materials.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Materials.meta
new file mode 100644
index 0000000..14383c4
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Materials.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5714c936d033bd94ab489b9ee93ef3df
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Materials/eyelash_mat.mat b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Materials/eyelash_mat.mat
new file mode 100644
index 0000000..e58cd84
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Materials/eyelash_mat.mat
@@ -0,0 +1,145 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: eyelash_mat
+ m_Shader: {fileID: 208, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords: _ALPHABLEND_ON _EMISSION _METALLICGLOSSMAP _NORMALMAP
+ m_LightmapFlags: 1
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ m_SavedProperties:
+ serializedVersion: 2
+ m_TexEnvs:
+ - first:
+ name: _BumpMap
+ second:
+ m_Texture: {fileID: 2800000, guid: e6353fa07def4bd41b8b64a3387053cc, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _DetailAlbedoMap
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _DetailMask
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _DetailNormalMap
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _EmissionMap
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _MainTex
+ second:
+ m_Texture: {fileID: 2800000, guid: 652f3a0713d910a48a2a62fcaefd72ac, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _MetallicGlossMap
+ second:
+ m_Texture: {fileID: 2800000, guid: 2ef75489dda574346a294ffc114c92d5, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _OcclusionMap
+ second:
+ m_Texture: {fileID: 2800000, guid: e65b11d96b6e96b46a8b4bf2aa19344f, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _ParallaxMap
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - first:
+ name: _SpecGlossMap
+ second:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - first:
+ name: _BumpScale
+ second: 1
+ - first:
+ name: _Cutoff
+ second: 0.5
+ - first:
+ name: _DetailNormalMapScale
+ second: 1
+ - first:
+ name: _DstBlend
+ second: 10
+ - first:
+ name: _GlossMapScale
+ second: 0.7
+ - first:
+ name: _Glossiness
+ second: 0.5
+ - first:
+ name: _GlossyReflections
+ second: 1
+ - first:
+ name: _InvFade
+ second: 1
+ - first:
+ name: _Metallic
+ second: 0
+ - first:
+ name: _Mode
+ second: 2
+ - first:
+ name: _OcclusionStrength
+ second: 1
+ - first:
+ name: _Parallax
+ second: 0.02
+ - first:
+ name: _SmoothnessTextureChannel
+ second: 0
+ - first:
+ name: _SpecularHighlights
+ second: 1
+ - first:
+ name: _SrcBlend
+ second: 5
+ - first:
+ name: _UVSec
+ second: 0
+ - first:
+ name: _ZWrite
+ second: 0
+ m_Colors:
+ - first:
+ name: _Color
+ second: {r: 1, g: 1, b: 1, a: 1}
+ - first:
+ name: _EmisColor
+ second: {r: 0.2, g: 0.2, b: 0.2, a: 0}
+ - first:
+ name: _EmissionColor
+ second: {r: 0, g: 0, b: 0, a: 1}
+ - first:
+ name: _SpecColor
+ second: {r: 0.2, g: 0.2, b: 0.2, a: 1}
+ - first:
+ name: _TintColor
+ second: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Materials/eyelash_mat.mat.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Materials/eyelash_mat.mat.meta
new file mode 100644
index 0000000..8ffea2e
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Materials/eyelash_mat.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e1458d535c1a65842b6f50cbe83e26bd
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Materials/head_mat.mat b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Materials/head_mat.mat
new file mode 100644
index 0000000..58962fa
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Materials/head_mat.mat
@@ -0,0 +1,77 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: head_mat
+ m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords: _ALPHATEST_ON _EMISSION _METALLICGLOSSMAP _NORMALMAP
+ m_LightmapFlags: 1
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: 2450
+ stringTagMap:
+ RenderType: TransparentCutout
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 2800000, guid: e6353fa07def4bd41b8b64a3387053cc, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 2800000, guid: 652f3a0713d910a48a2a62fcaefd72ac, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 2800000, guid: 2ef75489dda574346a294ffc114c92d5, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 2800000, guid: e65b11d96b6e96b46a8b4bf2aa19344f, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 0.7
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 1
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Materials/head_mat.mat.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Materials/head_mat.mat.meta
new file mode 100644
index 0000000..7e6c0ff
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version1/Avatar_Shieh/Materials/head_mat.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: dc6322259756d094995c0f3acfd9825e
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2.meta
new file mode 100644
index 0000000..989c75f
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: bba121844e9a1ec40b25e6a891b5c54d
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh.meta
new file mode 100644
index 0000000..21209be
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 281dba7d6bd94694db4295902d0cefd3
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Avatar_Shieh_V2.fbx b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Avatar_Shieh_V2.fbx
new file mode 100644
index 0000000..4f7590c
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Avatar_Shieh_V2.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bf370bdd31ed6a57664800683abb523105627dfdbd446a4cc117c6f10885d1df
+size 15088819
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Avatar_Shieh_V2.fbx.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Avatar_Shieh_V2.fbx.meta
new file mode 100644
index 0000000..02ae21f
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Avatar_Shieh_V2.fbx.meta
@@ -0,0 +1,104 @@
+fileFormatVersion: 2
+guid: cc2bd8780f283784899dcb72f2f7702f
+ModelImporter:
+ serializedVersion: 22
+ fileIDToRecycleName:
+ 100000: //RootNode
+ 100002: Eye_Left
+ 100004: Eye_Right
+ 100006: Head
+ 400000: //RootNode
+ 400002: Eye_Left
+ 400004: Eye_Right
+ 400006: Head
+ 2100000: head_mat1
+ 2100002: eyelash_mat1
+ 2300000: Eye_Left
+ 2300002: Eye_Right
+ 3300000: Eye_Left
+ 3300002: Eye_Right
+ 4300000: Head
+ 4300002: Eye_Left
+ 4300004: Eye_Right
+ 9500000: //RootNode
+ 13700000: Head
+ externalObjects: {}
+ materials:
+ importMaterials: 1
+ materialName: 0
+ materialSearch: 1
+ materialLocation: 1
+ animations:
+ legacyGenerateAnimations: 4
+ bakeSimulation: 0
+ resampleCurves: 1
+ optimizeGameObjects: 0
+ motionNodeName:
+ rigImportErrors:
+ rigImportWarnings:
+ animationImportErrors:
+ animationImportWarnings:
+ animationRetargetingWarnings:
+ animationDoRetargetingWarnings: 0
+ importAnimatedCustomProperties: 0
+ animationCompression: 1
+ animationRotationError: 0.5
+ animationPositionError: 0.5
+ animationScaleError: 0.5
+ animationWrapMode: 0
+ extraExposedTransformPaths: []
+ extraUserProperties: []
+ clipAnimations: []
+ isReadable: 1
+ meshes:
+ lODScreenPercentages: []
+ globalScale: 1
+ meshCompression: 0
+ addColliders: 0
+ importVisibility: 1
+ importBlendShapes: 1
+ importCameras: 1
+ importLights: 1
+ swapUVChannels: 0
+ generateSecondaryUV: 0
+ useFileUnits: 1
+ optimizeMeshForGPU: 1
+ keepQuads: 0
+ weldVertices: 1
+ preserveHierarchy: 0
+ indexFormat: 0
+ secondaryUVAngleDistortion: 8
+ secondaryUVAreaDistortion: 15.000001
+ secondaryUVHardAngle: 88
+ secondaryUVPackMargin: 4
+ useFileScale: 1
+ tangentSpace:
+ normalSmoothAngle: 60
+ normalImportMode: 0
+ tangentImportMode: 3
+ normalCalculationMode: 4
+ importAnimation: 1
+ copyAvatar: 0
+ humanDescription:
+ serializedVersion: 2
+ human: []
+ skeleton: []
+ armTwist: 0.5
+ foreArmTwist: 0.5
+ upperLegTwist: 0.5
+ legTwist: 0.5
+ armStretch: 0.05
+ legStretch: 0.05
+ feetSpacing: 0
+ rootMotionBoneName:
+ rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1}
+ hasTranslationDoF: 0
+ hasExtraRoot: 0
+ skeletonHasParents: 1
+ lastHumanDescriptionAvatarSource: {instanceID: 0}
+ animationType: 2
+ humanoidOversampling: 1
+ additionalBone: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/DetailSkin_MetallicSmoothness.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/DetailSkin_MetallicSmoothness.png
new file mode 100644
index 0000000..3568c67
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/DetailSkin_MetallicSmoothness.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a5a93cae97eaeeacc1925cc35c265921f7dc08548d7a5c4eb7606ce065adcc31
+size 876328
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/DetailSkin_MetallicSmoothness.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/DetailSkin_MetallicSmoothness.png.meta
new file mode 100644
index 0000000..675358e
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/DetailSkin_MetallicSmoothness.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 508aaba794b76264994ff90752435697
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/DetailSkin_Normal.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/DetailSkin_Normal.png
new file mode 100644
index 0000000..51009b8
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/DetailSkin_Normal.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4b641470ea6c09622b563e71f186208d515bf276daf45ff1d6fb711a13880d85
+size 4106511
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/DetailSkin_Normal.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/DetailSkin_Normal.png.meta
new file mode 100644
index 0000000..0c86436
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/DetailSkin_Normal.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 7a4aa691425a0e84996a3a3f3d3ef326
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Hair_Male_Gray.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Hair_Male_Gray.png
new file mode 100644
index 0000000..c8bde64
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Hair_Male_Gray.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3c7d84fb4b06bd45eab62f8b40e85e02d06b31bfa5c817f0dc454a2445643e22
+size 2798861
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Hair_Male_Gray.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Hair_Male_Gray.png.meta
new file mode 100644
index 0000000..1c2c5c2
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Hair_Male_Gray.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: b44cd9333e4445f4fa9a18a8497cd05a
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_albedo.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_albedo.png
new file mode 100644
index 0000000..c56abb1
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_albedo.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:00431fe5f8c9ce31c7c4990dbae390c49ce442acb8112ab0d440167acb31aa30
+size 17230241
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_albedo.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_albedo.png.meta
new file mode 100644
index 0000000..5880d86
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_albedo.png.meta
@@ -0,0 +1,76 @@
+fileFormatVersion: 2
+guid: 3b6ef9709a877774fbbfad38f5140940
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 4
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_ao.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_ao.png
new file mode 100644
index 0000000..ff4438a
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_ao.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4bc44a74158dc6a7b0e6022ed9538a513d9457e73086f9e0f4fb85d24c97d210
+size 4034375
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_ao.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_ao.png.meta
new file mode 100644
index 0000000..f2a056b
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_ao.png.meta
@@ -0,0 +1,76 @@
+fileFormatVersion: 2
+guid: d5998c2461d92474ba2b82e867f88a33
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 4
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_metallic.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_metallic.png
new file mode 100644
index 0000000..12448e6
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_metallic.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bac076f20d5697793b149b1e4b406677f514377631df2edfe9392f8575830597
+size 8432055
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_metallic.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_metallic.png.meta
new file mode 100644
index 0000000..04dade9
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_metallic.png.meta
@@ -0,0 +1,76 @@
+fileFormatVersion: 2
+guid: c87daa897a58c3540a5ca9dcc86faf16
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 4
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_normal.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_normal.png
new file mode 100644
index 0000000..a928f76
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_normal.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8d4daa8adbffc2a6bb5ffee5c2dce269203fb66f724bcfd1546f892dbe67f5d7
+size 22664076
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_normal.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_normal.png.meta
new file mode 100644
index 0000000..25cb71c
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Head_b_normal.png.meta
@@ -0,0 +1,76 @@
+fileFormatVersion: 2
+guid: e535f3dc8af657843b83a1ba4a670c6d
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 4
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials.meta
new file mode 100644
index 0000000..c532e47
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b713246b98e0edd48b3ac2dc544d5645
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/MA_Cloth.mat b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/MA_Cloth.mat
new file mode 100644
index 0000000..81ee5eb
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/MA_Cloth.mat
@@ -0,0 +1,77 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: MA_Cloth
+ m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 2800000, guid: 6fd4af174dd587f40920780e034070f9, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 2800000, guid: e5b8e430b30cd6b4ca137dfcb5a22e0a, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 2800000, guid: 962059efc787e2e4da4776789ecc43a7, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 0.38679248, g: 0.38679248, b: 0.38679248, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/MA_Cloth.mat.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/MA_Cloth.mat.meta
new file mode 100644
index 0000000..7bb1aab
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/MA_Cloth.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 14090ed7f531d01409b2c2d85dc8d179
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Eyelash.mat b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Eyelash.mat
new file mode 100644
index 0000000..512608e
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Eyelash.mat
@@ -0,0 +1,104 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Shieh_Eyelash
+ m_Shader: {fileID: 210, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords: _ALPHABLEND_ON _METALLICGLOSSMAP _NORMALMAP
+ m_LightmapFlags: 0
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: 3000
+ stringTagMap:
+ RenderType: Transparent
+ disabledShaderPasses:
+ - ALWAYS
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 2800000, guid: 5f6a88171526ba44b8edd0316d32be0e, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 2800000, guid: ad403e56572b6a54186e29d055ca35a3, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 2800000, guid: 9c2bcc6b9ea5025408d01f4065252dbc, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 2800000, guid: e65b11d96b6e96b46a8b4bf2aa19344f, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _SpecGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BlendOp: 0
+ - _BumpScale: 1
+ - _CameraFadingEnabled: 0
+ - _CameraFarFadeDistance: 2
+ - _CameraNearFadeDistance: 1
+ - _Cull: 0
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DistortionBlend: 0.5
+ - _DistortionEnabled: 0
+ - _DistortionStrength: 1
+ - _DistortionStrengthScaled: 0
+ - _DstBlend: 10
+ - _EmissionEnabled: 0
+ - _FlipbookMode: 0
+ - _GlossMapScale: 0.7
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _InvFade: 1
+ - _LightingEnabled: 1
+ - _Metallic: 0
+ - _Mode: 2
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SoftParticlesEnabled: 0
+ - _SoftParticlesFarFadeDistance: 1
+ - _SoftParticlesNearFadeDistance: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 5
+ - _UVSec: 0
+ - _ZWrite: 0
+ m_Colors:
+ - _CameraFadeParams: {r: 0, g: Infinity, b: 0, a: 0}
+ - _Color: {r: 0, g: 0, b: 0, a: 1}
+ - _EmisColor: {r: 0.2, g: 0.2, b: 0.2, a: 0}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ - _SoftParticleFadeParams: {r: 0, g: 0, b: 0, a: 0}
+ - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
+ - _TintColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Eyelash.mat.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Eyelash.mat.meta
new file mode 100644
index 0000000..f5ddfa2
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Eyelash.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 69ffae49b21b66941bf5a3bd759506e0
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Hair_Cut.mat b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Hair_Cut.mat
new file mode 100644
index 0000000..695d33d
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Hair_Cut.mat
@@ -0,0 +1,172 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Shieh_Hair_Cut
+ m_Shader: {fileID: 47, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords: UNITY_UI_ALPHACLIP _ALPHATEST_ON _EMISSION _NORMALMAP
+ m_LightmapFlags: 0
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: 2450
+ stringTagMap:
+ RenderType: TransparentCutout
+ disabledShaderPasses:
+ - ALWAYS
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _Albedo:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _AlphaTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _BumpMap:
+ m_Texture: {fileID: 2800000, guid: cabd98cd3b67a394aa643d4af9e213b5, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailBump:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailSkin_Metalic:
+ m_Texture: {fileID: 2800000, guid: 508aaba794b76264994ff90752435697, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailSkin_Normal:
+ m_Texture: {fileID: 2800000, guid: 7a4aa691425a0e84996a3a3f3d3ef326, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainBump:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 2800000, guid: b44cd9333e4445f4fa9a18a8497cd05a, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _Mask:
+ m_Texture: {fileID: 2800000, guid: 7bf471a629e3ed640b3ace8997379f80, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _Metalic:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _Normal:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _SpecGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _texcoord:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _AO_power: 1
+ - _BlendOp: 0
+ - _BumpScale: 1
+ - _CameraFadingEnabled: 0
+ - _CameraFarFadeDistance: 2
+ - _CameraNearFadeDistance: 1
+ - _ColorMask: 15
+ - _Cull: 0
+ - _Cutoff: 0.522
+ - _DetailNormalMapScale: 1
+ - _DetailSkin_MetalicAlpha: 0
+ - _DetailSkin_Rotate: 0
+ - _DetailSkin_alpha: 1
+ - _DistortionBlend: 0.5
+ - _DistortionEnabled: 0
+ - _DistortionStrength: 1
+ - _DistortionStrengthScaled: 0
+ - _DstBlend: 0
+ - _EmissionEnabled: 0
+ - _FlipbookMode: 0
+ - _Focus: -100
+ - _GlossMapScale: 0
+ - _Glossiness: 0.75
+ - _GlossyReflections: 1
+ - _LightingEnabled: 1
+ - _MetalicPower: 0
+ - _Metallic: 0
+ - _Mode: 1
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SSS_Depth: 1
+ - _SSS_Power: 1
+ - _Shininess: 0.2
+ - _Smoothness: 1
+ - _SmoothnessTextureChannel: 0
+ - _SoftParticlesEnabled: 0
+ - _SoftParticlesFarFadeDistance: 1
+ - _SoftParticlesNearFadeDistance: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _Stencil: 0
+ - _StencilComp: 0
+ - _StencilOp: 0
+ - _StencilReadMask: 255
+ - _StencilWriteMask: 255
+ - _Strength: 0.946
+ - _TransAmbient: 0.2
+ - _TransDirect: 1
+ - _TransNormalDistortion: 0.1
+ - _TransScattering: 2
+ - _TransShadow: 0.9
+ - _Translucency: 1
+ - _Translucency_Power: 0.6
+ - _UVSec: 0
+ - _UseUIAlphaClip: 1
+ - _ZWrite: 1
+ - __dirty: 0
+ m_Colors:
+ - _CameraFadeParams: {r: 0, g: Infinity, b: 0, a: 0}
+ - _Color: {r: 0.24705882, g: 0.10980392, b: 0.14509805, a: 1}
+ - _DetailSkin_Tiling: {r: 1, g: 1, b: 0, a: 0}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ - _SoftParticleFadeParams: {r: 0, g: 0, b: 0, a: 0}
+ - _Specular: {r: 0, g: 0, b: 0, a: 0}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Hair_Cut.mat.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Hair_Cut.mat.meta
new file mode 100644
index 0000000..a66443c
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Hair_Cut.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ed6c8ba68bcd2ad4fb7098df08385c8a
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Hair_Fade.mat b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Hair_Fade.mat
new file mode 100644
index 0000000..9f8e16d
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Hair_Fade.mat
@@ -0,0 +1,96 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Shieh_Hair_Fade
+ m_Shader: {fileID: 210, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords: _ALPHABLEND_ON _NORMALMAP
+ m_LightmapFlags: 0
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: 3000
+ stringTagMap:
+ RenderType: Transparent
+ disabledShaderPasses:
+ - ALWAYS
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 2800000, guid: cabd98cd3b67a394aa643d4af9e213b5, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 2800000, guid: b44cd9333e4445f4fa9a18a8497cd05a, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BlendOp: 0
+ - _BumpScale: 1
+ - _CameraFadingEnabled: 0
+ - _CameraFarFadeDistance: 2
+ - _CameraNearFadeDistance: 1
+ - _Cull: 0
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DistortionBlend: 0
+ - _DistortionEnabled: 0
+ - _DistortionStrength: 0.2
+ - _DistortionStrengthScaled: 0.020000001
+ - _DstBlend: 10
+ - _EmissionEnabled: 0
+ - _FlipbookMode: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.25
+ - _GlossyReflections: 1
+ - _LightingEnabled: 1
+ - _Metallic: 0
+ - _Mode: 2
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SoftParticlesEnabled: 0
+ - _SoftParticlesFarFadeDistance: 1
+ - _SoftParticlesNearFadeDistance: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 5
+ - _UVSec: 0
+ - _ZWrite: 0
+ m_Colors:
+ - _CameraFadeParams: {r: 0, g: Infinity, b: 0, a: 0}
+ - _Color: {r: 0.24705882, g: 0.10980392, b: 0.14509805, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ - _SoftParticleFadeParams: {r: 0, g: 0, b: 0, a: 0}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Hair_Fade.mat.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Hair_Fade.mat.meta
new file mode 100644
index 0000000..32a930a
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Hair_Fade.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 376c8c0bf40fba140940115ceb7985fa
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Head.mat b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Head.mat
new file mode 100644
index 0000000..e6835be
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Head.mat
@@ -0,0 +1,78 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Shieh_Head
+ m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords: _ALPHATEST_ON _EMISSION _METALLICGLOSSMAP _NORMALMAP
+ m_LightmapFlags: 1
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: 2450
+ stringTagMap:
+ RenderType: TransparentCutout
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 2800000, guid: 5f6a88171526ba44b8edd0316d32be0e, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 2800000, guid: ad403e56572b6a54186e29d055ca35a3, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 2800000, guid: 9c2bcc6b9ea5025408d01f4065252dbc, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 2800000, guid: 79a57944faad1ef4db6a45d577955641, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 1
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Head.mat.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Head.mat.meta
new file mode 100644
index 0000000..fdbf6d3
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Head.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8353a028dd490d2469b49615a280587b
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Shader_mat.mat b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Shader_mat.mat
new file mode 100644
index 0000000..da07b1a
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Shader_mat.mat
@@ -0,0 +1,197 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Shieh_Shader_mat
+ m_Shader: {fileID: 4800000, guid: e581164ca006851408ab64a0280abd71, type: 3}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _Albedo:
+ m_Texture: {fileID: 2800000, guid: ad403e56572b6a54186e29d055ca35a3, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _BumpMap:
+ m_Texture: {fileID: 2800000, guid: 5f6a88171526ba44b8edd0316d32be0e, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailSkin_Metalic:
+ m_Texture: {fileID: 2800000, guid: 508aaba794b76264994ff90752435697, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailSkin_Normal:
+ m_Texture: {fileID: 2800000, guid: 7a4aa691425a0e84996a3a3f3d3ef326, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 2800000, guid: ad403e56572b6a54186e29d055ca35a3, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _Mask:
+ m_Texture: {fileID: 2800000, guid: 4de633b93a5c4fd4ba6a9263663ff7e1, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _Metalic:
+ m_Texture: {fileID: 2800000, guid: 9c2bcc6b9ea5025408d01f4065252dbc, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicTex:
+ m_Texture: {fileID: 2800000, guid: 9c2bcc6b9ea5025408d01f4065252dbc, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _Normal:
+ m_Texture: {fileID: 2800000, guid: 5f6a88171526ba44b8edd0316d32be0e, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionTex:
+ m_Texture: {fileID: 2800000, guid: 79a57944faad1ef4db6a45d577955641, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _SQZ_M:
+ m_Texture: {fileID: 2800000, guid: 0bde64e6f5a7c7645b626bacac977600, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _Wide_M:
+ m_Texture: {fileID: 2800000, guid: 76493984454b03f47a3137acfc5ee3a6, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _Wrinkle:
+ m_Texture: {fileID: 2800000, guid: bf18efd814a59c645a89649c222ce5ec, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _WrinkleMap_Default:
+ m_Texture: {fileID: 2800000, guid: e86ced7d9ef006641b3cf8855baf388b, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _WrinkleMap_Sad:
+ m_Texture: {fileID: 2800000, guid: e86ced7d9ef006641b3cf8855baf388b, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _WrinkleMap_Smile:
+ m_Texture: {fileID: 2800000, guid: b3054ff6e9f73b243b3cda952fa02424, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _WrinkleMask_Sad:
+ m_Texture: {fileID: 2800000, guid: b651b3205353cbe4eafef19f8cd4eee6, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _WrinkleMask_Smile:
+ m_Texture: {fileID: 2800000, guid: 9f79442cfa74a03479bcc9683e287520, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _WrinkleMask_Squeeze:
+ m_Texture: {fileID: 2800000, guid: 0bde64e6f5a7c7645b626bacac977600, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _WrinkleMask_Wide_Up:
+ m_Texture: {fileID: 2800000, guid: 76493984454b03f47a3137acfc5ee3a6, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _Wrinkle_Sad:
+ m_Texture: {fileID: 2800000, guid: e86ced7d9ef006641b3cf8855baf388b, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _Wrinkle_Smile:
+ m_Texture: {fileID: 2800000, guid: b3054ff6e9f73b243b3cda952fa02424, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _lip_Sad_M:
+ m_Texture: {fileID: 2800000, guid: b651b3205353cbe4eafef19f8cd4eee6, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _lip_Smile_M:
+ m_Texture: {fileID: 2800000, guid: 9f79442cfa74a03479bcc9683e287520, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _texcoord:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _AO_power: 1
+ - _Bump: 1
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DetailSkin_MetalicAlpha: 0.3
+ - _DetailSkin_Rotate: 8
+ - _DetailSkin_alpha: 0.45
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 1
+ - _GlossyReflections: 1
+ - _MetalicPower: 0
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SSS_Depth: 6.47
+ - _SSS_Power: 1
+ - _Smoothness: 0.7
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _TransAmbient: 0.994
+ - _TransDirect: 1
+ - _TransNormalDistortion: 0
+ - _TransScattering: 1
+ - _TransShadow: 1
+ - _Translucency: 1
+ - _Translucency_Power: 0.5
+ - _UVSec: 0
+ - _WrinkleMapIndex: 0
+ - _WrinkleScale_Sad_Left: 0
+ - _WrinkleScale_Sad_Right: 0
+ - _WrinkleScale_Smile_Left: 1
+ - _WrinkleScale_Smile_Right: 0
+ - _WrinkleScale_Squeeze_Left: 0
+ - _WrinkleScale_Squeeze_Right: 0
+ - _WrinkleScale_Wide_Up_Left: 0
+ - _WrinkleScale_Wide_Up_Right: 0
+ - _ZWrite: 1
+ - __dirty: 0
+ - _wrinkle_AllScale: 50
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _DetailSkin_Tiling: {r: 30, g: 30, b: 0, a: 0}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Shader_mat.mat.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Shader_mat.mat.meta
new file mode 100644
index 0000000..a573f8b
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Shieh_Shader_mat.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6704f299735c02843847e2ccf3d0c3dd
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Wireframe_Hair_mat.mat b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Wireframe_Hair_mat.mat
new file mode 100644
index 0000000..d287e7e
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Wireframe_Hair_mat.mat
@@ -0,0 +1,81 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Wireframe_Hair_mat
+ m_Shader: {fileID: 4800000, guid: 2a6a855fbef71e745a2f55a929d8f30f, type: 3}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.369
+ - _GlossyReflections: 1
+ - _Metallic: 0.352
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _WireSmoothness: 8
+ - _WireThickness: 103
+ - _ZWrite: 1
+ m_Colors:
+ - _AlbedoColor: {r: 0.4811321, g: 0.4811321, b: 0.4811321, a: 1}
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ - _WireColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Wireframe_Hair_mat.mat.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Wireframe_Hair_mat.mat.meta
new file mode 100644
index 0000000..14a426c
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Wireframe_Hair_mat.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 520a4847db765cc418e040ae616a29a0
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Wireframe_Male_mat.mat b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Wireframe_Male_mat.mat
new file mode 100644
index 0000000..87677b7
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Wireframe_Male_mat.mat
@@ -0,0 +1,81 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Wireframe_Male_mat
+ m_Shader: {fileID: 4800000, guid: 2a6a855fbef71e745a2f55a929d8f30f, type: 3}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 2800000, guid: ad403e56572b6a54186e29d055ca35a3, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.341
+ - _GlossyReflections: 1
+ - _Metallic: 0.651
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _WireSmoothness: 8
+ - _WireThickness: 103
+ - _ZWrite: 1
+ m_Colors:
+ - _AlbedoColor: {r: 1, g: 1, b: 1, a: 1}
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ - _WireColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Wireframe_Male_mat.mat.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Wireframe_Male_mat.mat.meta
new file mode 100644
index 0000000..32277aa
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/Wireframe_Male_mat.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0bb210a00b727cc40990a0a319c0935f
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/eyelash_mat.mat b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/eyelash_mat.mat
new file mode 100644
index 0000000..046ad73
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/eyelash_mat.mat
@@ -0,0 +1,103 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: eyelash_mat
+ m_Shader: {fileID: 210, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords: _ALPHABLEND_ON _METALLICGLOSSMAP _NORMALMAP
+ m_LightmapFlags: 0
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: 3000
+ stringTagMap:
+ RenderType: Transparent
+ disabledShaderPasses:
+ - ALWAYS
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 2800000, guid: e6353fa07def4bd41b8b64a3387053cc, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 2800000, guid: 652f3a0713d910a48a2a62fcaefd72ac, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 2800000, guid: 2ef75489dda574346a294ffc114c92d5, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 2800000, guid: e65b11d96b6e96b46a8b4bf2aa19344f, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _SpecGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BlendOp: 0
+ - _BumpScale: 1
+ - _CameraFadingEnabled: 0
+ - _CameraFarFadeDistance: 2
+ - _CameraNearFadeDistance: 1
+ - _Cull: 0
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DistortionBlend: 0.5
+ - _DistortionEnabled: 0
+ - _DistortionStrength: 1
+ - _DistortionStrengthScaled: 0
+ - _DstBlend: 10
+ - _EmissionEnabled: 0
+ - _FlipbookMode: 0
+ - _GlossMapScale: 0.7
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _InvFade: 1
+ - _LightingEnabled: 1
+ - _Metallic: 0
+ - _Mode: 2
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SoftParticlesEnabled: 0
+ - _SoftParticlesFarFadeDistance: 1
+ - _SoftParticlesNearFadeDistance: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 5
+ - _UVSec: 0
+ - _ZWrite: 0
+ m_Colors:
+ - _CameraFadeParams: {r: 0, g: Infinity, b: 0, a: 0}
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmisColor: {r: 0.2, g: 0.2, b: 0.2, a: 0}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ - _SoftParticleFadeParams: {r: 0, g: 0, b: 0, a: 0}
+ - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
+ - _TintColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/eyelash_mat.mat.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/eyelash_mat.mat.meta
new file mode 100644
index 0000000..21f52cc
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/eyelash_mat.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ed4b25628f9822042ae28821748b430f
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/head_mat.mat b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/head_mat.mat
new file mode 100644
index 0000000..58962fa
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/head_mat.mat
@@ -0,0 +1,77 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_Name: head_mat
+ m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords: _ALPHATEST_ON _EMISSION _METALLICGLOSSMAP _NORMALMAP
+ m_LightmapFlags: 1
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: 2450
+ stringTagMap:
+ RenderType: TransparentCutout
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 2800000, guid: e6353fa07def4bd41b8b64a3387053cc, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 2800000, guid: 652f3a0713d910a48a2a62fcaefd72ac, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 2800000, guid: 2ef75489dda574346a294ffc114c92d5, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 2800000, guid: e65b11d96b6e96b46a8b4bf2aa19344f, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 0.7
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 1
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/head_mat.mat.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/head_mat.mat.meta
new file mode 100644
index 0000000..b8281b8
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Materials/head_mat.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 64185bf5c669e274ca89bb76c87d1429
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Shieh_AO.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Shieh_AO.png
new file mode 100644
index 0000000..42d1673
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Shieh_AO.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d538f6214e6743f323f6a74970d93917e70e05996d58d4ef9812aac51d0654cf
+size 2482161
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Shieh_AO.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Shieh_AO.png.meta
new file mode 100644
index 0000000..1e242bf
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Shieh_AO.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 79a57944faad1ef4db6a45d577955641
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Shieh_Albedo.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Shieh_Albedo.png
new file mode 100644
index 0000000..cd2591f
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Shieh_Albedo.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a5bea5909bc4113871bd74a77b2a164f5c665b110c16edae26aa994461374665
+size 17075041
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Shieh_Albedo.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Shieh_Albedo.png.meta
new file mode 100644
index 0000000..1366546
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Shieh_Albedo.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: ad403e56572b6a54186e29d055ca35a3
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Shieh_Metallic.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Shieh_Metallic.png
new file mode 100644
index 0000000..d6f7a50
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Shieh_Metallic.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aa418b2821d306e3f302ea203ef67326483984223161b93fb2ec06c3448e88d7
+size 9479725
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Shieh_Metallic.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Shieh_Metallic.png.meta
new file mode 100644
index 0000000..71ff5f4
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/Shieh_Metallic.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 9c2bcc6b9ea5025408d01f4065252dbc
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_eye_squeeze.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_eye_squeeze.png
new file mode 100644
index 0000000..bd71feb
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_eye_squeeze.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f7f1b55d20bbd10099b82df80164d3d9ba7be6ec0519c04bf8d5951638b7461a
+size 59551
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_eye_squeeze.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_eye_squeeze.png.meta
new file mode 100644
index 0000000..bde6821
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_eye_squeeze.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 0bde64e6f5a7c7645b626bacac977600
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_eye_wide_up.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_eye_wide_up.png
new file mode 100644
index 0000000..de69057
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_eye_wide_up.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5247b8864ebd1e8947a02f81adb227be00d45c5774c419b48f6be859dfb74ee0
+size 72684
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_eye_wide_up.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_eye_wide_up.png.meta
new file mode 100644
index 0000000..dbbffed
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_eye_wide_up.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 76493984454b03f47a3137acfc5ee3a6
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_lip_sad.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_lip_sad.png
new file mode 100644
index 0000000..6009f70
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_lip_sad.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c49e43b120801562c91134a41475f8a969f1c7562b0ea695f2c3fbcbc0c99466
+size 112742
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_lip_sad.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_lip_sad.png.meta
new file mode 100644
index 0000000..fbcad81
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_lip_sad.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: b651b3205353cbe4eafef19f8cd4eee6
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_lip_smile.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_lip_smile.png
new file mode 100644
index 0000000..20a11b0
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_lip_smile.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2a744bd27e0c1b0f5b5fb6c03f7dc94482fe0cbb032e8451f04b93c78165df05
+size 126903
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_lip_smile.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_lip_smile.png.meta
new file mode 100644
index 0000000..4015b22
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkleMask_lip_smile.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 9f79442cfa74a03479bcc9683e287520
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkles.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkles.png
new file mode 100644
index 0000000..ee1849e
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkles.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8b363d3dd812da45dbd68fc43a943f46a47d2f590619daba1e2bdc570d931256
+size 22209454
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkles.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkles.png.meta
new file mode 100644
index 0000000..e4546df
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkles.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: bf18efd814a59c645a89649c222ce5ec
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 0
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 1
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkles_sad.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkles_sad.png
new file mode 100644
index 0000000..7c33ec3
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkles_sad.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:92c3390f88e8d560433333bfddb3c485521bdda423ca8d29ec9d7b0aa2a16d06
+size 21769126
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkles_sad.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkles_sad.png.meta
new file mode 100644
index 0000000..266c6d6
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkles_sad.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: e86ced7d9ef006641b3cf8855baf388b
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 0
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 1
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkles_smile.png b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkles_smile.png
new file mode 100644
index 0000000..e7c4d63
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkles_smile.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e2d0b6d1de854a60f2c4beb08d2ff9cb09f0ff6dcd4a593b9e3cd335968f9ceb
+size 21780975
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkles_smile.png.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkles_smile.png.meta
new file mode 100644
index 0000000..99bf290
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Models/version2/Avatar_Shieh/shieh_wrinkles_smile.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: b3054ff6e9f73b243b3cda952fa02424
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 0
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 1
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs.meta
new file mode 100644
index 0000000..96d0d01
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f4c3d6d86a0a5b2499122b22fa6ab21c
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Avatar_Shieh_V2.prefab b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Avatar_Shieh_V2.prefab
new file mode 100644
index 0000000..1576415
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Avatar_Shieh_V2.prefab
@@ -0,0 +1,465 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &3051409913850635161
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 3051409913850609593}
+ - component: {fileID: 3051409913849839515}
+ - component: {fileID: 3051409913848708443}
+ m_Layer: 0
+ m_Name: Eye_Left
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &3051409913850609593
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3051409913850635161}
+ m_LocalRotation: {x: 0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: -0.034480397, y: 0.008242355, z: 0.078922845}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 3051409913850609595}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &3051409913849839515
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3051409913850635161}
+ m_Mesh: {fileID: 4300002, guid: cc2bd8780f283784899dcb72f2f7702f, type: 3}
+--- !u!23 &3051409913848708443
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3051409913850635161}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 64185bf5c669e274ca89bb76c87d1429, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!1 &3051409913850635163
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 3051409913850609595}
+ - component: {fileID: 3051409913860149339}
+ - component: {fileID: 3051409913850733895}
+ - component: {fileID: 3051409913850733890}
+ m_Layer: 0
+ m_Name: Avatar_Shieh_V2
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &3051409913850609595
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3051409913850635163}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: -0.04, z: -0.158}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 3051409913850609593}
+ - {fileID: 3051409913850609599}
+ - {fileID: 3051409913850609597}
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!95 &3051409913860149339
+Animator:
+ serializedVersion: 3
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3051409913850635163}
+ m_Enabled: 1
+ m_Avatar: {fileID: 9000000, guid: cc2bd8780f283784899dcb72f2f7702f, type: 3}
+ m_Controller: {fileID: 0}
+ m_CullingMode: 1
+ m_UpdateMode: 0
+ m_ApplyRootMotion: 0
+ m_LinearVelocityBlending: 0
+ m_WarningMessage:
+ m_HasTransformHierarchy: 1
+ m_AllowConstantClipSamplingOptimization: 1
+ m_KeepAnimatorControllerStateOnDisable: 0
+--- !u!114 &3051409913850733895
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3051409913850635163}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 2872c722b18f6d043ad0dbae08561d64, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ EyesModels:
+ - {fileID: 3051409913850609593}
+ - {fileID: 3051409913850609599}
+ EyeShapeTables:
+ - skinnedMeshRenderer: {fileID: 3051409913864302235}
+ eyeShapes: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ EyebrowAnimationCurveUpper:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ - serializedVersion: 3
+ time: 1
+ value: 1
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 0
+ EyebrowAnimationCurveLower:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ - serializedVersion: 3
+ time: 1
+ value: 1
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 0
+ EyebrowAnimationCurveHorizontal:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 0
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ - serializedVersion: 3
+ time: 1
+ value: 1
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 0
+ NeededToGetData: 1
+--- !u!114 &3051409913850733890
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3051409913850635163}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 42350b51669fc604cb2cad73c39f116c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ LipShapeTables:
+ - skinnedMeshRenderer: {fileID: 3051409913864302235}
+ lipShapes: 010000000000000002000000030000000400000006000000050000000800000007000000090000000a0000000b0000000d0000000c0000000f0000000e00000011000000100000001200000014000000130000001600000015000000170000001800000019000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1a000000200000001b0000001c0000001d0000001e0000001f00000022000000210000002400000023000000
+ NeededToGetData: 1
+--- !u!1 &3051409913850635165
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 3051409913850609597}
+ - component: {fileID: 3051409913864302235}
+ m_Layer: 0
+ m_Name: Head
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &3051409913850609597
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3051409913850635165}
+ m_LocalRotation: {x: 0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: -0, y: -0.05097887, z: 0.004202667}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 3051409913850609595}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!137 &3051409913864302235
+SkinnedMeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3051409913850635165}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 3
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 64185bf5c669e274ca89bb76c87d1429, type: 2}
+ - {fileID: 2100000, guid: ed4b25628f9822042ae28821748b430f, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ serializedVersion: 2
+ m_Quality: 0
+ m_UpdateWhenOffscreen: 1
+ m_SkinnedMotionVectors: 1
+ m_Mesh: {fileID: 4300000, guid: cc2bd8780f283784899dcb72f2f7702f, type: 3}
+ m_Bones: []
+ m_BlendShapeWeights:
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ m_RootBone: {fileID: 0}
+ m_AABB:
+ m_Center: {x: 0, y: 0, z: 0.0039771833}
+ m_Extent: {x: 0.0988433, y: 0.18122566, z: 0.12538658}
+ m_DirtyAABB: 0
+--- !u!1 &3051409913850635167
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 3051409913850609599}
+ - component: {fileID: 3051409913849839513}
+ - component: {fileID: 3051409913848708441}
+ m_Layer: 0
+ m_Name: Eye_Right
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &3051409913850609599
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3051409913850635167}
+ m_LocalRotation: {x: 0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0.034480397, y: 0.008242355, z: 0.078922845}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 3051409913850609595}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &3051409913849839513
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3051409913850635167}
+ m_Mesh: {fileID: 4300004, guid: cc2bd8780f283784899dcb72f2f7702f, type: 3}
+--- !u!23 &3051409913848708441
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3051409913850635167}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 64185bf5c669e274ca89bb76c87d1429, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Avatar_Shieh_V2.prefab.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Avatar_Shieh_V2.prefab.meta
new file mode 100644
index 0000000..470f5c4
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Avatar_Shieh_V2.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 4e2328178fed81348aec48d0f79c86fa
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Eye Framework.prefab b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Eye Framework.prefab
new file mode 100644
index 0000000..23f0ed4
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Eye Framework.prefab
@@ -0,0 +1,54 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1001 &100100000
+Prefab:
+ m_ObjectHideFlags: 1
+ serializedVersion: 2
+ m_Modification:
+ m_TransformParent: {fileID: 0}
+ m_Modifications: []
+ m_RemovedComponents: []
+ m_ParentPrefab: {fileID: 0}
+ m_RootGameObject: {fileID: 1707266662751158}
+ m_IsPrefabParent: 1
+--- !u!1 &1707266662751158
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 100100000}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 4879914434278830}
+ - component: {fileID: 114214629311031788}
+ m_Layer: 0
+ m_Name: Eye Framework
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &4879914434278830
+Transform:
+ m_ObjectHideFlags: 1
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 100100000}
+ m_GameObject: {fileID: 1707266662751158}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &114214629311031788
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 100100000}
+ m_GameObject: {fileID: 1707266662751158}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 47613961cde0a8b4aa4f79219b7e523c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ EnableEye: 1
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Eye Framework.prefab.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Eye Framework.prefab.meta
new file mode 100644
index 0000000..610abd9
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Eye Framework.prefab.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f676e25d0fcd1ec4fa22af3017316de9
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 100100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Head Render Scene.prefab b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Head Render Scene.prefab
new file mode 100644
index 0000000..184d857
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Head Render Scene.prefab
@@ -0,0 +1,553 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &4074961599298165399
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 4074961599298165385}
+ - component: {fileID: 4074961599298165398}
+ m_Layer: 0
+ m_Name: Point Light (2)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &4074961599298165385
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4074961599298165399}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: -0.2949375, y: -0.06575787, z: -5.280289}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 8952382327610939962}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!108 &4074961599298165398
+Light:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4074961599298165399}
+ m_Enabled: 1
+ serializedVersion: 8
+ m_Type: 2
+ m_Color: {r: 1, g: 0.93290716, b: 0.8915094, a: 1}
+ m_Intensity: 4.5
+ m_Range: 0.74
+ m_SpotAngle: 30
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 2
+ m_Resolution: 2
+ m_CustomResolution: -1
+ m_Strength: 1
+ m_Bias: 0.05
+ m_NormalBias: 0.4
+ m_NearPlane: 0.2
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_Lightmapping: 4
+ m_LightShadowCasterMode: 0
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
+--- !u!1 &4074961600008829738
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 4074961600008829740}
+ - component: {fileID: 4074961600008829741}
+ m_Layer: 0
+ m_Name: Point Light (8)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &4074961600008829740
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4074961600008829738}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: -1.1779375, y: -0.058757782, z: -5.280289}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 8952382327610939962}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!108 &4074961600008829741
+Light:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4074961600008829738}
+ m_Enabled: 1
+ serializedVersion: 8
+ m_Type: 2
+ m_Color: {r: 1, g: 0.93290716, b: 0.8915094, a: 1}
+ m_Intensity: 4.5
+ m_Range: 0.74
+ m_SpotAngle: 30
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 2
+ m_Resolution: 2
+ m_CustomResolution: -1
+ m_Strength: 1
+ m_Bias: 0.05
+ m_NormalBias: 0.4
+ m_NearPlane: 0.2
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_Lightmapping: 4
+ m_LightShadowCasterMode: 0
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
+--- !u!1 &4074961600518024484
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 4074961600518024487}
+ - component: {fileID: 4074961600518024486}
+ m_Layer: 0
+ m_Name: Point Light (4)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &4074961600518024487
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4074961600518024484}
+ m_LocalRotation: {x: 1, y: -0, z: -0, w: 0}
+ m_LocalPosition: {x: -0.7109375, y: 0.56050384, z: -31.090294}
+ m_LocalScale: {x: 1, y: 1, z: 1.7900008}
+ m_Children: []
+ m_Father: {fileID: 8952382327610939962}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 180, y: 0, z: 0}
+--- !u!108 &4074961600518024486
+Light:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4074961600518024484}
+ m_Enabled: 1
+ serializedVersion: 8
+ m_Type: 2
+ m_Color: {r: 1, g: 0.9656903, b: 0.9386792, a: 1}
+ m_Intensity: 10
+ m_Range: 56
+ m_SpotAngle: 30
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 0
+ m_Resolution: -1
+ m_CustomResolution: -1
+ m_Strength: 1
+ m_Bias: 0.05
+ m_NormalBias: 0.4
+ m_NearPlane: 0.2
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_Lightmapping: 2
+ m_LightShadowCasterMode: 0
+ m_AreaSize: {x: 20, y: 20}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_ShadowRadius: 10
+ m_ShadowAngle: 0
+--- !u!1 &4074961600630269481
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 4074961600630269483}
+ - component: {fileID: 4074961600630269480}
+ m_Layer: 0
+ m_Name: Point Light (9)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &4074961600630269483
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4074961600630269481}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: -0.6849375, y: -0.058757782, z: -5.280289}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 8952382327610939962}
+ m_RootOrder: 4
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!108 &4074961600630269480
+Light:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4074961600630269481}
+ m_Enabled: 1
+ serializedVersion: 8
+ m_Type: 2
+ m_Color: {r: 1, g: 0.93290716, b: 0.8915094, a: 1}
+ m_Intensity: 2
+ m_Range: 2.3
+ m_SpotAngle: 30
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 2
+ m_Resolution: 2
+ m_CustomResolution: -1
+ m_Strength: 1
+ m_Bias: 0.05
+ m_NormalBias: 0.4
+ m_NearPlane: 0.2
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_Lightmapping: 4
+ m_LightShadowCasterMode: 0
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
+--- !u!1 &4074961600660305650
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 4074961600660305652}
+ - component: {fileID: 4074961600660305653}
+ m_Layer: 0
+ m_Name: Reflection Probe
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 4294967295
+ m_IsActive: 1
+--- !u!4 &4074961600660305652
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4074961600660305650}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: -0.7109375, y: -1.3017578, z: -4.696289}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 8952382327610939962}
+ m_RootOrder: 5
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!215 &4074961600660305653
+ReflectionProbe:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4074961600660305650}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Type: 0
+ m_Mode: 0
+ m_RefreshMode: 0
+ m_TimeSlicingMode: 0
+ m_Resolution: 128
+ m_UpdateFrequency: 0
+ m_BoxSize: {x: 10, y: 10, z: 10}
+ m_BoxOffset: {x: 0, y: 0, z: 0}
+ m_NearClip: 0.3
+ m_FarClip: 1000
+ m_ShadowDistance: 100
+ m_ClearFlags: 1
+ m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_IntensityMultiplier: 0.32
+ m_BlendDistance: 1
+ m_HDR: 1
+ m_BoxProjection: 0
+ m_RenderDynamicObjects: 0
+ m_UseOcclusionCulling: 1
+ m_Importance: 1
+ m_CustomBakedTexture: {fileID: 0}
+--- !u!1 &4074961601106615688
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 4074961601106615692}
+ - component: {fileID: 4074961601106615693}
+ - component: {fileID: 4074961601106615690}
+ - component: {fileID: 4074961601106615691}
+ m_Layer: 0
+ m_Name: Cast Shadows_cube
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &4074961601106615692
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4074961601106615688}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: -0.52393746, y: -0.11075783, z: -6.846289}
+ m_LocalScale: {x: 7.657784, y: 5.6148458, z: 0.41230226}
+ m_Children: []
+ m_Father: {fileID: 8952382327610939962}
+ m_RootOrder: 6
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &4074961601106615693
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4074961601106615688}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &4074961601106615690
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4074961601106615688}
+ m_Enabled: 1
+ m_CastShadows: 3
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!65 &4074961601106615691
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4074961601106615688}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Size: {x: 1, y: 1, z: 1}
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!1 &8040272353404943719
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 8952382327610939962}
+ m_Layer: 0
+ m_Name: Head Render Scene
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &8952382327610939962
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8040272353404943719}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0.7109375, y: 1.3017578, z: 4.696289}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 4074961599873163959}
+ - {fileID: 4074961600518024487}
+ - {fileID: 4074961599298165385}
+ - {fileID: 4074961600008829740}
+ - {fileID: 4074961600630269483}
+ - {fileID: 4074961600660305652}
+ - {fileID: 4074961601106615692}
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1001 &4074961599873038391
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ m_TransformParent: {fileID: 8952382327610939962}
+ m_Modifications:
+ - target: {fileID: 100000, guid: 199c3bd67beb8c6469f1453fe2a36ff8, type: 3}
+ propertyPath: m_Name
+ value: BG_Sphere
+ objectReference: {fileID: 0}
+ - target: {fileID: 100000, guid: 199c3bd67beb8c6469f1453fe2a36ff8, type: 3}
+ propertyPath: m_StaticEditorFlags
+ value: 4294967295
+ objectReference: {fileID: 0}
+ - target: {fileID: 100000, guid: 199c3bd67beb8c6469f1453fe2a36ff8, type: 3}
+ propertyPath: m_IsActive
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 400000, guid: 199c3bd67beb8c6469f1453fe2a36ff8, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: -0.7109375
+ objectReference: {fileID: 0}
+ - target: {fileID: 400000, guid: 199c3bd67beb8c6469f1453fe2a36ff8, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: -1.3017578
+ objectReference: {fileID: 0}
+ - target: {fileID: 400000, guid: 199c3bd67beb8c6469f1453fe2a36ff8, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: -4.696289
+ objectReference: {fileID: 0}
+ - target: {fileID: 400000, guid: 199c3bd67beb8c6469f1453fe2a36ff8, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 400000, guid: 199c3bd67beb8c6469f1453fe2a36ff8, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 400000, guid: 199c3bd67beb8c6469f1453fe2a36ff8, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 400000, guid: 199c3bd67beb8c6469f1453fe2a36ff8, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 400000, guid: 199c3bd67beb8c6469f1453fe2a36ff8, type: 3}
+ propertyPath: m_RootOrder
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 400000, guid: 199c3bd67beb8c6469f1453fe2a36ff8, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 400000, guid: 199c3bd67beb8c6469f1453fe2a36ff8, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 400000, guid: 199c3bd67beb8c6469f1453fe2a36ff8, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 2300000, guid: 199c3bd67beb8c6469f1453fe2a36ff8, type: 3}
+ propertyPath: m_Materials.Array.data[0]
+ value:
+ objectReference: {fileID: 2100000, guid: 8a5a89b610f3b1849965dba78a1458f1, type: 2}
+ - target: {fileID: 2300000, guid: 199c3bd67beb8c6469f1453fe2a36ff8, type: 3}
+ propertyPath: m_StitchLightmapSeams
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 2300000, guid: 199c3bd67beb8c6469f1453fe2a36ff8, type: 3}
+ propertyPath: m_CastShadows
+ value: 2
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: 199c3bd67beb8c6469f1453fe2a36ff8, type: 3}
+--- !u!4 &4074961599873163959 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 400000, guid: 199c3bd67beb8c6469f1453fe2a36ff8,
+ type: 3}
+ m_PrefabInstance: {fileID: 4074961599873038391}
+ m_PrefabAsset: {fileID: 0}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Head Render Scene.prefab.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Head Render Scene.prefab.meta
new file mode 100644
index 0000000..db1d037
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Head Render Scene.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 7776754447252ff4087ea2ebcc9821d3
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Lip Framework.prefab b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Lip Framework.prefab
new file mode 100644
index 0000000..b5c5b4e
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Lip Framework.prefab
@@ -0,0 +1,54 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1001 &100100000
+Prefab:
+ m_ObjectHideFlags: 1
+ serializedVersion: 2
+ m_Modification:
+ m_TransformParent: {fileID: 0}
+ m_Modifications: []
+ m_RemovedComponents: []
+ m_ParentPrefab: {fileID: 0}
+ m_RootGameObject: {fileID: 1827556865440936}
+ m_IsPrefabParent: 1
+--- !u!1 &1827556865440936
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 100100000}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 4953106396633158}
+ - component: {fileID: 114413432704905738}
+ m_Layer: 0
+ m_Name: Lip Framework
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &4953106396633158
+Transform:
+ m_ObjectHideFlags: 1
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 100100000}
+ m_GameObject: {fileID: 1827556865440936}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &114413432704905738
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 100100000}
+ m_GameObject: {fileID: 1827556865440936}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 41f6d745d46210a49a0df9fe7d0d1102, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ EnableLip: 1
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Lip Framework.prefab.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Lip Framework.prefab.meta
new file mode 100644
index 0000000..492551e
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Prefabs/Lip Framework.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 86d935e0d01acbe44887f792476d36e5
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Readme.md b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Readme.md
new file mode 100644
index 0000000..2b32797
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Readme.md
@@ -0,0 +1,19 @@
+# VIVE OpenXR Facial Tracking Unity Feature
+
+To help software developers create an application with actual facial expressions on 3D avatars with the OpenXR facial tracing extension [XR_HTC_facial_tracking](https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html#XR_HTC_facial_tracking).
+
+## Load sample code
+**Window** > **Package Manager** > **VIVE OpenXR Plugin - Windows** > **Samples** > Click to import **FacialTracking Example**
+
+## Play the sample scene
+1. **Edit** > **Project Settings** > **XR Plug-in Management** > Select **OpenXR** , click Exclamation mark next to it then choose **Fix All**.
+2. **Edit** > **Project Settings** > **XR Plug-in Management** > **OpenXR** > Add Interaction profiles for your device.
+3. **Edit** > **Project Settings** > **XR Plug-in Management** > **OpenXR** > Select **Facial Tracking** under **VIVE OpenXR** Feature Groups.
+4. In the Unity Project window, select the sample scene file in **Assets** > **Samples** > **VIVE OpenXR Plugin - Windows** > **1.0.12** > **FacialTracking Example** > **Scenes** > **FaceSample.unity** then click Play.
+
+## How to use VIVE OpenXR Facial Tracking Unity Feature
+1. Import VIVE OpenXR Plugin - Windows
+2. Add your avatar object to the Unity scene.
+ - Attach "AvatarEyeSample.cs" and "AvatarLipSample.cs" to your avatar object or Drag "Avatar_Shieh_V2" prefab into scene hierarchy.
+ - Refer to functions **StartFrameWork** and **StopFrameWork** in **FacialManager.cs** for creating and releasing handle for face.
+ - Refer to the function **GetWeightings** in **FacialManager.cs** for getting the weightings of blendshapes.
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Readme.md.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Readme.md.meta
new file mode 100644
index 0000000..8b8d598
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Readme.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 30b23b4f71cad4447a3391acbb89f4d0
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scenes.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scenes.meta
new file mode 100644
index 0000000..55c31c9
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scenes.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a61dfaae82a22ea46a30881e98813962
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scenes/FaceSample.unity b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scenes/FaceSample.unity
new file mode 100644
index 0000000..a906ad4
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scenes/FaceSample.unity
@@ -0,0 +1,755 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+ m_SceneGUID: 00000000000000000000000000000000
+ m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 9
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 0
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+ m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 0
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 0}
+ m_IndirectSpecularColor: {r: 0.45112008, g: 0.49971223, b: 0.5675026, a: 1}
+ m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 12
+ m_GIWorkflowMode: 0
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 1
+ m_EnableRealtimeLightmaps: 1
+ m_LightmapEditorSettings:
+ serializedVersion: 12
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_AtlasSize: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_ExtractAmbientOcclusion: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_FinalGather: 0
+ m_FinalGatherFiltering: 1
+ m_FinalGatherRayCount: 256
+ m_ReflectionCompression: 2
+ m_MixedBakeMode: 2
+ m_BakeBackend: 0
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 500
+ m_PVRBounces: 2
+ m_PVREnvironmentSampleCount: 500
+ m_PVREnvironmentReferencePointCount: 2048
+ m_PVRFilteringMode: 2
+ m_PVRDenoiserTypeDirect: 0
+ m_PVRDenoiserTypeIndirect: 0
+ m_PVRDenoiserTypeAO: 0
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVREnvironmentMIS: 0
+ m_PVRCulling: 1
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 5
+ m_PVRFilteringGaussRadiusAO: 2
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_ExportTrainingData: 0
+ m_TrainingDataDestination: TrainingData
+ m_LightProbeSampleCountMultiplier: 4
+ m_LightingDataAsset: {fileID: 0}
+ m_LightingSettings: {fileID: 4890085278179872738, guid: 139b813ee621cbb41b237fe73214bf9f, type: 2}
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 2
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ accuratePlacement: 0
+ maxJobWorkers: 0
+ preserveTilesOutsideBounds: 0
+ debug:
+ m_Flags: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1 &306469291
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 1972517298404456, guid: 628ff83903a43c74ba5c884b8d6d0b59, type: 2}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 306469292}
+ - component: {fileID: 306469293}
+ m_Layer: 0
+ m_Name: Avatar Sample
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &306469292
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 4567766556640800, guid: 628ff83903a43c74ba5c884b8d6d0b59, type: 2}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 306469291}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1374042943}
+ m_Father: {fileID: 0}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &306469293
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 306469291}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 196084005ab84764aac2e78a079dc66c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ camera: {fileID: 1387412029}
+--- !u!1001 &539581763
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ m_TransformParent: {fileID: 0}
+ m_Modifications:
+ - target: {fileID: 4074961600660305650, guid: 7776754447252ff4087ea2ebcc9821d3, type: 3}
+ propertyPath: m_IsActive
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8040272353404943719, guid: 7776754447252ff4087ea2ebcc9821d3, type: 3}
+ propertyPath: m_Name
+ value: Head Render Scene
+ objectReference: {fileID: 0}
+ - target: {fileID: 8040272353404943719, guid: 7776754447252ff4087ea2ebcc9821d3, type: 3}
+ propertyPath: m_IsActive
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 8952382327610939962, guid: 7776754447252ff4087ea2ebcc9821d3, type: 3}
+ propertyPath: m_RootOrder
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 8952382327610939962, guid: 7776754447252ff4087ea2ebcc9821d3, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8952382327610939962, guid: 7776754447252ff4087ea2ebcc9821d3, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8952382327610939962, guid: 7776754447252ff4087ea2ebcc9821d3, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8952382327610939962, guid: 7776754447252ff4087ea2ebcc9821d3, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 8952382327610939962, guid: 7776754447252ff4087ea2ebcc9821d3, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8952382327610939962, guid: 7776754447252ff4087ea2ebcc9821d3, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8952382327610939962, guid: 7776754447252ff4087ea2ebcc9821d3, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8952382327610939962, guid: 7776754447252ff4087ea2ebcc9821d3, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8952382327610939962, guid: 7776754447252ff4087ea2ebcc9821d3, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8952382327610939962, guid: 7776754447252ff4087ea2ebcc9821d3, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: 7776754447252ff4087ea2ebcc9821d3, type: 3}
+--- !u!1 &760214750
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 760214753}
+ - component: {fileID: 760214752}
+ - component: {fileID: 760214751}
+ m_Layer: 0
+ m_Name: Objects placed in front of user
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 0
+--- !u!114 &760214751
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 760214750}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 19eff34b54274a84c8b0f87cffbfd76a, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!20 &760214752
+Camera:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 760214750}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 1
+ m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+ m_projectionMatrixMode: 1
+ m_GateFitMode: 2
+ m_FOVAxisMode: 0
+ m_SensorSize: {x: 36, y: 24}
+ m_LensShift: {x: 0, y: 0}
+ m_FocalLength: 50
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.3
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 2147483647
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 8400000, guid: 600a6f0266444c145945aa3e7f2a29a6, type: 2}
+ m_TargetDisplay: 0
+ m_TargetEye: 0
+ m_HDR: 0
+ m_AllowMSAA: 1
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+--- !u!4 &760214753
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 760214750}
+ m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
+ m_LocalPosition: {x: 0, y: 0, z: 0.6}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1921226929}
+ m_Father: {fileID: 0}
+ m_RootOrder: 4
+ m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0}
+--- !u!4 &1374042943 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 3051409913850609595, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ m_PrefabInstance: {fileID: 3051409913039127684}
+ m_PrefabAsset: {fileID: 0}
+--- !u!1 &1387412024
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1387412029}
+ - component: {fileID: 1387412028}
+ - component: {fileID: 1387412026}
+ - component: {fileID: 1387412025}
+ - component: {fileID: 1387412027}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!81 &1387412025
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1387412024}
+ m_Enabled: 1
+--- !u!124 &1387412026
+Behaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1387412024}
+ m_Enabled: 1
+--- !u!114 &1387412027
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1387412024}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5a2a9c34df4095f47b9ca8f975175f5b, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Device: 0
+ m_PoseSource: 2
+ m_PoseProviderComponent: {fileID: 0}
+ m_TrackingType: 0
+ m_UpdateType: 0
+ m_UseRelativeTransform: 0
+--- !u!20 &1387412028
+Camera:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1387412024}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 1
+ m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+ m_projectionMatrixMode: 1
+ m_GateFitMode: 2
+ m_FOVAxisMode: 0
+ m_SensorSize: {x: 36, y: 24}
+ m_LensShift: {x: 0, y: 0}
+ m_FocalLength: 50
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.01
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 0
+ m_AllowMSAA: 1
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+--- !u!4 &1387412029
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1387412024}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1921226928
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1921226929}
+ - component: {fileID: 1921226932}
+ - component: {fileID: 1921226931}
+ - component: {fileID: 1921226930}
+ m_Layer: 0
+ m_Name: Mirror
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1921226929
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1921226928}
+ m_LocalRotation: {x: -0, y: 1, z: -0, w: 0}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: -1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 760214753}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0}
+--- !u!23 &1921226930
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1921226928}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 20c0a6a4ee4540848b1ad902026d6110, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 1
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!64 &1921226931
+MeshCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1921226928}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 4
+ m_Convex: 0
+ m_CookingOptions: 30
+ m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!33 &1921226932
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1921226928}
+ m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &2095842635
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2095842637}
+ - component: {fileID: 2095842636}
+ m_Layer: 0
+ m_Name: Directional Light
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!108 &2095842636
+Light:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2095842635}
+ m_Enabled: 1
+ serializedVersion: 10
+ m_Type: 1
+ m_Shape: 0
+ m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
+ m_Intensity: 1
+ m_Range: 10
+ m_SpotAngle: 30
+ m_InnerSpotAngle: 21.80208
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 2
+ m_Resolution: -1
+ m_CustomResolution: -1
+ m_Strength: 1
+ m_Bias: 0.05
+ m_NormalBias: 0.4
+ m_NearPlane: 0.2
+ m_CullingMatrixOverride:
+ e00: 1
+ e01: 0
+ e02: 0
+ e03: 0
+ e10: 0
+ e11: 1
+ e12: 0
+ e13: 0
+ e20: 0
+ e21: 0
+ e22: 1
+ e23: 0
+ e30: 0
+ e31: 0
+ e32: 0
+ e33: 1
+ m_UseCullingMatrixOverride: 0
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingLayerMask: 1
+ m_Lightmapping: 4
+ m_LightShadowCasterMode: 0
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
+ m_UseBoundingSphereOverride: 0
+ m_UseViewFrustumForShadowCasterCull: 1
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
+--- !u!4 &2095842637
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2095842635}
+ m_LocalRotation: {x: -0.008544729, y: -0.21568543, z: 0.9708363, w: -0.10432531}
+ m_LocalPosition: {x: 0, y: 3, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 24.871, y: -358.205, z: -167.337}
+--- !u!1001 &3051409913039127684
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ m_TransformParent: {fileID: 306469292}
+ m_Modifications:
+ - target: {fileID: 3051409913850609593, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalScale.z
+ value: -1
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609593, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609593, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609593, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609593, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 180
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609595, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_RootOrder
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609595, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalScale.z
+ value: -1
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609595, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609595, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: -0.04
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609595, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: -0.158
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609595, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609595, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609595, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609595, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609595, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609595, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609595, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609597, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalScale.z
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609599, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalScale.z
+ value: -1
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609599, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609599, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609599, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850609599, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 180
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850635163, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_Name
+ value: Avatar_Shieh_V2
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850733890, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_Enabled
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850733890, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: NeededToGetData
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850733895, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: m_Enabled
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 3051409913850733895, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
+ propertyPath: NeededToGetData
+ value: 1
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: 4e2328178fed81348aec48d0f79c86fa, type: 3}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scenes/FaceSample.unity.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scenes/FaceSample.unity.meta
new file mode 100644
index 0000000..3520a29
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scenes/FaceSample.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 95faae79a7fda8248a4f435507170572
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scenes/FaceSampleSettings.lighting b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scenes/FaceSampleSettings.lighting
new file mode 100644
index 0000000..1a3f4ce
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scenes/FaceSampleSettings.lighting
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:89a4704d8475f9ce68cf799e18712158a258baf1db77a3031f7e2fa26b571182
+size 1821
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scenes/FaceSampleSettings.lighting.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scenes/FaceSampleSettings.lighting.meta
new file mode 100644
index 0000000..dfab646
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scenes/FaceSampleSettings.lighting.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 139b813ee621cbb41b237fe73214bf9f
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 4890085278179872738
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts.meta
new file mode 100644
index 0000000..2d0fc10
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: bbd12fde1e123894dafba0082f69c79a
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye.meta
new file mode 100644
index 0000000..8f0bc7d
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7eb9da8a5f7ef3740828986abcac7265
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Eye.cs b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Eye.cs
new file mode 100644
index 0000000..5c9927f
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Eye.cs
@@ -0,0 +1,71 @@
+//========= Copyright 2019, HTC Corporation. All rights reserved. ===========
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+using UnityEngine;
+using UnityEngine.XR.OpenXR;
+namespace VIVE
+{
+ namespace FacialTracking.Sample
+ {
+ public static class Eye
+ {
+ public const int WeightingCount = (int)XrEyeShapeHTC.XR_EYE_EXPRESSION_MAX_ENUM_HTC;
+ private static XrFacialExpressionsHTC EyeExpression_;
+ private static int LastUpdateFrame = -1;
+ private static Error LastUpdateResult = Error.FAILED;
+ private static Dictionary Weightings;
+ private static float[] blendshapes = new float[60];
+ static Eye()
+ {
+ Weightings = new Dictionary();
+ for (int i = 0; i < WeightingCount; ++i) Weightings.Add((XrEyeShapeHTC)i, 0.0f);
+ }
+ private static bool UpdateData()
+ {
+ if (Time.frameCount == LastUpdateFrame) return LastUpdateResult == Error.WORK;
+ else LastUpdateFrame = Time.frameCount;
+ EyeExpression_.expressionCount = 60;
+ EyeExpression_.type = XrStructureType.XR_TYPE_FACIAL_EXPRESSIONS_HTC;
+ EyeExpression_.blendShapeWeightings = Marshal.AllocCoTaskMem(sizeof(float) * EyeExpression_.expressionCount);
+ var feature = OpenXRSettings.Instance.GetFeature();
+ int res = feature.xrGetFacialExpressionsHTC(OpenXRSettings.Instance.GetFeature().m_expressionHandle, ref EyeExpression_);
+ if (res == (int)XrResult.XR_SUCCESS)
+ {
+ Marshal.Copy(EyeExpression_.blendShapeWeightings, blendshapes, 0, EyeExpression_.expressionCount);
+ LastUpdateResult = Error.WORK;
+
+ }
+ else
+ {
+ LastUpdateResult = Error.FAILED;
+ }
+ return LastUpdateResult == Error.WORK;
+ }
+ public static bool GetEyeWeightings(out Dictionary shapes, XrFacialExpressionsHTC expression)
+ {
+ for (int i = 0; i < WeightingCount; ++i)
+ {
+ Weightings[(XrEyeShapeHTC)(i)] = blendshapes[i];
+ }
+ shapes = Weightings;
+ return true;
+ }
+
+
+ ///
+ /// Gets weighting values from Eye module.
+ ///
+ /// Weighting values obtained from Eye module.
+ /// Indicates whether the values received are new.\
+ [Obsolete("Create FacialManager object and call member function GetWeightings instead")]
+ public static bool GetEyeWeightings(out Dictionary shapes)
+ {
+ UpdateData();
+ return GetEyeWeightings(out shapes, EyeExpression_);
+ }
+
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Eye.cs.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Eye.cs.meta
new file mode 100644
index 0000000..e40d949
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Eye.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 86a415a999d54da45982ad39e33e9ac1
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/EyeData.cs b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/EyeData.cs
new file mode 100644
index 0000000..e97afe7
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/EyeData.cs
@@ -0,0 +1,32 @@
+//========= Copyright 2018, HTC Corporation. All rights reserved. ===========
+using System;
+using System.Runtime.InteropServices;
+using UnityEngine;
+
+namespace VIVE
+{
+ namespace FacialTracking.Sample
+ {
+ public enum EyeShape
+ {
+ None = -1,
+ Eye_Left_Blink = 0,
+ Eye_Left_Wide,
+ Eye_Left_Right,
+ Eye_Left_Left,
+ Eye_Left_Up,
+ Eye_Left_Down,
+ Eye_Right_Blink = 6,
+ Eye_Right_Wide,
+ Eye_Right_Right,
+ Eye_Right_Left,
+ Eye_Right_Up,
+ Eye_Right_Down,
+ Eye_Frown = 12,
+ Eye_Left_Squeeze,
+ Eye_Right_Squeeze,
+ Max = 15,
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/EyeData.cs.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/EyeData.cs.meta
new file mode 100644
index 0000000..915902a
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/EyeData.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 37460e91d6cb92340a576dfe03bef2b4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/EyeShapeTableDrawer.cs b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/EyeShapeTableDrawer.cs
new file mode 100644
index 0000000..2a3fe50
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/EyeShapeTableDrawer.cs
@@ -0,0 +1,72 @@
+//========= Copyright 2018, HTC Corporation. All rights reserved. ===========
+#if UNITY_EDITOR
+using UnityEngine;
+using UnityEditor;
+using System;
+
+namespace VIVE
+{
+ namespace FacialTracking.Sample
+ {
+ [CustomPropertyDrawer(typeof(EyeShapeTable))]
+ public class EyeShapeTableDrawer : PropertyDrawer
+ {
+ public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+ {
+ EditorGUI.BeginProperty(position, label, property);
+
+ Rect newFieldPosition = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label);
+ newFieldPosition.height = EditorGUIUtility.singleLineHeight;
+ Rect newLabelPosition = position;
+ newLabelPosition.width -= newFieldPosition.width;
+ newLabelPosition.height = EditorGUIUtility.singleLineHeight;
+ SerializedProperty propSkinedMesh = property.FindPropertyRelative("skinnedMeshRenderer");
+ SerializedProperty propEyeShapes = property.FindPropertyRelative("eyeShapes");
+ EditorGUI.PropertyField(newFieldPosition, propSkinedMesh, GUIContent.none);
+ newFieldPosition.y += EditorGUIUtility.singleLineHeight;
+
+ SkinnedMeshRenderer skinnedMesh = propSkinedMesh.objectReferenceValue as SkinnedMeshRenderer;
+ if (skinnedMesh != null && skinnedMesh.sharedMesh.blendShapeCount > 0)
+ {
+ if (propEyeShapes.arraySize != skinnedMesh.sharedMesh.blendShapeCount)
+ {
+ propEyeShapes.arraySize = skinnedMesh.sharedMesh.blendShapeCount;
+ for (int i = 0; i < skinnedMesh.sharedMesh.blendShapeCount; ++i)
+ {
+ SerializedProperty propEyeShape = propEyeShapes.GetArrayElementAtIndex(i);
+ string elementName = skinnedMesh.sharedMesh.GetBlendShapeName(i);
+
+ propEyeShape.intValue = (int)XrEyeShapeHTC.XR_EYE_SHAPE_NONE_HTC;
+ foreach (XrEyeShapeHTC EyeShape in (XrEyeShapeHTC[])Enum.GetValues(typeof(XrEyeShapeHTC)))
+ {
+ if (elementName == EyeShape.ToString())
+ propEyeShape.intValue = (int)EyeShape;
+ }
+ }
+ }
+ for (int i = 0; i < skinnedMesh.sharedMesh.blendShapeCount; ++i)
+ {
+ SerializedProperty propEyeShape = propEyeShapes.GetArrayElementAtIndex(i);
+ newLabelPosition.y = newFieldPosition.y;
+ string elementName = skinnedMesh.sharedMesh.GetBlendShapeName(i);
+ EditorGUI.LabelField(newLabelPosition, " " + elementName);
+ EditorGUI.PropertyField(newFieldPosition, propEyeShape, GUIContent.none);
+ newFieldPosition.y += EditorGUIUtility.singleLineHeight;
+ }
+ }
+ EditorGUI.EndProperty();
+ }
+
+ public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
+ {
+ int LineCount = 1;
+ SerializedProperty propSkinedMesh = property.FindPropertyRelative("skinnedMeshRenderer");
+ SkinnedMeshRenderer skinnedMesh = propSkinedMesh.objectReferenceValue as SkinnedMeshRenderer;
+ if (skinnedMesh != null) LineCount += skinnedMesh.sharedMesh.blendShapeCount;
+ return EditorGUIUtility.singleLineHeight * LineCount;
+ }
+ }
+
+ }
+}
+#endif
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/EyeShapeTableDrawer.cs.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/EyeShapeTableDrawer.cs.meta
new file mode 100644
index 0000000..1ca370d
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/EyeShapeTableDrawer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fb05e3e629aecd44ebe7dbfc4a7a6d56
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Eye_Framework.cs b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Eye_Framework.cs
new file mode 100644
index 0000000..45971cc
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Eye_Framework.cs
@@ -0,0 +1,100 @@
+//========= Copyright 2018, HTC Corporation. All rights reserved. ===========
+using System;
+using UnityEngine;
+using UnityEngine.XR.OpenXR;
+namespace VIVE
+{
+ namespace FacialTracking.Sample
+ {
+ public class Eye_Framework : MonoBehaviour
+ {
+ public enum FrameworkStatus { STOP, START, WORKING, ERROR, NOT_SUPPORT }
+ ///
+ /// The status of the Eye engine.
+ ///
+ public static FrameworkStatus Status { get; protected set; }
+
+ ///
+ /// Whether to enable Eye module.
+ ///
+ public bool EnableEye = true;
+
+ private static Eye_Framework Mgr = null;
+ public static Eye_Framework Instance
+ {
+ get
+ {
+ if (Mgr == null)
+ {
+ Mgr = FindObjectOfType();
+ }
+ if (Mgr == null)
+ {
+ Debug.LogError("Eye_Framework not found");
+ }
+ return Mgr;
+ }
+ }
+
+ void Start()
+ {
+ StartFramework();
+ }
+
+ void OnDestroy()
+ {
+ StopFramework();
+ }
+ [Obsolete("Create FacialManager object and call member function StartFramework instead")]
+ public void StartFramework()
+ {
+ if (!EnableEye) return;
+ if (Status == FrameworkStatus.WORKING || Status == FrameworkStatus.NOT_SUPPORT) return;
+ XrFacialTrackerCreateInfoHTC m_expressioncreateInfo = new XrFacialTrackerCreateInfoHTC(
+ XrStructureType.XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC,
+ IntPtr.Zero,
+ XrFacialTrackingTypeHTC.XR_FACIAL_TRACKING_TYPE_EYE_DEFAULT_HTC);
+ var feature = OpenXRSettings.Instance.GetFeature();
+ int res = feature.xrCreateFacialTrackerHTC(m_expressioncreateInfo, out OpenXRSettings.Instance.GetFeature().m_expressionHandle);
+ if (res == (int)XrResult.XR_SUCCESS || res == (int)XrResult.XR_SESSION_LOSS_PENDING)
+ {
+ Debug.Log("Initial Eye success : " + res);
+ Status = FrameworkStatus.WORKING;
+ }
+ else
+ {
+ Debug.LogError("Initial Eye fail : " + res);
+ Status = FrameworkStatus.ERROR;
+ }
+ }
+ [Obsolete("Create FacialManager object and call member function StopFramework instead")]
+ public void StopFramework()
+ {
+ if (Status != FrameworkStatus.NOT_SUPPORT)
+ {
+ if (Status != FrameworkStatus.STOP)
+ {
+ var feature = OpenXRSettings.Instance.GetFeature();
+ int res = feature.xrDestroyFacialTrackerHTC(OpenXRSettings.Instance.GetFeature().m_expressionHandle);
+ if (res == (int)XrResult.XR_SUCCESS)
+ {
+ Debug.Log("Release Eye engine success : " + res);
+
+ }
+ else
+ {
+ Debug.LogError("Release Eye engine fail : " + res);
+ }
+
+ }
+ else
+ {
+ Debug.Log("Stop Eye Framework : module not on");
+ }
+ }
+ Status = FrameworkStatus.STOP;
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Eye_Framework.cs.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Eye_Framework.cs.meta
new file mode 100644
index 0000000..0480319
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Eye_Framework.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 47613961cde0a8b4aa4f79219b7e523c
+timeCreated: 1545374952
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Sample.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Sample.meta
new file mode 100644
index 0000000..bb82e42
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Sample.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2e820c013bcd10a4ea94b6d91672f893
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Sample/AvatarEyeSample.cs b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Sample/AvatarEyeSample.cs
new file mode 100644
index 0000000..48395b6
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Sample/AvatarEyeSample.cs
@@ -0,0 +1,234 @@
+//========= Copyright 2018, HTC Corporation. All rights reserved. ===========
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace VIVE
+{
+ namespace FacialTracking.Sample
+ {
+ [Serializable]
+ public class EyeShapeTable
+ {
+ public SkinnedMeshRenderer skinnedMeshRenderer;
+ public EyeShape[] eyeShapes;
+ }
+ public class AvatarEyeSample : MonoBehaviour
+ {
+ [SerializeField] private Transform[] EyesModels = new Transform[0];
+ [SerializeField] private List EyeShapeTables;
+ ///
+ /// Customize this curve to fit the blend shapes of your avatar.
+ ///
+ [SerializeField] private AnimationCurve EyebrowAnimationCurveUpper;
+ ///
+ /// Customize this curve to fit the blend shapes of your avatar.
+ ///
+ [SerializeField] private AnimationCurve EyebrowAnimationCurveLower;
+ ///
+ /// Customize this curve to fit the blend shapes of your avatar.
+ ///
+ [SerializeField] private AnimationCurve EyebrowAnimationCurveHorizontal;
+
+ public bool NeededToGetData = true;
+ private Dictionary EyeWeightings = new Dictionary();
+ //Map Openxr eye shape to Avatar eye blendshape
+ private static Dictionary ShapeMap;
+ private AnimationCurve[] EyebrowAnimationCurves = new AnimationCurve[(int)EyeShape.Max];
+ private GameObject[] EyeAnchors;
+ private const int NUM_OF_EYES = 2;
+ private static XrFacialExpressionsHTC EyeExpression;
+ private FacialManager facialManager = new FacialManager();
+ static AvatarEyeSample()
+ {
+ ShapeMap = new Dictionary();
+ ShapeMap.Add(EyeShape.Eye_Left_Blink, XrEyeShapeHTC.XR_EYE_EXPRESSION_LEFT_BLINK_HTC);
+ ShapeMap.Add(EyeShape.Eye_Left_Wide, XrEyeShapeHTC.XR_EYE_EXPRESSION_LEFT_WIDE_HTC);
+ ShapeMap.Add(EyeShape.Eye_Right_Blink, XrEyeShapeHTC.XR_EYE_EXPRESSION_RIGHT_BLINK_HTC);
+ ShapeMap.Add(EyeShape.Eye_Right_Wide, XrEyeShapeHTC.XR_EYE_EXPRESSION_RIGHT_WIDE_HTC);
+ ShapeMap.Add(EyeShape.Eye_Left_Squeeze, XrEyeShapeHTC.XR_EYE_EXPRESSION_LEFT_SQUEEZE_HTC);
+ ShapeMap.Add(EyeShape.Eye_Right_Squeeze, XrEyeShapeHTC.XR_EYE_EXPRESSION_RIGHT_SQUEEZE_HTC);
+ ShapeMap.Add(EyeShape.Eye_Left_Down, XrEyeShapeHTC.XR_EYE_EXPRESSION_LEFT_DOWN_HTC);
+ ShapeMap.Add(EyeShape.Eye_Right_Down, XrEyeShapeHTC.XR_EYE_EXPRESSION_RIGHT_DOWN_HTC);
+ ShapeMap.Add(EyeShape.Eye_Left_Left, XrEyeShapeHTC.XR_EYE_EXPRESSION_LEFT_OUT_HTC);
+ ShapeMap.Add(EyeShape.Eye_Right_Left, XrEyeShapeHTC.XR_EYE_EXPRESSION_RIGHT_IN_HTC);
+ ShapeMap.Add(EyeShape.Eye_Left_Right, XrEyeShapeHTC.XR_EYE_EXPRESSION_LEFT_IN_HTC);
+ ShapeMap.Add(EyeShape.Eye_Right_Right, XrEyeShapeHTC.XR_EYE_EXPRESSION_RIGHT_OUT_HTC);
+ ShapeMap.Add(EyeShape.Eye_Left_Up, XrEyeShapeHTC.XR_EYE_EXPRESSION_LEFT_UP_HTC);
+ ShapeMap.Add(EyeShape.Eye_Right_Up, XrEyeShapeHTC.XR_EYE_EXPRESSION_RIGHT_UP_HTC);
+ }
+ private void Start()
+ {
+ facialManager.StartFramework(XrFacialTrackingTypeHTC.XR_FACIAL_TRACKING_TYPE_EYE_DEFAULT_HTC);
+ SetEyesModels(EyesModels[0], EyesModels[1]);
+ SetEyeShapeTables(EyeShapeTables);
+
+ AnimationCurve[] curves = new AnimationCurve[(int)EyeShape.Max];
+ for (int i = 0; i < EyebrowAnimationCurves.Length; ++i)
+ {
+ if (i == (int)EyeShape.Eye_Left_Up || i == (int)EyeShape.Eye_Right_Up) curves[i] = EyebrowAnimationCurveUpper;
+ else if (i == (int)EyeShape.Eye_Left_Down || i == (int)EyeShape.Eye_Right_Down) curves[i] = EyebrowAnimationCurveLower;
+ else curves[i] = EyebrowAnimationCurveHorizontal;
+ }
+ SetEyeShapeAnimationCurves(curves);
+ }
+
+ private void Update()
+ {
+ if (NeededToGetData)
+ {
+ facialManager.GetWeightings(out EyeWeightings);
+ UpdateEyeShapes(EyeWeightings);
+
+
+ Vector3 GazeDirectionCombinedLocal = Vector3.zero;
+ if (EyeWeightings[XrEyeShapeHTC.XR_EYE_EXPRESSION_LEFT_IN_HTC] > EyeWeightings[XrEyeShapeHTC.XR_EYE_EXPRESSION_LEFT_OUT_HTC])
+ {
+ GazeDirectionCombinedLocal.x = -1 * EyeWeightings[XrEyeShapeHTC.XR_EYE_EXPRESSION_LEFT_IN_HTC];
+ }
+ else
+ {
+ GazeDirectionCombinedLocal.x = EyeWeightings[XrEyeShapeHTC.XR_EYE_EXPRESSION_LEFT_OUT_HTC];
+ }
+ if (EyeWeightings[XrEyeShapeHTC.XR_EYE_EXPRESSION_LEFT_UP_HTC] > EyeWeightings[XrEyeShapeHTC.XR_EYE_EXPRESSION_LEFT_DOWN_HTC])
+ {
+ GazeDirectionCombinedLocal.y = EyeWeightings[XrEyeShapeHTC.XR_EYE_EXPRESSION_LEFT_UP_HTC];
+ }
+ else
+ {
+ GazeDirectionCombinedLocal.y = -EyeWeightings[XrEyeShapeHTC.XR_EYE_EXPRESSION_LEFT_DOWN_HTC];
+ }
+ GazeDirectionCombinedLocal.z = (float)1.0;
+
+ Vector3 target = EyeAnchors[0].transform.TransformPoint(GazeDirectionCombinedLocal);
+ EyesModels[0].LookAt(target);
+
+ if (EyeWeightings[XrEyeShapeHTC.XR_EYE_EXPRESSION_RIGHT_IN_HTC] > EyeWeightings[XrEyeShapeHTC.XR_EYE_EXPRESSION_RIGHT_OUT_HTC])
+ {
+ GazeDirectionCombinedLocal.x = EyeWeightings[XrEyeShapeHTC.XR_EYE_EXPRESSION_RIGHT_IN_HTC];
+ }
+ else
+ {
+ GazeDirectionCombinedLocal.x = -1 * EyeWeightings[XrEyeShapeHTC.XR_EYE_EXPRESSION_RIGHT_OUT_HTC];
+ }
+ if (EyeWeightings[XrEyeShapeHTC.XR_EYE_EXPRESSION_RIGHT_UP_HTC] > EyeWeightings[XrEyeShapeHTC.XR_EYE_EXPRESSION_RIGHT_DOWN_HTC])
+ {
+ GazeDirectionCombinedLocal.y = EyeWeightings[XrEyeShapeHTC.XR_EYE_EXPRESSION_RIGHT_UP_HTC];
+ }
+ else
+ {
+ GazeDirectionCombinedLocal.y = -EyeWeightings[XrEyeShapeHTC.XR_EYE_EXPRESSION_RIGHT_DOWN_HTC];
+ }
+ GazeDirectionCombinedLocal.z = (float)1.0;
+
+ target = EyeAnchors[1].transform.TransformPoint(GazeDirectionCombinedLocal);
+ EyesModels[1].LookAt(target);
+ }
+ }
+ private void OnDestroy()
+ {
+ facialManager.StopFramework(XrFacialTrackingTypeHTC.XR_FACIAL_TRACKING_TYPE_EYE_DEFAULT_HTC);
+ DestroyEyeAnchors();
+ }
+
+ public void SetEyesModels(Transform leftEye, Transform rightEye)
+ {
+ if (leftEye != null && rightEye != null)
+ {
+ EyesModels = new Transform[NUM_OF_EYES] { leftEye, rightEye };
+ DestroyEyeAnchors();
+ CreateEyeAnchors();
+ }
+ }
+
+ public void SetEyeShapeTables(List eyeShapeTables)
+ {
+ bool valid = true;
+ if (eyeShapeTables == null)
+ {
+ valid = false;
+ }
+ else
+ {
+ for (int table = 0; table < eyeShapeTables.Count; ++table)
+ {
+ if (eyeShapeTables[table].skinnedMeshRenderer == null)
+ {
+ valid = false;
+ break;
+ }
+ for (int shape = 0; shape < eyeShapeTables[table].eyeShapes.Length; ++shape)
+ {
+ EyeShape eyeShape = eyeShapeTables[table].eyeShapes[shape];
+ if (eyeShape > EyeShape.Max || eyeShape < 0)
+ {
+ valid = false;
+ break;
+ }
+ }
+ }
+ }
+ if (valid)
+ EyeShapeTables = eyeShapeTables;
+ }
+
+ public void SetEyeShapeAnimationCurves(AnimationCurve[] eyebrowAnimationCurves)
+ {
+ if (eyebrowAnimationCurves.Length == (int)EyeShape.Max)
+ EyebrowAnimationCurves = eyebrowAnimationCurves;
+ }
+
+ public void UpdateEyeShapes(Dictionary eyeWeightings)
+ {
+ foreach (var table in EyeShapeTables)
+ RenderModelEyeShape(table, eyeWeightings);
+ }
+
+ private void RenderModelEyeShape(EyeShapeTable eyeShapeTable, Dictionary weighting)
+ {
+ for (int i = 0; i < eyeShapeTable.eyeShapes.Length; ++i)
+ {
+ EyeShape eyeShape = eyeShapeTable.eyeShapes[i];
+ if (eyeShape > EyeShape.Max || eyeShape < 0 || !ShapeMap.ContainsKey(eyeShape)) continue;
+ XrEyeShapeHTC xreyeshape = ShapeMap[eyeShape];
+ if (eyeShape == EyeShape.Eye_Left_Blink || eyeShape == EyeShape.Eye_Right_Blink)
+ {
+
+ eyeShapeTable.skinnedMeshRenderer.SetBlendShapeWeight(i, weighting[xreyeshape] * 100f);
+ }
+ else
+ {
+ AnimationCurve curve = EyebrowAnimationCurves[(int)eyeShape];
+ eyeShapeTable.skinnedMeshRenderer.SetBlendShapeWeight(i, curve.Evaluate(weighting[xreyeshape]) * 100f);
+ }
+
+
+ }
+ }
+
+ private void CreateEyeAnchors()
+ {
+ EyeAnchors = new GameObject[NUM_OF_EYES];
+ for (int i = 0; i < NUM_OF_EYES; ++i)
+ {
+ EyeAnchors[i] = new GameObject();
+ EyeAnchors[i].name = "EyeAnchor_" + i;
+ EyeAnchors[i].transform.SetParent(gameObject.transform);
+ EyeAnchors[i].transform.localPosition = EyesModels[i].localPosition;
+ EyeAnchors[i].transform.localRotation = EyesModels[i].localRotation;
+ EyeAnchors[i].transform.localScale = EyesModels[i].localScale;
+ }
+ }
+
+ private void DestroyEyeAnchors()
+ {
+ if (EyeAnchors != null)
+ {
+ foreach (var obj in EyeAnchors)
+ if (obj != null) Destroy(obj);
+ }
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Sample/AvatarEyeSample.cs.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Sample/AvatarEyeSample.cs.meta
new file mode 100644
index 0000000..5734949
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Sample/AvatarEyeSample.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2872c722b18f6d043ad0dbae08561d64
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Sample/MirrorCameraSample_Eye.cs b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Sample/MirrorCameraSample_Eye.cs
new file mode 100644
index 0000000..f1ede99
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Sample/MirrorCameraSample_Eye.cs
@@ -0,0 +1,35 @@
+//========= Copyright 2018, HTC Corporation. All rights reserved. ===========
+using System.Runtime.InteropServices;
+using UnityEngine;
+
+namespace VIVE
+{
+ namespace FacialTracking.Sample
+ {
+ ///
+ /// A very basic mirror.
+ ///
+ [RequireComponent(typeof(Camera))]
+ public class MirrorCameraSample_Eye : MonoBehaviour
+ {
+ private const float Distance = 0.6f;
+ private void Update()
+ {
+ if (Eye_Framework.Status != Eye_Framework.FrameworkStatus.WORKING) return;
+
+ }
+
+ private void Release()
+ {
+ }
+ private void SetMirroTransform()
+ {
+ transform.position = Camera.main.transform.position + Camera.main.transform.forward * Distance;
+ transform.position = new Vector3(transform.position.x, Camera.main.transform.position.y, transform.position.z);
+ transform.LookAt(Camera.main.transform);
+ transform.eulerAngles = new Vector3(0, transform.eulerAngles.y, 0);
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Sample/MirrorCameraSample_Eye.cs.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Sample/MirrorCameraSample_Eye.cs.meta
new file mode 100644
index 0000000..6bf8985
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Eye/Sample/MirrorCameraSample_Eye.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 19eff34b54274a84c8b0f87cffbfd76a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/FollowCamera.cs b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/FollowCamera.cs
new file mode 100644
index 0000000..f4a102f
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/FollowCamera.cs
@@ -0,0 +1,22 @@
+using UnityEngine;
+
+namespace VIVE.FacialTracking.Sample
+{
+ public class FollowCamera : MonoBehaviour
+ {
+ // Start is called before the first frame update
+ public new Transform camera;
+ private Vector3 offset;
+ void Start()
+ {
+ this.transform.position = new Vector3(camera.position.x, camera.position.y, camera.position.z + 1);
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+ this.transform.position = new Vector3(this.transform.position.x, camera.position.y, this.transform.position.z);
+ }
+ }
+}
+
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/FollowCamera.cs.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/FollowCamera.cs.meta
new file mode 100644
index 0000000..d49319e
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/FollowCamera.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 196084005ab84764aac2e78a079dc66c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip.meta
new file mode 100644
index 0000000..12386c5
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 412f6d64b6ea21045b60b739f1a83f31
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Lip.cs b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Lip.cs
new file mode 100644
index 0000000..28cad5b
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Lip.cs
@@ -0,0 +1,71 @@
+//========= Copyright 2019, HTC Corporation. All rights reserved. ===========
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+using UnityEngine;
+using UnityEngine.XR.OpenXR;
+namespace VIVE
+{
+ namespace FacialTracking.Sample
+ {
+ public class Lip
+ {
+ public const int WeightingCount = (int)XrLipShapeHTC.XR_LIP_SHAPE_MAX_ENUM_HTC;
+ private static int LastUpdateFrame = -1;
+ private static Error LastUpdateResult = Error.FAILED;
+ private static Dictionary Weightings;
+ private static float[] blendshapes = new float[60];
+ private static XrFacialExpressionsHTC LipExpression;
+
+ static Lip()
+ {
+ Weightings = new Dictionary();
+ for (int i = 0; i < WeightingCount; ++i) Weightings.Add((XrLipShapeHTC)i, 0.0f);
+ }
+
+ private static bool UpdateData()
+ {
+ if (Time.frameCount == LastUpdateFrame) return LastUpdateResult == Error.WORK;
+ else LastUpdateFrame = Time.frameCount;
+ LipExpression.expressionCount = 60;
+ LipExpression.type = XrStructureType.XR_TYPE_FACIAL_EXPRESSIONS_HTC;
+ LipExpression.blendShapeWeightings = Marshal.AllocCoTaskMem(sizeof(float)* LipExpression.expressionCount);
+ var feature = OpenXRSettings.Instance.GetFeature();
+ int res = feature.xrGetFacialExpressionsHTC(OpenXRSettings.Instance.GetFeature().m_expressionHandle_Lip, ref LipExpression);
+
+
+ if(res == (int)XrResult.XR_SUCCESS)
+ {
+ LastUpdateResult = Error.WORK;
+ Marshal.Copy(LipExpression.blendShapeWeightings, blendshapes,0, LipExpression.expressionCount);
+ for (int i = 0; i < WeightingCount; ++i)
+ {
+ Weightings[(XrLipShapeHTC)(i)] = blendshapes[i];
+ }
+
+ }
+ else
+ {
+ LastUpdateResult = Error.FAILED;
+ }
+ return LastUpdateResult == Error.WORK;
+ }
+
+ ///
+ /// Gets weighting values from Lip module.
+ ///
+ /// Weighting values obtained from Lip module.
+ /// Indicates whether the values received are new.
+ [Obsolete("Create FacialManager object and call member function GetWeightings instead")]
+ public static bool GetLipWeightings(out Dictionary shapes)
+ {
+ bool update = UpdateData();
+ shapes = Weightings;
+ return update;
+ }
+
+ }
+
+ }
+}
+
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Lip.cs.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Lip.cs.meta
new file mode 100644
index 0000000..ba9bca9
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Lip.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8bc508f7f051e624181e0391cf04db7f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/LipData.cs b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/LipData.cs
new file mode 100644
index 0000000..e30a512
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/LipData.cs
@@ -0,0 +1,69 @@
+//========= Copyright 2019, HTC Corporation. All rights reserved. ===========
+using System;
+using System.Runtime.InteropServices;
+
+namespace VIVE
+{
+ namespace FacialTracking.Sample
+ {
+ public enum LipShape
+ {
+ None = -1,
+ Jaw_Right = 0,
+ Jaw_Left = 1,
+ Jaw_Forward = 2,
+ Jaw_Open = 3,
+ Mouth_Ape_Shape = 4,
+ Mouth_Upper_Right = 5,
+ Mouth_Upper_Left = 6,
+ Mouth_Lower_Right = 7,
+ Mouth_Lower_Left = 8,
+ Mouth_Upper_Overturn = 9,
+ Mouth_Lower_Overturn = 10,
+ Mouth_Pout = 11,
+ Mouth_Smile_Right = 12,
+ Mouth_Smile_Left = 13,
+ Mouth_Sad_Right = 14,
+ Mouth_Sad_Left = 15,
+ Cheek_Puff_Right = 16,
+ Cheek_Puff_Left = 17,
+ Cheek_Suck = 18,
+ Mouth_Upper_UpRight = 19,
+ Mouth_Upper_UpLeft = 20,
+ Mouth_Lower_DownRight = 21,
+ Mouth_Lower_DownLeft = 22,
+ Mouth_Upper_Inside = 23,
+ Mouth_Lower_Inside = 24,
+ Mouth_Lower_Overlay = 25,
+ Tongue_LongStep1 = 26,
+ Tongue_LongStep2 = 32,
+ Tongue_Down = 30,
+ Tongue_Up = 29,
+ Tongue_Right = 28,
+ Tongue_Left = 27,
+ Tongue_Roll = 31,
+ Tongue_UpLeft_Morph = 34,
+ Tongue_UpRight_Morph = 33,
+ Tongue_DownLeft_Morph = 36,
+ Tongue_DownRight_Morph = 35,
+ Max = 37,
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct PredictionData
+ {
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 60)]
+ public float[] blend_shape_weight;
+ };
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct LipData
+ {
+ public int frame;
+ public int time;
+ public IntPtr image;
+ public PredictionData prediction_data;
+ };
+
+ }
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/LipData.cs.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/LipData.cs.meta
new file mode 100644
index 0000000..44cccc2
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/LipData.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 44593dc2ec4dd36449dfb356ce482a0d
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/LipShapeTableDrawer.cs b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/LipShapeTableDrawer.cs
new file mode 100644
index 0000000..dd73a04
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/LipShapeTableDrawer.cs
@@ -0,0 +1,73 @@
+//========= Copyright 2019, HTC Corporation. All rights reserved. ===========
+#if UNITY_EDITOR
+using UnityEngine;
+using UnityEditor;
+using System;
+
+namespace VIVE
+{
+ namespace FacialTracking.Sample
+ {
+
+ [CustomPropertyDrawer(typeof(LipShapeTable))]
+ public class LipShapeTableDrawer : PropertyDrawer
+ {
+ public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+ {
+ EditorGUI.BeginProperty(position, label, property);
+
+ Rect newFieldPosition = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label);
+ newFieldPosition.height = EditorGUIUtility.singleLineHeight;
+ Rect newLabelPosition = position;
+ newLabelPosition.width -= newFieldPosition.width;
+ newLabelPosition.height = newFieldPosition.height;
+ SerializedProperty propSkinedMesh = property.FindPropertyRelative("skinnedMeshRenderer");
+ SerializedProperty propLipShapes = property.FindPropertyRelative("lipShapes");
+ EditorGUI.PropertyField(newFieldPosition, propSkinedMesh, GUIContent.none);
+ newFieldPosition.y += EditorGUIUtility.singleLineHeight;
+
+ SkinnedMeshRenderer skinnedMesh = propSkinedMesh.objectReferenceValue as SkinnedMeshRenderer;
+ if (skinnedMesh != null && skinnedMesh.sharedMesh.blendShapeCount > 0)
+ {
+ if (propLipShapes.arraySize != skinnedMesh.sharedMesh.blendShapeCount)
+ {
+ propLipShapes.arraySize = skinnedMesh.sharedMesh.blendShapeCount;
+ for (int i = 0; i < skinnedMesh.sharedMesh.blendShapeCount; ++i)
+ {
+ SerializedProperty propLipShape = propLipShapes.GetArrayElementAtIndex(i);
+ string elementName = skinnedMesh.sharedMesh.GetBlendShapeName(i);
+
+ propLipShape.intValue = (int)XrLipShapeHTC.XR_LIP_SHAPE_NONE_HTC;
+ foreach (XrLipShapeHTC lipShape in (XrLipShapeHTC[])Enum.GetValues(typeof(XrLipShapeHTC)))
+ {
+ if (elementName == lipShape.ToString())
+ propLipShape.intValue = (int)lipShape;
+ }
+ }
+ }
+ for (int i = 0; i < skinnedMesh.sharedMesh.blendShapeCount; ++i)
+ {
+ SerializedProperty propLipShape = propLipShapes.GetArrayElementAtIndex(i);
+ newLabelPosition.y = newFieldPosition.y;
+ string elementName = skinnedMesh.sharedMesh.GetBlendShapeName(i);
+ EditorGUI.LabelField(newLabelPosition, " " + elementName);
+ EditorGUI.PropertyField(newFieldPosition, propLipShape, GUIContent.none);
+ newFieldPosition.y += EditorGUIUtility.singleLineHeight;
+ }
+ }
+ EditorGUI.EndProperty();
+ }
+
+ public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
+ {
+ int LineCount = 1;
+ SerializedProperty propSkinedMesh = property.FindPropertyRelative("skinnedMeshRenderer");
+ SkinnedMeshRenderer skinnedMesh = propSkinedMesh.objectReferenceValue as SkinnedMeshRenderer;
+ if (skinnedMesh != null) LineCount += skinnedMesh.sharedMesh.blendShapeCount;
+ return EditorGUIUtility.singleLineHeight * LineCount;
+ }
+ }
+
+ }
+}
+#endif
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/LipShapeTableDrawer.cs.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/LipShapeTableDrawer.cs.meta
new file mode 100644
index 0000000..3993f60
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/LipShapeTableDrawer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 91324d258827df746818399b9a51d4d5
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Lip_Framework.cs b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Lip_Framework.cs
new file mode 100644
index 0000000..1d05b3f
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Lip_Framework.cs
@@ -0,0 +1,103 @@
+//========= Copyright 2019, HTC Corporation. All rights reserved. ===========
+using System;
+using UnityEngine;
+using UnityEngine.XR.OpenXR;
+
+namespace VIVE
+{
+ namespace FacialTracking.Sample
+ {
+ public class Lip_Framework : MonoBehaviour
+ {
+ public enum FrameworkStatus { STOP, START, WORKING, ERROR }
+ ///
+ /// The status of the Lip engine.
+ ///
+ public static FrameworkStatus Status { get; protected set; }
+ ///
+ /// Whether to enable Lip module.
+ ///
+ public bool EnableLip = true;
+
+ private static Lip_Framework Mgr = null;
+ public static Lip_Framework Instance
+ {
+ get
+ {
+ if (Mgr == null)
+ {
+ Mgr = FindObjectOfType();
+ }
+ if (Mgr == null)
+ {
+ Debug.LogError("Lip_Framework not found");
+ }
+ return Mgr;
+ }
+ }
+
+ void Start()
+ {
+ StartFramework();
+ }
+
+ void OnDestroy()
+ {
+ StopFramework();
+ }
+ [Obsolete("Create FacialManager object and call member function StartFramework instead")]
+
+ private void StartFramework()
+ {
+ if (!EnableLip) return;
+ if (Status == FrameworkStatus.WORKING) return;
+
+ Status = FrameworkStatus.START;
+
+ Debug.Log("Starting to Initial Lip Engine");
+ XrFacialTrackerCreateInfoHTC m_expressioncreateInfo = new XrFacialTrackerCreateInfoHTC(
+ XrStructureType.XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC,
+ IntPtr.Zero,
+ XrFacialTrackingTypeHTC.XR_FACIAL_TRACKING_TYPE_LIP_DEFAULT_HTC);
+ var feature = OpenXRSettings.Instance.GetFeature();
+ int res = (int)feature.xrCreateFacialTrackerHTC(m_expressioncreateInfo, out OpenXRSettings.Instance.GetFeature().m_expressionHandle_Lip);
+ if (res == (int)XrResult.XR_SUCCESS || res == (int)XrResult.XR_SESSION_LOSS_PENDING)
+ {
+ Debug.Log("Initial Lip Engine :" + res);
+ Status = FrameworkStatus.WORKING;
+ }
+ else
+ {
+ Debug.LogError("Initial Lip Engine :" + res);
+ Status = FrameworkStatus.ERROR;
+ }
+
+ }
+ [Obsolete("Create FacialManager object and call member function StopFramework instead")]
+
+ public void StopFramework()
+ {
+ if (Status != FrameworkStatus.STOP)
+ {
+ var feature = OpenXRSettings.Instance.GetFeature();
+ int res = feature.xrDestroyFacialTrackerHTC(OpenXRSettings.Instance.GetFeature().m_expressionHandle_Lip);
+ if (res == (int)XrResult.XR_SUCCESS)
+ {
+ Debug.Log("Release Lip Engine : " + res);
+
+ }
+ else
+ {
+ Debug.LogError("Release Lip Engine : " + res);
+ }
+ }
+ else
+ {
+ Debug.Log("Stop Lip Framework : module not on");
+ }
+ Status = FrameworkStatus.STOP;
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Lip_Framework.cs.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Lip_Framework.cs.meta
new file mode 100644
index 0000000..f7db13c
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Lip_Framework.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 41f6d745d46210a49a0df9fe7d0d1102
+timeCreated: 1545375801
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Sample.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Sample.meta
new file mode 100644
index 0000000..3b39499
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Sample.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 846f91cae57562348bd10c1617b45b13
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Sample/AvatarLipSample.cs b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Sample/AvatarLipSample.cs
new file mode 100644
index 0000000..d5d6860
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Sample/AvatarLipSample.cs
@@ -0,0 +1,93 @@
+//========= Copyright 2019, HTC Corporation. All rights reserved. ===========
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace VIVE
+{
+ namespace FacialTracking.Sample
+ {
+ [Serializable]
+ public class LipShapeTable
+ {
+ public SkinnedMeshRenderer skinnedMeshRenderer;
+ public XrLipShapeHTC[] lipShapes;
+ }
+ public class AvatarLipSample : MonoBehaviour
+ {
+ [SerializeField] private List LipShapeTables;
+
+ public bool NeededToGetData = true;
+ private Dictionary LipWeightings;
+ private FacialManager facialManager = new FacialManager();
+ private void Start()
+ {
+ facialManager.StartFramework(XrFacialTrackingTypeHTC.XR_FACIAL_TRACKING_TYPE_LIP_DEFAULT_HTC);
+ SetLipShapeTables(LipShapeTables);
+ }
+
+ private void Update()
+ {
+ if (NeededToGetData)
+ {
+ facialManager.GetWeightings(out LipWeightings);
+ //Lip.GetLipWeightings(out LipWeightings);
+ UpdateLipShapes(LipWeightings);
+ }
+ }
+
+ public void SetLipShapeTables(List lipShapeTables)
+ {
+ bool valid = true;
+ if (lipShapeTables == null)
+ {
+ valid = false;
+ }
+ else
+ {
+ for (int table = 0; table < lipShapeTables.Count; ++table)
+ {
+ if (lipShapeTables[table].skinnedMeshRenderer == null)
+ {
+ valid = false;
+ break;
+ }
+ for (int shape = 0; shape < lipShapeTables[table].lipShapes.Length; ++shape)
+ {
+ XrLipShapeHTC lipShape = lipShapeTables[table].lipShapes[shape];
+ if (lipShape > XrLipShapeHTC.XR_LIP_SHAPE_MAX_ENUM_HTC || lipShape < 0)
+ {
+ valid = false;
+ break;
+ }
+ }
+ }
+ }
+ if (valid)
+ LipShapeTables = lipShapeTables;
+ }
+
+ public void UpdateLipShapes(Dictionary lipWeightings)
+ {
+ foreach (var table in LipShapeTables)
+ RenderModelLipShape(table, lipWeightings);
+ }
+
+ private void RenderModelLipShape(LipShapeTable lipShapeTable, Dictionary weighting)
+ {
+ for (int i = 0; i < lipShapeTable.lipShapes.Length; i++)
+ {
+ int targetIndex = (int)lipShapeTable.lipShapes[i];
+ if (targetIndex > (int)XrLipShapeHTC.XR_LIP_SHAPE_MAX_ENUM_HTC || targetIndex < 0) continue;
+ lipShapeTable.skinnedMeshRenderer.SetBlendShapeWeight(i, weighting[(XrLipShapeHTC)targetIndex] * 100);
+ }
+ }
+
+ private void OnDestroy()
+ {
+ facialManager.StopFramework(XrFacialTrackingTypeHTC.XR_FACIAL_TRACKING_TYPE_LIP_DEFAULT_HTC);
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Sample/AvatarLipSample.cs.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Sample/AvatarLipSample.cs.meta
new file mode 100644
index 0000000..3126271
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Sample/AvatarLipSample.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 42350b51669fc604cb2cad73c39f116c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Sample/MirrorCameraSample_Lip.cs b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Sample/MirrorCameraSample_Lip.cs
new file mode 100644
index 0000000..0caa677
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Sample/MirrorCameraSample_Lip.cs
@@ -0,0 +1,32 @@
+//========= Copyright 2019, HTC Corporation. All rights reserved. ===========
+using UnityEngine;
+
+namespace VIVE
+{
+ namespace FacialTracking.Sample
+ {
+ ///
+ /// A very basic mirror.
+ ///
+ [RequireComponent(typeof(Camera))]
+ public class MirrorCameraSample_Lip : MonoBehaviour
+ {
+ private const float Distance = 0.6f;
+
+ private void Update()
+ {
+ if (Lip_Framework.Status != Lip_Framework.FrameworkStatus.WORKING) return;
+ SetMirroTransform();
+ }
+
+ private void SetMirroTransform()
+ {
+ transform.position = Camera.main.transform.position + Camera.main.transform.forward * Distance;
+ transform.position = new Vector3(transform.position.x, Camera.main.transform.position.y, transform.position.z);
+ transform.LookAt(Camera.main.transform);
+ transform.eulerAngles = new Vector3(0, transform.eulerAngles.y, 0);
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Sample/MirrorCameraSample_Lip.cs.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Sample/MirrorCameraSample_Lip.cs.meta
new file mode 100644
index 0000000..5a68537
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/Lip/Sample/MirrorCameraSample_Lip.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 8dcb8610a1e4fe94a8cc7983d3b650cb
+timeCreated: 1545375969
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/VIVE_Enums.cs b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/VIVE_Enums.cs
new file mode 100644
index 0000000..2320a7c
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/VIVE_Enums.cs
@@ -0,0 +1,55 @@
+//========= Copyright 2019, HTC Corporation. All rights reserved. ===========
+namespace VIVE
+{
+ ///
+ /// error code of ViveSR
+ ///
+ public enum Error : int
+ {
+ RUNTIME_NOT_FOUND = -3,
+ NOT_INITIAL = -2,
+ FAILED = -1,
+ WORK = 0,
+ INVALID_INPUT = 1,
+ FILE_NOT_FOUND = 2,
+ DATA_NOT_FOUND = 13,
+ UNDEFINED = 319,
+ INITIAL_FAILED = 1001,
+ NOT_IMPLEMENTED = 1003,
+ NULL_POINTER = 1004,
+ OVER_MAX_LENGTH = 1005,
+ FILE_INVALID = 1006,
+ UNINSTALL_STEAM = 1007,
+ MEMCPY_FAIL = 1008,
+ NOT_MATCH = 1009,
+ NODE_NOT_EXIST = 1010,
+ UNKONW_MODULE = 1011,
+ MODULE_FULL = 1012,
+ UNKNOW_TYPE = 1013,
+ INVALID_MODULE = 1014,
+ INVALID_TYPE = 1015,
+ MEMORY_NOT_ENOUGH = 1016,
+ BUSY = 1017,
+ NOT_SUPPORTED = 1018,
+ INVALID_VALUE = 1019,
+ COMING_SOON = 1020,
+ INVALID_CHANGE = 1021,
+ TIMEOUT = 1022,
+ DEVICE_NOT_FOUND = 1023,
+ INVALID_DEVICE = 1024,
+ NOT_AUTHORIZED = 1025,
+ ALREADY = 1026,
+ INTERNAL = 1027,
+ CONNECTION_FAILED = 1028,
+ ALLOCATION_FAILED = 1029,
+ OPERATION_FAILED = 1030,
+ NOT_AVAILABLE = 1031,
+ CALLBACK_IN_PROGRESS= 1032,
+ SERVICE_NOT_FOUND = 1033,
+ DISABLED_BY_USER = 1034,
+ EULA_NOT_ACCEPT = 1035,
+ RUNTIME_NO_RESPONSE = 1036,
+ OPENCL_NOT_SUPPORT = 1037,
+ NOT_SUPPORT_EYE_TRACKING = 1038,
+ };
+}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/VIVE_Enums.cs.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/VIVE_Enums.cs.meta
new file mode 100644
index 0000000..5d20ad9
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Scripts/VIVE_Enums.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c81a0042ed8435d4097d6717e1b45dd8
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Shader.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Shader.meta
new file mode 100644
index 0000000..e0d2dcb
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Shader.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3937f5e15f29cda41996461db3a9207c
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Shader/Skin&Wrinkle_Jin.shader b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Shader/Skin&Wrinkle_Jin.shader
new file mode 100644
index 0000000..3693e53
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Shader/Skin&Wrinkle_Jin.shader
@@ -0,0 +1,631 @@
+// Made with Amplify Shader Editor
+// Available at the Unity Asset Store - http://u3d.as/y3X
+Shader "Custom/Skin&Wrinkle_Jin"
+{
+ Properties
+ {
+ _Normal("Normal", 2D) = "bump" {}
+ _Wrinkle("Wrinkle", 2D) = "bump" {}
+ _Wrinkle_Sad("Wrinkle_Sad", 2D) = "bump" {}
+ _Wrinkle_Smile("Wrinkle_Smile", 2D) = "bump" {}
+ _Wide_M("Wide_M", 2D) = "white" {}
+ _SQZ_M("SQZ_M", 2D) = "white" {}
+ _lip_Sad_M("lip_Sad_M", 2D) = "white" {}
+ _lip_Smile_M("lip_Smile_M", 2D) = "white" {}
+ _WrinkleScale_Squeeze_Left("WrinkleScale_Squeeze_Left", Range( 0 , 1)) = 1
+ _WrinkleScale_Squeeze_Right("WrinkleScale_Squeeze_Right", Range( 0 , 1)) = 0
+ _WrinkleScale_Wide_Up_Left("WrinkleScale_Wide_Up_Left", Range( 0 , 1)) = 0
+ _WrinkleScale_Wide_Up_Right("WrinkleScale_Wide_Up_Right", Range( 0 , 1)) = 0
+ _WrinkleScale_Sad_Left("WrinkleScale_Sad_Left", Range( 0 , 1)) = 0
+ _WrinkleScale_Sad_Right("WrinkleScale_Sad_Right", Range( 0 , 1)) = 0
+ _WrinkleScale_Smile_Left("WrinkleScale_Smile_Left", Range( 0 , 1)) = 0
+ _WrinkleScale_Smile_Right("WrinkleScale_Smile_Right", Range( 0 , 1)) = 0
+ _wrinkle_AllScale("wrinkle_AllScale", Range( 1 , 50)) = 0
+ _Albedo("Albedo", 2D) = "white" {}
+ _Metalic("Metalic", 2D) = "white" {}
+ _MetalicPower("MetalicPower", Range( 0 , 1)) = 0
+ _Smoothness("Smoothness", Range( 0 , 1)) = 1
+ _SSS_Depth("SSS_Depth", Range( 0 , 10)) = 1
+ _SSS_Power("SSS_Power", Range( 0 , 1)) = 1
+ _Mask("Mask", 2D) = "white" {}
+ _AO_power("AO_power", Range( 0 , 1)) = 1
+ _DetailSkin_Normal("DetailSkin_Normal", 2D) = "white" {}
+ _DetailSkin_Metalic("DetailSkin_Metalic", 2D) = "white" {}
+ _DetailSkin_Tiling("DetailSkin_Tiling", Vector) = (1,1,0,0)
+ _DetailSkin_alpha("DetailSkin_alpha", Range( 0 , 1)) = 1
+ _DetailSkin_Rotate("DetailSkin_Rotate", Range( 0 , 360)) = 0
+ _DetailSkin_MetalicAlpha("DetailSkin_MetalicAlpha", Range( 0 , 1)) = 0
+ _Translucency_Power("Translucency_Power", Range( 0 , 1)) = 0.6
+ [Header(Translucency)]
+ _Translucency("Strength", Range( 0 , 50)) = 1
+ _TransNormalDistortion("Normal Distortion", Range( 0 , 1)) = 0.1
+ _TransScattering("Scaterring Falloff", Range( 1 , 50)) = 2
+ _TransDirect("Direct", Range( 0 , 1)) = 1
+ _TransAmbient("Ambient", Range( 0 , 1)) = 0.2
+ _TransShadow("Shadow", Range( 0 , 1)) = 0.9
+ [HideInInspector] _texcoord( "", 2D ) = "white" {}
+ [HideInInspector] __dirty( "", Int ) = 1
+ }
+
+ SubShader
+ {
+ Tags{ "RenderType" = "Opaque" "Queue" = "Geometry+0" }
+ Cull Back
+ CGINCLUDE
+ #include "UnityCG.cginc"
+ #include "UnityPBSLighting.cginc"
+ #include "Lighting.cginc"
+ #pragma target 3.0
+ #if defined(SHADER_API_D3D11) || defined(SHADER_API_XBOXONE) || defined(UNITY_COMPILER_HLSLCC) || defined(SHADER_API_PSSL) || (defined(SHADER_TARGET_SURFACE_ANALYSIS) && !defined(SHADER_TARGET_SURFACE_ANALYSIS_MOJOSHADER))//ASE Sampler Macros
+ #define SAMPLE_TEXTURE2D(tex,samplerTex,coord) tex.Sample(samplerTex,coord)
+ #else//ASE Sampling Macros
+ #define SAMPLE_TEXTURE2D(tex,samplerTex,coord) tex2D(tex,coord)
+ #endif//ASE Sampling Macros
+
+ #ifdef UNITY_PASS_SHADOWCASTER
+ #undef INTERNAL_DATA
+ #undef WorldReflectionVector
+ #undef WorldNormalVector
+ #define INTERNAL_DATA half3 internalSurfaceTtoW0; half3 internalSurfaceTtoW1; half3 internalSurfaceTtoW2;
+ #define WorldReflectionVector(data,normal) reflect (data.worldRefl, half3(dot(data.internalSurfaceTtoW0,normal), dot(data.internalSurfaceTtoW1,normal), dot(data.internalSurfaceTtoW2,normal)))
+ #define WorldNormalVector(data,normal) half3(dot(data.internalSurfaceTtoW0,normal), dot(data.internalSurfaceTtoW1,normal), dot(data.internalSurfaceTtoW2,normal))
+ #endif
+ struct Input
+ {
+ float2 uv_texcoord;
+ float3 worldNormal;
+ INTERNAL_DATA
+ float3 worldPos;
+ };
+
+ struct SurfaceOutputStandardCustom
+ {
+ half3 Albedo;
+ half3 Normal;
+ half3 Emission;
+ half Metallic;
+ half Smoothness;
+ half Occlusion;
+ half Alpha;
+ half3 Translucency;
+ };
+
+ UNITY_DECLARE_TEX2D_NOSAMPLER(_Normal);
+ SamplerState sampler_Normal;
+ uniform float _WrinkleScale_Squeeze_Left;
+ UNITY_DECLARE_TEX2D_NOSAMPLER(_SQZ_M);
+ uniform float4 _SQZ_M_ST;
+ SamplerState sampler_SQZ_M;
+ uniform float _WrinkleScale_Squeeze_Right;
+ uniform float _WrinkleScale_Wide_Up_Left;
+ UNITY_DECLARE_TEX2D_NOSAMPLER(_Wide_M);
+ uniform float4 _Wide_M_ST;
+ SamplerState sampler_Wide_M;
+ uniform float _WrinkleScale_Wide_Up_Right;
+ uniform float _wrinkle_AllScale;
+ UNITY_DECLARE_TEX2D_NOSAMPLER(_Wrinkle);
+ SamplerState sampler_Wrinkle;
+ uniform float _WrinkleScale_Sad_Left;
+ UNITY_DECLARE_TEX2D_NOSAMPLER(_lip_Sad_M);
+ uniform float4 _lip_Sad_M_ST;
+ SamplerState sampler_lip_Sad_M;
+ uniform float _WrinkleScale_Sad_Right;
+ UNITY_DECLARE_TEX2D_NOSAMPLER(_Wrinkle_Sad);
+ SamplerState sampler_Wrinkle_Sad;
+ uniform float _WrinkleScale_Smile_Left;
+ UNITY_DECLARE_TEX2D_NOSAMPLER(_lip_Smile_M);
+ uniform float4 _lip_Smile_M_ST;
+ SamplerState sampler_lip_Smile_M;
+ uniform float _WrinkleScale_Smile_Right;
+ UNITY_DECLARE_TEX2D_NOSAMPLER(_Wrinkle_Smile);
+ SamplerState sampler_Wrinkle_Smile;
+ UNITY_DECLARE_TEX2D_NOSAMPLER(_DetailSkin_Normal);
+ uniform float2 _DetailSkin_Tiling;
+ uniform float _DetailSkin_Rotate;
+ SamplerState sampler_DetailSkin_Normal;
+ uniform float _DetailSkin_alpha;
+ UNITY_DECLARE_TEX2D_NOSAMPLER(_Mask);
+ SamplerState sampler_Mask;
+ UNITY_DECLARE_TEX2D_NOSAMPLER(_Albedo);
+ SamplerState sampler_Albedo;
+ uniform float _Translucency_Power;
+ uniform float _SSS_Depth;
+ uniform float _SSS_Power;
+ uniform float _MetalicPower;
+ UNITY_DECLARE_TEX2D_NOSAMPLER(_Metalic);
+ SamplerState sampler_Metalic;
+ uniform float _DetailSkin_MetalicAlpha;
+ UNITY_DECLARE_TEX2D_NOSAMPLER(_DetailSkin_Metalic);
+ SamplerState sampler_DetailSkin_Metalic;
+ uniform float _Smoothness;
+ uniform float _AO_power;
+ uniform half _Translucency;
+ uniform half _TransNormalDistortion;
+ uniform half _TransScattering;
+ uniform half _TransDirect;
+ uniform half _TransAmbient;
+ uniform half _TransShadow;
+
+
+ struct Gradient
+ {
+ int type;
+ int colorsLength;
+ int alphasLength;
+ float4 colors[8];
+ float2 alphas[8];
+ };
+
+
+ Gradient NewGradient(int type, int colorsLength, int alphasLength,
+ float4 colors0, float4 colors1, float4 colors2, float4 colors3, float4 colors4, float4 colors5, float4 colors6, float4 colors7,
+ float2 alphas0, float2 alphas1, float2 alphas2, float2 alphas3, float2 alphas4, float2 alphas5, float2 alphas6, float2 alphas7)
+ {
+ Gradient g;
+ g.type = type;
+ g.colorsLength = colorsLength;
+ g.alphasLength = alphasLength;
+ g.colors[ 0 ] = colors0;
+ g.colors[ 1 ] = colors1;
+ g.colors[ 2 ] = colors2;
+ g.colors[ 3 ] = colors3;
+ g.colors[ 4 ] = colors4;
+ g.colors[ 5 ] = colors5;
+ g.colors[ 6 ] = colors6;
+ g.colors[ 7 ] = colors7;
+ g.alphas[ 0 ] = alphas0;
+ g.alphas[ 1 ] = alphas1;
+ g.alphas[ 2 ] = alphas2;
+ g.alphas[ 3 ] = alphas3;
+ g.alphas[ 4 ] = alphas4;
+ g.alphas[ 5 ] = alphas5;
+ g.alphas[ 6 ] = alphas6;
+ g.alphas[ 7 ] = alphas7;
+ return g;
+ }
+
+
+ float4 SampleGradient( Gradient gradient, float time )
+ {
+ float3 color = gradient.colors[0].rgb;
+ UNITY_UNROLL
+ for (int c = 1; c < 8; c++)
+ {
+ float colorPos = saturate((time - gradient.colors[c-1].w) / (gradient.colors[c].w - gradient.colors[c-1].w)) * step(c, (float)gradient.colorsLength-1);
+ color = lerp(color, gradient.colors[c].rgb, lerp(colorPos, step(0.01, colorPos), gradient.type));
+ }
+ #ifndef UNITY_COLORSPACE_GAMMA
+ color = half3(GammaToLinearSpaceExact(color.r), GammaToLinearSpaceExact(color.g), GammaToLinearSpaceExact(color.b));
+ #endif
+ float alpha = gradient.alphas[0].x;
+ UNITY_UNROLL
+ for (int a = 1; a < 8; a++)
+ {
+ float alphaPos = saturate((time - gradient.alphas[a-1].y) / (gradient.alphas[a].y - gradient.alphas[a-1].y)) * step(a, (float)gradient.alphasLength-1);
+ alpha = lerp(alpha, gradient.alphas[a].x, lerp(alphaPos, step(0.01, alphaPos), gradient.type));
+ }
+ return float4(color, alpha);
+ }
+
+
+ inline half4 LightingStandardCustom(SurfaceOutputStandardCustom s, half3 viewDir, UnityGI gi )
+ {
+ #if !DIRECTIONAL
+ float3 lightAtten = gi.light.color;
+ #else
+ float3 lightAtten = lerp( _LightColor0.rgb, gi.light.color, _TransShadow );
+ #endif
+ half3 lightDir = gi.light.dir + s.Normal * _TransNormalDistortion;
+ half transVdotL = pow( saturate( dot( viewDir, -lightDir ) ), _TransScattering );
+ half3 translucency = lightAtten * (transVdotL * _TransDirect + gi.indirect.diffuse * _TransAmbient) * s.Translucency;
+ half4 c = half4( s.Albedo * translucency * _Translucency, 0 );
+
+ SurfaceOutputStandard r;
+ r.Albedo = s.Albedo;
+ r.Normal = s.Normal;
+ r.Emission = s.Emission;
+ r.Metallic = s.Metallic;
+ r.Smoothness = s.Smoothness;
+ r.Occlusion = s.Occlusion;
+ r.Alpha = s.Alpha;
+ return LightingStandard (r, viewDir, gi) + c;
+ }
+
+ inline void LightingStandardCustom_GI(SurfaceOutputStandardCustom s, UnityGIInput data, inout UnityGI gi )
+ {
+ #if defined(UNITY_PASS_DEFERRED) && UNITY_ENABLE_REFLECTION_BUFFERS
+ gi = UnityGlobalIllumination(data, s.Occlusion, s.Normal);
+ #else
+ UNITY_GLOSSY_ENV_FROM_SURFACE( g, s, data );
+ gi = UnityGlobalIllumination( data, s.Occlusion, s.Normal, g );
+ #endif
+ }
+
+ void surf( Input i , inout SurfaceOutputStandardCustom o )
+ {
+ float2 uv_SQZ_M = i.uv_texcoord * _SQZ_M_ST.xy + _SQZ_M_ST.zw;
+ float4 tex2DNode120 = SAMPLE_TEXTURE2D( _SQZ_M, sampler_SQZ_M, uv_SQZ_M );
+ Gradient gradient100 = NewGradient( 0, 3, 2, float4( 0, 0, 0, 0.4950027 ), float4( 1, 1, 1, 0.5000076 ), float4( 1, 1, 1, 1 ), 0, 0, 0, 0, 0, float2( 1, 0 ), float2( 1, 1 ), 0, 0, 0, 0, 0, 0 );
+ float4 L_m104 = SampleGradient( gradient100, i.uv_texcoord.x );
+ Gradient gradient99 = NewGradient( 0, 3, 2, float4( 1, 1, 1, 0.5000076 ), float4( 0, 0, 0, 0.5049973 ), float4( 0, 0, 0, 1 ), 0, 0, 0, 0, 0, float2( 1, 0 ), float2( 1, 1 ), 0, 0, 0, 0, 0, 0 );
+ float4 R_m103 = SampleGradient( gradient99, i.uv_texcoord.x );
+ float2 uv_Wide_M = i.uv_texcoord * _Wide_M_ST.xy + _Wide_M_ST.zw;
+ float4 tex2DNode123 = SAMPLE_TEXTURE2D( _Wide_M, sampler_Wide_M, uv_Wide_M );
+ float4 all_Eye_m136 = ( ( ( _WrinkleScale_Squeeze_Left * tex2DNode120 * L_m104 ) + ( _WrinkleScale_Squeeze_Right * R_m103 * tex2DNode120 ) + ( _WrinkleScale_Wide_Up_Left * tex2DNode123 * L_m104 ) + ( _WrinkleScale_Wide_Up_Right * tex2DNode123 * R_m103 ) ) * _wrinkle_AllScale );
+ float2 uv_lip_Sad_M = i.uv_texcoord * _lip_Sad_M_ST.xy + _lip_Sad_M_ST.zw;
+ float4 tex2DNode114 = SAMPLE_TEXTURE2D( _lip_Sad_M, sampler_lip_Sad_M, uv_lip_Sad_M );
+ float4 all_Sad_m137 = ( ( ( _WrinkleScale_Sad_Left * tex2DNode114 * L_m104 ) + ( _WrinkleScale_Sad_Right * tex2DNode114 * R_m103 ) ) * _wrinkle_AllScale );
+ float2 uv_lip_Smile_M = i.uv_texcoord * _lip_Smile_M_ST.xy + _lip_Smile_M_ST.zw;
+ float4 tex2DNode112 = SAMPLE_TEXTURE2D( _lip_Smile_M, sampler_lip_Smile_M, uv_lip_Smile_M );
+ float4 all_Smile_m138 = ( ( ( _WrinkleScale_Smile_Left * tex2DNode112 * L_m104 ) + ( _WrinkleScale_Smile_Right * tex2DNode112 * R_m103 ) ) * _wrinkle_AllScale );
+ float4 Normal_out150 = ( float4( UnpackNormal( SAMPLE_TEXTURE2D( _Normal, sampler_Normal, i.uv_texcoord ) ) , 0.0 ) + ( all_Eye_m136 * float4( UnpackNormal( SAMPLE_TEXTURE2D( _Wrinkle, sampler_Wrinkle, i.uv_texcoord ) ) , 0.0 ) ) + ( all_Sad_m137 * float4( UnpackNormal( SAMPLE_TEXTURE2D( _Wrinkle_Sad, sampler_Wrinkle_Sad, i.uv_texcoord ) ) , 0.0 ) ) + ( all_Smile_m138 * float4( UnpackNormal( SAMPLE_TEXTURE2D( _Wrinkle_Smile, sampler_Wrinkle_Smile, i.uv_texcoord ) ) , 0.0 ) ) );
+ float2 uv_TexCoord18 = i.uv_texcoord * _DetailSkin_Tiling;
+ float cos19 = cos( radians( _DetailSkin_Rotate ) );
+ float sin19 = sin( radians( _DetailSkin_Rotate ) );
+ float2 rotator19 = mul( uv_TexCoord18 - float2( 0.5,0.5 ) , float2x2( cos19 , -sin19 , sin19 , cos19 )) + float2( 0.5,0.5 );
+ float4 tex2DNode26 = SAMPLE_TEXTURE2D( _Mask, sampler_Mask, i.uv_texcoord );
+ float4 lerpResult158 = lerp( Normal_out150 , SAMPLE_TEXTURE2D( _DetailSkin_Normal, sampler_DetailSkin_Normal, rotator19 ) , ( _DetailSkin_alpha * tex2DNode26.g ));
+ float4 Normal86 = ( ( lerpResult158 * _DetailSkin_alpha ) + Normal_out150 );
+ o.Normal = Normal86.rgb;
+ float temp_output_37_0 = ( tex2DNode26.r * _Translucency_Power );
+ float4 color71 = IsGammaSpace() ? float4(1,1,1,0) : float4(1,1,1,0);
+ Gradient gradient72 = NewGradient( 0, 2, 2, float4( 0.972549, 0.7921569, 0.7921569, 0 ), float4( 1, 0.9572161, 0.9481132, 1 ), 0, 0, 0, 0, 0, 0, float2( 1, 0 ), float2( 1, 1 ), 0, 0, 0, 0, 0, 0 );
+ float3 ase_worldNormal = WorldNormalVector( i, float3( 0, 0, 1 ) );
+ float3 ase_worldPos = i.worldPos;
+ #if defined(LIGHTMAP_ON) && UNITY_VERSION < 560 //aseld
+ float3 ase_worldlightDir = 0;
+ #else //aseld
+ float3 ase_worldlightDir = Unity_SafeNormalize( UnityWorldSpaceLightDir( ase_worldPos ) );
+ #endif //aseld
+ float dotResult7 = dot( ase_worldNormal , ( ase_worldlightDir * _SSS_Depth ) );
+ float layeredBlendVar70 = temp_output_37_0;
+ float4 layeredBlend70 = ( lerp( color71,( SampleGradient( gradient72, dotResult7 ) * _SSS_Power ) , layeredBlendVar70 ) );
+ float4 Albedo81 = ( SAMPLE_TEXTURE2D( _Albedo, sampler_Albedo, i.uv_texcoord ) * layeredBlend70 );
+ o.Albedo = Albedo81.rgb;
+ float4 tex2DNode46 = SAMPLE_TEXTURE2D( _Metalic, sampler_Metalic, i.uv_texcoord );
+ float4 Metallic84 = ( _MetalicPower * tex2DNode46 );
+ o.Metallic = Metallic84.r;
+ float Smoothness83 = ( ( _DetailSkin_MetalicAlpha * ( SAMPLE_TEXTURE2D( _DetailSkin_Metalic, sampler_DetailSkin_Metalic, i.uv_texcoord ).a * tex2DNode26.g ) ) + ( tex2DNode46.a * _Smoothness ) );
+ o.Smoothness = Smoothness83;
+ float AO85 = ( tex2DNode26.b * _AO_power );
+ o.Occlusion = AO85;
+ float Translucency79 = temp_output_37_0;
+ float3 temp_cast_9 = (Translucency79).xxx;
+ o.Translucency = temp_cast_9;
+ o.Alpha = 1;
+ }
+
+ ENDCG
+ CGPROGRAM
+ #pragma surface surf StandardCustom keepalpha fullforwardshadows exclude_path:deferred
+
+ ENDCG
+ Pass
+ {
+ Name "ShadowCaster"
+ Tags{ "LightMode" = "ShadowCaster" }
+ ZWrite On
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma target 3.0
+ #pragma multi_compile_shadowcaster
+ #pragma multi_compile UNITY_PASS_SHADOWCASTER
+ #pragma skip_variants FOG_LINEAR FOG_EXP FOG_EXP2
+ #include "HLSLSupport.cginc"
+ #if ( SHADER_API_D3D11 || SHADER_API_GLCORE || SHADER_API_GLES || SHADER_API_GLES3 || SHADER_API_METAL || SHADER_API_VULKAN )
+ #define CAN_SKIP_VPOS
+ #endif
+ #include "UnityCG.cginc"
+ #include "Lighting.cginc"
+ #include "UnityPBSLighting.cginc"
+ struct v2f
+ {
+ V2F_SHADOW_CASTER;
+ float2 customPack1 : TEXCOORD1;
+ float4 tSpace0 : TEXCOORD2;
+ float4 tSpace1 : TEXCOORD3;
+ float4 tSpace2 : TEXCOORD4;
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ UNITY_VERTEX_OUTPUT_STEREO
+ };
+ v2f vert( appdata_full v )
+ {
+ v2f o;
+ UNITY_SETUP_INSTANCE_ID( v );
+ UNITY_INITIALIZE_OUTPUT( v2f, o );
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o );
+ UNITY_TRANSFER_INSTANCE_ID( v, o );
+ Input customInputData;
+ float3 worldPos = mul( unity_ObjectToWorld, v.vertex ).xyz;
+ half3 worldNormal = UnityObjectToWorldNormal( v.normal );
+ half3 worldTangent = UnityObjectToWorldDir( v.tangent.xyz );
+ half tangentSign = v.tangent.w * unity_WorldTransformParams.w;
+ half3 worldBinormal = cross( worldNormal, worldTangent ) * tangentSign;
+ o.tSpace0 = float4( worldTangent.x, worldBinormal.x, worldNormal.x, worldPos.x );
+ o.tSpace1 = float4( worldTangent.y, worldBinormal.y, worldNormal.y, worldPos.y );
+ o.tSpace2 = float4( worldTangent.z, worldBinormal.z, worldNormal.z, worldPos.z );
+ o.customPack1.xy = customInputData.uv_texcoord;
+ o.customPack1.xy = v.texcoord;
+ TRANSFER_SHADOW_CASTER_NORMALOFFSET( o )
+ return o;
+ }
+ half4 frag( v2f IN
+ #if !defined( CAN_SKIP_VPOS )
+ , UNITY_VPOS_TYPE vpos : VPOS
+ #endif
+ ) : SV_Target
+ {
+ UNITY_SETUP_INSTANCE_ID( IN );
+ Input surfIN;
+ UNITY_INITIALIZE_OUTPUT( Input, surfIN );
+ surfIN.uv_texcoord = IN.customPack1.xy;
+ float3 worldPos = float3( IN.tSpace0.w, IN.tSpace1.w, IN.tSpace2.w );
+ half3 worldViewDir = normalize( UnityWorldSpaceViewDir( worldPos ) );
+ surfIN.worldPos = worldPos;
+ surfIN.worldNormal = float3( IN.tSpace0.z, IN.tSpace1.z, IN.tSpace2.z );
+ surfIN.internalSurfaceTtoW0 = IN.tSpace0.xyz;
+ surfIN.internalSurfaceTtoW1 = IN.tSpace1.xyz;
+ surfIN.internalSurfaceTtoW2 = IN.tSpace2.xyz;
+ SurfaceOutputStandardCustom o;
+ UNITY_INITIALIZE_OUTPUT( SurfaceOutputStandardCustom, o )
+ surf( surfIN, o );
+ #if defined( CAN_SKIP_VPOS )
+ float2 vpos = IN.pos;
+ #endif
+ SHADOW_CASTER_FRAGMENT( IN )
+ }
+ ENDCG
+ }
+ }
+ Fallback "Diffuse"
+ CustomEditor "ASEMaterialInspector"
+}
+/*ASEBEGIN
+Version=18400
+-1440;188;1440;836;5394.574;-782.314;1;True;False
+Node;AmplifyShaderEditor.CommentaryNode;94;-5762.245,872.9059;Inherit;False;613.3813;369.743;R_UV;2;102;99;;1,1,1,1;0;0
+Node;AmplifyShaderEditor.CommentaryNode;95;-5766.595,503.0958;Inherit;False;617.7324;334.9375;L_UV;2;101;100;;1,1,1,1;0;0
+Node;AmplifyShaderEditor.TextureCoordinatesNode;98;-6000.696,807.8517;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.GradientNode;99;-5741.39,964.5538;Inherit;False;0;3;2;1,1,1,0.5000076;0,0,0,0.5049973;0,0,0,1;1,0;1,1;0;1;OBJECT;0
+Node;AmplifyShaderEditor.GradientNode;100;-5739.448,634.3599;Inherit;False;0;3;2;0,0,0,0.4950027;1,1,1,0.5000076;1,1,1,1;1,0;1,1;0;1;OBJECT;0
+Node;AmplifyShaderEditor.GradientSampleNode;101;-5442.127,630.3428;Inherit;True;2;0;OBJECT;;False;1;FLOAT;0;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.GradientSampleNode;102;-5450.901,982.2878;Inherit;True;2;0;OBJECT;;False;1;FLOAT;0;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.CommentaryNode;97;-4702.964,478.5438;Inherit;False;578.3761;292.5326;SQZ_L;3;126;119;116;;1,1,1,1;0;0
+Node;AmplifyShaderEditor.CommentaryNode;96;-4704.698,798.3118;Inherit;False;592.7122;250.4255;SQZ_R;3;125;118;117;;1,1,1,1;0;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;103;-5007.304,900.5298;Inherit;False;R_m;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;104;-5048.692,530.6858;Inherit;False;L_m;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.GetLocalVarNode;111;-5653.006,1464.302;Inherit;False;104;L_m;1;0;OBJECT;;False;1;COLOR;0
+Node;AmplifyShaderEditor.RangedFloatNode;107;-4584.189,1421.759;Inherit;False;Property;_WrinkleScale_Smile_Left;WrinkleScale_Smile_Left;14;0;Create;True;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.SamplerNode;112;-4920.581,1553.702;Inherit;True;Property;_lip_Smile_M;lip_Smile_M;7;0;Create;True;0;0;False;0;False;-1;9f79442cfa74a03479bcc9683e287520;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.GetLocalVarNode;106;-4506.252,1506.941;Inherit;False;104;L_m;1;0;OBJECT;;False;1;COLOR;0
+Node;AmplifyShaderEditor.RangedFloatNode;119;-4595.809,536.3148;Inherit;False;Property;_WrinkleScale_Squeeze_Left;WrinkleScale_Squeeze_Left;8;0;Create;True;0;0;False;0;False;1;0;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.GetLocalVarNode;108;-4459.899,1733.231;Inherit;False;103;R_m;1;0;OBJECT;;False;1;COLOR;0
+Node;AmplifyShaderEditor.GetLocalVarNode;109;-5654.68,1641.468;Inherit;False;103;R_m;1;0;OBJECT;;False;1;COLOR;0
+Node;AmplifyShaderEditor.GetLocalVarNode;116;-4558.337,659.2399;Inherit;False;104;L_m;1;0;OBJECT;;False;1;COLOR;0
+Node;AmplifyShaderEditor.RangedFloatNode;122;-4604.923,1225.47;Inherit;False;Property;_WrinkleScale_Wide_Up_Right;WrinkleScale_Wide_Up_Right;11;0;Create;True;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.RangedFloatNode;124;-4606.867,1066.8;Inherit;False;Property;_WrinkleScale_Wide_Up_Left;WrinkleScale_Wide_Up_Left;10;0;Create;True;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.SamplerNode;123;-4939.582,1173.537;Inherit;True;Property;_Wide_M;Wide_M;4;0;Create;True;0;0;False;0;False;-1;76493984454b03f47a3137acfc5ee3a6;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.RangedFloatNode;117;-4631.354,872.5428;Inherit;False;Property;_WrinkleScale_Squeeze_Right;WrinkleScale_Squeeze_Right;9;0;Create;True;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.RangedFloatNode;105;-4559.904,1644.286;Inherit;False;Property;_WrinkleScale_Smile_Right;WrinkleScale_Smile_Right;15;0;Create;True;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.SamplerNode;120;-5067.851,654.3718;Inherit;True;Property;_SQZ_M;SQZ_M;5;0;Create;True;0;0;False;0;False;-1;0bde64e6f5a7c7645b626bacac977600;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.GetLocalVarNode;118;-4581.327,963.2089;Inherit;False;103;R_m;1;0;OBJECT;;False;1;COLOR;0
+Node;AmplifyShaderEditor.GetLocalVarNode;115;-4510.704,1303.902;Inherit;False;103;R_m;1;0;OBJECT;;False;1;COLOR;0
+Node;AmplifyShaderEditor.RangedFloatNode;113;-5762.145,1554.898;Inherit;False;Property;_WrinkleScale_Sad_Right;WrinkleScale_Sad_Right;13;0;Create;True;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.RangedFloatNode;110;-5760.923,1394.412;Inherit;False;Property;_WrinkleScale_Sad_Left;WrinkleScale_Sad_Left;12;0;Create;True;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.SamplerNode;114;-6072.71,1473.314;Inherit;True;Property;_lip_Sad_M;lip_Sad_M;6;0;Create;True;0;0;False;0;False;-1;b651b3205353cbe4eafef19f8cd4eee6;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.GetLocalVarNode;121;-4514.828,1145.745;Inherit;False;104;L_m;1;0;OBJECT;;False;1;COLOR;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;126;-4273.433,607.8378;Inherit;False;3;3;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;125;-4273.177,869.8079;Inherit;False;3;3;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;129;-4229.981,1088.737;Inherit;False;3;3;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;131;-4212.857,1507.256;Inherit;False;3;3;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;132;-4205.058,1647.657;Inherit;False;3;3;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;128;-5367.087,1590.42;Inherit;False;3;3;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;127;-5373.886,1434.849;Inherit;False;3;3;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;130;-4223.379,1212.372;Inherit;False;3;3;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.SimpleAddOpNode;135;-4035.015,1520.885;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.SimpleAddOpNode;133;-3924.421,634.5908;Inherit;False;4;4;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;3;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.RangedFloatNode;155;-5052.234,1888.661;Inherit;False;Property;_wrinkle_AllScale;wrinkle_AllScale;16;0;Create;True;0;0;False;0;False;0;1;1;50;0;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleAddOpNode;134;-5219.82,1446.772;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;152;-3855.492,1516.114;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;FLOAT;0;False;1;COLOR;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;154;-5036.926,1444.667;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;FLOAT;0;False;1;COLOR;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;153;-3776.39,643.4372;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;FLOAT;0;False;1;COLOR;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;136;-3606.879,630.5257;Inherit;False;all_Eye_m;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;138;-3679.374,1511.708;Inherit;False;all_Smile_m;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.TextureCoordinatesNode;157;-3744.246,1786.114;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.RegisterLocalVarNode;137;-4825.111,1443.62;Inherit;False;all_Sad_m;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.CommentaryNode;92;-2075.377,645.8531;Inherit;False;2289.385;655.7867;Normal;13;19;17;16;18;14;15;21;22;23;86;151;156;158;;1,1,1,1;0;0
+Node;AmplifyShaderEditor.CommentaryNode;91;-2058.169,-683.2374;Inherit;False;2837.814;1019.518;Albedo;15;72;55;71;11;8;70;81;9;73;10;56;4;7;6;12;;1,1,1,1;0;0
+Node;AmplifyShaderEditor.GetLocalVarNode;139;-3369.641,1091.123;Inherit;False;137;all_Sad_m;1;0;OBJECT;;False;1;COLOR;0
+Node;AmplifyShaderEditor.SamplerNode;144;-3475.249,870.3969;Inherit;True;Property;_Wrinkle;Wrinkle;1;0;Create;True;0;0;False;0;False;-1;bf18efd814a59c645a89649c222ce5ec;None;True;0;True;bump;Auto;True;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.GetLocalVarNode;143;-3377.436,794.8948;Inherit;False;136;all_Eye_m;1;0;OBJECT;;False;1;COLOR;0
+Node;AmplifyShaderEditor.SamplerNode;142;-3457.164,1444.427;Inherit;True;Property;_Wrinkle_Smile;Wrinkle_Smile;3;0;Create;True;0;0;False;0;False;-1;b3054ff6e9f73b243b3cda952fa02424;None;True;0;True;bump;Auto;True;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.SamplerNode;140;-3468.679,1165.854;Inherit;True;Property;_Wrinkle_Sad;Wrinkle_Sad;2;0;Create;True;0;0;False;0;False;-1;e86ced7d9ef006641b3cf8855baf388b;None;True;0;True;bump;Auto;True;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.GetLocalVarNode;141;-3376.13,1367.524;Inherit;False;138;all_Smile_m;1;0;OBJECT;;False;1;COLOR;0
+Node;AmplifyShaderEditor.SamplerNode;149;-3061.233,1476.57;Inherit;True;Property;_Normal;Normal;0;0;Create;True;0;0;False;0;False;-1;5f6a88171526ba44b8edd0316d32be0e;None;True;0;True;bump;Auto;True;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.Vector2Node;15;-2001.746,780.6942;Inherit;False;Property;_DetailSkin_Tiling;DetailSkin_Tiling;27;0;Create;True;0;0;False;0;False;1,1;30,30;0;3;FLOAT2;0;FLOAT;1;FLOAT;2
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;147;-3115.382,1368.964;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;FLOAT3;0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;146;-3121.658,1087.34;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;FLOAT3;0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.RangedFloatNode;14;-1980.15,1123.764;Inherit;False;Property;_DetailSkin_Rotate;DetailSkin_Rotate;29;0;Create;True;0;0;False;0;False;0;0;0;360;0;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;145;-3128.717,826.8129;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;FLOAT3;0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.RangedFloatNode;12;-2024.223,-205.4592;Inherit;False;Property;_SSS_Depth;SSS_Depth;21;0;Create;True;0;0;False;0;False;1;1;0;10;0;1;FLOAT;0
+Node;AmplifyShaderEditor.WorldSpaceLightDirHlpNode;6;-1996.104,-375.6187;Inherit;False;True;1;0;FLOAT;0;False;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3
+Node;AmplifyShaderEditor.TextureCoordinatesNode;78;-1914.427,375.004;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;11;-1718.054,-374.1815;Inherit;False;2;2;0;FLOAT3;0,0,0;False;1;FLOAT;0;False;1;FLOAT3;0
+Node;AmplifyShaderEditor.CommentaryNode;93;-1652.657,1332.536;Inherit;False;1866.496;767.1895;Metallic & Smoothness;14;83;49;84;50;48;47;52;51;46;44;45;43;75;74;;1,1,1,1;0;0
+Node;AmplifyShaderEditor.WorldNormalVector;8;-1778.006,-537.9479;Inherit;False;False;1;0;FLOAT3;0,0,1;False;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3
+Node;AmplifyShaderEditor.TextureCoordinatesNode;18;-1764.468,791.4263;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.SimpleAddOpNode;148;-2713.122,1102.728;Inherit;False;4;4;0;FLOAT3;0,0,0;False;1;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;3;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.Vector2Node;17;-1719.703,955.5605;Inherit;False;Constant;_Vector0;Vector 0;11;0;Create;True;0;0;False;0;False;0.5,0.5;0,0;0;3;FLOAT2;0;FLOAT;1;FLOAT;2
+Node;AmplifyShaderEditor.RadiansOpNode;16;-1687.149,1134.616;Inherit;False;1;0;FLOAT;0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.DotProductOpNode;7;-1533.092,-482.9666;Inherit;False;2;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.GradientNode;72;-1611.289,-622.6675;Inherit;False;0;2;2;0.972549,0.7921569,0.7921569,0;1,0.9572161,0.9481132,1;1,0;1,1;0;1;OBJECT;0
+Node;AmplifyShaderEditor.SamplerNode;26;-1651.963,347.5779;Inherit;True;Property;_Mask;Mask;23;0;Create;True;0;0;False;0;False;-1;7bf471a629e3ed640b3ace8997379f80;4de633b93a5c4fd4ba6a9263663ff7e1;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.RotatorNode;19;-1493.154,893.4912;Inherit;False;3;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;2;FLOAT;1;False;1;FLOAT2;0
+Node;AmplifyShaderEditor.TextureCoordinatesNode;74;-1586.892,1475.731;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.RegisterLocalVarNode;150;-2433.694,1105.526;Inherit;False;Normal_out;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.RangedFloatNode;21;-1270.01,1054.852;Inherit;False;Property;_DetailSkin_alpha;DetailSkin_alpha;28;0;Create;True;0;0;False;0;False;1;1;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.GetLocalVarNode;151;-946.4784,1169.967;Inherit;False;150;Normal_out;1;0;OBJECT;;False;1;COLOR;0
+Node;AmplifyShaderEditor.RangedFloatNode;38;-1161.322,446.4533;Inherit;False;Property;_Translucency_Power;Translucency_Power;31;0;Create;True;0;0;False;0;False;0.6;0.6;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.GradientSampleNode;4;-1301.101,-594.6799;Inherit;True;2;0;OBJECT;;False;1;FLOAT;0;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.RangedFloatNode;56;-1359.7,-345.746;Inherit;False;Property;_SSS_Power;SSS_Power;22;0;Create;True;0;0;False;0;False;1;1;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;23;-951.6035,963.5776;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.SamplerNode;22;-1157.514,746.5341;Inherit;True;Property;_DetailSkin_Normal;DetailSkin_Normal;25;0;Create;True;0;0;False;0;False;-1;7a4aa691425a0e84996a3a3f3d3ef326;7a4aa691425a0e84996a3a3f3d3ef326;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.TextureCoordinatesNode;75;-1568.842,1823.917;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.SamplerNode;43;-1290.712,1413.351;Inherit;True;Property;_DetailSkin_Metalic;DetailSkin_Metalic;26;0;Create;True;0;0;False;0;False;-1;508aaba794b76264994ff90752435697;508aaba794b76264994ff90752435697;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;37;-792.6582,377.6286;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.SamplerNode;46;-1310.521,1795.697;Inherit;True;Property;_Metalic;Metalic;18;0;Create;True;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.ColorNode;71;-791.9308,-197.0864;Inherit;False;Constant;_Color0;Color 0;20;0;Create;True;0;0;False;0;False;1,1,1,0;0,0,0,0;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.TextureCoordinatesNode;73;-289.7696,157.0661;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;44;-847.4484,1410.771;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;55;-900.9518,-430.5521;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;FLOAT;0;False;1;COLOR;0
+Node;AmplifyShaderEditor.RangedFloatNode;51;-875.8831,1987.181;Inherit;False;Property;_Smoothness;Smoothness;20;0;Create;True;0;0;False;0;False;1;1;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.LerpOp;158;-685.9257,780.9528;Inherit;True;3;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;FLOAT;0;False;1;COLOR;0
+Node;AmplifyShaderEditor.RangedFloatNode;45;-778.6556,1602.979;Inherit;False;Property;_DetailSkin_MetalicAlpha;DetailSkin_MetalicAlpha;30;0;Create;True;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.LayeredBlendNode;70;-291.9867,-208.8582;Inherit;True;6;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;1;COLOR;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;52;-622.3829,1910.48;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;47;-471.1548,1523.58;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.RangedFloatNode;54;-1145.253,556.6238;Inherit;False;Property;_AO_power;AO_power;24;0;Create;True;0;0;False;0;False;1;1;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;159;-431.7331,901.3828;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;FLOAT;0;False;1;COLOR;0
+Node;AmplifyShaderEditor.RangedFloatNode;48;-574.8556,1437.58;Inherit;False;Property;_MetalicPower;MetalicPower;19;0;Create;True;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0
+Node;AmplifyShaderEditor.SamplerNode;9;-59.90963,144.5609;Inherit;True;Property;_Albedo;Albedo;17;0;Create;True;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;53;-794.247,534.9562;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleAddOpNode;156;-236.0334,1015.347;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.SimpleAddOpNode;49;-234.1212,1746.979;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;10;354.7015,184.0346;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.SimpleMultiplyOpNode;50;-226.1833,1455.078;Inherit;False;2;2;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;83;-56.14864,1758.119;Inherit;False;Smoothness;-1;True;1;0;FLOAT;0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;86;-18.79991,1016.326;Inherit;False;Normal;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;85;-536.3601,562.4451;Inherit;False;AO;-1;True;1;0;FLOAT;0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;79;-537.497,429.1004;Inherit;False;Translucency;-1;True;1;0;FLOAT;0;False;1;FLOAT;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;81;546.948,185.7379;Inherit;False;Albedo;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.RegisterLocalVarNode;84;-37.60497,1472.218;Inherit;False;Metallic;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0
+Node;AmplifyShaderEditor.GetLocalVarNode;87;317.3397,872.149;Inherit;False;86;Normal;1;0;OBJECT;;False;1;COLOR;0
+Node;AmplifyShaderEditor.GetLocalVarNode;90;293.7708,1009.577;Inherit;False;83;Smoothness;1;0;OBJECT;;False;1;FLOAT;0
+Node;AmplifyShaderEditor.GetLocalVarNode;89;318.7708,1077.577;Inherit;False;85;AO;1;0;OBJECT;;False;1;FLOAT;0
+Node;AmplifyShaderEditor.GetLocalVarNode;88;317.7708,940.5767;Inherit;False;84;Metallic;1;0;OBJECT;;False;1;COLOR;0
+Node;AmplifyShaderEditor.GetLocalVarNode;80;288.7276,1146.958;Inherit;False;79;Translucency;1;0;OBJECT;;False;1;FLOAT;0
+Node;AmplifyShaderEditor.GetLocalVarNode;82;314.498,801.9138;Inherit;False;81;Albedo;1;0;OBJECT;;False;1;COLOR;0
+Node;AmplifyShaderEditor.StandardSurfaceOutputNode;0;642.5273,826.9124;Float;False;True;-1;2;ASEMaterialInspector;0;0;Standard;JinShader_Skin4;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;Back;0;False;-1;0;False;-1;False;0;False;-1;0;False;-1;False;0;Opaque;0.5;True;True;0;False;Opaque;;Geometry;ForwardOnly;14;all;True;True;True;True;0;False;-1;False;0;False;-1;255;False;-1;255;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;False;2;15;10;25;False;0.5;True;0;0;False;-1;0;False;-1;0;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;0;0,0,0,0;VertexOffset;True;False;Cylindrical;False;Relative;0;;-1;32;-1;-1;0;False;0;0;False;-1;-1;0;False;-1;0;0;0;False;0.1;False;-1;0;False;-1;True;16;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;2;FLOAT3;0,0,0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;6;FLOAT3;0,0,0;False;7;FLOAT3;0,0,0;False;8;FLOAT;0;False;9;FLOAT;0;False;10;FLOAT;0;False;13;FLOAT3;0,0,0;False;11;FLOAT3;0,0,0;False;12;FLOAT3;0,0,0;False;14;FLOAT4;0,0,0,0;False;15;FLOAT3;0,0,0;False;0
+WireConnection;101;0;100;0
+WireConnection;101;1;98;0
+WireConnection;102;0;99;0
+WireConnection;102;1;98;0
+WireConnection;103;0;102;0
+WireConnection;104;0;101;0
+WireConnection;126;0;119;0
+WireConnection;126;1;120;0
+WireConnection;126;2;116;0
+WireConnection;125;0;117;0
+WireConnection;125;1;118;0
+WireConnection;125;2;120;0
+WireConnection;129;0;124;0
+WireConnection;129;1;123;0
+WireConnection;129;2;121;0
+WireConnection;131;0;107;0
+WireConnection;131;1;112;0
+WireConnection;131;2;106;0
+WireConnection;132;0;105;0
+WireConnection;132;1;112;0
+WireConnection;132;2;108;0
+WireConnection;128;0;113;0
+WireConnection;128;1;114;0
+WireConnection;128;2;109;0
+WireConnection;127;0;110;0
+WireConnection;127;1;114;0
+WireConnection;127;2;111;0
+WireConnection;130;0;122;0
+WireConnection;130;1;123;0
+WireConnection;130;2;115;0
+WireConnection;135;0;131;0
+WireConnection;135;1;132;0
+WireConnection;133;0;126;0
+WireConnection;133;1;125;0
+WireConnection;133;2;129;0
+WireConnection;133;3;130;0
+WireConnection;134;0;127;0
+WireConnection;134;1;128;0
+WireConnection;152;0;135;0
+WireConnection;152;1;155;0
+WireConnection;154;0;134;0
+WireConnection;154;1;155;0
+WireConnection;153;0;133;0
+WireConnection;153;1;155;0
+WireConnection;136;0;153;0
+WireConnection;138;0;152;0
+WireConnection;137;0;154;0
+WireConnection;144;1;157;0
+WireConnection;142;1;157;0
+WireConnection;140;1;157;0
+WireConnection;149;1;157;0
+WireConnection;147;0;141;0
+WireConnection;147;1;142;0
+WireConnection;146;0;139;0
+WireConnection;146;1;140;0
+WireConnection;145;0;143;0
+WireConnection;145;1;144;0
+WireConnection;11;0;6;0
+WireConnection;11;1;12;0
+WireConnection;18;0;15;0
+WireConnection;148;0;149;0
+WireConnection;148;1;145;0
+WireConnection;148;2;146;0
+WireConnection;148;3;147;0
+WireConnection;16;0;14;0
+WireConnection;7;0;8;0
+WireConnection;7;1;11;0
+WireConnection;26;1;78;0
+WireConnection;19;0;18;0
+WireConnection;19;1;17;0
+WireConnection;19;2;16;0
+WireConnection;150;0;148;0
+WireConnection;4;0;72;0
+WireConnection;4;1;7;0
+WireConnection;23;0;21;0
+WireConnection;23;1;26;2
+WireConnection;22;1;19;0
+WireConnection;43;1;74;0
+WireConnection;37;0;26;1
+WireConnection;37;1;38;0
+WireConnection;46;1;75;0
+WireConnection;44;0;43;4
+WireConnection;44;1;26;2
+WireConnection;55;0;4;0
+WireConnection;55;1;56;0
+WireConnection;158;0;151;0
+WireConnection;158;1;22;0
+WireConnection;158;2;23;0
+WireConnection;70;0;37;0
+WireConnection;70;1;71;0
+WireConnection;70;2;55;0
+WireConnection;52;0;46;4
+WireConnection;52;1;51;0
+WireConnection;47;0;45;0
+WireConnection;47;1;44;0
+WireConnection;159;0;158;0
+WireConnection;159;1;21;0
+WireConnection;9;1;73;0
+WireConnection;53;0;26;3
+WireConnection;53;1;54;0
+WireConnection;156;0;159;0
+WireConnection;156;1;151;0
+WireConnection;49;0;47;0
+WireConnection;49;1;52;0
+WireConnection;10;0;9;0
+WireConnection;10;1;70;0
+WireConnection;50;0;48;0
+WireConnection;50;1;46;0
+WireConnection;83;0;49;0
+WireConnection;86;0;156;0
+WireConnection;85;0;53;0
+WireConnection;79;0;37;0
+WireConnection;81;0;10;0
+WireConnection;84;0;50;0
+WireConnection;0;0;82;0
+WireConnection;0;1;87;0
+WireConnection;0;3;88;0
+WireConnection;0;4;90;0
+WireConnection;0;5;89;0
+WireConnection;0;7;80;0
+ASEEND*/
+//CHKSM=88987B34B8087CB6E197D31CBF383279D1C2130A
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Shader/Skin&Wrinkle_Jin.shader.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Shader/Skin&Wrinkle_Jin.shader.meta
new file mode 100644
index 0000000..6b33b7f
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Shader/Skin&Wrinkle_Jin.shader.meta
@@ -0,0 +1,22 @@
+fileFormatVersion: 2
+guid: e581164ca006851408ab64a0280abd71
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures:
+ - _Normal: {fileID: 2800000, guid: 5f6a88171526ba44b8edd0316d32be0e, type: 3}
+ - _SQZ_M: {fileID: 2800000, guid: 0bde64e6f5a7c7645b626bacac977600, type: 3}
+ - _Wide_M: {fileID: 2800000, guid: 76493984454b03f47a3137acfc5ee3a6, type: 3}
+ - _Wrinkle: {fileID: 2800000, guid: bf18efd814a59c645a89649c222ce5ec, type: 3}
+ - _lip_Sad_M: {fileID: 2800000, guid: b651b3205353cbe4eafef19f8cd4eee6, type: 3}
+ - _Wrinkle_Sad: {fileID: 2800000, guid: e86ced7d9ef006641b3cf8855baf388b, type: 3}
+ - _lip_Smile_M: {fileID: 2800000, guid: 9f79442cfa74a03479bcc9683e287520, type: 3}
+ - _Wrinkle_Smile: {fileID: 2800000, guid: b3054ff6e9f73b243b3cda952fa02424, type: 3}
+ - _DetailSkin_Normal: {fileID: 2800000, guid: 7a4aa691425a0e84996a3a3f3d3ef326,
+ type: 3}
+ - _Mask: {fileID: 2800000, guid: 7bf471a629e3ed640b3ace8997379f80, type: 3}
+ - _DetailSkin_Metalic: {fileID: 2800000, guid: 508aaba794b76264994ff90752435697,
+ type: 3}
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Shader/Wireframe.shader b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Shader/Wireframe.shader
new file mode 100644
index 0000000..bcbe764
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Shader/Wireframe.shader
@@ -0,0 +1,148 @@
+Shader "Custom/Wireframe"
+{
+ Properties
+ {
+ _WireColor("Edges Color", Color) = (0,0,0,1)
+ _WireThickness("Edge Thickness", RANGE(0, 800)) = 100
+ _WireSmoothness("Edge Smoothness", RANGE(0, 20)) = 3
+ _AlbedoColor("Albedo Color", Color) = (1,1,1,1)
+ _MainTex("Albedo (RGB)", 2D) = "white" {}
+
+
+ //_Color ("Color", Color) = (1,1,1,1)
+ //_MainTex ("Albedo (RGB)", 2D) = "white" {}
+ }
+
+
+ SubShader
+ {
+ Tags { "RenderType" = "Opaque" }
+ LOD 200
+
+ Pass
+ {
+ CGPROGRAM
+ // Use shader model 3.0 target, to get nicer looking lighting
+ #pragma target 3.0
+
+ #include "UnityCG.cginc"
+
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma geometry geom
+
+ uniform sampler2D _MainTex;
+ uniform float4 _MainTex_ST;
+
+ struct Input
+ {
+ float2 uv_MainTex;
+ };
+
+ fixed4 _WireColor;
+ fixed4 _AlbedoColor;
+
+ uniform float _WireThickness;
+ uniform float _WireSmoothness;
+
+ struct appdata
+ {
+ float4 vertex : POSITION;
+ float2 texcoord0 : TEXCOORD0;
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ };
+
+ struct v2g
+ {
+ float4 projSpaceVertex : SV_POSITION;
+ float2 uv0 : TEXCOORD0;
+ float4 worldSpacePosition : TEXCOORD1;
+ UNITY_VERTEX_OUTPUT_STEREO
+ };
+
+ struct g2f
+ {
+ float4 projSpaceVertex : SV_POSITION;
+ float2 uv0 : TEXCOORD0;
+ float4 worldSpacePosition : TEXCOORD1;
+ float4 dist : TEXCOORD2;
+ UNITY_VERTEX_OUTPUT_STEREO
+ };
+
+ v2g vert(appdata v)
+ {
+ v2g o;
+ UNITY_SETUP_INSTANCE_ID(v);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
+ o.projSpaceVertex = UnityObjectToClipPos(v.vertex);
+ o.worldSpacePosition = mul(unity_ObjectToWorld, v.vertex);
+ o.uv0 = TRANSFORM_TEX(v.texcoord0, _MainTex);
+ return o;
+ }
+
+
+ [maxvertexcount(3)]
+ void geom(triangle v2g i[3], inout TriangleStream triangleStream)
+ {
+ float2 p0 = i[0].projSpaceVertex.xy / i[0].projSpaceVertex.w;
+ float2 p1 = i[1].projSpaceVertex.xy / i[1].projSpaceVertex.w;
+ float2 p2 = i[2].projSpaceVertex.xy / i[2].projSpaceVertex.w;
+
+ float2 edge0 = p2 - p1;
+ float2 edge1 = p2 - p0;
+ float2 edge2 = p1 - p0;
+
+ float area = abs(edge1.x * edge2.y - edge1.y * edge2.x);
+ float wireThickness = 800 - _WireThickness;
+
+ g2f o;
+
+ o.uv0 = i[0].uv0;
+ o.worldSpacePosition = i[0].worldSpacePosition;
+ o.projSpaceVertex = i[0].projSpaceVertex;
+ o.dist.xyz = float3((area / length(edge0)), 0.0, 0.0) * o.projSpaceVertex.w * wireThickness;
+ o.dist.w = 1.0 / o.projSpaceVertex.w;
+ UNITY_TRANSFER_VERTEX_OUTPUT_STEREO(i[0], o);
+ triangleStream.Append(o);
+
+ o.uv0 = i[1].uv0;
+ o.worldSpacePosition = i[1].worldSpacePosition;
+ o.projSpaceVertex = i[1].projSpaceVertex;
+ o.dist.xyz = float3(0.0, (area / length(edge1)), 0.0) * o.projSpaceVertex.w * wireThickness;
+ o.dist.w = 1.0 / o.projSpaceVertex.w;
+ UNITY_TRANSFER_VERTEX_OUTPUT_STEREO(i[1], o);
+ triangleStream.Append(o);
+
+ o.uv0 = i[2].uv0;
+ o.worldSpacePosition = i[2].worldSpacePosition;
+ o.projSpaceVertex = i[2].projSpaceVertex;
+ o.dist.xyz = float3(0.0, 0.0, (area / length(edge2))) * o.projSpaceVertex.w * wireThickness;
+ o.dist.w = 1.0 / o.projSpaceVertex.w;
+ UNITY_TRANSFER_VERTEX_OUTPUT_STEREO(i[2], o);
+ triangleStream.Append(o);
+ }
+
+ fixed4 frag(g2f i) : SV_Target
+ {
+ float minDistanceToEdge = min(i.dist[0], min(i.dist[1], i.dist[2])) * i.dist[3];
+
+ float4 baseColor = _AlbedoColor * tex2D(_MainTex, i.uv0);
+
+ // Early out if we know we are not on a line segment.
+ if (minDistanceToEdge > 0.9)
+ {
+ return fixed4(baseColor.rgb,0);
+ }
+
+ // Smooth our line out
+ float t = exp2(_WireSmoothness * -1.0 * minDistanceToEdge * minDistanceToEdge);
+ fixed4 finalColor = lerp(baseColor, _WireColor, t);
+ finalColor.a = t;
+
+ return finalColor;
+ }
+ ENDCG
+ }
+ }
+FallBack "Diffuse"
+}
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Shader/Wireframe.shader.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Shader/Wireframe.shader.meta
new file mode 100644
index 0000000..42a2e0e
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Samples~/Shader/Wireframe.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 2a6a855fbef71e745a2f55a929d8f30f
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Scripts.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Scripts.meta
new file mode 100644
index 0000000..c5de4d4
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Scripts.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a49f13dd5640c8d4e89b897d41545ac2
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Scripts/FacialManager.cs b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Scripts/FacialManager.cs
new file mode 100644
index 0000000..a411dfd
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Scripts/FacialManager.cs
@@ -0,0 +1,216 @@
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.XR.OpenXR;
+using System;
+namespace VIVE.FacialTracking
+{
+ public class FacialManager
+ {
+ private class FacialData
+ {
+ public bool isStarted = false;
+ public XrFacialTrackingTypeHTC trackingType;
+ public bool isActive;
+ public ulong trackerHandle;
+ public int updatedFrame = -1;
+ public Dictionary eyeWeightings = new Dictionary();
+ public Dictionary LipWeightings = new Dictionary();
+ public float[] blendshapes;
+ public bool isCreated { get { return trackerHandle != default; } }
+ public FacialData(XrFacialTrackingTypeHTC type)
+ {
+ trackingType = type;
+ for (int i = 0; i < (int)XrEyeShapeHTC.XR_EYE_EXPRESSION_MAX_ENUM_HTC; ++i) eyeWeightings.Add((XrEyeShapeHTC)i, 0.0f);
+ for (int i = 0; i < (int)XrLipShapeHTC.XR_LIP_SHAPE_MAX_ENUM_HTC; ++i) LipWeightings.Add((XrLipShapeHTC)i, 0.0f);
+ int shapeSize = type == XrFacialTrackingTypeHTC.XR_FACIAL_TRACKING_TYPE_EYE_DEFAULT_HTC
+ ? (int)XrEyeShapeHTC.XR_EYE_EXPRESSION_MAX_ENUM_HTC : (int)XrLipShapeHTC.XR_LIP_SHAPE_MAX_ENUM_HTC;
+ blendshapes = new float[shapeSize];
+ }
+ public void ClearData()
+ {
+ Array.Clear(blendshapes, 0, blendshapes.Length);
+ eyeWeightings.Clear();
+ LipWeightings.Clear();
+ }
+ }
+
+ private FacialData eyeFacialData = new FacialData(XrFacialTrackingTypeHTC.XR_FACIAL_TRACKING_TYPE_EYE_DEFAULT_HTC);
+ private FacialData lipFacialData = new FacialData(XrFacialTrackingTypeHTC.XR_FACIAL_TRACKING_TYPE_LIP_DEFAULT_HTC);
+ private VIVE_FacialTracking_OpenXR_API feature;
+ private static bool isInitialized;
+ private static bool isSystemSupportEye;
+ private static bool isSystemSupportLip;
+
+ private FacialData getFacialData(XrFacialTrackingTypeHTC type)
+ {
+ if (type == XrFacialTrackingTypeHTC.XR_FACIAL_TRACKING_TYPE_EYE_DEFAULT_HTC)
+ return eyeFacialData;
+ else
+ return lipFacialData;
+ }
+
+ private void OnFeatureSessionCreate(ulong xrSession)
+ {
+ TryCreateFacialTracker(eyeFacialData);
+ TryCreateFacialTracker(lipFacialData);
+ }
+ private void OnFeatureSessionDestroy(ulong xrSession)
+ {
+ TryDestroyFacialTracker(eyeFacialData);
+ TryDestroyFacialTracker(lipFacialData);
+ }
+
+ private void OnFeatureSystemChange(ulong systemId)
+ {
+ UpdateSystemSupported();
+ }
+
+ private void UpdateSystemSupported()
+ {
+ if (feature == null || !feature.IsEnabledAndInitialized)
+ {
+ isSystemSupportEye = false;
+ isSystemSupportLip = false;
+ }
+ else
+ {
+ feature.SystemSupportsFacialTracking(out var result,out isSystemSupportEye,out isSystemSupportLip);
+ if (result != XrResult.XR_SUCCESS)
+ {
+ Debug.LogWarning("Fail SystemSupportsHandTracking: " + result);
+ }
+ if (!isSystemSupportEye)
+ {
+ UnityEngine.Debug.Log("Initial eyetracking failed , the device may not support EyeExpression");
+ }
+ if (!isSystemSupportLip)
+ {
+ UnityEngine.Debug.Log("Initial liptracking failed , the device may not support LipExpression");
+ }
+ }
+ }
+
+
+ public bool Initialize()
+ {
+ if(feature == null)
+ feature = OpenXRSettings.Instance.GetFeature();
+ if (!isInitialized)
+ {
+ if (feature != null)
+ {
+ feature.onSessionCreate += OnFeatureSessionCreate;
+ feature.onSessionDestroy += OnFeatureSessionDestroy;
+ feature.onSystemChange += OnFeatureSystemChange;
+ }
+ if (feature != null && feature.IsEnabledAndInitialized)
+ {
+ UpdateSystemSupported();
+ isInitialized = true;
+ }
+ }
+
+ return isInitialized;
+ }
+ private bool TryCreateFacialTracker(FacialData facialData)
+ {
+ if (!facialData.isStarted) return false;
+ if (!Initialize()) { return false; }
+ if (facialData.trackingType == XrFacialTrackingTypeHTC.XR_FACIAL_TRACKING_TYPE_EYE_DEFAULT_HTC && !isSystemSupportEye) { return false; }
+ if (facialData.trackingType == XrFacialTrackingTypeHTC.XR_FACIAL_TRACKING_TYPE_LIP_DEFAULT_HTC && !isSystemSupportLip) { return false; }
+ if (!feature.IsSessionCreated) { return false; }
+ if (!facialData.isCreated)
+ {
+ if (!feature.TryCreateFacialTracker(facialData.trackingType, out facialData.trackerHandle, out var result))
+ {
+ facialData.trackerHandle = default;
+ Debug.LogWarning("Fail CreateFacialTracker: " + result);
+ }
+ }
+
+ return facialData.isCreated;
+ }
+
+ private void TryDestroyFacialTracker(FacialData facialData)
+ {
+ if (!facialData.isCreated) { return; }
+ if (!Initialize()) { return; }
+
+ if(!feature.TryDestroFacialTracker(facialData.trackerHandle, out var res))
+ {
+ Debug.LogWarning("Fail DestroyFacialTracker: " + res);
+ }
+ else
+ {
+ Debug.Log("Success DestroyFacialTracker: " + res);
+ }
+ facialData.trackerHandle = default;
+ facialData.ClearData();
+ }
+ private void TryGetFacialData(FacialData facialData)
+ {
+ if(facialData.isCreated)
+ {
+ if(facialData.updatedFrame != Time.frameCount)
+ {
+ int maxExpressionCount = facialData.trackingType == XrFacialTrackingTypeHTC.XR_FACIAL_TRACKING_TYPE_EYE_DEFAULT_HTC
+ ? (int)XrEyeShapeHTC.XR_EYE_EXPRESSION_MAX_ENUM_HTC : (int)XrLipShapeHTC.XR_LIP_SHAPE_MAX_ENUM_HTC;
+ facialData.updatedFrame = Time.frameCount;
+ if (!feature.TryGetFacialData(
+ facialData.trackerHandle,
+ out facialData.isActive,
+ maxExpressionCount,
+ out var result,
+ facialData.blendshapes))
+ {
+ facialData.isActive = false;
+ Debug.LogWarning("Fail TryGetFacialData: " + result);
+ }
+ }
+
+ }
+
+ }
+ public void StartFramework(XrFacialTrackingTypeHTC type)
+ {
+ var facialdata = getFacialData(type);
+ facialdata.isStarted = true;
+ TryCreateFacialTracker(facialdata);
+ }
+ public void StopFramework(XrFacialTrackingTypeHTC type)
+ {
+ var facialdata = getFacialData(type);
+ facialdata.isStarted = false;
+ TryDestroyFacialTracker(facialdata);
+ }
+ public bool GetWeightings(out Dictionary shapes)
+ {
+ if (typeof(T) == typeof(XrEyeShapeHTC))
+ {
+ TryGetFacialData(eyeFacialData);
+ for (int i = 0; i < (int)XrEyeShapeHTC.XR_EYE_EXPRESSION_MAX_ENUM_HTC; ++i)
+ {
+ eyeFacialData.eyeWeightings[(XrEyeShapeHTC)i] = eyeFacialData.blendshapes[i];
+ }
+ shapes = (Dictionary)(System.Object)(eyeFacialData.eyeWeightings);
+ return true;
+ }
+ else if (typeof(T) == typeof(XrLipShapeHTC))
+ {
+ TryGetFacialData(lipFacialData);
+ for (int i = 0; i < (int)XrLipShapeHTC.XR_LIP_SHAPE_MAX_ENUM_HTC; ++i)
+ {
+ lipFacialData.LipWeightings[(XrLipShapeHTC)i] = lipFacialData.blendshapes[i];
+ }
+ shapes = (Dictionary)(System.Object)(lipFacialData.LipWeightings);
+ return true;
+ }
+ else
+ {
+ shapes = default;
+ return false;
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Scripts/FacialManager.cs.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Scripts/FacialManager.cs.meta
new file mode 100644
index 0000000..bd82759
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Scripts/FacialManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b9da6a2c254e9354891b5ab88cd630f0
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Scripts/VIVE_FacialTracking_OpenXR_API.cs b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Scripts/VIVE_FacialTracking_OpenXR_API.cs
new file mode 100644
index 0000000..c02d0d4
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Scripts/VIVE_FacialTracking_OpenXR_API.cs
@@ -0,0 +1,192 @@
+using System;
+using System.Runtime.InteropServices;
+using UnityEditor;
+using UnityEngine.XR.OpenXR.Features;
+#if UNITY_EDITOR
+using UnityEditor.XR.OpenXR.Features;
+#endif
+namespace VIVE
+{
+ namespace FacialTracking
+ {
+
+#if UNITY_EDITOR
+ [OpenXRFeature(UiName = "Facial Tracking",
+ BuildTargetGroups = new[] { BuildTargetGroup.Standalone },
+ Company = "HTC",
+ Desc = "Facial Tracking OpenXR Feature",
+ DocumentationLink = "https://developer.vive.com/resources/openxr/openxr-pcvr/tutorials/unity/integrate-facial-tracking-your-avatar/",
+ OpenxrExtensionStrings = "XR_HTC_facial_tracking",
+ Version = "0.0.1",
+ FeatureId = featureId)]
+#endif
+ public class VIVE_FacialTracking_OpenXR_API : OpenXRFeature
+ {
+ ///
+ /// The feature id string. This is used to give the feature a well known id for reference.
+ ///
+ public const string featureId = "com.htc.openxr.facialtracking.feature";
+ private ulong m_XrInstance;
+ private ulong m_XrSession;
+ private ulong m_systemid;
+ [Obsolete] XrSystemProperties systemProperties;
+ [Obsolete] public ulong m_expressionHandle;
+ [Obsolete] public ulong m_expressionHandle_Lip;
+
+ public bool IsInitialized { get { return m_xrGetSystemProperties != null; } }
+ public bool IsEnabledAndInitialized { get { return enabled && IsInitialized; } }
+ public bool IsSessionCreated { get { return XrSession != default; } }
+ public ulong XrInstance { get { return m_XrInstance; } }
+ public ulong XrSession { get { return m_XrSession; } }
+ public ulong SystemId { get { return m_systemid; } }
+
+ public event Action onSessionCreate;
+ public event Action onSessionDestroy;
+ public event Action onSystemChange;
+
+ ///
+ protected override bool OnInstanceCreate(ulong xrInstance)
+ {
+ UnityEngine.Debug.Log($"OnInstanceCreate({xrInstance:X})");
+ m_XrInstance = xrInstance;
+
+ return GetXrFunctionDelegates(xrInstance);
+ }
+
+ ///
+ protected override void OnInstanceDestroy(ulong xrInstance)
+ {
+ UnityEngine.Debug.Log($"OnInstanceDestroy({xrInstance:X})");
+ m_XrInstance = default;
+ }
+ protected override void OnSessionCreate(ulong xrSession)
+ {
+ UnityEngine.Debug.Log($"OnSessionCreate({xrSession:X})");
+ m_XrSession = xrSession;
+
+ try { onSessionCreate?.Invoke(xrSession); }
+ catch (Exception e) { UnityEngine.Debug.LogError(e); }
+ }
+ protected override void OnSystemChange(ulong xrSystem)
+ {
+ UnityEngine.Debug.Log($"OnSystemChange({xrSystem:X})");
+ m_systemid = xrSystem;
+
+ try { onSystemChange?.Invoke(xrSystem); }
+ catch (Exception e) { UnityEngine.Debug.LogError(e); }
+ }
+
+ protected override void OnSessionDestroy(ulong xrSession)
+ {
+ UnityEngine.Debug.Log($"OnSessionDestroy({xrSession:X})");
+ m_XrSession = default;
+ try { onSessionDestroy?.Invoke(xrSession); }
+ catch (Exception e) { UnityEngine.Debug.LogError(e); }
+ }
+
+ private bool GetXrFunctionDelegates(ulong xrInstance)
+ {
+ if (xrGetInstanceProcAddr == null || xrGetInstanceProcAddr == IntPtr.Zero)
+ UnityEngine.Debug.LogError("xrGetInstanceProcAddr is null");
+ // Get delegate of xrGetInstanceProcAddr.
+ var xrGetProc = Marshal.GetDelegateForFunctionPointer(xrGetInstanceProcAddr);
+ // Get delegate of other OpenXR functions using xrGetInstanceProcAddr.
+ if (!MarshelFunc(xrInstance, xrGetProc, "xrGetSystemProperties", ref m_xrGetSystemProperties)) { return false; }
+ if (!MarshelFunc(xrInstance, xrGetProc, "xrCreateFacialTrackerHTC", ref m_xrCreateFacialTrackerHTC)) { return false; }
+ if (!MarshelFunc(xrInstance, xrGetProc, "xrDestroyFacialTrackerHTC", ref m_xrDestroyFacialTrackerHTC)) { return false; }
+ if (!MarshelFunc(xrInstance, xrGetProc, "xrGetFacialExpressionsHTC", ref m_xrGetFacialExpressionsHTC)) { return false; }
+ return true;
+ }
+ private static bool MarshelFunc(ulong instance, xrGetInstanceProcDelegate instanceProc, string funcName, ref T func, bool verbose = true)
+ where T : Delegate
+ {
+ if (instanceProc(instance, funcName, out var fp) != 0)
+ {
+ if (verbose)
+ {
+ UnityEngine.Debug.LogError("Fail getting function " + funcName);
+ }
+ return false;
+ }
+
+ func = Marshal.GetDelegateForFunctionPointer(fp);
+ return true;
+ }
+ delegate int XrGetInstanceProcAddrDelegate(ulong instance, string name, out IntPtr function);
+ XrGetInstanceProcAddrDelegate m_XrGetInstanceProcAddr;
+
+ delegate int xrGetSystemPropertiesDelegate(ulong instance, ulong systemId, ref XrSystemProperties properties);
+ xrGetSystemPropertiesDelegate m_xrGetSystemProperties;
+ public int xrGetSystemProperties(ref XrSystemProperties properties) =>
+ m_xrGetSystemProperties(m_XrInstance, m_systemid, ref properties);
+ public int xrGetSystemProperties(ulong instance, ulong systemId, ref XrSystemProperties properties) =>
+ m_xrGetSystemProperties(instance, systemId, ref properties);
+
+ delegate int xrCreateFacialTrackerHTCDelegate(ulong session, XrFacialTrackerCreateInfoHTC createInfo, out ulong expression);
+ xrCreateFacialTrackerHTCDelegate m_xrCreateFacialTrackerHTC;
+ public int xrCreateFacialTrackerHTC(XrFacialTrackerCreateInfoHTC createInfo ,out ulong handle) =>
+ m_xrCreateFacialTrackerHTC(m_XrSession, createInfo, out handle);
+ public int xrCreateFacialTrackerHTC(ulong session, XrFacialTrackerCreateInfoHTC createInfo, out ulong handle) =>
+ m_xrCreateFacialTrackerHTC(session, createInfo, out handle);
+
+ delegate int xrDestroyFacialTrackerHTCDelegate(ulong facialTracker);
+ xrDestroyFacialTrackerHTCDelegate m_xrDestroyFacialTrackerHTC;
+ public int xrDestroyFacialTrackerHTC(ulong handle) =>
+ m_xrDestroyFacialTrackerHTC(handle);
+
+ delegate int xrGetFacialExpressionsHTCDelegate(ulong facialTracker, ref XrFacialExpressionsHTC eyeExpressionData);
+ xrGetFacialExpressionsHTCDelegate m_xrGetFacialExpressionsHTC;
+ public int xrGetFacialExpressionsHTC(ulong handle,ref XrFacialExpressionsHTC eyeExpressionData) =>
+ m_xrGetFacialExpressionsHTC(handle, ref eyeExpressionData);
+
+ public unsafe void SystemSupportsFacialTracking(out XrResult result,out bool isSupportEye,out bool isSupportLip)
+ {
+ XrSystemFacialTrackingPropertiesHTC expressionProperties = new XrSystemFacialTrackingPropertiesHTC
+ {
+ type = XrStructureType.XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC,
+ next = IntPtr.Zero,
+ };
+
+ var systemProp = new XrSystemProperties()
+ {
+ type = XrStructureType.XR_TYPE_SYSTEM_PROPERTIES,
+ next = (IntPtr)(&expressionProperties),
+ };
+ result = (XrResult)xrGetSystemProperties(XrInstance, SystemId ,ref systemProp);
+ isSupportEye = expressionProperties.supportEyeFacialTracking != 0;
+ isSupportLip = expressionProperties.supportLipFacialTracking != 0;
+ }
+
+ public bool TryCreateFacialTracker(XrFacialTrackingTypeHTC type,out ulong handle, out XrResult result)
+ {
+ XrFacialTrackerCreateInfoHTC createInfo = new XrFacialTrackerCreateInfoHTC(
+ XrStructureType.XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC,
+ IntPtr.Zero,
+ type);
+ result = (XrResult)xrCreateFacialTrackerHTC(XrSession,createInfo, out handle);
+ return result == XrResult.XR_SUCCESS;
+ }
+ public bool TryDestroFacialTracker(ulong handle, out XrResult result)
+ {
+ result= (XrResult)xrDestroyFacialTrackerHTC(handle);
+ return result == XrResult.XR_SUCCESS;
+ }
+ public bool TryGetFacialData(ulong handle,out bool isActive,int maxExpressioncount,out XrResult result,float[] blendshapes)
+ {
+ XrFacialExpressionsHTC facialExpression = new XrFacialExpressionsHTC()
+ {
+ type = XrStructureType.XR_TYPE_FACIAL_EXPRESSIONS_HTC,
+ expressionCount = maxExpressioncount,
+ sampleTime = 10L, //An arbitrary number greater than 0
+ blendShapeWeightings = Marshal.AllocCoTaskMem(sizeof(float) * maxExpressioncount),
+ };
+ result = (XrResult)xrGetFacialExpressionsHTC(handle, ref facialExpression);
+
+ Marshal.Copy(facialExpression.blendShapeWeightings, blendshapes, 0, maxExpressioncount);
+ isActive = facialExpression.isActive != 0u;
+
+ return result == XrResult.XR_SUCCESS;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRFacialTracking/Scripts/VIVE_FacialTracking_OpenXR_API.cs.meta b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Scripts/VIVE_FacialTracking_OpenXR_API.cs.meta
new file mode 100644
index 0000000..b90a626
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFacialTracking/Scripts/VIVE_FacialTracking_OpenXR_API.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: be5cb237345f49840bbc00c128fde3d9
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFocus3Controller.meta b/com.htc.upm.vive.openxr/OpenXRFocus3Controller.meta
new file mode 100644
index 0000000..b08e78f
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFocus3Controller.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b82495a07a589504fa93324ca990a306
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFocus3Controller/Runtime.meta b/com.htc.upm.vive.openxr/OpenXRFocus3Controller/Runtime.meta
new file mode 100644
index 0000000..01f34c0
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFocus3Controller/Runtime.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0421eee005d6f0b438c7c21177d3d8a0
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFocus3Controller/Runtime/input.meta b/com.htc.upm.vive.openxr/OpenXRFocus3Controller/Runtime/input.meta
new file mode 100644
index 0000000..9752d3f
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFocus3Controller/Runtime/input.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 126e3d3abfa171b47aeb79e1a84c8a71
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFocus3Controller/Runtime/input/Features.meta b/com.htc.upm.vive.openxr/OpenXRFocus3Controller/Runtime/input/Features.meta
new file mode 100644
index 0000000..88a36b4
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFocus3Controller/Runtime/input/Features.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e4f01d0112cf24f43a73dae4a96e1d45
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRFocus3Controller/Runtime/input/Features/HtcViveFocus3InputFeature.cs b/com.htc.upm.vive.openxr/OpenXRFocus3Controller/Runtime/input/Features/HtcViveFocus3InputFeature.cs
new file mode 100644
index 0000000..f5303cd
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFocus3Controller/Runtime/input/Features/HtcViveFocus3InputFeature.cs
@@ -0,0 +1,677 @@
+using System.Collections.Generic;
+using UnityEngine.InputSystem.XR;
+using UnityEngine.InputSystem.Layouts;
+using UnityEngine.InputSystem.Controls;
+using UnityEngine.Scripting;
+using UnityEngine.XR.OpenXR.Features.Interactions;
+using UnityEngine.XR.OpenXR.Input;
+#if UNITY_EDITOR
+using UnityEditor;
+#endif
+
+using PoseControl = UnityEngine.XR.OpenXR.Input.PoseControl;
+
+namespace UnityEngine.XR.OpenXR.Features
+{
+ ///
+ /// This enables the use of HTC Vive Focus3 Controllers interaction profiles in OpenXR.
+ ///
+#if UNITY_EDITOR
+ [UnityEditor.XR.OpenXR.Features.OpenXRFeature(UiName = "HTC Vive Focus3 Controller Support",
+ BuildTargetGroups = new[] { BuildTargetGroup.Standalone, BuildTargetGroup.WSA },
+ Company = "HTC",
+ Desc = "Allows for mapping input to the HTC Vive Focus3 Controller interaction profile.",
+ //DocumentationLink = "https://developer.vive.com/resources/openxr/openxr-pcvr/tutorials/unity/cosmos-controller-openxr-feature-unity/",
+ OpenxrExtensionStrings = "XR_HTC_vive_focus3_controller_interaction XR_EXT_palm_pose",
+ Version = "0.0.2",
+ Category = UnityEditor.XR.OpenXR.Features.FeatureCategory.Interaction,
+ FeatureId = featureId)]
+#endif
+ public class HtcViveFocus3InputFeature : OpenXRInteractionFeature
+ {
+ ///
+ /// The feature id string. This is used to give the feature a well known id for reference.
+ ///
+ public const string featureId = "com.htc.openxr.feature.input.htcvivefocus3";
+
+ ///
+ /// An Input System device based off the HTC Vive Controller.
+ ///
+ ///
+ [Preserve, InputControlLayout(displayName = "HTC Vive Focus3 Controller (OpenXR)", commonUsages = new[] { "LeftHand", "RightHand" })]
+ public class ViveFocus3Controller : XRControllerWithRumble
+ {
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "thumbresttouch" })]
+ public ButtonControl thumbrestTouched { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "griptouch" })]
+ public ButtonControl gripTouched { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "GripAxis" })]
+ public AxisControl grip { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "GripButton" })]
+ public ButtonControl gripPressed { get; private set; }
+
+ ///
+ /// A representing the OpenXR bindings, depending on handedness.
+ ///
+ [Preserve, InputControl(aliases = new[] { "B", "Y" })]
+ public ButtonControl secondaryButton { get; private set; }
+
+ ///
+ /// A representing the OpenXR bindings, depending on handedness.
+ ///
+ [Preserve, InputControl(aliases = new[] { "A", "X" })]
+ public ButtonControl primaryButton { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "Primary", "menubutton" })]
+ public ButtonControl menu { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "triggertouch" })]
+ public ButtonControl triggerTouched { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "triggeraxis" })]
+ public AxisControl trigger { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "triggerbutton" })]
+ public ButtonControl triggerPressed { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "Primary2DAxis", "joystickaxes" })]
+ public Vector2Control joystick { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "joystickorpadpressed", "joystickpressed" })]
+ public ButtonControl joystickClicked { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "joystickorpadtouched", "joysticktouched" })]
+ public ButtonControl joystickTouched { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(offset = 0, alias = "device")]
+ public PoseControl devicePose { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(offset = 0)]
+ public PoseControl pointer { get; private set; }
+
+ ///
+ /// A required for back compatibility with the XRSDK layouts. this represents the overall tracking state of the device. this value is equivalent to mapping devicePose/isTracked
+ ///
+ [Preserve, InputControl(offset = 28)]
+ new public ButtonControl isTracked { get; private set; }
+
+ ///
+ /// A required for back compatibility with the XRSDK layouts. this represents the bit flag set indicating what data is valid. this value is equivalent to mapping devicePose/trackingState
+ ///
+ [Preserve, InputControl(offset = 32)]
+ new public IntegerControl trackingState { get; private set; }
+
+ ///
+ /// A required for back compatibility with the XRSDK layouts. this is the device position, or grip position. this value is equivalent to mapping devicePose/position
+ ///
+ [Preserve, InputControl(offset = 36, aliases = new[] { "gripPosition" })]
+ new public Vector3Control devicePosition { get; private set; }
+
+ ///
+ /// A required for back compatibility with the XRSDK layouts. this is the device orientation, or grip orientation. this value is equivalent to mapping devicePose/rotation
+ ///
+ [Preserve, InputControl(offset = 48, aliases = new[] { "gripOrientation", "gripRotation" })]
+ new public QuaternionControl deviceRotation { get; private set; }
+
+ /// A required for back compatibility with the XRSDK layouts. this is the pointer position. this value is equivalent to mapping pointerPose/position
+ ///
+ [Preserve, InputControl(offset = 96)]
+ public Vector3Control pointerPosition { get; private set; }
+
+ ///
+ /// A required for back compatibility with the XRSDK layouts. this is the pointer rotation. this value is equivalent to mapping pointerPose/rotation
+ ///
+ [Preserve, InputControl(offset = 108, aliases = new[] { "pointerOrientation" })]
+ public QuaternionControl pointerRotation { get; private set; }
+
+ ///
+ /// A that represents the binding.
+ ///
+ [Preserve, InputControl(usage = "Haptic")]
+ public HapticControl haptic { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl()]
+ public PoseControl palm { get; private set; }
+
+
+ protected override void FinishSetup()
+ {
+ base.FinishSetup();
+ thumbrestTouched = GetChildControl("thumbrestTouched");
+ gripTouched = GetChildControl("gripTouched");
+ grip = GetChildControl("grip");
+ gripPressed = GetChildControl("gripPressed");
+ primaryButton = GetChildControl("primaryButton");
+ secondaryButton = GetChildControl("secondaryButton");
+ menu = GetChildControl("menu");
+ trigger = GetChildControl("trigger");
+ triggerTouched = GetChildControl("triggerTouched");
+ triggerPressed = GetChildControl("triggerPressed");
+ joystick = GetChildControl("joystick");
+ joystickClicked = GetChildControl("joystickClicked");
+ joystickTouched = GetChildControl("joystickTouched");
+
+ devicePose = GetChildControl("devicePose");
+ pointer = GetChildControl("pointer");
+
+ isTracked = GetChildControl("isTracked");
+ trackingState = GetChildControl("trackingState");
+ devicePosition = GetChildControl("devicePosition");
+ deviceRotation = GetChildControl("deviceRotation");
+ pointerPosition = GetChildControl("pointerPosition");
+ pointerRotation = GetChildControl("pointerRotation");
+ haptic = GetChildControl("haptic");
+ palm = GetChildControl("palm");
+ }
+ }
+ /// The interaction profile string used to reference the HTC Vive Focus3 Controller.
+ public const string profile = "/interaction_profiles/htc/vive_focus3_controller";
+
+ ///
+ /// Constant for a interaction binding '.../input/trigger/click' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string select = "/input/trigger/click";
+
+ ///
+ /// Constant for a interaction binding '.../input/a/click' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string a = "/input/a/click";
+
+ ///
+ /// Constant for a interaction binding '.../input/b/click' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string b = "/input/b/click";
+
+ ///
+ /// Constant for a interaction binding '.../input/x/click' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string x = "/input/x/click";
+
+ ///
+ /// Constant for a interaction binding '.../input/y/click' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string y = "/input/y/click";
+
+ ///
+ /// Constant for a interaction binding '.../input/squeeze/click' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string squeeze = "/input/squeeze/value";
+ ///
+ /// Constant for a interaction binding '.../input/squeeze/touch' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string squeezeTouch = "/input/squeeze/touch";
+ ///
+ /// Constant for a interaction binding '.../input/squeeze/click' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string squeezeClick = "/input/squeeze/click";
+ ///
+ /// Constant for a interaction binding '.../input/menu/click' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string menu = "/input/menu/click";
+ ///
+ /// Constant for a interaction binding '.../input/trigger/touch' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string triggerTouch = "/input/trigger/touch";
+ ///
+ /// Constant for a interaction binding '.../input/trigger/value' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string trigger = "/input/trigger/value";
+ ///
+ /// Constant for a interaction binding '.../input/trigger/click' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string triggerClick = "/input/trigger/click";
+ ///
+ /// Constant for a interaction binding '.../input/trackpad' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string thumbstick = "/input/thumbstick";
+ ///
+ /// Constant for a interaction binding '.../input/trackpad/click' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string thumbstickClick = "/input/thumbstick/click";
+ ///
+ /// Constant for a interaction binding '.../input/trackpad/touch' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string thumbstickTouch = "/input/thumbstick/touch";
+ ///
+ /// Constant for a interaction binding '.../input/grip/pose' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string grip = "/input/grip/pose";
+ ///
+ /// Constant for a interaction binding '.../input/aim/pose' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string aim = "/input/aim/pose";
+ ///
+ /// Constant for a interaction binding '.../output/haptic' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string haptic = "/output/haptic";
+
+ ///
+ /// Constant for a interaction binding '.../input/palm_ext/pose' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string palm = "/input/palm_ext/pose";
+
+ ///
+ /// Constant for a interaction binding '.../input/thumbrest/touch' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string thumbrest = "/input/thumbrest/touch";
+
+ private const string kDeviceLocalizedName = "HTC Vive Focus3 Controller OpenXR";
+ ///
+ /// Registers the layout with the Input System. Matches the that is registered with .
+ ///
+
+ protected override void RegisterDeviceLayout()
+ {
+ InputSystem.InputSystem.RegisterLayout(typeof(ViveFocus3Controller),
+ matches: new InputDeviceMatcher()
+ .WithInterface(XRUtilities.InterfaceMatchAnyVersion)
+ .WithProduct(kDeviceLocalizedName));
+ }
+
+
+ ///
+ /// Removes the layout from the Input System. Matches the that is registered with .
+ ///
+ protected override void UnregisterDeviceLayout()
+ {
+ InputSystem.InputSystem.RemoveLayout(typeof(ViveFocus3Controller).Name);
+ }
+
+ ///
+ /// Registers an with OpenXR that matches the HTC Vive Focus3 Controller. Also calls when the Input System package is available.
+ ///
+ protected override void RegisterActionMapsWithRuntime()
+ {
+ ActionMapConfig actionMap = new ActionMapConfig()
+ {
+ name = "vivefocus3controller",
+ localizedName = kDeviceLocalizedName,
+ desiredInteractionProfile = profile,
+ manufacturer = "HTC",
+ serialNumber = "",
+ deviceInfos = new List()
+ {
+ new DeviceConfig()
+ {
+ characteristics = (InputDeviceCharacteristics)(InputDeviceCharacteristics.HeldInHand | InputDeviceCharacteristics.TrackedDevice | InputDeviceCharacteristics.Controller | InputDeviceCharacteristics.Left),
+ userPath = UserPaths.leftHand
+ },
+ new DeviceConfig()
+ {
+ characteristics = (InputDeviceCharacteristics)(InputDeviceCharacteristics.HeldInHand | InputDeviceCharacteristics.TrackedDevice | InputDeviceCharacteristics.Controller | InputDeviceCharacteristics.Right),
+ userPath = UserPaths.rightHand
+ }
+ },
+ actions = new List()
+ {
+ new ActionConfig()
+ {
+ name = "primarybutton",
+ localizedName = "Primary Button",
+ type = ActionType.Binary,
+ usages = new List()
+ {
+ "PrimaryButton"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = x,
+ interactionProfileName = profile,
+ userPaths = new List() { UserPaths.leftHand }
+ },
+ new ActionBinding()
+ {
+ interactionPath = a,
+ interactionProfileName = profile,
+ userPaths = new List() { UserPaths.rightHand }
+ },
+ }
+ },
+ new ActionConfig()
+ {
+ name = "secondarybutton",
+ localizedName = "Secondary Button",
+ type = ActionType.Binary,
+ usages = new List()
+ {
+ "SecondaryButton"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = y,
+ interactionProfileName = profile,
+ userPaths = new List() { UserPaths.leftHand }
+ },
+ new ActionBinding()
+ {
+ interactionPath = b,
+ interactionProfileName = profile,
+ userPaths = new List() { UserPaths.rightHand }
+ },
+ }
+ },
+ new ActionConfig()
+ {
+ name = "thumbrestTouched",
+ localizedName = "Thumbrest Touched",
+ type = ActionType.Binary,
+ usages = new List()
+ {
+ "ThumbrestTouch",
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = thumbrest,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "grip",
+ localizedName = "Grip",
+ type = ActionType.Axis1D,
+ usages = new List()
+ {
+ "Grip"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = squeeze,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "gripTouched",
+ localizedName = "Grip Touched",
+ type = ActionType.Binary,
+ usages = new List()
+ {
+ "GripTouch",
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = squeezeTouch,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "grippressed",
+ localizedName = "Grip Pressed",
+ type = ActionType.Binary,
+ usages = new List()
+ {
+ "GripPressed",
+ "GripButton"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = squeezeClick,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "menu",
+ localizedName = "Menu",
+ type = ActionType.Binary,
+ usages = new List()
+ {
+ "MenuButton"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = menu,
+ interactionProfileName = profile,
+ userPaths = new List() { UserPaths.leftHand }
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "trigger",
+ localizedName = "Trigger",
+ type = ActionType.Axis1D,
+ usages = new List()
+ {
+ "Trigger"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = trigger,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "triggerTouched",
+ localizedName = "TriggerTouched",
+ type = ActionType.Binary,
+ usages = new List()
+ {
+ "TriggerTouch"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = triggerTouch,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "triggerpressed",
+ localizedName = "Trigger Pressed",
+ type = ActionType.Binary,
+ usages = new List()
+ {
+ "TriggerPressed",
+ "TriggerButton"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = triggerClick,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "thumbstick",
+ localizedName = "Thumbstick",
+ type = ActionType.Axis2D,
+ usages = new List()
+ {
+ "Primary2DAxis"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = thumbstick,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "thumbsticktouched",
+ localizedName = "Thumbstick Touched",
+ type = ActionType.Binary,
+ usages = new List()
+ {
+ "Primary2DAxisTouch"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = thumbstickTouch,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "thumbstickclicked",
+ localizedName = "Thumbstick Clicked",
+ type = ActionType.Binary,
+ usages = new List()
+ {
+ "Primary2DAxisClick"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = thumbstickClick,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "devicepose",
+ localizedName = "Device Pose",
+ type = ActionType.Pose,
+ usages = new List()
+ {
+ "Device"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = grip,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "pointer",
+ localizedName = "Pointer Pose",
+ type = ActionType.Pose,
+ usages = new List()
+ {
+ "Pointer"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = aim,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "haptic",
+ localizedName = "Haptic Output",
+ type = ActionType.Vibrate,
+ usages = new List() { "Haptic" },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = haptic,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "palm",
+ localizedName = "Palm Pose",
+ type = ActionType.Pose,
+ usages = new List()
+ {
+ "Palm"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = palm,
+ interactionProfileName = profile,
+ }
+ }
+ }
+ }
+ };
+ AddActionMap(actionMap);
+ }
+ }
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRFocus3Controller/Runtime/input/Features/HtcViveFocus3InputFeature.cs.meta b/com.htc.upm.vive.openxr/OpenXRFocus3Controller/Runtime/input/Features/HtcViveFocus3InputFeature.cs.meta
new file mode 100644
index 0000000..cbe9a62
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRFocus3Controller/Runtime/input/Features/HtcViveFocus3InputFeature.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 03f67eb290fa9f3468b94c84f9f50e84
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandInteractionProfiler.meta b/com.htc.upm.vive.openxr/OpenXRHandInteractionProfiler.meta
new file mode 100644
index 0000000..9096b4e
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandInteractionProfiler.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 9c90cb647e537c84ba07688712190d17
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandInteractionProfiler/Runtime.meta b/com.htc.upm.vive.openxr/OpenXRHandInteractionProfiler/Runtime.meta
new file mode 100644
index 0000000..152285e
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandInteractionProfiler/Runtime.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 9b53493b46f302b45977615867be989e
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandInteractionProfiler/Runtime/input.meta b/com.htc.upm.vive.openxr/OpenXRHandInteractionProfiler/Runtime/input.meta
new file mode 100644
index 0000000..81e3d7f
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandInteractionProfiler/Runtime/input.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a7d87364cc42b1a4692f56baec26a8f3
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandInteractionProfiler/Runtime/input/Features.meta b/com.htc.upm.vive.openxr/OpenXRHandInteractionProfiler/Runtime/input/Features.meta
new file mode 100644
index 0000000..7ac8ccb
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandInteractionProfiler/Runtime/input/Features.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 22ec09192290b7a4fa47af97e8826a6c
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandInteractionProfiler/Runtime/input/Features/HtcViveHandInteractionInputFeature.cs b/com.htc.upm.vive.openxr/OpenXRHandInteractionProfiler/Runtime/input/Features/HtcViveHandInteractionInputFeature.cs
new file mode 100644
index 0000000..56e178b
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandInteractionProfiler/Runtime/input/Features/HtcViveHandInteractionInputFeature.cs
@@ -0,0 +1,264 @@
+using System.Collections.Generic;
+using UnityEngine.InputSystem.XR;
+using UnityEngine.InputSystem.Layouts;
+using UnityEngine.InputSystem.Controls;
+using UnityEngine.Scripting;
+using UnityEngine.XR.OpenXR.Features.Interactions;
+using UnityEngine.XR.OpenXR.Input;
+#if UNITY_EDITOR
+using UnityEditor;
+#endif
+
+using PoseControl = UnityEngine.XR.OpenXR.Input.PoseControl;
+
+namespace UnityEngine.XR.OpenXR.Features
+{
+ ///
+ /// This enables the use of HTC Vive hand interaction profiles in OpenXR.
+ ///
+#if UNITY_EDITOR
+ [UnityEditor.XR.OpenXR.Features.OpenXRFeature(UiName = "HTC Vive hand interaction Support",
+ BuildTargetGroups = new[] { BuildTargetGroup.Standalone, BuildTargetGroup.WSA },
+ Company = "HTC",
+ Desc = "Allows for mapping input to the HTC Vive hand interaction interaction profile.",
+ DocumentationLink = "https://developer.vive.com/resources/openxr/openxr-pcvr/tutorials/unity/hand-interaction-profile/",
+ OpenxrExtensionStrings = "XR_HTC_hand_interaction",
+ Version = "0.0.1",
+ Category = UnityEditor.XR.OpenXR.Features.FeatureCategory.Interaction,
+ FeatureId = featureId)]
+#endif
+ public class HtcViveHandInteractionInputFeature : OpenXRInteractionFeature
+ {
+ ///
+ /// The feature id string. This is used to give the feature a well known id for reference.
+ ///
+ public const string featureId = "com.htc.openxr.feature.input.htcvivehandinteraction";
+
+ ///
+ /// An Input System device based off the HTC Vive Controller.
+ ///
+ ///
+ [Preserve, InputControlLayout(displayName = "HTC Vive hand interaction (OpenXR)", commonUsages = new[] { "LeftHand", "RightHand" })]
+ public class ViveHandInteraction : XRController
+ {
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "GripAxis" })]
+ public AxisControl grip { get; private set; }
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(aliases = new[] { "selectaxis" })]
+ public AxisControl select { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(offset = 0, alias = "device")]
+ public PoseControl devicePose { get; private set; }
+
+ ///
+ /// A representing information from the OpenXR binding.
+ ///
+ [Preserve, InputControl(offset = 0)]
+ public PoseControl pointer { get; private set; }
+
+ ///
+ /// A required for back compatibility with the XRSDK layouts. this represents the overall tracking state of the device. this value is equivalent to mapping devicePose/isTracked
+ ///
+ [Preserve, InputControl(offset = 28)]
+ new public ButtonControl isTracked { get; private set; }
+
+ ///
+ /// A required for back compatibility with the XRSDK layouts. this represents the bit flag set indicating what data is valid. this value is equivalent to mapping devicePose/trackingState
+ ///
+ [Preserve, InputControl(offset = 32)]
+ new public IntegerControl trackingState { get; private set; }
+
+ ///
+ /// A required for back compatibility with the XRSDK layouts. this is the device position, or grip position. this value is equivalent to mapping devicePose/position
+ ///
+ [Preserve, InputControl(offset = 36, aliases = new[] { "gripPosition" })]
+ new public Vector3Control devicePosition { get; private set; }
+
+ ///
+ /// A required for back compatibility with the XRSDK layouts. this is the device orientation, or grip orientation. this value is equivalent to mapping devicePose/rotation
+ ///
+ [Preserve, InputControl(offset = 48, aliases = new[] { "gripOrientation", "gripRotation" })]
+ new public QuaternionControl deviceRotation { get; private set; }
+
+ /// A required for back compatibility with the XRSDK layouts. this is the pointer position. this value is equivalent to mapping pointerPose/position
+ ///
+ [Preserve, InputControl(offset = 96)]
+ public Vector3Control pointerPosition { get; private set; }
+
+ ///
+ /// A required for back compatibility with the XRSDK layouts. this is the pointer rotation. this value is equivalent to mapping pointerPose/rotation
+ ///
+ [Preserve, InputControl(offset = 108, aliases = new[] { "pointerOrientation" })]
+ public QuaternionControl pointerRotation { get; private set; }
+
+ protected override void FinishSetup()
+ {
+ base.FinishSetup();
+ grip = GetChildControl("grip");
+ select = GetChildControl("select");
+
+ devicePose = GetChildControl("devicePose");
+ pointer = GetChildControl("pointer");
+
+ isTracked = GetChildControl("isTracked");
+ trackingState = GetChildControl("trackingState");
+ devicePosition = GetChildControl("devicePosition");
+ deviceRotation = GetChildControl("deviceRotation");
+ pointerPosition = GetChildControl("pointerPosition");
+ pointerRotation = GetChildControl("pointerRotation");
+ }
+ }
+ /// The interaction profile string used to reference the HTC Vive hand interaction.
+ public const string profile = "/interaction_profiles/htc/hand_interaction";
+
+ ///
+ /// Constant for a interaction binding '.../input/squeeze/click' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string squeeze = "/input/squeeze/value";
+ ///
+ /// Constant for a interaction binding '.../input/select/value' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string select = "/input/select/value";
+ ///
+ /// Constant for a interaction binding '.../input/grip/pose' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string grip = "/input/grip/pose";
+ ///
+ /// Constant for a interaction binding '.../input/aim/pose' OpenXR Input Binding. Used by to bind actions to physical inputs.
+ ///
+ public const string aim = "/input/aim/pose";
+
+ private const string kDeviceLocalizedName = "HTC Vive hand interaction OpenXR";
+ ///
+ /// Registers the layout with the Input System. Matches the that is registered with .
+ ///
+ protected override void RegisterDeviceLayout()
+ {
+ InputSystem.InputSystem.RegisterLayout(typeof(ViveHandInteraction),
+ matches: new InputDeviceMatcher()
+ .WithInterface(XRUtilities.InterfaceMatchAnyVersion)
+ .WithProduct(kDeviceLocalizedName));
+ }
+
+
+ ///
+ /// Removes the layout from the Input System. Matches the that is registered with .
+ ///
+ protected override void UnregisterDeviceLayout()
+ {
+ InputSystem.InputSystem.RemoveLayout(typeof(ViveHandInteraction).Name);
+ }
+
+ ///
+ /// Registers an with OpenXR that matches the HTC Vive hand interaction. Also calls when the Input System package is available.
+ ///
+ protected override void RegisterActionMapsWithRuntime()
+ {
+ ActionMapConfig actionMap = new ActionMapConfig()
+ {
+ name = "ViveHandInteraction",
+ localizedName = kDeviceLocalizedName,
+ desiredInteractionProfile = profile,
+ manufacturer = "HTC",
+ serialNumber = "",
+ deviceInfos = new List()
+ {
+ new DeviceConfig()
+ {
+ characteristics = (InputDeviceCharacteristics)(InputDeviceCharacteristics.TrackedDevice | InputDeviceCharacteristics.HandTracking | InputDeviceCharacteristics.Left),
+ userPath = "/user/hand_htc/left"
+ },
+ new DeviceConfig()
+ {
+ characteristics = (InputDeviceCharacteristics)(InputDeviceCharacteristics.TrackedDevice | InputDeviceCharacteristics.HandTracking | InputDeviceCharacteristics.Right),
+ userPath = "/user/hand_htc/right"
+ }
+ },
+ actions = new List()
+ {
+ new ActionConfig()
+ {
+ name = "grip",
+ localizedName = "Grip",
+ type = ActionType.Axis1D,
+ usages = new List()
+ {
+ "Grip"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = squeeze,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "select",
+ localizedName = "Select",
+ type = ActionType.Axis1D,
+ usages = new List()
+ {
+ "Select"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = select,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "devicepose",
+ localizedName = "Device Pose",
+ type = ActionType.Pose,
+ usages = new List()
+ {
+ "Device"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = grip,
+ interactionProfileName = profile,
+ }
+ }
+ },
+ new ActionConfig()
+ {
+ name = "pointer",
+ localizedName = "Pointer Pose",
+ type = ActionType.Pose,
+ usages = new List()
+ {
+ "Pointer"
+ },
+ bindings = new List()
+ {
+ new ActionBinding()
+ {
+ interactionPath = aim,
+ interactionProfileName = profile,
+ }
+ }
+ }
+ }
+ };
+ AddActionMap(actionMap);
+ }
+ }
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRHandInteractionProfiler/Runtime/input/Features/HtcViveHandInteractionInputFeature.cs.meta b/com.htc.upm.vive.openxr/OpenXRHandInteractionProfiler/Runtime/input/Features/HtcViveHandInteractionInputFeature.cs.meta
new file mode 100644
index 0000000..2dc5664
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandInteractionProfiler/Runtime/input/Features/HtcViveHandInteractionInputFeature.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9d6ba0632411b7742b59d20955e2ea57
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking.meta
new file mode 100644
index 0000000..1a805e8
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 52487a0e9b06950449d9fe1c91687776
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Editor.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Editor.meta
new file mode 100644
index 0000000..31b298f
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e3b50201243972949bd077c1e0aff72c
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Editor/HandTrackingFeauterInstaller.cs b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Editor/HandTrackingFeauterInstaller.cs
new file mode 100644
index 0000000..2936df6
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Editor/HandTrackingFeauterInstaller.cs
@@ -0,0 +1,54 @@
+using UnityEditor;
+using UnityEditor.XR.OpenXR.Features;
+using UnityEngine;
+using UnityEngine.XR.OpenXR;
+using System;
+using System.Linq;
+using System.Reflection;
+using System.IO;
+using VIVE.HandTracking;
+using UnityEngine.XR.OpenXR.Features;
+namespace UnityEditor.XR.OpenXR.Samples.HandTracking
+{
+ [InitializeOnLoad]
+ public class HandTrackingFeauterInstaller : Editor
+ {
+#if !UNITY_SAMPLE_DEV
+ private const string k_ScriptPath = "HandTracking Example/Editor/HandTrackingFeauterInstaller.cs";
+ static HandTrackingFeauterInstaller()
+ {
+ FeatureHelpers.RefreshFeatures(BuildTargetGroup.Standalone);
+ var feature = OpenXRSettings.Instance.GetFeature();
+ var HandInteractionfeature = OpenXRSettings.Instance.GetFeature();
+ if (feature != null)
+ {
+ if (feature.enabled != true)
+ {
+ feature.enabled = true;
+ }
+ }
+ if (HandInteractionfeature != null)
+ {
+ if (HandInteractionfeature.enabled != true)
+ {
+ HandInteractionfeature.enabled = true;
+ }
+ }
+ Debug.Log(AssetDatabase.FindAssets(Path.GetFileNameWithoutExtension(k_ScriptPath)).Select(AssetDatabase.GUIDToAssetPath));
+ var source = AssetDatabase.FindAssets(Path.GetFileNameWithoutExtension(k_ScriptPath))
+ .Select(AssetDatabase.GUIDToAssetPath)
+ .FirstOrDefault(r => r.Contains(k_ScriptPath));
+
+ if (string.IsNullOrEmpty(source))
+ {
+ Debug.LogError("File Not Exist");
+ return;
+ }
+
+ source = Path.GetDirectoryName(source);
+ Debug.Log(source);
+ AssetDatabase.DeleteAsset(Path.Combine(Path.GetDirectoryName(source), "Editor"));
+ }
+#endif
+ }
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Editor/HandTrackingFeauterInstaller.cs.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Editor/HandTrackingFeauterInstaller.cs.meta
new file mode 100644
index 0000000..f56ff43
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Editor/HandTrackingFeauterInstaller.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 25c6b0688a353874791039a7510e9003
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/HandInteractions.inputactions b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/HandInteractions.inputactions
new file mode 100644
index 0000000..05fa6cf
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/HandInteractions.inputactions
@@ -0,0 +1,182 @@
+{
+ "name": "HandInteractions",
+ "maps": [
+ {
+ "name": "LeftHand",
+ "id": "9ef2cbaf-c5ca-4f94-afd3-c13e92ae39b0",
+ "actions": [
+ {
+ "name": "select",
+ "type": "Value",
+ "id": "9f7476ef-5e86-4fbd-be2a-d191fcd6bd90",
+ "expectedControlType": "Axis",
+ "processors": "",
+ "interactions": "",
+ "initialStateCheck": true
+ },
+ {
+ "name": "grip",
+ "type": "Value",
+ "id": "58e87055-a7f7-49e5-874c-ed1531b2fc73",
+ "expectedControlType": "Axis",
+ "processors": "",
+ "interactions": "",
+ "initialStateCheck": true
+ },
+ {
+ "name": "selectPose",
+ "type": "Value",
+ "id": "2427c326-992b-4b5e-8b32-65766a69b9f6",
+ "expectedControlType": "Pose",
+ "processors": "",
+ "interactions": "",
+ "initialStateCheck": true
+ },
+ {
+ "name": "devicePose",
+ "type": "Value",
+ "id": "14167057-a039-4b71-b169-ae012bc4f26b",
+ "expectedControlType": "Pose",
+ "processors": "",
+ "interactions": "",
+ "initialStateCheck": true
+ }
+ ],
+ "bindings": [
+ {
+ "name": "",
+ "id": "b403b14a-c930-45f9-9a3e-2710e4721344",
+ "path": "{LeftHand}/select",
+ "interactions": "",
+ "processors": "",
+ "groups": "",
+ "action": "select",
+ "isComposite": false,
+ "isPartOfComposite": false
+ },
+ {
+ "name": "",
+ "id": "ae0a8fd0-79a3-4996-8334-0c00727c214a",
+ "path": "{LeftHand}/grip",
+ "interactions": "",
+ "processors": "",
+ "groups": "",
+ "action": "grip",
+ "isComposite": false,
+ "isPartOfComposite": false
+ },
+ {
+ "name": "",
+ "id": "86a6d936-0c97-411d-81bd-f07526f0fd2d",
+ "path": "{LeftHand}/pointer",
+ "interactions": "",
+ "processors": "",
+ "groups": "",
+ "action": "selectPose",
+ "isComposite": false,
+ "isPartOfComposite": false
+ },
+ {
+ "name": "",
+ "id": "fc0059b7-df77-4d61-9aff-2ca9cd129ca0",
+ "path": "{LeftHand}/devicePose",
+ "interactions": "",
+ "processors": "",
+ "groups": "",
+ "action": "devicePose",
+ "isComposite": false,
+ "isPartOfComposite": false
+ }
+ ]
+ },
+ {
+ "name": "RightHand",
+ "id": "052ff2d7-a697-4084-a818-72ef080c524d",
+ "actions": [
+ {
+ "name": "select",
+ "type": "Value",
+ "id": "9939050e-1af5-43fd-815b-92041d19b3fa",
+ "expectedControlType": "Axis",
+ "processors": "",
+ "interactions": "",
+ "initialStateCheck": true
+ },
+ {
+ "name": "grip",
+ "type": "Value",
+ "id": "de49cd41-9a9a-429c-9130-f794cb429550",
+ "expectedControlType": "Axis",
+ "processors": "",
+ "interactions": "",
+ "initialStateCheck": true
+ },
+ {
+ "name": "selectPose",
+ "type": "Value",
+ "id": "60fe8382-aa5a-4fd9-80cf-6ecc68f90863",
+ "expectedControlType": "Pose",
+ "processors": "",
+ "interactions": "",
+ "initialStateCheck": true
+ },
+ {
+ "name": "devicePose",
+ "type": "Value",
+ "id": "192485c2-2d24-495b-8deb-14f2e327a887",
+ "expectedControlType": "Pose",
+ "processors": "",
+ "interactions": "",
+ "initialStateCheck": true
+ }
+ ],
+ "bindings": [
+ {
+ "name": "",
+ "id": "9ff68142-4e5e-4d24-aed3-a377c8b74534",
+ "path": "{RightHand}/select",
+ "interactions": "",
+ "processors": "",
+ "groups": "",
+ "action": "select",
+ "isComposite": false,
+ "isPartOfComposite": false
+ },
+ {
+ "name": "",
+ "id": "23ee2cda-2db6-4e45-b13a-259aabd637f1",
+ "path": "{RightHand}/grip",
+ "interactions": "",
+ "processors": "",
+ "groups": "",
+ "action": "grip",
+ "isComposite": false,
+ "isPartOfComposite": false
+ },
+ {
+ "name": "",
+ "id": "34315523-7e62-43c9-84fc-35cea4259fe5",
+ "path": "{RightHand}/pointer",
+ "interactions": "",
+ "processors": "",
+ "groups": "",
+ "action": "selectPose",
+ "isComposite": false,
+ "isPartOfComposite": false
+ },
+ {
+ "name": "",
+ "id": "4070b955-5c40-46fa-98c5-4c71f99cb6c6",
+ "path": "{RightHand}/devicePose",
+ "interactions": "",
+ "processors": "",
+ "groups": "",
+ "action": "devicePose",
+ "isComposite": false,
+ "isPartOfComposite": false
+ }
+ ]
+ }
+ ],
+ "controlSchemes": []
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/HandInteractions.inputactions.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/HandInteractions.inputactions.meta
new file mode 100644
index 0000000..5dca6bb
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/HandInteractions.inputactions.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: 080a38524d6ab064e91f8ff9cd45bb9b
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: 8404be70184654265930450def6a9037, type: 3}
+ generateWrapperCode: 0
+ wrapperCodePath:
+ wrapperClassName:
+ wrapperCodeNamespace:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials.meta
new file mode 100644
index 0000000..845c282
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1b77d0ecc04d7584bb867772441f7c25
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Blue.mat b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Blue.mat
new file mode 100644
index 0000000..ca73695
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Blue.mat
@@ -0,0 +1,77 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Blue
+ m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 0, g: 0, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Blue.mat.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Blue.mat.meta
new file mode 100644
index 0000000..251681d
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Blue.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d3293c07c46938149bd6b68f6f5ab4d1
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Default.mat b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Default.mat
new file mode 100644
index 0000000..80f5803
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Default.mat
@@ -0,0 +1,87 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Default
+ m_Shader: {fileID: 10760, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Ints: []
+ m_Floats:
+ - _BumpScale: 1
+ - _ColorMask: 15
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _Stencil: 0
+ - _StencilComp: 8
+ - _StencilOp: 0
+ - _StencilReadMask: 255
+ - _StencilWriteMask: 255
+ - _UVSec: 0
+ - _UseUIAlphaClip: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 0.098039195, g: 0.50673795, b: 0.65882355, a: 0.3137255}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ - _Specular: {r: 1, g: 0.4481132, b: 0.4481132, a: 0}
+ m_BuildTextureStacks: []
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Default.mat.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Default.mat.meta
new file mode 100644
index 0000000..c070407
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Default.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 9513f1085c3b8d84ab17245d74043608
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Green.mat b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Green.mat
new file mode 100644
index 0000000..1f6e2c8
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Green.mat
@@ -0,0 +1,77 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Green
+ m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 0, g: 1, b: 0, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Green.mat.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Green.mat.meta
new file mode 100644
index 0000000..73fcc2e
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Green.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: be5bedb9f42770549af7600305d316fd
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Hand.mat b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Hand.mat
new file mode 100644
index 0000000..9980048
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Hand.mat
@@ -0,0 +1,86 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Hand
+ m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Ints: []
+ m_Floats:
+ - _BumpScale: 1
+ - _ColorMask: 15
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _Stencil: 0
+ - _StencilComp: 8
+ - _StencilOp: 0
+ - _StencilReadMask: 255
+ - _StencilWriteMask: 255
+ - _UVSec: 0
+ - _UseUIAlphaClip: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ m_BuildTextureStacks: []
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Hand.mat.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Hand.mat.meta
new file mode 100644
index 0000000..8ea0303
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Hand.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4637b99291c9e1d4b82124a21a34acbc
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/ObjModelHandLeft_26.fbx b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/ObjModelHandLeft_26.fbx
new file mode 100644
index 0000000..0e512cb
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/ObjModelHandLeft_26.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3a750bba67e44cbc78952dcca6a27f13327271c218b7a6443f8bbbb766e83ebb
+size 837624
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/ObjModelHandLeft_26.fbx.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/ObjModelHandLeft_26.fbx.meta
new file mode 100644
index 0000000..9fea867
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/ObjModelHandLeft_26.fbx.meta
@@ -0,0 +1,102 @@
+fileFormatVersion: 2
+guid: 9a01667fc6435cb479a0445610133fcc
+ModelImporter:
+ serializedVersion: 21100
+ internalIDToNameTable: []
+ externalObjects: {}
+ materials:
+ materialImportMode: 2
+ materialName: 0
+ materialSearch: 1
+ materialLocation: 1
+ animations:
+ legacyGenerateAnimations: 4
+ bakeSimulation: 0
+ resampleCurves: 1
+ optimizeGameObjects: 0
+ motionNodeName:
+ rigImportErrors:
+ rigImportWarnings:
+ animationImportErrors:
+ animationImportWarnings:
+ animationRetargetingWarnings:
+ animationDoRetargetingWarnings: 0
+ importAnimatedCustomProperties: 0
+ importConstraints: 0
+ animationCompression: 1
+ animationRotationError: 0.5
+ animationPositionError: 0.5
+ animationScaleError: 0.5
+ animationWrapMode: 0
+ extraExposedTransformPaths: []
+ extraUserProperties: []
+ clipAnimations: []
+ isReadable: 0
+ meshes:
+ lODScreenPercentages: []
+ globalScale: 1
+ meshCompression: 0
+ addColliders: 0
+ useSRGBMaterialColor: 1
+ sortHierarchyByName: 1
+ importVisibility: 1
+ importBlendShapes: 1
+ importCameras: 1
+ importLights: 1
+ fileIdsGeneration: 2
+ swapUVChannels: 0
+ generateSecondaryUV: 0
+ useFileUnits: 1
+ keepQuads: 0
+ weldVertices: 1
+ bakeAxisConversion: 0
+ preserveHierarchy: 0
+ skinWeightsMode: 0
+ maxBonesPerVertex: 4
+ minBoneWeight: 0.001
+ meshOptimizationFlags: -1
+ indexFormat: 0
+ secondaryUVAngleDistortion: 8
+ secondaryUVAreaDistortion: 15.000001
+ secondaryUVHardAngle: 88
+ secondaryUVMarginMethod: 1
+ secondaryUVMinLightmapResolution: 40
+ secondaryUVMinObjectScale: 1
+ secondaryUVPackMargin: 4
+ useFileScale: 1
+ tangentSpace:
+ normalSmoothAngle: 60
+ normalImportMode: 0
+ tangentImportMode: 3
+ normalCalculationMode: 4
+ legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
+ blendShapeNormalImportMode: 1
+ normalSmoothingSource: 0
+ referencedClips: []
+ importAnimation: 1
+ humanDescription:
+ serializedVersion: 3
+ human: []
+ skeleton: []
+ armTwist: 0.5
+ foreArmTwist: 0.5
+ upperLegTwist: 0.5
+ legTwist: 0.5
+ armStretch: 0.05
+ legStretch: 0.05
+ feetSpacing: 0
+ globalScale: 1
+ rootMotionBoneName:
+ hasTranslationDoF: 0
+ hasExtraRoot: 0
+ skeletonHasParents: 1
+ lastHumanDescriptionAvatarSource: {instanceID: 0}
+ autoGenerateAvatarMappingIfUnspecified: 1
+ animationType: 2
+ humanoidOversampling: 1
+ avatarSetup: 0
+ addHumanoidExtraRootOnlyWhenUsingAvatar: 1
+ additionalBone: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/ObjModelHandRight_26.fbx b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/ObjModelHandRight_26.fbx
new file mode 100644
index 0000000..3fb6509
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/ObjModelHandRight_26.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fc44cc74cb2dfd21a2459306d16d89aa474ada35c1054e949269c95fa13ff678
+size 837637
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/ObjModelHandRight_26.fbx.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/ObjModelHandRight_26.fbx.meta
new file mode 100644
index 0000000..2fae5b9
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/ObjModelHandRight_26.fbx.meta
@@ -0,0 +1,102 @@
+fileFormatVersion: 2
+guid: afa96e79b5b79984ab74e9e1ef200d57
+ModelImporter:
+ serializedVersion: 21100
+ internalIDToNameTable: []
+ externalObjects: {}
+ materials:
+ materialImportMode: 2
+ materialName: 0
+ materialSearch: 1
+ materialLocation: 1
+ animations:
+ legacyGenerateAnimations: 4
+ bakeSimulation: 0
+ resampleCurves: 1
+ optimizeGameObjects: 0
+ motionNodeName:
+ rigImportErrors:
+ rigImportWarnings:
+ animationImportErrors:
+ animationImportWarnings:
+ animationRetargetingWarnings:
+ animationDoRetargetingWarnings: 0
+ importAnimatedCustomProperties: 0
+ importConstraints: 0
+ animationCompression: 1
+ animationRotationError: 0.5
+ animationPositionError: 0.5
+ animationScaleError: 0.5
+ animationWrapMode: 0
+ extraExposedTransformPaths: []
+ extraUserProperties: []
+ clipAnimations: []
+ isReadable: 0
+ meshes:
+ lODScreenPercentages: []
+ globalScale: 1
+ meshCompression: 0
+ addColliders: 0
+ useSRGBMaterialColor: 1
+ sortHierarchyByName: 1
+ importVisibility: 1
+ importBlendShapes: 1
+ importCameras: 1
+ importLights: 1
+ fileIdsGeneration: 2
+ swapUVChannels: 0
+ generateSecondaryUV: 0
+ useFileUnits: 1
+ keepQuads: 0
+ weldVertices: 1
+ bakeAxisConversion: 0
+ preserveHierarchy: 0
+ skinWeightsMode: 0
+ maxBonesPerVertex: 4
+ minBoneWeight: 0.001
+ meshOptimizationFlags: -1
+ indexFormat: 0
+ secondaryUVAngleDistortion: 8
+ secondaryUVAreaDistortion: 15.000001
+ secondaryUVHardAngle: 88
+ secondaryUVMarginMethod: 1
+ secondaryUVMinLightmapResolution: 40
+ secondaryUVMinObjectScale: 1
+ secondaryUVPackMargin: 4
+ useFileScale: 1
+ tangentSpace:
+ normalSmoothAngle: 60
+ normalImportMode: 0
+ tangentImportMode: 3
+ normalCalculationMode: 4
+ legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
+ blendShapeNormalImportMode: 1
+ normalSmoothingSource: 0
+ referencedClips: []
+ importAnimation: 1
+ humanDescription:
+ serializedVersion: 3
+ human: []
+ skeleton: []
+ armTwist: 0.5
+ foreArmTwist: 0.5
+ upperLegTwist: 0.5
+ legTwist: 0.5
+ armStretch: 0.05
+ legStretch: 0.05
+ feetSpacing: 0
+ globalScale: 1
+ rootMotionBoneName:
+ hasTranslationDoF: 0
+ hasExtraRoot: 0
+ skeletonHasParents: 1
+ lastHumanDescriptionAvatarSource: {instanceID: 0}
+ autoGenerateAvatarMappingIfUnspecified: 1
+ animationType: 2
+ humanoidOversampling: 1
+ avatarSetup: 0
+ addHumanoidExtraRootOnlyWhenUsingAvatar: 1
+ additionalBone: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Red.mat b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Red.mat
new file mode 100644
index 0000000..f138423
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Red.mat
@@ -0,0 +1,77 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Red
+ m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 0, b: 0, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Red.mat.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Red.mat.meta
new file mode 100644
index 0000000..84049c5
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/Red.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 130cd327cb69f5c4ab2bcdb608fbd58c
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/White.mat b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/White.mat
new file mode 100644
index 0000000..490513e
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/White.mat
@@ -0,0 +1,77 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: White
+ m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/White.mat.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/White.mat.meta
new file mode 100644
index 0000000..781a4d8
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Materials/White.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5daffd924f4d0494c83ce461ca913878
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Models.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Models.meta
new file mode 100644
index 0000000..cec38cc
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Models.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 9ae1b41407a2d734c96ed160efbc06d2
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Models/Cone.fbx b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Models/Cone.fbx
new file mode 100644
index 0000000..90c4ea0
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Models/Cone.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:561b7072082b95ffc890a66a3a1c5abd2f2876fa647239aca7931caecbaa1d40
+size 12860
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Models/Cone.fbx.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Models/Cone.fbx.meta
new file mode 100644
index 0000000..e6684e1
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Models/Cone.fbx.meta
@@ -0,0 +1,101 @@
+fileFormatVersion: 2
+guid: fa14a214e9ffb1a42850851e0ad9db52
+ModelImporter:
+ serializedVersion: 20101
+ internalIDToNameTable: []
+ externalObjects: {}
+ materials:
+ materialImportMode: 1
+ materialName: 0
+ materialSearch: 1
+ materialLocation: 1
+ animations:
+ legacyGenerateAnimations: 4
+ bakeSimulation: 0
+ resampleCurves: 1
+ optimizeGameObjects: 0
+ motionNodeName:
+ rigImportErrors:
+ rigImportWarnings:
+ animationImportErrors:
+ animationImportWarnings:
+ animationRetargetingWarnings:
+ animationDoRetargetingWarnings: 0
+ importAnimatedCustomProperties: 0
+ importConstraints: 0
+ animationCompression: 1
+ animationRotationError: 0.5
+ animationPositionError: 0.5
+ animationScaleError: 0.5
+ animationWrapMode: 0
+ extraExposedTransformPaths: []
+ extraUserProperties: []
+ clipAnimations: []
+ isReadable: 0
+ meshes:
+ lODScreenPercentages: []
+ globalScale: 1
+ meshCompression: 3
+ addColliders: 0
+ useSRGBMaterialColor: 1
+ sortHierarchyByName: 1
+ importVisibility: 1
+ importBlendShapes: 1
+ importCameras: 0
+ importLights: 0
+ fileIdsGeneration: 1
+ swapUVChannels: 0
+ generateSecondaryUV: 0
+ useFileUnits: 1
+ keepQuads: 0
+ weldVertices: 1
+ bakeAxisConversion: 0
+ preserveHierarchy: 0
+ skinWeightsMode: 0
+ maxBonesPerVertex: 4
+ minBoneWeight: 0.001
+ meshOptimizationFlags: -1
+ indexFormat: 0
+ secondaryUVAngleDistortion: 8
+ secondaryUVAreaDistortion: 15.000001
+ secondaryUVHardAngle: 88
+ secondaryUVMarginMethod: 1
+ secondaryUVMinLightmapResolution: 40
+ secondaryUVMinObjectScale: 1
+ secondaryUVPackMargin: 4
+ useFileScale: 1
+ tangentSpace:
+ normalSmoothAngle: 60
+ normalImportMode: 0
+ tangentImportMode: 3
+ normalCalculationMode: 4
+ legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
+ blendShapeNormalImportMode: 1
+ normalSmoothingSource: 0
+ referencedClips: []
+ importAnimation: 1
+ humanDescription:
+ serializedVersion: 3
+ human: []
+ skeleton: []
+ armTwist: 0.5
+ foreArmTwist: 0.5
+ upperLegTwist: 0.5
+ legTwist: 0.5
+ armStretch: 0.05
+ legStretch: 0.05
+ feetSpacing: 0
+ globalScale: 1
+ rootMotionBoneName:
+ hasTranslationDoF: 0
+ hasExtraRoot: 0
+ skeletonHasParents: 1
+ lastHumanDescriptionAvatarSource: {instanceID: 0}
+ autoGenerateAvatarMappingIfUnspecified: 1
+ animationType: 2
+ humanoidOversampling: 1
+ avatarSetup: 0
+ additionalBone: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Prefabs.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Prefabs.meta
new file mode 100644
index 0000000..f1c88ef
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Prefabs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 061f4195e1dc74e4e8cf7f657203e2cd
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Prefabs/3DHand.prefab b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Prefabs/3DHand.prefab
new file mode 100644
index 0000000..7877a9b
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Prefabs/3DHand.prefab
@@ -0,0 +1,541 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &7423157989283898626
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 7423157989283898627}
+ m_Layer: 0
+ m_Name: 3DHand
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &7423157989283898627
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7423157989283898626}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -0.015607998, y: -0.013282664, z: -0.07335153}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 6957748758881164380}
+ - {fileID: 6957748757999106292}
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1001 &7423157989289999287
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ m_TransformParent: {fileID: 7423157989283898627}
+ m_Modifications:
+ - target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ propertyPath: m_RootOrder
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0.015607998
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 0.013282664
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0.07335153
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: -1107956732406458091, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ propertyPath: m_Materials.Array.data[0]
+ value:
+ objectReference: {fileID: 2100000, guid: 9513f1085c3b8d84ab17245d74043608, type: 2}
+ - target: {fileID: 919132149155446097, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ propertyPath: m_Name
+ value: ObjModelHandLeft_26
+ objectReference: {fileID: 0}
+ - target: {fileID: 919132149155446097, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ propertyPath: m_IsActive
+ value: 1
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+--- !u!4 &1023837832511550131 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -1643464455024064252, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &1517851468531354918 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 8220238113505965713, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &1587043492754875532 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 8143094687746776891, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &1822319482427487084 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 9101342973431810267, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &2129234081217865112 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 8829542094526668335, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &2402645123296224636 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 5067591772060704459, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &2591330329871673071 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 4968064022332693848, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &2877863616158530621 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 4680475222046787466, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &3886056980242657624 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -3248688629254337809, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &3923137174990642617 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 5869758926971069966, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &4176209744140450023 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 6841172885717877584, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &4227981583638641158 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -2474565242041466447, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &4315334464559039638 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 6694459045059854113, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &4518116779036985979 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 6464857450473386444, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &4655153904485345964 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -6368592266354454245, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &5633725182928596562 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 2966563632883308005, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &5751558732041407126 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 2942538225671237921, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &5847509038455621992 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 3900922814075712223, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &6366441487635361211 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -4657146349703457268, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!1 &6673696290973803778 stripped
+GameObject:
+ m_CorrespondingSourceObject: {fileID: 4294711893310725813, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &6957748758881164380 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &7007883643249497524 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -8771503716632908285, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &7113238653529847310 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 410696192037670329, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &7125949936140118471 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 423390500807168624, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &7402668014366828115 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -9097317933092135452, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!1 &7765669265330833126 stripped
+GameObject:
+ m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!114 &7423157989402685039
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7765669265330833126}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: c19189c6a6028a74ab475048ebd154c8, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ nodes:
+ - {fileID: 5847509038455621992}
+ - {fileID: 1517851468531354918}
+ - {fileID: 4227981583638641158}
+ - {fileID: 2591330329871673071}
+ - {fileID: 7007883643249497524}
+ - {fileID: 2129234081217865112}
+ - {fileID: 9190276837785830995}
+ - {fileID: 4518116779036985979}
+ - {fileID: 8951308887720329310}
+ - {fileID: 7113238653529847310}
+ - {fileID: 7402668014366828115}
+ - {fileID: 4655153904485345964}
+ - {fileID: 7929466683079983724}
+ - {fileID: 4176209744140450023}
+ - {fileID: 5751558732041407126}
+ - {fileID: 1822319482427487084}
+ - {fileID: 6366441487635361211}
+ - {fileID: 2877863616158530621}
+ - {fileID: 3886056980242657624}
+ - {fileID: 1023837832511550131}
+ - {fileID: 4315334464559039638}
+ - {fileID: 3923137174990642617}
+ - {fileID: 7125949936140118471}
+ - {fileID: 5633725182928596562}
+ - {fileID: 2402645123296224636}
+ - {fileID: 1587043492754875532}
+ isLeft: 1
+ allowUntrackedPose: 1
+ Hand: {fileID: 6673696290973803778}
+ MotionType: 2147483647
+--- !u!4 &7929466683079983724 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -8570555479703635493, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &8951308887720329310 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -7260599894360605719, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &9190276837785830995 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -7453960083844481564, guid: 9a01667fc6435cb479a0445610133fcc, type: 3}
+ m_PrefabInstance: {fileID: 7423157989289999287}
+ m_PrefabAsset: {fileID: 0}
+--- !u!1001 &7423157990146891551
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ m_TransformParent: {fileID: 7423157989283898627}
+ m_Modifications:
+ - target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ propertyPath: m_RootOrder
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0.015607998
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 0.013282664
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0.07335153
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 919132149155446097, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ propertyPath: m_Name
+ value: ObjModelHandRight_26
+ objectReference: {fileID: 0}
+ - target: {fileID: 919132149155446097, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ propertyPath: m_IsActive
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 7227333814368855109, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ propertyPath: m_Materials.Array.data[0]
+ value:
+ objectReference: {fileID: 2100000, guid: 9513f1085c3b8d84ab17245d74043608, type: 2}
+ m_RemovedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+--- !u!4 &1023837833795835419 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -1643464455024064252, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &1517851467915504014 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 8220238113505965713, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &1587043491765714980 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 8143094687746776891, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &1822319483682314180 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 9101342973431810267, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &2129234081841414448 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 8829542094526668335, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &2402645124683137492 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 5067591772060704459, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &2591330330460226119 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 4968064022332693848, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &2877863616882874517 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 4680475222046787466, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &3886056978715186672 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -3248688629254337809, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &3923137175738595601 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 5869758926971069966, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &4176209743526845519 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 6841172885717877584, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &4227981582215536302 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -2474565242041466447, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &4315334463274852414 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 6694459045059854113, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &4518116778316803795 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 6464857450473386444, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &4655153903869513220 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -6368592266354454245, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!1 &5402561904108644855 stripped
+GameObject:
+ m_CorrespondingSourceObject: {fileID: 3313976086554670824, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &5633725184492227322 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 2966563632883308005, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &5751558732801289790 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 2942538225671237921, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &5847509039486725568 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 3900922814075712223, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &6366441486206486803 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -4657146349703457268, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &6957748757999106292 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &7007883642229584156 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -8771503716632908285, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &7113238654822912678 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 410696192037670329, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &7125949935415725423 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 423390500807168624, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &7402668015651537659 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -9097317933092135452, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!1 &7765669264174080590 stripped
+GameObject:
+ m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!114 &7423157990786583661
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7765669264174080590}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: c19189c6a6028a74ab475048ebd154c8, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ nodes:
+ - {fileID: 5847509039486725568}
+ - {fileID: 1517851467915504014}
+ - {fileID: 4227981582215536302}
+ - {fileID: 2591330330460226119}
+ - {fileID: 7007883642229584156}
+ - {fileID: 2129234081841414448}
+ - {fileID: 9190276836226818811}
+ - {fileID: 4518116778316803795}
+ - {fileID: 8951308886156731638}
+ - {fileID: 7113238654822912678}
+ - {fileID: 7402668015651537659}
+ - {fileID: 4655153903869513220}
+ - {fileID: 7929466684471142084}
+ - {fileID: 4176209743526845519}
+ - {fileID: 5751558732801289790}
+ - {fileID: 1822319483682314180}
+ - {fileID: 6366441486206486803}
+ - {fileID: 2877863616882874517}
+ - {fileID: 3886056978715186672}
+ - {fileID: 1023837833795835419}
+ - {fileID: 4315334463274852414}
+ - {fileID: 3923137175738595601}
+ - {fileID: 7125949935415725423}
+ - {fileID: 5633725184492227322}
+ - {fileID: 2402645124683137492}
+ - {fileID: 1587043491765714980}
+ isLeft: 0
+ allowUntrackedPose: 1
+ Hand: {fileID: 5402561904108644855}
+ MotionType: 2147483647
+--- !u!4 &7929466684471142084 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -8570555479703635493, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &8951308886156731638 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -7260599894360605719, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
+--- !u!4 &9190276836226818811 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: -7453960083844481564, guid: afa96e79b5b79984ab74e9e1ef200d57, type: 3}
+ m_PrefabInstance: {fileID: 7423157990146891551}
+ m_PrefabAsset: {fileID: 0}
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Prefabs/3DHand.prefab.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Prefabs/3DHand.prefab.meta
new file mode 100644
index 0000000..d7384ba
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Prefabs/3DHand.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 9717c3a8fd1feb14a866c93d1d5cecc0
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Prefabs/PoseMarker.prefab b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Prefabs/PoseMarker.prefab
new file mode 100644
index 0000000..bb3b28b
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Prefabs/PoseMarker.prefab
@@ -0,0 +1,665 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &2910298151769479246
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 8964967576903015174}
+ - component: {fileID: 8595007410106638205}
+ - component: {fileID: 3652344773145504640}
+ m_Layer: 0
+ m_Name: Z-Positive
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &8964967576903015174
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2910298151769479246}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0.11}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 4346727374823547005}
+ m_RootOrder: 6
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &8595007410106638205
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2910298151769479246}
+ m_Mesh: {fileID: 3613567641014311022, guid: fa14a214e9ffb1a42850851e0ad9db52, type: 3}
+--- !u!23 &3652344773145504640
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2910298151769479246}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: d3293c07c46938149bd6b68f6f5ab4d1, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!1 &4346727372943234171
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 4346727372943234170}
+ - component: {fileID: 4346727372943234167}
+ - component: {fileID: 4346727372943234164}
+ - component: {fileID: 4346727372943234165}
+ m_Layer: 0
+ m_Name: XAxis
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &4346727372943234170
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4346727372943234171}
+ m_LocalRotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071068}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0.005, y: 0.1, z: 0.005}
+ m_Children: []
+ m_Father: {fileID: 4346727374823547005}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90}
+--- !u!33 &4346727372943234167
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4346727372943234171}
+ m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &4346727372943234164
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4346727372943234171}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 130cd327cb69f5c4ab2bcdb608fbd58c, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!136 &4346727372943234165
+CapsuleCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4346727372943234171}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ m_Radius: 0.5000001
+ m_Height: 2
+ m_Direction: 1
+ m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697}
+--- !u!1 &4346727372952809594
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 4346727372952809589}
+ - component: {fileID: 4346727372952809590}
+ - component: {fileID: 4346727372952809591}
+ - component: {fileID: 4346727372952809588}
+ m_Layer: 0
+ m_Name: YAxis
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &4346727372952809589
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4346727372952809594}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0.005, y: 0.1, z: 0.005}
+ m_Children: []
+ m_Father: {fileID: 4346727374823547005}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &4346727372952809590
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4346727372952809594}
+ m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &4346727372952809591
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4346727372952809594}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: be5bedb9f42770549af7600305d316fd, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!136 &4346727372952809588
+CapsuleCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4346727372952809594}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ m_Radius: 0.5000001
+ m_Height: 2
+ m_Direction: 1
+ m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697}
+--- !u!1 &4346727373368105286
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 4346727373368105281}
+ - component: {fileID: 4346727373368105282}
+ - component: {fileID: 4346727373368105283}
+ - component: {fileID: 4346727373368105280}
+ m_Layer: 0
+ m_Name: Cube
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &4346727373368105281
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4346727373368105286}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0.02, y: 0.02, z: 0.02}
+ m_Children: []
+ m_Father: {fileID: 4346727374823547005}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &4346727373368105282
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4346727373368105286}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &4346727373368105283
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4346727373368105286}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!65 &4346727373368105280
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4346727373368105286}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Size: {x: 1, y: 1, z: 1}
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!1 &4346727373925079743
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 4346727373925079742}
+ - component: {fileID: 4346727373925079739}
+ - component: {fileID: 4346727373925079736}
+ - component: {fileID: 4346727373925079737}
+ m_Layer: 0
+ m_Name: ZAxis
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &4346727373925079742
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4346727373925079743}
+ m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0.005, y: 0.1, z: 0.005}
+ m_Children: []
+ m_Father: {fileID: 4346727374823547005}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
+--- !u!33 &4346727373925079739
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4346727373925079743}
+ m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &4346727373925079736
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4346727373925079743}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: d3293c07c46938149bd6b68f6f5ab4d1, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!136 &4346727373925079737
+CapsuleCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4346727373925079743}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ m_Radius: 0.5000001
+ m_Height: 2
+ m_Direction: 1
+ m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697}
+--- !u!1 &4346727374823546882
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 4346727374823547005}
+ m_Layer: 0
+ m_Name: PoseMarker
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &4346727374823547005
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4346727374823546882}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 4346727373368105281}
+ - {fileID: 4346727372943234170}
+ - {fileID: 4346727372952809589}
+ - {fileID: 4346727373925079742}
+ - {fileID: 602845843975818768}
+ - {fileID: 5641498033562402263}
+ - {fileID: 8964967576903015174}
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &4640940940180935358
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 5641498033562402263}
+ - component: {fileID: 3201029004716767610}
+ - component: {fileID: 2164005335530074864}
+ m_Layer: 0
+ m_Name: Y-Positive
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &5641498033562402263
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4640940940180935358}
+ m_LocalRotation: {x: -0.7071068, y: 0, z: 0, w: 0.7071068}
+ m_LocalPosition: {x: 0, y: 0.11, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 4346727374823547005}
+ m_RootOrder: 5
+ m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0}
+--- !u!33 &3201029004716767610
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4640940940180935358}
+ m_Mesh: {fileID: 3613567641014311022, guid: fa14a214e9ffb1a42850851e0ad9db52, type: 3}
+--- !u!23 &2164005335530074864
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4640940940180935358}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: be5bedb9f42770549af7600305d316fd, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!1 &6813102403969732157
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 602845843975818768}
+ - component: {fileID: 6251018130860582685}
+ - component: {fileID: 227567837646502533}
+ m_Layer: 0
+ m_Name: X-Positive
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &602845843975818768
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6813102403969732157}
+ m_LocalRotation: {x: -0.5, y: 0.5, z: -0.5, w: 0.5}
+ m_LocalPosition: {x: 0.11, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 4346727374823547005}
+ m_RootOrder: 4
+ m_LocalEulerAnglesHint: {x: 0, y: 90, z: -90}
+--- !u!33 &6251018130860582685
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6813102403969732157}
+ m_Mesh: {fileID: 3613567641014311022, guid: fa14a214e9ffb1a42850851e0ad9db52, type: 3}
+--- !u!23 &227567837646502533
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6813102403969732157}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 130cd327cb69f5c4ab2bcdb608fbd58c, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Prefabs/PoseMarker.prefab.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Prefabs/PoseMarker.prefab.meta
new file mode 100644
index 0000000..f1b2054
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Prefabs/PoseMarker.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 71d5e99cf346f174db130c7585b6a3f8
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Prefabs/SkeletonHand.prefab b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Prefabs/SkeletonHand.prefab
new file mode 100644
index 0000000..5a8ee85
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Prefabs/SkeletonHand.prefab
@@ -0,0 +1,135 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &1139942279006104812
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1139942279006104815}
+ - component: {fileID: 1139942279006104814}
+ m_Layer: 0
+ m_Name: left
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1139942279006104815
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1139942279006104812}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1139942279644765727}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1139942279006104814
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1139942279006104812}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 8c57cc3ae07bcce42ba395c288cba794, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ isLeft: 1
+ allowUntrackedPose: 1
+ pointColor: {r: 0, g: 1, b: 0, a: 1}
+ linkColor: {r: 1, g: 1, b: 1, a: 1}
+ material: {fileID: 2100000, guid: 4637b99291c9e1d4b82124a21a34acbc, type: 2}
+ MotionType: 2
+--- !u!1 &1139942279644765724
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1139942279644765727}
+ m_Layer: 0
+ m_Name: SkeletonHand
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 0
+--- !u!4 &1139942279644765727
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1139942279644765724}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -0.015607998, y: -0.013282664, z: -0.07335153}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1139942279006104815}
+ - {fileID: 1139942279895550675}
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1139942279895550672
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1139942279895550675}
+ - component: {fileID: 1139942279895550674}
+ m_Layer: 0
+ m_Name: right
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1139942279895550675
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1139942279895550672}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1139942279644765727}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1139942279895550674
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1139942279895550672}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 8c57cc3ae07bcce42ba395c288cba794, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ isLeft: 0
+ allowUntrackedPose: 1
+ pointColor: {r: 0, g: 1, b: 0, a: 1}
+ linkColor: {r: 1, g: 1, b: 1, a: 1}
+ material: {fileID: 2100000, guid: 4637b99291c9e1d4b82124a21a34acbc, type: 2}
+ MotionType: 2
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Prefabs/SkeletonHand.prefab.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Prefabs/SkeletonHand.prefab.meta
new file mode 100644
index 0000000..513c48a
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Prefabs/SkeletonHand.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 26eb62328811e3b41bb1c5e4046cf8bc
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Readme.md b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Readme.md
new file mode 100644
index 0000000..f0b9826
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Readme.md
@@ -0,0 +1,26 @@
+# VIVE OpenXR Hand Tracking Unity Feature
+
+To help software developers create an application for locating hand joints with the OpenXR hand tracking extension [XR_EXT_hand_tracking](https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html#XR_EXT_hand_tracking).
+
+## Load sample code
+**Window** > **Package Manager** > **VIVE OpenXR Plugin - Windows** > **Samples** > Click to import **HandTracking Example**
+
+## Play the sample scene
+1. **Edit** > **Project Settings** > **XR Plug-in Management** > Select **OpenXR** , click Exclamation mark next to it then choose **Fix All**.
+2. **Edit** > **Project Settings** > **XR Plug-in Management** > **OpenXR** > Add Interaction profiles for your device.
+3. **Edit** > **Project Settings** > **XR Plug-in Management** > **OpenXR** > Select **Hand Tracking** under **VIVE OpenXR** Feature Groups.
+4. In the Unity Project window, select the sample scene file in **Assets** > **Samples** > **VIVE OpenXR Plugin - Windows** > **1.0.12** > **HandTracking Example** > **Scenes** > **HandTrackingScene.unity** then click Play.
+
+## Use VIVE OpenXR Hand Tracking Unity Feature to draw skeleton hand.
+1. Import VIVE OpenXR Plugin - Windows
+2. Add Hand gameobject to the Unity scene
+ - Refer to functions **StartFrameWork** and **StopFrameWork** in **HandManager.cs** for creating and releasing handle for hand.
+ - Refer to the function **GetJointLocation** in **HandManager.cs** for getting the information to locate hand joints.
+ - Drag "SkeletonHand" prefab into scene hierarchy or Create an empty object and attach **RenderHand.cs**.
+
+## Use VIVE OpenXR Hand Tracking Unity Feature to draw 3D hand.
+1. Import VIVE OpenXR Plugin - Windows
+2. Add Hand gameobject to the Unity scene
+ - Refer to functions **StartFrameWork** and **StopFrameWork** in **HandManager.cs** for creating and releasing handle for hand.
+ - Refer to the function **GetJointLocation** in **HandManager.cs** for getting the information to locate hand joints.
+ - Drag "3DHand" prefab into scene hierarchy or attach **RenderModel.cs** to "ObjModelHandLeft_26.fbx" and "ObjModelHandRight_26.fbx".
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Readme.md.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Readme.md.meta
new file mode 100644
index 0000000..2d22189
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Readme.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 8d56a6be4ede9fe40b2e62763d7a1b52
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scenes.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scenes.meta
new file mode 100644
index 0000000..714ab0f
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scenes.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ea6bc8c74d1f7f1479b372c0c13537ca
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scenes/HandTrackingScene.unity b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scenes/HandTrackingScene.unity
new file mode 100644
index 0000000..1eb7af3
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scenes/HandTrackingScene.unity
@@ -0,0 +1,2469 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+ m_SceneGUID: 00000000000000000000000000000000
+ m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 9
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 0
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+ m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 0
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 705507994}
+ m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1}
+ m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 12
+ m_GIWorkflowMode: 1
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 1
+ m_EnableRealtimeLightmaps: 0
+ m_LightmapEditorSettings:
+ serializedVersion: 12
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_AtlasSize: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_ExtractAmbientOcclusion: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_FinalGather: 0
+ m_FinalGatherFiltering: 1
+ m_FinalGatherRayCount: 256
+ m_ReflectionCompression: 2
+ m_MixedBakeMode: 2
+ m_BakeBackend: 1
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 500
+ m_PVRBounces: 2
+ m_PVREnvironmentSampleCount: 500
+ m_PVREnvironmentReferencePointCount: 2048
+ m_PVRFilteringMode: 2
+ m_PVRDenoiserTypeDirect: 0
+ m_PVRDenoiserTypeIndirect: 0
+ m_PVRDenoiserTypeAO: 0
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVREnvironmentMIS: 0
+ m_PVRCulling: 1
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 5
+ m_PVRFilteringGaussRadiusAO: 2
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_ExportTrainingData: 0
+ m_TrainingDataDestination: TrainingData
+ m_LightProbeSampleCountMultiplier: 4
+ m_LightingDataAsset: {fileID: 0}
+ m_LightingSettings: {fileID: 0}
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 2
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ accuratePlacement: 0
+ maxJobWorkers: 0
+ preserveTilesOutsideBounds: 0
+ debug:
+ m_Flags: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1001 &85797200
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ m_TransformParent: {fileID: 538313238}
+ m_Modifications:
+ - target: {fileID: 4346727374823546882, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_Name
+ value: GripPose
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_RootOrder
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalScale.x
+ value: 0.2
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalScale.y
+ value: 0.2
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalScale.z
+ value: 0.2
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+--- !u!4 &85797201 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ m_PrefabInstance: {fileID: 85797200}
+ m_PrefabAsset: {fileID: 0}
+--- !u!1 &85797202 stripped
+GameObject:
+ m_CorrespondingSourceObject: {fileID: 4346727374823546882, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ m_PrefabInstance: {fileID: 85797200}
+ m_PrefabAsset: {fileID: 0}
+--- !u!114 &85797203
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 85797202}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: c2fadf230d1919748a9aa21d40f74619, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_TrackingType: 0
+ m_UpdateType: 0
+ m_PositionInput:
+ m_UseReference: 0
+ m_Action:
+ m_Name: Position Input
+ m_Type: 0
+ m_ExpectedControlType:
+ m_Id: d4ba6290-8976-48ba-91e3-6478dcbddeb4
+ m_Processors:
+ m_Interactions:
+ m_SingletonActionBindings:
+ - m_Name:
+ m_Id: 1164e7c5-d92a-462e-9dfb-277ff2828814
+ m_Path: {RightHand}/devicePose/position
+ m_Interactions:
+ m_Processors:
+ m_Groups:
+ m_Action: Position Input
+ m_Flags: 0
+ m_Flags: 0
+ m_Reference: {fileID: 0}
+ m_RotationInput:
+ m_UseReference: 0
+ m_Action:
+ m_Name: Rotation Input
+ m_Type: 0
+ m_ExpectedControlType:
+ m_Id: 6999f185-6caf-42d5-b1b3-edc90a71c791
+ m_Processors:
+ m_Interactions:
+ m_SingletonActionBindings:
+ - m_Name:
+ m_Id: 809a6315-72dd-4e99-a870-9c5b89251870
+ m_Path: {RightHand}/devicePose/rotation
+ m_Interactions:
+ m_Processors:
+ m_Groups:
+ m_Action: Rotation Input
+ m_Flags: 0
+ m_Flags: 0
+ m_Reference: {fileID: 0}
+ m_PositionAction:
+ m_Name:
+ m_Type: 0
+ m_ExpectedControlType:
+ m_Id:
+ m_Processors:
+ m_Interactions:
+ m_SingletonActionBindings: []
+ m_Flags: 0
+ m_RotationAction:
+ m_Name:
+ m_Type: 0
+ m_ExpectedControlType:
+ m_Id:
+ m_Processors:
+ m_Interactions:
+ m_SingletonActionBindings: []
+ m_Flags: 0
+ m_HasMigratedActions: 1
+--- !u!1 &131124984
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 131124985}
+ - component: {fileID: 131124987}
+ - component: {fileID: 131124986}
+ m_Layer: 0
+ m_Name: SqueezeVal
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &131124985
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 131124984}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 9, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1502571526}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!102 &131124986
+TextMesh:
+ serializedVersion: 3
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 131124984}
+ m_Text:
+ m_OffsetZ: 30
+ m_CharacterSize: 1
+ m_LineSpacing: 1
+ m_Anchor: 0
+ m_Alignment: 0
+ m_TabSize: 4
+ m_FontSize: 0
+ m_FontStyle: 0
+ m_RichText: 1
+ m_Font: {fileID: 0}
+ m_Color:
+ serializedVersion: 2
+ rgba: 4294967295
+--- !u!23 &131124987
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 131124984}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!1 &174275605
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 174275606}
+ - component: {fileID: 174275608}
+ - component: {fileID: 174275607}
+ m_Layer: 0
+ m_Name: SelectVal
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &174275606
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 174275605}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: -5, y: -1.5132828, z: -0.07335186}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1286465775}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!23 &174275607
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 174275605}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!114 &174275608
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 174275605}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 393fd0a40b85a9a4b981076df200a2f7, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_ActionReferenceTrigger: {fileID: -556233012627777057, guid: 080a38524d6ab064e91f8ff9cd45bb9b, type: 3}
+ pinchValue: {fileID: 1539795196}
+--- !u!1 &262108936
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 262108937}
+ - component: {fileID: 262108939}
+ - component: {fileID: 262108938}
+ m_Layer: 0
+ m_Name: RightSelect
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &262108937
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 262108936}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 15, y: -1.5, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1845592526}
+ m_Father: {fileID: 353911962}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!102 &262108938
+TextMesh:
+ serializedVersion: 3
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 262108936}
+ m_Text: 'Right Select :'
+ m_OffsetZ: 30
+ m_CharacterSize: 1
+ m_LineSpacing: 1
+ m_Anchor: 0
+ m_Alignment: 0
+ m_TabSize: 4
+ m_FontSize: 0
+ m_FontStyle: 0
+ m_RichText: 1
+ m_Font: {fileID: 0}
+ m_Color:
+ serializedVersion: 2
+ rgba: 4294967295
+--- !u!23 &262108939
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 262108936}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!1 &353911959
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 353911962}
+ - component: {fileID: 353911961}
+ - component: {fileID: 353911960}
+ - component: {fileID: 353911963}
+ m_Layer: 0
+ m_Name: Message
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!102 &353911960
+TextMesh:
+ serializedVersion: 3
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 353911959}
+ m_Text: Press Space to switch 3D/Skeleton hand.
+ m_OffsetZ: 30
+ m_CharacterSize: 1
+ m_LineSpacing: 1
+ m_Anchor: 0
+ m_Alignment: 0
+ m_TabSize: 4
+ m_FontSize: 0
+ m_FontStyle: 0
+ m_RichText: 1
+ m_Font: {fileID: 0}
+ m_Color:
+ serializedVersion: 2
+ rgba: 4279842023
+--- !u!23 &353911961
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 353911959}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!4 &353911962
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 353911959}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: -12, y: -1.0132827, z: 9.926648}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1636965490}
+ - {fileID: 262108937}
+ - {fileID: 1377649254}
+ - {fileID: 1502571526}
+ m_Father: {fileID: 963194228}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &353911963
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 353911959}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3e6db3fe75b0e5d48ba6decfa5d009fc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_ActionAsset: {fileID: -944628639613478452, guid: 080a38524d6ab064e91f8ff9cd45bb9b, type: 3}
+--- !u!1 &411490579
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 411490580}
+ - component: {fileID: 411490582}
+ - component: {fileID: 411490581}
+ m_Layer: 0
+ m_Name: SelectVal
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &411490580
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 411490579}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 8.5, y: -1.5132828, z: -0.07335186}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 538313238}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!23 &411490581
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 411490579}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!114 &411490582
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 411490579}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 393fd0a40b85a9a4b981076df200a2f7, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_ActionReferenceTrigger: {fileID: 4362351237192111166, guid: 080a38524d6ab064e91f8ff9cd45bb9b, type: 3}
+ pinchValue: {fileID: 1845592527}
+--- !u!1 &538313237
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 538313238}
+ m_Layer: 0
+ m_Name: Right
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &538313238
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 538313237}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1340468156}
+ - {fileID: 85797201}
+ - {fileID: 1829646212}
+ - {fileID: 411490580}
+ m_Father: {fileID: 2132622477}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &575697743 stripped
+GameObject:
+ m_CorrespondingSourceObject: {fileID: 7423157989283898626, guid: 9717c3a8fd1feb14a866c93d1d5cecc0, type: 3}
+ m_PrefabInstance: {fileID: 7423157989523861034}
+ m_PrefabAsset: {fileID: 0}
+--- !u!1 &642988473
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 642988474}
+ - component: {fileID: 642988476}
+ - component: {fileID: 642988475}
+ m_Layer: 0
+ m_Name: AimPose
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &642988474
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 642988473}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1286465775}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &642988475
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 642988473}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 1f20223b10be10d478250a03bb7ae27f, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ Line: {fileID: 642988473}
+ GazeRayRenderer: {fileID: 642988476}
+ m_ActionReferencePose: {fileID: -3621186198135720729, guid: 080a38524d6ab064e91f8ff9cd45bb9b, type: 3}
+--- !u!120 &642988476
+LineRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 642988473}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 0
+ m_LightProbeUsage: 0
+ m_ReflectionProbeUsage: 0
+ m_RayTracingMode: 0
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_Positions:
+ - {x: 0, y: 0, z: 0}
+ - {x: 0, y: 0, z: 4}
+ m_Parameters:
+ serializedVersion: 3
+ widthMultiplier: 0.1
+ widthCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0.033519745
+ value: 0.056604385
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ colorGradient:
+ serializedVersion: 2
+ key0: {r: 0.23529413, g: 0.23529413, b: 0.23529413, a: 1}
+ key1: {r: 1, g: 1, b: 1, a: 1}
+ key2: {r: 0, g: 0, b: 0, a: 0}
+ key3: {r: 0, g: 0, b: 0, a: 0}
+ key4: {r: 0, g: 0, b: 0, a: 0}
+ key5: {r: 0, g: 0, b: 0, a: 0}
+ key6: {r: 0, g: 0, b: 0, a: 0}
+ key7: {r: 0, g: 0, b: 0, a: 0}
+ ctime0: 0
+ ctime1: 65535
+ ctime2: 0
+ ctime3: 0
+ ctime4: 0
+ ctime5: 0
+ ctime6: 0
+ ctime7: 0
+ atime0: 0
+ atime1: 65535
+ atime2: 0
+ atime3: 0
+ atime4: 0
+ atime5: 0
+ atime6: 0
+ atime7: 0
+ m_Mode: 0
+ m_NumColorKeys: 2
+ m_NumAlphaKeys: 2
+ numCornerVertices: 0
+ numCapVertices: 0
+ alignment: 0
+ textureMode: 0
+ shadowBias: 0
+ generateLightingData: 0
+ m_UseWorldSpace: 1
+ m_Loop: 0
+--- !u!1 &705507993
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 705507995}
+ - component: {fileID: 705507994}
+ m_Layer: 0
+ m_Name: Directional Light
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!108 &705507994
+Light:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 705507993}
+ m_Enabled: 1
+ serializedVersion: 10
+ m_Type: 1
+ m_Shape: 0
+ m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
+ m_Intensity: 1
+ m_Range: 10
+ m_SpotAngle: 30
+ m_InnerSpotAngle: 21.80208
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 2
+ m_Resolution: -1
+ m_CustomResolution: -1
+ m_Strength: 1
+ m_Bias: 0.05
+ m_NormalBias: 0.4
+ m_NearPlane: 0.2
+ m_CullingMatrixOverride:
+ e00: 1
+ e01: 0
+ e02: 0
+ e03: 0
+ e10: 0
+ e11: 1
+ e12: 0
+ e13: 0
+ e20: 0
+ e21: 0
+ e22: 1
+ e23: 0
+ e30: 0
+ e31: 0
+ e32: 0
+ e33: 1
+ m_UseCullingMatrixOverride: 0
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingLayerMask: 1
+ m_Lightmapping: 1
+ m_LightShadowCasterMode: 0
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
+ m_UseBoundingSphereOverride: 0
+ m_UseViewFrustumForShadowCasterCull: 1
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
+--- !u!4 &705507995
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 705507993}
+ m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
+ m_LocalPosition: {x: 0, y: 3, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!1 &963194225
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 963194228}
+ - component: {fileID: 963194227}
+ - component: {fileID: 963194226}
+ - component: {fileID: 963194229}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!81 &963194226
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 963194225}
+ m_Enabled: 1
+--- !u!20 &963194227
+Camera:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 963194225}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 1
+ m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+ m_projectionMatrixMode: 1
+ m_GateFitMode: 2
+ m_FOVAxisMode: 0
+ m_SensorSize: {x: 36, y: 24}
+ m_LensShift: {x: 0, y: 0}
+ m_FocalLength: 50
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.1
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 1
+ m_AllowMSAA: 1
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+--- !u!4 &963194228
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 963194225}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 1, z: -10}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 353911962}
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &963194229
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 963194225}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5a2a9c34df4095f47b9ca8f975175f5b, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Device: 0
+ m_PoseSource: 2
+ m_PoseProviderComponent: {fileID: 0}
+ m_TrackingType: 0
+ m_UpdateType: 0
+ m_UseRelativeTransform: 0
+--- !u!1001 &964975220
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ m_TransformParent: {fileID: 1286465775}
+ m_Modifications:
+ - target: {fileID: 4346727374823546882, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_Name
+ value: GripPose
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_RootOrder
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalScale.x
+ value: 0.2
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalScale.y
+ value: 0.2
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalScale.z
+ value: 0.2
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+--- !u!4 &964975221 stripped
+Transform:
+ m_CorrespondingSourceObject: {fileID: 4346727374823547005, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ m_PrefabInstance: {fileID: 964975220}
+ m_PrefabAsset: {fileID: 0}
+--- !u!1 &964975222 stripped
+GameObject:
+ m_CorrespondingSourceObject: {fileID: 4346727374823546882, guid: 71d5e99cf346f174db130c7585b6a3f8, type: 3}
+ m_PrefabInstance: {fileID: 964975220}
+ m_PrefabAsset: {fileID: 0}
+--- !u!114 &964975223
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 964975222}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: c2fadf230d1919748a9aa21d40f74619, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_TrackingType: 0
+ m_UpdateType: 0
+ m_PositionInput:
+ m_UseReference: 0
+ m_Action:
+ m_Name: Position Input
+ m_Type: 0
+ m_ExpectedControlType:
+ m_Id: 8d7bb445-ceec-4022-ab92-4d79ca90cc18
+ m_Processors:
+ m_Interactions:
+ m_SingletonActionBindings:
+ - m_Name:
+ m_Id: 491201d0-b6b9-4ee5-8648-ff4e72c07cb7
+ m_Path: {LeftHand}/devicePose/position
+ m_Interactions:
+ m_Processors:
+ m_Groups:
+ m_Action: Position Input
+ m_Flags: 0
+ m_Flags: 0
+ m_Reference: {fileID: 0}
+ m_RotationInput:
+ m_UseReference: 0
+ m_Action:
+ m_Name: Rotation Input
+ m_Type: 0
+ m_ExpectedControlType:
+ m_Id: 378f0e0e-6a9c-4769-afb6-714eec375da4
+ m_Processors:
+ m_Interactions:
+ m_SingletonActionBindings:
+ - m_Name:
+ m_Id: ad40f952-2d15-455f-b701-2175997c1680
+ m_Path: {LeftHand}/devicePose/rotation
+ m_Interactions:
+ m_Processors:
+ m_Groups:
+ m_Action: Rotation Input
+ m_Flags: 0
+ m_Flags: 0
+ m_Reference: {fileID: 0}
+ m_PositionAction:
+ m_Name:
+ m_Type: 0
+ m_ExpectedControlType:
+ m_Id:
+ m_Processors:
+ m_Interactions:
+ m_SingletonActionBindings: []
+ m_Flags: 0
+ m_RotationAction:
+ m_Name:
+ m_Type: 0
+ m_ExpectedControlType:
+ m_Id:
+ m_Processors:
+ m_Interactions:
+ m_SingletonActionBindings: []
+ m_Flags: 0
+ m_HasMigratedActions: 1
+--- !u!1 &1013272644 stripped
+GameObject:
+ m_CorrespondingSourceObject: {fileID: 1139942279644765724, guid: 26eb62328811e3b41bb1c5e4046cf8bc, type: 3}
+ m_PrefabInstance: {fileID: 1139942280017852737}
+ m_PrefabAsset: {fileID: 0}
+--- !u!1 &1174834769
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1174834770}
+ - component: {fileID: 1174834772}
+ - component: {fileID: 1174834771}
+ m_Layer: 0
+ m_Name: SqueezeVal
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1174834770
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1174834769}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: -5, y: -3.213283, z: -0.07335186}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1286465775}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!23 &1174834771
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1174834769}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!114 &1174834772
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1174834769}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 393fd0a40b85a9a4b981076df200a2f7, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_ActionReferenceTrigger: {fileID: 4375789157635192129, guid: 080a38524d6ab064e91f8ff9cd45bb9b, type: 3}
+ pinchValue: {fileID: 1290197106}
+--- !u!1 &1286465774
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1286465775}
+ m_Layer: 0
+ m_Name: Left
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1286465775
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1286465774}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1174834770}
+ - {fileID: 964975221}
+ - {fileID: 642988474}
+ - {fileID: 174275606}
+ m_Father: {fileID: 2132622477}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1290197104
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1290197105}
+ - component: {fileID: 1290197107}
+ - component: {fileID: 1290197106}
+ m_Layer: 0
+ m_Name: SqueezeVal
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1290197105
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1290197104}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 9, y: -0.00000011920929, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1377649254}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!102 &1290197106
+TextMesh:
+ serializedVersion: 3
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1290197104}
+ m_Text:
+ m_OffsetZ: 30
+ m_CharacterSize: 1
+ m_LineSpacing: 1
+ m_Anchor: 0
+ m_Alignment: 0
+ m_TabSize: 4
+ m_FontSize: 0
+ m_FontStyle: 0
+ m_RichText: 1
+ m_Font: {fileID: 0}
+ m_Color:
+ serializedVersion: 2
+ rgba: 4294967295
+--- !u!23 &1290197107
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1290197104}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!1 &1340468155
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1340468156}
+ - component: {fileID: 1340468158}
+ - component: {fileID: 1340468157}
+ m_Layer: 0
+ m_Name: SqueezeVal
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1340468156
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1340468155}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 8.5, y: -3.2132826, z: -0.07335186}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 538313238}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!23 &1340468157
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1340468155}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!114 &1340468158
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1340468155}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 393fd0a40b85a9a4b981076df200a2f7, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_ActionReferenceTrigger: {fileID: 405682012955777798, guid: 080a38524d6ab064e91f8ff9cd45bb9b, type: 3}
+ pinchValue: {fileID: 131124986}
+--- !u!1 &1377649253
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1377649254}
+ - component: {fileID: 1377649256}
+ - component: {fileID: 1377649255}
+ m_Layer: 0
+ m_Name: LeftSqueeze
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1377649254
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1377649253}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: -3.2, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1290197105}
+ m_Father: {fileID: 353911962}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!102 &1377649255
+TextMesh:
+ serializedVersion: 3
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1377649253}
+ m_Text: 'Left Squeeze :'
+ m_OffsetZ: 30
+ m_CharacterSize: 1
+ m_LineSpacing: 1
+ m_Anchor: 0
+ m_Alignment: 0
+ m_TabSize: 4
+ m_FontSize: 0
+ m_FontStyle: 0
+ m_RichText: 1
+ m_Font: {fileID: 0}
+ m_Color:
+ serializedVersion: 2
+ rgba: 4294967295
+--- !u!23 &1377649256
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1377649253}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!1 &1502571525
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1502571526}
+ - component: {fileID: 1502571528}
+ - component: {fileID: 1502571527}
+ m_Layer: 0
+ m_Name: RightSqueeze
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1502571526
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1502571525}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 15, y: -3.2, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 131124985}
+ m_Father: {fileID: 353911962}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!102 &1502571527
+TextMesh:
+ serializedVersion: 3
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1502571525}
+ m_Text: 'Right Squeeze:'
+ m_OffsetZ: 30
+ m_CharacterSize: 1
+ m_LineSpacing: 1
+ m_Anchor: 0
+ m_Alignment: 0
+ m_TabSize: 4
+ m_FontSize: 0
+ m_FontStyle: 0
+ m_RichText: 1
+ m_Font: {fileID: 0}
+ m_Color:
+ serializedVersion: 2
+ rgba: 4294967295
+--- !u!23 &1502571528
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1502571525}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!1 &1539795193
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1539795194}
+ - component: {fileID: 1539795197}
+ - component: {fileID: 1539795196}
+ m_Layer: 0
+ m_Name: SelectVal
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1539795194
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1539795193}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 9, y: -0.00000011920929, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1636965490}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!102 &1539795196
+TextMesh:
+ serializedVersion: 3
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1539795193}
+ m_Text:
+ m_OffsetZ: 30
+ m_CharacterSize: 1
+ m_LineSpacing: 1
+ m_Anchor: 0
+ m_Alignment: 0
+ m_TabSize: 4
+ m_FontSize: 0
+ m_FontStyle: 0
+ m_RichText: 1
+ m_Font: {fileID: 0}
+ m_Color:
+ serializedVersion: 2
+ rgba: 4294967295
+--- !u!23 &1539795197
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1539795193}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!1 &1636965489
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1636965490}
+ - component: {fileID: 1636965492}
+ - component: {fileID: 1636965491}
+ m_Layer: 0
+ m_Name: LeftSelect
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1636965490
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1636965489}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: -1.5, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1539795194}
+ m_Father: {fileID: 353911962}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!102 &1636965491
+TextMesh:
+ serializedVersion: 3
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1636965489}
+ m_Text: 'Left Select :'
+ m_OffsetZ: 30
+ m_CharacterSize: 1
+ m_LineSpacing: 1
+ m_Anchor: 0
+ m_Alignment: 0
+ m_TabSize: 4
+ m_FontSize: 0
+ m_FontStyle: 0
+ m_RichText: 1
+ m_Font: {fileID: 0}
+ m_Color:
+ serializedVersion: 2
+ rgba: 4294967295
+--- !u!23 &1636965492
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1636965489}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!1 &1829646210
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1829646212}
+ - component: {fileID: 1829646211}
+ - component: {fileID: 1829646213}
+ m_Layer: 0
+ m_Name: AimPose
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!120 &1829646211
+LineRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1829646210}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 0
+ m_LightProbeUsage: 0
+ m_ReflectionProbeUsage: 0
+ m_RayTracingMode: 0
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_Positions:
+ - {x: 0, y: 0, z: 0}
+ - {x: 0, y: 0, z: 4}
+ m_Parameters:
+ serializedVersion: 3
+ widthMultiplier: 0.1
+ widthCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0.033519745
+ value: 0.056604385
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ colorGradient:
+ serializedVersion: 2
+ key0: {r: 0.23529413, g: 0.23529413, b: 0.23529413, a: 1}
+ key1: {r: 1, g: 1, b: 1, a: 1}
+ key2: {r: 0, g: 0, b: 0, a: 0}
+ key3: {r: 0, g: 0, b: 0, a: 0}
+ key4: {r: 0, g: 0, b: 0, a: 0}
+ key5: {r: 0, g: 0, b: 0, a: 0}
+ key6: {r: 0, g: 0, b: 0, a: 0}
+ key7: {r: 0, g: 0, b: 0, a: 0}
+ ctime0: 0
+ ctime1: 65535
+ ctime2: 0
+ ctime3: 0
+ ctime4: 0
+ ctime5: 0
+ ctime6: 0
+ ctime7: 0
+ atime0: 0
+ atime1: 65535
+ atime2: 0
+ atime3: 0
+ atime4: 0
+ atime5: 0
+ atime6: 0
+ atime7: 0
+ m_Mode: 0
+ m_NumColorKeys: 2
+ m_NumAlphaKeys: 2
+ numCornerVertices: 0
+ numCapVertices: 0
+ alignment: 0
+ textureMode: 0
+ shadowBias: 0
+ generateLightingData: 0
+ m_UseWorldSpace: 1
+ m_Loop: 0
+--- !u!4 &1829646212
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1829646210}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 538313238}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1829646213
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1829646210}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 1f20223b10be10d478250a03bb7ae27f, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ Line: {fileID: 1829646210}
+ GazeRayRenderer: {fileID: 1829646211}
+ m_ActionReferencePose: {fileID: 5176057270050798957, guid: 080a38524d6ab064e91f8ff9cd45bb9b, type: 3}
+--- !u!1 &1845592525
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1845592526}
+ - component: {fileID: 1845592528}
+ - component: {fileID: 1845592527}
+ m_Layer: 0
+ m_Name: SelectVal
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1845592526
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1845592525}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 9, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 262108937}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!102 &1845592527
+TextMesh:
+ serializedVersion: 3
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1845592525}
+ m_Text:
+ m_OffsetZ: 30
+ m_CharacterSize: 1
+ m_LineSpacing: 1
+ m_Anchor: 0
+ m_Alignment: 0
+ m_TabSize: 4
+ m_FontSize: 0
+ m_FontStyle: 0
+ m_RichText: 1
+ m_Font: {fileID: 0}
+ m_Color:
+ serializedVersion: 2
+ rgba: 4294967295
+--- !u!23 &1845592528
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1845592525}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!1 &1869704026
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1869704028}
+ - component: {fileID: 1869704027}
+ m_Layer: 0
+ m_Name: SwitchHand
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1869704027
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1869704026}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 2642121393e03fd46ba257307ca9cb51, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ hand3D: {fileID: 575697743}
+ handSkeleton: {fileID: 1013272644}
+--- !u!4 &1869704028
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1869704026}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -0.015609741, y: -0.013282776, z: -0.07335153}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &2132622476
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2132622477}
+ m_Layer: 0
+ m_Name: HandInteraction
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &2132622477
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2132622476}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1286465775}
+ - {fileID: 538313238}
+ m_Father: {fileID: 0}
+ m_RootOrder: 5
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1001 &1139942280017852737
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ m_TransformParent: {fileID: 0}
+ m_Modifications:
+ - target: {fileID: 1139942279644765724, guid: 26eb62328811e3b41bb1c5e4046cf8bc, type: 3}
+ propertyPath: m_Name
+ value: SkeletonHand
+ objectReference: {fileID: 0}
+ - target: {fileID: 1139942279644765727, guid: 26eb62328811e3b41bb1c5e4046cf8bc, type: 3}
+ propertyPath: m_RootOrder
+ value: 3
+ objectReference: {fileID: 0}
+ - target: {fileID: 1139942279644765727, guid: 26eb62328811e3b41bb1c5e4046cf8bc, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1139942279644765727, guid: 26eb62328811e3b41bb1c5e4046cf8bc, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1139942279644765727, guid: 26eb62328811e3b41bb1c5e4046cf8bc, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1139942279644765727, guid: 26eb62328811e3b41bb1c5e4046cf8bc, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 1139942279644765727, guid: 26eb62328811e3b41bb1c5e4046cf8bc, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1139942279644765727, guid: 26eb62328811e3b41bb1c5e4046cf8bc, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1139942279644765727, guid: 26eb62328811e3b41bb1c5e4046cf8bc, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1139942279644765727, guid: 26eb62328811e3b41bb1c5e4046cf8bc, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1139942279644765727, guid: 26eb62328811e3b41bb1c5e4046cf8bc, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1139942279644765727, guid: 26eb62328811e3b41bb1c5e4046cf8bc, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: 26eb62328811e3b41bb1c5e4046cf8bc, type: 3}
+--- !u!1001 &7423157989523861034
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ m_TransformParent: {fileID: 0}
+ m_Modifications:
+ - target: {fileID: 6957748757999106292, guid: 9717c3a8fd1feb14a866c93d1d5cecc0, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6957748757999106292, guid: 9717c3a8fd1feb14a866c93d1d5cecc0, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6957748757999106292, guid: 9717c3a8fd1feb14a866c93d1d5cecc0, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6957748758881164380, guid: 9717c3a8fd1feb14a866c93d1d5cecc0, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6957748758881164380, guid: 9717c3a8fd1feb14a866c93d1d5cecc0, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6957748758881164380, guid: 9717c3a8fd1feb14a866c93d1d5cecc0, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7423157989283898626, guid: 9717c3a8fd1feb14a866c93d1d5cecc0, type: 3}
+ propertyPath: m_Name
+ value: 3DHand
+ objectReference: {fileID: 0}
+ - target: {fileID: 7423157989283898627, guid: 9717c3a8fd1feb14a866c93d1d5cecc0, type: 3}
+ propertyPath: m_RootOrder
+ value: 4
+ objectReference: {fileID: 0}
+ - target: {fileID: 7423157989283898627, guid: 9717c3a8fd1feb14a866c93d1d5cecc0, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7423157989283898627, guid: 9717c3a8fd1feb14a866c93d1d5cecc0, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7423157989283898627, guid: 9717c3a8fd1feb14a866c93d1d5cecc0, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7423157989283898627, guid: 9717c3a8fd1feb14a866c93d1d5cecc0, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 7423157989283898627, guid: 9717c3a8fd1feb14a866c93d1d5cecc0, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7423157989283898627, guid: 9717c3a8fd1feb14a866c93d1d5cecc0, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7423157989283898627, guid: 9717c3a8fd1feb14a866c93d1d5cecc0, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7423157989283898627, guid: 9717c3a8fd1feb14a866c93d1d5cecc0, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7423157989283898627, guid: 9717c3a8fd1feb14a866c93d1d5cecc0, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7423157989283898627, guid: 9717c3a8fd1feb14a866c93d1d5cecc0, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: 9717c3a8fd1feb14a866c93d1d5cecc0, type: 3}
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scenes/HandTrackingScene.unity.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scenes/HandTrackingScene.unity.meta
new file mode 100644
index 0000000..4549231
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scenes/HandTrackingScene.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 8d77374400df33e4396eb7e610d731d7
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts.meta
new file mode 100644
index 0000000..754c520
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 686c57b9d62a14c47b8353ea34d46bb3
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/ActionAssetEnabler.cs b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/ActionAssetEnabler.cs
new file mode 100644
index 0000000..65837d5
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/ActionAssetEnabler.cs
@@ -0,0 +1,24 @@
+using UnityEngine.InputSystem;
+
+namespace UnityEngine.XR.OpenXR.Samples.ControllerSample
+{
+ public class ActionAssetEnabler : MonoBehaviour
+ {
+ [SerializeField]
+ InputActionAsset m_ActionAsset;
+ public InputActionAsset actionAsset
+ {
+ get => m_ActionAsset;
+ set => m_ActionAsset = value;
+ }
+
+ private void OnEnable()
+ {
+ if(m_ActionAsset != null)
+ {
+ m_ActionAsset.Enable();
+ }
+ }
+
+ }
+}
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/ActionAssetEnabler.cs.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/ActionAssetEnabler.cs.meta
new file mode 100644
index 0000000..2240030
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/ActionAssetEnabler.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3e6db3fe75b0e5d48ba6decfa5d009fc
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/Controller.cs b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/Controller.cs
new file mode 100644
index 0000000..af15bef
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/Controller.cs
@@ -0,0 +1,83 @@
+using System;
+using UnityEngine.InputSystem;
+using UnityEngine.UI;
+using UnityEngine;
+
+public class Controller : MonoBehaviour
+{
+ [SerializeField]
+ private InputActionReference m_ActionReferenceTrigger;
+ public InputActionReference actionReferenceTrigger { get => m_ActionReferenceTrigger ; set => m_ActionReferenceTrigger=value; }
+
+ public TextMesh pinchValue;
+ //[SerializeField]
+ //private InputActionReference m_ActionReferenceGrip;
+ //public InputActionReference actionReferenceGrip { get => m_ActionReferenceGrip ; set => m_ActionReferenceGrip=value; }
+
+ Type lastActiveType_Trigger = null;
+
+ // Update is called once per frame
+ void Update()
+ {
+ pinchValue.text = "0";
+ if ( actionReferenceTrigger != null && actionReferenceTrigger.action != null
+ && actionReferenceTrigger.action.enabled && actionReferenceTrigger.action.controls.Count > 0
+ /*&& actionReferenceGrip != null && actionReferenceGrip.action != null
+ && actionReferenceGrip.action.enabled && actionReferenceGrip.action.controls.Count > 0*/)
+ {
+ // Grip
+ //Type typeToUse_Grip = null;
+ //if(actionReferenceGrip.action.activeControl != null)
+ //{
+ // typeToUse_Grip = actionReferenceGrip.action.activeControl.valueType;
+ //}
+ //else
+ //{
+ // typeToUse_Grip = lastActiveType_Grip;
+ //}
+
+ //if(typeToUse_Grip == typeof(float))
+ //{
+ // lastActiveType_Grip = typeof(float);
+ // float value = actionReferenceGrip.action.ReadValue();
+ // if(value > 0.5)
+ // {
+ // if(!isSwitchedMeshPrefab)
+ // {
+ // isSwitchedMeshPrefab = true;
+ // Debug.Log("Press Button B.");
+ // //if(MeshSubSystem != null)
+ // //{
+ // // MeshSubSystem.GetComponent().SwitchMeshPrefab();
+ // //}
+ // }
+ // }
+ // else
+ // {
+ // isSwitchedMeshPrefab = false;
+ // }
+ //}
+
+ // Trigger
+ Type typeToUse_Trigger = null;
+ if(actionReferenceTrigger.action.activeControl != null)
+ {
+ typeToUse_Trigger = actionReferenceTrigger.action.activeControl.valueType;
+ }
+ else
+ {
+ typeToUse_Trigger = lastActiveType_Trigger;
+ }
+
+ if(typeToUse_Trigger == typeof(float))
+ {
+ lastActiveType_Trigger = typeof(float);
+ float value = actionReferenceTrigger.action.ReadValue();
+ pinchValue.text = value.ToString();
+
+ }
+
+ }
+ }
+
+}
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/Controller.cs.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/Controller.cs.meta
new file mode 100644
index 0000000..dc685cb
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/Controller.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 393fd0a40b85a9a4b981076df200a2f7
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/FrameWork.cs b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/FrameWork.cs
new file mode 100644
index 0000000..7a40781
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/FrameWork.cs
@@ -0,0 +1,290 @@
+using System;
+using UnityEngine;
+using UnityEngine.XR.OpenXR;
+using VIVE.HandTracking;
+[Obsolete("Use HandManager instead")]
+public static class FrameWork
+{
+ private class HandData
+ {
+ public bool isStarted;
+ public XrHandEXT hand;
+ public ulong trackerHandle;
+ public bool isActive;
+ public int jointUpdatedFrame = -1;
+ public XrHandJointLocationEXT[] joints = new XrHandJointLocationEXT[(int)XrHandJointEXT.XR_HAND_JOINT_MAX_ENUM_EXT];
+ public XrHandJointVelocityEXT[] velocities = new XrHandJointVelocityEXT[(int)XrHandJointEXT.XR_HAND_JOINT_MAX_ENUM_EXT];
+
+ public bool isCreated { get { return trackerHandle != default; } }
+
+ public void ClearJoints()
+ {
+ Array.Clear(joints, 0, joints.Length);
+ Array.Clear(velocities, 0, velocities.Length);
+ }
+ }
+
+ private static HandTracking_OpenXR_API feature;
+ private static bool isInitialized;
+ private static bool isSystemSupported;
+ private static ulong refSpace;
+ private static HandData leftHandData = new HandData() { hand = XrHandEXT.XR_HAND_LEFT_EXT };
+ private static HandData rightHandData = new HandData() { hand = XrHandEXT.XR_HAND_RIGHT_EXT };
+
+ private static bool isRefSpaceCreated { get { return refSpace != default; } }
+
+ private static HandData GetHandData(bool isLeft)
+ {
+ return isLeft ? leftHandData : rightHandData;
+ }
+
+ public static bool Initialize()
+ {
+ if (!isInitialized)
+ {
+ if (feature == null)
+ {
+ feature = OpenXRSettings.Instance.GetFeature();
+
+ if (feature != null)
+ {
+ // FIXME: Assume featuer instance won't be destroied and created to a new one
+ feature.onSessionCreate += OnFeatureSessionCreate;
+ feature.onSessionDestroy += OnFeatureSessionDestroy;
+ feature.onSystemChange += OnFeatureSystemChange;
+ }
+ }
+
+ if (feature != null && feature.IsEnabledAndInitialized)
+ {
+ UpdateSystemSupported();
+ isInitialized = true;
+ }
+ }
+
+ return isInitialized;
+ }
+
+ private static void OnFeatureSessionCreate(ulong xrSession)
+ {
+ TryCreateHandTracker(leftHandData);
+ TryCreateHandTracker(rightHandData);
+ }
+
+ private static void OnFeatureSessionDestroy(ulong xrSession)
+ {
+ DestroyHandTracker(leftHandData);
+ DestroyHandTracker(rightHandData);
+ DestroyRefSpace();
+ }
+
+ private static void OnFeatureSystemChange(ulong systemId)
+ {
+ UpdateSystemSupported();
+ }
+
+ private static void UpdateSystemSupported()
+ {
+ if (feature == null || !feature.IsEnabledAndInitialized)
+ {
+ isSystemSupported = false;
+ }
+ else
+ {
+ isSystemSupported = feature.SystemSupportsHandTracking(out var result);
+
+ if (!isSystemSupported)
+ {
+ if (result != XrResult.XR_SUCCESS)
+ {
+ Debug.LogWarning("Fail SystemSupportsHandTracking: " + result);
+ }
+ else
+ {
+ Debug.LogWarning("Hand tracking not supported by the system");
+ }
+ }
+ }
+ }
+
+ private static bool TryCreateHandTracker(HandData handData)
+ {
+ if (!handData.isStarted) { return false; }
+ if (!Initialize()) { return false; }
+ if (!isSystemSupported) { return false; }
+ if (!feature.IsSessionCreated) { return false; }
+
+ if (!handData.isCreated)
+ {
+ if (!feature.TryCreateHandTracker(handData.hand, out handData.trackerHandle, out var result))
+ {
+ handData.trackerHandle = default;
+ Debug.LogWarning("Fail CreateHandTracker: " + result);
+ }
+ }
+
+ return handData.isCreated;
+ }
+
+ private static void DestroyHandTracker(HandData handData)
+ {
+ if (!handData.isCreated) { return; }
+ if (!Initialize()) { return; }
+
+ feature.TryDestroyHandTracker(handData.trackerHandle, out _);
+ handData.trackerHandle = default;
+ handData.ClearJoints();
+ }
+
+ private static bool InitializeRefSpace()
+ {
+ if (!Initialize()) { return false; }
+ if (!isSystemSupported) { return false; }
+ if (!feature.IsSessionCreated) { return false; }
+
+ if (!isRefSpaceCreated)
+ {
+ const XrReferenceSpaceType preferSpaceType = XrReferenceSpaceType.XR_REFERENCE_SPACE_TYPE_STAGE;
+ XrReferenceSpaceType spaceType;
+ if (!feature.TryGetSupportedReferenceSpaceType(preferSpaceType, out spaceType, out var result))
+ {
+ Debug.LogWarning("Fail GetSupportedReferenceSpaceType: " + result);
+ }
+ else
+ {
+ if (!feature.TryCreateReferenceSpace(
+ spaceType,
+ new XrVector3f(0f, 0f, 0f),
+ new XrQuaternionf(0f, 0f, 0f, 1f),
+ out refSpace,
+ out result))
+ {
+ refSpace = default;
+ Debug.LogWarning("Fail CreateReferenceSpace: " + result);
+ }
+ }
+ }
+
+ return isRefSpaceCreated;
+ }
+
+ private static void DestroyRefSpace()
+ {
+ if (!isRefSpaceCreated) { return; }
+
+ if (Initialize())
+ {
+ if (!feature.TryDestroyReferenceSpace(refSpace, out var result))
+ {
+ Debug.LogWarning("Fail DestroyReferenceSpace: " + result);
+ }
+ }
+
+ refSpace = default;
+ }
+
+ public static void StartFrameWork(bool isLeft)
+ {
+ var handData = GetHandData(isLeft);
+ handData.isStarted = true;
+
+ TryCreateHandTracker(handData);
+ }
+
+ public static void StopFrameWork(bool isLeft)
+ {
+ var handData = GetHandData(isLeft);
+ handData.isStarted = false;
+
+ DestroyHandTracker(handData);
+ }
+
+ public static bool GetJointLocation(bool isleft, out XrHandJointLocationEXT[] joints, bool forceUpdate = false)
+ {
+ var handData = GetHandData(isleft);
+ if (handData.isCreated)
+ {
+ if (forceUpdate || handData.jointUpdatedFrame != Time.frameCount)
+ {
+ handData.jointUpdatedFrame = Time.frameCount;
+
+ if (InitializeRefSpace())
+ {
+ if (!feature.TryLocateHandJoints(
+ handData.trackerHandle,
+ refSpace,
+ out handData.isActive,
+ handData.joints,
+ out var result))
+ {
+ handData.isActive = false;
+ Debug.LogWarning("Fail LocateHandJoints: " + result);
+ }
+ }
+ }
+ }
+
+ joints = handData.joints;
+ return handData.isActive;
+ }
+
+ public static bool GetJointLocation(bool isleft, out XrHandJointLocationEXT[] joints,ref XrHandJointsMotionRangeEXT type, bool forceUpdate = false)
+ {
+ var handData = GetHandData(isleft);
+ if (handData.isCreated)
+ {
+ if (forceUpdate || handData.jointUpdatedFrame != Time.frameCount)
+ {
+ handData.jointUpdatedFrame = Time.frameCount;
+
+ if (InitializeRefSpace())
+ {
+ if (!feature.TryLocateHandJoints(
+ handData.trackerHandle,
+ refSpace,
+ ref type,
+ out handData.isActive,
+ handData.joints,
+ out var result))
+ {
+ handData.isActive = false;
+ Debug.LogWarning("Fail LocateHandJoints: " + result);
+ }
+ }
+ }
+ }
+ joints = handData.joints;
+ return handData.isActive;
+ }
+
+ public static bool GetJointLocation(bool isleft, out XrHandJointLocationEXT[] joints, out XrHandJointVelocityEXT[] velocities, bool forceUpdate = false)
+ {
+ var handData = GetHandData(isleft);
+ if (handData.isCreated)
+ {
+ if (forceUpdate || handData.jointUpdatedFrame != Time.frameCount)
+ {
+ handData.jointUpdatedFrame = Time.frameCount;
+
+ if (InitializeRefSpace())
+ {
+ if (!feature.TryLocateHandJoints(
+ handData.trackerHandle,
+ refSpace,
+ out handData.isActive,
+ handData.joints,
+ handData.velocities,
+ out var result))
+ {
+ handData.isActive = false;
+ Debug.LogWarning("Fail LocateHandJoints: " + result);
+ }
+ }
+ }
+ }
+
+ joints = handData.joints;
+ velocities = handData.velocities;
+ return handData.isActive;
+ }
+}
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/FrameWork.cs.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/FrameWork.cs.meta
new file mode 100644
index 0000000..82c041f
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/FrameWork.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 89e4cae3bc180f14c906224f93d20210
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/InputMaster.cs b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/InputMaster.cs
new file mode 100644
index 0000000..730dc48
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/InputMaster.cs
@@ -0,0 +1,152 @@
+//------------------------------------------------------------------------------
+//
+// This code was auto-generated by com.unity.inputsystem:InputActionCodeGenerator
+// version 1.4.1
+// from Assets/Samples/VIVE OpenXR Plugin - Windows/1.0.12/HandTracking Example/Scripts/InputMaster.inputactions
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine.InputSystem;
+using UnityEngine.InputSystem.Utilities;
+
+public partial class @InputMaster : IInputActionCollection2, IDisposable
+{
+ public InputActionAsset asset { get; }
+ public @InputMaster()
+ {
+ asset = InputActionAsset.FromJson(@"{
+ ""name"": ""InputMaster"",
+ ""maps"": [
+ {
+ ""name"": ""Keyboard"",
+ ""id"": ""94ee31f8-c9ac-4138-b5b9-ad5ecec1870d"",
+ ""actions"": [
+ {
+ ""name"": ""SpacePress"",
+ ""type"": ""Button"",
+ ""id"": ""2a246a3d-969f-4d95-8e12-9e0000e5b19c"",
+ ""expectedControlType"": ""Button"",
+ ""processors"": """",
+ ""interactions"": """",
+ ""initialStateCheck"": false
+ }
+ ],
+ ""bindings"": [
+ {
+ ""name"": """",
+ ""id"": ""d6ea233e-905c-4913-a644-8a84098fea9f"",
+ ""path"": ""/space"",
+ ""interactions"": """",
+ ""processors"": """",
+ ""groups"": """",
+ ""action"": ""SpacePress"",
+ ""isComposite"": false,
+ ""isPartOfComposite"": false
+ }
+ ]
+ }
+ ],
+ ""controlSchemes"": []
+}");
+ // Keyboard
+ m_Keyboard = asset.FindActionMap("Keyboard", throwIfNotFound: true);
+ m_Keyboard_SpacePress = m_Keyboard.FindAction("SpacePress", throwIfNotFound: true);
+ }
+
+ public void Dispose()
+ {
+ UnityEngine.Object.Destroy(asset);
+ }
+
+ public InputBinding? bindingMask
+ {
+ get => asset.bindingMask;
+ set => asset.bindingMask = value;
+ }
+
+ public ReadOnlyArray? devices
+ {
+ get => asset.devices;
+ set => asset.devices = value;
+ }
+
+ public ReadOnlyArray controlSchemes => asset.controlSchemes;
+
+ public bool Contains(InputAction action)
+ {
+ return asset.Contains(action);
+ }
+
+ public IEnumerator GetEnumerator()
+ {
+ return asset.GetEnumerator();
+ }
+
+ IEnumerator IEnumerable.GetEnumerator()
+ {
+ return GetEnumerator();
+ }
+
+ public void Enable()
+ {
+ asset.Enable();
+ }
+
+ public void Disable()
+ {
+ asset.Disable();
+ }
+ public IEnumerable bindings => asset.bindings;
+
+ public InputAction FindAction(string actionNameOrId, bool throwIfNotFound = false)
+ {
+ return asset.FindAction(actionNameOrId, throwIfNotFound);
+ }
+ public int FindBinding(InputBinding bindingMask, out InputAction action)
+ {
+ return asset.FindBinding(bindingMask, out action);
+ }
+
+ // Keyboard
+ private readonly InputActionMap m_Keyboard;
+ private IKeyboardActions m_KeyboardActionsCallbackInterface;
+ private readonly InputAction m_Keyboard_SpacePress;
+ public struct KeyboardActions
+ {
+ private @InputMaster m_Wrapper;
+ public KeyboardActions(@InputMaster wrapper) { m_Wrapper = wrapper; }
+ public InputAction @SpacePress => m_Wrapper.m_Keyboard_SpacePress;
+ public InputActionMap Get() { return m_Wrapper.m_Keyboard; }
+ public void Enable() { Get().Enable(); }
+ public void Disable() { Get().Disable(); }
+ public bool enabled => Get().enabled;
+ public static implicit operator InputActionMap(KeyboardActions set) { return set.Get(); }
+ public void SetCallbacks(IKeyboardActions instance)
+ {
+ if (m_Wrapper.m_KeyboardActionsCallbackInterface != null)
+ {
+ @SpacePress.started -= m_Wrapper.m_KeyboardActionsCallbackInterface.OnSpacePress;
+ @SpacePress.performed -= m_Wrapper.m_KeyboardActionsCallbackInterface.OnSpacePress;
+ @SpacePress.canceled -= m_Wrapper.m_KeyboardActionsCallbackInterface.OnSpacePress;
+ }
+ m_Wrapper.m_KeyboardActionsCallbackInterface = instance;
+ if (instance != null)
+ {
+ @SpacePress.started += instance.OnSpacePress;
+ @SpacePress.performed += instance.OnSpacePress;
+ @SpacePress.canceled += instance.OnSpacePress;
+ }
+ }
+ }
+ public KeyboardActions @Keyboard => new KeyboardActions(this);
+ public interface IKeyboardActions
+ {
+ void OnSpacePress(InputAction.CallbackContext context);
+ }
+}
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/InputMaster.cs.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/InputMaster.cs.meta
new file mode 100644
index 0000000..79ca399
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/InputMaster.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 00c2bfc723925654087046942f18ab09
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/InputMaster.inputactions b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/InputMaster.inputactions
new file mode 100644
index 0000000..6647aa9
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/InputMaster.inputactions
@@ -0,0 +1,34 @@
+{
+ "name": "InputMaster",
+ "maps": [
+ {
+ "name": "Keyboard",
+ "id": "94ee31f8-c9ac-4138-b5b9-ad5ecec1870d",
+ "actions": [
+ {
+ "name": "SpacePress",
+ "type": "Button",
+ "id": "2a246a3d-969f-4d95-8e12-9e0000e5b19c",
+ "expectedControlType": "Button",
+ "processors": "",
+ "interactions": "",
+ "initialStateCheck": false
+ }
+ ],
+ "bindings": [
+ {
+ "name": "",
+ "id": "d6ea233e-905c-4913-a644-8a84098fea9f",
+ "path": "/space",
+ "interactions": "",
+ "processors": "",
+ "groups": "",
+ "action": "SpacePress",
+ "isComposite": false,
+ "isPartOfComposite": false
+ }
+ ]
+ }
+ ],
+ "controlSchemes": []
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/InputMaster.inputactions.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/InputMaster.inputactions.meta
new file mode 100644
index 0000000..09a31e6
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/InputMaster.inputactions.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: d8c42cba5f401b94db94490595c0f4df
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: 8404be70184654265930450def6a9037, type: 3}
+ generateWrapperCode: 1
+ wrapperCodePath:
+ wrapperClassName:
+ wrapperCodeNamespace:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/LineRender.cs b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/LineRender.cs
new file mode 100644
index 0000000..e2c5d21
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/LineRender.cs
@@ -0,0 +1,39 @@
+using System;
+using UnityEngine.InputSystem;
+using UnityEngine.UI;
+using UnityEngine;
+
+
+public class LineRender : MonoBehaviour
+{
+ [Tooltip("Root object of Line mesh")]
+ public GameObject Line = null;
+ [SerializeField] private LineRenderer GazeRayRenderer;
+
+ [SerializeField]
+ private InputActionReference m_ActionReferencePose;
+ public InputActionReference actionReferencePose { get => m_ActionReferencePose; set => m_ActionReferencePose = value; }
+
+ // Update is called once per frame
+ void Update()
+ {
+ Vector3 DirectionCombinedLocal;
+ if (actionReferencePose != null && actionReferencePose.action != null
+ && actionReferencePose.action.enabled && actionReferencePose.action.controls.Count > 0)
+ {
+ //GazeRayRenderer.SetActive(true);
+ UnityEngine.XR.OpenXR.Input.Pose poseval = actionReferencePose.action.ReadValue();
+ Quaternion gazeRotation = poseval.rotation;
+ Quaternion orientation = new Quaternion(
+ 1 * (gazeRotation.x),
+ 1 * (gazeRotation.y),
+ 1 * gazeRotation.z,
+ 1 * gazeRotation.w);
+ DirectionCombinedLocal = orientation * Vector3.forward;
+ Vector3 DirectionCombined = Camera.main.transform.TransformDirection(DirectionCombinedLocal);
+ GazeRayRenderer.SetPosition(0, poseval.position);
+ GazeRayRenderer.SetPosition(1, poseval.position + DirectionCombinedLocal * 4);
+ }
+ }
+
+}
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/LineRender.cs.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/LineRender.cs.meta
new file mode 100644
index 0000000..c231308
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/LineRender.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1f20223b10be10d478250a03bb7ae27f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/ReadOnlyDrawer.cs b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/ReadOnlyDrawer.cs
new file mode 100644
index 0000000..27c76b0
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/ReadOnlyDrawer.cs
@@ -0,0 +1,28 @@
+using UnityEditor;
+using UnityEngine;
+
+namespace VIVE.HandTracking.Sample
+{
+ public class ReadOnlyAttribute : PropertyAttribute
+ {
+
+ }
+
+#if UNITY_EDITOR
+ [CustomPropertyDrawer(typeof(ReadOnlyAttribute))]
+ public class ReadOnlyDrawer : PropertyDrawer
+ {
+ public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
+ {
+ return EditorGUI.GetPropertyHeight(property, label, true);
+ }
+
+ public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+ {
+ GUI.enabled = false;
+ EditorGUI.PropertyField(position, property, label, true);
+ GUI.enabled = true;
+ }
+ }
+#endif
+}
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/ReadOnlyDrawer.cs.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/ReadOnlyDrawer.cs.meta
new file mode 100644
index 0000000..17ddb84
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/ReadOnlyDrawer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a85838490cd239847a9f06ea17789601
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/RenderHand.cs b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/RenderHand.cs
new file mode 100644
index 0000000..985f920
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/RenderHand.cs
@@ -0,0 +1,190 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using VIVE.HandTracking;
+
+namespace VIVE.HandTracking.Sample
+{
+ public class RenderHand : MonoBehaviour
+ {
+ // Links between keypoints, 2*i & 2*i+1 forms a link.
+ // keypoint index: 1: palm, 2-5: thumb, 6-10: index, 11-15: middle, 16-20: ring, 21-25: pinky
+ // fingers are counted from bottom to top
+ private static int[] Connections = new int[] {
+ 1, 2, 1, 6, 1, 11, 1, 16, 1, 21, // palm and finger starts
+ 2, 6, 6, 11, 11, 16, 16, 21, // finger starts
+ 2, 3, 3, 4, 4, 5, // thumb
+ 6, 7, 7, 8, 8, 9, 9, 10, // index
+ 11, 12, 12, 13, 13, 14, 14, 15, // middle
+ 16, 17, 17, 18, 18, 19, 19, 20, // ring
+ 21, 22, 22, 23, 23, 24, 24, 25 // pinky
+ };
+ [Tooltip("Draw left hand if true, right hand otherwise")]
+ public bool isLeft = false;
+ [Tooltip("Use inferred or last-known posed when hand loses tracking if true.")]
+ public bool allowUntrackedPose = false;
+ [Tooltip("Default color of hand points")]
+ public Color pointColor = Color.green;
+ [Tooltip("Default color of links between keypoints in skeleton mode")]
+ public Color linkColor = Color.white;
+ [Tooltip("Material for hand points and links")]
+ [SerializeField]
+ private Material material = null;
+ private XrHandJointsMotionRangeEXT MotionType = XrHandJointsMotionRangeEXT.XR_HAND_JOINTS_MOTION_RANGE_MAX_ENUM_EXT;
+ [Tooltip("Type of hand joints range of motion")]
+ [ReadOnly] public string HandJointsMotionRange;
+
+ private List points = new List();
+ // list of links created (only for skeleton)
+ private List links = new List();
+ // Start is called before the first frame update
+ private XrHandJointLocationEXT[] HandjointLocations = new
+ XrHandJointLocationEXT[(int)XrHandJointEXT.XR_HAND_JOINT_MAX_ENUM_EXT];
+ // shared material for all point objects
+ private Material pointMat = null;
+ // shared material for all link objects
+ private Material linkMat = null;
+ private void Start()
+ {
+ HandManager.StartFrameWork(isLeft);
+ pointMat = new Material(material);
+ if (isLeft)
+ {
+ pointColor = Color.blue;
+ }
+ else
+ {
+ pointColor = Color.red;
+ }
+ pointMat.color = pointColor;
+ linkMat = new Material(material);
+ linkMat.color = linkColor;
+
+ for (int i = 0; i < (int)XrHandJointEXT.XR_HAND_JOINT_MAX_ENUM_EXT; i++)
+ {
+ var go = GameObject.CreatePrimitive(PrimitiveType.Sphere);
+ go.name = ((XrHandJointEXT)i).ToString();
+ go.transform.parent = transform;
+ go.transform.localScale = Vector3.one * 0.012f;
+ go.SetActive(false);
+ points.Add(go);
+ go.transform.position = new Vector3((float)i * 0.1f, 0, 0);
+ // handle layer
+ go.layer = gameObject.layer;
+ // handle material
+ go.GetComponent().sharedMaterial = pointMat;
+ }
+
+ // create game objects for links between keypoints, only used in skeleton mode
+ for (int i = 0; i < Connections.Length; i += 2)
+ {
+ var go = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
+ go.name = "link" + i;
+ go.transform.parent = transform;
+ go.transform.localScale = Vector3.one * 0.005f;
+ go.SetActive(false);
+ links.Add(go);
+ // handle layer
+ go.layer = gameObject.layer;
+ // handle material
+ go.GetComponent().sharedMaterial = linkMat;
+ }
+ }
+ // Update is called once per frame
+ private void Update()
+ {
+ if (HandManager.GetJointLocation(isLeft, out HandjointLocations, ref MotionType))
+ {
+ UpdateJointLocation();
+ switch (MotionType)
+ {
+ case XrHandJointsMotionRangeEXT.XR_HAND_JOINTS_MOTION_RANGE_UNOBSTRUCTED_EXT:
+ HandJointsMotionRange = "UNOBSTRUCTED";
+ break;
+ case XrHandJointsMotionRangeEXT.XR_HAND_JOINTS_MOTION_RANGE_CONFORMING_TO_CONTROLLER_EXT:
+ HandJointsMotionRange = "CONTROLLER";
+ break;
+ default:
+ HandJointsMotionRange = "";
+ break;
+ }
+ }
+ else
+ {
+ for (int i = 0; i < points.Count; i++)
+ {
+ var go = points[i];
+ go.SetActive(false);
+ }
+
+ for (int i = 0; i < links.Count; i++)
+ {
+ var link = links[i];
+ link.SetActive(false);
+ }
+ }
+ }
+
+ private void UpdateJointLocation()
+ {
+ for (int i = 0; i < points.Count; i++)
+ {
+ var go = points[i];
+ XrQuaternionf orientation;
+ XrVector3f position;
+ float radius = HandjointLocations[i].radius;
+ if (allowUntrackedPose) //Use inferred or last-known pose when lost tracking
+ {
+ orientation = HandjointLocations[i].pose.orientation;
+ position = HandjointLocations[i].pose.position;
+ go.transform.localPosition = new Vector3(position.x, position.y, -position.z);
+ go.SetActive(true);
+ }
+ else
+ {
+ if ((HandjointLocations[i].locationFlags & (ulong)XrSpaceLocationFlags.XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT) != 0)
+ {
+ orientation = HandjointLocations[i].pose.orientation;
+ }
+ if ((HandjointLocations[i].locationFlags & (ulong)XrSpaceLocationFlags.XR_SPACE_LOCATION_POSITION_TRACKED_BIT) != 0)
+ {
+ position = HandjointLocations[i].pose.position;
+ go.transform.localPosition = new Vector3(position.x, position.y, -position.z);
+ go.SetActive(true);
+ }
+ else
+ {
+ UnityEngine.Debug.Log("Lost tracking");
+ go.SetActive(false);
+ }
+ }
+ }
+
+ for (int i = 0; i < links.Count; i++)
+ {
+ var link = links[i];
+ var pose1 = points[Connections[i * 2]].transform.position;
+ var pose2 = points[Connections[i * 2 + 1]].transform.position;
+
+ // calculate link position and rotation based on points on both end
+ link.SetActive(true);
+ link.transform.position = (pose1 + pose2) / 2;
+ var direction = pose2 - pose1;
+ link.transform.rotation = Quaternion.FromToRotation(Vector3.up, direction);
+ link.transform.localScale = new Vector3(0.006f, direction.magnitude / 2f - 0.0051f, 0.006f);
+ }
+
+ }
+ private void OnDestroy()
+ {
+ HandManager.StopFrameWork(isLeft);
+ UnityEngine.Debug.Log("OnDestroy");
+ }
+
+ //public void setHandVisible(bool isVisible)
+ //{
+ // Hand.SetActive(isVisible);
+ //}
+ }
+
+}
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/RenderHand.cs.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/RenderHand.cs.meta
new file mode 100644
index 0000000..bcc8163
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/RenderHand.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8c57cc3ae07bcce42ba395c288cba794
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/RenderModel.cs b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/RenderModel.cs
new file mode 100644
index 0000000..effcdea
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/RenderModel.cs
@@ -0,0 +1,78 @@
+using UnityEngine;
+using VIVE.HandTracking;
+
+namespace VIVE.HandTracking.Sample
+{
+ public class RenderModel : MonoBehaviour
+ {
+ private readonly Quaternion zBackModelRotFix = Quaternion.AngleAxis(180f, Vector3.up);
+
+ public Transform[] nodes = new Transform[(int)XrHandJointEXT.XR_HAND_JOINT_MAX_ENUM_EXT];
+ [Tooltip("Draw left hand if true, right hand otherwise")]
+ public bool isLeft = false;
+ [Tooltip("Use inferred or last-known posed when hand loses tracking if true.")]
+ public bool allowUntrackedPose = false;
+ [Tooltip("Root object of skinned mesh")]
+ public GameObject Hand = null;
+ private XrHandJointsMotionRangeEXT MotionType = XrHandJointsMotionRangeEXT.XR_HAND_JOINTS_MOTION_RANGE_MAX_ENUM_EXT;
+ [Tooltip("Type of hand joints range of motion")]
+ [ReadOnly]public string HandJointsMotionRange;
+
+
+ // Start is called before the first frame update
+ private void Start()
+ {
+ HandManager.StartFrameWork(isLeft);
+ }
+
+ // Update is called once per frame
+ private void Update()
+ {
+ if (HandManager.GetJointLocation(isLeft, out var joints, ref MotionType))
+ {
+ setHandVisible(true);
+
+ for (int i = (int)XrHandJointEXT.XR_HAND_JOINT_PALM_EXT; i < (int)XrHandJointEXT.XR_HAND_JOINT_MAX_ENUM_EXT; i++)
+ {
+ var posValid = (joints[i].locationFlags & (ulong)XrSpaceLocationFlags.XR_SPACE_LOCATION_POSITION_VALID_BIT) != 0;
+ var posTracked = (joints[i].locationFlags & (ulong)XrSpaceLocationFlags.XR_SPACE_LOCATION_POSITION_TRACKED_BIT) != 0;
+ var rotValid = (joints[i].locationFlags & (ulong)XrSpaceLocationFlags.XR_SPACE_LOCATION_ORIENTATION_VALID_BIT) != 0;
+ var rotTracked = (joints[i].locationFlags & (ulong)XrSpaceLocationFlags.XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT) != 0;
+
+ var pos = new Vector3(joints[i].pose.position.x, joints[i].pose.position.y, -joints[i].pose.position.z);
+ var rot = new Quaternion(-joints[i].pose.orientation.x, -joints[i].pose.orientation.y, joints[i].pose.orientation.z, joints[i].pose.orientation.w) * zBackModelRotFix;
+
+ if (posValid && (allowUntrackedPose || posTracked)) { nodes[i].position = transform.TransformPoint(pos); }
+ if (rotValid && (allowUntrackedPose || rotTracked)) { nodes[i].rotation = transform.rotation * rot; }
+ }
+ switch (MotionType)
+ {
+ case XrHandJointsMotionRangeEXT.XR_HAND_JOINTS_MOTION_RANGE_UNOBSTRUCTED_EXT:
+ HandJointsMotionRange = "UNOBSTRUCTED";
+ break;
+ case XrHandJointsMotionRangeEXT.XR_HAND_JOINTS_MOTION_RANGE_CONFORMING_TO_CONTROLLER_EXT:
+ HandJointsMotionRange = "CONTROLLER";
+ break;
+ default:
+ HandJointsMotionRange = "";
+ break;
+ }
+ }
+ else
+ {
+ setHandVisible(false);
+ }
+ }
+
+ private void OnDestroy()
+ {
+ HandManager.StopFrameWork(isLeft);
+ }
+
+ public void setHandVisible(bool isVisible)
+ {
+ Hand.SetActive(isVisible);
+ }
+ }
+
+}
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/RenderModel.cs.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/RenderModel.cs.meta
new file mode 100644
index 0000000..2f8e80e
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/RenderModel.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c19189c6a6028a74ab475048ebd154c8
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/SwitchHand.cs b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/SwitchHand.cs
new file mode 100644
index 0000000..c08c08b
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/SwitchHand.cs
@@ -0,0 +1,46 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace VIVE.HandTracking.Sample
+{
+ public class SwitchHand : MonoBehaviour
+ {
+ public InputMaster inputMaster;
+ public GameObject hand3D;
+ public GameObject handSkeleton;
+ private bool isSwitch = false;
+ private void Awake()
+ {
+ inputMaster = new InputMaster();
+ inputMaster.Enable();
+ }
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+ float ispressed = inputMaster.Keyboard.SpacePress.ReadValue();
+ if (ispressed > 0.5)
+ {
+ if(!isSwitch)
+ {
+ UnityEngine.Debug.Log("press space");
+ hand3D.SetActive(!hand3D.activeSelf);
+ handSkeleton.SetActive(!handSkeleton.activeSelf);
+ isSwitch = true;
+ }
+ }
+ else
+ {
+ isSwitch = false;
+ }
+
+ }
+ }
+
+}
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/SwitchHand.cs.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/SwitchHand.cs.meta
new file mode 100644
index 0000000..139706b
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Samples~/Scripts/SwitchHand.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2642121393e03fd46ba257307ca9cb51
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Script.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Script.meta
new file mode 100644
index 0000000..8186226
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Script.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 98067af793989634da2aed490cf3f25b
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Script/HandManager.cs b/com.htc.upm.vive.openxr/OpenXRHandTracking/Script/HandManager.cs
new file mode 100644
index 0000000..c7e4eae
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Script/HandManager.cs
@@ -0,0 +1,293 @@
+using System;
+using UnityEngine;
+using UnityEngine.XR.OpenXR;
+
+namespace VIVE.HandTracking
+{
+ public static class HandManager
+ {
+ private class HandData
+ {
+ public bool isStarted;
+ public XrHandEXT hand;
+ public ulong trackerHandle;
+ public bool isActive;
+ public int jointUpdatedFrame = -1;
+ public XrHandJointLocationEXT[] joints = new XrHandJointLocationEXT[(int)XrHandJointEXT.XR_HAND_JOINT_MAX_ENUM_EXT];
+ public XrHandJointVelocityEXT[] velocities = new XrHandJointVelocityEXT[(int)XrHandJointEXT.XR_HAND_JOINT_MAX_ENUM_EXT];
+
+ public bool isCreated { get { return trackerHandle != default; } }
+
+ public void ClearJoints()
+ {
+ Array.Clear(joints, 0, joints.Length);
+ Array.Clear(velocities, 0, velocities.Length);
+ }
+ }
+
+ private static HandTracking_OpenXR_API feature;
+ private static bool isInitialized;
+ private static bool isSystemSupported;
+ private static ulong refSpace;
+ private static HandData leftHandData = new HandData() { hand = XrHandEXT.XR_HAND_LEFT_EXT };
+ private static HandData rightHandData = new HandData() { hand = XrHandEXT.XR_HAND_RIGHT_EXT };
+
+ private static bool isRefSpaceCreated { get { return refSpace != default; } }
+
+ private static HandData GetHandData(bool isLeft)
+ {
+ return isLeft ? leftHandData : rightHandData;
+ }
+
+ public static bool Initialize()
+ {
+ if (!isInitialized)
+ {
+ if (feature == null)
+ {
+ feature = OpenXRSettings.Instance.GetFeature();
+
+ if (feature != null)
+ {
+ // FIXME: Assume featuer instance won't be destroied and created to a new one
+ feature.onSessionCreate += OnFeatureSessionCreate;
+ feature.onSessionDestroy += OnFeatureSessionDestroy;
+ feature.onSystemChange += OnFeatureSystemChange;
+ }
+ }
+
+ if (feature != null && feature.IsEnabledAndInitialized)
+ {
+ UpdateSystemSupported();
+ isInitialized = true;
+ }
+ }
+
+ return isInitialized;
+ }
+
+ private static void OnFeatureSessionCreate(ulong xrSession)
+ {
+ TryCreateHandTracker(leftHandData);
+ TryCreateHandTracker(rightHandData);
+ }
+
+ private static void OnFeatureSessionDestroy(ulong xrSession)
+ {
+ DestroyHandTracker(leftHandData);
+ DestroyHandTracker(rightHandData);
+ DestroyRefSpace();
+ }
+
+ private static void OnFeatureSystemChange(ulong systemId)
+ {
+ UpdateSystemSupported();
+ }
+
+ private static void UpdateSystemSupported()
+ {
+ if (feature == null || !feature.IsEnabledAndInitialized)
+ {
+ isSystemSupported = false;
+ }
+ else
+ {
+ isSystemSupported = feature.SystemSupportsHandTracking(out var result);
+
+ if (!isSystemSupported)
+ {
+ if (result != XrResult.XR_SUCCESS)
+ {
+ Debug.LogWarning("Fail SystemSupportsHandTracking: " + result);
+ }
+ else
+ {
+ Debug.LogWarning("Hand tracking not supported by the system");
+ }
+ }
+ }
+ }
+
+ private static bool TryCreateHandTracker(HandData handData)
+ {
+ if (!handData.isStarted) { return false; }
+ if (!Initialize()) { return false; }
+ if (!isSystemSupported) { return false; }
+ if (!feature.IsSessionCreated) { return false; }
+
+ if (!handData.isCreated)
+ {
+ if (!feature.TryCreateHandTracker(handData.hand, out handData.trackerHandle, out var result))
+ {
+ handData.trackerHandle = default;
+ Debug.LogWarning("Fail CreateHandTracker: " + result);
+ }
+ }
+
+ return handData.isCreated;
+ }
+
+ private static void DestroyHandTracker(HandData handData)
+ {
+ if (!handData.isCreated) { return; }
+ if (!Initialize()) { return; }
+
+ feature.TryDestroyHandTracker(handData.trackerHandle, out _);
+ handData.trackerHandle = default;
+ handData.ClearJoints();
+ }
+
+ private static bool InitializeRefSpace()
+ {
+ if (!Initialize()) { return false; }
+ if (!isSystemSupported) { return false; }
+ if (!feature.IsSessionCreated) { return false; }
+
+ if (!isRefSpaceCreated)
+ {
+ const XrReferenceSpaceType preferSpaceType = XrReferenceSpaceType.XR_REFERENCE_SPACE_TYPE_STAGE;
+ XrReferenceSpaceType spaceType;
+ if (!feature.TryGetSupportedReferenceSpaceType(preferSpaceType, out spaceType, out var result))
+ {
+ Debug.LogWarning("Fail GetSupportedReferenceSpaceType: " + result);
+ }
+ else
+ {
+ if (!feature.TryCreateReferenceSpace(
+ spaceType,
+ new XrVector3f(0f, 0f, 0f),
+ new XrQuaternionf(0f, 0f, 0f, 1f),
+ out refSpace,
+ out result))
+ {
+ refSpace = default;
+ Debug.LogWarning("Fail CreateReferenceSpace: " + result);
+ }
+ }
+ }
+
+ return isRefSpaceCreated;
+ }
+
+ private static void DestroyRefSpace()
+ {
+ if (!isRefSpaceCreated) { return; }
+
+ if (Initialize())
+ {
+ if (!feature.TryDestroyReferenceSpace(refSpace, out var result))
+ {
+ Debug.LogWarning("Fail DestroyReferenceSpace: " + result);
+ }
+ }
+
+ refSpace = default;
+ }
+
+ public static void StartFrameWork(bool isLeft)
+ {
+ var handData = GetHandData(isLeft);
+ handData.isStarted = true;
+
+ TryCreateHandTracker(handData);
+ }
+
+ public static void StopFrameWork(bool isLeft)
+ {
+ var handData = GetHandData(isLeft);
+ handData.isStarted = false;
+
+ DestroyHandTracker(handData);
+ }
+
+ public static bool GetJointLocation(bool isleft, out XrHandJointLocationEXT[] joints, bool forceUpdate = false)
+ {
+ var handData = GetHandData(isleft);
+ if (handData.isCreated)
+ {
+ if (forceUpdate || handData.jointUpdatedFrame != Time.frameCount)
+ {
+ handData.jointUpdatedFrame = Time.frameCount;
+
+ if (InitializeRefSpace())
+ {
+ if (!feature.TryLocateHandJoints(
+ handData.trackerHandle,
+ refSpace,
+ out handData.isActive,
+ handData.joints,
+ out var result))
+ {
+ handData.isActive = false;
+ Debug.LogWarning("Fail LocateHandJoints: " + result);
+ }
+ }
+ }
+ }
+
+ joints = handData.joints;
+ return handData.isActive;
+ }
+
+ public static bool GetJointLocation(bool isleft, out XrHandJointLocationEXT[] joints, ref XrHandJointsMotionRangeEXT type, bool forceUpdate = false)
+ {
+ var handData = GetHandData(isleft);
+ if (handData.isCreated)
+ {
+ if (forceUpdate || handData.jointUpdatedFrame != Time.frameCount)
+ {
+ handData.jointUpdatedFrame = Time.frameCount;
+
+ if (InitializeRefSpace())
+ {
+ if (!feature.TryLocateHandJoints(
+ handData.trackerHandle,
+ refSpace,
+ ref type,
+ out handData.isActive,
+ handData.joints,
+ out var result))
+ {
+ handData.isActive = false;
+ Debug.LogWarning("Fail LocateHandJoints: " + result);
+ }
+ }
+ }
+ }
+ joints = handData.joints;
+ return handData.isActive;
+ }
+
+ public static bool GetJointLocation(bool isleft, out XrHandJointLocationEXT[] joints, out XrHandJointVelocityEXT[] velocities, bool forceUpdate = false)
+ {
+ var handData = GetHandData(isleft);
+ if (handData.isCreated)
+ {
+ if (forceUpdate || handData.jointUpdatedFrame != Time.frameCount)
+ {
+ handData.jointUpdatedFrame = Time.frameCount;
+
+ if (InitializeRefSpace())
+ {
+ if (!feature.TryLocateHandJoints(
+ handData.trackerHandle,
+ refSpace,
+ out handData.isActive,
+ handData.joints,
+ handData.velocities,
+ out var result))
+ {
+ handData.isActive = false;
+ Debug.LogWarning("Fail LocateHandJoints: " + result);
+ }
+ }
+ }
+ }
+
+ joints = handData.joints;
+ velocities = handData.velocities;
+ return handData.isActive;
+ }
+ }
+
+}
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Script/HandManager.cs.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Script/HandManager.cs.meta
new file mode 100644
index 0000000..f92928e
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Script/HandManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ffbd7154b240117469bbc995d51d58a1
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Script/HandTracking_OpenXR_API.cs b/com.htc.upm.vive.openxr/OpenXRHandTracking/Script/HandTracking_OpenXR_API.cs
new file mode 100644
index 0000000..aa0edc2
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Script/HandTracking_OpenXR_API.cs
@@ -0,0 +1,429 @@
+using System;
+using System.Runtime.InteropServices;
+using UnityEditor;
+using UnityEngine.XR.OpenXR.Features;
+#if UNITY_EDITOR
+using UnityEditor.XR.OpenXR.Features;
+#endif
+
+namespace VIVE
+{
+ namespace HandTracking
+ {
+
+#if UNITY_EDITOR
+ [OpenXRFeature(UiName = "Hand Tracking",
+ BuildTargetGroups = new[] { BuildTargetGroup.Standalone },
+ Company = "HTC",
+ Desc = "Hand Tracking OpenXR Feature",
+ DocumentationLink = "https://developer.vive.com/resources/openxr/openxr-pcvr/tutorials/unity/how-integrate-hand-tracking-data-your-hand-model/",
+ OpenxrExtensionStrings = "XR_EXT_hand_tracking",
+ Version = "0.0.1",
+ FeatureId = featureId)]
+#endif
+ public class HandTracking_OpenXR_API : OpenXRFeature
+ {
+ ///
+ /// The feature id string. This is used to give the feature a well known id for reference.
+ ///
+ public const string featureId = "com.company.openxr.handtracking.feature";
+ private IntPtr oldxrGetInstanceProcAddr;
+ private IntPtr oldWaitFrame;
+ private ulong m_xrInstance;
+ private ulong m_xrSession;
+ private ulong m_systemId;
+ private XrFrameWaitInfo m_frameWaitInfo;
+ private XrFrameState m_frameState;
+
+ [Obsolete] public ulong m_space;
+ [Obsolete] public XrSystemProperties systemProperties;
+ [Obsolete] public ulong m_leftHandle;
+ [Obsolete] public ulong m_rightHandle;
+
+ public bool IsInitialized { get { return m_xrGetSystemProperties != null; } }
+ public bool IsEnabledAndInitialized { get { return enabled && IsInitialized; } }
+ public bool IsSessionCreated { get { return XrSession != default; } }
+ public ulong XrInstance { get { return m_xrInstance; } }
+ public ulong XrSession { get { return m_xrSession; } }
+ public ulong SystemId { get { return m_systemId; } }
+
+ public event Action onSessionCreate;
+ public event Action onSessionDestroy;
+ public event Action onSystemChange;
+ protected override IntPtr HookGetInstanceProcAddr(IntPtr func)
+ {
+ UnityEngine.Debug.Log("EXT: registering our own xrGetInstanceProcAddr");
+ oldxrGetInstanceProcAddr = func;
+ m_intercept_xrWaitFrame_xrGetInstanceProcAddr = intercept_xrWaitFrame_xrGetInstanceProcAddr;
+ return Marshal.GetFunctionPointerForDelegate(m_intercept_xrWaitFrame_xrGetInstanceProcAddr);
+ }
+
+
+ private int intercept_xrWaitFrame_xrGetInstanceProcAddr(ulong instance, string name, out IntPtr function)
+ {
+ if (oldxrGetInstanceProcAddr == null || oldxrGetInstanceProcAddr == IntPtr.Zero)
+ {
+ UnityEngine.Debug.LogError("oldxrGetInstanceProcAddr is null");
+ function = IntPtr.Zero;
+ return -1;
+ }
+
+ // Get delegate of old xrGetInstanceProcAddr.
+ var xrGetProc = Marshal.GetDelegateForFunctionPointer(oldxrGetInstanceProcAddr);
+
+ int result = xrGetProc(instance, name,out function);
+ if(name == "xrWaitFrame")
+ {
+ oldWaitFrame = function;
+ m_intercept_xrWaitFrame = intercepted_xrWaitFrame;
+ function = Marshal.GetFunctionPointerForDelegate(m_intercept_xrWaitFrame); ;
+ UnityEngine.Debug.Log("Getting xrWaitFrame func");
+ }
+ return result;
+
+ }
+
+ private int intercepted_xrWaitFrame(ulong session,ref XrFrameWaitInfo frameWaitInfo, ref XrFrameState frameState)
+ {
+ // Get delegate of old xrWaitFrame.
+ var xrWaitFrame = Marshal.GetDelegateForFunctionPointer(oldWaitFrame);
+ int res = xrWaitFrame(session, ref frameWaitInfo, ref frameState);
+ m_frameWaitInfo = frameWaitInfo;
+ m_frameState = frameState;
+ return res;
+ }
+
+ ///
+ protected override bool OnInstanceCreate(ulong xrInstance)
+ {
+ UnityEngine.Debug.Log($"OnInstanceCreate({xrInstance:X})");
+ m_xrInstance = xrInstance;
+ return GetXrFunctionDelegates(xrInstance);
+ }
+
+ ///
+ protected override void OnInstanceDestroy(ulong xrInstance)
+ {
+ UnityEngine.Debug.Log($"OnInstanceDestroy({xrInstance:X})");
+ m_xrInstance = default;
+ //ClearXrFunctionDelegates();
+ }
+
+ ///
+ protected override void OnSessionCreate(ulong xrSession)
+ {
+ UnityEngine.Debug.Log($"OnSessionCreate({xrSession:X})");
+ m_xrSession = xrSession;
+
+ try { onSessionCreate?.Invoke(xrSession); }
+ catch (Exception e) { UnityEngine.Debug.LogError(e); }
+ }
+
+ ///
+ protected override void OnSystemChange(ulong xrSystem)
+ {
+ UnityEngine.Debug.Log($"OnSystemChange({xrSystem:X})");
+ m_systemId = xrSystem;
+
+ try { onSystemChange?.Invoke(xrSystem); }
+ catch (Exception e) { UnityEngine.Debug.LogError(e); }
+ }
+
+ ///
+ protected override void OnSessionDestroy(ulong xrSession)
+ {
+ UnityEngine.Debug.Log($"OnSessionDestroy({xrSession:X})");
+ m_xrSession = default;
+
+ try { onSessionDestroy?.Invoke(xrSession); }
+ catch (Exception e) { UnityEngine.Debug.LogError(e); }
+ }
+
+ /// Return true if the result equals zero.
+ private bool GetXrFunctionDelegates(ulong xrInstance)
+ {
+ if (xrGetInstanceProcAddr == null || xrGetInstanceProcAddr == IntPtr.Zero)
+ {
+ UnityEngine.Debug.LogError("xrGetInstanceProcAddr is null");
+ return false;
+ }
+
+ // Get delegate of xrGetInstanceProcAddr.
+ var xrGetProc = Marshal.GetDelegateForFunctionPointer(xrGetInstanceProcAddr);
+
+ if (!MarshelFunc(xrInstance, xrGetProc, "xrGetSystemProperties", ref m_xrGetSystemProperties)) { return false; }
+ if (!MarshelFunc(xrInstance, xrGetProc, "xrEnumerateReferenceSpaces", ref m_xrEnumerateReferenceSpaces)) { return false; }
+ if (!MarshelFunc(xrInstance, xrGetProc, "xrEnumerateReferenceSpaces", ref m_xrEnumerateReferenceSpaces2)) { return false; }
+ if (!MarshelFunc(xrInstance, xrGetProc, "xrCreateReferenceSpace", ref m_xrCreateReferenceSpace)) { return false; }
+ if (!MarshelFunc(xrInstance, xrGetProc, "xrDestroySpace", ref m_xrDestroySpace)) { return false; }
+ if (!MarshelFunc(xrInstance, xrGetProc, "xrCreateHandTrackerEXT", ref m_xrCreateHandTrackerEXT)) { return false; }
+ if (!MarshelFunc(xrInstance, xrGetProc, "xrDestroyHandTrackerEXT", ref m_xrDestroyHandTrackerEXT)) { return false; }
+ if (!MarshelFunc(xrInstance, xrGetProc, "xrLocateHandJointsEXT", ref m_xrLocateHandJointsEXT)) { return false; }
+ return true;
+ }
+
+ private void ClearXrFunctionDelegates()
+ {
+ m_xrGetSystemProperties = null;
+ m_xrEnumerateReferenceSpaces = null;
+ m_xrEnumerateReferenceSpaces2 = null;
+ m_xrCreateReferenceSpace = null;
+ m_xrDestroySpace = null;
+ m_xrCreateHandTrackerEXT = null;
+ m_xrDestroyHandTrackerEXT = null;
+ m_xrLocateHandJointsEXT = null;
+ }
+
+ private static bool MarshelFunc(ulong instance, xrGetInstanceProcDelegate instanceProc, string funcName, ref T func, bool verbose = true)
+ where T : Delegate
+ {
+ if (instanceProc(instance, funcName, out var fp) != 0)
+ {
+ if (verbose)
+ {
+ UnityEngine.Debug.LogError("Fail getting function " + funcName);
+ }
+ return false;
+ }
+
+ func = Marshal.GetDelegateForFunctionPointer(fp);
+ return true;
+ }
+
+ private xrGetInstanceProcDelegate m_intercept_xrWaitFrame_xrGetInstanceProcAddr;
+
+ private delegate int xrGetSystemPropertiesDelegate(ulong instance, ulong systemId, ref XrSystemProperties properties);
+ private xrGetSystemPropertiesDelegate m_xrGetSystemProperties;
+ public int xrGetSystemProperties(ref XrSystemProperties properties) =>
+ m_xrGetSystemProperties(XrInstance, SystemId, ref properties);
+ public int xrGetSystemProperties(ulong instance, ulong systemId, ref XrSystemProperties properties) =>
+ m_xrGetSystemProperties(instance, systemId, ref properties);
+
+ private delegate int xrWaitFrameDelegate(ulong session,ref XrFrameWaitInfo frameWaitInfo, ref XrFrameState frameState);
+ private xrWaitFrameDelegate m_intercept_xrWaitFrame;
+ #region space
+ private delegate int xrEnumerateReferenceSpacesDelegate(ulong session, int spaceCapacityInput, out int spaceCountOutput, out XrReferenceSpaceType spaces);
+ private xrEnumerateReferenceSpacesDelegate m_xrEnumerateReferenceSpaces;
+ public int xrEnumerateReferenceSpaces(int spaceCapacityInput, out int spaceCountOutput, out XrReferenceSpaceType spaces) =>
+ m_xrEnumerateReferenceSpaces(XrSession, spaceCapacityInput, out spaceCountOutput, out spaces);
+
+ private delegate int xrEnumerateReferenceSpacesDelegate2(ulong session, int spaceCapacityInput, out int spaceCountOutput, IntPtr spaces);
+ private xrEnumerateReferenceSpacesDelegate2 m_xrEnumerateReferenceSpaces2;
+ public int xrEnumerateReferenceSpaces(ulong session, int spaceCapacityInput, out int spaceCountOutput, IntPtr spaces) =>
+ m_xrEnumerateReferenceSpaces2(session, spaceCapacityInput, out spaceCountOutput, spaces);
+
+ private delegate int xrCreateReferenceSpaceDelegate(ulong session, ref XrReferenceSpaceCreateInfo createInfo, out ulong space);
+ private xrCreateReferenceSpaceDelegate m_xrCreateReferenceSpace;
+ public int xrCreateReferenceSpace(ref XrReferenceSpaceCreateInfo createInfo, out ulong space) =>
+ m_xrCreateReferenceSpace(XrSession, ref createInfo, out space);
+ public int xrCreateReferenceSpace(ulong session, ref XrReferenceSpaceCreateInfo createInfo, out ulong space) =>
+ m_xrCreateReferenceSpace(session, ref createInfo, out space);
+
+ private delegate int xrDestroySpaceDelegate(ulong space);
+ private xrDestroySpaceDelegate m_xrDestroySpace;
+ public int xrDestroySpace(ulong space) =>
+ m_xrDestroySpace(space);
+ #endregion
+
+ private delegate int xrCreateHandTrackerEXTDelegate(ulong session, XrHandTrackerCreateInfoEXT createInfo, out ulong handTracker);
+ private xrCreateHandTrackerEXTDelegate m_xrCreateHandTrackerEXT;
+ public int xrCreateHandTrackerEXT(XrHandTrackerCreateInfoEXT createInfo, out ulong handle) =>
+ m_xrCreateHandTrackerEXT(XrSession, createInfo, out handle);
+ public int xrCreateHandTrackerEXT(ulong session, XrHandTrackerCreateInfoEXT createInfo, out ulong handle) =>
+ m_xrCreateHandTrackerEXT(session, createInfo, out handle);
+
+ private delegate int xrDestroyHandTrackerEXTDelegate(ulong handTracker);
+ private xrDestroyHandTrackerEXTDelegate m_xrDestroyHandTrackerEXT;
+ public int xrDestroyHandTrackerEXT(ulong handle) =>
+ m_xrDestroyHandTrackerEXT(handle);
+
+ private delegate int xrLocateHandJointsEXTDelegate(ulong handTracker,ref XrHandJointsLocateInfoEXT locateInfo, ref XrHandJointLocationsEXT locations);
+ private xrLocateHandJointsEXTDelegate m_xrLocateHandJointsEXT;
+ public int xrLocateHandJointsEXT(ulong handTracker,ref XrHandJointsLocateInfoEXT locateInfo, ref XrHandJointLocationsEXT locations) =>
+ m_xrLocateHandJointsEXT(handTracker,ref locateInfo, ref locations);
+
+ public unsafe bool SystemSupportsHandTracking(out XrResult result)
+ {
+ var handTrackingSystemProp = new XrSystemHandTrackingPropertiesEXT()
+ {
+ type = XrStructureType.XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT,
+ next = IntPtr.Zero,
+ };
+
+ var systemProp = new XrSystemProperties()
+ {
+ type = XrStructureType.XR_TYPE_SYSTEM_PROPERTIES,
+ next = (IntPtr)(&handTrackingSystemProp),
+ };
+
+ result = (XrResult)xrGetSystemProperties(XrInstance, SystemId, ref systemProp);
+ return result == XrResult.XR_SUCCESS && handTrackingSystemProp.supportsHandTracking != 0u;
+ }
+
+ public bool TryGetSupportedReferenceSpaceTypeCount(out int count, out XrResult result)
+ {
+ result = (XrResult)m_xrEnumerateReferenceSpaces2(XrSession, 0, out count, IntPtr.Zero);
+ return result == XrResult.XR_SUCCESS;
+ }
+
+ public bool TryGetSupportedReferenceSpaceTypes(XrReferenceSpaceType[] spaces, out XrResult result)
+ {
+ if (spaces == null || spaces.Length == 0)
+ {
+ result = default;
+ return true;
+ }
+
+ result = (XrResult)m_xrEnumerateReferenceSpaces2(XrSession, spaces.Length, out _, ArrayPtr(spaces));
+ return result == XrResult.XR_SUCCESS;
+ }
+
+ public bool TryGetSupportedReferenceSpaceType(XrReferenceSpaceType preferType, out XrReferenceSpaceType supportedType, out XrResult result)
+ {
+ supportedType = default;
+ if (!TryGetSupportedReferenceSpaceTypeCount(out var count, out result)) { return false; }
+ if (count == 0) { return false; } // FIXME: error code?
+
+ var spaces = new XrReferenceSpaceType[count];
+ if (!TryGetSupportedReferenceSpaceTypes(spaces, out result)) { return false; }
+
+ for (int i = 0; i < count; ++i)
+ {
+ supportedType = spaces[i];
+ if (supportedType == preferType) { break; }
+ }
+
+ return true;
+ }
+
+ public bool TryCreateReferenceSpace(XrReferenceSpaceType refSpaceType, XrVector3f position, XrQuaternionf orientation, out ulong handle, out XrResult result)
+ {
+ var createInfo = new XrReferenceSpaceCreateInfo()
+ {
+ type = XrStructureType.XR_TYPE_REFERENCE_SPACE_CREATE_INFO,
+ next = IntPtr.Zero,
+ referencespacetype = refSpaceType,
+ poseInReferenceSpace = new XrPosef()
+ {
+ position = position,
+ orientation = orientation,
+ },
+ };
+
+ result = (XrResult)xrCreateReferenceSpace(XrSession, ref createInfo, out handle);
+ return result == XrResult.XR_SUCCESS;
+ }
+
+ public bool TryDestroyReferenceSpace(ulong handle, out XrResult result)
+ {
+ result = (XrResult)xrDestroySpace(handle);
+ return result == XrResult.XR_SUCCESS;
+ }
+
+ public bool TryCreateHandTracker(XrHandEXT hand, out ulong handle, out XrResult result, XrHandJointSetEXT jointSet = XrHandJointSetEXT.XR_HAND_JOINT_SET_DEFAULT_EXT)
+ {
+ var createInfo = new XrHandTrackerCreateInfoEXT()
+ {
+ type = XrStructureType.XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT,
+ next = IntPtr.Zero,
+ hand = hand,
+ handJointSet = XrHandJointSetEXT.XR_HAND_JOINT_SET_DEFAULT_EXT,
+ };
+
+ result = (XrResult)xrCreateHandTrackerEXT(XrSession, createInfo, out handle);
+ return result == XrResult.XR_SUCCESS;
+ }
+
+ public bool TryDestroyHandTracker(ulong handle, out XrResult result)
+ {
+ result = (XrResult)xrDestroyHandTrackerEXT(handle);
+ return result == XrResult.XR_SUCCESS;
+ }
+
+ public bool TryLocateHandJoints(ulong handle, ulong space, out bool isActive, XrHandJointLocationEXT[] locationArray, out XrResult result)
+ {
+ return TryLocateHandJoints(handle, space, out isActive, locationArray, null, out result);
+ }
+
+ public bool TryLocateHandJoints(ulong handle, ulong space, out bool isActive, XrHandJointLocationEXT[] locationArray, XrHandJointVelocityEXT[] velocityArray, out XrResult result)
+ {
+ return TryLocateHandJoints(handle, space, IntPtr.Zero, out isActive, locationArray, velocityArray, out result);
+ }
+
+ public bool TryLocateHandJoints(ulong handle, ulong space, ref XrHandJointsMotionRangeEXT motionRange, out bool isActive, XrHandJointLocationEXT[] locationArray, out XrResult result)
+ {
+ return TryLocateHandJoints(handle, space, ref motionRange, out isActive, locationArray, null, out result);
+ }
+
+ public unsafe bool TryLocateHandJoints(ulong handle, ulong space, ref XrHandJointsMotionRangeEXT motionRange, out bool isActive, XrHandJointLocationEXT[] locationArray, XrHandJointVelocityEXT[] velocityArray, out XrResult result)
+ {
+ var motionRangeInfo = new XrHandJointsMotionRangeInfoEXT()
+ {
+ type = XrStructureType.XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT,
+ next = IntPtr.Zero,
+ handJointsMotionRange = motionRange,
+ };
+
+ bool res = TryLocateHandJoints(handle, space, (IntPtr)(&motionRangeInfo), out isActive, locationArray, velocityArray, out result);
+ motionRange = motionRangeInfo.handJointsMotionRange;
+ return res;
+ }
+
+ private unsafe bool TryLocateHandJoints(ulong handle, ulong space, IntPtr motionRangeInfo, out bool isActive, XrHandJointLocationEXT[] locationArray, XrHandJointVelocityEXT[] velocityArray, out XrResult result)
+ {
+ var locateInfo = new XrHandJointsLocateInfoEXT()
+ {
+ type = XrStructureType.XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT,
+ next = motionRangeInfo,
+ baseSpace = space,
+ time = m_frameState.predictedDisplayTime, //An arbitrary number greater than 0
+ };
+
+ var locVelocitiesPtr = IntPtr.Zero;
+ if (velocityArray != null)
+ {
+ var locVelocities = new XrHandJointVelocitiesEXT()
+ {
+ type = XrStructureType.XR_TYPE_HAND_JOINT_VELOCITIES_EXT,
+ next = IntPtr.Zero,
+ jointCount = (uint)velocityArray.Length,
+ jointVelocities = ArrayPtr(velocityArray)
+ };
+
+ locVelocitiesPtr = (IntPtr)(&locVelocities);
+ }
+
+ var locations = new XrHandJointLocationsEXT()
+ {
+ type = XrStructureType.XR_TYPE_HAND_JOINT_LOCATIONS_EXT,
+ next = locVelocitiesPtr,
+ jointCount = locationArray == null ? 0 : locationArray.Length,
+ jointLocations = ArrayPtr(locationArray),
+ };
+
+ result = (XrResult)xrLocateHandJointsEXT(handle,ref locateInfo, ref locations);
+ isActive = locations.isActive != 0u;
+ return result == XrResult.XR_SUCCESS;
+ }
+
+ private unsafe static IntPtr ArrayPtr(XrReferenceSpaceType[] array)
+ {
+ if (array == null) { return IntPtr.Zero; }
+ fixed (XrReferenceSpaceType* p = array) { return (IntPtr)p; }
+ }
+
+ private unsafe static IntPtr ArrayPtr(XrHandJointLocationEXT[] array)
+ {
+ if (array == null) { return IntPtr.Zero; }
+ fixed (XrHandJointLocationEXT* p = array) { return (IntPtr)p; }
+ }
+
+ private unsafe static IntPtr ArrayPtr(XrHandJointVelocityEXT[] array)
+ {
+ if (array == null) { return IntPtr.Zero; }
+ fixed (XrHandJointVelocityEXT* p = array) { return (IntPtr)p; }
+ }
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRHandTracking/Script/HandTracking_OpenXR_API.cs.meta b/com.htc.upm.vive.openxr/OpenXRHandTracking/Script/HandTracking_OpenXR_API.cs.meta
new file mode 100644
index 0000000..8fc81ef
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRHandTracking/Script/HandTracking_OpenXR_API.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 38169f0e301608a469f311ebb2233162
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding.meta
new file mode 100644
index 0000000..a6dfd41
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ffbc15e43390d9d47af0e60075d687f5
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/ActionAssetEnabler.cs b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/ActionAssetEnabler.cs
new file mode 100644
index 0000000..03579e1
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/ActionAssetEnabler.cs
@@ -0,0 +1,23 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.InputSystem;
+
+public class ActionAssetEnabler : MonoBehaviour
+{
+ [SerializeField]
+ InputActionAsset m_ActionAsset;
+ public InputActionAsset actionAsset
+ {
+ get => m_ActionAsset;
+ set => m_ActionAsset = value;
+ }
+
+ private void OnEnable()
+ {
+ if(m_ActionAsset != null)
+ {
+ m_ActionAsset.Enable();
+ }
+ }
+}
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/ActionAssetEnabler.cs.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/ActionAssetEnabler.cs.meta
new file mode 100644
index 0000000..775938c
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/ActionAssetEnabler.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 882e1090e76def749ad1a34789211e37
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Controller.cs b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Controller.cs
new file mode 100644
index 0000000..5893548
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Controller.cs
@@ -0,0 +1,103 @@
+using System;
+using UnityEngine.InputSystem;
+using UnityEngine.UI;
+using UnityEngine;
+
+public class Controller : MonoBehaviour
+{
+ [SerializeField]
+ private InputActionReference m_ActionReferenceTrigger;
+ public InputActionReference actionReferenceTrigger { get => m_ActionReferenceTrigger ; set => m_ActionReferenceTrigger=value; }
+ [SerializeField]
+ private InputActionReference m_ActionReferenceGrip;
+ public InputActionReference actionReferenceGrip { get => m_ActionReferenceGrip ; set => m_ActionReferenceGrip=value; }
+ public GameObject MeshSubSystem;
+ public Transform spawnPoint;
+ public GameObject sphere;
+ public float shootVelocity = 5f;
+
+ Type lastActiveType_Trigger = null;
+ Type lastActiveType_Grip = null;
+ bool isSpawned = false;
+ bool isSwitchedMeshPrefab = false;
+ // Update is called once per frame
+ void Update()
+ {
+ if ( actionReferenceTrigger != null && actionReferenceTrigger.action != null
+ && actionReferenceTrigger.action.enabled && actionReferenceTrigger.action.controls.Count > 0
+ && actionReferenceGrip != null && actionReferenceGrip.action != null
+ && actionReferenceGrip.action.enabled && actionReferenceGrip.action.controls.Count > 0)
+ {
+ // Grip
+ Type typeToUse_Grip = null;
+ if(actionReferenceGrip.action.activeControl != null)
+ {
+ typeToUse_Grip = actionReferenceGrip.action.activeControl.valueType;
+ }
+ else
+ {
+ typeToUse_Grip = lastActiveType_Grip;
+ }
+
+ if(typeToUse_Grip == typeof(float))
+ {
+ lastActiveType_Grip = typeof(float);
+ float value = actionReferenceGrip.action.ReadValue();
+ if(value > 0.5)
+ {
+ if(!isSwitchedMeshPrefab)
+ {
+ isSwitchedMeshPrefab = true;
+ Debug.Log("Press Button B.");
+ if(MeshSubSystem != null)
+ {
+ MeshSubSystem.GetComponent().SwitchMeshPrefab();
+ }
+ }
+ }
+ else
+ {
+ isSwitchedMeshPrefab = false;
+ }
+ }
+
+ // Trigger
+ Type typeToUse_Trigger = null;
+ if(actionReferenceTrigger.action.activeControl != null)
+ {
+ typeToUse_Trigger = actionReferenceTrigger.action.activeControl.valueType;
+ }
+ else
+ {
+ typeToUse_Trigger = lastActiveType_Trigger;
+ }
+
+ if(typeToUse_Trigger == typeof(float))
+ {
+ lastActiveType_Trigger = typeof(float);
+ float value = actionReferenceTrigger.action.ReadValue();
+ if(value > 0.5)
+ {
+ if(!isSpawned)
+ {
+ isSpawned = true;
+ SpawnTarget();
+ }
+ }
+ else
+ {
+ isSpawned = false;
+ }
+ }
+ }
+ }
+
+ private void SpawnTarget()
+ {
+ GameObject ball = Instantiate(sphere, spawnPoint);
+ Rigidbody rb = ball.GetComponent();
+ rb.velocity = ball.transform.parent.forward * shootVelocity;
+ rb.isKinematic = false;
+ ball.transform.parent = null;
+ }
+}
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Controller.cs.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Controller.cs.meta
new file mode 100644
index 0000000..9e08901
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Controller.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 15b06a835f580bf4995da3b45ecf229d
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/DestrySelf.cs b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/DestrySelf.cs
new file mode 100644
index 0000000..7041f2d
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/DestrySelf.cs
@@ -0,0 +1,19 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class DestrySelf : MonoBehaviour
+{
+ public float LifeTime = 5f;
+ // Start is called before the first frame update
+ void Start()
+ {
+ Destroy(this.gameObject, LifeTime);
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/DestrySelf.cs.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/DestrySelf.cs.meta
new file mode 100644
index 0000000..ebe160a
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/DestrySelf.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 89d0d284e76483043b0ffc8bfafe077f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Editor/MeshingFeatureInstaller.cs b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Editor/MeshingFeatureInstaller.cs
new file mode 100644
index 0000000..c1e6474
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Editor/MeshingFeatureInstaller.cs
@@ -0,0 +1,89 @@
+using System;
+using System.Linq;
+using System.Reflection;
+using System.IO;
+using UnityEngine;
+using UnityEngine.XR.OpenXR;
+using UnityEngine.XR.OpenXR.Samples.MeshingFeature;
+using UnityEditor.XR.OpenXR.Features;
+
+namespace UnityEditor.XR.OpenXR.Samples.MeshingFeature
+{
+ ///
+ /// Custom editor for meshing behaviour that ensures the meshing feature plugin can be loaded.
+ ///
+ /// For the SceneUnderstanding sample to be loaded the sample folder must be an immediate child of the 'Assets' folder and
+ /// must be there on Unity startup. This script will copy the sample folder to the required destination and attempt
+ /// to force a restart after.
+ ///
+ /// Note that this script will self destruct after running by deleting the script asset to ensure it only ever runs once.
+ ///
+ /// Note that when developing samples this copying functionality may not be desired. To disable this
+ /// functionality add the UNITY_SAMPLE_DEV define to your project.
+ ///
+ [InitializeOnLoad]
+ public class MeshingFeatureInstaller : Editor
+ {
+#if !UNITY_SAMPLE_DEV
+ private const string k_MeshingFeaturePath = "SceneUnderstanding Example/MeshingFeaturePlugin/UnitySubsystemsManifest.json";
+
+ private const string k_ErrorMessage = "The SceneUnderstanding Example requires the `MeshingFeaturePlugin' folder be moved to the root 'Assets` folder to run properly. An attempt was made to automatically move these files to the correct location but failed, please move these files manaually before running the sample.";
+
+ private const string k_DialogText = "The SceneUnderstanding Example requires that the MeshingFeature subsystem be registered, which will require Unity editor to be restarted.\n\nDo you want to *RESTART* the editor now?";
+
+ static MeshingFeatureInstaller()
+ {
+ // Automatically enable the feature
+ FeatureHelpers.RefreshFeatures(BuildTargetGroup.Standalone);
+ var feature = OpenXRSettings.Instance.GetFeature();
+ if (feature != null)
+ feature.enabled = true;
+
+ // Find the subsystem manifest to figure out where the sample was installed
+ var source = AssetDatabase
+ .FindAssets(Path.GetFileNameWithoutExtension(k_MeshingFeaturePath))
+ .Select(AssetDatabase.GUIDToAssetPath)
+ .FirstOrDefault(r => r.Contains(k_MeshingFeaturePath));
+
+ if (string.IsNullOrEmpty(source))
+ {
+ Debug.LogError(k_ErrorMessage);
+ return;
+ }
+
+ // Extract the `UnitySubsystemsManifest.json` from the path
+ source = Path.GetDirectoryName(source);
+
+ // Target path is 'Assets/`
+ var target = Path.Combine("Assets", Path.GetFileNameWithoutExtension(source));
+
+ // Attempt to move the entire folder
+ var moveResult = AssetDatabase.MoveAsset(source, target);
+ if (!string.IsNullOrWhiteSpace(moveResult))
+ {
+ Debug.LogError(moveResult);
+ return;
+ }
+
+ Debug.Log($"Moved '{source}' to '{target}");
+
+ if (EditorUtility.DisplayDialog("Warning", k_DialogText, "Yes", "No"))
+ {
+ // Restart editor.
+ var editorApplicationType = typeof(EditorApplication);
+ var requestCloseAndRelaunchWithCurrentArgumentsMethod =
+ editorApplicationType.GetMethod("RequestCloseAndRelaunchWithCurrentArguments",
+ BindingFlags.NonPublic | BindingFlags.Static);
+
+ if (requestCloseAndRelaunchWithCurrentArgumentsMethod == null)
+ throw new MissingMethodException(editorApplicationType.FullName, "RequestCloseAndRelaunchWithCurrentArguments");
+
+ requestCloseAndRelaunchWithCurrentArgumentsMethod.Invoke(null, null);
+ }
+
+ // Self destruct
+ AssetDatabase.DeleteAsset(Path.Combine(Path.GetDirectoryName(source), "Editor"));
+ }
+#endif
+ }
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Editor/MeshingFeatureInstaller.cs.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Editor/MeshingFeatureInstaller.cs.meta
new file mode 100644
index 0000000..29a9fe2
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Editor/MeshingFeatureInstaller.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 889289a1c4a096340aede480e53f0e7e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/HTC.VIVE.OPENXR.SceneUnderstandingSample.asmdef b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/HTC.VIVE.OPENXR.SceneUnderstandingSample.asmdef
new file mode 100644
index 0000000..188c37a
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/HTC.VIVE.OPENXR.SceneUnderstandingSample.asmdef
@@ -0,0 +1,19 @@
+{
+ "name": "HTC.VIVE.OPENXR.SceneUnderstandingSample",
+ "rootNamespace": "",
+ "references": [
+ "GUID:4847341ff46394e83bb78fbd0652937e",
+ "GUID:96aa6ba065960476598f8f643e7252b6",
+ "GUID:75469ad4d38634e559750d17036d5f7c",
+ "GUID:c34271c4bb951904aa11cacc978a4396"
+ ],
+ "includePlatforms": [],
+ "excludePlatforms": [],
+ "allowUnsafeCode": true,
+ "overrideReferences": false,
+ "precompiledReferences": [],
+ "autoReferenced": true,
+ "defineConstraints": [],
+ "versionDefines": [],
+ "noEngineReferences": false
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/HTC.VIVE.OPENXR.SceneUnderstandingSample.asmdef.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/HTC.VIVE.OPENXR.SceneUnderstandingSample.asmdef.meta
new file mode 100644
index 0000000..bd290cc
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/HTC.VIVE.OPENXR.SceneUnderstandingSample.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: a94fe08d394928749966d18ef36c5e7c
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/InputActions.inputactions b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/InputActions.inputactions
new file mode 100644
index 0000000..d97b36a
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/InputActions.inputactions
@@ -0,0 +1,98 @@
+{
+ "name": "InputActions",
+ "maps": [
+ {
+ "name": "LeftHand",
+ "id": "580a5840-224e-464f-83c2-75974c6b515b",
+ "actions": [
+ {
+ "name": "TriggerPress",
+ "type": "Button",
+ "id": "abf3e2de-2bcc-4780-ab0f-39b95befd95b",
+ "expectedControlType": "Button",
+ "processors": "",
+ "interactions": ""
+ },
+ {
+ "name": "GripPress",
+ "type": "Button",
+ "id": "d4514ab2-45f3-4137-86d5-4fcc68e45e12",
+ "expectedControlType": "Button",
+ "processors": "",
+ "interactions": ""
+ }
+ ],
+ "bindings": [
+ {
+ "name": "",
+ "id": "c360e2ed-9ad6-4103-af8b-ffae3c26ca55",
+ "path": "{LeftHand}/triggerPressed",
+ "interactions": "",
+ "processors": "",
+ "groups": "",
+ "action": "TriggerPress",
+ "isComposite": false,
+ "isPartOfComposite": false
+ },
+ {
+ "name": "",
+ "id": "1b896f30-9a63-4ed6-9cb9-2015ee000663",
+ "path": "{LeftHand}/gripPressed",
+ "interactions": "",
+ "processors": "",
+ "groups": "",
+ "action": "GripPress",
+ "isComposite": false,
+ "isPartOfComposite": false
+ }
+ ]
+ },
+ {
+ "name": "RightHand",
+ "id": "9e47d12d-aa53-4f65-b9c2-4dc5f6d3ec4d",
+ "actions": [
+ {
+ "name": "GripPress",
+ "type": "Button",
+ "id": "f8318062-27ce-44a5-9cd1-1cc65c2423ed",
+ "expectedControlType": "Button",
+ "processors": "",
+ "interactions": ""
+ },
+ {
+ "name": "TriggerPress",
+ "type": "Button",
+ "id": "2d4c4d7e-75d6-41b9-a8af-678783f52839",
+ "expectedControlType": "Button",
+ "processors": "",
+ "interactions": ""
+ }
+ ],
+ "bindings": [
+ {
+ "name": "",
+ "id": "c35117b2-b6a1-4069-aa57-47c5a9835f10",
+ "path": "{RightHand}/triggerPressed",
+ "interactions": "",
+ "processors": "",
+ "groups": "",
+ "action": "TriggerPress",
+ "isComposite": false,
+ "isPartOfComposite": false
+ },
+ {
+ "name": "",
+ "id": "d215e5c1-c882-4a74-b856-01b22e58627b",
+ "path": "{RightHand}/gripPressed",
+ "interactions": "",
+ "processors": "",
+ "groups": "",
+ "action": "GripPress",
+ "isComposite": false,
+ "isPartOfComposite": false
+ }
+ ]
+ }
+ ],
+ "controlSchemes": []
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/InputActions.inputactions.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/InputActions.inputactions.meta
new file mode 100644
index 0000000..8ff216a
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/InputActions.inputactions.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: 4774c2793d02a0142baed37a01688512
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: 8404be70184654265930450def6a9037, type: 3}
+ generateWrapperCode: 0
+ wrapperCodePath:
+ wrapperClassName:
+ wrapperCodeNamespace:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials.meta
new file mode 100644
index 0000000..33306e6
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 40077ed6b8ad5db47969124eb8abcc54
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Bouncing Object.physicMaterial b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Bouncing Object.physicMaterial
new file mode 100644
index 0000000..1153103
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Bouncing Object.physicMaterial
@@ -0,0 +1,14 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!134 &13400000
+PhysicMaterial:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Bouncing Object
+ dynamicFriction: 0.6
+ staticFriction: 0.6
+ bounciness: 0.6
+ frictionCombine: 0
+ bounceCombine: 0
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Bouncing Object.physicMaterial.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Bouncing Object.physicMaterial.meta
new file mode 100644
index 0000000..3350539
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Bouncing Object.physicMaterial.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 51ba229a7845f1544a4fa04f7e3f778c
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 13400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Cosmos Controller.mat b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Cosmos Controller.mat
new file mode 100644
index 0000000..596ae25
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Cosmos Controller.mat
@@ -0,0 +1,78 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Cosmos Controller
+ m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords: _METALLICGLOSSMAP
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 2800000, guid: 05846a6377efe7b4ca1a163e941e0560, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 2800000, guid: 642f19525494c4d4880a68dad64e14b6, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ m_BuildTextureStacks: []
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Cosmos Controller.mat.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Cosmos Controller.mat.meta
new file mode 100644
index 0000000..6807999
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Cosmos Controller.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7e40d5b6de9c7b24cbd0293dd20805ea
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Light Blue.mat b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Light Blue.mat
new file mode 100644
index 0000000..25a0d6b
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Light Blue.mat
@@ -0,0 +1,78 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Light Blue
+ m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 0.44716978, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ m_BuildTextureStacks: []
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Light Blue.mat.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Light Blue.mat.meta
new file mode 100644
index 0000000..3fe4934
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Light Blue.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 733cda6d9847c07449732d0798bb39a2
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Light Red.mat b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Light Red.mat
new file mode 100644
index 0000000..b0b6cd6
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Light Red.mat
@@ -0,0 +1,78 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Light Red
+ m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 0.5509434, b: 0.58785224, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ m_BuildTextureStacks: []
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Light Red.mat.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Light Red.mat.meta
new file mode 100644
index 0000000..ca59e95
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Light Red.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e6b8e71e9989283458383b5c1a439a9b
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Light Yellow.mat b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Light Yellow.mat
new file mode 100644
index 0000000..ca8d19e
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Light Yellow.mat
@@ -0,0 +1,78 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Light Yellow
+ m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 0.9895455, g: 1, b: 0.56981134, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ m_BuildTextureStacks: []
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Light Yellow.mat.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Light Yellow.mat.meta
new file mode 100644
index 0000000..b5f6f94
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Light Yellow.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6c963700ce992eb479ae65352fde0b61
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Shaders.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Shaders.meta
new file mode 100644
index 0000000..15d71f9
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Shaders.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a175a67c9b41ea74bb471dc966cfb1ad
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Shaders/OcclusionShader.shader b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Shaders/OcclusionShader.shader
new file mode 100644
index 0000000..5c2010e
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Shaders/OcclusionShader.shader
@@ -0,0 +1,52 @@
+Shader "Custom/OcclusionShader"
+{
+ SubShader
+ {
+ Tags { "RenderType"="Opaque" }
+ Tags { "Queue"="Geometry-1" }
+ ZWrite On
+ ZTest LEqual
+ ColorMask 0
+
+ Pass
+ {
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+
+ #include "UnityCG.cginc"
+
+ struct appdata
+ {
+ float4 vertex : POSITION;
+
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ };
+
+ struct v2f
+ {
+ float4 vertex : SV_POSITION;
+
+ UNITY_VERTEX_OUTPUT_STEREO
+ };
+
+ v2f vert(appdata v)
+ {
+ v2f o;
+
+ UNITY_SETUP_INSTANCE_ID(v);
+ UNITY_INITIALIZE_OUTPUT(v2f, o);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
+
+ o.vertex=UnityObjectToClipPos(v.vertex);
+ return o;
+ }
+
+ fixed4 frag(v2f i) : SV_Target
+ {
+ return fixed4(0.0, 0.0, 0.0, 0.0);
+ }
+ ENDCG
+ }
+ }
+}
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Shaders/OcclusionShader.shader.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Shaders/OcclusionShader.shader.meta
new file mode 100644
index 0000000..f13eb77
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Shaders/OcclusionShader.shader.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: c5dc16cd88a72994c8efa3274f51585d
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ preprocessorOverride: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Textures.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Textures.meta
new file mode 100644
index 0000000..1d05d1f
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Textures.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5b2f239e4ce78a74d90a72e1c1d987a6
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Textures/CosmosController.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Textures/CosmosController.meta
new file mode 100644
index 0000000..5298eff
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Textures/CosmosController.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 328255fcb4d49324e90e2b64d973aad8
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Textures/CosmosController/controller_cosmos_albedo.TGA b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Textures/CosmosController/controller_cosmos_albedo.TGA
new file mode 100644
index 0000000..562d1ce
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Textures/CosmosController/controller_cosmos_albedo.TGA
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c5746fbb330cd3513fd02aadb08f00d0db042069ffa88cb3a279e68b244f70a0
+size 12582956
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Textures/CosmosController/controller_cosmos_albedo.TGA.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Textures/CosmosController/controller_cosmos_albedo.TGA.meta
new file mode 100644
index 0000000..917c86a
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Textures/CosmosController/controller_cosmos_albedo.TGA.meta
@@ -0,0 +1,96 @@
+fileFormatVersion: 2
+guid: 05846a6377efe7b4ca1a163e941e0560
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Textures/CosmosController/controller_cosmos_specular.TGA b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Textures/CosmosController/controller_cosmos_specular.TGA
new file mode 100644
index 0000000..5e69541
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Textures/CosmosController/controller_cosmos_specular.TGA
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:65f6064787c16e7929504bf916134b1ffc35f7ccbde2a4687e2963210cb68d84
+size 12582956
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Textures/CosmosController/controller_cosmos_specular.TGA.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Textures/CosmosController/controller_cosmos_specular.TGA.meta
new file mode 100644
index 0000000..9a87e12
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Textures/CosmosController/controller_cosmos_specular.TGA.meta
@@ -0,0 +1,96 @@
+fileFormatVersion: 2
+guid: 642f19525494c4d4880a68dad64e14b6
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Transparent Occlusion.mat b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Transparent Occlusion.mat
new file mode 100644
index 0000000..2c2fd83
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Transparent Occlusion.mat
@@ -0,0 +1,78 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Transparent Occlusion
+ m_Shader: {fileID: 4800000, guid: c5dc16cd88a72994c8efa3274f51585d, type: 3}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ m_BuildTextureStacks: []
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Transparent Occlusion.mat.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Transparent Occlusion.mat.meta
new file mode 100644
index 0000000..9fdf2a3
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Materials/Transparent Occlusion.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6ae6f0f40939f294aae5b64149c541c1
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature.meta
new file mode 100644
index 0000000..2b5ae8c
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 335cbf161ed33564db97059a8ba91c4b
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/.sample.json b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/.sample.json
new file mode 100644
index 0000000..f217056
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/.sample.json
@@ -0,0 +1,5 @@
+{
+ "displayName": "Meshing Subsystem Extension",
+ "description": "Shows a teapot mesh generated from native mesh subsystem with physics baked in background.",
+ "createSeparatePackage": false
+}
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/DynamicMeshPrefab_Default.prefab b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/DynamicMeshPrefab_Default.prefab
new file mode 100644
index 0000000..820101f
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/DynamicMeshPrefab_Default.prefab
@@ -0,0 +1,98 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &8233015818774569630
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 8233015818774569626}
+ - component: {fileID: 8233015818774569629}
+ - component: {fileID: 8233015818774569628}
+ - component: {fileID: 8233015818774569631}
+ m_Layer: 0
+ m_Name: DynamicMeshPrefab_Default
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &8233015818774569626
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8233015818774569630}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &8233015818774569629
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8233015818774569630}
+ m_Mesh: {fileID: 0}
+--- !u!23 &8233015818774569628
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8233015818774569630}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!64 &8233015818774569631
+MeshCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8233015818774569630}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 4
+ m_Convex: 0
+ m_CookingOptions: -1
+ m_Mesh: {fileID: 0}
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/DynamicMeshPrefab_Default.prefab.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/DynamicMeshPrefab_Default.prefab.meta
new file mode 100644
index 0000000..bf19a8d
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/DynamicMeshPrefab_Default.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 66ff45e19501b9d46953d454f972a44f
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/DynamicMeshPrefab_Occlusion.prefab b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/DynamicMeshPrefab_Occlusion.prefab
new file mode 100644
index 0000000..962c95e
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/DynamicMeshPrefab_Occlusion.prefab
@@ -0,0 +1,98 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &5489681467619248415
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 5489681467619248411}
+ - component: {fileID: 5489681467619248412}
+ - component: {fileID: 5489681467619248413}
+ - component: {fileID: 5489681467619248414}
+ m_Layer: 0
+ m_Name: DynamicMeshPrefab
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &5489681467619248411
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5489681467619248415}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &5489681467619248412
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5489681467619248415}
+ m_Mesh: {fileID: 0}
+--- !u!23 &5489681467619248413
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5489681467619248415}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 6ae6f0f40939f294aae5b64149c541c1, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!64 &5489681467619248414
+MeshCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5489681467619248415}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 4
+ m_Convex: 0
+ m_CookingOptions: -1
+ m_Mesh: {fileID: 0}
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/DynamicMeshPrefab_Occlusion.prefab.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/DynamicMeshPrefab_Occlusion.prefab.meta
new file mode 100644
index 0000000..17c9a76
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/DynamicMeshPrefab_Occlusion.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 3ebc6439fa8ba274985db624056324df
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/FallingSphere.cs b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/FallingSphere.cs
new file mode 100644
index 0000000..42ae0bf
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/FallingSphere.cs
@@ -0,0 +1,30 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace UnityEngine.XR.OpenXR.Samples.MeshingFeature
+{
+ public class FallingSphere : MonoBehaviour
+ {
+ private Vector3 starting;
+ private Rigidbody rb;
+
+ // Start is called before the first frame update
+ void Start()
+ {
+ rb = GetComponent();
+ starting = transform.position;
+ }
+
+ // Update is called once per frame
+ void FixedUpdate()
+ {
+ if (transform.position.y < -10)
+ {
+ rb.velocity = Vector3.zero;
+ rb.angularVelocity = Vector3.zero;
+ rb.MovePosition(starting);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/FallingSphere.cs.meta b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/FallingSphere.cs.meta
new file mode 100644
index 0000000..9a1ff7d
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/FallingSphere.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ffaae9a29fa4521418bd21356c1f6347
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/MeshingBehaviour.cs b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/MeshingBehaviour.cs
new file mode 100644
index 0000000..d740af4
--- /dev/null
+++ b/com.htc.upm.vive.openxr/OpenXRSceneUnderstanding/Samples~/Meshing Subsystem Feature/MeshingBehaviour.cs
@@ -0,0 +1,290 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.SubsystemsImplementation;
+using UnityEngine.XR;
+using UnityEngine.InputSystem;
+using VIVE.SceneUnderstanding;
+
+namespace UnityEngine.XR.OpenXR.Samples.MeshingFeature
+{
+ public class MeshingBehaviour : MonoBehaviour
+ {
+ public GameObject emptyMeshPrefab_Default;
+ public GameObject emptyMeshPrefab_Occlusion;
+ public Material meshMat_Default;
+ public Material meshMat_Occlusion;
+ private GameObject emptyMeshPrefab;
+ private Material meshesMat;
+ public TextMesh textMesh;
+ public Transform target;
+ public bool isOcclusion = true;
+ private XRMeshSubsystem s_MeshSubsystem;
+ private List s_MeshInfos = new List();
+
+ private Dictionary m_MeshIdToGo = new Dictionary();
+
+#region OpenXR feature
+ private MeshingTeapotFeature m_MeshingFeature;
+#endregion
+
+#region Scene compute consistency
+
+ [Header("Scene compute consistency")]
+ [Tooltip("Scene compute consistency can only be set before entering the play mode.")]
+ public XrSceneComputeConsistencyMSFT m_SceneComputeConsistency =
+ XrSceneComputeConsistencyMSFT.SnapshotIncompleteFast;
+#endregion
+
+#region Scene compute bound variables
+
+ [Header("Scene compute bounds")]
+
+ // Sphere bound.
+ public bool m_EnableSphereBound;
+ private bool m_PreviousEnableSphereBound = false;
+
+ // A default sphere game object.
+ public GameObject m_SphereBoundObject;
+
+ // Box bound.
+ public bool m_EnableBoxBound;
+ private bool m_PreviousEnableBoxBound = false;
+
+ // A default cube game object
+ // Box bound is enabled by default.
+ public GameObject m_BoxBoundObject;
+
+ // Frustum bound.
+ public bool m_EnableFrustumBound;
+ private bool m_PreviousEnableFrustumBound = false;
+ public Camera m_FrustumBoundCamera;
+ public float m_FarDistance = 2.0f;
+#endregion
+
+#region Mesh compute lod variables
+ [Header("Mesh compute lod")]
+ public XrMeshComputeLodMSFT m_MeshComputeLod =
+ XrMeshComputeLodMSFT.Coarse;
+ private XrMeshComputeLodMSFT m_PrevMeshComputeLod =
+ XrMeshComputeLodMSFT.Coarse;
+#endregion
+ void Start()
+ {
+ // Set the mesh prefab to default material.
+ if(emptyMeshPrefab_Occlusion == null || emptyMeshPrefab_Default == null)
+ {
+ return;
+ }
+ emptyMeshPrefab = isOcclusion ? emptyMeshPrefab_Occlusion : emptyMeshPrefab_Default;
+
+ m_MeshingFeature = OpenXRSettings.Instance.GetFeature();
+ if (m_MeshingFeature == null || m_MeshingFeature.enabled == false)
+ {
+ enabled = false;
+ return;
+ }
+
+ var meshSubsystems = new List();
+ SubsystemManager.GetInstances(meshSubsystems);
+ if (meshSubsystems.Count == 1)
+ {
+ s_MeshSubsystem = meshSubsystems[0];
+ textMesh.gameObject.SetActive(false);
+ }
+ else
+ {
+#if UNITY_EDITOR
+ textMesh.text = "Failed to initialize MeshSubsystem.\nTry reloading the Unity Editor";
+#else
+ textMesh.text = "Failed to initialize MeshSubsystem.";
+#endif
+ enabled = false;
+ }
+
+ if (m_FrustumBoundCamera == null)
+ {
+ m_FrustumBoundCamera = Camera.main;
+ }
+
+ // Set scene compute consistency at the start.
+ m_MeshingFeature.SetSceneComputeConsistency(m_SceneComputeConsistency);
+
+ // Set mesh compute lod.
+ m_MeshingFeature.SetMeshComputeLod(m_MeshComputeLod);
+ }
+
+ void Update()
+ {
+ if (s_MeshSubsystem.running && s_MeshSubsystem.TryGetMeshInfos(s_MeshInfos))
+ {
+ foreach (var meshInfo in s_MeshInfos)
+ {
+ switch (meshInfo.ChangeState)
+ {
+ case MeshChangeState.Added:
+ case MeshChangeState.Updated:
+ if (!m_MeshIdToGo.TryGetValue(meshInfo.MeshId, out var go))
+ {
+ go = Instantiate(emptyMeshPrefab, target, false);
+ m_MeshIdToGo[meshInfo.MeshId] = go;
+ }
+
+ var mesh = go.GetComponent