diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..4a8e0587b2b24d3e49df047e7fbb8d42b7a1fe8f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,93 @@
+# This .gitignore file should be placed at the root of your Unity project directory
+#
+# Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore
+#
+/[Ll]ibrary/
+/[Tt]emp/
+/[Oo]bj/
+/[Bb]uild/
+/[Bb]uilds/
+/[Ll]ogs/
+/[Uu]ser[Ss]ettings/
+
+# MemoryCaptures can get excessive in size.
+# They also could contain extremely sensitive data
+/[Mm]emoryCaptures/
+
+# Asset meta data should only be ignored when the corresponding asset is also ignored
+!/[Aa]ssets/**/*.meta
+
+# Uncomment this line if you wish to ignore the asset store tools plugin
+# /[Aa]ssets/AssetStoreTools*
+
+# Autogenerated Jetbrains Rider plugin
+/[Aa]ssets/Plugins/Editor/JetBrains*
+
+# Visual Studio cache directory
+.vs/
+.vscode/
+
+# Gradle cache directory
+.gradle/
+
+# Autogenerated VS/MD/Consulo solution and project files
+ExportedObj/
+.consulo/
+*.csproj
+*.unityproj
+*.sln
+*.suo
+*.tmp
+*.user
+*.userprefs
+*.pidb
+*.booproj
+*.svd
+*.pdb
+*.mdb
+*.opendb
+*.VC.db
+
+# Unity3D generated meta files
+*.pidb.meta
+*.pdb.meta
+*.mdb.meta
+
+# Unity3D generated file on crash reports
+sysinfo.txt
+
+# Builds
+*.apk
+*.aab
+*.unitypackage
+
+# Crashlytics generated file
+crashlytics-build.properties
+
+# Packed Addressables
+/[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin*
+
+# Temporary auto-generated Android Assets
+/[Aa]ssets/[Ss]treamingAssets/aa.meta
+/[Aa]ssets/[Ss]treamingAssets/aa/*
+
+# Visual Studio
+.vscode/
+.vsconfig
+
+# Rider
+.idea/
+
+# Ignore auto-generated XR because these are per-end user settings
+/Assets/XR/
+/Assets/XR.meta
+
+# MacOS
+.DS_Store
+
+# Packages sample directory
+/Samples
+/Samples.meta
+
+# Other
+/[Rr]ecordings/
diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000000000000000000000000000000000000..22c1fb24bdd80bbdaf6704783accc37629d1fd88
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,23 @@
+Copyright (c) 2024 Lehrstuhl für Mensch-Computer-Interaktion, Julius-Maximilians-Universität Würzburg, Germany
+
+----
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/README.md b/README.md
index 0bcb098b0e2a2f199655e6865467b923b8c2fc89..df9d313a691f67255b6b92dde66e03867d77b315 100644
--- a/README.md
+++ b/README.md
@@ -1,93 +1,41 @@
-# realitystack-visualindicators
+# Overview
 
+[<img src="https://ieeexplore.ieee.org/mediastore/IEEE/content/media/2945/10305180/10269746/tvcg-lin-3320234-fig-1-source-large.gif" alt="Teaser">](./)
 
+This repository provides a Unity package containing the visual indicators proposed in the paper "Visual Indicators Representing Avatars' Authenticity in Social Virtual Reality and Their Impacts on Perceived Trustworthiness".
 
-## Getting started
-
-To make it easy for you to get started with GitLab, here's a list of recommended next steps.
-
-Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
-
-## Add your files
-
-- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
-- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
-
-```
-cd existing_repo
-git remote add origin https://gitlab2.informatik.uni-wuerzburg.de/hci-development/realitystack/realitystack-visualindicators.git
-git branch -M main
-git push -uf origin main
-```
-
-## Integrate with your tools
-
-- [ ] [Set up project integrations](https://gitlab2.informatik.uni-wuerzburg.de/hci-development/realitystack/realitystack-visualindicators/-/settings/integrations)
-
-## Collaborate with your team
 
-- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
-- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
-- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
-- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
-- [ ] [Set auto-merge](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
+## Reference
 
-## Test and Deploy
+Lin, J., Cronjé, J., Wienrich, C., Pauli, P., & Latoschik, M. E. (2023). Visual Indicators Representing Avatars' Authenticity in Social Virtual Reality and Their Impacts on Perceived Trustworthiness. IEEE Transactions on Visualization and Computer Graphics, 29(11), 4589-4599.
 
-Use the built-in continuous integration in GitLab.
+DOI: [10.1109/TVCG.2023.3320234](https://doi.org/10.1109/TVCG.2023.3320234)
 
-- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/)
-- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing (SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
-- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
-- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
-- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
+# Contents
+- Shaders and control scripts for the VIs
+- Example scene with the VIs applied on an avatar as sample.
 
-***
-
-# Editing this README
-
-When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thanks to [makeareadme.com](https://www.makeareadme.com/) for this template.
-
-## Suggestions for a good README
-
-Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
-
-## Name
-Choose a self-explaining name for your project.
-
-## Description
-Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
-
-## Badges
-On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
+## Getting started
+- Import the package through Unity Package Manager with the git URL.
+- Import [TMP Essential Resources](https://docs.unity3d.com/Packages/com.unity.textmeshpro@4.0/manual/index.html). 
+- Import the Sample "VI Showcase" of the package 
 
-## Visuals
-Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
 
-## Installation
-Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
 
-## Usage
-Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
+# License
+<p xmlns:cc="http://creativecommons.org/ns#">
+  This work by <a rel="cc:attributionURL dct:creator" property="cc:attributionName" href="https://hci.uni-wuerzburg.de">Jinghuai Lin, Johrine Cronjé, Carolin Wienrich, Paul Pauli and Marc E. Latoschik</a> is
+  licensed under <a href="http://creativecommons.org/licenses/by-nc-sa/4.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-NC-SA 4.0
+  <img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1">
+  <img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1">
+  <img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1">
+  <img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/sa.svg?ref=chooser-v1"></a>.
+</p>
 
-## Support
-Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
 
-## Roadmap
-If you have ideas for releases in the future, it is a good idea to list them in the README.
 
-## Contributing
-State if you are open to contributions and what your requirements are for accepting them.
 
-For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
 
-You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
 
-## Authors and acknowledgment
-Show your appreciation to those who have contributed to the project.
 
-## License
-For open source projects, say how it is licensed.
 
-## Project status
-If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
diff --git a/Runtime/Plugins.meta b/Runtime/Plugins.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e98e7eb3c269d5cebab52e9363e02689ad7419f8
--- /dev/null
+++ b/Runtime/Plugins.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7267b5b65976c2648844edcdda48efc3
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Plugins/QuickOutline.meta b/Runtime/Plugins/QuickOutline.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4affb59ea7cca5d683bf1888be34b10bee9e3d81
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 13d6dec0d07c8ab46bffdaddb5fa7494
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Plugins/QuickOutline/Readme.txt b/Runtime/Plugins/QuickOutline/Readme.txt
new file mode 100644
index 0000000000000000000000000000000000000000..16766e89dee9ef30f91c1ee1ee335d82e35a6166
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Readme.txt
@@ -0,0 +1,26 @@
+QuickOutline
+============
+
+Developed by Chris Nolet (c) 2018
+
+
+Instructions
+------------
+
+To add an outline to an object, drag-and-drop the Outline.cs script onto the
+object. The outline materials will be loaded at runtime.
+
+You can also add outlines programmatically with:
+
+    var outline = gameObject.AddComponent<Outline>();
+
+    outline.OutlineMode = Outline.Mode.OutlineAll;
+    outline.OutlineColor = Color.yellow;
+    outline.OutlineWidth = 5f;
+
+The outline script does a small amount of work in Awake(). For best
+results, use outline.enabled to toggle the outline. Avoid removing and
+re-adding the component if possible.
+
+For large meshes, you may also like to enable 'Precompute Outline' in the
+editor. This will reduce the amount of work performed in Awake().
diff --git a/Runtime/Plugins/QuickOutline/Readme.txt.meta b/Runtime/Plugins/QuickOutline/Readme.txt.meta
new file mode 100644
index 0000000000000000000000000000000000000000..56560a7a71512398fe80a250e199fcc4a800940c
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Readme.txt.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 5933bfd39d7a5b843a0ed821f85bca19
+timeCreated: 1522619008
+licenseType: Store
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Plugins/QuickOutline/Resources.meta b/Runtime/Plugins/QuickOutline/Resources.meta
new file mode 100644
index 0000000000000000000000000000000000000000..6135a9526d808302717e5ff3f534377f8d650a73
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Resources.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 70fd40674751a8042a8b9b2e8d9f915f
+folderAsset: yes
+timeCreated: 1522559128
+licenseType: Store
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Plugins/QuickOutline/Resources/Materials.meta b/Runtime/Plugins/QuickOutline/Resources/Materials.meta
new file mode 100644
index 0000000000000000000000000000000000000000..2508b0f5ace8eea0af9b1c7e1cc9d0f75918c5c7
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Resources/Materials.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 80ac8e52d3c31a94babd161e86bc6b97
+folderAsset: yes
+timeCreated: 1522559139
+licenseType: Store
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Plugins/QuickOutline/Resources/Materials/OutlineFill.mat b/Runtime/Plugins/QuickOutline/Resources/Materials/OutlineFill.mat
new file mode 100644
index 0000000000000000000000000000000000000000..cb021646a226f76251814cf8bbebef23fe7cbbed
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Resources/Materials/OutlineFill.mat
@@ -0,0 +1,25 @@
+%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: OutlineFill
+  m_Shader: {fileID: 4800000, guid: 4e76d4023d7e0411297c670f878973e2, type: 3}
+  m_ShaderKeywords: 
+  m_LightmapFlags: 4
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_SavedProperties:
+    serializedVersion: 3
+    m_TexEnvs: []
+    m_Floats:
+    - _OutlineWidth: 2
+    - _ZTest: 8
+    m_Colors:
+    - _OutlineColor: {r: 1, g: 1, b: 1, a: 1}
diff --git a/Runtime/Plugins/QuickOutline/Resources/Materials/OutlineFill.mat.meta b/Runtime/Plugins/QuickOutline/Resources/Materials/OutlineFill.mat.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5ea7f694562947d6b3bc18251fcb854638bd9aad
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Resources/Materials/OutlineFill.mat.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 311313efa011949e98b6761d652ad13c
+timeCreated: 1520576285
+licenseType: Store
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 2100000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Plugins/QuickOutline/Resources/Materials/OutlineMask.mat b/Runtime/Plugins/QuickOutline/Resources/Materials/OutlineMask.mat
new file mode 100644
index 0000000000000000000000000000000000000000..80d49faa1244209bf0d20c42eaa529b378adaae4
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Resources/Materials/OutlineMask.mat
@@ -0,0 +1,23 @@
+%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: OutlineMask
+  m_Shader: {fileID: 4800000, guid: 341b058cd7dee4f5cba5cc59a513619e, type: 3}
+  m_ShaderKeywords: 
+  m_LightmapFlags: 4
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_SavedProperties:
+    serializedVersion: 3
+    m_TexEnvs: []
+    m_Floats:
+    - _ZTest: 8
+    m_Colors: []
diff --git a/Runtime/Plugins/QuickOutline/Resources/Materials/OutlineMask.mat.meta b/Runtime/Plugins/QuickOutline/Resources/Materials/OutlineMask.mat.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0f5ed277e3c5941367ddbac57e21eb4381cbcdef
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Resources/Materials/OutlineMask.mat.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 106f3ff43a17d4967a2b64c7a92e49ec
+timeCreated: 1520576276
+licenseType: Store
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 2100000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Plugins/QuickOutline/Resources/Shaders.meta b/Runtime/Plugins/QuickOutline/Resources/Shaders.meta
new file mode 100644
index 0000000000000000000000000000000000000000..91118d5605c5fd35b9baac5f88b3b246a767f32d
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Resources/Shaders.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 6a63caa2b0e993043a42c11f35ff2d1a
+folderAsset: yes
+timeCreated: 1522559134
+licenseType: Store
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Plugins/QuickOutline/Resources/Shaders/OutlineFill.shader b/Runtime/Plugins/QuickOutline/Resources/Shaders/OutlineFill.shader
new file mode 100644
index 0000000000000000000000000000000000000000..f546473e718913662a88d58a6ad82f5eb7475c53
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Resources/Shaders/OutlineFill.shader
@@ -0,0 +1,81 @@
+//
+//  OutlineFill.shader
+//  QuickOutline
+//
+//  Created by Chris Nolet on 2/21/18.
+//  Copyright © 2018 Chris Nolet. All rights reserved.
+//
+
+Shader "Custom/Outline Fill" {
+  Properties {
+    [Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 0
+
+    _OutlineColor("Outline Color", Color) = (1, 1, 1, 1)
+    _OutlineWidth("Outline Width", Range(0, 10)) = 2
+  }
+
+  SubShader {
+    Tags {
+      "Queue" = "Transparent+110"
+      "RenderType" = "Transparent"
+      "DisableBatching" = "True"
+    }
+
+    Pass {
+      Name "Fill"
+      Cull Off
+      ZTest [_ZTest]
+      ZWrite Off
+      Blend SrcAlpha OneMinusSrcAlpha
+      ColorMask RGB
+
+      Stencil {
+        Ref 1
+        Comp NotEqual
+      }
+
+      CGPROGRAM
+      #include "UnityCG.cginc"
+
+      #pragma vertex vert
+      #pragma fragment frag
+
+      struct appdata {
+        float4 vertex : POSITION;
+        float3 normal : NORMAL;
+        float3 smoothNormal : TEXCOORD3;
+        UNITY_VERTEX_INPUT_INSTANCE_ID
+      };
+
+      struct v2f {
+        float4 position : SV_POSITION;
+        fixed4 color : COLOR;
+        UNITY_VERTEX_OUTPUT_STEREO
+      };
+
+      uniform fixed4 _OutlineColor;
+      uniform float _OutlineWidth;
+
+      v2f vert(appdata input) {
+        v2f output;
+
+        UNITY_SETUP_INSTANCE_ID(input);
+        UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
+
+        float3 normal = any(input.smoothNormal) ? input.smoothNormal : input.normal;
+        float3 viewPosition = UnityObjectToViewPos(input.vertex);
+        float3 viewNormal = normalize(mul((float3x3)UNITY_MATRIX_IT_MV, normal));
+
+        output.position = UnityViewToClipPos(viewPosition + viewNormal * -viewPosition.z * _OutlineWidth / 1000.0);
+        output.color = _OutlineColor;
+
+        return output;
+      }
+
+      fixed4 frag(v2f input) : SV_Target {
+        return input.color;
+      }
+      ENDCG
+    }
+  }
+}
diff --git a/Runtime/Plugins/QuickOutline/Resources/Shaders/OutlineFill.shader.meta b/Runtime/Plugins/QuickOutline/Resources/Shaders/OutlineFill.shader.meta
new file mode 100644
index 0000000000000000000000000000000000000000..408fa9a7ab467ac88c8e3feec70a833e2b451357
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Resources/Shaders/OutlineFill.shader.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 4e76d4023d7e0411297c670f878973e2
+timeCreated: 1520575782
+licenseType: Store
+ShaderImporter:
+  externalObjects: {}
+  defaultTextures: []
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Plugins/QuickOutline/Resources/Shaders/OutlineMask.shader b/Runtime/Plugins/QuickOutline/Resources/Shaders/OutlineMask.shader
new file mode 100644
index 0000000000000000000000000000000000000000..530d8c05467b5453b5728acd3ef21f7bf13c7ada
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Resources/Shaders/OutlineMask.shader
@@ -0,0 +1,33 @@
+//
+//  OutlineMask.shader
+//  QuickOutline
+//
+//  Created by Chris Nolet on 2/21/18.
+//  Copyright © 2018 Chris Nolet. All rights reserved.
+//
+
+Shader "Custom/Outline Mask" {
+  Properties {
+    [Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 0
+  }
+
+  SubShader {
+    Tags {
+      "Queue" = "Transparent+100"
+      "RenderType" = "Transparent"
+    }
+
+    Pass {
+      Name "Mask"
+      Cull Off
+      ZTest [_ZTest]
+      ZWrite Off
+      ColorMask 0
+
+      Stencil {
+        Ref 1
+        Pass Replace
+      }
+    }
+  }
+}
diff --git a/Runtime/Plugins/QuickOutline/Resources/Shaders/OutlineMask.shader.meta b/Runtime/Plugins/QuickOutline/Resources/Shaders/OutlineMask.shader.meta
new file mode 100644
index 0000000000000000000000000000000000000000..38db7c5cea44d6eea7f5c92f88247231799ad27b
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Resources/Shaders/OutlineMask.shader.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 341b058cd7dee4f5cba5cc59a513619e
+timeCreated: 1520575773
+licenseType: Store
+ShaderImporter:
+  externalObjects: {}
+  defaultTextures: []
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Plugins/QuickOutline/Samples.meta b/Runtime/Plugins/QuickOutline/Samples.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7d6c23d04ea4ce9e70efd971b1d8d07c4690ffad
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Samples.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 932f8193e5396db4babac4756c406dee
+folderAsset: yes
+timeCreated: 1522559213
+licenseType: Store
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Plugins/QuickOutline/Samples/Materials.meta b/Runtime/Plugins/QuickOutline/Samples/Materials.meta
new file mode 100644
index 0000000000000000000000000000000000000000..cb148197c9fc4c24fa5c0be3884e686dfa68bbcf
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Samples/Materials.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 2b0040b0ed7fbd64693e9195d13d25f9
+folderAsset: yes
+timeCreated: 1522615600
+licenseType: Store
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Plugins/QuickOutline/Samples/Materials/Plane.mat b/Runtime/Plugins/QuickOutline/Samples/Materials/Plane.mat
new file mode 100644
index 0000000000000000000000000000000000000000..06fa1aa0a85a9a8e17e2fb9e0b7cd2bd8ba52320
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Samples/Materials/Plane.mat
@@ -0,0 +1,76 @@
+%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: Plane
+  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: 1
+    - _Mode: 0
+    - _OcclusionStrength: 1
+    - _Parallax: 0.02
+    - _SmoothnessTextureChannel: 0
+    - _SpecularHighlights: 1
+    - _SrcBlend: 1
+    - _UVSec: 0
+    - _ZWrite: 1
+    m_Colors:
+    - _Color: {r: 0.2509804, g: 0.2509804, b: 0.5019608, a: 1}
+    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/Runtime/Plugins/QuickOutline/Samples/Materials/Plane.mat.meta b/Runtime/Plugins/QuickOutline/Samples/Materials/Plane.mat.meta
new file mode 100644
index 0000000000000000000000000000000000000000..665a9d652260ed6de97a6595a3687ed55ba67975
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Samples/Materials/Plane.mat.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: f58cf65ea995c4b45be95713bdea8134
+timeCreated: 1522540975
+licenseType: Store
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 2100000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Plugins/QuickOutline/Samples/Scenes.meta b/Runtime/Plugins/QuickOutline/Samples/Scenes.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7f5c774b58a99ce178801eb779b2eb29f2cd6933
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Samples/Scenes.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 3916faa55c6a94248959031ee0ad499f
+folderAsset: yes
+timeCreated: 1522615614
+licenseType: Store
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Plugins/QuickOutline/Samples/Scenes/QuickOutline.unity b/Runtime/Plugins/QuickOutline/Samples/Scenes/QuickOutline.unity
new file mode 100644
index 0000000000000000000000000000000000000000..33911b7f72ec0a2defec89e19d20c9c0561478c8
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Samples/Scenes/QuickOutline.unity
@@ -0,0 +1,778 @@
+%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: 8
+  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: 820273532}
+  m_IndirectSpecularColor: {r: 0.18028383, g: 0.22571409, b: 0.30692282, a: 1}
+--- !u!157 &3
+LightmapSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 9
+  m_GIWorkflowMode: 0
+  m_GISettings:
+    serializedVersion: 2
+    m_BounceScale: 1
+    m_IndirectOutputScale: 1
+    m_AlbedoBoost: 1
+    m_TemporalCoherenceThreshold: 1
+    m_EnvironmentLightingMode: 0
+    m_EnableBakedLightmaps: 1
+    m_EnableRealtimeLightmaps: 1
+  m_LightmapEditorSettings:
+    serializedVersion: 8
+    m_Resolution: 2
+    m_BakeResolution: 40
+    m_TextureWidth: 1024
+    m_TextureHeight: 1024
+    m_AO: 0
+    m_AOMaxDistance: 1
+    m_CompAOExponent: 1
+    m_CompAOExponentDirect: 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: 3
+    m_BakeBackend: 0
+    m_PVRSampling: 1
+    m_PVRDirectSampleCount: 32
+    m_PVRSampleCount: 500
+    m_PVRBounces: 2
+    m_PVRFiltering: 0
+    m_PVRFilteringMode: 1
+    m_PVRCulling: 1
+    m_PVRFilteringGaussRadiusDirect: 1
+    m_PVRFilteringGaussRadiusIndirect: 5
+    m_PVRFilteringGaussRadiusAO: 2
+    m_PVRFilteringAtrousColorSigma: 1
+    m_PVRFilteringAtrousNormalSigma: 1
+    m_PVRFilteringAtrousPositionSigma: 1
+  m_LightingDataAsset: {fileID: 0}
+  m_ShadowMaskMode: 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
+  m_NavMeshData: {fileID: 0}
+--- !u!1 &122269556
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 122269561}
+  - component: {fileID: 122269560}
+  - component: {fileID: 122269558}
+  - component: {fileID: 122269557}
+  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 &122269557
+AudioListener:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 122269556}
+  m_Enabled: 1
+--- !u!124 &122269558
+Behaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 122269556}
+  m_Enabled: 1
+--- !u!20 &122269560
+Camera:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 122269556}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_ClearFlags: 1
+  m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+  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: -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_ForceIntoRT: 0
+  m_OcclusionCulling: 1
+  m_StereoConvergence: 10
+  m_StereoSeparation: 0.022
+  m_StereoMirrorMode: 0
+--- !u!4 &122269561
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 122269556}
+  m_LocalRotation: {x: 0.3420201, y: 0, z: 0, w: 0.9396927}
+  m_LocalPosition: {x: 0, y: 3, z: -4}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 40, y: 0, z: 0}
+--- !u!1 &124162633
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 124162634}
+  - component: {fileID: 124162638}
+  - component: {fileID: 124162636}
+  - component: {fileID: 124162635}
+  m_Layer: 0
+  m_Name: Outline Hidden
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &124162634
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 124162633}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: -2, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 0.5, z: 1}
+  m_Children: []
+  m_Father: {fileID: 935070115}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &124162635
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 124162633}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  outlineMode: 2
+  outlineColor: {r: 1, g: 0.2509804, b: 0.2509804, a: 1}
+  outlineWidth: 6
+--- !u!23 &124162636
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 124162633}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  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: 1
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 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!33 &124162638
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 124162633}
+  m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &796971894
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 796971895}
+  - component: {fileID: 796971899}
+  - component: {fileID: 796971897}
+  - component: {fileID: 796971896}
+  m_Layer: 0
+  m_Name: Outline And Silhouette
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &796971895
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 796971894}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 2, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 0.5, z: 1}
+  m_Children: []
+  m_Father: {fileID: 935070115}
+  m_RootOrder: 3
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &796971896
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 796971894}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  outlineMode: 3
+  outlineColor: {r: 0.2509804, g: 1, b: 1, a: 1}
+  outlineWidth: 6
+--- !u!23 &796971897
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 796971894}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  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: 1
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 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!33 &796971899
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 796971894}
+  m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &820273531
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 820273533}
+  - component: {fileID: 820273532}
+  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 &820273532
+Light:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 820273531}
+  m_Enabled: 1
+  serializedVersion: 8
+  m_Type: 1
+  m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
+  m_Intensity: 1
+  m_Range: 10
+  m_SpotAngle: 30
+  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_Cookie: {fileID: 0}
+  m_DrawHalo: 0
+  m_Flare: {fileID: 0}
+  m_RenderMode: 0
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_Lightmapping: 4
+  m_AreaSize: {x: 1, y: 1}
+  m_BounceIntensity: 1
+  m_ColorTemperature: 6570
+  m_UseColorTemperature: 0
+  m_ShadowRadius: 0
+  m_ShadowAngle: 0
+--- !u!4 &820273533
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 820273531}
+  m_LocalRotation: {x: 0.40821788, y: 0.23456976, z: -0.10938167, w: 0.8754261}
+  m_LocalPosition: {x: 0, y: 3, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 50, y: 30, z: 0}
+--- !u!1 &935070114
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 935070115}
+  m_Layer: 0
+  m_Name: Outlined Objects
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &935070115
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 935070114}
+  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: 1781008194}
+  - {fileID: 124162634}
+  - {fileID: 1346396411}
+  - {fileID: 796971895}
+  - {fileID: 1083549395}
+  m_Father: {fileID: 0}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1083549394
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 1083549395}
+  - component: {fileID: 1083549399}
+  - component: {fileID: 1083549397}
+  - component: {fileID: 1083549396}
+  m_Layer: 0
+  m_Name: Outline Visible
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1083549395
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1083549394}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 4, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 935070115}
+  m_RootOrder: 4
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1083549396
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1083549394}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  outlineMode: 1
+  outlineColor: {r: 0.2509804, g: 1, b: 0.2509804, a: 1}
+  outlineWidth: 6
+--- !u!23 &1083549397
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1083549394}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  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: 1
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 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!33 &1083549399
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1083549394}
+  m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &1346396410
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 1346396411}
+  - component: {fileID: 1346396415}
+  - component: {fileID: 1346396413}
+  - component: {fileID: 1346396412}
+  m_Layer: 0
+  m_Name: Outline All
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1346396411
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1346396410}
+  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: 935070115}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1346396412
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1346396410}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  outlineMode: 0
+  outlineColor: {r: 1, g: 1, b: 0.2509804, a: 1}
+  outlineWidth: 6
+--- !u!23 &1346396413
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1346396410}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  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: 1
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 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!33 &1346396415
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1346396410}
+  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &1580478821
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 1580478825}
+  - component: {fileID: 1580478824}
+  - component: {fileID: 1580478822}
+  m_Layer: 0
+  m_Name: Plane
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!23 &1580478822
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1580478821}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_Materials:
+  - {fileID: 2100000, guid: f58cf65ea995c4b45be95713bdea8134, type: 2}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 1
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 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!33 &1580478824
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1580478821}
+  m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1580478825
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1580478821}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 10, y: 1, z: 10}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 3
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1781008193
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 1781008194}
+  - component: {fileID: 1781008198}
+  - component: {fileID: 1781008196}
+  - component: {fileID: 1781008195}
+  m_Layer: 0
+  m_Name: Silhouette Only
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1781008194
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1781008193}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: -4, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 935070115}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1781008195
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1781008193}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  outlineMode: 4
+  outlineColor: {r: 1, g: 1, b: 1, a: 1}
+  outlineWidth: 6
+--- !u!23 &1781008196
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1781008193}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  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: 1
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 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!33 &1781008198
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1781008193}
+  m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Runtime/Plugins/QuickOutline/Samples/Scenes/QuickOutline.unity.meta b/Runtime/Plugins/QuickOutline/Samples/Scenes/QuickOutline.unity.meta
new file mode 100644
index 0000000000000000000000000000000000000000..2e6c9c30089f79bd6c1009c55adc03dc1258b6e5
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Samples/Scenes/QuickOutline.unity.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: f23712c79adc910408e872b127e825cf
+timeCreated: 1522615825
+licenseType: Store
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Plugins/QuickOutline/Scripts.meta b/Runtime/Plugins/QuickOutline/Scripts.meta
new file mode 100644
index 0000000000000000000000000000000000000000..2f7793d8fe0e505c4419ca91ea9a68e9448e6cd1
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Scripts.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 3ddbd65d69a9f0b48bab4fe96a1fe099
+folderAsset: yes
+timeCreated: 1522559122
+licenseType: Store
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Plugins/QuickOutline/Scripts/Outline.cs b/Runtime/Plugins/QuickOutline/Scripts/Outline.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d49f581f2ae6bc72e43cf7a5683875b53b17070c
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Scripts/Outline.cs
@@ -0,0 +1,277 @@
+//
+//  Outline.cs
+//  QuickOutline
+//
+//  Created by Chris Nolet on 3/30/18.
+//  Copyright © 2018 Chris Nolet. All rights reserved.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+
+[DisallowMultipleComponent]
+
+public class Outline : MonoBehaviour {
+  private static HashSet<Mesh> registeredMeshes = new HashSet<Mesh>();
+
+  public enum Mode {
+    OutlineAll,
+    OutlineVisible,
+    OutlineHidden,
+    OutlineAndSilhouette,
+    SilhouetteOnly
+  }
+
+  public Mode OutlineMode {
+    get { return outlineMode; }
+    set {
+      outlineMode = value;
+      needsUpdate = true;
+    }
+  }
+
+  public Color OutlineColor {
+    get { return outlineColor; }
+    set {
+      outlineColor = value;
+      needsUpdate = true;
+    }
+  }
+
+  public float OutlineWidth {
+    get { return outlineWidth; }
+    set {
+      outlineWidth = value;
+      needsUpdate = true;
+    }
+  }
+
+  [Serializable]
+  private class ListVector3 {
+    public List<Vector3> data;
+  }
+
+  [SerializeField]
+  private Mode outlineMode;
+
+  [SerializeField]
+  private Color outlineColor = Color.white;
+
+  [SerializeField, Range(0f, 10f)]
+  private float outlineWidth = 2f;
+
+  [Header("Optional")]
+
+  [SerializeField, Tooltip("Precompute enabled: Per-vertex calculations are performed in the editor and serialized with the object. "
+  + "Precompute disabled: Per-vertex calculations are performed at runtime in Awake(). This may cause a pause for large meshes.")]
+  private bool precomputeOutline;
+
+  [SerializeField, HideInInspector]
+  private List<Mesh> bakeKeys = new List<Mesh>();
+
+  [SerializeField, HideInInspector]
+  private List<ListVector3> bakeValues = new List<ListVector3>();
+
+  private Renderer[] renderers;
+  private Material outlineMaskMaterial;
+  private Material outlineFillMaterial;
+
+  private bool needsUpdate;
+
+  void Awake() {
+
+    // Cache renderers
+    renderers = GetComponentsInChildren<Renderer>();
+
+    // Instantiate outline materials
+    outlineMaskMaterial = Instantiate(Resources.Load<Material>(@"Materials/OutlineMask"));
+    outlineFillMaterial = Instantiate(Resources.Load<Material>(@"Materials/OutlineFill"));
+
+    outlineMaskMaterial.name = "OutlineMask (Instance)";
+    outlineFillMaterial.name = "OutlineFill (Instance)";
+
+    // Retrieve or generate smooth normals
+    LoadSmoothNormals();
+
+    // Apply material properties immediately
+    needsUpdate = true;
+  }
+
+  void OnEnable() {
+    foreach (var renderer in renderers) {
+
+      // Append outline shaders
+      var materials = renderer.sharedMaterials.ToList();
+
+      materials.Add(outlineMaskMaterial);
+      materials.Add(outlineFillMaterial);
+
+      renderer.materials = materials.ToArray();
+    }
+  }
+
+  void OnValidate() {
+
+    // Update material properties
+    needsUpdate = true;
+
+    // Clear cache when baking is disabled or corrupted
+    if (!precomputeOutline && bakeKeys.Count != 0 || bakeKeys.Count != bakeValues.Count) {
+      bakeKeys.Clear();
+      bakeValues.Clear();
+    }
+
+    // Generate smooth normals when baking is enabled
+    if (precomputeOutline && bakeKeys.Count == 0) {
+      Bake();
+    }
+  }
+
+  void Update() {
+    if (needsUpdate) {
+      needsUpdate = false;
+
+      UpdateMaterialProperties();
+    }
+  }
+
+  void OnDisable() {
+    foreach (var renderer in renderers) {
+
+      // Remove outline shaders
+      var materials = renderer.sharedMaterials.ToList();
+
+      materials.Remove(outlineMaskMaterial);
+      materials.Remove(outlineFillMaterial);
+
+      renderer.materials = materials.ToArray();
+    }
+  }
+
+  void OnDestroy() {
+
+    // Destroy material instances
+    Destroy(outlineMaskMaterial);
+    Destroy(outlineFillMaterial);
+  }
+
+  void Bake() {
+
+    // Generate smooth normals for each mesh
+    var bakedMeshes = new HashSet<Mesh>();
+
+    foreach (var meshFilter in GetComponentsInChildren<MeshFilter>()) {
+
+      // Skip duplicates
+      if (!bakedMeshes.Add(meshFilter.sharedMesh)) {
+        continue;
+      }
+
+      // Serialize smooth normals
+      var smoothNormals = SmoothNormals(meshFilter.sharedMesh);
+
+      bakeKeys.Add(meshFilter.sharedMesh);
+      bakeValues.Add(new ListVector3() { data = smoothNormals });
+    }
+  }
+
+  void LoadSmoothNormals() {
+
+    // Retrieve or generate smooth normals
+    foreach (var meshFilter in GetComponentsInChildren<MeshFilter>()) {
+
+      // Skip if smooth normals have already been adopted
+      if (!registeredMeshes.Add(meshFilter.sharedMesh)) {
+        continue;
+      }
+
+      // Retrieve or generate smooth normals
+      var index = bakeKeys.IndexOf(meshFilter.sharedMesh);
+      var smoothNormals = (index >= 0) ? bakeValues[index].data : SmoothNormals(meshFilter.sharedMesh);
+
+      // Store smooth normals in UV3
+      meshFilter.sharedMesh.SetUVs(3, smoothNormals);
+    }
+
+    // Clear UV3 on skinned mesh renderers
+    foreach (var skinnedMeshRenderer in GetComponentsInChildren<SkinnedMeshRenderer>()) {
+      if (registeredMeshes.Add(skinnedMeshRenderer.sharedMesh)) {
+        skinnedMeshRenderer.sharedMesh.uv4 = new Vector2[skinnedMeshRenderer.sharedMesh.vertexCount];
+      }
+    }
+  }
+
+  List<Vector3> SmoothNormals(Mesh mesh) {
+
+    // Group vertices by location
+    var groups = mesh.vertices.Select((vertex, index) => new KeyValuePair<Vector3, int>(vertex, index)).GroupBy(pair => pair.Key);
+
+    // Copy normals to a new list
+    var smoothNormals = new List<Vector3>(mesh.normals);
+
+    // Average normals for grouped vertices
+    foreach (var group in groups) {
+
+      // Skip single vertices
+      if (group.Count() == 1) {
+        continue;
+      }
+
+      // Calculate the average normal
+      var smoothNormal = Vector3.zero;
+
+      foreach (var pair in group) {
+        smoothNormal += mesh.normals[pair.Value];
+      }
+
+      smoothNormal.Normalize();
+
+      // Assign smooth normal to each vertex
+      foreach (var pair in group) {
+        smoothNormals[pair.Value] = smoothNormal;
+      }
+    }
+
+    return smoothNormals;
+  }
+
+  void UpdateMaterialProperties() {
+
+    // Apply properties according to mode
+    outlineFillMaterial.SetColor("_OutlineColor", outlineColor);
+
+    switch (outlineMode) {
+      case Mode.OutlineAll:
+        outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
+        outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
+        outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
+        break;
+
+      case Mode.OutlineVisible:
+        outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
+        outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.LessEqual);
+        outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
+        break;
+
+      case Mode.OutlineHidden:
+        outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
+        outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Greater);
+        outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
+        break;
+
+      case Mode.OutlineAndSilhouette:
+        outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.LessEqual);
+        outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
+        outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
+        break;
+
+      case Mode.SilhouetteOnly:
+        outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.LessEqual);
+        outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Greater);
+        outlineFillMaterial.SetFloat("_OutlineWidth", 0);
+        break;
+    }
+  }
+}
diff --git a/Runtime/Plugins/QuickOutline/Scripts/Outline.cs.meta b/Runtime/Plugins/QuickOutline/Scripts/Outline.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ffa272d84d700a89054f77272191e96a56948191
--- /dev/null
+++ b/Runtime/Plugins/QuickOutline/Scripts/Outline.cs.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 5fea29bb7c508c244a1f805a5fd3fc4d
+timeCreated: 1522369084
+licenseType: Store
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Resources.meta b/Runtime/Resources.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d63b5360c065274b36b66489f65b73387d383636
--- /dev/null
+++ b/Runtime/Resources.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e2030852911239e4aae728162c116e99
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Resources/UIs.meta b/Runtime/Resources/UIs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..89444ab938d54f7f9305b54ea45bd19fbe2f36de
--- /dev/null
+++ b/Runtime/Resources/UIs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e4de4b19523c4c242901093b5d85c6b1
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Resources/UIs/UI_NAME 1.prefab b/Runtime/Resources/UIs/UI_NAME 1.prefab
new file mode 100644
index 0000000000000000000000000000000000000000..6e7ddf8e406ed44d4e12f83089cbe557297bc176
--- /dev/null
+++ b/Runtime/Resources/UIs/UI_NAME 1.prefab	
@@ -0,0 +1,238 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &4099359992782773028
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 4901539225935302558}
+  - component: {fileID: 8687501050529467104}
+  - component: {fileID: 4383191712815675672}
+  - component: {fileID: 4150080748124087018}
+  m_Layer: 5
+  m_Name: UI_NAME 1
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &4901539225935302558
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4099359992782773028}
+  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: 7656759172146049718}
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 1, y: 1}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!223 &8687501050529467104
+Canvas:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4099359992782773028}
+  m_Enabled: 1
+  serializedVersion: 3
+  m_RenderMode: 2
+  m_Camera: {fileID: 0}
+  m_PlaneDistance: 100
+  m_PixelPerfect: 0
+  m_ReceivesEvents: 1
+  m_OverrideSorting: 0
+  m_OverridePixelPerfect: 0
+  m_SortingBucketNormalizedSize: 0
+  m_VertexColorAlwaysGammaSpace: 0
+  m_AdditionalShaderChannelsFlag: 25
+  m_UpdateRectTransformForStandalone: 0
+  m_SortingLayerID: 0
+  m_SortingOrder: 0
+  m_TargetDisplay: 0
+--- !u!114 &4383191712815675672
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4099359992782773028}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_UiScaleMode: 0
+  m_ReferencePixelsPerUnit: 100
+  m_ScaleFactor: 1
+  m_ReferenceResolution: {x: 800, y: 600}
+  m_ScreenMatchMode: 0
+  m_MatchWidthOrHeight: 0
+  m_PhysicalUnit: 3
+  m_FallbackScreenDPI: 96
+  m_DefaultSpriteDPI: 96
+  m_DynamicPixelsPerUnit: 1
+  m_PresetInfoIsWorld: 0
+--- !u!114 &4150080748124087018
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4099359992782773028}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreReversedGraphics: 1
+  m_BlockingObjects: 0
+  m_BlockingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+--- !u!1 &5808381052657346681
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 7656759172146049718}
+  - component: {fileID: 6229577700800110270}
+  - component: {fileID: 4393154445435167899}
+  m_Layer: 5
+  m_Name: NAME text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &7656759172146049718
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5808381052657346681}
+  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: 4901539225935302558}
+  m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0.001}
+  m_SizeDelta: {x: 1, y: 1}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &6229577700800110270
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5808381052657346681}
+  m_CullTransparentMesh: 1
+--- !u!114 &4393154445435167899
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5808381052657346681}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_text: John Smith
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 0}
+  m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 0.08
+  m_fontSizeBase: 0.08
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 18
+  m_fontSizeMax: 72
+  m_fontStyle: 1
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 1
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: 0, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
diff --git a/Runtime/Resources/UIs/UI_NAME 1.prefab.meta b/Runtime/Resources/UIs/UI_NAME 1.prefab.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f2bb0f2e5f7b3e1d8daa8f2b282fd63914463297
--- /dev/null
+++ b/Runtime/Resources/UIs/UI_NAME 1.prefab.meta	
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: fc0ff4ee81944b540bcb66fd9e98936c
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Resources/UIs/UI_check 1.prefab b/Runtime/Resources/UIs/UI_check 1.prefab
new file mode 100644
index 0000000000000000000000000000000000000000..0c4fefda725b6f28b6aa7ca202042e0f26f2216a
--- /dev/null
+++ b/Runtime/Resources/UIs/UI_check 1.prefab	
@@ -0,0 +1,177 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &7434734054443773353
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 7434734054443773354}
+  - component: {fileID: 7434734054443773356}
+  - component: {fileID: 7434734054443773355}
+  m_Layer: 5
+  m_Name: Image
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &7434734054443773354
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7434734054443773353}
+  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_Children: []
+  m_Father: {fileID: 7434734054952925021}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0.1, y: 0.1}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &7434734054443773356
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7434734054443773353}
+  m_CullTransparentMesh: 1
+--- !u!114 &7434734054443773355
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7434734054443773353}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 21300000, guid: 757f1390555f731428532f073cf0eec9, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!1 &7434734054952925017
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 7434734054952925021}
+  - component: {fileID: 7434734054952925020}
+  - component: {fileID: 7434734054952925019}
+  - component: {fileID: 7434734054952925018}
+  m_Layer: 5
+  m_Name: UI_check 1
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &7434734054952925021
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7434734054952925017}
+  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: 7434734054443773354}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 1.942993}
+  m_SizeDelta: {x: 1, y: 1}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!223 &7434734054952925020
+Canvas:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7434734054952925017}
+  m_Enabled: 1
+  serializedVersion: 3
+  m_RenderMode: 2
+  m_Camera: {fileID: 0}
+  m_PlaneDistance: 100
+  m_PixelPerfect: 0
+  m_ReceivesEvents: 1
+  m_OverrideSorting: 0
+  m_OverridePixelPerfect: 0
+  m_SortingBucketNormalizedSize: 0
+  m_AdditionalShaderChannelsFlag: 0
+  m_SortingLayerID: 0
+  m_SortingOrder: 0
+  m_TargetDisplay: 0
+--- !u!114 &7434734054952925019
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7434734054952925017}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_UiScaleMode: 0
+  m_ReferencePixelsPerUnit: 100
+  m_ScaleFactor: 1
+  m_ReferenceResolution: {x: 800, y: 600}
+  m_ScreenMatchMode: 0
+  m_MatchWidthOrHeight: 0
+  m_PhysicalUnit: 3
+  m_FallbackScreenDPI: 96
+  m_DefaultSpriteDPI: 96
+  m_DynamicPixelsPerUnit: 1
+  m_PresetInfoIsWorld: 1
+--- !u!114 &7434734054952925018
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7434734054952925017}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreReversedGraphics: 1
+  m_BlockingObjects: 0
+  m_BlockingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
diff --git a/Runtime/Resources/UIs/UI_check 1.prefab.meta b/Runtime/Resources/UIs/UI_check 1.prefab.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7f4f47c2e5e49d429665e2ba261d54283ac0af67
--- /dev/null
+++ b/Runtime/Resources/UIs/UI_check 1.prefab.meta	
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 2699c952d526b8341ba954dd92361990
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Resources/UIs/UI_cross 1.prefab b/Runtime/Resources/UIs/UI_cross 1.prefab
new file mode 100644
index 0000000000000000000000000000000000000000..abab4da325d2ddd5040347b9dc4a3838ed42c4de
--- /dev/null
+++ b/Runtime/Resources/UIs/UI_cross 1.prefab	
@@ -0,0 +1,177 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &7434734054443773353
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 7434734054443773354}
+  - component: {fileID: 7434734054443773356}
+  - component: {fileID: 7434734054443773355}
+  m_Layer: 5
+  m_Name: Image
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &7434734054443773354
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7434734054443773353}
+  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_Children: []
+  m_Father: {fileID: 7434734054952925021}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0.1, y: 0.1}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &7434734054443773356
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7434734054443773353}
+  m_CullTransparentMesh: 1
+--- !u!114 &7434734054443773355
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7434734054443773353}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 21300000, guid: 9ecd9f2c6f4ccad49b7abc44989ee6d3, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!1 &7434734054952925017
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 7434734054952925021}
+  - component: {fileID: 7434734054952925020}
+  - component: {fileID: 7434734054952925019}
+  - component: {fileID: 7434734054952925018}
+  m_Layer: 5
+  m_Name: UI_cross 1
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &7434734054952925021
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7434734054952925017}
+  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: 7434734054443773354}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 1.9429932}
+  m_SizeDelta: {x: 1, y: 1}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!223 &7434734054952925020
+Canvas:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7434734054952925017}
+  m_Enabled: 1
+  serializedVersion: 3
+  m_RenderMode: 2
+  m_Camera: {fileID: 0}
+  m_PlaneDistance: 100
+  m_PixelPerfect: 0
+  m_ReceivesEvents: 1
+  m_OverrideSorting: 0
+  m_OverridePixelPerfect: 0
+  m_SortingBucketNormalizedSize: 0
+  m_AdditionalShaderChannelsFlag: 0
+  m_SortingLayerID: 0
+  m_SortingOrder: 0
+  m_TargetDisplay: 0
+--- !u!114 &7434734054952925019
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7434734054952925017}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_UiScaleMode: 0
+  m_ReferencePixelsPerUnit: 100
+  m_ScaleFactor: 1
+  m_ReferenceResolution: {x: 800, y: 600}
+  m_ScreenMatchMode: 0
+  m_MatchWidthOrHeight: 0
+  m_PhysicalUnit: 3
+  m_FallbackScreenDPI: 96
+  m_DefaultSpriteDPI: 96
+  m_DynamicPixelsPerUnit: 1
+  m_PresetInfoIsWorld: 0
+--- !u!114 &7434734054952925018
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7434734054952925017}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreReversedGraphics: 1
+  m_BlockingObjects: 0
+  m_BlockingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
diff --git a/Runtime/Resources/UIs/UI_cross 1.prefab.meta b/Runtime/Resources/UIs/UI_cross 1.prefab.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7126d7d671fd470f12c79664777f4dabc45e89f4
--- /dev/null
+++ b/Runtime/Resources/UIs/UI_cross 1.prefab.meta	
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 22bdabf04becc5144b4549e87558b912
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Resources/UIs/UI_questionmark 1.prefab b/Runtime/Resources/UIs/UI_questionmark 1.prefab
new file mode 100644
index 0000000000000000000000000000000000000000..539c717634818264035dfb6bd5570aa972eed1de
--- /dev/null
+++ b/Runtime/Resources/UIs/UI_questionmark 1.prefab	
@@ -0,0 +1,177 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &7434734054443773353
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 7434734054443773354}
+  - component: {fileID: 7434734054443773356}
+  - component: {fileID: 7434734054443773355}
+  m_Layer: 5
+  m_Name: Image
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &7434734054443773354
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7434734054443773353}
+  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_Children: []
+  m_Father: {fileID: 7434734054952925021}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0.1, y: 0.1}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &7434734054443773356
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7434734054443773353}
+  m_CullTransparentMesh: 1
+--- !u!114 &7434734054443773355
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7434734054443773353}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 21300000, guid: 62645cad7bcbd0d479664966cb6119e2, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!1 &7434734054952925017
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 7434734054952925021}
+  - component: {fileID: 7434734054952925020}
+  - component: {fileID: 7434734054952925019}
+  - component: {fileID: 7434734054952925018}
+  m_Layer: 5
+  m_Name: UI_questionmark 1
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &7434734054952925021
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7434734054952925017}
+  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: 7434734054443773354}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 1.9429932}
+  m_SizeDelta: {x: 1, y: 1}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!223 &7434734054952925020
+Canvas:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7434734054952925017}
+  m_Enabled: 1
+  serializedVersion: 3
+  m_RenderMode: 2
+  m_Camera: {fileID: 0}
+  m_PlaneDistance: 100
+  m_PixelPerfect: 0
+  m_ReceivesEvents: 1
+  m_OverrideSorting: 0
+  m_OverridePixelPerfect: 0
+  m_SortingBucketNormalizedSize: 0
+  m_AdditionalShaderChannelsFlag: 0
+  m_SortingLayerID: 0
+  m_SortingOrder: 0
+  m_TargetDisplay: 0
+--- !u!114 &7434734054952925019
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7434734054952925017}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_UiScaleMode: 0
+  m_ReferencePixelsPerUnit: 100
+  m_ScaleFactor: 1
+  m_ReferenceResolution: {x: 800, y: 600}
+  m_ScreenMatchMode: 0
+  m_MatchWidthOrHeight: 0
+  m_PhysicalUnit: 3
+  m_FallbackScreenDPI: 96
+  m_DefaultSpriteDPI: 96
+  m_DynamicPixelsPerUnit: 1
+  m_PresetInfoIsWorld: 1
+--- !u!114 &7434734054952925018
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7434734054952925017}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreReversedGraphics: 1
+  m_BlockingObjects: 0
+  m_BlockingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
diff --git a/Runtime/Resources/UIs/UI_questionmark 1.prefab.meta b/Runtime/Resources/UIs/UI_questionmark 1.prefab.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b2d3f209e0671cf1458b333226548abd6618f199
--- /dev/null
+++ b/Runtime/Resources/UIs/UI_questionmark 1.prefab.meta	
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: ba411dc47fdc981419b883356e5ee6b4
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Scripts.meta b/Runtime/Scripts.meta
new file mode 100644
index 0000000000000000000000000000000000000000..6f975c898130e5738be51e429411a6a79693da99
--- /dev/null
+++ b/Runtime/Scripts.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b73c00a88daeb7046b5dac18ac115e83
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Scripts/ScanComponent.cs b/Runtime/Scripts/ScanComponent.cs
new file mode 100644
index 0000000000000000000000000000000000000000..47f5c7b1c2f4ef7dcaa86fa1cd6855fe7972c9ad
--- /dev/null
+++ b/Runtime/Scripts/ScanComponent.cs
@@ -0,0 +1,481 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using TMPro;
+
+[RequireComponent(typeof(Outline))]
+
+public class ScanComponent : MonoBehaviour
+{
+    // Start is called before the first frame update
+    public UIAboveHeadStatusEnum uiAboveHeadStatus = new UIAboveHeadStatusEnum();
+    //SwitchChecks for better performance in update function
+    private UIAboveHeadStatusEnum uiAboveHeadStatusSwitchCheck;
+    public enum UIAboveHeadStatusEnum
+    {
+        Verified,
+        Unverified,
+        SuspiciousIdentity
+    };
+
+    [SerializeField]
+    private string avatarName;
+
+    public UIAboveHeadModeEnum uiAboveHeadMode = new UIAboveHeadModeEnum();
+    //the logic for uiAboveHeadMode is currently very specific, so this switch is too general and not needed
+    //private UIAboveHeadModeEnum uiAboveHeadModeSwitchCheck;
+    public enum UIAboveHeadModeEnum
+    {
+        Disabled,
+        NameOnly,
+        SignOnly,
+        NameAndSign
+    };
+
+    [Range(0.0f, 1f)]
+    public float opacity = 1f;
+    [Range(0.0f, 1f)]
+    public float saturation = 1f;
+
+    public ScanEnum scanType = new ScanEnum();
+    private ScanEnum scanTypeSwitchCheck;
+    public enum ScanEnum
+    {
+        Disabled,
+        Loop,
+        Once
+    };
+
+    public ScanModeEnum scanMode = new ScanModeEnum();
+    private ScanModeEnum scanModeSwitchCheck;
+    public enum ScanModeEnum
+    {
+        Mode1,
+        Mode2
+    };
+
+    [Range(0.0f, 1f)]
+    public float speed = 1f;
+
+    public bool showOutline;
+    private Outline outline;
+
+    //private variables
+
+    private Animator thisAnimator;
+    private List<Transform> bodyNodes;
+
+    private List<Material> playermats;
+
+    //UIAboveHead variables
+    private List<GameObject> UI_Prefabs;
+    private int activeUI;
+    private Transform HeadAnchor;
+    private List<GameObject> generatedUIsAboveHead;
+    private TextMeshProUGUI textMeshPro;
+    private float offsetUIWhenNameActive;
+    private Camera LookAtCam;
+    private GameObject parentForLookAt;
+
+    //shader variables
+    private float decreasingScanThickness;
+    private float scanHeight;
+    private float step;
+
+    //colors based on Status
+    private Color colorBasedOnStatus;
+    private Color greenColor;
+    private Color redColor;
+    private Color greyColor;
+    void Start()
+    {
+        //load bodyNodes
+        thisAnimator = GetComponent<Animator>();
+        bodyNodes = new List<Transform>();
+        SkinnedMeshRenderer[] meshes = gameObject.GetComponentsInChildren<SkinnedMeshRenderer>();
+        InitializeBodyNodes();
+       
+        //load avatar materials
+        playermats = new List<Material>();
+        for (int i = 0; i < meshes.Length; i++)
+        {
+            playermats.Add(meshes[i].material);
+        }
+
+        //scan = scanHeight;//in % from 0 to 1 -> 0 to 100
+        scanHeight = 0.0f;
+        step = 0.01f;
+        decreasingScanThickness = 0.3f;
+        foreach (Material mat in playermats)
+        {
+            mat.SetFloat("_Scan", scanHeight);
+            mat.SetFloat("_MomentaryBodyHeight", GetHighestBodyNodesTransform().position.y - GetLowestBodyNodesTransform().position.y + 0.3f);
+            mat.SetFloat("_LowestWorldPosition", GetLowestBodyNodesTransform().position.y - 0.05f);
+            mat.SetColor("_ScanColor", colorBasedOnStatus);
+        }
+
+        if (LookAtCam == null)
+        {
+            if(Camera.main == null)
+            {
+                Camera[] allCameras = GameObject.FindObjectsOfType<Camera>();
+                if(allCameras.Length == 0)
+                {
+                    //assign self gameobject
+                    //LookAtCam = gameObject;
+                    Debug.LogError("No Camera found!");
+                    //popup window
+                }
+                else
+                {
+                    LookAtCam = allCameras[0];
+                }
+            }
+            else
+            {
+                LookAtCam = Camera.main;
+            }
+            
+        }
+
+        //Load AboveHeadUI
+        InitializeUIAboveHeadPrefabs();
+        InitializeGeneratedUIsAboveHead();
+
+        HeadAnchor = thisAnimator.GetBoneTransform(HumanBodyBones.Head);
+        //LookAtCamera
+
+        //initialize enums
+        scanTypeSwitchCheck = ScanEnum.Disabled;
+        uiAboveHeadStatusSwitchCheck = UIAboveHeadStatusEnum.Verified;
+        scanModeSwitchCheck = ScanModeEnum.Mode1;
+        //the logic for uiAboveHeadMode is currently very specific, so this switch is too general and not needed
+        //uiAboveHeadModeSwitchCheck = UIAboveHeadModeEnum.Disabled;
+
+        DeactivateAllUIAbovehead();
+
+        //load outline plugin and change certain settings
+        outline = GetComponent<Outline>();
+        outline.enabled = false;
+        outline.OutlineWidth = 4.0f;
+        outline.OutlineMode = Outline.Mode.OutlineVisible;
+
+        //colors for colorBasedOnStatus
+        greenColor = new Color(0f, 1f, 0f, 0.5f);
+        redColor = new Color(1f, 0f, 0f, 0.5f);
+        greyColor =  new Color(0.5f, 0.5f, 0.5f, 0.5f);
+
+        parentForLookAt = new GameObject();
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        //if either the value for scanType or scanMode is switched, reset all important variables 
+        if(scanType != scanTypeSwitchCheck || scanMode != scanModeSwitchCheck)
+        {
+            scanTypeSwitchCheck = scanType;
+            scanModeSwitchCheck = scanMode;
+            scanHeight = 0.0f;
+            step = 0.01f;
+            decreasingScanThickness = 0.3f;
+        }
+
+        //if the value for uiAboveHeadStatus is switched, deactivate all UIAboveHead and activate the right one in a later if statement
+        if (uiAboveHeadStatus != uiAboveHeadStatusSwitchCheck)
+        {
+            uiAboveHeadStatusSwitchCheck = uiAboveHeadStatus;
+            DeactivateAllUIAbovehead();
+        }
+
+        //activate the according UIAboveHead and set colorBasedOnStatus to the according color
+        if (uiAboveHeadStatus == UIAboveHeadStatusEnum.Verified)
+        {
+            activeUI = 3;
+            colorBasedOnStatus = greenColor;
+        }
+        else if (uiAboveHeadStatus == UIAboveHeadStatusEnum.Unverified)
+        {
+            activeUI = 2;
+            colorBasedOnStatus = redColor;
+        }
+        else if (uiAboveHeadStatus == UIAboveHeadStatusEnum.SuspiciousIdentity)
+        {
+            activeUI = 1;
+            colorBasedOnStatus = greyColor;
+        }
+
+        //the logic for uiAboveHeadMode is currently very specific, so this switch is too general and not needed
+        /*if (uiAboveHeadMode != uiAboveHeadModeSwitchCheck)
+        {
+            uiAboveHeadModeSwitchCheck = uiAboveHeadMode;
+        }*/
+
+        //if any uiAboveHeadMode that shows the name is chosen, show the avatarName / else don't show it
+        if ((uiAboveHeadMode == UIAboveHeadModeEnum.NameAndSign || uiAboveHeadMode == UIAboveHeadModeEnum.NameOnly) && avatarName != "")
+        {
+            //generatedUIsAboveHead[0] is always the name
+            generatedUIsAboveHead[0].SetActive(true);
+            textMeshPro = generatedUIsAboveHead[0].GetComponentInChildren<TextMeshProUGUI>();
+            textMeshPro.text = avatarName;
+            //offset the active UIAboveHead sign to the left of the avatarName
+            offsetUIWhenNameActive = textMeshPro.GetRenderedValues().x / 2.0f + 0.1f;
+        }
+        else
+        {
+            generatedUIsAboveHead[0].SetActive(false);
+            offsetUIWhenNameActive = 0.0f;
+        }
+
+        //if any uiAboveHeadMode that shows the sign is chosen, show the sign / else don't show it 
+        if (uiAboveHeadMode == UIAboveHeadModeEnum.NameAndSign || uiAboveHeadMode == UIAboveHeadModeEnum.SignOnly)
+        {
+            generatedUIsAboveHead[activeUI].SetActive(true);
+        }
+        else
+        {
+            generatedUIsAboveHead[activeUI].SetActive(false);
+        }
+
+        //rotate active UIAboveHead gameobjects so they face the camera looking at it
+        RotateUIAboveHeadTowardsCamera();
+
+        //show or hide outline plugin
+        if (showOutline)
+        {
+            outline.enabled = true;
+            outline.OutlineColor = colorBasedOnStatus;
+        }
+        else
+        {
+            outline.enabled = false;
+        }
+
+        //Scan Loop
+        if (scanType == ScanEnum.Loop)
+        {
+            //Mode1: Scan goes up and down
+            if(scanMode == ScanModeEnum.Mode1)
+            {
+                scanHeight += (Time.deltaTime * 100 * step * speed);
+                //update shader variables for every material on the player
+                foreach (Material mat in playermats)
+                {
+                    //this is a boolean (1 -> true)
+                    mat.SetInt("_useScan", 1);
+
+                    mat.SetFloat("_Scan", scanHeight);
+                    mat.SetFloat("_ScanThickness", 1f);
+                    mat.SetColor("_ScanColor", colorBasedOnStatus);
+                    mat.SetFloat("_MomentaryBodyHeight", GetHighestBodyNodesTransform().position.y - GetLowestBodyNodesTransform().position.y + 0.3f);
+                    mat.SetFloat("_LowestWorldPosition", GetLowestBodyNodesTransform().position.y - 0.05f);
+                }
+
+                //going up or down is controlled by the "step" variable being positive or negative
+                if (scanHeight > 1) step = -0.01f;
+                else if (scanHeight < 0) step = 0.01f;
+            } 
+            //Mode2: Scan only goes up
+            else if(scanMode == ScanModeEnum.Mode2)
+            {
+                //if scan < 1 just change the scan variable (controls scan height)
+                if (scanHeight < 1) scanHeight += (Time.deltaTime * 100 * step * speed);
+                else
+                {
+                    //when scan == 1 (so you are at the top of the avatar) -> let scan (scanheight) stay at the top and decrease the scan thickness to make it look like it is still moving up
+                    //this "trick" has to be used because scan (scanheight) is in percent(%) and can't go above 1(100%)
+                    if (decreasingScanThickness > 0) decreasingScanThickness -= (Time.deltaTime * 100 * step * speed);
+                    //reset scan realated variables when finished to start again at the bottom of avatar
+                    else
+                    {
+                        scanHeight = 0.0f;
+                        step = 0.01f;
+                        decreasingScanThickness = 0.3f;
+                    }
+                }
+                //update shader variables for every material on the player
+                foreach (Material mat in playermats)
+                {
+                    //this is a boolean
+                    mat.SetInt("_useScan", 1);
+
+                    mat.SetFloat("_Scan", scanHeight);
+                    mat.SetFloat("_ScanThickness", decreasingScanThickness);
+                    mat.SetColor("_ScanColor", colorBasedOnStatus);
+                    mat.SetFloat("_MomentaryBodyHeight", GetHighestBodyNodesTransform().position.y - GetLowestBodyNodesTransform().position.y + 0.3f);
+                    mat.SetFloat("_LowestWorldPosition", GetLowestBodyNodesTransform().position.y - 0.05f);
+                }
+            }
+            
+        }
+        //Scan Once
+        else if(scanType == ScanEnum.Once)
+        {
+            //all logic is the same as above(Scan Loop) except for looping. The scan gets disabled after running one time
+            if (scanMode == ScanModeEnum.Mode1)
+            {
+                scanHeight += (Time.deltaTime * 100 * step * speed);
+                foreach (Material mat in playermats)
+                {
+                    mat.SetInt("_useScan", 1);
+                    mat.SetFloat("_Scan", scanHeight);
+                    mat.SetFloat("_ScanThickness", 1f);
+                    mat.SetColor("_ScanColor", colorBasedOnStatus);
+                    mat.SetFloat("_MomentaryBodyHeight", GetHighestBodyNodesTransform().position.y - GetLowestBodyNodesTransform().position.y + 0.3f);
+                    mat.SetFloat("_LowestWorldPosition", GetLowestBodyNodesTransform().position.y - 0.05f);
+                }
+
+                if (scanHeight > 1) step = -0.01f;
+                else if (scanHeight < 0)
+                {
+                    scanType = ScanEnum.Disabled;
+                }
+            }
+            else if (scanMode == ScanModeEnum.Mode2)
+            {
+                if (scanHeight < 1) scanHeight += (Time.deltaTime * 100 * step * speed);
+                else
+                {
+                    if (decreasingScanThickness > 0) decreasingScanThickness -= (Time.deltaTime * 100 * step * speed);
+                    else scanType = ScanEnum.Disabled;
+                }
+                foreach (Material mat in playermats)
+                {
+                    mat.SetInt("_useScan", 1);
+                    mat.SetFloat("_Scan", scanHeight);
+                    mat.SetFloat("_ScanThickness", decreasingScanThickness);
+                    mat.SetColor("_ScanColor", colorBasedOnStatus);
+                    mat.SetFloat("_MomentaryBodyHeight", GetHighestBodyNodesTransform().position.y - GetLowestBodyNodesTransform().position.y + 0.3f);
+                    mat.SetFloat("_LowestWorldPosition", GetLowestBodyNodesTransform().position.y - 0.05f);
+                }
+            }
+            
+        }
+        else if(scanType == ScanEnum.Disabled)
+        {
+            foreach (Material mat in playermats)
+            {
+                //this is a boolean (0 -> false)
+                mat.SetInt("_useScan", 0);
+            }
+        }
+
+        //update opacity and saturation shader variables for every material on the player
+        foreach (Material mat in playermats)
+        {
+            mat.SetFloat("_Opacity", opacity);
+            mat.SetFloat("_Saturation", saturation);
+        }
+    }
+
+    //"UI_NAME 1" has to be the first gameobject to be added to UI_Prefabs because other code depends on it being at [0]
+    //Load UIAboveHead prefabs -> they all have a "1" in the end because they were copied from another folder, because they need to be in the "Resources"-folder to use the "Load" function
+    private void InitializeUIAboveHeadPrefabs()
+    {
+        UI_Prefabs = new List<GameObject>();
+
+        //name needs to be first element to be added
+        UI_Prefabs.Add(Resources.Load<GameObject>("UIs/UI_NAME 1"));
+
+        UI_Prefabs.Add(Resources.Load<GameObject>("UIs/UI_questionmark 1"));
+        UI_Prefabs.Add(Resources.Load<GameObject>("UIs/UI_cross 1"));
+        UI_Prefabs.Add(Resources.Load<GameObject>("UIs/UI_check 1"));
+    }
+
+    //adds instances of uisAboveHead gameobjects to generatedUIsAboveHead list
+    private void InitializeGeneratedUIsAboveHead()
+    {
+        generatedUIsAboveHead = new List<GameObject>();
+
+        foreach (GameObject i in UI_Prefabs)
+        {
+            if (i != null)
+            {
+                generatedUIsAboveHead.Add(Instantiate(i, transform));
+            }
+        }
+    }
+
+    private void ParentInitalizedUIs()
+    {
+        foreach (GameObject i in generatedUIsAboveHead)
+        {
+            if (i != null)
+            {
+                //i.gameObject.transform.set
+            }
+        }
+    }
+
+    //adds transforms from certain HumanBodyBones to bodyNodes list
+    private void InitializeBodyNodes()
+    {
+        bodyNodes.Add(thisAnimator.GetBoneTransform(HumanBodyBones.Head));
+        bodyNodes.Add(thisAnimator.GetBoneTransform(HumanBodyBones.LeftToes));
+        bodyNodes.Add(thisAnimator.GetBoneTransform(HumanBodyBones.RightToes));
+        bodyNodes.Add(thisAnimator.GetBoneTransform(HumanBodyBones.LeftHand));
+        bodyNodes.Add(thisAnimator.GetBoneTransform(HumanBodyBones.RightHand));
+    }
+
+    //returns lowest transform from bodyNodes list
+    private Transform GetLowestBodyNodesTransform()
+    {
+        Transform lowestTransform = bodyNodes[0];
+
+        foreach (Transform t in bodyNodes)
+        {
+            if (t.position.y < lowestTransform.position.y)
+            {
+                lowestTransform = t;
+            }
+        }
+
+        return lowestTransform;
+    }
+
+    //returns highest transform from bodyNodes list
+    private Transform GetHighestBodyNodesTransform()
+    {
+        Transform highestTransform = bodyNodes[0];
+
+        foreach (Transform t in bodyNodes)
+        {
+            if (t.position.y > highestTransform.position.y)
+            {
+                highestTransform = t;
+            }
+        }
+
+        return highestTransform;
+    }
+
+    //Deactivates all UIAboveHeadElements
+    private void DeactivateAllUIAbovehead()
+    {
+        foreach (GameObject i in generatedUIsAboveHead)
+        {
+            i.SetActive(false);
+        }
+    }
+
+    //make that the UIAboveHead always faces the camera
+    private void RotateUIAboveHeadTowardsCamera()
+    {
+        //generatedUIs[0] is the TextMesh name
+        generatedUIsAboveHead[0].transform.position = HeadAnchor.position;
+        generatedUIsAboveHead[0].transform.localPosition += new Vector3(0, 0.3f, 0);
+
+        //Vector3 v = LookAtCam.transform.position - generatedUIs[0].transform.position;
+        //v.x = v.z = 0.0f;
+
+        //better for vr
+        generatedUIsAboveHead[0].transform.LookAt(LookAtCam.transform); 
+        //generatedUIsAboveHead[0].transform.rotation =(LookAtCam.transform.rotation);
+        //generatedUIsAboveHead[0].transform.Rotate(0,180,0);
+
+        //only change the rotation of the currently active UIAboveHead
+        generatedUIsAboveHead[activeUI].transform.position = generatedUIsAboveHead[0].transform.position + generatedUIsAboveHead[0].transform.right * offsetUIWhenNameActive;
+        generatedUIsAboveHead[activeUI].transform.rotation = generatedUIsAboveHead[0].transform.rotation;
+    }
+
+}
diff --git a/Runtime/Scripts/ScanComponent.cs.meta b/Runtime/Scripts/ScanComponent.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..93434c507012cfd8c6c2448f83495ab04741eeba
--- /dev/null
+++ b/Runtime/Scripts/ScanComponent.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cd8f595ef94764145baab3b1f4e1545b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Scripts/VIControl.cs b/Runtime/Scripts/VIControl.cs
new file mode 100644
index 0000000000000000000000000000000000000000..7ec80af5e73eb9a56c7642f21c2482fde5fa7586
--- /dev/null
+++ b/Runtime/Scripts/VIControl.cs
@@ -0,0 +1,633 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using TMPro;
+
+[RequireComponent(typeof(Outline))]
+
+public class VIControl : MonoBehaviour
+{
+    // Start is called before the first frame update
+    private UIAboveHeadStatusEnum uiAboveHeadStatus = new UIAboveHeadStatusEnum();
+    //Temps for better performance in update function
+    private UIAboveHeadStatusEnum uiAboveHeadStatusTemp;
+
+    public enum UIAboveHeadStatusEnum
+    {
+        Verified,
+        Unverified,
+        SuspiciousIdentity
+    };
+
+    public enum IDStatusEnum
+    {
+        Verified,
+        Unverified,
+        SuspiciousIdentity
+    };
+    private bool setOpacity = false;
+    private bool setSaturation = false;
+
+
+    public enum VIStyleEnum
+    {
+        None,
+        Outline,
+        Scan,
+        Opacity,
+        Saturation,
+        Badge
+    };
+
+    public VIStyleEnum viStyle = new VIStyleEnum();
+    private VIStyleEnum viStyleTemp = new VIStyleEnum();
+
+    public IDStatusEnum idStatus = new IDStatusEnum();
+    private IDStatusEnum idStatusTemp = new IDStatusEnum();
+
+    public bool showName = true;
+    private bool showNameTemp = true;
+
+    [SerializeField]
+    private string avatarName;
+
+    private UIAboveHeadModeEnum uiAboveHeadMode = new UIAboveHeadModeEnum();
+    //the logic for uiAboveHeadMode is currently very specific, so this switch is too general and not needed
+    //private UIAboveHeadModeEnum uiAboveHeadModeTemp;
+    public enum UIAboveHeadModeEnum
+    {
+        Disabled,
+        NameOnly,
+        SignOnly,
+        NameAndSign
+    };
+
+    [Range(0.0f, 1f)]
+    private float opacity = 1f;
+    [Range(0.0f, 1f)]
+    private float saturation = 1f;
+
+    
+
+    private ScanEnum scanType = new ScanEnum();
+    private ScanEnum scanTypeTemp;
+    public enum ScanEnum
+    {
+        Disabled,
+        Loop,
+        Once
+    };
+
+    private ScanModeEnum scanMode = new ScanModeEnum();
+    private ScanModeEnum scanModeTemp;
+    public enum ScanModeEnum
+    {
+        Mode1,
+        Mode2
+    };
+
+    [Range(0.0f, 1f)]
+    private float speed = 1f;
+
+    private bool showOutline;
+    private Outline outline;
+
+    //private variables
+
+    private Animator thisAnimator;
+    private List<Transform> bodyNodes;
+
+    private List<Material> playermats;
+
+    //UIAboveHead variables
+    private List<GameObject> UI_Prefabs;
+    private int activeUI;
+    private Transform HeadAnchor;
+    private List<GameObject> generatedUIsAboveHead;
+    private TextMeshProUGUI textMeshPro;
+    private float offsetUIWhenNameActive;
+    private Camera LookAtCam;
+    private GameObject parentForLookAt;
+
+    //shader variables
+    private float decreasingScanThickness;
+    private float scanHeight;
+    private float step;
+
+    //colors based on Status
+    private Color colorBasedOnStatus;
+    private Color greenColor;
+    private Color redColor;
+    private Color greyColor;
+    void Start()
+    {
+        //load bodyNodes
+        thisAnimator = GetComponent<Animator>();
+        bodyNodes = new List<Transform>();
+        SkinnedMeshRenderer[] meshes = gameObject.GetComponentsInChildren<SkinnedMeshRenderer>();
+        InitializeBodyNodes();
+       
+        //load avatar materials
+        playermats = new List<Material>();
+        for (int i = 0; i < meshes.Length; i++)
+        {
+            // Instantiate a new material instance
+            Material materialInstance = Material.Instantiate(meshes[i].material);
+            playermats.Add(materialInstance);
+            // Assign the new material to the renderer
+            meshes[i].material = materialInstance;
+        }
+
+        
+
+        //scan = scanHeight;//in % from 0 to 1 -> 0 to 100
+        scanHeight = 0.0f;
+        step = 0.01f;
+        decreasingScanThickness = 0.3f;
+        foreach (Material mat in playermats)
+        {
+            mat.SetFloat("_Scan", scanHeight);
+            mat.SetFloat("_MomentaryBodyHeight", GetHighestBodyNodesTransform().position.y - GetLowestBodyNodesTransform().position.y + 0.3f);
+            mat.SetFloat("_LowestWorldPosition", GetLowestBodyNodesTransform().position.y - 0.05f);
+            mat.SetColor("_ScanColor", colorBasedOnStatus);
+        }
+
+        if (LookAtCam == null)
+        {
+            if(Camera.main == null)
+            {
+                Camera[] allCameras = GameObject.FindObjectsOfType<Camera>();
+                if(allCameras.Length == 0)
+                {
+                    //assign self gameobject
+                    //LookAtCam = gameObject;
+                    Debug.LogError("No Camera found!");
+                    //popup window
+                }
+                else
+                {
+                    LookAtCam = allCameras[0];
+                }
+            }
+            else
+            {
+                LookAtCam = Camera.main;
+            }
+            
+        }
+
+        //Load AboveHeadUI
+        InitializeUIAboveHeadPrefabs();
+        InitializeGeneratedUIsAboveHead();
+
+        HeadAnchor = thisAnimator.GetBoneTransform(HumanBodyBones.Head);
+        //LookAtCamera
+
+        //initialize enums
+        scanTypeTemp = ScanEnum.Disabled;
+        uiAboveHeadStatusTemp = UIAboveHeadStatusEnum.Verified;
+        scanModeTemp = ScanModeEnum.Mode1;
+        //the logic for uiAboveHeadMode is currently very specific, so this switch is too general and not needed
+        //uiAboveHeadModeTemp = UIAboveHeadModeEnum.Disabled;
+
+        DeactivateAllUIAbovehead();
+
+        //load outline plugin and change certain settings
+        outline = GetComponent<Outline>();
+        outline.enabled = false;
+        outline.OutlineWidth = 4.0f;
+        outline.OutlineMode = Outline.Mode.OutlineVisible;
+
+        //colors for colorBasedOnStatus
+        greenColor = new Color(0f, 1f, 0f, 0.5f);
+        redColor = new Color(1f, 0f, 0f, 0.5f);
+        greyColor =  new Color(0.5f, 0.5f, 0.5f, 0.5f);
+
+        parentForLookAt = new GameObject();
+
+        UpdateVI();
+        idStatusTemp = idStatus;
+        viStyleTemp = viStyle;
+        showNameTemp = showName;
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        // if viStyle or idStatus is switched, update the visual indicators
+        if (viStyleTemp != viStyle || idStatusTemp != idStatus || showNameTemp != showName)
+        {
+            viStyleTemp = viStyle;
+            idStatusTemp = idStatus;
+            showNameTemp = showName;
+            UpdateVI();
+        }
+
+        if (viStyle == VIStyleEnum.Scan || viStyle == VIStyleEnum.Badge || showName)
+        {
+            UpdateScanAndBadge();
+        }
+    }
+
+
+    void UpdateVI()
+    {
+        switch (viStyle)
+        {
+            case VIStyleEnum.None:
+                setOpacity = false;
+                setSaturation = false;
+                showOutline = false;
+                scanType = ScanEnum.Disabled;
+                uiAboveHeadMode = showName? UIAboveHeadModeEnum.NameOnly: UIAboveHeadModeEnum.Disabled;
+                break;
+            case VIStyleEnum.Outline:
+                setOpacity = false;
+                setSaturation = false;
+                showOutline = true;
+                scanType = ScanEnum.Disabled;
+                uiAboveHeadMode = showName? UIAboveHeadModeEnum.NameOnly: UIAboveHeadModeEnum.Disabled;
+                break;
+            case VIStyleEnum.Scan:
+                setOpacity = false;
+                setSaturation = false;
+                showOutline = false;
+                uiAboveHeadMode = showName? UIAboveHeadModeEnum.NameOnly: UIAboveHeadModeEnum.Disabled;
+                //scanMode = ScanModeEnum.Mode1;
+                scanType = ScanEnum.Loop;
+                break;
+            case VIStyleEnum.Opacity:
+                setOpacity = true;
+                setSaturation = false;
+                showOutline = false;
+                scanType = ScanEnum.Disabled;
+                uiAboveHeadMode = showName? UIAboveHeadModeEnum.NameOnly: UIAboveHeadModeEnum.Disabled;
+                break;
+            case VIStyleEnum.Saturation:
+                setOpacity = false;
+                setSaturation = true;
+                showOutline = false;
+                scanType = ScanEnum.Disabled;
+                uiAboveHeadMode = showName? UIAboveHeadModeEnum.NameOnly: UIAboveHeadModeEnum.Disabled;
+                break;
+            case VIStyleEnum.Badge:
+                setOpacity = false;
+                setSaturation = false;
+                showOutline = false;
+                scanType = ScanEnum.Disabled;
+                uiAboveHeadStatus = (UIAboveHeadStatusEnum)idStatus;
+                uiAboveHeadMode = showName? UIAboveHeadModeEnum.NameAndSign: UIAboveHeadModeEnum.SignOnly;
+                break;
+            default:
+                break;
+        }
+
+        if (idStatus == IDStatusEnum.Verified)
+        {
+            activeUI = 3;
+            colorBasedOnStatus = greenColor;
+        }
+        else if (idStatus == IDStatusEnum.Unverified)
+        {
+            activeUI = 2;
+            colorBasedOnStatus = redColor;
+        }
+        else if (idStatus == IDStatusEnum.SuspiciousIdentity)
+        {
+            activeUI = 1;
+            colorBasedOnStatus = greyColor;
+        }
+
+        // Opacity 
+        if (setOpacity)
+        {
+            opacity = idStatus == IDStatusEnum.Verified ? 1f : 0.5f;
+        }
+        else
+        {
+            opacity = 1f;
+        }
+        // Saturation
+        if (setSaturation)
+        {
+            saturation = idStatus == IDStatusEnum.Verified ? 1f : 0f;
+        }
+        else
+        {
+            saturation = 1f;
+        }
+
+        foreach (Material mat in playermats)
+        {
+            mat.SetFloat("_Opacity", opacity);
+            mat.SetFloat("_Saturation", saturation);
+        }
+
+        // Outline
+        if (showOutline)
+        {
+            outline.enabled = true;
+            outline.OutlineColor = colorBasedOnStatus;
+        }
+        else
+        {
+            outline.enabled = false;
+        }
+
+        if (!showName)
+        {
+            
+            generatedUIsAboveHead[0].SetActive(false);
+            offsetUIWhenNameActive = 0.0f;
+        
+        }
+        
+    }
+
+
+
+    void UpdateScanAndBadge()
+    {
+        //if either the value for scanType or scanMode is switched, reset all important variables 
+        if(scanType != scanTypeTemp || scanMode != scanModeTemp)
+        {
+            scanTypeTemp = scanType;
+            scanModeTemp = scanMode;
+            scanHeight = 0.0f;
+            step = 0.01f;
+            decreasingScanThickness = 0.3f;
+        }
+
+        //if the value for uiAboveHeadStatus is switched, deactivate all UIAboveHead and activate the right one in a later if statement
+        if (uiAboveHeadStatus != uiAboveHeadStatusTemp)
+        {
+            uiAboveHeadStatusTemp = uiAboveHeadStatus;
+            DeactivateAllUIAbovehead();
+        }
+
+        //activate the according UIAboveHead and set colorBasedOnStatus to the according color
+        
+
+        //the logic for uiAboveHeadMode is currently very specific, so this switch is too general and not needed
+        /*if (uiAboveHeadMode != uiAboveHeadModeTemp)
+        {
+            uiAboveHeadModeTemp = uiAboveHeadMode;
+        }*/
+
+        //if any uiAboveHeadMode that shows the name is chosen, show the avatarName / else don't show it
+        if ((uiAboveHeadMode == UIAboveHeadModeEnum.NameAndSign || uiAboveHeadMode == UIAboveHeadModeEnum.NameOnly) && avatarName != "")
+        {
+            //generatedUIsAboveHead[0] is always the name
+            generatedUIsAboveHead[0].SetActive(true);
+            textMeshPro = generatedUIsAboveHead[0].GetComponentInChildren<TextMeshProUGUI>();
+            textMeshPro.text = avatarName;
+            //offset the active UIAboveHead sign to the left of the avatarName
+            offsetUIWhenNameActive = textMeshPro.GetRenderedValues().x / 2.0f + 0.1f;
+        }
+        else
+        {
+            generatedUIsAboveHead[0].SetActive(false);
+            offsetUIWhenNameActive = 0.0f;
+        }
+
+        //if any uiAboveHeadMode that shows the sign is chosen, show the sign / else don't show it 
+        if (uiAboveHeadMode == UIAboveHeadModeEnum.NameAndSign || uiAboveHeadMode == UIAboveHeadModeEnum.SignOnly)
+        {
+            generatedUIsAboveHead[activeUI].SetActive(true);
+        }
+        else
+        {
+            generatedUIsAboveHead[activeUI].SetActive(false);
+        }
+
+        //rotate active UIAboveHead gameobjects so they face the camera looking at it
+        RotateUIAboveHeadTowardsCamera();
+
+        //Scan Loop
+        if (scanType == ScanEnum.Loop)
+        {
+            //Mode1: Scan goes up and down
+            if(scanMode == ScanModeEnum.Mode1)
+            {
+                scanHeight += (Time.deltaTime * 100 * step * speed);
+                //update shader variables for every material on the player
+                foreach (Material mat in playermats)
+                {
+                    //this is a boolean (1 -> true)
+                    mat.SetInt("_useScan", 1);
+
+                    mat.SetFloat("_Scan", scanHeight);
+                    mat.SetFloat("_ScanThickness", 1f);
+                    mat.SetColor("_ScanColor", colorBasedOnStatus);
+                    mat.SetFloat("_MomentaryBodyHeight", GetHighestBodyNodesTransform().position.y - GetLowestBodyNodesTransform().position.y + 0.3f);
+                    mat.SetFloat("_LowestWorldPosition", GetLowestBodyNodesTransform().position.y - 0.05f);
+                }
+
+                //going up or down is controlled by the "step" variable being positive or negative
+                if (scanHeight > 1) step = -0.01f;
+                else if (scanHeight < 0) step = 0.01f;
+            } 
+            //Mode2: Scan only goes up
+            else if(scanMode == ScanModeEnum.Mode2)
+            {
+                //if scan < 1 just change the scan variable (controls scan height)
+                if (scanHeight < 1) scanHeight += (Time.deltaTime * 100 * step * speed);
+                else
+                {
+                    //when scan == 1 (so you are at the top of the avatar) -> let scan (scanheight) stay at the top and decrease the scan thickness to make it look like it is still moving up
+                    //this "trick" has to be used because scan (scanheight) is in percent(%) and can't go above 1(100%)
+                    if (decreasingScanThickness > 0) decreasingScanThickness -= (Time.deltaTime * 100 * step * speed);
+                    //reset scan realated variables when finished to start again at the bottom of avatar
+                    else
+                    {
+                        scanHeight = 0.0f;
+                        step = 0.01f;
+                        decreasingScanThickness = 0.3f;
+                    }
+                }
+                //update shader variables for every material on the player
+                foreach (Material mat in playermats)
+                {
+                    //this is a boolean
+                    mat.SetInt("_useScan", 1);
+
+                    mat.SetFloat("_Scan", scanHeight);
+                    mat.SetFloat("_ScanThickness", decreasingScanThickness);
+                    mat.SetColor("_ScanColor", colorBasedOnStatus);
+                    mat.SetFloat("_MomentaryBodyHeight", GetHighestBodyNodesTransform().position.y - GetLowestBodyNodesTransform().position.y + 0.3f);
+                    mat.SetFloat("_LowestWorldPosition", GetLowestBodyNodesTransform().position.y - 0.05f);
+                }
+            }
+            
+        }
+        //Scan Once
+        else if(scanType == ScanEnum.Once)
+        {
+            //all logic is the same as above(Scan Loop) except for looping. The scan gets disabled after running one time
+            if (scanMode == ScanModeEnum.Mode1)
+            {
+                scanHeight += (Time.deltaTime * 100 * step * speed);
+                foreach (Material mat in playermats)
+                {
+                    mat.SetInt("_useScan", 1);
+                    mat.SetFloat("_Scan", scanHeight);
+                    mat.SetFloat("_ScanThickness", 1f);
+                    mat.SetColor("_ScanColor", colorBasedOnStatus);
+                    mat.SetFloat("_MomentaryBodyHeight", GetHighestBodyNodesTransform().position.y - GetLowestBodyNodesTransform().position.y + 0.3f);
+                    mat.SetFloat("_LowestWorldPosition", GetLowestBodyNodesTransform().position.y - 0.05f);
+                }
+
+                if (scanHeight > 1) step = -0.01f;
+                else if (scanHeight < 0)
+                {
+                    scanType = ScanEnum.Disabled;
+                }
+            }
+            else if (scanMode == ScanModeEnum.Mode2)
+            {
+                if (scanHeight < 1) scanHeight += (Time.deltaTime * 100 * step * speed);
+                else
+                {
+                    if (decreasingScanThickness > 0) decreasingScanThickness -= (Time.deltaTime * 100 * step * speed);
+                    else scanType = ScanEnum.Disabled;
+                }
+                foreach (Material mat in playermats)
+                {
+                    mat.SetInt("_useScan", 1);
+                    mat.SetFloat("_Scan", scanHeight);
+                    mat.SetFloat("_ScanThickness", decreasingScanThickness);
+                    mat.SetColor("_ScanColor", colorBasedOnStatus);
+                    mat.SetFloat("_MomentaryBodyHeight", GetHighestBodyNodesTransform().position.y - GetLowestBodyNodesTransform().position.y + 0.3f);
+                    mat.SetFloat("_LowestWorldPosition", GetLowestBodyNodesTransform().position.y - 0.05f);
+                }
+            }
+            
+        }
+        else if(scanType == ScanEnum.Disabled)
+        {
+            foreach (Material mat in playermats)
+            {
+                //this is a boolean (0 -> false)
+                mat.SetInt("_useScan", 0);
+            }
+        }
+
+        //update opacity and saturation shader variables for every material on the player
+        foreach (Material mat in playermats)
+        {
+            mat.SetFloat("_Opacity", opacity);
+            mat.SetFloat("_Saturation", saturation);
+        }
+    }
+
+    //"UI_NAME 1" has to be the first gameobject to be added to UI_Prefabs because other code depends on it being at [0]
+    //Load UIAboveHead prefabs -> they all have a "1" in the end because they were copied from another folder, because they need to be in the "Resources"-folder to use the "Load" function
+    private void InitializeUIAboveHeadPrefabs()
+    {
+        UI_Prefabs = new List<GameObject>();
+
+        //name needs to be first element to be added
+        UI_Prefabs.Add(Resources.Load<GameObject>("UIs/UI_NAME 1"));
+
+        UI_Prefabs.Add(Resources.Load<GameObject>("UIs/UI_questionmark 1"));
+        UI_Prefabs.Add(Resources.Load<GameObject>("UIs/UI_cross 1"));
+        UI_Prefabs.Add(Resources.Load<GameObject>("UIs/UI_check 1"));
+    }
+
+    //adds instances of uisAboveHead gameobjects to generatedUIsAboveHead list
+    private void InitializeGeneratedUIsAboveHead()
+    {
+        generatedUIsAboveHead = new List<GameObject>();
+
+        foreach (GameObject i in UI_Prefabs)
+        {
+            if (i != null)
+            {
+                generatedUIsAboveHead.Add(Instantiate(i, transform));
+            }
+        }
+    }
+
+    private void ParentInitalizedUIs()
+    {
+        foreach (GameObject i in generatedUIsAboveHead)
+        {
+            if (i != null)
+            {
+                //i.gameObject.transform.set
+            }
+        }
+    }
+
+    //adds transforms from certain HumanBodyBones to bodyNodes list
+    private void InitializeBodyNodes()
+    {
+        bodyNodes.Add(thisAnimator.GetBoneTransform(HumanBodyBones.Head));
+        bodyNodes.Add(thisAnimator.GetBoneTransform(HumanBodyBones.LeftToes));
+        bodyNodes.Add(thisAnimator.GetBoneTransform(HumanBodyBones.RightToes));
+        bodyNodes.Add(thisAnimator.GetBoneTransform(HumanBodyBones.LeftHand));
+        bodyNodes.Add(thisAnimator.GetBoneTransform(HumanBodyBones.RightHand));
+    }
+
+    //returns lowest transform from bodyNodes list
+    private Transform GetLowestBodyNodesTransform()
+    {
+        Transform lowestTransform = bodyNodes[0];
+
+        foreach (Transform t in bodyNodes)
+        {
+            if (t.position.y < lowestTransform.position.y)
+            {
+                lowestTransform = t;
+            }
+        }
+
+        return lowestTransform;
+    }
+
+    //returns highest transform from bodyNodes list
+    private Transform GetHighestBodyNodesTransform()
+    {
+        Transform highestTransform = bodyNodes[0];
+
+        foreach (Transform t in bodyNodes)
+        {
+            if (t.position.y > highestTransform.position.y)
+            {
+                highestTransform = t;
+            }
+        }
+
+        return highestTransform;
+    }
+
+    //Deactivates all UIAboveHeadElements
+    private void DeactivateAllUIAbovehead()
+    {
+        foreach (GameObject i in generatedUIsAboveHead)
+        {
+            i.SetActive(false);
+        }
+    }
+
+    //make that the UIAboveHead always faces the camera
+    private void RotateUIAboveHeadTowardsCamera()
+    {
+        //generatedUIs[0] is the TextMesh name
+        generatedUIsAboveHead[0].transform.position = HeadAnchor.position;
+        generatedUIsAboveHead[0].transform.localPosition += new Vector3(0, 0.3f, 0);
+
+        //Vector3 v = LookAtCam.transform.position - generatedUIs[0].transform.position;
+        //v.x = v.z = 0.0f;
+
+        //better for vr
+        generatedUIsAboveHead[0].transform.LookAt(LookAtCam.transform); 
+        //generatedUIsAboveHead[0].transform.rotation =(LookAtCam.transform.rotation);
+        //generatedUIsAboveHead[0].transform.Rotate(0,180,0);
+
+        //only change the rotation of the currently active UIAboveHead
+        generatedUIsAboveHead[activeUI].transform.position = generatedUIsAboveHead[0].transform.position + generatedUIsAboveHead[0].transform.right * offsetUIWhenNameActive;
+        generatedUIsAboveHead[activeUI].transform.rotation = generatedUIsAboveHead[0].transform.rotation;
+    }
+
+}
diff --git a/Runtime/Scripts/VIControl.cs.meta b/Runtime/Scripts/VIControl.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..504028b80787c96a44a3839b84dec1b15b9af539
--- /dev/null
+++ b/Runtime/Scripts/VIControl.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9a3b6c25c51757c4788e1e02e4ead203
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Shaders.meta b/Runtime/Shaders.meta
new file mode 100644
index 0000000000000000000000000000000000000000..94fce2e74e149043b7d9bb6d0cfd15f5d24ac46c
--- /dev/null
+++ b/Runtime/Shaders.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 13ae1c872a056c140a92bf4540b0850b
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Shaders/AvatarVisualIndicator.cginc b/Runtime/Shaders/AvatarVisualIndicator.cginc
new file mode 100644
index 0000000000000000000000000000000000000000..d4c37118be179fa6953a6ae5e1fc1aac2431acda
--- /dev/null
+++ b/Runtime/Shaders/AvatarVisualIndicator.cginc
@@ -0,0 +1,230 @@
+#include "UnityCG.cginc"
+
+uniform float4 _LightColor0;
+uniform sampler2D _MainTex;
+float4 _MainTex_ST; //for tiling
+uniform sampler2D _NormalMap;
+uniform sampler2D _SpecularMap;
+uniform float4 _frontColor;
+uniform float4 _backColor;
+uniform float _ambientIntensity;
+uniform float _diffuseIntensity;
+uniform float _specularIntensity;
+uniform float _shininess;
+uniform int _useLighting;
+uniform int _useSpecularMap;
+uniform int _useTexture;
+uniform int _useVertexColor;
+uniform int _useNormalMap;
+uniform int _useScan;
+
+
+//----------------------------------------------------------------------------------------------
+
+struct appdata {
+    float4 vertex : POSITION;
+    float3 normal : NORMAL;
+    float2 uv : TEXCOORD0;
+    float4 color : COLOR;
+};
+struct v2g {
+    float3 uv: TEXCOORD0;
+    float4 vertex: SV_POSITION;
+    float4 worldPos: TEXCOORD1;
+    float4 localHeightPos : TEXCOORD2;
+    float3 normal : NORMAL;///////
+    float4 color : COLOR;////
+};
+
+struct g2f {
+    float3 uv: TEXCOORD0;
+    float4 vertex: SV_POSITION;
+    float3 dist: TEXCOORD1;
+    float4 worldPos:TEXCOORD2;///////
+    float4 localHeightPos : TEXCOORD3;///////
+    float3 normal : NORMAL;///////
+    float4 color : COLOR;/////
+};
+
+struct v2f {
+    float4 pos : POSITION;
+    float3 normal : NORMAL;
+    float2 uv : TEXCOORD0;
+    float4 posWorld : TEXCOORD1;
+    float4 localHeightPos : TEXCOORD2;
+    float4 color : COLOR;
+};
+
+//----------------------------------------------------------------------------------------------
+void phong_lighting_g2f(float3 normal,
+                    float4 material,
+                    float3 color,
+                    g2f i,
+                    inout float3 result,
+                    bool useAmbient)
+            {
+                if(useAmbient)
+                {
+                    //ambient
+                    result = float3(0, 0, 0);
+                    if(_useTexture) {
+                        result += material[0] * color * tex2D(_MainTex, i.uv).xyz;
+                    }
+                    else
+                    {
+                        result += material[0] * color;
+                    }
+                }
+
+                //diffuse 
+                float3 L = _WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w;
+                float NL = dot(normal, L);
+                if(NL > 0)
+                {
+                    if(_useTexture)
+                    {
+                        result += NL * material[1] * color * tex2D(_MainTex, i.uv).xyz * _LightColor0.rgb;
+                    }
+                    else
+                    {
+                        result += NL * material[1] * _LightColor0.rgb;
+                    }
+                    
+                }
+                
+                //specular
+                float3 R = normalize(reflect(-L, normal));
+                float3 V = normalize(_WorldSpaceCameraPos - i.worldPos.xyz);
+                float RV = dot(R, V);
+                if(RV > 0)
+                {
+                        if(_useSpecularMap && _useTexture)
+                        {
+                            float3 spec_tmp = tex2D(_SpecularMap, i.uv).xyz;
+                            result += spec_tmp * material[2] * pow(RV, material[3]);
+                        }
+                        else
+                        {
+                            float spec_col = material[2] * pow(RV, material[3]);
+                            result += float3(spec_col, spec_col, spec_col);
+                        }
+                }
+            }
+
+//----------------------------------------------------------------------------------------------
+
+            float3x3 cotangent_frame(float3 N, float3 p, float2 uv)
+            {
+                float3 dp1 = ddx(p);
+                float3 dp2 = ddy(p);
+                float2 duv1 = ddx(uv);
+                float2 duv2 = ddy(uv);
+
+                float3 dp2perp = cross(dp2, N);
+                float3 dp1perp = cross(N, dp1);
+                float3 T = dp2perp * duv1.x + dp1perp * duv2.x;
+                float3 B = dp2perp * duv1.y + dp1perp * duv2.y;
+
+                float invmax = rsqrt(max(dot(T,T), dot(B, B)));
+
+                return float3x3(T * invmax, B * invmax, N);
+            }
+
+//----------------------------------------------------------------------------------------------
+
+           float3 perturb_normal(float3 N, float3 V, float2 uv)
+           {
+                float3 map = (2.0 * tex2D(_NormalMap, uv).xyz) - 1.0;
+                //map = -map * 255./127. - 128./127.;
+
+                float3x3 TBN = cotangent_frame(N, -V, uv);
+                return normalize(mul(TBN, map)); 
+           } 
+
+
+void phong_lighting(float3 normal,
+                    float4 material,
+                    float3 color,
+                    v2f i,
+                    inout float3 result,
+                    bool useAmbient)
+            {
+                if(useAmbient)
+                {
+                    //ambient
+                    result = float3(0, 0, 0);
+                    if(_useTexture) {
+                        result += material[0] * color * tex2D(_MainTex, i.uv).xyz;
+                    }
+                    else
+                    {
+                        result += material[0] * color;
+                    }
+                }
+
+                //diffuse 
+                float3 L = _WorldSpaceLightPos0.xyz - i.posWorld.xyz * _WorldSpaceLightPos0.w;
+                float NL = dot(normal, L);
+                if(NL > 0)
+                {
+                    if(_useTexture)
+                    {
+                        result += NL * material[1] * color * tex2D(_MainTex, i.uv).xyz * _LightColor0.rgb;
+                    }
+                    else
+                    {
+                        result += NL * material[1] * _LightColor0.rgb;
+                    }
+                    
+                }
+                
+                //specular
+                float3 R = normalize(reflect(-L, normal));
+                float3 V = normalize(_WorldSpaceCameraPos - i.posWorld.xyz);
+                float RV = dot(R, V);
+                if(RV > 0)
+                {
+                        if(_useSpecularMap && _useTexture)
+                        {
+                            float3 spec_tmp = tex2D(_SpecularMap, i.uv).xyz;
+                            result += spec_tmp * material[2] * pow(RV, material[3]);
+                        }
+                        else
+                        {
+                            float spec_col = material[2] * pow(RV, material[3]);
+                            result += float3(spec_col, spec_col, spec_col);
+                        }
+                }
+            }
+
+//----------------------------------------------------------------------------------------------
+/* 
+            float3x3 cotangent_frame(float3 N, float3 p, float2 uv)
+            {
+                float3 dp1 = ddx(p);
+                float3 dp2 = ddy(p);
+                float2 duv1 = ddx(uv);
+                float2 duv2 = ddy(uv);
+
+                float3 dp2perp = cross(dp2, N);
+                float3 dp1perp = cross(N, dp1);
+                float3 T = dp2perp * duv1.x + dp1perp * duv2.x;
+                float3 B = dp2perp * duv1.y + dp1perp * duv2.y;
+
+                float invmax = rsqrt(max(dot(T,T), dot(B, B)));
+
+                return float3x3(T * invmax, B * invmax, N);
+            }
+
+//----------------------------------------------------------------------------------------------
+
+           float3 perturb_normal(float3 N, float3 V, float2 uv)
+           {
+                float3 map = (2.0 * tex2D(_NormalMap, uv).xyz) - 1.0;
+                //map = -map * 255./127. - 128./127.;
+
+                float3x3 TBN = cotangent_frame(N, -V, uv);
+                return normalize(mul(TBN, map)); 
+           } 
+ */
+//----------------------------------------------------------------------------------------------
\ No newline at end of file
diff --git a/Runtime/Shaders/AvatarVisualIndicator.cginc.meta b/Runtime/Shaders/AvatarVisualIndicator.cginc.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1c92c05f0a6c4c7f0611e3a827c7e8622156b7c9
--- /dev/null
+++ b/Runtime/Shaders/AvatarVisualIndicator.cginc.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: e25b26eae005e714c8882536b7b1a7b9
+ShaderIncludeImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/Shaders/AvatarVisualIndicator.shader b/Runtime/Shaders/AvatarVisualIndicator.shader
new file mode 100644
index 0000000000000000000000000000000000000000..47fc874c22aef68eb0fe79ee111a5e016f91439c
--- /dev/null
+++ b/Runtime/Shaders/AvatarVisualIndicator.shader
@@ -0,0 +1,492 @@
+// Upgrade NOTE: replaced '_LightMatrix0' with 'unity_WorldToLight'
+
+Shader "Avatar/AvatarVisualIndicator"
+{
+        Properties {
+        ///////////for opacity and saturation////////
+        _Opacity("Opacity", Range(0,1)) = 1
+        _Saturation("Saturation", Range(0,1)) = 1
+        ///////////for scan/////
+        [Toggle] _useScan("Use Scan", int) = 0
+        [HDR]_WireColor ("WireColor", Color) = (1, 0, 0, 0.5)
+        [HDR]_FillColor ("FillColor", Color) = (1, 1, 1, 0)
+        _WireWidth ("WireWidth", Range(0, 0.005)) = 0.001
+        _Scan ("Scan", Range(0, 1)) = 1
+        _ScanColor ("ScanColor", Color) = (1, 0, 0, 0.5)
+        _ScanThickness ("ScanThickness", Range(0, 1)) = 1
+        _BlendWidth ("BlendWidth", Range(0, 2)) = 0.3
+        _LowestWorldPosition ("Lowest world position of bones", float) = 0.0
+        _MomentaryBodyHeight ("Total Body height at this frame", float) = 0.0
+        ////////////////////////
+        _MainTex ("RGB Texture", 2D) = "white" {}
+        _NormalMap ("Normals", 2D) = "white" {}
+        _SpecularMap ("Specular", 2D) = "white" {}
+        _frontColor ("Front Color", Color) = (1,1,1,1)
+        _backColor ("Back Color", Color) = (0.5, 0.5, 0.0, 1)
+        _ambientIntensity ("Ambient light intensity", float) = 0.2
+        _diffuseIntensity ("Diffuse light intensity", float) = 0.7
+        _specularIntensity ("Specular light intensity", float) = 0
+        _shininess ("Shininess", range(0, 10)) = 0
+        [Toggle] _useLighting ("Use Lighting", int) = 1
+        [Toggle] _useTexture ("Use Texture", int) = 1
+        [Toggle] _useVertexColor ("Use Vertex Color", int) = 0
+        [Toggle] _useSpecularMap ("Use Specular Map", int) = 0
+        [Toggle] _useNormalMap ("Use Normal Map", int) = 0
+    }
+
+    SubShader {
+        //Tags {"RenderType" = "Opaque" }
+        Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType" = "Opaque"}
+
+        Pass{ //to fix rendering queue
+			ZWrite On
+			ColorMask 0
+		}
+       
+        Pass{
+        // an addition pass for the shadow, now the fragment that cast shadow will be clipped according to "_Scan"
+        // but the shadow will be cut with a sharp edge.
+            Tags{"LightMode" = "ShadowCaster"}
+            
+            CGPROGRAM
+            #pragma vertex vert  
+            #pragma fragment frag  
+            #include "AvatarVisualIndicator.cginc" 
+
+
+            float _Scan, _MomentaryBodyHeight, _ScanThickness, _LowestWorldPosition;
+            v2f vert(appdata v)
+            {
+                v2f o;
+                o.posWorld = mul(unity_ObjectToWorld, v.vertex);
+                o.normal = normalize(mul(float4(v.normal, 0.0), unity_WorldToObject).xyz);
+                o.pos = UnityObjectToClipPos(v.vertex);
+                o.localHeightPos = v.vertex;
+                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
+                o.color = v.color;
+
+                return o;
+            }
+
+            fixed4 frag(v2f i, fixed facing : VFACE) : COLOR
+            {
+                fixed4 col = fixed4(0, 0, 0, 0);
+                //clip(i.posWorld.y-_Scan); //fragment that are lower then _Scan will be clipped
+                //clip(i.localHeightPos.y - (_Scan * 2) + 1); //fragment that are lower then _Scan will be clipped
+                //
+                if(_useScan){
+                    float localHeightPos = i.posWorld.y - _LowestWorldPosition;
+
+                    float scanSize = _MomentaryBodyHeight * _ScanThickness;
+                    float currentScanHeight = _Scan * _MomentaryBodyHeight;
+
+                    float localScanHeight = localHeightPos - currentScanHeight;
+
+                    //float materialChangePos = localHeightPos - currentScanHeight;
+                    //float spaceUnderScan = materialChangePos - scanSize;
+
+                    if (localHeightPos > currentScanHeight - scanSize && localHeightPos < currentScanHeight)
+                    {
+                        discard;
+                    }
+                }
+                    
+                //if(localHeightPos < localScanHeight)
+                    
+                //clip(localHeightPos - currentScanHeight); //fragment that are lower then _Scan will be clipped
+                return col;
+            }
+            ENDCG
+        }
+
+
+        Pass {
+            Tags {"LightMode" = "ForwardBase"} //for the first lightsource
+            ZWrite Off
+            Blend SrcAlpha OneMinusSrcAlpha
+            CGPROGRAM
+            #pragma vertex vert  
+            #pragma geometry geom
+            #pragma fragment frag 
+
+            #include "AvatarVisualIndicator.cginc"
+            
+            fixed _Opacity;
+            fixed _Saturation;
+
+            //sampler2D _MainTex;
+            //float4 _MainTex_ST;
+
+            float4 _FillColor, _WireColor, _ScanColor;
+            float _WireWidth, _Scan, _ScanThickness, _Lerp, _BlendWidth, _LowestWorldPosition, _MomentaryBodyHeight;
+
+            ////////////////////////////////
+            // In the origin avatar shader, we use struct v2f(vertex to fragment), here we use an additional geometry shader to render the mesh,
+            // and we add struct v2g and g2f in AvatarVisualIndicator.cginc
+            v2g vert(appdata v)
+            {
+                v2g o;
+                o.vertex = UnityObjectToClipPos(v.vertex); //position of vertex?
+                o.uv.xy = TRANSFORM_TEX(v.uv, _MainTex);
+                o.uv.z = v.vertex.x;
+                //o.worldPos = v.vertex;
+                o.worldPos = mul(unity_ObjectToWorld, v.vertex);//world position of vertex
+                o.localHeightPos = v.vertex;//local position of vertex
+
+                o.normal = normalize(mul(float4(v.normal, 0.0), unity_WorldToObject).xyz);
+                o.color = v.color;
+                return o;
+            }
+
+            // geometry shader, compute the triangles
+            [maxvertexcount(3)]
+            void geom(triangle v2g IN[3], inout TriangleStream < g2f > triStream)
+            {
+                float2 p0 = IN[0].vertex.xy / IN[0].vertex.w;
+                float2 p1 = IN[1].vertex.xy / IN[1].vertex.w;
+                float2 p2 = IN[2].vertex.xy / IN[2].vertex.w;
+
+                float2 v0 = p2 - p1;
+                float2 v1 = p2 - p0;
+                float2 v2 = p1 - p0;
+                //triangles area
+                float area = abs(v1.x * v2.y - v1.y * v2.x);
+
+                
+                g2f OUT;
+                OUT.normal = IN[0].normal;//
+                OUT.worldPos = IN[0].worldPos;//using world position of vertex
+                OUT.localHeightPos = IN[0].localHeightPos;//using world position of vertex
+                OUT.color = IN[0].color;//
+                OUT.vertex = IN[0].vertex;
+                OUT.uv = IN[0].uv;
+                OUT.dist = float3(area / length(v0), 0, 0);
+                triStream.Append(OUT);
+
+                OUT.normal = IN[1].normal;//
+                OUT.worldPos = IN[1].worldPos;//
+                OUT.localHeightPos = IN[1].localHeightPos;//
+                OUT.color = IN[1].color;//
+                OUT.vertex = IN[1].vertex;
+                OUT.uv = IN[1].uv;
+                OUT.dist = float3(0, area / length(v1), 0);
+                triStream.Append(OUT);
+
+                OUT.normal = IN[2].normal;//
+                OUT.worldPos = IN[2].worldPos;//
+                OUT.localHeightPos = IN[2].localHeightPos;//
+                OUT.color = IN[2].color;//
+                OUT.vertex = IN[2].vertex;
+                OUT.uv = IN[2].uv;
+                OUT.dist = float3(0, 0, area / length(v2));
+                triStream.Append(OUT);
+            }
+
+
+            fixed4 frag(g2f i, fixed facing : VFACE) : COLOR //SV_Target
+            {
+                float3 N = normalize(i.normal);
+                float3 V = _WorldSpaceCameraPos - i.worldPos.xyz; 
+                
+                //clip(i.worldPos.y-_Scan);
+                //-----------------------Below same as the orginal AvararShader--------------------------//
+                if(_useNormalMap)
+                {
+                    N = perturb_normal(N, V, i.uv);
+                }
+
+                fixed4 col = fixed4(1, 0, 0, 1);
+                float3 color_tmp;
+                bool useAmbient = true; //ambient light is computed for the base light only
+                float4 material = float4(_ambientIntensity, _diffuseIntensity, _specularIntensity, _shininess);
+
+                if(_useLighting)
+                {
+                    col = _frontColor;
+                    if(_useVertexColor)
+                    {
+                        col = i.color;
+                    }
+
+                    if(facing)
+                    {
+                        phong_lighting_g2f(N, material, col.rgb, i, color_tmp, useAmbient);
+                        col = fixed4(color_tmp, 1);
+                    }
+                    else
+                    {
+                        phong_lighting_g2f(-N, material, _backColor.rgb, i, color_tmp, useAmbient);
+                    }
+                }
+                else
+                {
+                    if(_useVertexColor)
+                    {
+                        col = i.color;
+                    }
+                    else 
+                    {
+                        if(_useTexture)
+                        {
+                            color_tmp = tex2D(_MainTex, i.uv).xyz;
+                            col = fixed4(color_tmp, 1);
+                        }
+                        else
+                        {
+                            color_tmp = _frontColor;
+                            col = fixed4(color_tmp, 1);
+                        }
+                    }
+                }
+
+                col = clamp(col, 0.0, 1.0);
+                col.rgb = lerp(dot(col.rgb, float3(0.2125, 0.7154, 0.0721)), col.rgb, _Saturation);
+                //fixed4 colgrey = (grey, grey, grey, 1);
+                //col = lerp(colgrey, col, _Saturation);
+                col.a *= _Opacity;
+                //-----------------------Above same as the orginal AvararShader--------------------------//
+
+                if (_useScan) {
+                    // render the polygon wire 
+                    fixed4 col_Wire;
+                    float d = min(i.dist.x, min(i.dist.y, i.dist.z));
+
+                    _WireColor = _ScanColor;
+                    _FillColor = (_ScanColor)/2.0;
+
+                    col_Wire = d < _WireWidth ? _WireColor : _FillColor;
+
+                    // blend the col_Wire with the col for texture, _BlendWidth can control the blending area
+                    //half blendValue = smoothstep(-_BlendWidth, 0, i.worldPos.y-_Scan);
+
+
+                    //local hight of object based on world coordinates
+                    float localHeightPos = i.worldPos.y - _LowestWorldPosition;
+
+                    float currentScanHeight = _Scan * _MomentaryBodyHeight;
+
+                    float materialChangePos = localHeightPos - currentScanHeight;
+
+                    float heightClamp = smoothstep(0.0, 1.0, (materialChangePos * 0.8) / _BlendWidth + 0.5);
+
+                    //Color blending under the scan
+                    float scanSize = _MomentaryBodyHeight * _ScanThickness;
+
+                    float spaceUnderScan = currentScanHeight - scanSize;
+
+                    float underScanHeightClamp = smoothstep(0.0, 1.0, (materialChangePos * 0.8 + scanSize) / _BlendWidth + 0.5);
+
+                    float4 returnColor = (localHeightPos > spaceUnderScan) ? lerp(col_Wire, col, heightClamp) : lerp(col, col_Wire, underScanHeightClamp);
+
+                    return returnColor;
+
+                    /*
+                    // 6.) The LIGHT_ATTENUATION samples the shadowmap (using the coordinates calculated by TRANSFER_VERTEX_TO_FRAGMENT
+                    // and stored in the structure defined by LIGHTING_COORDS), and returns the value as a float.
+                    float attenuation = LIGHT_ATTENUATION(i);
+                    //from here we start to compute the ambient
+                    i.worldNorm = normalize(i.worldNorm);
+                    half3 ambient = ShadeSH9(float4(i.worldNorm, 1));
+                    //attenuation = clamp(attenuation, 0.3, 1.0);
+                    //return col*attenuation;
+                    return returnCol * (attenuation + half4(ambient, 1));
+                    */
+                }
+                else {
+                    return col;
+
+                    /*
+                    // 6.) The LIGHT_ATTENUATION samples the shadowmap (using the coordinates calculated by TRANSFER_VERTEX_TO_FRAGMENT
+                    // and stored in the structure defined by LIGHTING_COORDS), and returns the value as a float.
+                    float attenuation = LIGHT_ATTENUATION(i);
+                    //from here we start to compute the ambient
+                    i.worldNorm = normalize(i.worldNorm);
+                    half3 ambient = ShadeSH9(float4(i.worldNorm, 1));
+                    //attenuation = clamp(attenuation, 0.3, 1.0);
+                    //return col*attenuation;
+                    return col * (attenuation + half4(ambient, 1));
+                    */
+                }
+                
+            }
+            ENDCG
+
+            
+        }
+
+        Pass {
+            // add same code for this pass
+
+            Tags {"LightMode" = "ForwardAdd"} //for every other lightsource
+            ZWrite Off
+			//Blend SrcAlpha OneMinusSrcAlpha
+            Blend One One
+            CGPROGRAM
+            #pragma vertex vert
+            #pragma fragment frag
+            #include "AvatarVisualIndicator.cginc"
+
+            float4 _FillColor, _WireColor, _ScanColor;
+            float _WireWidth, _Scan, _ScanThickness, _Lerp, _BlendWidth, _LowestWorldPosition, _MomentaryBodyHeight;
+
+            fixed _Opacity;
+
+            v2g vert(appdata v)
+            {
+                v2g o;
+                o.vertex = UnityObjectToClipPos(v.vertex);
+                o.uv.xy = TRANSFORM_TEX(v.uv, _MainTex);
+                o.uv.z = v.vertex.x;
+                //o.worldPos = v.vertex;
+                o.worldPos = mul(unity_ObjectToWorld, v.vertex);
+                o.localHeightPos = v.vertex;
+    
+                o.normal = normalize(mul(float4(v.normal, 0.0), unity_WorldToObject).xyz);
+                o.color = v.color;
+                return o;
+            }
+
+            [maxvertexcount(3)]
+            void geom(triangle v2g IN[3], inout TriangleStream < g2f > triStream)
+            {
+                float2 p0 = IN[0].vertex.xy / IN[0].vertex.w;
+                float2 p1 = IN[1].vertex.xy / IN[1].vertex.w;
+                float2 p2 = IN[2].vertex.xy / IN[2].vertex.w;
+
+                float2 v0 = p2 - p1;
+                float2 v1 = p2 - p0;
+                float2 v2 = p1 - p0;
+                //triangles area
+                float area = abs(v1.x * v2.y - v1.y * v2.x);
+
+                //
+                g2f OUT;
+                OUT.normal = IN[0].normal;//
+                OUT.worldPos = IN[0].worldPos;//
+                OUT.localHeightPos = IN[0].localHeightPos;//
+                OUT.color = IN[0].color;//
+                OUT.vertex = IN[0].vertex;
+                OUT.uv = IN[0].uv;
+                OUT.dist = float3(area / length(v0), 0, 0);
+                triStream.Append(OUT);
+
+                OUT.normal = IN[1].normal;//
+                OUT.worldPos = IN[1].worldPos;//
+                OUT.localHeightPos = IN[1].localHeightPos;//
+                OUT.color = IN[1].color;//
+                OUT.vertex = IN[1].vertex;
+                OUT.uv = IN[1].uv;
+                OUT.dist = float3(0, area / length(v1), 0);
+                triStream.Append(OUT);
+
+                OUT.normal = IN[2].normal;//
+                OUT.worldPos = IN[2].worldPos;//
+                OUT.localHeightPos = IN[2].localHeightPos;//
+                OUT.color = IN[2].color;//
+                OUT.vertex = IN[2].vertex;
+                OUT.uv = IN[2].uv;
+                OUT.dist = float3(0, 0, area / length(v2));
+                triStream.Append(OUT);
+            }
+
+            fixed4 frag(g2f i, fixed facing : VFACE) : COLOR //SV_Target
+            {
+                float3 N = normalize(i.normal);
+                float3 V = _WorldSpaceCameraPos - i.worldPos.xyz; 
+
+                if(_useNormalMap)
+                {
+                    N = perturb_normal(N, V, i.uv);
+                }
+
+                fixed4 col = fixed4(0, 0, 0, 1);
+                float3 color_tmp = fixed4(0, 0, 0, 1);
+                bool useAmbient = false; //ambient light is computed for the base light only
+                float4 material = float4(_ambientIntensity, _diffuseIntensity, _specularIntensity, _shininess);
+                if(_useLighting)
+                {
+                    col = _frontColor;
+                    if(_useVertexColor)
+                    {
+                        col = i.color;
+                    }
+
+                    if(facing)
+                    {
+                        phong_lighting_g2f(N, material, col, i, color_tmp, useAmbient);
+                        col = fixed4(color_tmp, 1);
+                    }
+                    else
+                    {
+                        phong_lighting_g2f(-N, material, _backColor, i, color_tmp, useAmbient);
+                    }
+                }
+                col = clamp(col, 0.0, 1.0); 
+                col.a *= _Opacity;
+
+
+                if (_useScan) {
+                    // render the polygon wire 
+                    fixed4 col_Wire;
+                    float d = min(i.dist.x, min(i.dist.y, i.dist.z));
+
+                    _WireColor = _ScanColor;
+
+                    col_Wire = d < _WireWidth ? _WireColor : _FillColor;
+
+                    // blend the col_Wire with the col for texture, _BlendWidth can control the blending area
+                    //half blendValue = smoothstep(-_BlendWidth, 0, i.worldPos.y-_Scan);
+
+
+                    //local hight of object based on world coordinates
+                    float localHeightPos = i.worldPos.y - _LowestWorldPosition;
+
+                    float currentScanHeight = _Scan * _MomentaryBodyHeight;
+
+                    float materialChangePos = localHeightPos - currentScanHeight;
+
+                    float heightClamp = smoothstep(0.0, 1.0, (materialChangePos * 0.8) / _BlendWidth + 0.5);
+
+                    //Color blending under the scan
+                    float scanSize = _MomentaryBodyHeight * _ScanThickness;
+
+                    float spaceUnderScan = currentScanHeight - scanSize;
+
+                    float underScanHeightClamp = smoothstep(0.0, 1.0, (materialChangePos * 0.8 + scanSize) / _BlendWidth + 0.5);
+
+                    float4 returnColor = (localHeightPos > spaceUnderScan) ? lerp(col_Wire, col, heightClamp) : lerp(col, col_Wire, underScanHeightClamp);
+
+                    return returnColor;
+                    /*
+                    // 6.) The LIGHT_ATTENUATION samples the shadowmap (using the coordinates calculated by TRANSFER_VERTEX_TO_FRAGMENT
+                    // and stored in the structure defined by LIGHTING_COORDS), and returns the value as a float.
+                    float attenuation = LIGHT_ATTENUATION(i);
+                    //from here we start to compute the ambient
+                    i.worldNorm = normalize(i.worldNorm);
+                    half3 ambient = ShadeSH9(float4(i.worldNorm, 1));
+                    //attenuation = clamp(attenuation, 0.3, 1.0);
+                    //return col*attenuation;
+                    return returnCol * (attenuation + half4(ambient, 1));
+                    */
+                }
+                else {
+                    return col;
+
+                    /*
+                    // 6.) The LIGHT_ATTENUATION samples the shadowmap (using the coordinates calculated by TRANSFER_VERTEX_TO_FRAGMENT
+                    // and stored in the structure defined by LIGHTING_COORDS), and returns the value as a float.
+                    float attenuation = LIGHT_ATTENUATION(i);
+                    //from here we start to compute the ambient
+                    i.worldNorm = normalize(i.worldNorm);
+                    half3 ambient = ShadeSH9(float4(i.worldNorm, 1));
+                    //attenuation = clamp(attenuation, 0.3, 1.0);
+                    //return col*attenuation;
+                    return col * (attenuation + half4(ambient, 1));
+                    */
+                }
+            }
+            ENDCG
+        }
+    }
+    FallBack "Diffuse" // what will happen if delete this line?
+}
\ No newline at end of file
diff --git a/Runtime/Shaders/AvatarVisualIndicator.shader.meta b/Runtime/Shaders/AvatarVisualIndicator.shader.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f570054d28202814c380db4e86c2fbf978652637
--- /dev/null
+++ b/Runtime/Shaders/AvatarVisualIndicator.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 36044a4f0f4868749bee19f0e7680b9c
+ShaderImporter:
+  externalObjects: {}
+  defaultTextures: []
+  nonModifiableTextures: []
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/UIs.meta b/Runtime/UIs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ad72309407da5a5155c229a64dbafc84ea7492c0
--- /dev/null
+++ b/Runtime/UIs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: dc91be258e728b948bd699f44bb38a68
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/UIs/green-tick.png b/Runtime/UIs/green-tick.png
new file mode 100644
index 0000000000000000000000000000000000000000..ed93976dbe822beeba70b9df6f48554939937d7a
Binary files /dev/null and b/Runtime/UIs/green-tick.png differ
diff --git a/Runtime/UIs/green-tick.png.meta b/Runtime/UIs/green-tick.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..91283c9fb9940786942732c6a22fbf8d0986fa9a
--- /dev/null
+++ b/Runtime/UIs/green-tick.png.meta
@@ -0,0 +1,120 @@
+fileFormatVersion: 2
+guid: 757f1390555f731428532f073cf0eec9
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 11
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    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: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  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: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  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
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    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: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/UIs/questionmark.png b/Runtime/UIs/questionmark.png
new file mode 100644
index 0000000000000000000000000000000000000000..4173859cdeed63ced5bcddab99a454df96a8fe06
Binary files /dev/null and b/Runtime/UIs/questionmark.png differ
diff --git a/Runtime/UIs/questionmark.png.meta b/Runtime/UIs/questionmark.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ba0b4d08a0f6e8bf036562b0dc7dcdb53c938551
--- /dev/null
+++ b/Runtime/UIs/questionmark.png.meta
@@ -0,0 +1,120 @@
+fileFormatVersion: 2
+guid: 62645cad7bcbd0d479664966cb6119e2
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 11
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    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: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  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: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  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
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    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: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/UIs/red-cross.png b/Runtime/UIs/red-cross.png
new file mode 100644
index 0000000000000000000000000000000000000000..8fdf7f44ef56e326fa04a319aadee100ae374eb7
Binary files /dev/null and b/Runtime/UIs/red-cross.png differ
diff --git a/Runtime/UIs/red-cross.png.meta b/Runtime/UIs/red-cross.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e01b5ceda66491ec38edee00e7dd6663b6ec9290
--- /dev/null
+++ b/Runtime/UIs/red-cross.png.meta
@@ -0,0 +1,120 @@
+fileFormatVersion: 2
+guid: 9ecd9f2c6f4ccad49b7abc44989ee6d3
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 11
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    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: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  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: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  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
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    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: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Samples~/VI Showcase/Avatars.meta b/Samples~/VI Showcase/Avatars.meta
new file mode 100644
index 0000000000000000000000000000000000000000..62e82e6675bdc2c46a7d8095678c2bf811be42ea
--- /dev/null
+++ b/Samples~/VI Showcase/Avatars.meta	
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: cd4265d3b76174745ac2b98eefea3daa
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Samples~/VI Showcase/Avatars/Male_6.meta b/Samples~/VI Showcase/Avatars/Male_6.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3e1afc34c946cc70b909501d9a48da5e9eca9e0d
--- /dev/null
+++ b/Samples~/VI Showcase/Avatars/Male_6.meta	
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 41fc4f8123951f44b925bc6d79068274
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Samples~/VI Showcase/Avatars/Male_6/M_male_6.mat b/Samples~/VI Showcase/Avatars/Male_6/M_male_6.mat
new file mode 100644
index 0000000000000000000000000000000000000000..e5deffc51d60cfb8ae1c3f7ee0544df8db20d1da
--- /dev/null
+++ b/Samples~/VI Showcase/Avatars/Male_6/M_male_6.mat	
@@ -0,0 +1,116 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+  serializedVersion: 8
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: M_male_6
+  m_Shader: {fileID: 4800000, guid: 36044a4f0f4868749bee19f0e7680b9c, type: 3}
+  m_Parent: {fileID: 0}
+  m_ModifiedSerializedProperties: 0
+  m_ValidKeywords: []
+  m_InvalidKeywords:
+  - _USELIGHTING_ON
+  - _USETEXTURE_ON
+  m_LightmapFlags: 4
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_LockedProperties: 
+  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: 2528780cde5d2c8478248dd49ff64f83, 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}
+    - _NormalMap:
+        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}
+    - _SpecularMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    m_Ints: []
+    m_Floats:
+    - _BlendWidth: 0.3
+    - _BumpScale: 1
+    - _Cutoff: 0.5
+    - _DetailNormalMapScale: 1
+    - _DstBlend: 0
+    - _GlossMapScale: 1
+    - _Glossiness: 0.5
+    - _GlossyReflections: 1
+    - _LowestWorldPosition: 0
+    - _Metallic: 0
+    - _Mode: 0
+    - _MomentaryBodyHeight: 0
+    - _OcclusionStrength: 1
+    - _Opacity: 1
+    - _Parallax: 0.02
+    - _Saturation: 1
+    - _Scan: 1
+    - _ScanThickness: 1
+    - _SmoothnessTextureChannel: 0
+    - _SpecularHighlights: 1
+    - _SrcBlend: 1
+    - _UVSec: 0
+    - _WireWidth: 0.001
+    - _ZWrite: 1
+    - _ambientIntensity: 0.2
+    - _diffuseIntensity: 0.7
+    - _shininess: 0
+    - _specularIntensity: 0
+    - _useLighting: 1
+    - _useNormalMap: 0
+    - _useScan: 0
+    - _useSpecularMap: 0
+    - _useTexture: 1
+    - _useVertexColor: 0
+    m_Colors:
+    - _Color: {r: 1, g: 1, b: 1, a: 1}
+    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+    - _FillColor: {r: 1, g: 1, b: 1, a: 0}
+    - _ScanColor: {r: 1, g: 0, b: 0, a: 0.5}
+    - _WireColor: {r: 1, g: 0, b: 0, a: 0.5}
+    - _backColor: {r: 0.5, g: 0.5, b: 0, a: 1}
+    - _frontColor: {r: 1, g: 1, b: 1, a: 1}
+  m_BuildTextureStacks: []
diff --git a/Samples~/VI Showcase/Avatars/Male_6/M_male_6.mat.meta b/Samples~/VI Showcase/Avatars/Male_6/M_male_6.mat.meta
new file mode 100644
index 0000000000000000000000000000000000000000..89b3bc14c960df6c1471db71c2ccd2d7108787ed
--- /dev/null
+++ b/Samples~/VI Showcase/Avatars/Male_6/M_male_6.mat.meta	
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4fd65057a857cdf4b8fe6b5017fe6f13
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 2100000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Samples~/VI Showcase/Avatars/Male_6/Male_6_N_Pose.fbx b/Samples~/VI Showcase/Avatars/Male_6/Male_6_N_Pose.fbx
new file mode 100644
index 0000000000000000000000000000000000000000..3f13ffa5410761004c2607c7a0e11c237afa10b9
Binary files /dev/null and b/Samples~/VI Showcase/Avatars/Male_6/Male_6_N_Pose.fbx differ
diff --git a/Samples~/VI Showcase/Avatars/Male_6/Male_6_N_Pose.fbx.meta b/Samples~/VI Showcase/Avatars/Male_6/Male_6_N_Pose.fbx.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8374958909d25ad0e43c6308972caf85cf7e574e
--- /dev/null
+++ b/Samples~/VI Showcase/Avatars/Male_6/Male_6_N_Pose.fbx.meta	
@@ -0,0 +1,916 @@
+fileFormatVersion: 2
+guid: d9df7ae4ae94bc94991e210aa980ccd1
+ModelImporter:
+  serializedVersion: 22200
+  internalIDToNameTable: []
+  externalObjects: {}
+  materials:
+    materialImportMode: 2
+    materialName: 0
+    materialSearch: 1
+    materialLocation: 1
+  animations:
+    legacyGenerateAnimations: 4
+    bakeSimulation: 0
+    resampleCurves: 1
+    optimizeGameObjects: 0
+    removeConstantScaleCurves: 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
+    importPhysicalCameras: 1
+    importVisibility: 1
+    importBlendShapes: 1
+    importCameras: 1
+    importLights: 1
+    nodeNameCollisionStrategy: 0
+    fileIdsGeneration: 2
+    swapUVChannels: 0
+    generateSecondaryUV: 0
+    useFileUnits: 1
+    keepQuads: 0
+    weldVertices: 1
+    bakeAxisConversion: 0
+    preserveHierarchy: 0
+    skinWeightsMode: 0
+    maxBonesPerVertex: 4
+    minBoneWeight: 0.001
+    optimizeBones: 1
+    meshOptimizationFlags: -1
+    indexFormat: 0
+    secondaryUVAngleDistortion: 8
+    secondaryUVAreaDistortion: 15.000001
+    secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 1
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
+    secondaryUVPackMargin: 4
+    useFileScale: 1
+    strictVertexDataChecks: 0
+  tangentSpace:
+    normalSmoothAngle: 60
+    normalImportMode: 0
+    tangentImportMode: 3
+    normalCalculationMode: 3
+    legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
+    blendShapeNormalImportMode: 1
+    normalSmoothingSource: 0
+  referencedClips: []
+  importAnimation: 1
+  humanDescription:
+    serializedVersion: 3
+    human:
+    - boneName: HumanoidRoot
+      humanName: Hips
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_hip
+      humanName: LeftUpperLeg
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_hip
+      humanName: RightUpperLeg
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_knee
+      humanName: LeftLowerLeg
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_knee
+      humanName: RightLowerLeg
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_ankle
+      humanName: LeftFoot
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_ankle
+      humanName: RightFoot
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: vl5
+      humanName: Spine
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: vl2
+      humanName: Chest
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: vc7
+      humanName: Neck
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: skullbase
+      humanName: Head
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_sternoclavicular
+      humanName: LeftShoulder
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_sternoclavicular
+      humanName: RightShoulder
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_shoulder
+      humanName: LeftUpperArm
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_shoulder
+      humanName: RightUpperArm
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_elbow
+      humanName: LeftLowerArm
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_elbow
+      humanName: RightLowerArm
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_wrist
+      humanName: LeftHand
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_wrist
+      humanName: RightHand
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_metatarsal
+      humanName: LeftToes
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_metatarsal
+      humanName: RightToes
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_eyeball_joint
+      humanName: LeftEye
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_eyeball_joint
+      humanName: RightEye
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_thumb1
+      humanName: Left Thumb Proximal
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_thumb2
+      humanName: Left Thumb Intermediate
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_thumb3
+      humanName: Left Thumb Distal
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_index1
+      humanName: Left Index Proximal
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_index2
+      humanName: Left Index Intermediate
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_index3
+      humanName: Left Index Distal
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_middle1
+      humanName: Left Middle Proximal
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_middle2
+      humanName: Left Middle Intermediate
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_middle3
+      humanName: Left Middle Distal
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_ring1
+      humanName: Left Ring Proximal
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_ring2
+      humanName: Left Ring Intermediate
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_ring3
+      humanName: Left Ring Distal
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_pinky1
+      humanName: Left Little Proximal
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_pinky2
+      humanName: Left Little Intermediate
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: l_pinky3
+      humanName: Left Little Distal
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_thumb1
+      humanName: Right Thumb Proximal
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_thumb2
+      humanName: Right Thumb Intermediate
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_thumb3
+      humanName: Right Thumb Distal
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_index1
+      humanName: Right Index Proximal
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_index2
+      humanName: Right Index Intermediate
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_index3
+      humanName: Right Index Distal
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_middle1
+      humanName: Right Middle Proximal
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_middle2
+      humanName: Right Middle Intermediate
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_middle3
+      humanName: Right Middle Distal
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_ring1
+      humanName: Right Ring Proximal
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_ring2
+      humanName: Right Ring Intermediate
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_ring3
+      humanName: Right Ring Distal
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_pinky1
+      humanName: Right Little Proximal
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_pinky2
+      humanName: Right Little Intermediate
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: r_pinky3
+      humanName: Right Little Distal
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    - boneName: vt10
+      humanName: UpperChest
+      limit:
+        min: {x: 0, y: 0, z: 0}
+        max: {x: 0, y: 0, z: 0}
+        value: {x: 0, y: 0, z: 0}
+        length: 0
+        modified: 0
+    skeleton:
+    - name: Male_6_N_Pose(Clone)
+      parentName: 
+      position: {x: 0, y: 0, z: 0}
+      rotation: {x: 0, y: 0, z: 0, w: 1}
+      scale: {x: 1, y: 1, z: 1}
+    - name: H_DDS_HighResShape
+      parentName: Male_6_N_Pose(Clone)
+      position: {x: -0, y: 0, z: 0}
+      rotation: {x: 0, y: -0, z: -0, w: 1}
+      scale: {x: 1, y: 1, z: 1}
+    - name: h_L_eyeShape
+      parentName: Male_6_N_Pose(Clone)
+      position: {x: -0, y: 0, z: 0}
+      rotation: {x: 0, y: -0, z: -0, w: 1}
+      scale: {x: 1, y: 1, z: 1}
+    - name: h_L_glandShape
+      parentName: Male_6_N_Pose(Clone)
+      position: {x: -0, y: 0, z: 0}
+      rotation: {x: 0, y: -0, z: -0, w: 1}
+      scale: {x: 1, y: 1, z: 1}
+    - name: h_L_transShape
+      parentName: Male_6_N_Pose(Clone)
+      position: {x: -0, y: 0, z: 0}
+      rotation: {x: 0, y: -0, z: -0, w: 1}
+      scale: {x: 1, y: 1, z: 1}
+    - name: h_R_eyeShape
+      parentName: Male_6_N_Pose(Clone)
+      position: {x: -0, y: 0, z: 0}
+      rotation: {x: 0, y: -0, z: -0, w: 1}
+      scale: {x: 1, y: 1, z: 1}
+    - name: h_R_glandShape
+      parentName: Male_6_N_Pose(Clone)
+      position: {x: -0, y: 0, z: 0}
+      rotation: {x: 0, y: -0, z: -0, w: 1}
+      scale: {x: 1, y: 1, z: 1}
+    - name: h_R_transShape
+      parentName: Male_6_N_Pose(Clone)
+      position: {x: -0, y: 0, z: 0}
+      rotation: {x: 0, y: -0, z: -0, w: 1}
+      scale: {x: 1, y: 1, z: 1}
+    - name: h_TeethDownShape
+      parentName: Male_6_N_Pose(Clone)
+      position: {x: -0, y: 0, z: 0}
+      rotation: {x: 0, y: -0, z: -0, w: 1}
+      scale: {x: 1, y: 1, z: 1}
+    - name: h_TeethUpShape
+      parentName: Male_6_N_Pose(Clone)
+      position: {x: -0, y: 0, z: 0}
+      rotation: {x: 0, y: -0, z: -0, w: 1}
+      scale: {x: 1, y: 1, z: 1}
+    - name: HumanoidRoot
+      parentName: Male_6_N_Pose(Clone)
+      position: {x: -0.0022692697, y: 0.9758251, z: -0.008561947}
+      rotation: {x: 0, y: -0, z: -0, w: 1}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_hip
+      parentName: HumanoidRoot
+      position: {x: -0.09300359, y: -0.027582943, z: 0.07689397}
+      rotation: {x: 0.012443453, y: 0.000701003, z: -0.060622305, w: 0.99808294}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_knee
+      parentName: l_hip
+      position: {x: -0, y: -0.42701653, z: 0}
+      rotation: {x: -0.002814137, y: 0.00008131726, z: 0.007514881, w: 0.9999678}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_ankle
+      parentName: l_knee
+      position: {x: -0, y: -0.44768947, z: 0}
+      rotation: {x: -0.009649246, y: -1.1973595e-12, z: -0.0031271232, w: 0.99994856}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_metatarsal
+      parentName: l_ankle
+      position: {x: 0.0032770336, y: -0.048154045, z: 0.14275539}
+      rotation: {x: 0, y: -0, z: -0, w: 1}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_hip
+      parentName: HumanoidRoot
+      position: {x: 0.08845346, y: -0.029716194, z: 0.07809274}
+      rotation: {x: 0.012440154, y: -0.00075741083, z: 0.06514678, w: 0.9977979}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_knee
+      parentName: r_hip
+      position: {x: -0, y: -0.4216946, z: 0}
+      rotation: {x: -0.0028137418, y: -0.00008131544, z: -0.0075146183, w: 0.9999678}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_ankle
+      parentName: r_knee
+      position: {x: -0, y: -0.44727474, z: 0}
+      rotation: {x: -0.009649647, y: -1.0888664e-12, z: 0.0031267414, w: 0.99994856}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_metatarsal
+      parentName: r_ankle
+      position: {x: -0.0033766255, y: -0.049617942, z: 0.14709544}
+      rotation: {x: 0, y: -0, z: -0, w: 1}
+      scale: {x: 1, y: 1, z: 1}
+    - name: vl5
+      parentName: HumanoidRoot
+      position: {x: 0.0030812456, y: 0.044479966, z: -0.01186497}
+      rotation: {x: 0, y: -0, z: -0, w: 1}
+      scale: {x: 1, y: 1, z: 1}
+    - name: vl2
+      parentName: vl5
+      position: {x: 0.0027462195, y: 0.041135907, z: -0.017352056}
+      rotation: {x: 0, y: -0, z: -0, w: 1}
+      scale: {x: 1, y: 1, z: 1}
+    - name: vt10
+      parentName: vl2
+      position: {x: -0.0023406306, y: 0.15234387, z: -0.016093649}
+      rotation: {x: 0, y: -0, z: -0, w: 1}
+      scale: {x: 1, y: 1, z: 1}
+    - name: vt5
+      parentName: vt10
+      position: {x: -0.0004057238, y: 0.107726455, z: -0.004943073}
+      rotation: {x: 0, y: -0, z: -0, w: 1}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_sternoclavicular
+      parentName: vt5
+      position: {x: -0.03769631, y: 0.13978422, z: 0.06918696}
+      rotation: {x: 0, y: -0, z: -0, w: 1}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_shoulder
+      parentName: l_sternoclavicular
+      position: {x: -0.13383561, y: -0.019223452, z: 0.00016803294}
+      rotation: {x: 0.000019139363, y: 0.0016860326, z: -0.014424122, w: 0.9998946}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_elbow
+      parentName: l_shoulder
+      position: {x: -0.2748602, y: 0, z: 0}
+      rotation: {x: -0.0006605113, y: 0.023097355, z: 0.03855027, w: 0.9989895}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_wrist
+      parentName: l_elbow
+      position: {x: -0.25029123, y: 0, z: 0}
+      rotation: {x: 0.0015257547, y: -0.024740256, z: 0.048755225, w: 0.9985032}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_index1
+      parentName: l_wrist
+      position: {x: -0.0801543, y: 0.014100432, z: 0.035695486}
+      rotation: {x: 0.0008627802, y: 0.026955998, z: -0.06344992, w: 0.9976206}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_index2
+      parentName: l_index1
+      position: {x: -0.042384584, y: 0, z: 0}
+      rotation: {x: 0.00033880776, y: 0.005255255, z: 0.03985927, w: 0.99919146}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_index3
+      parentName: l_index2
+      position: {x: -0.025137534, y: 0, z: 0}
+      rotation: {x: -0.002188133, y: -0.03971258, z: -0.011774836, w: 0.9991394}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_index_distal
+      parentName: l_index3
+      position: {x: -0.027580183, y: 0, z: 0}
+      rotation: {x: 7.036024e-11, y: 0.0403109, z: -0.039839827, w: 0.99839264}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_middle1
+      parentName: l_wrist
+      position: {x: -0.080881655, y: 0.021481633, z: 0.012284171}
+      rotation: {x: 0.0006541431, y: 0.031698763, z: -0.062637016, w: 0.99753267}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_middle2
+      parentName: l_middle1
+      position: {x: -0.05013782, y: 0, z: 0}
+      rotation: {x: 0.0006259488, y: 0.014414497, z: 0.015100759, w: 0.9997819}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_middle3
+      parentName: l_middle2
+      position: {x: -0.03153128, y: 0, z: 0}
+      rotation: {x: -0.000041213203, y: 0.0002903806, z: -0.007663051, w: 0.9999706}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_middle_distal
+      parentName: l_middle3
+      position: {x: -0.027502045, y: 0, z: 0}
+      rotation: {x: -3.3747866e-12, y: 0.0064620306, z: -0.028663823, w: 0.9995682}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_pinky1
+      parentName: l_wrist
+      position: {x: -0.08080959, y: 0.011836767, z: -0.030254383}
+      rotation: {x: 0.0049372516, y: 0.020150622, z: -0.07382996, w: 0.99705505}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_pinky2
+      parentName: l_pinky1
+      position: {x: -0.03856348, y: 0, z: 0}
+      rotation: {x: 0.0031055997, y: 0.016716233, z: 0.03608586, w: 0.99920404}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_pinky3
+      parentName: l_pinky2
+      position: {x: -0.020888785, y: 0, z: 0}
+      rotation: {x: -0.0019639272, y: -0.022512635, z: -0.009786349, w: 0.99969673}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_pinky_distal
+      parentName: l_pinky3
+      position: {x: -0.020506091, y: 0, z: 0}
+      rotation: {x: 1.4482447e-10, y: 0.07949459, z: -0.05228422, w: 0.9954632}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_ring1
+      parentName: l_wrist
+      position: {x: -0.08232808, y: 0.01898408, z: -0.01070748}
+      rotation: {x: 0.0021865326, y: 0.025438664, z: -0.06729655, w: 0.9974063}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_ring2
+      parentName: l_ring1
+      position: {x: -0.047923844, y: 0, z: 0}
+      rotation: {x: 0.002287953, y: 0.022122769, z: 0.034284927, w: 0.99916464}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_ring3
+      parentName: l_ring2
+      position: {x: -0.02890875, y: 0, z: 0}
+      rotation: {x: -0.0021198322, y: -0.031887673, z: 0.026096264, w: 0.99914855}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_ring_distal
+      parentName: l_ring3
+      position: {x: -0.02486287, y: 0, z: 0}
+      rotation: {x: 1.3704446e-10, y: 0.04509727, z: -0.09325457, w: 0.99462044}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_thumb1
+      parentName: l_wrist
+      position: {x: -0.026788533, y: -0.023177505, z: 0.026201133}
+      rotation: {x: -0.12533207, y: 0.45722935, z: 0.051481288, w: 0.878967}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_thumb2
+      parentName: l_thumb1
+      position: {x: -0.020820113, y: 0, z: 0}
+      rotation: {x: 0.021094158, y: -0.024309358, z: -0.024704417, w: 0.99917656}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_thumb3
+      parentName: l_thumb2
+      position: {x: -0.033913758, y: 0, z: 0}
+      rotation: {x: -0.028560648, y: -0.0074848514, z: 0.0389673, w: 0.9988043}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_thumb_distal
+      parentName: l_thumb3
+      position: {x: -0.033055555, y: 0, z: 0}
+      rotation: {x: -0.0000000067904, y: -0.29405892, z: -0.24257398, w: 0.92449296}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_sternoclavicular
+      parentName: vt5
+      position: {x: 0.035086587, y: 0.14073503, z: 0.07027419}
+      rotation: {x: 0, y: -0, z: -0, w: 1}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_shoulder
+      parentName: r_sternoclavicular
+      position: {x: 0.13504873, y: -0.01939261, z: 0.00016957521}
+      rotation: {x: 0.000023796445, y: -0.0016860701, z: 0.01164515, w: 0.9999308}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_elbow
+      parentName: r_shoulder
+      position: {x: 0.28183863, y: 0, z: 0}
+      rotation: {x: -0.0006600184, y: -0.023096547, z: -0.038513243, w: 0.99899095}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_wrist
+      parentName: r_elbow
+      position: {x: 0.26358467, y: 0, z: 0}
+      rotation: {x: 0.0006885707, y: 0.024782555, z: -0.014996614, w: 0.99958014}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_index1
+      parentName: r_wrist
+      position: {x: 0.08582342, y: 0.007256031, z: 0.031909324}
+      rotation: {x: 0.000357018, y: -0.0097413305, z: 0.030789467, w: 0.9994784}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_index2
+      parentName: r_index1
+      position: {x: 0.040377997, y: 0, z: 0}
+      rotation: {x: 0.00056782656, y: -0.005540096, z: -0.04057275, w: 0.99916106}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_index3
+      parentName: r_index2
+      position: {x: 0.02466314, y: 0, z: 0}
+      rotation: {x: -0.0021980067, y: 0.042740118, z: 0.003471189, w: 0.9990778}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_index_distal
+      parentName: r_index3
+      position: {x: 0.027226903, y: 0, z: 0}
+      rotation: {x: 5.7667364e-11, y: -0.046509728, z: 0.047536056, w: 0.99778616}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_middle1
+      parentName: r_wrist
+      position: {x: 0.08486372, y: 0.016720176, z: 0.009912113}
+      rotation: {x: -0.0026764984, y: -0.03096165, z: 0.024676265, w: 0.9992124}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_middle2
+      parentName: r_middle1
+      position: {x: 0.049140878, y: 0, z: 0}
+      rotation: {x: 0.00036908718, y: -0.00005095731, z: -0.024007363, w: 0.99971175}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_middle3
+      parentName: r_middle2
+      position: {x: 0.031753294, y: 0, z: 0}
+      rotation: {x: -0.0014126158, y: 0.005389812, z: 0.040992152, w: 0.99914396}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_middle_distal
+      parentName: r_middle3
+      position: {x: 0.027277783, y: 0, z: 0}
+      rotation: {x: 2.3061196e-10, y: -0.021049887, z: 0.07693553, w: 0.99681383}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_pinky1
+      parentName: r_wrist
+      position: {x: 0.08152741, y: 0.014011025, z: -0.030477116}
+      rotation: {x: 0.002610234, y: -0.007129655, z: 0.038757276, w: 0.99921983}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_pinky2
+      parentName: r_pinky1
+      position: {x: 0.037835337, y: 0, z: 0}
+      rotation: {x: 0.0026493315, y: -0.0073985583, z: -0.027854677, w: 0.9995811}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_pinky3
+      parentName: r_pinky2
+      position: {x: 0.02079901, y: 0, z: 0}
+      rotation: {x: -0.0029537978, y: 0.021358095, z: 0.014501428, w: 0.9996624}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_pinky_distal
+      parentName: r_pinky3
+      position: {x: 0.020418797, y: 0, z: 0}
+      rotation: {x: -2.9721334e-10, y: -0.09221803, z: 0.0747084, w: 0.99293226}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_ring1
+      parentName: r_wrist
+      position: {x: 0.08414823, y: 0.017805457, z: -0.011688426}
+      rotation: {x: 0.0010958742, y: -0.012083387, z: 0.033696942, w: 0.9993585}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_ring2
+      parentName: r_ring1
+      position: {x: 0.046479855, y: 0, z: 0}
+      rotation: {x: 0.004043029, y: -0.012775181, z: -0.038634773, w: 0.9991636}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_ring3
+      parentName: r_ring2
+      position: {x: 0.028422773, y: 0, z: 0}
+      rotation: {x: -0.0025492434, y: 0.027363196, z: -0.016656132, w: 0.9994836}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_ring_distal
+      parentName: r_ring3
+      position: {x: 0.024747068, y: 0, z: 0}
+      rotation: {x: -2.0413952e-10, y: -0.06191447, z: 0.12988155, w: 0.9895946}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_thumb1
+      parentName: r_wrist
+      position: {x: 0.028734267, y: -0.022542715, z: 0.023804912}
+      rotation: {x: -0.120795004, y: -0.43387383, z: -0.065689035, w: 0.89041954}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_thumb2
+      parentName: r_thumb1
+      position: {x: 0.0215727, y: 0, z: 0}
+      rotation: {x: 0.011157618, y: 0.025034392, z: 0.025552368, w: 0.9992977}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_thumb3
+      parentName: r_thumb2
+      position: {x: 0.035693083, y: 0, z: 0}
+      rotation: {x: -0.020461397, y: 0.003876775, z: -0.040276088, w: 0.9989716}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_thumb_distal
+      parentName: r_thumb3
+      position: {x: 0.03350418, y: 0, z: 0}
+      rotation: {x: -0.000000016525846, y: 0.275316, z: 0.26076663, w: 0.92531174}
+      scale: {x: 1, y: 1, z: 1}
+    - name: vc7
+      parentName: vt5
+      position: {x: -0.0015744896, y: 0.17976987, z: 0.10330433}
+      rotation: {x: 0.17127252, y: 1.1522721e-16, z: -0.000000014623925, w: 0.9852237}
+      scale: {x: 1, y: 1, z: 1}
+    - name: skullbase
+      parentName: vc7
+      position: {x: -0, y: 0.11917998, z: 0}
+      rotation: {x: -0.17127252, y: -1.0353639e-16, z: 0.000000014623925, w: 0.9852237}
+      scale: {x: 1, y: 1, z: 1}
+    - name: l_eyeball_joint
+      parentName: skullbase
+      position: {x: -0.032584656, y: 0.052255154, z: 0.07379836}
+      rotation: {x: 0, y: -0, z: -0, w: 1}
+      scale: {x: 1, y: 1, z: 1}
+    - name: r_eyeball_joint
+      parentName: skullbase
+      position: {x: 0.029574063, y: 0.05678606, z: 0.07300332}
+      rotation: {x: 0, y: -0, z: -0, w: 1}
+      scale: {x: 1, y: 1, z: 1}
+    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: 3
+  humanoidOversampling: 1
+  avatarSetup: 1
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 1
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
+  additionalBone: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Samples~/VI Showcase/Avatars/Male_6/T_male_6.jpg b/Samples~/VI Showcase/Avatars/Male_6/T_male_6.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8a29b852a186d630466665ade6ba133d80be3349
Binary files /dev/null and b/Samples~/VI Showcase/Avatars/Male_6/T_male_6.jpg differ
diff --git a/Samples~/VI Showcase/Avatars/Male_6/T_male_6.jpg.meta b/Samples~/VI Showcase/Avatars/Male_6/T_male_6.jpg.meta
new file mode 100644
index 0000000000000000000000000000000000000000..6f8f50fba4d359c2919f73e3742d9efb7a562755
--- /dev/null
+++ b/Samples~/VI Showcase/Avatars/Male_6/T_male_6.jpg.meta	
@@ -0,0 +1,96 @@
+fileFormatVersion: 2
+guid: 2528780cde5d2c8478248dd49ff64f83
+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: 0
+    wrapU: 0
+    wrapV: 0
+    wrapW: 0
+  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/Samples~/VI Showcase/Scenes.meta b/Samples~/VI Showcase/Scenes.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d6778d706f043c6f9d3d1025bad5cfcc00974305
--- /dev/null
+++ b/Samples~/VI Showcase/Scenes.meta	
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7eb252d11a224f14f8fcb4f3649ab279
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Samples~/VI Showcase/Scenes/VI Showcase.unity b/Samples~/VI Showcase/Scenes/VI Showcase.unity
new file mode 100644
index 0000000000000000000000000000000000000000..cec16a11de7cda468875a576890b75e4ff483787
--- /dev/null
+++ b/Samples~/VI Showcase/Scenes/VI Showcase.unity	
@@ -0,0 +1,1536 @@
+%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.17924783, g: 0.22444597, b: 0.30617222, 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: 3
+    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
+    buildHeightMesh: 0
+    maxJobWorkers: 0
+    preserveTilesOutsideBounds: 0
+    debug:
+      m_Flags: 0
+  m_NavMeshData: {fileID: 0}
+--- !u!1001 &203324351
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: -0.8299999
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 0.9045668
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -0.42633185
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: -50.47
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -5428123102370311094, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: -3582956261391384537, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: -2095311208415423475, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Name
+      value: avatar (6)
+      objectReference: {fileID: 0}
+    - target: {fileID: 1041875401042687516, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 1576156953400031843, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 2534326878022211143, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3662279962389027984, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5406455737543955632, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 6354061487236489313, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents:
+    - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      insertIndex: -1
+      addedObject: {fileID: 1253741391}
+    - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      insertIndex: -1
+      addedObject: {fileID: 1253741390}
+  m_SourcePrefab: {fileID: 100100000, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+--- !u!1001 &242695475
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 1.1700001
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 0.9045668
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -0.42633185
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: -50.47
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -5428123102370311094, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: -3582956261391384537, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: -2095311208415423475, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Name
+      value: avatar (4)
+      objectReference: {fileID: 0}
+    - target: {fileID: 1041875401042687516, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 1576156953400031843, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 2534326878022211143, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3662279962389027984, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5406455737543955632, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 6354061487236489313, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents:
+    - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      insertIndex: -1
+      addedObject: {fileID: 929223860}
+    - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      insertIndex: -1
+      addedObject: {fileID: 929223859}
+  m_SourcePrefab: {fileID: 100100000, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+--- !u!1 &448967616 stripped
+GameObject:
+  m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+  m_PrefabInstance: {fileID: 774991422}
+  m_PrefabAsset: {fileID: 0}
+--- !u!114 &448967617
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 448967616}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 9a3b6c25c51757c4788e1e02e4ead203, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  viStyle: 1
+  idStatus: 1
+  showName: 0
+  avatarName: Philipp Schneider
+--- !u!114 &448967618
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 448967616}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  outlineMode: 0
+  outlineColor: {r: 1, g: 1, b: 1, a: 1}
+  outlineWidth: 2
+  precomputeOutline: 0
+  bakeKeys: []
+  bakeValues: []
+--- !u!1001 &660760590
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: -3.83
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 0.9045668
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -0.42633185
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: -50.47
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -5428123102370311094, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: -3582956261391384537, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: -2095311208415423475, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Name
+      value: avatar (9)
+      objectReference: {fileID: 0}
+    - target: {fileID: 1041875401042687516, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 1576156953400031843, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 2534326878022211143, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3662279962389027984, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5406455737543955632, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 6354061487236489313, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents:
+    - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      insertIndex: -1
+      addedObject: {fileID: 1413673668}
+    - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      insertIndex: -1
+      addedObject: {fileID: 1413673667}
+  m_SourcePrefab: {fileID: 100100000, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+--- !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}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0.86119276, y: -0.11721353, z: 0.23075588, w: 0.43744692}
+  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_LocalEulerAnglesHint: {x: 126.143005, y: -30, z: 0}
+--- !u!1 &764340141
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 764340145}
+  - component: {fileID: 764340144}
+  - component: {fileID: 764340143}
+  - component: {fileID: 764340142}
+  m_Layer: 0
+  m_Name: Plane
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!64 &764340142
+MeshCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 764340141}
+  m_Material: {fileID: 0}
+  m_IncludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_ExcludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_LayerOverridePriority: 0
+  m_IsTrigger: 0
+  m_ProvidesContacts: 0
+  m_Enabled: 1
+  serializedVersion: 5
+  m_Convex: 0
+  m_CookingOptions: 30
+  m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &764340143
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 764340141}
+  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: 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!33 &764340144
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 764340141}
+  m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &764340145
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 764340141}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: -0.37}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1001 &772683123
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: -1.8299999
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 0.9045668
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -0.42633185
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: -50.47
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -5428123102370311094, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: -3582956261391384537, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: -2095311208415423475, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Name
+      value: avatar (7)
+      objectReference: {fileID: 0}
+    - target: {fileID: 1041875401042687516, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 1576156953400031843, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 2534326878022211143, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3662279962389027984, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5406455737543955632, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 6354061487236489313, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents:
+    - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      insertIndex: -1
+      addedObject: {fileID: 1112747919}
+    - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      insertIndex: -1
+      addedObject: {fileID: 1112747918}
+  m_SourcePrefab: {fileID: 100100000, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+--- !u!1001 &774991422
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 3.17
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 0.9045668
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -0.42633185
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: -50.47
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -5428123102370311094, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: -3582956261391384537, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: -2095311208415423475, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Name
+      value: avatar (2)
+      objectReference: {fileID: 0}
+    - target: {fileID: 1041875401042687516, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 1576156953400031843, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 2534326878022211143, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3662279962389027984, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5406455737543955632, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 6354061487236489313, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents:
+    - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      insertIndex: -1
+      addedObject: {fileID: 448967618}
+    - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      insertIndex: -1
+      addedObject: {fileID: 448967617}
+  m_SourcePrefab: {fileID: 100100000, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+--- !u!1001 &898661163
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: -2.83
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 0.9045668
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -0.42633185
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: -50.47
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -5428123102370311094, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: -3582956261391384537, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: -2095311208415423475, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Name
+      value: avatar (8)
+      objectReference: {fileID: 0}
+    - target: {fileID: 1041875401042687516, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 1576156953400031843, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 2534326878022211143, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3662279962389027984, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5406455737543955632, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 6354061487236489313, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents:
+    - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      insertIndex: -1
+      addedObject: {fileID: 1743598422}
+    - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      insertIndex: -1
+      addedObject: {fileID: 1743598421}
+  m_SourcePrefab: {fileID: 100100000, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+--- !u!1 &929223858 stripped
+GameObject:
+  m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+  m_PrefabInstance: {fileID: 242695475}
+  m_PrefabAsset: {fileID: 0}
+--- !u!114 &929223859
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 929223858}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 9a3b6c25c51757c4788e1e02e4ead203, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  viStyle: 2
+  idStatus: 1
+  showName: 0
+  avatarName: Philipp Schneider
+--- !u!114 &929223860
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 929223858}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  outlineMode: 0
+  outlineColor: {r: 1, g: 1, b: 1, a: 1}
+  outlineWidth: 2
+  precomputeOutline: 0
+  bakeKeys: []
+  bakeValues: []
+--- !u!1001 &948453418
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0.17000008
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 0.9045668
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -0.42633185
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: -50.47
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -5428123102370311094, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: -3582956261391384537, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: -2095311208415423475, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Name
+      value: avatar (5)
+      objectReference: {fileID: 0}
+    - target: {fileID: 1041875401042687516, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 1576156953400031843, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 2534326878022211143, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3662279962389027984, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5406455737543955632, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 6354061487236489313, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents:
+    - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      insertIndex: -1
+      addedObject: {fileID: 1143288023}
+    - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      insertIndex: -1
+      addedObject: {fileID: 1143288022}
+  m_SourcePrefab: {fileID: 100100000, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+--- !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}
+  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_Iso: 200
+  m_ShutterSpeed: 0.005
+  m_Aperture: 16
+  m_FocusDistance: 10
+  m_FocalLength: 50
+  m_BladeCount: 5
+  m_Curvature: {x: 2, y: 11}
+  m_BarrelClipping: 0.25
+  m_Anamorphism: 0
+  m_SensorSize: {x: 36, y: 24}
+  m_LensShift: {x: 0, y: 0}
+  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: -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}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0.07379372, y: 0.7743984, z: -0.09193044, w: 0.6216193}
+  m_LocalPosition: {x: -3.12, y: 1.467, z: 1.42}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 13.54, y: 102.491, z: 0}
+--- !u!1 &1112747917 stripped
+GameObject:
+  m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+  m_PrefabInstance: {fileID: 772683123}
+  m_PrefabAsset: {fileID: 0}
+--- !u!114 &1112747918
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1112747917}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 9a3b6c25c51757c4788e1e02e4ead203, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  viStyle: 4
+  idStatus: 1
+  showName: 0
+  avatarName: Philipp Schneider
+--- !u!114 &1112747919
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1112747917}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  outlineMode: 0
+  outlineColor: {r: 1, g: 1, b: 1, a: 1}
+  outlineWidth: 2
+  precomputeOutline: 0
+  bakeKeys: []
+  bakeValues: []
+--- !u!1 &1143288021 stripped
+GameObject:
+  m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+  m_PrefabInstance: {fileID: 948453418}
+  m_PrefabAsset: {fileID: 0}
+--- !u!114 &1143288022
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1143288021}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 9a3b6c25c51757c4788e1e02e4ead203, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  viStyle: 2
+  idStatus: 0
+  showName: 0
+  avatarName: Philipp Schneider
+--- !u!114 &1143288023
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1143288021}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  outlineMode: 0
+  outlineColor: {r: 1, g: 1, b: 1, a: 1}
+  outlineWidth: 2
+  precomputeOutline: 0
+  bakeKeys: []
+  bakeValues: []
+--- !u!1 &1253741389 stripped
+GameObject:
+  m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+  m_PrefabInstance: {fileID: 203324351}
+  m_PrefabAsset: {fileID: 0}
+--- !u!114 &1253741390
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1253741389}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 9a3b6c25c51757c4788e1e02e4ead203, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  viStyle: 3
+  idStatus: 1
+  showName: 0
+  avatarName: Philipp Schneider
+--- !u!114 &1253741391
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1253741389}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  outlineMode: 0
+  outlineColor: {r: 1, g: 1, b: 1, a: 1}
+  outlineWidth: 2
+  precomputeOutline: 0
+  bakeKeys: []
+  bakeValues: []
+--- !u!1001 &1359819811
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 2.17
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 0.9045668
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -0.42633185
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: -50.47
+      objectReference: {fileID: 0}
+    - target: {fileID: -8679921383154817045, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: -5428123102370311094, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: -3582956261391384537, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: -2095311208415423475, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Name
+      value: avatar (3)
+      objectReference: {fileID: 0}
+    - target: {fileID: 1041875401042687516, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 1576156953400031843, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 2534326878022211143, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3662279962389027984, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5406455737543955632, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    - target: {fileID: 6354061487236489313, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      propertyPath: m_Materials.Array.data[0]
+      value: 
+      objectReference: {fileID: 2100000, guid: 4fd65057a857cdf4b8fe6b5017fe6f13, type: 2}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents:
+    - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      insertIndex: -1
+      addedObject: {fileID: 1440749787}
+    - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+      insertIndex: -1
+      addedObject: {fileID: 1440749786}
+  m_SourcePrefab: {fileID: 100100000, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+--- !u!1 &1413673666 stripped
+GameObject:
+  m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+  m_PrefabInstance: {fileID: 660760590}
+  m_PrefabAsset: {fileID: 0}
+--- !u!114 &1413673667
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1413673666}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 9a3b6c25c51757c4788e1e02e4ead203, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  viStyle: 5
+  idStatus: 0
+  showName: 1
+  avatarName: Philipp Schneider
+--- !u!114 &1413673668
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1413673666}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  outlineMode: 0
+  outlineColor: {r: 1, g: 1, b: 1, a: 1}
+  outlineWidth: 2
+  precomputeOutline: 0
+  bakeKeys: []
+  bakeValues: []
+--- !u!1 &1440749785 stripped
+GameObject:
+  m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+  m_PrefabInstance: {fileID: 1359819811}
+  m_PrefabAsset: {fileID: 0}
+--- !u!114 &1440749786
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1440749785}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 9a3b6c25c51757c4788e1e02e4ead203, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  viStyle: 1
+  idStatus: 0
+  showName: 0
+  avatarName: Philipp Schneider
+--- !u!114 &1440749787
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1440749785}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  outlineMode: 0
+  outlineColor: {r: 1, g: 1, b: 1, a: 1}
+  outlineWidth: 2
+  precomputeOutline: 0
+  bakeKeys: []
+  bakeValues: []
+--- !u!1 &1743598420 stripped
+GameObject:
+  m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: d9df7ae4ae94bc94991e210aa980ccd1, type: 3}
+  m_PrefabInstance: {fileID: 898661163}
+  m_PrefabAsset: {fileID: 0}
+--- !u!114 &1743598421
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1743598420}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 9a3b6c25c51757c4788e1e02e4ead203, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  viStyle: 5
+  idStatus: 2
+  showName: 0
+  avatarName: Philipp Schneider
+--- !u!114 &1743598422
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1743598420}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  outlineMode: 0
+  outlineColor: {r: 1, g: 1, b: 1, a: 1}
+  outlineWidth: 2
+  precomputeOutline: 0
+  bakeKeys: []
+  bakeValues: []
+--- !u!1660057539 &9223372036854775807
+SceneRoots:
+  m_ObjectHideFlags: 0
+  m_Roots:
+  - {fileID: 963194228}
+  - {fileID: 705507995}
+  - {fileID: 764340145}
+  - {fileID: 774991422}
+  - {fileID: 1359819811}
+  - {fileID: 242695475}
+  - {fileID: 948453418}
+  - {fileID: 203324351}
+  - {fileID: 772683123}
+  - {fileID: 898661163}
+  - {fileID: 660760590}
diff --git a/Samples~/VI Showcase/Scenes/VI Showcase.unity.meta b/Samples~/VI Showcase/Scenes/VI Showcase.unity.meta
new file mode 100644
index 0000000000000000000000000000000000000000..952bd1e9e110583d94b471a30ff4ddd69f4aee7d
--- /dev/null
+++ b/Samples~/VI Showcase/Scenes/VI Showcase.unity.meta	
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 9fc0d4010bbf28b4594072e72b8655ab
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/package.json b/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..e63338a9ea1d225295cbe1fc757613288d3a32ab
--- /dev/null
+++ b/package.json
@@ -0,0 +1,19 @@
+{
+  "name": "de.jmu.realitystack.visualindicators",
+  "version": "0.0.1",
+  "displayName": "RealityStack Visual Indicators", 
+  "description": "Shaders and scripts supporting visual identity indicators for avatars",
+  "unity": "2022.3",
+  "author": {
+    "name": "HCI and PIIS group, University of Wuerzburg, Germany",
+    "email": "realitystack@uni-wuerzburg.de",
+    "url": "https://hci.uni-wuerzburg.de/"
+  },
+  "samples": [
+    {
+      "displayName": "VI Showcase",
+      "description": "A example scene showcasing the visual indicators",
+      "path": "Samples~/VI Showcase"
+    }
+  ]
+}
\ No newline at end of file