├── .gitattributes ├── .gitignore ├── Assets ├── AnimGPUInstancing.meta ├── AnimGPUInstancing │ ├── Editor.meta │ ├── Editor │ │ ├── AGI_ShaderInspector.cs │ │ ├── AGI_ShaderInspector.cs.meta │ │ ├── AnimationMeshGenerator.cs │ │ └── AnimationMeshGenerator.cs.meta │ ├── Prefabs.meta │ ├── Prefabs │ │ ├── AGI_RandomSpawn_Walk.prefab │ │ ├── AGI_RandomSpawn_Walk.prefab.meta │ │ ├── AGI_SpawnPoints.prefab │ │ ├── AGI_SpawnPoints.prefab.meta │ │ ├── AGI_SpawnRandom.prefab │ │ ├── AGI_SpawnRandom.prefab.meta │ │ ├── AnimationFrameInfoList.prefab │ │ └── AnimationFrameInfoList.prefab.meta │ ├── Scripts.meta │ ├── Scripts │ │ ├── AGI_SpawnPoints.asset │ │ ├── AGI_SpawnPoints.asset.meta │ │ ├── AGI_SpawnPoints.cs │ │ ├── AGI_SpawnPoints.cs.meta │ │ ├── AGI_SpawnRandom.asset │ │ ├── AGI_SpawnRandom.asset.meta │ │ ├── AGI_SpawnRandom.cs │ │ ├── AGI_SpawnRandom.cs.meta │ │ ├── AnimationFrameInfoList.asset │ │ ├── AnimationFrameInfoList.asset.meta │ │ ├── AnimationFrameInfoList.cs │ │ ├── AnimationFrameInfoList.cs.meta │ │ ├── SMR_SpawnRandom.asset │ │ ├── SMR_SpawnRandom.asset.meta │ │ ├── SMR_SpawnRandom.cs │ │ └── SMR_SpawnRandom.cs.meta │ ├── Shaders.meta │ └── Shaders │ │ ├── AnimationGpuInstancing_Default.shader │ │ ├── AnimationGpuInstancing_Default.shader.meta │ │ ├── AnimationGpuInstancing_Shadow.shader │ │ ├── AnimationGpuInstancing_Shadow.shader.meta │ │ ├── Includes.meta │ │ └── Includes │ │ ├── Utils.cginc │ │ └── Utils.cginc.meta ├── CGINC.meta ├── CGINC │ ├── Noises.cginc │ ├── Noises.cginc.meta │ ├── memory.cginc │ ├── memory.cginc.meta │ ├── util.cginc │ └── util.cginc.meta ├── WorkSpace.meta └── WorkSpace │ ├── Materials.meta │ ├── Prefabs.meta │ ├── Scenes.meta │ ├── Scenes │ ├── Ch01.unity │ ├── Ch01.unity.meta │ ├── Kon SMR.unity │ ├── Kon SMR.unity.meta │ ├── Kon.unity │ └── Kon.unity.meta │ ├── Scripts.meta │ └── Shaders.meta ├── Documents ├── Figures │ ├── agi_debugger.png │ ├── agi_statistics.png │ ├── smr_debugger.png │ └── smr_statistics.png ├── tips.md ├── usage_basic.md ├── usage_locomotion_spawn.md ├── usage_points_spawn.md └── usage_random_spawn.md ├── LICENSE ├── Packages ├── com.vrchat.vrcsdk3 │ ├── Editor.meta │ ├── Editor │ │ ├── UPMImporter.meta │ │ └── UPMImporter │ │ │ ├── UPMImporter.cs │ │ │ ├── UPMImporter.cs.meta │ │ │ ├── VRC.Udon.Editor.UPMImporter.asmdef │ │ │ └── VRC.Udon.Editor.UPMImporter.asmdef.meta │ ├── package.json │ └── package.json.meta ├── manifest.json └── packages-lock.json ├── ProjectSettings ├── AudioManager.asset ├── ClusterInputManager.asset ├── DynamicsManager.asset ├── EditorBuildSettings.asset ├── EditorSettings.asset ├── GraphicsSettings.asset ├── InputManager.asset ├── NavMeshAreas.asset ├── PackageManagerSettings.asset ├── Physics2DSettings.asset ├── PresetManager.asset ├── ProjectSettings.asset ├── ProjectVersion.txt ├── QualitySettings.asset ├── TagManager.asset ├── TimeManager.asset ├── UnityConnectSettings.asset ├── VFXManager.asset └── XRSettings.asset └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | ## Unity ## 2 | 3 | *.cs diff=csharp text 4 | *.cginc text 5 | *.shader text 6 | 7 | *.mat merge=unityyamlmerge eol=lf 8 | *.anim merge=unityyamlmerge eol=lf 9 | *.unity merge=unityyamlmerge eol=lf 10 | *.prefab merge=unityyamlmerge eol=lf 11 | *.physicsMaterial2D merge=unityyamlmerge eol=lf 12 | *.physicMaterial merge=unityyamlmerge eol=lf 13 | *.asset merge=unityyamlmerge eol=lf 14 | *.meta merge=unityyamlmerge eol=lf 15 | *.controller merge=unityyamlmerge eol=lf 16 | 17 | 18 | ## git-lfs ## 19 | 20 | #Image 21 | *.jpg filter=lfs diff=lfs merge=lfs -text 22 | *.jpeg filter=lfs diff=lfs merge=lfs -text 23 | *.png filter=lfs diff=lfs merge=lfs -text 24 | *.gif filter=lfs diff=lfs merge=lfs -text 25 | *.psd filter=lfs diff=lfs merge=lfs -text 26 | *.ai filter=lfs diff=lfs merge=lfs -text 27 | 28 | #Audio 29 | *.mp3 filter=lfs diff=lfs merge=lfs -text 30 | *.wav filter=lfs diff=lfs merge=lfs -text 31 | *.ogg filter=lfs diff=lfs merge=lfs -text 32 | 33 | #Video 34 | *.mp4 filter=lfs diff=lfs merge=lfs -text 35 | *.mov filter=lfs diff=lfs merge=lfs -text 36 | 37 | #3D Object 38 | *.FBX filter=lfs diff=lfs merge=lfs -text 39 | *.fbx filter=lfs diff=lfs merge=lfs -text 40 | *.blend filter=lfs diff=lfs merge=lfs -text 41 | *.obj filter=lfs diff=lfs merge=lfs -text 42 | 43 | #ETC 44 | *.a filter=lfs diff=lfs merge=lfs -text 45 | *.exr filter=lfs diff=lfs merge=lfs -text 46 | *.tga filter=lfs diff=lfs merge=lfs -text 47 | *.pdf filter=lfs diff=lfs merge=lfs -text 48 | *.zip filter=lfs diff=lfs merge=lfs -text 49 | *.dll filter=lfs diff=lfs merge=lfs -text 50 | *.unitypackage filter=lfs diff=lfs merge=lfs -text 51 | *.aif filter=lfs diff=lfs merge=lfs -text 52 | *.ttf filter=lfs diff=lfs merge=lfs -text 53 | *.rns filter=lfs diff=lfs merge=lfs -text 54 | *.reason filter=lfs diff=lfs merge=lfs -text 55 | *.lxo filter=lfs diff=lfs merge=lfs -text -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # This .gitignore file should be placed at the root of your Unity project directory 2 | # 3 | # Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore 4 | # 5 | /[Ll]ibrary/ 6 | /[Tt]emp/ 7 | /[Oo]bj/ 8 | /[Bb]uild/ 9 | /[Bb]uilds/ 10 | /[Ll]ogs/ 11 | /[Mm]emoryCaptures/ 12 | 13 | # Asset meta data should only be ignored when the corresponding asset is also ignored 14 | !/[Aa]ssets/**/*.meta 15 | 16 | # Uncomment this line if you wish to ignore the asset store tools plugin 17 | # /[Aa]ssets/AssetStoreTools* 18 | 19 | # Autogenerated Jetbrains Rider plugin 20 | [Aa]ssets/Plugins/Editor/JetBrains* 21 | 22 | # Visual Studio cache directory 23 | .vs/ 24 | 25 | # Gradle cache directory 26 | .gradle/ 27 | 28 | # Autogenerated VS/MD/Consulo solution and project files 29 | ExportedObj/ 30 | .consulo/ 31 | *.csproj 32 | *.unityproj 33 | *.sln 34 | *.suo 35 | *.tmp 36 | *.user 37 | *.userprefs 38 | *.pidb 39 | *.booproj 40 | *.svd 41 | *.pdb 42 | *.mdb 43 | *.opendb 44 | *.VC.db 45 | 46 | # Unity3D generated meta files 47 | *.pidb.meta 48 | *.pdb.meta 49 | *.mdb.meta 50 | 51 | # Unity3D generated file on crash reports 52 | sysinfo.txt 53 | 54 | # Builds 55 | *.apk 56 | *.unitypackage 57 | 58 | # Crashlytics generated file 59 | crashlytics-build.properties 60 | 61 | .vsconfig 62 | Recordings* 63 | Release* 64 | 65 | Assets/CyanEmu* 66 | Assets/Editor* 67 | Assets/External* 68 | Assets/Gizmos* 69 | Assets/SerializedUdonPrograms* 70 | Assets/Udon* 71 | Assets/UdonSharp* 72 | Assets/VRChat Examples* 73 | Assets/VRCSDK* 74 | Assets/SimpleFolderIcon* 75 | 76 | Assets/AnimGPUInstancing/Sample* 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 33cf137304f86ea4f8af30da9b24b2d0 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 677f48df8a63c1f439d9051846c2a59f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Editor/AGI_ShaderInspector.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using UnityEditor; 6 | 7 | 8 | public class AGI_ShaderInspector : ShaderGUI 9 | { 10 | #region MaterialProperties 11 | MaterialProperty mainTex; 12 | MaterialProperty color; 13 | MaterialProperty animTex; 14 | MaterialProperty startFrame; 15 | MaterialProperty frameCount; 16 | MaterialProperty offsetSeconds; 17 | MaterialProperty pixelsPerFrame; 18 | 19 | MaterialProperty isRootMotion; 20 | MaterialProperty repeatTex; 21 | MaterialProperty repeatStartFrame; 22 | MaterialProperty repeatMax; 23 | MaterialProperty repeatNum; 24 | 25 | MaterialProperty isPause; 26 | MaterialProperty isLighting; 27 | MaterialProperty shininess; 28 | MaterialProperty bumpMap; 29 | MaterialProperty instancing; 30 | 31 | #endregion 32 | 33 | 34 | public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] props) 35 | { 36 | 37 | 38 | Material material = materialEditor.target as Material; 39 | 40 | /* *** *** *** */ 41 | 42 | mainTex = FindProperty("_MainTex", props); 43 | color = FindProperty("_Color", props); 44 | animTex = FindProperty("_AnimTex", props); 45 | startFrame = FindProperty("_StartFrame", props); 46 | frameCount = FindProperty("_FrameCount", props); 47 | offsetSeconds = FindProperty("_OffsetSeconds", props); 48 | pixelsPerFrame = FindProperty("_PixelsPerFrame", props); 49 | 50 | isRootMotion = FindProperty("_ROOT_MOTION", props); 51 | repeatTex = FindProperty("_RepeatTex", props); 52 | repeatStartFrame = FindProperty("_RepeatStartFrame", props); 53 | repeatMax = FindProperty("_RepeatMax", props); 54 | repeatNum = FindProperty("_RepeatNum", props); 55 | 56 | isLighting = FindProperty("_LIGHTING", props); 57 | shininess = FindProperty("_Shininess", props); 58 | bumpMap = FindProperty("_BumpMap", props); 59 | 60 | instancing = FindProperty("_INSTANCING", props); 61 | /* *** *** *** */ 62 | 63 | // materialEditor.ShaderProperty(mainTexProps, mainTexProps.displayName); 64 | materialEditor.TexturePropertySingleLine(new GUIContent("Main Texture"), mainTex, color); 65 | using (new EditorGUI.IndentLevelScope()) 66 | { 67 | materialEditor.TextureScaleOffsetProperty(mainTex); 68 | EditorGUILayout.Space(); 69 | } 70 | 71 | EditorGUILayout.Space(); 72 | 73 | 74 | /* *** Animation *** */ 75 | materialEditor.TexturePropertySingleLine(new GUIContent("Animation Texture"), animTex); 76 | 77 | EditorGUI.indentLevel++; 78 | 79 | materialEditor.ShaderProperty(startFrame, startFrame.displayName); 80 | materialEditor.ShaderProperty(frameCount, frameCount.displayName); 81 | materialEditor.ShaderProperty(offsetSeconds, offsetSeconds.displayName); 82 | materialEditor.ShaderProperty(pixelsPerFrame, pixelsPerFrame.displayName); 83 | 84 | EditorGUI.indentLevel--; 85 | 86 | EditorGUILayout.Space(); 87 | 88 | /* *** Repeat *** */ 89 | materialEditor.ShaderProperty(isRootMotion, isRootMotion.displayName); 90 | 91 | EditorGUI.indentLevel++; 92 | if (isRootMotion.floatValue == 1f) { 93 | materialEditor.TexturePropertySingleLine(new GUIContent("Repeat Texture"), repeatTex); 94 | materialEditor.ShaderProperty(repeatStartFrame, repeatStartFrame.displayName); 95 | materialEditor.ShaderProperty(repeatMax, repeatMax.displayName); 96 | materialEditor.ShaderProperty(repeatNum, repeatNum.displayName); 97 | } 98 | EditorGUI.indentLevel--; 99 | 100 | EditorGUILayout.Space(); 101 | 102 | 103 | /* *** Lighting *** */ 104 | 105 | materialEditor.ShaderProperty(isLighting, isLighting.displayName); 106 | EditorGUI.indentLevel++; 107 | if (isLighting.floatValue == 1f) 108 | { 109 | materialEditor.TexturePropertySingleLine(new GUIContent("Normal Map"), bumpMap); 110 | using (new EditorGUI.IndentLevelScope()) 111 | { 112 | materialEditor.TextureScaleOffsetProperty(bumpMap); 113 | EditorGUILayout.Space(); 114 | } 115 | 116 | } 117 | EditorGUI.indentLevel--; 118 | EditorGUILayout.Space(); 119 | 120 | /* *** GPU Instancing *** */ 121 | materialEditor.ShaderProperty(instancing, "Enable GPU Instancing"); 122 | if (instancing.floatValue == 1f) material.enableInstancing = true; 123 | else material.enableInstancing = false; 124 | 125 | 126 | 127 | 128 | } 129 | } 130 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Editor/AGI_ShaderInspector.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c64d73dc737dde54bad3f7e949ccf826 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Editor/AnimationMeshGenerator.cs: -------------------------------------------------------------------------------- 1 | #if UNITY_EDITOR 2 | using UnityEngine; 3 | using UnityEditor; 4 | using UnityEditorInternal; 5 | using UnityEngine.Rendering; 6 | using System; 7 | using System.Linq; 8 | using System.IO; 9 | using System.Collections.Generic; 10 | using UdonSharp; 11 | using VRC.SDKBase; 12 | using VRC.Udon; 13 | using VRC.Udon.Common; 14 | using VRC.Udon.Common.Interfaces; 15 | 16 | public class AnimationMeshGenerator : EditorWindow 17 | { 18 | // Const Parameters 19 | private const int BoneMatrixRowCount = 3; 20 | private const int TargetFrameRate = 30; 21 | 22 | 23 | 24 | 25 | // Components 26 | private GameObject targetObject; 27 | private SkinnedMeshRenderer[] skinnedMeshRenderers; 28 | private Animator animator; 29 | private AnimationClip[] clips; 30 | private Shader animShader; 31 | private GameObject goUdon; 32 | private UdonBehaviour udonBehaviour; 33 | private float boundsScale = 1.0f; 34 | private int MaxRepeat = 20; 35 | private string saveName = "AnimatedMesh"; 36 | private string savePath; 37 | 38 | private int shaderIdx; 39 | 40 | // Scroll 41 | private Vector2 _scrollPosition = Vector2.zero; 42 | 43 | [MenuItem("Window/Extension Tools/Animation Mesh Generator")] 44 | static void Open() 45 | { 46 | GetWindow(); 47 | } 48 | 49 | private void OnGUI() 50 | { 51 | GUILayout.Label("", EditorStyles.boldLabel); 52 | 53 | /* *** Get Components **** */ 54 | Color defaultColor = GUI.backgroundColor; 55 | using (new GUILayout.VerticalScope(EditorStyles.helpBox)) 56 | { 57 | GUI.backgroundColor = Color.gray; 58 | using (new GUILayout.HorizontalScope(EditorStyles.toolbar)) 59 | { 60 | GUILayout.Label("Prefab (Project)", EditorStyles.whiteLabel); 61 | 62 | } 63 | GUI.backgroundColor = defaultColor; 64 | 65 | EditorGUI.indentLevel++; 66 | targetObject = EditorGUILayout.ObjectField(targetObject, typeof(GameObject), true) as GameObject; 67 | 68 | 69 | if (targetObject == null) return; 70 | 71 | 72 | string udonName = "AnimationFrameInfoList"; 73 | var transUdon = targetObject.transform.Find(udonName); 74 | if (transUdon == null) 75 | { 76 | EditorGUILayout.HelpBox($"Game Object (Udon) Not Found: {udonName}", MessageType.Error); 77 | return; 78 | } 79 | goUdon = transUdon.gameObject; 80 | 81 | udonBehaviour = goUdon.GetComponent(); 82 | if (udonBehaviour == null) 83 | { 84 | EditorGUILayout.HelpBox($"Udon Behaviour Not Found: ", MessageType.Error); 85 | return; 86 | } 87 | 88 | EditorGUI.indentLevel--; 89 | } 90 | 91 | /* *** Scroll Start *** */ 92 | _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition); 93 | 94 | GUILayout.Label("", EditorStyles.boldLabel); 95 | /* *** *** *** */ 96 | 97 | /* *** Skinned Mesh Renderer **** */ 98 | defaultColor = GUI.backgroundColor; 99 | using (new GUILayout.VerticalScope(EditorStyles.helpBox)) 100 | { 101 | GUI.backgroundColor = Color.gray; 102 | using (new GUILayout.HorizontalScope(EditorStyles.toolbar)) 103 | { 104 | GUILayout.Label("Skinned Mesh Renderer", EditorStyles.whiteLabel); 105 | 106 | } 107 | 108 | EditorGUI.indentLevel++; 109 | 110 | 111 | skinnedMeshRenderers = targetObject.GetComponentsInChildren(); 112 | if (skinnedMeshRenderers == null) 113 | { 114 | EditorGUILayout.HelpBox("Skinned Mesh Renderer Not Found", MessageType.Error); 115 | return; 116 | } 117 | 118 | // Show Components 119 | for (int i = 0; i < skinnedMeshRenderers.Length; i++) 120 | { 121 | EditorGUILayout.LabelField($"{skinnedMeshRenderers[i].name}"); 122 | } 123 | GUI.backgroundColor = defaultColor; 124 | 125 | 126 | EditorGUI.indentLevel--; 127 | } 128 | 129 | GUILayout.Label("", EditorStyles.boldLabel); 130 | /* *** *** *** */ 131 | 132 | /* *** Animations **** */ 133 | defaultColor = GUI.backgroundColor; 134 | using (new GUILayout.VerticalScope(EditorStyles.helpBox)) 135 | { 136 | GUI.backgroundColor = Color.gray; 137 | using (new GUILayout.HorizontalScope(EditorStyles.toolbar)) 138 | { 139 | GUILayout.Label("Animation Clips", EditorStyles.whiteLabel); 140 | 141 | } 142 | 143 | EditorGUI.indentLevel++; 144 | 145 | Animator[] animators = targetObject.GetComponentsInChildren(); 146 | if (!animators.Any() || animators.Count() != 1) 147 | { 148 | EditorGUILayout.HelpBox("Only Support 1 Animator", MessageType.Error); 149 | return; 150 | } 151 | Debug.Log(animators.First()); 152 | animator = animators.First(); 153 | 154 | if (animator.runtimeAnimatorController == null) 155 | { 156 | EditorGUILayout.HelpBox("Runtime Animator Contoroller Not Found", MessageType.Error); 157 | return; 158 | 159 | } 160 | 161 | clips = animator.runtimeAnimatorController.animationClips; 162 | if (!clips.Any()) 163 | { 164 | EditorGUILayout.HelpBox("Animation Clips Not Found", MessageType.Warning); 165 | return; 166 | } 167 | 168 | // Show Components 169 | for (int i = 0; i < clips.Length; i++) 170 | { 171 | EditorGUILayout.LabelField($"{clips[i].name}"); 172 | } 173 | GUI.backgroundColor = defaultColor; 174 | 175 | 176 | EditorGUI.indentLevel--; 177 | } 178 | 179 | GUILayout.Label("", EditorStyles.boldLabel); 180 | /* *** *** *** */ 181 | 182 | /* *** Shader **** */ 183 | defaultColor = GUI.backgroundColor; 184 | using (new GUILayout.VerticalScope(EditorStyles.helpBox)) 185 | { 186 | GUI.backgroundColor = Color.gray; 187 | 188 | 189 | using (new GUILayout.HorizontalScope(EditorStyles.toolbar)) 190 | { 191 | GUILayout.Label("Shader", EditorStyles.whiteLabel); 192 | 193 | } 194 | 195 | EditorGUI.indentLevel++; 196 | 197 | ShaderInfo[] shaders = ShaderUtil.GetAllShaderInfo(); 198 | string[] shaderNames = shaders.Select(path => path.name).Where(name => name.Contains("AnimationGpuInstancing")).ToArray(); 199 | if (!shaderNames.Any()) return; 200 | 201 | shaderIdx = EditorGUILayout.Popup(shaderIdx, shaderNames); 202 | 203 | animShader = Shader.Find(shaderNames[shaderIdx]); 204 | if (animShader == null) 205 | { 206 | EditorGUILayout.HelpBox($"Shader Not Found ", MessageType.Error); 207 | return; 208 | } 209 | 210 | 211 | 212 | GUI.backgroundColor = defaultColor; 213 | 214 | 215 | 216 | EditorGUI.indentLevel--; 217 | } 218 | 219 | GUILayout.Label("", EditorStyles.boldLabel); 220 | /* *** *** *** */ 221 | 222 | /* *** Other **** */ 223 | defaultColor = GUI.backgroundColor; 224 | using (new GUILayout.VerticalScope(EditorStyles.helpBox)) 225 | { 226 | GUI.backgroundColor = Color.gray; 227 | 228 | 229 | using (new GUILayout.HorizontalScope(EditorStyles.toolbar)) 230 | { 231 | GUILayout.Label("Other Settings", EditorStyles.whiteLabel); 232 | 233 | } 234 | 235 | EditorGUI.indentLevel++; 236 | 237 | boundsScale = EditorGUILayout.FloatField("Bounds Scale", boundsScale); 238 | 239 | if (boundsScale < 1f) 240 | { 241 | EditorGUILayout.HelpBox($"Not Support Value, Bounds Scale: {boundsScale} ", MessageType.Error); 242 | return; 243 | 244 | } 245 | 246 | MaxRepeat = EditorGUILayout.IntField("Max Repeat Num", MaxRepeat); 247 | if (MaxRepeat < 1) 248 | { 249 | EditorGUILayout.HelpBox($"Not Support Value, Max Repeat: {MaxRepeat} ", MessageType.Error); 250 | return; 251 | } 252 | 253 | GUI.backgroundColor = defaultColor; 254 | 255 | 256 | 257 | EditorGUI.indentLevel--; 258 | } 259 | 260 | GUILayout.Label("", EditorStyles.boldLabel); 261 | /* *** *** *** */ 262 | 263 | 264 | 265 | /* *** Path **** */ 266 | defaultColor = GUI.backgroundColor; 267 | using (new GUILayout.VerticalScope(EditorStyles.helpBox)) 268 | { 269 | GUI.backgroundColor = Color.gray; 270 | using (new GUILayout.HorizontalScope(EditorStyles.toolbar)) 271 | { 272 | GUILayout.Label("Save Path", EditorStyles.whiteLabel); 273 | 274 | } 275 | 276 | EditorGUI.indentLevel++; 277 | 278 | //PrefabUtility.GetPrefabParent(gameObject); 279 | 280 | var selectionPath = Path.GetDirectoryName(AssetDatabase.GetAssetPath(PrefabUtility.GetCorrespondingObjectFromOriginalSource(targetObject))); 281 | if (selectionPath == null || selectionPath == "") 282 | { 283 | EditorGUILayout.HelpBox($"Select 1 Prefab in Project ", MessageType.Error); 284 | return; 285 | } 286 | 287 | EditorGUILayout.LabelField("Prefab Path", selectionPath); 288 | 289 | 290 | saveName = EditorGUILayout.TextField("Save Name", saveName); 291 | savePath = $"{selectionPath}/{saveName}"; 292 | 293 | 294 | EditorGUI.indentLevel--; 295 | } 296 | 297 | GUILayout.Label("", EditorStyles.boldLabel); 298 | 299 | /* *** *** *** */ 300 | 301 | 302 | 303 | /* *** Button **** */ 304 | using (new GUILayout.HorizontalScope(GUI.skin.box)) 305 | { 306 | GUI.backgroundColor = Color.green; 307 | if (GUILayout.Button("Convert")) 308 | { 309 | Convert(); 310 | } 311 | GUI.backgroundColor = defaultColor; 312 | } 313 | /* *** *** *** */ 314 | 315 | /* *** Scroll End *** */ 316 | EditorGUILayout.EndScrollView(); 317 | } 318 | 319 | void Convert() 320 | { 321 | // Prefab Init 322 | GameObject animObject = new GameObject(); 323 | Vector4[] animationInfo = new Vector4[clips.Length]; 324 | 325 | // Create Path : Main, Tex, Mat, Mesh 326 | Directory.CreateDirectory(savePath); 327 | 328 | string savePathTex = $"{savePath}/Textures"; 329 | Directory.CreateDirectory(savePathTex); 330 | 331 | string savePathMat = $"{savePath}/Materials"; 332 | Directory.CreateDirectory(savePathMat); 333 | 334 | string savePathMesh = $"{savePath}/Meshs"; 335 | Directory.CreateDirectory(savePathMesh); 336 | 337 | 338 | foreach (SkinnedMeshRenderer skinnedMeshRenderer in skinnedMeshRenderers) 339 | { 340 | 341 | int pixelsPerFrame = BoneMatrixRowCount * skinnedMeshRenderer.bones.Length; 342 | 343 | // Mesh Renderer 344 | Mesh animMesh = SkinnedMesh2BoneWeightedMesh(skinnedMeshRenderer); 345 | 346 | // Animation Texture 347 | Texture animTexture = GenerateAnimationTexture(targetObject, clips.ToList(), skinnedMeshRenderer, pixelsPerFrame, ref animationInfo); 348 | Texture animRepeatTexture = GenerateAnimationRepeatTexture(targetObject, clips.ToList(), skinnedMeshRenderer, pixelsPerFrame, ref animationInfo, ref animMesh, boundsScale, MaxRepeat); 349 | 350 | 351 | // Material 352 | Material[] animMaterials = GenerateMaterials(targetObject, skinnedMeshRenderer, animTexture, animRepeatTexture, animShader, clips.ToList(), pixelsPerFrame, MaxRepeat); 353 | 354 | // Save Each Asset 355 | AssetDatabase.CreateAsset(animMesh, string.Format($"{savePathMesh}/AnimMesh_{skinnedMeshRenderer.name}.asset")); 356 | AssetDatabase.CreateAsset(animTexture, string.Format($"{savePathTex}/AnimTex_{skinnedMeshRenderer.name}.asset")); 357 | AssetDatabase.CreateAsset(animRepeatTexture, string.Format($"{savePathTex}/AnimRepeatTex_{skinnedMeshRenderer.name}.asset")); 358 | 359 | foreach(var material in animMaterials) 360 | { 361 | AssetDatabase.CreateAsset(material, string.Format($"{savePathMat}/AnimMat_{skinnedMeshRenderer.name}_{material.name}.asset")); 362 | } 363 | 364 | // Udon Variable 365 | IUdonVariableTable publicVariables = udonBehaviour.publicVariables; 366 | SetUdonVariable(publicVariables, "FrameInfo", animationInfo, typeof(AnimationFrameInfoList)); 367 | 368 | // Save to GameObject 369 | GenerateAnimObject(ref animObject, targetObject, animMesh, animMaterials); 370 | } 371 | 372 | // Add Udon Behaviour 373 | AddUdonBehaviour(ref animObject, goUdon); 374 | 375 | // Save to Prefab 376 | PrefabUtility.SaveAsPrefabAsset(animObject, $"{savePath}/{targetObject.name}_Anim.prefab"); 377 | UnityEngine.Object.DestroyImmediate(animObject); 378 | 379 | AssetDatabase.SaveAssets(); 380 | } 381 | 382 | private static Mesh SkinnedMesh2BoneWeightedMesh(SkinnedMeshRenderer smr) 383 | { 384 | 385 | var mesh = UnityEngine.Object.Instantiate(smr.sharedMesh); 386 | 387 | BoneWeight[] boneInfo = smr.sharedMesh.boneWeights; 388 | List boneIndexes = boneInfo.Select(x => new Vector4(x.boneIndex0, x.boneIndex1, x.boneIndex2, x.boneIndex3)).ToList(); 389 | List boneWeights = boneInfo.Select(x => new Vector4(x.weight0, x.weight1, x.weight2, x.weight3)).ToList(); 390 | 391 | mesh.SetUVs(2, boneIndexes); 392 | mesh.SetUVs(3, boneWeights); 393 | 394 | return mesh; 395 | 396 | } 397 | 398 | private static Texture GenerateAnimationTexture(GameObject go, List clips, SkinnedMeshRenderer smr, int pixelsPerFrame, ref Vector4[] animationInfo) 399 | { 400 | Vector2 texBoundary = CalculateTextureBoundary(clips, smr.bones.Count()); 401 | 402 | Texture2D texture = new Texture2D((int)texBoundary.x, (int)texBoundary.y, TextureFormat.RGBAHalf, false, true); 403 | Color[] pixels = texture.GetPixels(); 404 | int pixelIndex = 0; 405 | int currentClipFrame = 0; 406 | 407 | 408 | // Default Pose 409 | foreach (Matrix4x4 boneMatrix in smr.bones.Select((b, idx) => b.localToWorldMatrix * smr.sharedMesh.bindposes[idx])) 410 | { 411 | pixels[pixelIndex++] = new Color(boneMatrix.m00, boneMatrix.m01, boneMatrix.m02, boneMatrix.m03); 412 | pixels[pixelIndex++] = new Color(boneMatrix.m10, boneMatrix.m11, boneMatrix.m12, boneMatrix.m13); 413 | pixels[pixelIndex++] = new Color(boneMatrix.m20, boneMatrix.m21, boneMatrix.m22, boneMatrix.m23); 414 | } 415 | 416 | 417 | // Save Animation 418 | for (int i = 0; i < clips.Count; i++) 419 | { 420 | AnimationClip clip = clips[i]; 421 | 422 | int totalFrame = (int)(clip.length * TargetFrameRate); 423 | foreach (int frame in Enumerable.Range(0, totalFrame)) 424 | { 425 | clip.SampleAnimation(go, (float)frame / TargetFrameRate); // sampling 426 | 427 | foreach (Matrix4x4 boneMatrix in smr.bones.Select((b, idx) => b.localToWorldMatrix * smr.sharedMesh.bindposes[idx])) 428 | { 429 | 430 | pixels[pixelIndex++] = new Color(boneMatrix.m00, boneMatrix.m01, boneMatrix.m02, boneMatrix.m03); 431 | pixels[pixelIndex++] = new Color(boneMatrix.m10, boneMatrix.m11, boneMatrix.m12, boneMatrix.m13); 432 | pixels[pixelIndex++] = new Color(boneMatrix.m20, boneMatrix.m21, boneMatrix.m22, boneMatrix.m23); 433 | 434 | 435 | } 436 | 437 | } 438 | 439 | int frameCount = totalFrame; 440 | int startFrame = currentClipFrame + 1; 441 | int endFrame = startFrame + frameCount - 1; 442 | animationInfo[i].x = startFrame; 443 | animationInfo[i].y = frameCount; 444 | currentClipFrame = endFrame; 445 | 446 | } 447 | 448 | texture.SetPixels(pixels); 449 | texture.Apply(); 450 | texture.filterMode = FilterMode.Point; 451 | return texture; 452 | } 453 | 454 | private static Texture GenerateAnimationRepeatTexture(GameObject go, List clips, SkinnedMeshRenderer smr, int pixelsPerFrame, ref Vector4[] animationInfo, ref Mesh mesh, float boundsScale, int MaxRepeat) 455 | { 456 | Vector2 texBoundary = CalculateRepeatTextureBoundary(clips, MaxRepeat); 457 | 458 | Texture2D texture = new Texture2D((int)texBoundary.x, (int)texBoundary.y, TextureFormat.RGBAHalf, false, true); 459 | Color[] pixels = texture.GetPixels(); 460 | int pixelIndex = 0; 461 | int currentClipFrame = 0; 462 | 463 | Bounds bounds = mesh.bounds; 464 | Vector3 rootRelMin = bounds.min; 465 | Vector3 rootRelMax = bounds.max; 466 | 467 | // Get Initial Root 468 | Vector3 rootPosInitial = ToVector3(smr.bones[0].localToWorldMatrix.GetColumn(3)); 469 | 470 | // save root matrix 471 | Matrix4x4 boneMatrixRoot = Matrix4x4.TRS(new Vector3(0.0f, 0.0f, 0.0f), Quaternion.identity, smr.bones[0].localToWorldMatrix.lossyScale); 472 | boneMatrixRoot = Matrix4x4.identity; 473 | pixels[pixelIndex++] = new Color(boneMatrixRoot.m00, boneMatrixRoot.m01, boneMatrixRoot.m02, boneMatrixRoot.m03); 474 | pixels[pixelIndex++] = new Color(boneMatrixRoot.m10, boneMatrixRoot.m11, boneMatrixRoot.m12, boneMatrixRoot.m13); 475 | pixels[pixelIndex++] = new Color(boneMatrixRoot.m20, boneMatrixRoot.m21, boneMatrixRoot.m22, boneMatrixRoot.m23); 476 | 477 | 478 | // Save Animation 479 | for (int i = 0; i < clips.Count; i++) 480 | { 481 | AnimationClip clip = clips[i]; 482 | 483 | int totalFrame = (int)(clip.length * TargetFrameRate); 484 | 485 | // get final root TRS 486 | boneMatrixRoot = Matrix4x4.identity; 487 | clip.SampleAnimation(go, (float)totalFrame / TargetFrameRate); // sampling 488 | var boneMatrixRootFinal = smr.bones[0].localToWorldMatrix; 489 | var pos = ToVector3(boneMatrixRootFinal.GetColumn(3)); 490 | pos.y = 0.0f; 491 | var rot = boneMatrixRootFinal.rotation; 492 | var eul_yaw = rot.eulerAngles.y; 493 | var rot_yaw = Quaternion.Euler(0.0f, eul_yaw, 0.0f); 494 | boneMatrixRootFinal = Matrix4x4.TRS(pos, Quaternion.identity, new Vector3(1.0f, 1.0f, 1.0f)); 495 | 496 | // save each root TRS 497 | for (int loop = 0; loop < MaxRepeat; loop++) 498 | { 499 | 500 | boneMatrixRoot = boneMatrixRootFinal * boneMatrixRoot; 501 | 502 | pixels[pixelIndex++] = new Color(boneMatrixRoot.m00, boneMatrixRoot.m01, boneMatrixRoot.m02, boneMatrixRoot.m03); 503 | pixels[pixelIndex++] = new Color(boneMatrixRoot.m10, boneMatrixRoot.m11, boneMatrixRoot.m12, boneMatrixRoot.m13); 504 | pixels[pixelIndex++] = new Color(boneMatrixRoot.m20, boneMatrixRoot.m21, boneMatrixRoot.m22, boneMatrixRoot.m23); 505 | 506 | // Get Min Max Bounds 507 | Vector3 rootPosFinal = ToVector3(boneMatrixRoot.GetColumn(3)) - rootPosInitial; 508 | rootRelMax = Vector3.Max(rootRelMax, rootPosFinal); 509 | rootRelMin = Vector3.Min(rootRelMin, rootPosFinal); 510 | } 511 | 512 | int frameCount = MaxRepeat; 513 | int startFrame = currentClipFrame + 1; 514 | int endFrame = startFrame + frameCount - 1; 515 | animationInfo[i].z = startFrame; 516 | animationInfo[i].w = frameCount; 517 | currentClipFrame = endFrame; 518 | 519 | } 520 | 521 | 522 | // Set new Bounds 523 | bounds.SetMinMax(rootRelMin * boundsScale, rootRelMax * boundsScale); 524 | mesh.bounds = bounds; 525 | 526 | texture.SetPixels(pixels); 527 | texture.Apply(); 528 | texture.filterMode = FilterMode.Point; 529 | 530 | return texture; 531 | } 532 | 533 | private static Vector2 CalculateTextureBoundary(List clips, int boneLength) 534 | { 535 | int boneMatrixCount = BoneMatrixRowCount * boneLength; 536 | 537 | int totalPixels = clips.Aggregate(boneMatrixCount, (pixels, currentClip) => pixels + boneMatrixCount * (int)(currentClip.length * TargetFrameRate)); 538 | 539 | int texWidth = 1; 540 | int texHeight = 1; 541 | 542 | while (texWidth * texHeight < totalPixels) 543 | { 544 | if (texWidth <= texHeight) texWidth *= 2; 545 | else texHeight *= 2; 546 | } 547 | 548 | return new Vector2(texWidth, texHeight); 549 | 550 | } 551 | 552 | private static Vector2 CalculateRepeatTextureBoundary(List clips, int MaxRepeat) 553 | { 554 | int totalPiexes = 1 + clips.Count() * BoneMatrixRowCount * MaxRepeat; 555 | int texWidth = 1; 556 | int texHeight = 1; 557 | 558 | while (texWidth * texHeight < totalPiexes) 559 | { 560 | if (texWidth <= texHeight) texWidth *= 2; 561 | else texHeight *= 2; 562 | } 563 | 564 | return new Vector2(texWidth, texHeight); 565 | 566 | } 567 | 568 | private static Material[] GenerateMaterials(GameObject go, SkinnedMeshRenderer smr, Texture tex, Texture texRepeat, Shader shader, List clips, int pixelsPerFrame, int MaxRepeat) 569 | { 570 | Material[] materials = new Material[smr.sharedMaterials.Length]; 571 | 572 | for (int i=0; i(); 595 | mf.mesh = mesh; 596 | 597 | MeshRenderer mr = animObject.AddComponent(); 598 | mr.sharedMaterials = materials; 599 | mr.motionVectorGenerationMode = MotionVectorGenerationMode.ForceNoMotion; 600 | mr.reflectionProbeUsage = ReflectionProbeUsage.Off; 601 | mr.lightProbeUsage = LightProbeUsage.Off; 602 | 603 | animObject.transform.SetParent(parentObject.transform); 604 | } 605 | 606 | private static void AddUdonBehaviour(ref GameObject animObject, GameObject goUdon) 607 | { 608 | 609 | Component[] components = goUdon.GetComponents(); 610 | foreach (Component component in components) 611 | { 612 | 613 | if (component is UdonBehaviour) 614 | { 615 | UnityEditorInternal.ComponentUtility.CopyComponent(component); 616 | UnityEditorInternal.ComponentUtility.PasteComponentAsNew(animObject); 617 | } 618 | 619 | } 620 | 621 | } 622 | 623 | public static Vector3 ToVector3(Vector4 parent) 624 | { 625 | return new Vector3(parent.x, parent.y, parent.z); 626 | } 627 | 628 | private static void SetUdonVariable(IUdonVariableTable publicVariables, string name, object value, Type declaredType) 629 | { 630 | if (!publicVariables.TrySetVariableValue(name, value)) 631 | { 632 | Debug.Log("Failed Set Variable: " + name); 633 | if (!publicVariables.TryAddVariable(CreateUdonVariable(name, value, declaredType))) 634 | { 635 | Debug.LogError("Faleid to set public variable"); 636 | } 637 | 638 | return; 639 | } 640 | } 641 | 642 | private static IUdonVariable CreateUdonVariable(string symbolName, object value, Type declaredType) 643 | { 644 | Type udonVariableType = typeof(UdonVariable<>).MakeGenericType(declaredType); 645 | return (IUdonVariable)Activator.CreateInstance(udonVariableType, symbolName, value); 646 | 647 | } 648 | } 649 | 650 | #endif -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Editor/AnimationMeshGenerator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8e5a06b160c471143a8ebdac58eb057c 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Prefabs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 25759d7653f5bfb49859abc811f6498f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Prefabs/AGI_RandomSpawn_Walk.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &2130677227565368798 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | serializedVersion: 6 10 | m_Component: 11 | - component: {fileID: 6974199851405968931} 12 | - component: {fileID: 5755317676239908990} 13 | m_Layer: 0 14 | m_Name: AGI_RandomSpawn_Walk 15 | m_TagString: Untagged 16 | m_Icon: {fileID: 0} 17 | m_NavMeshLayer: 0 18 | m_StaticEditorFlags: 0 19 | m_IsActive: 1 20 | --- !u!4 &6974199851405968931 21 | Transform: 22 | m_ObjectHideFlags: 0 23 | m_CorrespondingSourceObject: {fileID: 0} 24 | m_PrefabInstance: {fileID: 0} 25 | m_PrefabAsset: {fileID: 0} 26 | m_GameObject: {fileID: 2130677227565368798} 27 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 28 | m_LocalPosition: {x: -39.923508, y: -24.832294, z: 3.4156227} 29 | m_LocalScale: {x: 1, y: 1, z: 1} 30 | m_Children: [] 31 | m_Father: {fileID: 0} 32 | m_RootOrder: 0 33 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 34 | --- !u!114 &5755317676239908990 35 | MonoBehaviour: 36 | m_ObjectHideFlags: 0 37 | m_CorrespondingSourceObject: {fileID: 0} 38 | m_PrefabInstance: {fileID: 0} 39 | m_PrefabAsset: {fileID: 0} 40 | m_GameObject: {fileID: 2130677227565368798} 41 | m_Enabled: 1 42 | m_EditorHideFlags: 0 43 | m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} 44 | m_Name: 45 | m_EditorClassIdentifier: 46 | interactTextPlacement: {fileID: 0} 47 | interactText: Use 48 | interactTextGO: {fileID: 0} 49 | proximity: 2 50 | SynchronizePosition: 0 51 | AllowCollisionOwnershipTransfer: 0 52 | Reliable: 0 53 | serializedProgramAsset: {fileID: 0} 54 | programSource: {fileID: 11400000, guid: da24dff313899fb429dfca8fffe6828c, type: 2} 55 | serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABggAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQgAAABTAHAAYQB3AG4ATgB1AG0AJwEEAAAAdAB5AHAAZQABFgAAAFMAeQBzAHQAZQBtAC4ASQBuAHQAMwAyACwAIABtAHMAYwBvAHIAbABpAGIAFwEFAAAAVgBhAGwAdQBlAAoAAAAHBQIvAwAAAAFKAAAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQBgADEAWwBbAFMAeQBzAHQAZQBtAC4AUwBpAG4AZwBsAGUALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAMAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQcAAABSAGEAbgBkAG8AbQBYACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAaQBuAGcAbABlACwAIABtAHMAYwBvAHIAbABpAGIAHwEFAAAAVgBhAGwAdQBlAAAAoEAHBQIwAwAAAAQAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQcAAABSAGEAbgBkAG8AbQBZACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAaQBuAGcAbABlACwAIABtAHMAYwBvAHIAbABpAGIAHwEFAAAAVgBhAGwAdQBlAAAAAAAHBQIwAwAAAAUAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQcAAABSAGEAbgBkAG8AbQBaACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAaQBuAGcAbABlACwAIABtAHMAYwBvAHIAbABpAGIAHwEFAAAAVgBhAGwAdQBlAAAAoEAHBQIwAwAAAAYAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQ4AAABSAGEAbgBkAG8AbQBSAG8AdABhAHQAaQBvAG4AJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwBpAG4AZwBsAGUALAAgAG0AcwBjAG8AcgBsAGkAYgAfAQUAAABWAGEAbAB1AGUAAAAAAAcFAi8EAAAAAV4AAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4AVgBlAGMAdABvAHIAMgAsACAAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4AQwBvAHIAZQBNAG8AZAB1AGwAZQBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAcAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQsAAABSAGEAbgBkAG8AbQBTAGMAYQBsAGUAJwEEAAAAdAB5AHAAZQABKwAAAFUAbgBpAHQAeQBFAG4AZwBpAG4AZQAuAFYAZQBjAHQAbwByADIALAAgAFUAbgBpAHQAeQBFAG4AZwBpAG4AZQAuAEMAbwByAGUATQBvAGQAdQBsAGUAAwEFAAAAVgBhAGwAdQBlAC8FAAAAASsAAABVAG4AaQB0AHkARQBuAGcAaQBuAGUALgBWAGUAYwB0AG8AcgAyACwAIABVAG4AaQB0AHkARQBuAGcAaQBuAGUALgBDAG8AcgBlAE0AbwBkAHUAbABlACDNzEw/IJqZmT8FBwUCLwYAAAABSwAAAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAC4AVQBkAG8AbgBWAGEAcgBpAGEAYgBsAGUAYAAxAFsAWwBTAHkAcwB0AGUAbQAuAEIAbwBvAGwAZQBhAG4ALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAgAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQ8AAABBAHAAcABsAHkAUgBvAG8AdABNAG8AdABpAG8AbgAnAQQAAAB0AHkAcABlAAEYAAAAUwB5AHMAdABlAG0ALgBCAG8AbwBsAGUAYQBuACwAIABtAHMAYwBvAHIAbABpAGIAKwEFAAAAVgBhAGwAdQBlAAEHBQIwAgAAAAkAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQkAAABSAGUAcABlAGEAdABOAHUAbQAnAQQAAAB0AHkAcABlAAEWAAAAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgAXAQUAAABWAGEAbAB1AGUACgAAAAcFBwUHBQ== 56 | publicVariablesUnityEngineObjects: [] 57 | publicVariablesSerializationDataFormat: 0 58 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Prefabs/AGI_RandomSpawn_Walk.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fdd1a676b7ab2fd45bc32550f9108731 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Prefabs/AGI_SpawnPoints.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &6115155581024814164 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | serializedVersion: 6 10 | m_Component: 11 | - component: {fileID: 6115155581024814163} 12 | - component: {fileID: 5093100764186799690} 13 | m_Layer: 0 14 | m_Name: AGI_SpawnPoints 15 | m_TagString: Untagged 16 | m_Icon: {fileID: 0} 17 | m_NavMeshLayer: 0 18 | m_StaticEditorFlags: 0 19 | m_IsActive: 1 20 | --- !u!4 &6115155581024814163 21 | Transform: 22 | m_ObjectHideFlags: 0 23 | m_CorrespondingSourceObject: {fileID: 0} 24 | m_PrefabInstance: {fileID: 0} 25 | m_PrefabAsset: {fileID: 0} 26 | m_GameObject: {fileID: 6115155581024814164} 27 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 28 | m_LocalPosition: {x: 0, y: 0, z: 0} 29 | m_LocalScale: {x: 1, y: 1, z: 1} 30 | m_Children: [] 31 | m_Father: {fileID: 0} 32 | m_RootOrder: 0 33 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 34 | --- !u!114 &5093100764186799690 35 | MonoBehaviour: 36 | m_ObjectHideFlags: 0 37 | m_CorrespondingSourceObject: {fileID: 0} 38 | m_PrefabInstance: {fileID: 0} 39 | m_PrefabAsset: {fileID: 0} 40 | m_GameObject: {fileID: 6115155581024814164} 41 | m_Enabled: 1 42 | m_EditorHideFlags: 0 43 | m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} 44 | m_Name: 45 | m_EditorClassIdentifier: 46 | interactTextPlacement: {fileID: 0} 47 | interactText: Use 48 | interactTextGO: {fileID: 0} 49 | proximity: 2 50 | SynchronizePosition: 0 51 | AllowCollisionOwnershipTransfer: 0 52 | Reliable: 0 53 | serializedProgramAsset: {fileID: 0} 54 | programSource: {fileID: 11400000, guid: bea413e411965e74f80682e23cb4d55f, type: 2} 55 | serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgMAAAAAAAAAAi8CAAAAAWMAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4ARwBhAG0AZQBPAGIAagBlAGMAdABbAF0ALAAgAFUAbgBpAHQAeQBFAG4AZwBpAG4AZQAuAEMAbwByAGUATQBvAGQAdQBsAGUAXQBdACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgACAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAELAAAAcwBwAGEAdwBuAFAAbwBpAG4AdABzACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAE8AYgBqAGUAYwB0ACwAIABtAHMAYwBvAHIAbABpAGIALQEFAAAAVgBhAGwAdQBlAAcFAi8DAAAAAUsAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBCAG8AbwBsAGUAYQBuACwAIABtAHMAYwBvAHIAbABpAGIAXQBdACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgADAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAEPAAAAQQBwAHAAbAB5AFIAbwBvAHQATQBvAHQAaQBvAG4AJwEEAAAAdAB5AHAAZQABGAAAAFMAeQBzAHQAZQBtAC4AQgBvAG8AbABlAGEAbgAsACAAbQBzAGMAbwByAGwAaQBiACsBBQAAAFYAYQBsAHUAZQAABwUCLwQAAAABSQAAAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAC4AVQBkAG8AbgBWAGEAcgBpAGEAYgBsAGUAYAAxAFsAWwBTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiAF0AXQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ABAAAAAYCAAAAAAAAACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAdAByAGkAbgBnACwAIABtAHMAYwBvAHIAbABpAGIAJwEKAAAAUwB5AG0AYgBvAGwATgBhAG0AZQABCQAAAFIAZQBwAGUAYQB0AE4AdQBtACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQAKAAAABwUHBQcF 56 | publicVariablesUnityEngineObjects: [] 57 | publicVariablesSerializationDataFormat: 0 58 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Prefabs/AGI_SpawnPoints.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7e50640a4f11314459efeb57702f952a 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Prefabs/AGI_SpawnRandom.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &6431597046589846396 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | serializedVersion: 6 10 | m_Component: 11 | - component: {fileID: 1295221259822316624} 12 | - component: {fileID: 5535357254237023085} 13 | m_Layer: 0 14 | m_Name: AGI_SpawnRandom 15 | m_TagString: Untagged 16 | m_Icon: {fileID: 0} 17 | m_NavMeshLayer: 0 18 | m_StaticEditorFlags: 0 19 | m_IsActive: 1 20 | --- !u!4 &1295221259822316624 21 | Transform: 22 | m_ObjectHideFlags: 0 23 | m_CorrespondingSourceObject: {fileID: 0} 24 | m_PrefabInstance: {fileID: 0} 25 | m_PrefabAsset: {fileID: 0} 26 | m_GameObject: {fileID: 6431597046589846396} 27 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 28 | m_LocalPosition: {x: 0, y: 0, z: 0} 29 | m_LocalScale: {x: 1, y: 1, z: 1} 30 | m_Children: [] 31 | m_Father: {fileID: 0} 32 | m_RootOrder: 0 33 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 34 | --- !u!114 &5535357254237023085 35 | MonoBehaviour: 36 | m_ObjectHideFlags: 0 37 | m_CorrespondingSourceObject: {fileID: 0} 38 | m_PrefabInstance: {fileID: 0} 39 | m_PrefabAsset: {fileID: 0} 40 | m_GameObject: {fileID: 6431597046589846396} 41 | m_Enabled: 1 42 | m_EditorHideFlags: 0 43 | m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} 44 | m_Name: 45 | m_EditorClassIdentifier: 46 | interactTextPlacement: {fileID: 0} 47 | interactText: Use 48 | interactTextGO: {fileID: 0} 49 | proximity: 2 50 | SynchronizePosition: 0 51 | AllowCollisionOwnershipTransfer: 0 52 | Reliable: 0 53 | serializedProgramAsset: {fileID: 0} 54 | programSource: {fileID: 11400000, guid: da24dff313899fb429dfca8fffe6828c, type: 2} 55 | serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABggAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQgAAABTAHAAYQB3AG4ATgB1AG0AJwEEAAAAdAB5AHAAZQABFgAAAFMAeQBzAHQAZQBtAC4ASQBuAHQAMwAyACwAIABtAHMAYwBvAHIAbABpAGIAFwEFAAAAVgBhAGwAdQBlAAoAAAAHBQIvAwAAAAFKAAAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQBgADEAWwBbAFMAeQBzAHQAZQBtAC4AUwBpAG4AZwBsAGUALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAMAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQcAAABSAGEAbgBkAG8AbQBYACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAaQBuAGcAbABlACwAIABtAHMAYwBvAHIAbABpAGIAHwEFAAAAVgBhAGwAdQBlAAAAoEAHBQIwAwAAAAQAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQcAAABSAGEAbgBkAG8AbQBZACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAaQBuAGcAbABlACwAIABtAHMAYwBvAHIAbABpAGIAHwEFAAAAVgBhAGwAdQBlAAAAAAAHBQIwAwAAAAUAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQcAAABSAGEAbgBkAG8AbQBaACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAaQBuAGcAbABlACwAIABtAHMAYwBvAHIAbABpAGIAHwEFAAAAVgBhAGwAdQBlAAAAoEAHBQIwAwAAAAYAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQ4AAABSAGEAbgBkAG8AbQBSAG8AdABhAHQAaQBvAG4AJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwBpAG4AZwBsAGUALAAgAG0AcwBjAG8AcgBsAGkAYgAfAQUAAABWAGEAbAB1AGUAAAAAAAcFAi8EAAAAAV4AAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4AVgBlAGMAdABvAHIAMgAsACAAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4AQwBvAHIAZQBNAG8AZAB1AGwAZQBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAcAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQsAAABSAGEAbgBkAG8AbQBTAGMAYQBsAGUAJwEEAAAAdAB5AHAAZQABKwAAAFUAbgBpAHQAeQBFAG4AZwBpAG4AZQAuAFYAZQBjAHQAbwByADIALAAgAFUAbgBpAHQAeQBFAG4AZwBpAG4AZQAuAEMAbwByAGUATQBvAGQAdQBsAGUAAwEFAAAAVgBhAGwAdQBlAC8FAAAAASsAAABVAG4AaQB0AHkARQBuAGcAaQBuAGUALgBWAGUAYwB0AG8AcgAyACwAIABVAG4AaQB0AHkARQBuAGcAaQBuAGUALgBDAG8AcgBlAE0AbwBkAHUAbABlACDNzEw/IJqZmT8FBwUCLwYAAAABSwAAAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAC4AVQBkAG8AbgBWAGEAcgBpAGEAYgBsAGUAYAAxAFsAWwBTAHkAcwB0AGUAbQAuAEIAbwBvAGwAZQBhAG4ALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAgAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQ8AAABBAHAAcABsAHkAUgBvAG8AdABNAG8AdABpAG8AbgAnAQQAAAB0AHkAcABlAAEYAAAAUwB5AHMAdABlAG0ALgBCAG8AbwBsAGUAYQBuACwAIABtAHMAYwBvAHIAbABpAGIAKwEFAAAAVgBhAGwAdQBlAAAHBQIwAgAAAAkAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQkAAABSAGUAcABlAGEAdABOAHUAbQAnAQQAAAB0AHkAcABlAAEWAAAAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgAXAQUAAABWAGEAbAB1AGUACgAAAAcFBwUHBQ== 56 | publicVariablesUnityEngineObjects: [] 57 | publicVariablesSerializationDataFormat: 0 58 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Prefabs/AGI_SpawnRandom.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a4ff2a642fadd2840ac7821c09acf7f5 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Prefabs/AnimationFrameInfoList.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &7043215699338399258 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | serializedVersion: 6 10 | m_Component: 11 | - component: {fileID: 5044967281248458912} 12 | - component: {fileID: 6672554320205136626} 13 | m_Layer: 0 14 | m_Name: AnimationFrameInfoList 15 | m_TagString: Untagged 16 | m_Icon: {fileID: 0} 17 | m_NavMeshLayer: 0 18 | m_StaticEditorFlags: 0 19 | m_IsActive: 1 20 | --- !u!4 &5044967281248458912 21 | Transform: 22 | m_ObjectHideFlags: 0 23 | m_CorrespondingSourceObject: {fileID: 0} 24 | m_PrefabInstance: {fileID: 0} 25 | m_PrefabAsset: {fileID: 0} 26 | m_GameObject: {fileID: 7043215699338399258} 27 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 28 | m_LocalPosition: {x: 0, y: 0, z: 0} 29 | m_LocalScale: {x: 1, y: 1, z: 1} 30 | m_Children: [] 31 | m_Father: {fileID: 0} 32 | m_RootOrder: 0 33 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 34 | --- !u!114 &6672554320205136626 35 | MonoBehaviour: 36 | m_ObjectHideFlags: 0 37 | m_CorrespondingSourceObject: {fileID: 0} 38 | m_PrefabInstance: {fileID: 0} 39 | m_PrefabAsset: {fileID: 0} 40 | m_GameObject: {fileID: 7043215699338399258} 41 | m_Enabled: 1 42 | m_EditorHideFlags: 0 43 | m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} 44 | m_Name: 45 | m_EditorClassIdentifier: 46 | interactTextPlacement: {fileID: 0} 47 | interactText: Use 48 | interactTextGO: {fileID: 0} 49 | proximity: 2 50 | SynchronizePosition: 0 51 | AllowCollisionOwnershipTransfer: 0 52 | Reliable: 0 53 | serializedProgramAsset: {fileID: 11400000, guid: ee51d1ce35a995541ad3dc28f72ba780, 54 | type: 2} 55 | programSource: {fileID: 11400000, guid: 5f96beef6d7a1f24d81fafe66bb4848f, type: 2} 56 | serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgIAAAAAAAAAAi8CAAAAAUwAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwBbAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQgAAABBAG4AaQBtAE4AYQBtAGUAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4ATwBiAGoAZQBjAHQALAAgAG0AcwBjAG8AcgBsAGkAYgAtAQUAAABWAGEAbAB1AGUABwUCLwMAAAABYAAAAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAC4AVQBkAG8AbgBWAGEAcgBpAGEAYgBsAGUAYAAxAFsAWwBVAG4AaQB0AHkARQBuAGcAaQBuAGUALgBWAGUAYwB0AG8AcgA0AFsAXQAsACAAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4AQwBvAHIAZQBNAG8AZAB1AGwAZQBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAMAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQkAAABGAHIAYQBtAGUASQBuAGYAbwAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBPAGIAagBlAGMAdAAsACAAbQBzAGMAbwByAGwAaQBiAC0BBQAAAFYAYQBsAHUAZQAHBQcFBwU= 57 | publicVariablesUnityEngineObjects: [] 58 | publicVariablesSerializationDataFormat: 0 59 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Prefabs/AnimationFrameInfoList.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 126056588058e38478dfb0456845a23e 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 80b7830eb49dfc74591dd4f7cf0436b4 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Scripts/AGI_SpawnPoints.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3} 13 | m_Name: AGI_SpawnPoints 14 | m_EditorClassIdentifier: 15 | serializedUdonProgramAsset: {fileID: 11400000, guid: ce0b1b6bba983eb42badcdb7e9e81868, 16 | type: 2} 17 | udonAssembly: 18 | assemblyError: 19 | sourceCsScript: {fileID: 11500000, guid: dfb2874363f9a9843892f15d66187354, type: 3} 20 | behaviourSyncMode: 0 21 | behaviourIDHeapVarName: __refl_const_intnl_udonTypeID 22 | compileErrors: [] 23 | hasInteractEvent: 0 24 | serializationData: 25 | SerializedFormat: 2 26 | SerializedBytes: 27 | ReferencedUnityObjects: 28 | - {fileID: 11500000, guid: 2723b027fc57e4949b85c78328e85855, type: 3} 29 | SerializedBytesString: 30 | Prefab: {fileID: 0} 31 | PrefabModificationsReferencedUnityObjects: [] 32 | PrefabModifications: [] 33 | SerializationNodes: 34 | - Name: fieldDefinitions 35 | Entry: 7 36 | Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition, 37 | UdonSharp.Editor]], mscorlib 38 | - Name: comparer 39 | Entry: 7 40 | Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String, 41 | mscorlib]], mscorlib 42 | - Name: 43 | Entry: 8 44 | Data: 45 | - Name: 46 | Entry: 12 47 | Data: 6 48 | - Name: 49 | Entry: 7 50 | Data: 51 | - Name: $k 52 | Entry: 1 53 | Data: animCharacter 54 | - Name: $v 55 | Entry: 7 56 | Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor 57 | - Name: fieldSymbol 58 | Entry: 7 59 | Data: 3|UdonSharp.Compiler.SymbolDefinition, UdonSharp.Editor 60 | - Name: internalType 61 | Entry: 7 62 | Data: 4|System.RuntimeType, mscorlib 63 | - Name: 64 | Entry: 1 65 | Data: UnityEngine.GameObject, UnityEngine.CoreModule 66 | - Name: 67 | Entry: 8 68 | Data: 69 | - Name: declarationType 70 | Entry: 3 71 | Data: 1 72 | - Name: syncMode 73 | Entry: 3 74 | Data: 0 75 | - Name: symbolResolvedTypeName 76 | Entry: 1 77 | Data: UnityEngineGameObject 78 | - Name: symbolOriginalName 79 | Entry: 1 80 | Data: animCharacter 81 | - Name: symbolUniqueName 82 | Entry: 1 83 | Data: animCharacter 84 | - Name: symbolDefaultValue 85 | Entry: 6 86 | Data: 87 | - Name: 88 | Entry: 8 89 | Data: 90 | - Name: fieldAttributes 91 | Entry: 7 92 | Data: 5|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib 93 | - Name: 94 | Entry: 12 95 | Data: 4 96 | - Name: 97 | Entry: 7 98 | Data: 6|UnityEngine.HeaderAttribute, UnityEngine.CoreModule 99 | - Name: header 100 | Entry: 1 101 | Data: ----------------------------- 102 | - Name: 103 | Entry: 8 104 | Data: 105 | - Name: 106 | Entry: 7 107 | Data: 7|UnityEngine.HeaderAttribute, UnityEngine.CoreModule 108 | - Name: header 109 | Entry: 1 110 | Data: General Parameters 111 | - Name: 112 | Entry: 8 113 | Data: 114 | - Name: 115 | Entry: 7 116 | Data: 8|UnityEngine.HeaderAttribute, UnityEngine.CoreModule 117 | - Name: header 118 | Entry: 1 119 | Data: ----------------------------- 120 | - Name: 121 | Entry: 8 122 | Data: 123 | - Name: 124 | Entry: 7 125 | Data: 9|UnityEngine.SerializeField, UnityEngine.CoreModule 126 | - Name: 127 | Entry: 8 128 | Data: 129 | - Name: 130 | Entry: 13 131 | Data: 132 | - Name: 133 | Entry: 8 134 | Data: 135 | - Name: userBehaviourSource 136 | Entry: 6 137 | Data: 138 | - Name: 139 | Entry: 8 140 | Data: 141 | - Name: 142 | Entry: 8 143 | Data: 144 | - Name: 145 | Entry: 7 146 | Data: 147 | - Name: $k 148 | Entry: 1 149 | Data: animationFrameInfoList 150 | - Name: $v 151 | Entry: 7 152 | Data: 10|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor 153 | - Name: fieldSymbol 154 | Entry: 7 155 | Data: 11|UdonSharp.Compiler.SymbolDefinition, UdonSharp.Editor 156 | - Name: internalType 157 | Entry: 7 158 | Data: 12|System.RuntimeType, mscorlib 159 | - Name: 160 | Entry: 1 161 | Data: AnimationFrameInfoList, Assembly-CSharp 162 | - Name: 163 | Entry: 8 164 | Data: 165 | - Name: declarationType 166 | Entry: 3 167 | Data: 1 168 | - Name: syncMode 169 | Entry: 3 170 | Data: 0 171 | - Name: symbolResolvedTypeName 172 | Entry: 1 173 | Data: VRCUdonUdonBehaviour 174 | - Name: symbolOriginalName 175 | Entry: 1 176 | Data: animationFrameInfoList 177 | - Name: symbolUniqueName 178 | Entry: 1 179 | Data: animationFrameInfoList 180 | - Name: symbolDefaultValue 181 | Entry: 6 182 | Data: 183 | - Name: 184 | Entry: 8 185 | Data: 186 | - Name: fieldAttributes 187 | Entry: 7 188 | Data: 13|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib 189 | - Name: 190 | Entry: 12 191 | Data: 1 192 | - Name: 193 | Entry: 7 194 | Data: 14|UnityEngine.SerializeField, UnityEngine.CoreModule 195 | - Name: 196 | Entry: 8 197 | Data: 198 | - Name: 199 | Entry: 13 200 | Data: 201 | - Name: 202 | Entry: 8 203 | Data: 204 | - Name: userBehaviourSource 205 | Entry: 10 206 | Data: 0 207 | - Name: 208 | Entry: 8 209 | Data: 210 | - Name: 211 | Entry: 8 212 | Data: 213 | - Name: 214 | Entry: 7 215 | Data: 216 | - Name: $k 217 | Entry: 1 218 | Data: spawnPoints 219 | - Name: $v 220 | Entry: 7 221 | Data: 15|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor 222 | - Name: fieldSymbol 223 | Entry: 7 224 | Data: 16|UdonSharp.Compiler.SymbolDefinition, UdonSharp.Editor 225 | - Name: internalType 226 | Entry: 7 227 | Data: 17|System.RuntimeType, mscorlib 228 | - Name: 229 | Entry: 1 230 | Data: UnityEngine.GameObject[], UnityEngine.CoreModule 231 | - Name: 232 | Entry: 8 233 | Data: 234 | - Name: declarationType 235 | Entry: 3 236 | Data: 1 237 | - Name: syncMode 238 | Entry: 3 239 | Data: 0 240 | - Name: symbolResolvedTypeName 241 | Entry: 1 242 | Data: UnityEngineGameObjectArray 243 | - Name: symbolOriginalName 244 | Entry: 1 245 | Data: spawnPoints 246 | - Name: symbolUniqueName 247 | Entry: 1 248 | Data: spawnPoints 249 | - Name: symbolDefaultValue 250 | Entry: 6 251 | Data: 252 | - Name: 253 | Entry: 8 254 | Data: 255 | - Name: fieldAttributes 256 | Entry: 7 257 | Data: 18|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib 258 | - Name: 259 | Entry: 12 260 | Data: 9 261 | - Name: 262 | Entry: 7 263 | Data: 19|UnityEngine.SpaceAttribute, UnityEngine.CoreModule 264 | - Name: height 265 | Entry: 4 266 | Data: 10 267 | - Name: 268 | Entry: 8 269 | Data: 270 | - Name: 271 | Entry: 7 272 | Data: 20|UnityEngine.HeaderAttribute, UnityEngine.CoreModule 273 | - Name: header 274 | Entry: 1 275 | Data: ----------------------------- 276 | - Name: 277 | Entry: 8 278 | Data: 279 | - Name: 280 | Entry: 7 281 | Data: 21|UnityEngine.HeaderAttribute, UnityEngine.CoreModule 282 | - Name: header 283 | Entry: 1 284 | Data: Spawn Points 285 | - Name: 286 | Entry: 8 287 | Data: 288 | - Name: 289 | Entry: 7 290 | Data: 22|UnityEngine.HeaderAttribute, UnityEngine.CoreModule 291 | - Name: header 292 | Entry: 1 293 | Data: ----------------------------- 294 | - Name: 295 | Entry: 8 296 | Data: 297 | - Name: 298 | Entry: 7 299 | Data: 23|UnityEngine.HeaderAttribute, UnityEngine.CoreModule 300 | - Name: header 301 | Entry: 1 302 | Data: Element 0 -> Animation 0 303 | - Name: 304 | Entry: 8 305 | Data: 306 | - Name: 307 | Entry: 7 308 | Data: 24|UnityEngine.HeaderAttribute, UnityEngine.CoreModule 309 | - Name: header 310 | Entry: 1 311 | Data: Element 1 -> Animation 1 ... 312 | - Name: 313 | Entry: 8 314 | Data: 315 | - Name: 316 | Entry: 7 317 | Data: 25|UnityEngine.HeaderAttribute, UnityEngine.CoreModule 318 | - Name: header 319 | Entry: 1 320 | Data: ----------------------------- 321 | - Name: 322 | Entry: 8 323 | Data: 324 | - Name: 325 | Entry: 7 326 | Data: 26|UnityEngine.TooltipAttribute, UnityEngine.CoreModule 327 | - Name: tooltip 328 | Entry: 1 329 | Data: Please Keep Under Animation Size 330 | - Name: 331 | Entry: 8 332 | Data: 333 | - Name: 334 | Entry: 7 335 | Data: 27|UnityEngine.SerializeField, UnityEngine.CoreModule 336 | - Name: 337 | Entry: 8 338 | Data: 339 | - Name: 340 | Entry: 13 341 | Data: 342 | - Name: 343 | Entry: 8 344 | Data: 345 | - Name: userBehaviourSource 346 | Entry: 6 347 | Data: 348 | - Name: 349 | Entry: 8 350 | Data: 351 | - Name: 352 | Entry: 8 353 | Data: 354 | - Name: 355 | Entry: 7 356 | Data: 357 | - Name: $k 358 | Entry: 1 359 | Data: ApplyRootMotion 360 | - Name: $v 361 | Entry: 7 362 | Data: 28|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor 363 | - Name: fieldSymbol 364 | Entry: 7 365 | Data: 29|UdonSharp.Compiler.SymbolDefinition, UdonSharp.Editor 366 | - Name: internalType 367 | Entry: 7 368 | Data: 30|System.RuntimeType, mscorlib 369 | - Name: 370 | Entry: 1 371 | Data: System.Boolean, mscorlib 372 | - Name: 373 | Entry: 8 374 | Data: 375 | - Name: declarationType 376 | Entry: 3 377 | Data: 1 378 | - Name: syncMode 379 | Entry: 3 380 | Data: 0 381 | - Name: symbolResolvedTypeName 382 | Entry: 1 383 | Data: SystemBoolean 384 | - Name: symbolOriginalName 385 | Entry: 1 386 | Data: ApplyRootMotion 387 | - Name: symbolUniqueName 388 | Entry: 1 389 | Data: ApplyRootMotion 390 | - Name: symbolDefaultValue 391 | Entry: 6 392 | Data: 393 | - Name: 394 | Entry: 8 395 | Data: 396 | - Name: fieldAttributes 397 | Entry: 7 398 | Data: 31|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib 399 | - Name: 400 | Entry: 12 401 | Data: 6 402 | - Name: 403 | Entry: 7 404 | Data: 32|UnityEngine.SpaceAttribute, UnityEngine.CoreModule 405 | - Name: height 406 | Entry: 4 407 | Data: 10 408 | - Name: 409 | Entry: 8 410 | Data: 411 | - Name: 412 | Entry: 7 413 | Data: 33|UnityEngine.HeaderAttribute, UnityEngine.CoreModule 414 | - Name: header 415 | Entry: 1 416 | Data: ----------------------------- 417 | - Name: 418 | Entry: 8 419 | Data: 420 | - Name: 421 | Entry: 7 422 | Data: 34|UnityEngine.HeaderAttribute, UnityEngine.CoreModule 423 | - Name: header 424 | Entry: 1 425 | Data: Apply Root Motion for Locomotion 426 | - Name: 427 | Entry: 8 428 | Data: 429 | - Name: 430 | Entry: 7 431 | Data: 35|UnityEngine.HeaderAttribute, UnityEngine.CoreModule 432 | - Name: header 433 | Entry: 1 434 | Data: ----------------------------- 435 | - Name: 436 | Entry: 8 437 | Data: 438 | - Name: 439 | Entry: 7 440 | Data: 36|UnityEngine.TooltipAttribute, UnityEngine.CoreModule 441 | - Name: tooltip 442 | Entry: 1 443 | Data: True for Locomotion 444 | - Name: 445 | Entry: 8 446 | Data: 447 | - Name: 448 | Entry: 7 449 | Data: 37|UnityEngine.SerializeField, UnityEngine.CoreModule 450 | - Name: 451 | Entry: 8 452 | Data: 453 | - Name: 454 | Entry: 13 455 | Data: 456 | - Name: 457 | Entry: 8 458 | Data: 459 | - Name: userBehaviourSource 460 | Entry: 6 461 | Data: 462 | - Name: 463 | Entry: 8 464 | Data: 465 | - Name: 466 | Entry: 8 467 | Data: 468 | - Name: 469 | Entry: 7 470 | Data: 471 | - Name: $k 472 | Entry: 1 473 | Data: RepeatNum 474 | - Name: $v 475 | Entry: 7 476 | Data: 38|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor 477 | - Name: fieldSymbol 478 | Entry: 7 479 | Data: 39|UdonSharp.Compiler.SymbolDefinition, UdonSharp.Editor 480 | - Name: internalType 481 | Entry: 7 482 | Data: 40|System.RuntimeType, mscorlib 483 | - Name: 484 | Entry: 1 485 | Data: System.Int32, mscorlib 486 | - Name: 487 | Entry: 8 488 | Data: 489 | - Name: declarationType 490 | Entry: 3 491 | Data: 1 492 | - Name: syncMode 493 | Entry: 3 494 | Data: 0 495 | - Name: symbolResolvedTypeName 496 | Entry: 1 497 | Data: SystemInt32 498 | - Name: symbolOriginalName 499 | Entry: 1 500 | Data: RepeatNum 501 | - Name: symbolUniqueName 502 | Entry: 1 503 | Data: RepeatNum 504 | - Name: symbolDefaultValue 505 | Entry: 6 506 | Data: 507 | - Name: 508 | Entry: 8 509 | Data: 510 | - Name: fieldAttributes 511 | Entry: 7 512 | Data: 41|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib 513 | - Name: 514 | Entry: 12 515 | Data: 2 516 | - Name: 517 | Entry: 7 518 | Data: 42|UnityEngine.TooltipAttribute, UnityEngine.CoreModule 519 | - Name: tooltip 520 | Entry: 1 521 | Data: How Many Repeats to Move 522 | - Name: 523 | Entry: 8 524 | Data: 525 | - Name: 526 | Entry: 7 527 | Data: 43|UnityEngine.SerializeField, UnityEngine.CoreModule 528 | - Name: 529 | Entry: 8 530 | Data: 531 | - Name: 532 | Entry: 13 533 | Data: 534 | - Name: 535 | Entry: 8 536 | Data: 537 | - Name: userBehaviourSource 538 | Entry: 6 539 | Data: 540 | - Name: 541 | Entry: 8 542 | Data: 543 | - Name: 544 | Entry: 8 545 | Data: 546 | - Name: 547 | Entry: 7 548 | Data: 549 | - Name: $k 550 | Entry: 1 551 | Data: characters 552 | - Name: $v 553 | Entry: 7 554 | Data: 44|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor 555 | - Name: fieldSymbol 556 | Entry: 7 557 | Data: 45|UdonSharp.Compiler.SymbolDefinition, UdonSharp.Editor 558 | - Name: internalType 559 | Entry: 9 560 | Data: 17 561 | - Name: declarationType 562 | Entry: 3 563 | Data: 2 564 | - Name: syncMode 565 | Entry: 3 566 | Data: 0 567 | - Name: symbolResolvedTypeName 568 | Entry: 1 569 | Data: UnityEngineGameObjectArray 570 | - Name: symbolOriginalName 571 | Entry: 1 572 | Data: characters 573 | - Name: symbolUniqueName 574 | Entry: 1 575 | Data: characters 576 | - Name: symbolDefaultValue 577 | Entry: 6 578 | Data: 579 | - Name: 580 | Entry: 8 581 | Data: 582 | - Name: fieldAttributes 583 | Entry: 7 584 | Data: 46|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib 585 | - Name: 586 | Entry: 12 587 | Data: 0 588 | - Name: 589 | Entry: 13 590 | Data: 591 | - Name: 592 | Entry: 8 593 | Data: 594 | - Name: userBehaviourSource 595 | Entry: 6 596 | Data: 597 | - Name: 598 | Entry: 8 599 | Data: 600 | - Name: 601 | Entry: 8 602 | Data: 603 | - Name: 604 | Entry: 13 605 | Data: 606 | - Name: 607 | Entry: 8 608 | Data: 609 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Scripts/AGI_SpawnPoints.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bea413e411965e74f80682e23cb4d55f 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Scripts/AGI_SpawnPoints.cs: -------------------------------------------------------------------------------- 1 | using UdonSharp; 2 | using UnityEngine; 3 | using VRC.SDKBase; 4 | using VRC.Udon; 5 | 6 | public class AGI_SpawnPoints : UdonSharpBehaviour 7 | { 8 | [Header("-----------------------------")] 9 | [Header("General Parameters")] 10 | [Header("-----------------------------")] 11 | [SerializeField] private GameObject animCharacter; 12 | [SerializeField] private AnimationFrameInfoList animationFrameInfoList; 13 | 14 | [Space(10)] 15 | 16 | [Header("-----------------------------")] 17 | [Header("Spawn Points")] 18 | [Header("-----------------------------")] 19 | [Header("Element 0 -> Animation 0")] 20 | [Header("Element 1 -> Animation 1 ...")] 21 | [Header("-----------------------------")] 22 | [Tooltip("Please Keep Under Animation Size")] 23 | [SerializeField] private GameObject[] spawnPoints; 24 | 25 | [Space(10)] 26 | 27 | [Header("-----------------------------")] 28 | [Header("Apply Root Motion for Locomotion")] 29 | [Header("-----------------------------")] 30 | [Tooltip("True for Locomotion")] 31 | [SerializeField] private bool ApplyRootMotion = false; 32 | 33 | [Tooltip("How Many Repeats to Move")] 34 | [SerializeField] private int RepeatNum = 10; 35 | 36 | 37 | 38 | GameObject[] characters = new GameObject[1000]; 39 | 40 | // Start is called before the first frame update 41 | void Start() 42 | { 43 | if (spawnPoints.Length > animationFrameInfoList.FrameInfo.Length) 44 | { 45 | Debug.LogError("Spawn Points Size is Larger than Animations"); 46 | return; 47 | } 48 | 49 | int cnt = 0; 50 | for (int i = 0; i < spawnPoints.Length; i++) 51 | { 52 | 53 | foreach (Transform point in spawnPoints[i].transform) 54 | { 55 | characters[cnt++] = GenerateCharacter(point, i); 56 | 57 | if (cnt > 1000) return; 58 | } 59 | } 60 | } 61 | 62 | // Update is called once per frame 63 | void Update() 64 | { 65 | 66 | } 67 | 68 | public GameObject GenerateCharacter(Transform point, int animID) 69 | { 70 | GameObject go = VRCInstantiate(animCharacter); 71 | go.SetActive(true); 72 | 73 | 74 | go.transform.localScale = point.localScale; 75 | go.transform.SetPositionAndRotation(point.position, point.rotation); 76 | 77 | go.transform.SetParent(this.transform); 78 | 79 | Vector4 frameInfo = animationFrameInfoList.FrameInfo[animID]; 80 | 81 | 82 | MaterialPropertyBlock props = new MaterialPropertyBlock(); 83 | // props.SetColor("_Color", new Color(Random.Range(0.9f, 1.0f), Random.Range(0.9f, 1.0f), Random.Range(0.9f, 1.0f))); 84 | props.SetFloat("_OffsetSeconds", UnityEngine.Random.Range(0.0f, frameInfo[1] - 1)); 85 | props.SetFloat("_StartFrame", frameInfo[0]); 86 | props.SetFloat("_FrameCount", frameInfo[1]); 87 | 88 | // Repeat 89 | props.SetFloat("_ROOT_MOTION", (ApplyRootMotion) ? 1.0f : 0.0f); 90 | props.SetFloat("_RepeatStartFrame", frameInfo[2]); 91 | props.SetFloat("_RepeatNum", Mathf.Min(frameInfo[3], RepeatNum)); 92 | 93 | MeshRenderer[] meshRenderers = go.GetComponentsInChildren(); 94 | foreach (var meshRenderer in meshRenderers) 95 | { 96 | meshRenderer.SetPropertyBlock(props); 97 | } 98 | 99 | 100 | return go; 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Scripts/AGI_SpawnPoints.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: dfb2874363f9a9843892f15d66187354 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Scripts/AGI_SpawnRandom.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: da24dff313899fb429dfca8fffe6828c 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Scripts/AGI_SpawnRandom.cs: -------------------------------------------------------------------------------- 1 | using UdonSharp; 2 | using UnityEngine; 3 | using VRC.SDKBase; 4 | using VRC.Udon; 5 | using System; 6 | 7 | public class AGI_SpawnRandom : UdonSharpBehaviour 8 | { 9 | [Header("-----------------------------")] 10 | [Header("General Parameters")] 11 | [Header("-----------------------------")] 12 | [SerializeField] private GameObject animCharacter; 13 | [SerializeField] private AnimationFrameInfoList animationFrameInfoList; 14 | 15 | [Space(10)] 16 | [Header("-----------------------------")] 17 | [Header("Random Spawn")] 18 | [Header("-----------------------------")] 19 | 20 | [Tooltip("Please Keep Under 1000")] 21 | [SerializeField] private int SpawnNum = 10; 22 | 23 | [Tooltip("(-) ~ (+) Value")] 24 | [SerializeField] private float RandomX = 5.0f; 25 | 26 | [Tooltip("(-) ~ (+) Value")] 27 | [SerializeField] private float RandomY = 0.0f; 28 | 29 | [Tooltip("(-) ~ (+) Value")] 30 | [SerializeField] private float RandomZ = 5.0f; 31 | 32 | [Tooltip("(-) ~ (+) Yaw Angle [deg]")] 33 | [SerializeField] private float RandomRotation = 0.0f; 34 | 35 | [Space(10)] 36 | 37 | [Tooltip("(x) Min ~ (y) Max")] 38 | [SerializeField] private Vector2 RandomScale = new Vector2(0.8f, 1.2f); 39 | 40 | 41 | [Header("-----------------------------")] 42 | [Header("Apply Root Motion for Locomotion")] 43 | [Header("-----------------------------")] 44 | [Tooltip("True for Locomotion")] 45 | [SerializeField] private bool ApplyRootMotion = false; 46 | 47 | [Tooltip("How Many Repeats to Move")] 48 | [SerializeField] private int RepeatNum = 10; 49 | 50 | 51 | private GameObject[] characters = new GameObject[1000]; 52 | 53 | 54 | void Start() 55 | { 56 | 57 | for (int i = 0; i < SpawnNum; i++) 58 | { 59 | 60 | characters[i] = GenerateCharacter(); 61 | 62 | if (i > characters.Length) return; 63 | } 64 | 65 | } 66 | 67 | private void Update() 68 | { 69 | } 70 | 71 | 72 | public GameObject GenerateCharacter() 73 | { 74 | GameObject go = VRCInstantiate(animCharacter); 75 | go.SetActive(true); 76 | 77 | float scale = UnityEngine.Random.Range(RandomScale.x, RandomScale.y); 78 | go.transform.localScale = new Vector3(scale, scale, scale); 79 | 80 | float angle_yaw = UnityEngine.Random.Range(-RandomRotation, RandomRotation); 81 | Quaternion quat_yaw = Quaternion.Euler(new Vector3(0.0f, angle_yaw, 0.0f)); 82 | 83 | Vector3 targetPos = new Vector3( 84 | UnityEngine.Random.Range(- RandomX, RandomX), 85 | UnityEngine.Random.Range(- RandomY, RandomY), 86 | UnityEngine.Random.Range(- RandomZ, RandomZ) 87 | ); 88 | 89 | targetPos += this.transform.position; 90 | 91 | go.transform.SetPositionAndRotation(targetPos, quat_yaw); 92 | 93 | go.transform.SetParent(this.transform); 94 | 95 | var idx = UnityEngine.Random.Range(0, animationFrameInfoList.FrameInfo.Length); 96 | Vector4 frameInfo = animationFrameInfoList.FrameInfo[idx]; 97 | 98 | MaterialPropertyBlock props = new MaterialPropertyBlock(); 99 | // props.SetColor("_Color", new Color(Random.Range(0.9f, 1.0f), Random.Range(0.9f, 1.0f), Random.Range(0.9f, 1.0f))); 100 | props.SetFloat("_OffsetSeconds", UnityEngine.Random.Range(0.0f, frameInfo[1] - 1)); 101 | props.SetFloat("_StartFrame", frameInfo[0]); 102 | props.SetFloat("_FrameCount", frameInfo[1]); 103 | 104 | // Repeat 105 | props.SetFloat("_ROOT_MOTION", (ApplyRootMotion) ? 1.0f : 0.0f); 106 | props.SetFloat("_RepeatStartFrame", frameInfo[2]); 107 | props.SetFloat("_RepeatNum", Mathf.Min(frameInfo[3], RepeatNum)); 108 | 109 | MeshRenderer[] meshRenderers = go.GetComponentsInChildren(); 110 | foreach(var meshRenderer in meshRenderers) 111 | { 112 | meshRenderer.SetPropertyBlock(props); 113 | } 114 | 115 | 116 | return go; 117 | } 118 | } 119 | 120 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Scripts/AGI_SpawnRandom.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 69885528a84d1c4419687ae8abff7212 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Scripts/AnimationFrameInfoList.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3} 13 | m_Name: AnimationFrameInfoList 14 | m_EditorClassIdentifier: 15 | serializedUdonProgramAsset: {fileID: 11400000, guid: ee51d1ce35a995541ad3dc28f72ba780, 16 | type: 2} 17 | udonAssembly: 18 | assemblyError: 19 | sourceCsScript: {fileID: 11500000, guid: 2723b027fc57e4949b85c78328e85855, type: 3} 20 | behaviourSyncMode: 0 21 | behaviourIDHeapVarName: __refl_const_intnl_udonTypeID 22 | compileErrors: [] 23 | hasInteractEvent: 0 24 | serializationData: 25 | SerializedFormat: 2 26 | SerializedBytes: 27 | ReferencedUnityObjects: [] 28 | SerializedBytesString: 29 | Prefab: {fileID: 0} 30 | PrefabModificationsReferencedUnityObjects: [] 31 | PrefabModifications: [] 32 | SerializationNodes: 33 | - Name: fieldDefinitions 34 | Entry: 7 35 | Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition, 36 | UdonSharp.Editor]], mscorlib 37 | - Name: comparer 38 | Entry: 7 39 | Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String, 40 | mscorlib]], mscorlib 41 | - Name: 42 | Entry: 8 43 | Data: 44 | - Name: 45 | Entry: 12 46 | Data: 1 47 | - Name: 48 | Entry: 7 49 | Data: 50 | - Name: $k 51 | Entry: 1 52 | Data: FrameInfo 53 | - Name: $v 54 | Entry: 7 55 | Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor 56 | - Name: fieldSymbol 57 | Entry: 7 58 | Data: 3|UdonSharp.Compiler.SymbolDefinition, UdonSharp.Editor 59 | - Name: internalType 60 | Entry: 7 61 | Data: 4|System.RuntimeType, mscorlib 62 | - Name: 63 | Entry: 1 64 | Data: UnityEngine.Vector4[], UnityEngine.CoreModule 65 | - Name: 66 | Entry: 8 67 | Data: 68 | - Name: declarationType 69 | Entry: 3 70 | Data: 1 71 | - Name: syncMode 72 | Entry: 3 73 | Data: 0 74 | - Name: symbolResolvedTypeName 75 | Entry: 1 76 | Data: UnityEngineVector4Array 77 | - Name: symbolOriginalName 78 | Entry: 1 79 | Data: FrameInfo 80 | - Name: symbolUniqueName 81 | Entry: 1 82 | Data: FrameInfo 83 | - Name: symbolDefaultValue 84 | Entry: 6 85 | Data: 86 | - Name: 87 | Entry: 8 88 | Data: 89 | - Name: fieldAttributes 90 | Entry: 7 91 | Data: 5|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib 92 | - Name: 93 | Entry: 12 94 | Data: 0 95 | - Name: 96 | Entry: 13 97 | Data: 98 | - Name: 99 | Entry: 8 100 | Data: 101 | - Name: userBehaviourSource 102 | Entry: 6 103 | Data: 104 | - Name: 105 | Entry: 8 106 | Data: 107 | - Name: 108 | Entry: 8 109 | Data: 110 | - Name: 111 | Entry: 13 112 | Data: 113 | - Name: 114 | Entry: 8 115 | Data: 116 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Scripts/AnimationFrameInfoList.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5f96beef6d7a1f24d81fafe66bb4848f 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Scripts/AnimationFrameInfoList.cs: -------------------------------------------------------------------------------- 1 |  2 | using UdonSharp; 3 | using UnityEngine; 4 | using VRC.SDKBase; 5 | using VRC.Udon; 6 | 7 | public class AnimationFrameInfoList : UdonSharpBehaviour 8 | { 9 | 10 | public Vector4[] FrameInfo; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Scripts/AnimationFrameInfoList.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2723b027fc57e4949b85c78328e85855 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Scripts/SMR_SpawnRandom.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3} 13 | m_Name: SMR_SpawnRandom 14 | m_EditorClassIdentifier: 15 | serializedUdonProgramAsset: {fileID: 11400000, guid: 06980f26f658c4747969c0e870f1246e, 16 | type: 2} 17 | udonAssembly: 18 | assemblyError: 19 | sourceCsScript: {fileID: 11500000, guid: 9eaabfddc52fd2f40976ebb9942df3af, type: 3} 20 | behaviourSyncMode: 0 21 | behaviourIDHeapVarName: __refl_const_intnl_udonTypeID 22 | compileErrors: [] 23 | hasInteractEvent: 0 24 | serializationData: 25 | SerializedFormat: 2 26 | SerializedBytes: 27 | ReferencedUnityObjects: [] 28 | SerializedBytesString: 29 | Prefab: {fileID: 0} 30 | PrefabModificationsReferencedUnityObjects: [] 31 | PrefabModifications: [] 32 | SerializationNodes: 33 | - Name: fieldDefinitions 34 | Entry: 7 35 | Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition, 36 | UdonSharp.Editor]], mscorlib 37 | - Name: comparer 38 | Entry: 7 39 | Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String, 40 | mscorlib]], mscorlib 41 | - Name: 42 | Entry: 8 43 | Data: 44 | - Name: 45 | Entry: 12 46 | Data: 9 47 | - Name: 48 | Entry: 7 49 | Data: 50 | - Name: $k 51 | Entry: 1 52 | Data: animCharacter 53 | - Name: $v 54 | Entry: 7 55 | Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor 56 | - Name: fieldSymbol 57 | Entry: 7 58 | Data: 3|UdonSharp.Compiler.SymbolDefinition, UdonSharp.Editor 59 | - Name: internalType 60 | Entry: 7 61 | Data: 4|System.RuntimeType, mscorlib 62 | - Name: 63 | Entry: 1 64 | Data: UnityEngine.GameObject, UnityEngine.CoreModule 65 | - Name: 66 | Entry: 8 67 | Data: 68 | - Name: declarationType 69 | Entry: 3 70 | Data: 1 71 | - Name: syncMode 72 | Entry: 3 73 | Data: 0 74 | - Name: symbolResolvedTypeName 75 | Entry: 1 76 | Data: UnityEngineGameObject 77 | - Name: symbolOriginalName 78 | Entry: 1 79 | Data: animCharacter 80 | - Name: symbolUniqueName 81 | Entry: 1 82 | Data: animCharacter 83 | - Name: symbolDefaultValue 84 | Entry: 6 85 | Data: 86 | - Name: 87 | Entry: 8 88 | Data: 89 | - Name: fieldAttributes 90 | Entry: 7 91 | Data: 5|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib 92 | - Name: 93 | Entry: 12 94 | Data: 4 95 | - Name: 96 | Entry: 7 97 | Data: 6|UnityEngine.HeaderAttribute, UnityEngine.CoreModule 98 | - Name: header 99 | Entry: 1 100 | Data: ----------------------------- 101 | - Name: 102 | Entry: 8 103 | Data: 104 | - Name: 105 | Entry: 7 106 | Data: 7|UnityEngine.HeaderAttribute, UnityEngine.CoreModule 107 | - Name: header 108 | Entry: 1 109 | Data: General Parameters 110 | - Name: 111 | Entry: 8 112 | Data: 113 | - Name: 114 | Entry: 7 115 | Data: 8|UnityEngine.HeaderAttribute, UnityEngine.CoreModule 116 | - Name: header 117 | Entry: 1 118 | Data: ----------------------------- 119 | - Name: 120 | Entry: 8 121 | Data: 122 | - Name: 123 | Entry: 7 124 | Data: 9|UnityEngine.SerializeField, UnityEngine.CoreModule 125 | - Name: 126 | Entry: 8 127 | Data: 128 | - Name: 129 | Entry: 13 130 | Data: 131 | - Name: 132 | Entry: 8 133 | Data: 134 | - Name: userBehaviourSource 135 | Entry: 6 136 | Data: 137 | - Name: 138 | Entry: 8 139 | Data: 140 | - Name: 141 | Entry: 8 142 | Data: 143 | - Name: 144 | Entry: 7 145 | Data: 146 | - Name: $k 147 | Entry: 1 148 | Data: SpawnNum 149 | - Name: $v 150 | Entry: 7 151 | Data: 10|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor 152 | - Name: fieldSymbol 153 | Entry: 7 154 | Data: 11|UdonSharp.Compiler.SymbolDefinition, UdonSharp.Editor 155 | - Name: internalType 156 | Entry: 7 157 | Data: 12|System.RuntimeType, mscorlib 158 | - Name: 159 | Entry: 1 160 | Data: System.Int32, mscorlib 161 | - Name: 162 | Entry: 8 163 | Data: 164 | - Name: declarationType 165 | Entry: 3 166 | Data: 1 167 | - Name: syncMode 168 | Entry: 3 169 | Data: 0 170 | - Name: symbolResolvedTypeName 171 | Entry: 1 172 | Data: SystemInt32 173 | - Name: symbolOriginalName 174 | Entry: 1 175 | Data: SpawnNum 176 | - Name: symbolUniqueName 177 | Entry: 1 178 | Data: SpawnNum 179 | - Name: symbolDefaultValue 180 | Entry: 6 181 | Data: 182 | - Name: 183 | Entry: 8 184 | Data: 185 | - Name: fieldAttributes 186 | Entry: 7 187 | Data: 13|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib 188 | - Name: 189 | Entry: 12 190 | Data: 6 191 | - Name: 192 | Entry: 7 193 | Data: 14|UnityEngine.SpaceAttribute, UnityEngine.CoreModule 194 | - Name: height 195 | Entry: 4 196 | Data: 10 197 | - Name: 198 | Entry: 8 199 | Data: 200 | - Name: 201 | Entry: 7 202 | Data: 15|UnityEngine.HeaderAttribute, UnityEngine.CoreModule 203 | - Name: header 204 | Entry: 1 205 | Data: ----------------------------- 206 | - Name: 207 | Entry: 8 208 | Data: 209 | - Name: 210 | Entry: 7 211 | Data: 16|UnityEngine.HeaderAttribute, UnityEngine.CoreModule 212 | - Name: header 213 | Entry: 1 214 | Data: Random Spawn 215 | - Name: 216 | Entry: 8 217 | Data: 218 | - Name: 219 | Entry: 7 220 | Data: 17|UnityEngine.HeaderAttribute, UnityEngine.CoreModule 221 | - Name: header 222 | Entry: 1 223 | Data: ----------------------------- 224 | - Name: 225 | Entry: 8 226 | Data: 227 | - Name: 228 | Entry: 7 229 | Data: 18|UnityEngine.TooltipAttribute, UnityEngine.CoreModule 230 | - Name: tooltip 231 | Entry: 1 232 | Data: Please Keep Under 1000 233 | - Name: 234 | Entry: 8 235 | Data: 236 | - Name: 237 | Entry: 7 238 | Data: 19|UnityEngine.SerializeField, UnityEngine.CoreModule 239 | - Name: 240 | Entry: 8 241 | Data: 242 | - Name: 243 | Entry: 13 244 | Data: 245 | - Name: 246 | Entry: 8 247 | Data: 248 | - Name: userBehaviourSource 249 | Entry: 6 250 | Data: 251 | - Name: 252 | Entry: 8 253 | Data: 254 | - Name: 255 | Entry: 8 256 | Data: 257 | - Name: 258 | Entry: 7 259 | Data: 260 | - Name: $k 261 | Entry: 1 262 | Data: RandomX 263 | - Name: $v 264 | Entry: 7 265 | Data: 20|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor 266 | - Name: fieldSymbol 267 | Entry: 7 268 | Data: 21|UdonSharp.Compiler.SymbolDefinition, UdonSharp.Editor 269 | - Name: internalType 270 | Entry: 7 271 | Data: 22|System.RuntimeType, mscorlib 272 | - Name: 273 | Entry: 1 274 | Data: System.Single, mscorlib 275 | - Name: 276 | Entry: 8 277 | Data: 278 | - Name: declarationType 279 | Entry: 3 280 | Data: 1 281 | - Name: syncMode 282 | Entry: 3 283 | Data: 0 284 | - Name: symbolResolvedTypeName 285 | Entry: 1 286 | Data: SystemSingle 287 | - Name: symbolOriginalName 288 | Entry: 1 289 | Data: RandomX 290 | - Name: symbolUniqueName 291 | Entry: 1 292 | Data: RandomX 293 | - Name: symbolDefaultValue 294 | Entry: 6 295 | Data: 296 | - Name: 297 | Entry: 8 298 | Data: 299 | - Name: fieldAttributes 300 | Entry: 7 301 | Data: 23|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib 302 | - Name: 303 | Entry: 12 304 | Data: 2 305 | - Name: 306 | Entry: 7 307 | Data: 24|UnityEngine.TooltipAttribute, UnityEngine.CoreModule 308 | - Name: tooltip 309 | Entry: 1 310 | Data: (-) ~ (+) Value 311 | - Name: 312 | Entry: 8 313 | Data: 314 | - Name: 315 | Entry: 7 316 | Data: 25|UnityEngine.SerializeField, UnityEngine.CoreModule 317 | - Name: 318 | Entry: 8 319 | Data: 320 | - Name: 321 | Entry: 13 322 | Data: 323 | - Name: 324 | Entry: 8 325 | Data: 326 | - Name: userBehaviourSource 327 | Entry: 6 328 | Data: 329 | - Name: 330 | Entry: 8 331 | Data: 332 | - Name: 333 | Entry: 8 334 | Data: 335 | - Name: 336 | Entry: 7 337 | Data: 338 | - Name: $k 339 | Entry: 1 340 | Data: RandomY 341 | - Name: $v 342 | Entry: 7 343 | Data: 26|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor 344 | - Name: fieldSymbol 345 | Entry: 7 346 | Data: 27|UdonSharp.Compiler.SymbolDefinition, UdonSharp.Editor 347 | - Name: internalType 348 | Entry: 9 349 | Data: 22 350 | - Name: declarationType 351 | Entry: 3 352 | Data: 1 353 | - Name: syncMode 354 | Entry: 3 355 | Data: 0 356 | - Name: symbolResolvedTypeName 357 | Entry: 1 358 | Data: SystemSingle 359 | - Name: symbolOriginalName 360 | Entry: 1 361 | Data: RandomY 362 | - Name: symbolUniqueName 363 | Entry: 1 364 | Data: RandomY 365 | - Name: symbolDefaultValue 366 | Entry: 6 367 | Data: 368 | - Name: 369 | Entry: 8 370 | Data: 371 | - Name: fieldAttributes 372 | Entry: 7 373 | Data: 28|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib 374 | - Name: 375 | Entry: 12 376 | Data: 2 377 | - Name: 378 | Entry: 7 379 | Data: 29|UnityEngine.TooltipAttribute, UnityEngine.CoreModule 380 | - Name: tooltip 381 | Entry: 1 382 | Data: (-) ~ (+) Value 383 | - Name: 384 | Entry: 8 385 | Data: 386 | - Name: 387 | Entry: 7 388 | Data: 30|UnityEngine.SerializeField, UnityEngine.CoreModule 389 | - Name: 390 | Entry: 8 391 | Data: 392 | - Name: 393 | Entry: 13 394 | Data: 395 | - Name: 396 | Entry: 8 397 | Data: 398 | - Name: userBehaviourSource 399 | Entry: 6 400 | Data: 401 | - Name: 402 | Entry: 8 403 | Data: 404 | - Name: 405 | Entry: 8 406 | Data: 407 | - Name: 408 | Entry: 7 409 | Data: 410 | - Name: $k 411 | Entry: 1 412 | Data: RandomZ 413 | - Name: $v 414 | Entry: 7 415 | Data: 31|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor 416 | - Name: fieldSymbol 417 | Entry: 7 418 | Data: 32|UdonSharp.Compiler.SymbolDefinition, UdonSharp.Editor 419 | - Name: internalType 420 | Entry: 9 421 | Data: 22 422 | - Name: declarationType 423 | Entry: 3 424 | Data: 1 425 | - Name: syncMode 426 | Entry: 3 427 | Data: 0 428 | - Name: symbolResolvedTypeName 429 | Entry: 1 430 | Data: SystemSingle 431 | - Name: symbolOriginalName 432 | Entry: 1 433 | Data: RandomZ 434 | - Name: symbolUniqueName 435 | Entry: 1 436 | Data: RandomZ 437 | - Name: symbolDefaultValue 438 | Entry: 6 439 | Data: 440 | - Name: 441 | Entry: 8 442 | Data: 443 | - Name: fieldAttributes 444 | Entry: 7 445 | Data: 33|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib 446 | - Name: 447 | Entry: 12 448 | Data: 2 449 | - Name: 450 | Entry: 7 451 | Data: 34|UnityEngine.TooltipAttribute, UnityEngine.CoreModule 452 | - Name: tooltip 453 | Entry: 1 454 | Data: (-) ~ (+) Value 455 | - Name: 456 | Entry: 8 457 | Data: 458 | - Name: 459 | Entry: 7 460 | Data: 35|UnityEngine.SerializeField, UnityEngine.CoreModule 461 | - Name: 462 | Entry: 8 463 | Data: 464 | - Name: 465 | Entry: 13 466 | Data: 467 | - Name: 468 | Entry: 8 469 | Data: 470 | - Name: userBehaviourSource 471 | Entry: 6 472 | Data: 473 | - Name: 474 | Entry: 8 475 | Data: 476 | - Name: 477 | Entry: 8 478 | Data: 479 | - Name: 480 | Entry: 7 481 | Data: 482 | - Name: $k 483 | Entry: 1 484 | Data: RandomRotation 485 | - Name: $v 486 | Entry: 7 487 | Data: 36|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor 488 | - Name: fieldSymbol 489 | Entry: 7 490 | Data: 37|UdonSharp.Compiler.SymbolDefinition, UdonSharp.Editor 491 | - Name: internalType 492 | Entry: 9 493 | Data: 22 494 | - Name: declarationType 495 | Entry: 3 496 | Data: 1 497 | - Name: syncMode 498 | Entry: 3 499 | Data: 0 500 | - Name: symbolResolvedTypeName 501 | Entry: 1 502 | Data: SystemSingle 503 | - Name: symbolOriginalName 504 | Entry: 1 505 | Data: RandomRotation 506 | - Name: symbolUniqueName 507 | Entry: 1 508 | Data: RandomRotation 509 | - Name: symbolDefaultValue 510 | Entry: 6 511 | Data: 512 | - Name: 513 | Entry: 8 514 | Data: 515 | - Name: fieldAttributes 516 | Entry: 7 517 | Data: 38|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib 518 | - Name: 519 | Entry: 12 520 | Data: 2 521 | - Name: 522 | Entry: 7 523 | Data: 39|UnityEngine.TooltipAttribute, UnityEngine.CoreModule 524 | - Name: tooltip 525 | Entry: 1 526 | Data: (-) ~ (+) Yaw Angle [deg] 527 | - Name: 528 | Entry: 8 529 | Data: 530 | - Name: 531 | Entry: 7 532 | Data: 40|UnityEngine.SerializeField, UnityEngine.CoreModule 533 | - Name: 534 | Entry: 8 535 | Data: 536 | - Name: 537 | Entry: 13 538 | Data: 539 | - Name: 540 | Entry: 8 541 | Data: 542 | - Name: userBehaviourSource 543 | Entry: 6 544 | Data: 545 | - Name: 546 | Entry: 8 547 | Data: 548 | - Name: 549 | Entry: 8 550 | Data: 551 | - Name: 552 | Entry: 7 553 | Data: 554 | - Name: $k 555 | Entry: 1 556 | Data: RandomScale 557 | - Name: $v 558 | Entry: 7 559 | Data: 41|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor 560 | - Name: fieldSymbol 561 | Entry: 7 562 | Data: 42|UdonSharp.Compiler.SymbolDefinition, UdonSharp.Editor 563 | - Name: internalType 564 | Entry: 7 565 | Data: 43|System.RuntimeType, mscorlib 566 | - Name: 567 | Entry: 1 568 | Data: UnityEngine.Vector2, UnityEngine.CoreModule 569 | - Name: 570 | Entry: 8 571 | Data: 572 | - Name: declarationType 573 | Entry: 3 574 | Data: 1 575 | - Name: syncMode 576 | Entry: 3 577 | Data: 0 578 | - Name: symbolResolvedTypeName 579 | Entry: 1 580 | Data: UnityEngineVector2 581 | - Name: symbolOriginalName 582 | Entry: 1 583 | Data: RandomScale 584 | - Name: symbolUniqueName 585 | Entry: 1 586 | Data: RandomScale 587 | - Name: symbolDefaultValue 588 | Entry: 6 589 | Data: 590 | - Name: 591 | Entry: 8 592 | Data: 593 | - Name: fieldAttributes 594 | Entry: 7 595 | Data: 44|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib 596 | - Name: 597 | Entry: 12 598 | Data: 3 599 | - Name: 600 | Entry: 7 601 | Data: 45|UnityEngine.SpaceAttribute, UnityEngine.CoreModule 602 | - Name: height 603 | Entry: 4 604 | Data: 10 605 | - Name: 606 | Entry: 8 607 | Data: 608 | - Name: 609 | Entry: 7 610 | Data: 46|UnityEngine.TooltipAttribute, UnityEngine.CoreModule 611 | - Name: tooltip 612 | Entry: 1 613 | Data: (x) Min ~ (y) Max 614 | - Name: 615 | Entry: 8 616 | Data: 617 | - Name: 618 | Entry: 7 619 | Data: 47|UnityEngine.SerializeField, UnityEngine.CoreModule 620 | - Name: 621 | Entry: 8 622 | Data: 623 | - Name: 624 | Entry: 13 625 | Data: 626 | - Name: 627 | Entry: 8 628 | Data: 629 | - Name: userBehaviourSource 630 | Entry: 6 631 | Data: 632 | - Name: 633 | Entry: 8 634 | Data: 635 | - Name: 636 | Entry: 8 637 | Data: 638 | - Name: 639 | Entry: 7 640 | Data: 641 | - Name: $k 642 | Entry: 1 643 | Data: animationNames 644 | - Name: $v 645 | Entry: 7 646 | Data: 48|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor 647 | - Name: fieldSymbol 648 | Entry: 7 649 | Data: 49|UdonSharp.Compiler.SymbolDefinition, UdonSharp.Editor 650 | - Name: internalType 651 | Entry: 7 652 | Data: 50|System.RuntimeType, mscorlib 653 | - Name: 654 | Entry: 1 655 | Data: System.String[], mscorlib 656 | - Name: 657 | Entry: 8 658 | Data: 659 | - Name: declarationType 660 | Entry: 3 661 | Data: 1 662 | - Name: syncMode 663 | Entry: 3 664 | Data: 0 665 | - Name: symbolResolvedTypeName 666 | Entry: 1 667 | Data: SystemStringArray 668 | - Name: symbolOriginalName 669 | Entry: 1 670 | Data: animationNames 671 | - Name: symbolUniqueName 672 | Entry: 1 673 | Data: animationNames 674 | - Name: symbolDefaultValue 675 | Entry: 6 676 | Data: 677 | - Name: 678 | Entry: 8 679 | Data: 680 | - Name: fieldAttributes 681 | Entry: 7 682 | Data: 51|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib 683 | - Name: 684 | Entry: 12 685 | Data: 2 686 | - Name: 687 | Entry: 7 688 | Data: 52|UnityEngine.SpaceAttribute, UnityEngine.CoreModule 689 | - Name: height 690 | Entry: 4 691 | Data: 10 692 | - Name: 693 | Entry: 8 694 | Data: 695 | - Name: 696 | Entry: 7 697 | Data: 53|UnityEngine.SerializeField, UnityEngine.CoreModule 698 | - Name: 699 | Entry: 8 700 | Data: 701 | - Name: 702 | Entry: 13 703 | Data: 704 | - Name: 705 | Entry: 8 706 | Data: 707 | - Name: userBehaviourSource 708 | Entry: 6 709 | Data: 710 | - Name: 711 | Entry: 8 712 | Data: 713 | - Name: 714 | Entry: 8 715 | Data: 716 | - Name: 717 | Entry: 7 718 | Data: 719 | - Name: $k 720 | Entry: 1 721 | Data: characters 722 | - Name: $v 723 | Entry: 7 724 | Data: 54|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor 725 | - Name: fieldSymbol 726 | Entry: 7 727 | Data: 55|UdonSharp.Compiler.SymbolDefinition, UdonSharp.Editor 728 | - Name: internalType 729 | Entry: 7 730 | Data: 56|System.RuntimeType, mscorlib 731 | - Name: 732 | Entry: 1 733 | Data: UnityEngine.GameObject[], UnityEngine.CoreModule 734 | - Name: 735 | Entry: 8 736 | Data: 737 | - Name: declarationType 738 | Entry: 3 739 | Data: 2 740 | - Name: syncMode 741 | Entry: 3 742 | Data: 0 743 | - Name: symbolResolvedTypeName 744 | Entry: 1 745 | Data: UnityEngineGameObjectArray 746 | - Name: symbolOriginalName 747 | Entry: 1 748 | Data: characters 749 | - Name: symbolUniqueName 750 | Entry: 1 751 | Data: characters 752 | - Name: symbolDefaultValue 753 | Entry: 6 754 | Data: 755 | - Name: 756 | Entry: 8 757 | Data: 758 | - Name: fieldAttributes 759 | Entry: 7 760 | Data: 57|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib 761 | - Name: 762 | Entry: 12 763 | Data: 0 764 | - Name: 765 | Entry: 13 766 | Data: 767 | - Name: 768 | Entry: 8 769 | Data: 770 | - Name: userBehaviourSource 771 | Entry: 6 772 | Data: 773 | - Name: 774 | Entry: 8 775 | Data: 776 | - Name: 777 | Entry: 8 778 | Data: 779 | - Name: 780 | Entry: 13 781 | Data: 782 | - Name: 783 | Entry: 8 784 | Data: 785 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Scripts/SMR_SpawnRandom.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d0fbb2ad0043eda4cb7903da5ea9afc0 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Scripts/SMR_SpawnRandom.cs: -------------------------------------------------------------------------------- 1 | using UdonSharp; 2 | using UnityEngine; 3 | using VRC.SDKBase; 4 | using VRC.Udon; 5 | using System; 6 | 7 | public class SMR_SpawnRandom : UdonSharpBehaviour 8 | { 9 | [Header("-----------------------------")] 10 | [Header("General Parameters")] 11 | [Header("-----------------------------")] 12 | [SerializeField] private GameObject animCharacter; 13 | 14 | [Space(10)] 15 | [Header("-----------------------------")] 16 | [Header("Random Spawn")] 17 | [Header("-----------------------------")] 18 | 19 | [Tooltip("Please Keep Under 1000")] 20 | [SerializeField] private int SpawnNum = 10; 21 | 22 | [Tooltip("(-) ~ (+) Value")] 23 | [SerializeField] private float RandomX = 5.0f; 24 | 25 | [Tooltip("(-) ~ (+) Value")] 26 | [SerializeField] private float RandomY = 0.0f; 27 | 28 | [Tooltip("(-) ~ (+) Value")] 29 | [SerializeField] private float RandomZ = 5.0f; 30 | 31 | [Tooltip("(-) ~ (+) Yaw Angle [deg]")] 32 | [SerializeField] private float RandomRotation = 0.0f; 33 | 34 | [Space(10)] 35 | 36 | [Tooltip("(x) Min ~ (y) Max")] 37 | [SerializeField] private Vector2 RandomScale = new Vector2(0.8f, 1.2f); 38 | 39 | [Space(10)] 40 | [SerializeField] private string[] animationNames; 41 | 42 | private GameObject[] characters = new GameObject[1000]; 43 | 44 | 45 | // Start is called before the first frame update 46 | void Start() 47 | { 48 | for (int i = 0; i < SpawnNum; i++) 49 | { 50 | 51 | characters[i] = GenerateCharacter(); 52 | 53 | if (i > characters.Length) return; 54 | } 55 | 56 | } 57 | 58 | // Update is called once per frame 59 | void Update() 60 | { 61 | 62 | } 63 | 64 | public GameObject GenerateCharacter() 65 | { 66 | GameObject go = VRCInstantiate(animCharacter); 67 | go.SetActive(true); 68 | 69 | float scale = UnityEngine.Random.Range(RandomScale.x, RandomScale.y); 70 | go.transform.localScale = new Vector3(scale, scale, scale); 71 | 72 | float angle_yaw = UnityEngine.Random.Range(-RandomRotation, RandomRotation); 73 | Quaternion quat_yaw = Quaternion.Euler(new Vector3(0.0f, angle_yaw, 0.0f)); 74 | 75 | Vector3 targetPos = new Vector3( 76 | UnityEngine.Random.Range(-RandomX, RandomX), 77 | UnityEngine.Random.Range(-RandomY, RandomY), 78 | UnityEngine.Random.Range(-RandomZ, RandomZ) 79 | ); 80 | 81 | targetPos += this.transform.position; 82 | 83 | go.transform.SetPositionAndRotation(targetPos, quat_yaw); 84 | 85 | go.transform.SetParent(this.transform); 86 | 87 | var idx = UnityEngine.Random.Range(0, animationNames.Length); 88 | Animator animator = go.GetComponent(); 89 | if (animator != null) 90 | { 91 | animator.Play(animationNames[idx]); 92 | } 93 | 94 | //var idx = UnityEngine.Random.Range(0, animationFrameInfoList.FrameInfo.Length); 95 | //Vector4 frameInfo = animationFrameInfoList.FrameInfo[idx]; 96 | 97 | //MaterialPropertyBlock props = new MaterialPropertyBlock(); 98 | //// props.SetColor("_Color", new Color(Random.Range(0.9f, 1.0f), Random.Range(0.9f, 1.0f), Random.Range(0.9f, 1.0f))); 99 | //props.SetFloat("_OffsetSeconds", UnityEngine.Random.Range(0.0f, frameInfo[1] - 1)); 100 | //props.SetFloat("_StartFrame", frameInfo[0]); 101 | //props.SetFloat("_FrameCount", frameInfo[1]); 102 | 103 | //// Repeat 104 | //props.SetFloat("_ROOT_MOTION", (ApplyRootMotion) ? 1.0f : 0.0f); 105 | //props.SetFloat("_RepeatStartFrame", frameInfo[2]); 106 | //props.SetFloat("_RepeatNum", Mathf.Min(frameInfo[3], RepeatNum)); 107 | 108 | //MeshRenderer[] meshRenderers = go.GetComponentsInChildren(); 109 | //foreach (var meshRenderer in meshRenderers) 110 | //{ 111 | // meshRenderer.SetPropertyBlock(props); 112 | //} 113 | 114 | //MeshRenderer meshRenderer = go.GetComponent(); 115 | 116 | return go; 117 | } 118 | 119 | 120 | } 121 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Scripts/SMR_SpawnRandom.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9eaabfddc52fd2f40976ebb9942df3af 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Shaders.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 704f55a84d2054a498a948a13e291c61 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Shaders/AnimationGpuInstancing_Default.shader: -------------------------------------------------------------------------------- 1 | Shader "AnimationGpuInstancing/Base" 2 | { 3 | Properties 4 | { 5 | _Color ("Color", Color) = (1,1,1,1) 6 | _MainTex ("Main Texture", 2D) = "white" {} 7 | _BumpMap("Normal Map", 2D) = "bump" {} 8 | _Shininess ("Shininess", Range(0.0, 1.0)) = 0.078125 9 | 10 | [NoScaleOffset]_AnimTex("Animation Texture", 2D) = "white" {} 11 | 12 | 13 | _StartFrame("Start Frame", Float) = 0 14 | _FrameCount("Frame Count", Float) = 1 15 | _OffsetSeconds("Offset Seconds", Float) = 0 16 | _PixelsPerFrame("Pixels Per Frame", Float) = 0 17 | 18 | 19 | [Toggle] 20 | _ROOT_MOTION("Apply Root Motion", Float) = 0 21 | [NoScaleOffset]_RepeatTex("Repeat Texture", 2D) = "white" {} 22 | _RepeatStartFrame("Repeat Start Frame", Float) = 0 23 | _RepeatMax("Repeat Max", FLoat) = 1 24 | _RepeatNum ("Repeat Num", Float) = 1 25 | 26 | 27 | [KeywordEnum(UNLIT, REAL)] 28 | _LIGHTING("Lighting", Float) = 0 29 | 30 | [Toggle] _INSTANCING("Gpu Instancing", Float) = 1 31 | } 32 | 33 | CustomEditor "AGI_ShaderInspector" 34 | 35 | CGINCLUDE 36 | 37 | #include "UnityCG.cginc" 38 | #include "Includes/Utils.cginc" 39 | 40 | 41 | struct appdata 42 | { 43 | float4 vertex : POSITION; 44 | float3 normal : NORMAL; 45 | float4 texcoord : TEXCOORD0; 46 | float4 texcoord1 : TEXCOORD1; 47 | half4 boneIndex : TEXCOORD2; 48 | fixed4 boneWeight : TEXCOORD3; 49 | float4 tangent : TANGENT; 50 | UNITY_VERTEX_INPUT_INSTANCE_ID 51 | }; 52 | 53 | struct v2f 54 | { 55 | float2 uv : TEXCOORD0; 56 | UNITY_FOG_COORDS(1) 57 | float4 vertex : SV_POSITION; 58 | float4 normal : NORMAL; 59 | UNITY_VERTEX_INPUT_INSTANCE_ID 60 | 61 | #ifdef _LIGHTING_REAL 62 | float3 lightDir : TEXCOORD2; 63 | float3 viewDir : TEXCOORD3; 64 | #endif 65 | 66 | }; 67 | 68 | UNITY_INSTANCING_BUFFER_START(Props) 69 | 70 | UNITY_DEFINE_INSTANCED_PROP(uint, _StartFrame) 71 | #define _StartFrame_arr Props 72 | 73 | UNITY_DEFINE_INSTANCED_PROP(uint, _FrameCount) 74 | #define _FrameCount_arr Props 75 | 76 | UNITY_DEFINE_INSTANCED_PROP(uint, _OffsetSeconds) 77 | #define _OffsetSeconds_arr Props 78 | 79 | UNITY_DEFINE_INSTANCED_PROP(uint, _ROOT_MOTION) 80 | #define _ROOT_MOTION_arr Props 81 | 82 | UNITY_DEFINE_INSTANCED_PROP(uint, _RepeatStartFrame) 83 | #define _RepeatStartFrame_arr Props 84 | 85 | UNITY_DEFINE_INSTANCED_PROP(uint, _RepeatNum) 86 | #define _RepeatNum_arr Props 87 | 88 | UNITY_DEFINE_INSTANCED_PROP(fixed4, _Color) 89 | #define _Color_arr Props 90 | 91 | 92 | UNITY_INSTANCING_BUFFER_END(Props) 93 | 94 | sampler2D _MainTex; 95 | float4 _MainTex_ST; 96 | 97 | sampler2D _BumpMap; 98 | 99 | sampler2D _AnimTex; 100 | float4 _AnimTex_TexelSize; 101 | 102 | 103 | sampler2D _RepeatTex; 104 | float4 _RepeatTex_TexelSize; 105 | uint _PixelsPerFrame; 106 | 107 | uint _RepeatMax; 108 | 109 | #define Mat4x4Identity float4x4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1) 110 | 111 | half _Shininess; 112 | float4 _LightColor0; 113 | 114 | v2f vert (appdata v) 115 | { 116 | v2f o; 117 | 118 | UNITY_SETUP_INSTANCE_ID(v); 119 | UNITY_TRANSFER_INSTANCE_ID(v, o); 120 | 121 | uint startFrame = UNITY_ACCESS_INSTANCED_PROP(_StartFrame_arr, _StartFrame); 122 | uint frameCount = UNITY_ACCESS_INSTANCED_PROP(_FrameCount_arr, _FrameCount); 123 | float offsetSeconds = UNITY_ACCESS_INSTANCED_PROP(_OffsetSeconds_arr, _OffsetSeconds); 124 | 125 | float time = _Time.y; 126 | 127 | uint offsetFrame = (uint)((time + offsetSeconds) * 30.0); 128 | uint currentFrame = startFrame + offsetFrame % frameCount; 129 | 130 | uint clampedIndex = currentFrame * _PixelsPerFrame; 131 | float4x4 bone1Mat = GetMatrix(clampedIndex, v.boneIndex.x, _AnimTex, _AnimTex_TexelSize); 132 | float4x4 bone2Mat = GetMatrix(clampedIndex, v.boneIndex.y, _AnimTex, _AnimTex_TexelSize); 133 | float4x4 bone3Mat = GetMatrix(clampedIndex, v.boneIndex.z, _AnimTex, _AnimTex_TexelSize); 134 | float4x4 bone4Mat = GetMatrix(clampedIndex, v.boneIndex.w, _AnimTex, _AnimTex_TexelSize); 135 | 136 | float4 pos = 137 | mul(bone1Mat, v.vertex) * v.boneWeight.x + 138 | mul(bone2Mat, v.vertex) * v.boneWeight.y + 139 | mul(bone3Mat, v.vertex) * v.boneWeight.z + 140 | mul(bone4Mat, v.vertex) * v.boneWeight.w; 141 | 142 | 143 | float4 normal = 144 | mul(bone1Mat, v.normal) * v.boneWeight.x + 145 | mul(bone2Mat, v.normal) * v.boneWeight.y + 146 | mul(bone3Mat, v.normal) * v.boneWeight.z+ 147 | mul(bone4Mat, v.normal) * v.boneWeight.w; 148 | 149 | 150 | uint _root_motion = UNITY_ACCESS_INSTANCED_PROP(_ROOT_MOTION_arr, _ROOT_MOTION); 151 | uint repeatStartFrame = UNITY_ACCESS_INSTANCED_PROP(_RepeatStartFrame_arr, _RepeatStartFrame); 152 | uint repeatNum = UNITY_ACCESS_INSTANCED_PROP(_RepeatNum_arr, _RepeatNum); 153 | repeatNum = max(1, repeatNum); 154 | uint currentRepeatIndex = (uint)(offsetFrame / frameCount) % repeatNum; 155 | uint currentRepeatFrame = (currentRepeatIndex == 0)? 0 : repeatStartFrame + currentRepeatIndex - 1; 156 | uint clampedRepeatIndex = currentRepeatFrame * 3; 157 | float4x4 rootMat = GetMatrix(clampedRepeatIndex, 0, _RepeatTex, _RepeatTex_TexelSize); 158 | 159 | rootMat = (_root_motion) ? rootMat : Mat4x4Identity; 160 | 161 | 162 | pos = mul(rootMat, pos); 163 | normal = mul(rootMat, normal); 164 | 165 | o.vertex = UnityObjectToClipPos(pos); 166 | UNITY_TRANSFER_FOG(o,o.vertex); 167 | o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); 168 | o.normal = normal; 169 | 170 | #ifdef _LIGHTING_REAL 171 | TANGENT_SPACE_ROTATION; 172 | o.lightDir = normalize(mul(rotation, ObjSpaceLightDir(v.vertex))); 173 | o.viewDir = normalize(mul(rotation, ObjSpaceViewDir(v.vertex))); 174 | #endif 175 | 176 | return o; 177 | } 178 | 179 | fixed4 frag (v2f i) : SV_Target 180 | { 181 | float4 _Col = UNITY_ACCESS_INSTANCED_PROP(_Color_arr, _Color); 182 | fixed4 tex = tex2D(_MainTex, i.uv); 183 | fixed4 col = tex * _Col; 184 | 185 | #ifdef _LIGHTING_REAL 186 | half3 halfDir = normalize(i.lightDir + i.viewDir); 187 | half3 normal = UnpackNormal(tex2D(_BumpMap, i.uv)); 188 | half4 diff = saturate(dot(normal, i.lightDir)) * _LightColor0; 189 | half3 spec = pow(max(0, dot(normal, halfDir)), _Shininess * 128.0) * _LightColor0.rgb * tex.rgb; 190 | col.rgb = col.rgb * diff + spec; 191 | #endif 192 | 193 | // apply fog 194 | UNITY_APPLY_FOG(i.fogCoord, col); 195 | 196 | return col; 197 | } 198 | 199 | fixed4 frag_shadow(v2f i) : SV_Target { 200 | return (fixed4)0; 201 | } 202 | ENDCG 203 | 204 | SubShader 205 | { 206 | Tags { "RenderType"="Opaque" } 207 | LOD 100 208 | 209 | Pass 210 | { 211 | CGPROGRAM 212 | #pragma vertex vert 213 | #pragma fragment frag 214 | // make fog work 215 | #pragma multi_compile_fog 216 | #pragma multi_compile_instancing 217 | #pragma target 4.5 218 | #pragma shader_feature _LIGHTING_UNLIT _LIGHTING_REAL 219 | 220 | ENDCG 221 | } 222 | 223 | } 224 | 225 | } 226 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Shaders/AnimationGpuInstancing_Default.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5dda609470475e64babf4fe0e24e9e64 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Shaders/AnimationGpuInstancing_Shadow.shader: -------------------------------------------------------------------------------- 1 | Shader "AnimationGpuInstancing/Base_Shadow" 2 | { 3 | Properties 4 | { 5 | _Color ("Color", Color) = (1,1,1,1) 6 | _MainTex ("Main Texture", 2D) = "white" {} 7 | _BumpMap("Normal Map", 2D) = "bump" {} 8 | _Shininess ("Shininess", Range(0.0, 1.0)) = 0.078125 9 | 10 | [NoScaleOffset]_AnimTex("Animation Texture", 2D) = "white" {} 11 | 12 | 13 | _StartFrame("Start Frame", Float) = 0 14 | _FrameCount("Frame Count", Float) = 1 15 | _OffsetSeconds("Offset Seconds", Float) = 0 16 | _PixelsPerFrame("Pixels Per Frame", Float) = 0 17 | 18 | 19 | [Toggle] 20 | _ROOT_MOTION("Apply Root Motion", Float) = 0 21 | [NoScaleOffset]_RepeatTex("Repeat Texture", 2D) = "white" {} 22 | _RepeatStartFrame("Repeat Start Frame", Float) = 0 23 | _RepeatMax("Repeat Max", FLoat) = 1 24 | _RepeatNum ("Repeat Num", Float) = 1 25 | 26 | 27 | [KeywordEnum(UNLIT, REAL)] 28 | _LIGHTING("Lighting", Float) = 0 29 | 30 | [Toggle] _INSTANCING("Gpu Instancing", Float) = 1 31 | } 32 | 33 | CustomEditor "AGI_ShaderInspector" 34 | 35 | CGINCLUDE 36 | 37 | #include "UnityCG.cginc" 38 | #include "Includes/Utils.cginc" 39 | 40 | 41 | struct appdata 42 | { 43 | float4 vertex : POSITION; 44 | float3 normal : NORMAL; 45 | float4 texcoord : TEXCOORD0; 46 | float4 texcoord1 : TEXCOORD1; 47 | half4 boneIndex : TEXCOORD2; 48 | fixed4 boneWeight : TEXCOORD3; 49 | float4 tangent : TANGENT; 50 | UNITY_VERTEX_INPUT_INSTANCE_ID 51 | }; 52 | 53 | struct v2f 54 | { 55 | float2 uv : TEXCOORD0; 56 | UNITY_FOG_COORDS(1) 57 | float4 vertex : SV_POSITION; 58 | float4 normal : NORMAL; 59 | UNITY_VERTEX_INPUT_INSTANCE_ID 60 | 61 | #ifdef _LIGHTING_REAL 62 | float3 lightDir : TEXCOORD2; 63 | float3 viewDir : TEXCOORD3; 64 | #endif 65 | 66 | }; 67 | 68 | UNITY_INSTANCING_BUFFER_START(Props) 69 | 70 | UNITY_DEFINE_INSTANCED_PROP(uint, _StartFrame) 71 | #define _StartFrame_arr Props 72 | 73 | UNITY_DEFINE_INSTANCED_PROP(uint, _FrameCount) 74 | #define _FrameCount_arr Props 75 | 76 | UNITY_DEFINE_INSTANCED_PROP(uint, _OffsetSeconds) 77 | #define _OffsetSeconds_arr Props 78 | 79 | UNITY_DEFINE_INSTANCED_PROP(uint, _ROOT_MOTION) 80 | #define _ROOT_MOTION_arr Props 81 | 82 | UNITY_DEFINE_INSTANCED_PROP(uint, _RepeatStartFrame) 83 | #define _RepeatStartFrame_arr Props 84 | 85 | UNITY_DEFINE_INSTANCED_PROP(uint, _RepeatNum) 86 | #define _RepeatNum_arr Props 87 | 88 | UNITY_DEFINE_INSTANCED_PROP(fixed4, _Color) 89 | #define _Color_arr Props 90 | 91 | 92 | UNITY_INSTANCING_BUFFER_END(Props) 93 | 94 | sampler2D _MainTex; 95 | float4 _MainTex_ST; 96 | 97 | sampler2D _BumpMap; 98 | 99 | sampler2D _AnimTex; 100 | float4 _AnimTex_TexelSize; 101 | 102 | 103 | sampler2D _RepeatTex; 104 | float4 _RepeatTex_TexelSize; 105 | uint _PixelsPerFrame; 106 | 107 | uint _RepeatMax; 108 | 109 | #define Mat4x4Identity float4x4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1) 110 | 111 | half _Shininess; 112 | float4 _LightColor0; 113 | 114 | v2f vert (appdata v) 115 | { 116 | v2f o; 117 | 118 | UNITY_SETUP_INSTANCE_ID(v); 119 | UNITY_TRANSFER_INSTANCE_ID(v, o); 120 | 121 | uint startFrame = UNITY_ACCESS_INSTANCED_PROP(_StartFrame_arr, _StartFrame); 122 | uint frameCount = UNITY_ACCESS_INSTANCED_PROP(_FrameCount_arr, _FrameCount); 123 | float offsetSeconds = UNITY_ACCESS_INSTANCED_PROP(_OffsetSeconds_arr, _OffsetSeconds); 124 | 125 | float time = _Time.y; 126 | 127 | uint offsetFrame = (uint)((time + offsetSeconds) * 30.0); 128 | uint currentFrame = startFrame + offsetFrame % frameCount; 129 | 130 | uint clampedIndex = currentFrame * _PixelsPerFrame; 131 | float4x4 bone1Mat = GetMatrix(clampedIndex, v.boneIndex.x, _AnimTex, _AnimTex_TexelSize); 132 | float4x4 bone2Mat = GetMatrix(clampedIndex, v.boneIndex.y, _AnimTex, _AnimTex_TexelSize); 133 | float4x4 bone3Mat = GetMatrix(clampedIndex, v.boneIndex.z, _AnimTex, _AnimTex_TexelSize); 134 | float4x4 bone4Mat = GetMatrix(clampedIndex, v.boneIndex.w, _AnimTex, _AnimTex_TexelSize); 135 | 136 | float4 pos = 137 | mul(bone1Mat, v.vertex) * v.boneWeight.x + 138 | mul(bone2Mat, v.vertex) * v.boneWeight.y + 139 | mul(bone3Mat, v.vertex) * v.boneWeight.z + 140 | mul(bone4Mat, v.vertex) * v.boneWeight.w; 141 | 142 | 143 | float4 normal = 144 | mul(bone1Mat, v.normal) * v.boneWeight.x + 145 | mul(bone2Mat, v.normal) * v.boneWeight.y + 146 | mul(bone3Mat, v.normal) * v.boneWeight.z+ 147 | mul(bone4Mat, v.normal) * v.boneWeight.w; 148 | 149 | 150 | uint _root_motion = UNITY_ACCESS_INSTANCED_PROP(_ROOT_MOTION_arr, _ROOT_MOTION); 151 | uint repeatStartFrame = UNITY_ACCESS_INSTANCED_PROP(_RepeatStartFrame_arr, _RepeatStartFrame); 152 | uint repeatNum = UNITY_ACCESS_INSTANCED_PROP(_RepeatNum_arr, _RepeatNum); 153 | repeatNum = max(1, repeatNum); 154 | uint currentRepeatIndex = (uint)(offsetFrame / frameCount) % repeatNum; 155 | uint currentRepeatFrame = (currentRepeatIndex == 0)? 0 : repeatStartFrame + currentRepeatIndex - 1; 156 | uint clampedRepeatIndex = currentRepeatFrame * 3; 157 | float4x4 rootMat = GetMatrix(clampedRepeatIndex, 0, _RepeatTex, _RepeatTex_TexelSize); 158 | 159 | rootMat = (_root_motion) ? rootMat : Mat4x4Identity; 160 | 161 | 162 | pos = mul(rootMat, pos); 163 | normal = mul(rootMat, normal); 164 | 165 | o.vertex = UnityObjectToClipPos(pos); 166 | UNITY_TRANSFER_FOG(o,o.vertex); 167 | o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); 168 | o.normal = normal; 169 | 170 | #ifdef _LIGHTING_REAL 171 | TANGENT_SPACE_ROTATION; 172 | o.lightDir = normalize(mul(rotation, ObjSpaceLightDir(v.vertex))); 173 | o.viewDir = normalize(mul(rotation, ObjSpaceViewDir(v.vertex))); 174 | #endif 175 | 176 | return o; 177 | } 178 | 179 | fixed4 frag (v2f i) : SV_Target 180 | { 181 | float4 _Col = UNITY_ACCESS_INSTANCED_PROP(_Color_arr, _Color); 182 | fixed4 tex = tex2D(_MainTex, i.uv); 183 | fixed4 col = tex * _Col; 184 | 185 | #ifdef _LIGHTING_REAL 186 | half3 halfDir = normalize(i.lightDir + i.viewDir); 187 | half3 normal = UnpackNormal(tex2D(_BumpMap, i.uv)); 188 | half4 diff = saturate(dot(normal, i.lightDir)) * _LightColor0; 189 | half3 spec = pow(max(0, dot(normal, halfDir)), _Shininess * 128.0) * _LightColor0.rgb * tex.rgb; 190 | col.rgb = col.rgb * diff + spec; 191 | #endif 192 | 193 | // apply fog 194 | UNITY_APPLY_FOG(i.fogCoord, col); 195 | 196 | return col; 197 | } 198 | 199 | fixed4 frag_shadow(v2f i) : SV_Target { 200 | return (fixed4)0; 201 | } 202 | ENDCG 203 | 204 | SubShader 205 | { 206 | Tags { "RenderType"="Opaque" } 207 | LOD 100 208 | 209 | Pass 210 | { 211 | CGPROGRAM 212 | #pragma vertex vert 213 | #pragma fragment frag 214 | // make fog work 215 | #pragma multi_compile_fog 216 | #pragma multi_compile_instancing 217 | #pragma target 4.5 218 | #pragma shader_feature _LIGHTING_UNLIT _LIGHTING_REAL 219 | 220 | ENDCG 221 | } 222 | 223 | Pass 224 | { 225 | Name "ShadowCaster" 226 | Tags{"LightMode" = "ShadowCaster"} 227 | Zwrite On 228 | ZTest LEqual 229 | 230 | CGPROGRAM 231 | #pragma vertex vert 232 | #pragma fragment frag _shadow 233 | #pragma multi_compile_shadowcaster 234 | #pragma multi_compile_instancing 235 | #pragma target 4.5 236 | 237 | 238 | ENDCG 239 | 240 | } 241 | 242 | } 243 | 244 | } 245 | 246 | 247 | 248 | 249 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Shaders/AnimationGpuInstancing_Shadow.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 246d50507f683164e8dd1e228bc23ad9 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Shaders/Includes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e6cec0693d4be67478e9638416d34977 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Shaders/Includes/Utils.cginc: -------------------------------------------------------------------------------- 1 | #ifndef _AnimationGpuInstancing 2 | #define _AnimationGpuInstancing 3 | 4 | float4 GetUV(uint index, float4 texelSize) 5 | { 6 | float row = index / (uint)texelSize.z + 0.5; 7 | float col = index % (uint)texelSize.z + 0.5; 8 | 9 | return float4(col / texelSize.z, row / texelSize.w, 0.0, 0.0); 10 | } 11 | 12 | float4x4 GetMatrix(uint startIndex, float boneIndex, sampler2D tex, float4 texelSize) 13 | { 14 | uint index = startIndex + boneIndex * 3; 15 | 16 | float4 row0 = tex2Dlod(tex, GetUV(index, texelSize)); 17 | float4 row1 = tex2Dlod(tex, GetUV(index + 1, texelSize)); 18 | float4 row2 = tex2Dlod(tex, GetUV(index + 2, texelSize)); 19 | float4 row3 = float4(0.0, 0.0, 0.0, 1.0); 20 | 21 | return float4x4(row0, row1, row2, row3); 22 | } 23 | 24 | #endif -------------------------------------------------------------------------------- /Assets/AnimGPUInstancing/Shaders/Includes/Utils.cginc.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e19226f8acefca247a224781eb02f00c 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/CGINC.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ee69b1577e2bc354e8629769fd07e614 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/CGINC/Noises.cginc: -------------------------------------------------------------------------------- 1 | inline float Random (float2 p) 2 | { 3 | return frac( 4 | sin(dot(p, float2(12.9898, 78.233))) * 43758.5453 5 | ); 6 | } 7 | 8 | inline float2 Random2(float2 st) 9 | { 10 | st = float2( 11 | dot(st, float2(127.1, 311.7)), 12 | dot(st, float2(269.5, 183.3)) 13 | ); 14 | return -1.0 + 2.0 * frac(sin(st) * 43758.5453123); 15 | } 16 | 17 | inline float BlockNoise (float2 st) 18 | { 19 | float2 p = floor(st); 20 | return Random(p); 21 | } 22 | 23 | inline float ValueNoise (float2 st) 24 | { 25 | float2 p = floor(st); 26 | float2 f = frac(st); 27 | float2 u = f * f * (3.0 - 2.0 * f); 28 | 29 | float v_00 = Random(p + float2(0.0, 0.0)); 30 | float v_10 = Random(p + float2(1.0, 0.0)); 31 | float v_01 = Random(p + float2(0.0, 1.0)); 32 | float v_11 = Random(p + float2(1.0, 1.0)); 33 | 34 | 35 | float v_0010 = lerp(v_00, v_10, u.x); 36 | float v_0111 = lerp(v_01, v_11, u.x); 37 | return lerp(v_0010, v_0111, u.y); 38 | } 39 | 40 | inline float PerlinNoise (float2 st) 41 | { 42 | float2 p = floor(st); 43 | float2 f = frac(st); 44 | float2 u = f * f * (3.0 - 2.0 * f); 45 | 46 | float v_00 = Random2(p + float2(0.0, 0.0)); 47 | float v_10 = Random2(p + float2(1.0, 0.0)); 48 | float v_01 = Random2(p + float2(0.0, 1.0)); 49 | float v_11 = Random2(p + float2(1.0, 1.0)); 50 | 51 | float v_0010 = lerp(dot(v_00, f - float2(0.0, 0.0)), dot(v_10, f - float2(1.0, 0.0)), u.x); 52 | float v_0110 = lerp(dot(v_01, f - float2(0.0, 1.0)), dot(v_11, f - float2(1.0, 1.0)), u.x); 53 | 54 | return lerp(v_0010, v_0110, u.y) + 0.5; 55 | } 56 | 57 | 58 | 59 | inline float fBm (float2 st) 60 | { 61 | float f = 0.0; 62 | float2 q = st; 63 | 64 | f += 0.5000 * PerlinNoise(q); 65 | q *= 2.01; 66 | 67 | f += 0.2500 * PerlinNoise(q); 68 | q *= 2.02; 69 | 70 | f += 0.1250 * PerlinNoise(q); 71 | q *= 2.03; 72 | 73 | f += 0.0625 * PerlinNoise(q); 74 | q *= 2.01; 75 | 76 | return f; 77 | } 78 | 79 | 80 | /// 3D 81 | float rand(float3 co) 82 | { 83 | return frac(sin(dot(co.xyz, float3(12.9898, 78.233, 56.787))) * 43758.5453); 84 | } 85 | 86 | float Noise(float3 pos) 87 | { 88 | float3 ip = floor(pos); 89 | float3 fp = smoothstep(0, 1, frac(pos)); 90 | float4 a = float4( 91 | rand(ip + float3(0, 0, 0)), 92 | rand(ip + float3(1, 0, 0)), 93 | rand(ip + float3(0, 1, 0)), 94 | rand(ip + float3(1, 1, 0))); 95 | float4 b = float4( 96 | rand(ip + float3(0, 0, 1)), 97 | rand(ip + float3(1, 0, 1)), 98 | rand(ip + float3(0, 1, 1)), 99 | rand(ip + float3(1, 1, 1))); 100 | 101 | a = lerp(a, b, fp.z); 102 | a.xy = lerp(a.xy, a.zw, fp.y); 103 | return lerp(a.x, a.y, fp.x); 104 | } 105 | 106 | float PerlinNoise(float3 pos) 107 | { 108 | return 109 | (Noise(pos) + 110 | Noise(pos * 2 ) + 111 | Noise(pos * 4) + 112 | Noise(pos * 8) + 113 | Noise(pos * 16) + 114 | Noise(pos * 32) ) / 6; 115 | } 116 | 117 | 118 | 119 | 120 | float fbm(float3 p) 121 | { 122 | float3x3 m = float3x3( 0.00, 0.80, 0.60, 123 | -0.80, 0.36, -0.48, 124 | -0.60, -0.48, 0.64 125 | ); 126 | 127 | float f; 128 | f = 0.5000 * Noise(p); p = mul(m, p) * 2.02; 129 | f += 0.2500 * Noise(p); p = mul(m, p) * 2.03; 130 | f += 0.1250 * Noise(p); 131 | return f; 132 | } -------------------------------------------------------------------------------- /Assets/CGINC/Noises.cginc.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 503a1d1679ca5704a83ee4b950add3a3 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/CGINC/memory.cginc: -------------------------------------------------------------------------------- 1 | // UV to ID 2 | inline uint2 uvToCoord(float2 uv, uint2 textureSize) 3 | { 4 | return uv * textureSize; 5 | } 6 | 7 | inline uint coordToID(uint2 coord, uint2 textureSize) 8 | { 9 | return coord.y * textureSize.x + coord.x; 10 | } 11 | 12 | inline uint uvToID(float2 uv, uint2 textureSize) 13 | { 14 | uint2 coord = uvToCoord(uv, textureSize.xy); 15 | return coordToID(coord, textureSize); 16 | } 17 | 18 | // ID to UV 19 | inline uint2 idToCellCoord(uint id, uint textureWidth) 20 | { 21 | uint x = id % textureWidth; 22 | uint y = id / textureWidth; 23 | return uint2(x, y); 24 | } 25 | 26 | inline float2 coordToUV(uint2 coord, float2 texelSize) 27 | { 28 | return coord * texelSize.xy + texelSize.xy / 2.0; 29 | } 30 | 31 | inline float2 idToUV(uint id, float3 texelSize) 32 | { 33 | return coordToUV(idToCellCoord(id, texelSize.z), texelSize); 34 | } 35 | 36 | // convert every 3pixel to ID to express particle coord 37 | inline uint2 uvToParticleID(float2 uv, uint2 textureSize) 38 | { 39 | uint rawID = uvToID(uv, textureSize); 40 | uint particleID = rawID / 3.0; 41 | uint localOffset = rawID % 3; 42 | return uint2(particleID, localOffset); 43 | } 44 | 45 | // float to fixed4 46 | fixed4 pack(float value) 47 | { 48 | uint uintVal = asuint(value); 49 | uint4 elements = uint4(uintVal >> 0, uintVal >> 8, uintVal >> 16, uintVal >> 24); 50 | fixed4 color = ((elements & 0x000000FF) + 0.5) / 255.0; 51 | return color; 52 | } 53 | 54 | //decode fixed4 to float 55 | float unpackFloat(fixed4 col) 56 | { 57 | uint R = uint(col.r * 255) << 0; 58 | uint G = uint(col.g * 255) << 8; 59 | uint B = uint(col.b * 255) << 16; 60 | uint A = uint(col.a * 255) << 24; 61 | return asfloat(R | G | B | A); 62 | } 63 | 64 | // get pos from particle ID 65 | float3 getPos(uint particleID, sampler2D _Tex, float4 _Tex_TexelSize){ 66 | uint rawID = particleID * 3; 67 | float x = unpackFloat(tex2Dlod(_Tex, float4(idToUV(rawID, _Tex_TexelSize),0,0))); 68 | float y = unpackFloat(tex2Dlod(_Tex, float4(idToUV(rawID+1, _Tex_TexelSize),0,0))); 69 | float z = unpackFloat(tex2Dlod(_Tex, float4(idToUV(rawID+2, _Tex_TexelSize),0,0))); 70 | return float3(x,y,z); 71 | } -------------------------------------------------------------------------------- /Assets/CGINC/memory.cginc.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c83b284fb81b97d4cb5af8ca570496d5 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/CGINC/util.cginc: -------------------------------------------------------------------------------- 1 | inline float3 RGB(float r, float g, float b) 2 | { 3 | return float3(r/255.0, g/255.0, b/255.0); 4 | } 5 | 6 | inline float3 hsv(float h, float s, float v){ 7 | float4 t = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); 8 | float3 p = abs(frac(float3(h,h,h) + t.xyz) * 6.0 - float3(t.w, t.w, t.w)); 9 | return v * lerp(float3(t.x, t.x, t.x), clamp(p - float3(t.x, t.x, t.x), 0.0, 1.0), s); 10 | } -------------------------------------------------------------------------------- /Assets/CGINC/util.cginc.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9850f36a62bc23347b6ecb817d1a5528 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/WorkSpace.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 39e918c1d75230340890f537ef7170a5 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/WorkSpace/Materials.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c97a672b3ee5ac140bc5db28df5e423c 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/WorkSpace/Prefabs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 54d9fced4eb25eb419a1e816f4ae5302 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/WorkSpace/Scenes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7b031ac60c796e746abc5fd8cb51d6eb 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/WorkSpace/Scenes/Ch01.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8abcc41b9a4602e46b5a48ebd7080673 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/WorkSpace/Scenes/Kon SMR.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 199e5babb07f8a94b95c5036675906c1 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/WorkSpace/Scenes/Kon.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 197c9c6f78f0079408308a083ebc7b9d 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/WorkSpace/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7af175cc32593ba43a17450335009d14 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/WorkSpace/Shaders.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 495d483dfd9c92e41a29e81364894453 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Documents/Figures/agi_debugger.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:67774238c703bda8e1971023989b12f3be0455dc3ec8fc8e4a37a953592aaa35 3 | size 31630 4 | -------------------------------------------------------------------------------- /Documents/Figures/agi_statistics.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:78737fe884b8af68ae7d509c2323c84060fef04c159e5c2ab6a71f6b5a5040b2 3 | size 972220 4 | -------------------------------------------------------------------------------- /Documents/Figures/smr_debugger.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:d1d07200536e27f27e8cafdf95ce2b73f71d2b6d65aa690b16abf59190f84658 3 | size 31190 4 | -------------------------------------------------------------------------------- /Documents/Figures/smr_statistics.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:bfe7d09bf3c2a4262c588c0ba9292eda9378b2d2b9020c3ad4a04d24186ccbfe 3 | size 992738 4 | -------------------------------------------------------------------------------- /Documents/tips.md: -------------------------------------------------------------------------------- 1 | # Tips 2 | 3 | ## SkinnedMeshRenderの数について 4 | - 1つのキャラクターに対して1つのSkinnedMeshRenderが推奨 5 | - 複数のSMRを持つアバターでも変換可能だが,その分負荷は大きくなる 6 | 7 | 8 | ## 用意してるShader説明 9 | - Base: Unlit風 10 | - 一番軽い.お試しとしても 11 | - Base_Shader: Unlit風 + Cast Shadow対応(SetPass Callsが増える) 12 | - キャラクターの足元に影が描画される.100体出しても負荷的に気にならないのでおすすめ 13 | 14 | 15 | ## カスタムシェーダー 16 | - 独自にエフェクトをかけたい人向け 17 | - AnimGPUInstancing/Shadersフォルダにshaderを置くことで,エディタ拡張側でShaderを選択できるようになる. 18 | 19 | 20 | # できないこと(WIP) 21 | - VRCInstancingのランダムスポーンはローカルのためプレイヤーごとに同期していない 22 | - 特定スポーンなら位置とアニメーションの種類はある程度制御できるが完全ではない 23 | - Boundsが固定(Mesh自体は動いていないため).シューティングやバトル用のモブキャラには非対応 -------------------------------------------------------------------------------- /Documents/usage_basic.md: -------------------------------------------------------------------------------- 1 | # Usage - 基本操作 2 | 3 | ## Animation Mesh Generator (Unityエディタ拡張)を開く 4 | - VRCU_AnimationGPUInstancing.unitypackageをProjectにインストール後, 5 | 上記タブの中にあるWindow/Extension Tools/Animation Mesh Generatorをクリックする. 6 | 7 | ![image](https://user-images.githubusercontent.com/44863813/133994399-beb9b4f5-660f-4171-9109-8c2f7de3f7d0.png) 8 | 9 | ## インスタンシングしたいキャラクターを準備する 10 | 1. SkinnedMeshRendererを持ったキャラクターをHierarchyに置く. 11 | - 今回は[Space Robot Kyle](https://assetstore.unity.com/packages/3d/characters/robots/space-robot-kyle-4696?locale=ja-JP)を使う(使いやすくておススメ) 12 | - もしprefabしたオブジェクトだったら,"Unpack prefab"しておく. 13 | 14 | 2. Animatorを1.のキャラクターに追加する 15 | - 一番上の階層に追加すればOK 16 | 17 | 3. Animation Clipsを用意する 18 | - 今回は[Mixamo](https://www.mixamo.com/)というサイトからアニメーションをダウンロードする(こちらもおススメ) 19 | - 欲しいモーションを検索し,右側のDOWNLOADをクリック.fbx形式でダウンロードできる. 20 | 21 | ![image](https://user-images.githubusercontent.com/44863813/133996027-d377573c-2e85-47d8-808a-2e14595ea9d2.png) 22 | - 得られたfbxをAssetsに追加してクリックし,Inspectorに表示された設定項目において,"Rig"を"Humanoid"に変更して"Apply"をクリック 23 | 24 | ![image](https://user-images.githubusercontent.com/44863813/133996551-434ce391-1c01-47f6-bd6e-9dbb5ad3d093.png) 25 | 26 | - fbxの中身を展開し,clipをAnimator側にD&Dする.分かりやすいように名前を変更しておく. 27 | 28 | - 複数のアニメーションを想定する場合は,下図のようにする.これらのclipはバラバラに設置してOK 29 | 30 | ![image](https://user-images.githubusercontent.com/44863813/133996983-87ea1780-2a28-4b47-b283-1a1985a8dff6.png) 31 | 32 | 4. AnimationFrameInfoList.prefabを1.のキャラクターに追加する 33 | - AnimGPUInstancing/Prefabs/AnimationFrameInfoList.prefab 34 | - 下図のようになってればOK 35 | 36 | ![image](https://user-images.githubusercontent.com/44863813/133997471-458ba480-91f4-40be-bf08-330cc2513b6b.png) 37 | 38 | 5. 1~4で作成したオブジェクトをprefab化させる. 39 | - Hierarchy側から好きなAssetsのディレクトリにD&Dする. 40 | 41 | 6. Animation Mesh Generatorウィンドウ内の"Prefab"の中に5で作成したprefabをD&Dする 42 | - 各種設定項目がでる.1~5に問題があればこの時点で警告が出る. 43 | 44 | ![image](https://user-images.githubusercontent.com/44863813/134009209-558c0ecb-988a-40cc-8e81-c1a6faf82b9a.png) 45 | 46 | 7. 設定を確認後,Convertをクリック 47 | - 5のディレクトリ内に変換されたprefabやマテリアルなどが作成される. 48 | 49 | 8. 作成されたRobot Kyle_Anim.prefabをHierarchyにD&Dする. 50 | 51 | ## 動作確認 52 | - Robot Kyle.prefabを変換したRobot Kyle_Anim.prefabにUdon Behabiourが追加されている.これは4で追加したAnimationFrameInfoListにアニメーションの情報を書き込まれたものである. 53 | - Frame InfoのサイズはAnimation Clipsの数に対応する. 54 | - 各アニメーションの情報がVector4形式で値が格納されている.それぞれ[Start Frame,Frame Count,Repeat Start Frame,Repeat Max]であり,マテリアルの設定で使用する. 55 | 56 | ![image](https://user-images.githubusercontent.com/44863813/133998525-248b656f-5ea6-4742-85ca-b3f3b082e373.png) 57 | 58 | - 一つ下の階層のMeshRendererに付随するマテリアルに各種アニメーション用パラメータを与える.今回は1つめのアニメーションの[Start Frame, Frame Count]してみる(Repeat ~~のApply Root Motionする時に必要) 59 | 60 | ![image](https://user-images.githubusercontent.com/44863813/134000330-c282ec53-4484-4c12-96a3-3c62583d34de.png) 61 | 62 | - 実行ボタンを押した際にアニメーションが再生されていればOK 63 | 64 | ![robot_basic_3](https://user-images.githubusercontent.com/44863813/134001845-17c29ad5-c98e-4660-b0e7-1abcefbb3339.gif) 65 | -------------------------------------------------------------------------------- /Documents/usage_locomotion_spawn.md: -------------------------------------------------------------------------------- 1 | # Usage - 歩行スポーン 2 | 3 | GPU Instancing対応させたキャラクターを用いて歩行モーションをランダムスポーンさせる方法について述べる. 4 | 5 | - 歩行などのモーションはAnimation Clipが繰り返されるたびに全体が移動するのが自然である. 6 | - エディタ拡張はAnimation Textureの他に,ルート移動量を書き込んだRepeat Textureも生成する.これを用いることでAnimatorの設定である"Apply Root Motion"に対応させる 7 | 8 | **BOOTHでサンプル付きを購入された方は既にセットアップ済みのSceneがある** 9 | - AnimGPUInstancing/Sample/Scenes/Locomotion.unityのシーンを開いて実行すると確認できる. 10 | 11 | ![locomotion_spawn_001](https://user-images.githubusercontent.com/44863813/134013760-7d80e13f-5d22-4a7d-9819-4c5fb8f9a093.gif) 12 | (100体クローン,位置・回転・スケールのランダム設定,1つのアニメーションランダム再生,1つのアニメーションを20回繰り返したら初期位置まで戻る) 13 | 14 | ## インスタンシングしたいキャラクターを準備する 15 | - [基本操作](usage_basic.md)参照 16 | 17 | - マテリアル設定について確認する 18 | 19 | ![image](https://user-images.githubusercontent.com/44863813/134015008-bff22615-14d2-4822-89be-7baa16c80e9f.png) 20 | 21 | - Apply Root Motionにチェックを入れると,残りの設定欄が開く 22 | - Repeat Start Texture: Repeat Textureを参照する位置を設定する.Animation Frame Info ListのVector4.zを入力する 23 | - Repeat Max: テクスチャに書き込んだ最大リピート回数.Animation Frame Info ListのVector4.wを入力する 24 | - Repeat Num: アニメーションの実際のリピート回数 25 | 26 | ## AGI_SpawnRandom.prefabをHierarchyに置く 27 | ![image](https://user-images.githubusercontent.com/44863813/134013948-6cce2f1e-e030-4d75-977b-0fc2cafc5dd3.png) 28 | 29 | 30 | ### パラメータ説明 31 | 32 | - General Parameters 33 | - Anim Character: 指定したキャラクターを設定する 34 | - Animation Frame Info List: 指定したキャラクターを設定する 35 | 36 | - Random Spawn 37 | - Spawn Num: スポーンさせる数 38 | - Random X : スポーン範囲(X方向) 39 | - 10ならばX座標方向-10 ~ 10の範囲にスポーンする  40 | - Random Y: スポーン範囲(Y方向) 41 | - Random Z: スポーン範囲(Z方向) 42 | - Random Rotation: 回転範囲(Y方向) 43 | - 30ならばY方向周りに-30~30度回転してスポーンする 44 | 45 | - Apply Root Motion for Locomotion (今回使用する) 46 | - Apply Root Motion: チェックをいれるとルートモーションが適用される 47 | - Repeat Num: アニメーションの実際のリピート回数 48 | 49 | 50 | ## 動作確認 51 | - 実行するかVRChatのワールドとしてアップロードすることで確認できる. 52 | -------------------------------------------------------------------------------- /Documents/usage_points_spawn.md: -------------------------------------------------------------------------------- 1 | # Usage - 指定位置にスポーン 2 | 3 | GPU Instancing対応させたキャラクターを用いて指定位置にスポーンさせる方法について述べる. 4 | 5 | - スポーン位置やアニメーションをある程度制御した上でAnimation GPU Instancingしたいケースを想定している. 6 | - VRChatのワールド作成に利用する場合はこのケースが多いと思われる 7 | 8 | 9 | BOOTHでサンプル付きを購入された方は既にセットアップ済みのSceneがある 10 | - AnimGPUInstancing/Sample/Scenes/SpawnPoints.unityのシーンを開いて実行すると確認できる. 11 | 12 | ![points_spawn_002](https://user-images.githubusercontent.com/44863813/134020415-45f26eed-1f6b-4da8-b4f1-981646ec62b3.gif) 13 | (3つのアニメーション,指定した位置で任意のアニメーションを再生) 14 | 15 | ## インスタンシングしたいキャラクターを準備する 16 | - [基本操作](usage_basic.md)参照 17 | 18 | ## スポーン位置を作成する 19 | ![image](https://user-images.githubusercontent.com/44863813/134020675-afa708ab-fb7d-45d3-b311-5e2cc0b6624c.png) 20 | - 用意したアニメーションごとに空のGameObjectを作成(Anim 0, Anim 1, Anim 2などと付けることにする) 21 | - それぞれのGameObjectの子供にスポーンさせた位置を表す空のGameObjectを置く 22 | - 空のGameObjectの位置・回転・スケールがスポーンされるキャラクターに反映される 23 | 24 | ## AGI_SpawnPoints.prefabをHierarchyに置く 25 | ![image](https://user-images.githubusercontent.com/44863813/134021111-ca6a0f6c-27f6-4d44-89c0-05fa202b3f71.png) 26 | 27 | ### パラメータ説明 28 | 29 | - General Parameters 30 | - Anim Character: 指定したキャラクターを設定する 31 | - Animation Frame Info List: 指定したキャラクターを設定する 32 | 33 | - Spawn Points 34 | - Spawn Points: サイズはアニメーションの数と合わせる 35 | - Elements 0, 1, 2, ...: それぞれに上記で用意したGamaObject群を設定する 36 | - ex.) Anim 0 の位置にAnimation 0をするキャラクターをスポーン 37 | 38 | - Apply Root Motion for Locomotion 39 | - Apply Root Motion: チェックをいれるとルートモーションが適用される 40 | - Repeat Num: アニメーションの実際のリピート回数 41 | 42 | 43 | ## 動作確認 44 | - 実行するかVRChatのワールドとしてアップロードすることで確認できる. 45 | -------------------------------------------------------------------------------- /Documents/usage_random_spawn.md: -------------------------------------------------------------------------------- 1 | # Usage - ランダムスポーン 2 | 3 | GPU Instancing対応させたキャラクターを用いてランダムスポーンさせる方法について述べる. 4 | 5 | **BOOTHでサンプル付きを購入された方は既にセットアップ済みのSceneがある** 6 | - AnimGPUInstancing/Sample/Scenes/SpawnRandom.unityのシーンを開いて実行すると確認できる. 7 | 8 | ![usage_random_spawn_003](https://user-images.githubusercontent.com/44863813/134010915-a59af70c-7827-4249-8c4d-0c5e06b1fcc5.gif) 9 | (100体クローン,位置・回転・スケールのランダム設定,3つのアニメーションランダム再生) 10 | 11 | ## インスタンシングしたいキャラクターを準備する 12 | - [基本操作](usage_basic.md)参照 13 | 14 | ## AGI_SpawnRandom.prefabをHierarchyに置く 15 | ![image](https://user-images.githubusercontent.com/44863813/134011195-a4e825b2-f04c-440b-855f-57a8064408fa.png) 16 | 17 | ### パラメータ説明 18 | 19 | - General Parameters 20 | - Anim Character: 指定したキャラクターを設定する 21 | - Animation Frame Info List: 指定したキャラクターを設定する 22 | 23 | - Random Spawn 24 | - Spawn Num: スポーンさせる数 25 | - Random X : スポーン範囲(X方向) 26 | - 10ならばX座標方向-10 ~ 10の範囲にスポーンする  27 | - Random Y: スポーン範囲(Y方向) 28 | - Random Z: スポーン範囲(Z方向) 29 | - Random Rotation: 回転範囲(Y方向) 30 | - 30ならばY方向周りに-30~30度回転してスポーンする 31 | 32 | - Apply Root Motion for Locomotion (今回は使用しない) 33 | - Apply Root Motion: チェックをいれるとルートモーションが適用される 34 | - Repeat Num: ルートモーション含めたアニメーションの回数 35 | 36 | 37 | ## 動作確認 38 | - 実行するかVRChatのワールドとしてアップロードすることで確認できる. 39 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 chootana 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Packages/com.vrchat.vrcsdk3/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b5f8964b0ccc8a043a98bd5b10d79e32 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Packages/com.vrchat.vrcsdk3/Editor/UPMImporter.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6ef4e42bd80077a42a8c70bad43c4e5b 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Packages/com.vrchat.vrcsdk3/Editor/UPMImporter/UPMImporter.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using System.Linq; 3 | using UnityEditor; 4 | using UnityEditor.PackageManager; 5 | using UnityEditor.PackageManager.Requests; 6 | using UnityEngine; 7 | 8 | namespace VRC.Udon.Editor { 9 | [InitializeOnLoad] 10 | public class UPMImporter 11 | { 12 | // Add packages here to auto-import 13 | public static string[] requiredPackages = 14 | { 15 | #if UNITY_2019_3_OR_NEWER 16 | "com.unity.cinemachine@2.8.0", 17 | "com.unity.postprocessing@3.1.1", 18 | "com.unity.textmeshpro@2.1.6", 19 | "com.unity.modules.androidjni@1.0.0", 20 | "com.unity.timeline@1.2.18", 21 | "com.unity.ugui@1.0.0", 22 | "com.unity.test-framework@1.1.27", 23 | "com.unity.package-manager-ui@2.2.0", 24 | #else 25 | "com.unity.cinemachine@2.6.1", 26 | "com.unity.postprocessing@3.0.3", 27 | "com.unity.textmeshpro@1.5.1", 28 | #endif 29 | }; 30 | 31 | private static ListRequest list; 32 | 33 | static UPMImporter() 34 | { 35 | list = Client.List(); 36 | EditorApplication.update += Update; 37 | } 38 | 39 | public static void Update() 40 | { 41 | // Exit early if we're still gathering the list 42 | if (!list.IsCompleted) return; 43 | 44 | // Unsubscribe from Update once the list is ready 45 | EditorApplication.update -= Update; 46 | 47 | var localPackages = list.Result; 48 | bool importedNewPackage = false; 49 | foreach (string packageName in requiredPackages) 50 | { 51 | if(localPackages.All(p => $"{p.name}@{p.version}" != packageName)) 52 | { 53 | Install(packageName); 54 | importedNewPackage = true; 55 | } 56 | } 57 | 58 | // if Unity tried to import SDK3 before required packages, it will have old errors showing. 59 | //if(importedNewPackage) ClearLog(); 60 | } 61 | 62 | public static bool Install(string id) 63 | { 64 | var request = Client.Add(id); 65 | while (!request.IsCompleted) {}; 66 | if(request.Error != null)Debug.LogError(request.Error.message); 67 | return request.Error == null; 68 | } 69 | 70 | public static void ClearLog() 71 | { 72 | System.Reflection.Assembly assembly = System.Reflection.Assembly.GetAssembly(typeof(SceneView)); 73 | 74 | System.Type type = assembly.GetType("UnityEditor.LogEntries"); 75 | System.Reflection.MethodInfo method = type.GetMethod("Clear"); 76 | method.Invoke(new object(), null); 77 | } 78 | 79 | } 80 | 81 | } 82 | -------------------------------------------------------------------------------- /Packages/com.vrchat.vrcsdk3/Editor/UPMImporter/UPMImporter.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1056c67d11ce3ce41b80a979e05732c4 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Packages/com.vrchat.vrcsdk3/Editor/UPMImporter/VRC.Udon.Editor.UPMImporter.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "VRC.Udon.Editor.UPMImporter", 3 | "references": [ 4 | "VRC.Udon.Editor" 5 | ], 6 | "optionalUnityReferences": [], 7 | "includePlatforms": [ 8 | "Editor" 9 | ], 10 | "excludePlatforms": [], 11 | "allowUnsafeCode": false, 12 | "overrideReferences": false, 13 | "precompiledReferences": [], 14 | "autoReferenced": true, 15 | "defineConstraints": [] 16 | } -------------------------------------------------------------------------------- /Packages/com.vrchat.vrcsdk3/Editor/UPMImporter/VRC.Udon.Editor.UPMImporter.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4704b64fff8057d49a97d061be599eea 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Packages/com.vrchat.vrcsdk3/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "com.vrchat.vrcsdk3", 3 | "displayName" : "VRChat SDK3 - Worlds", 4 | "version" : "2020.3.2", 5 | "unity" : "2018.4", 6 | "description" : "SDK 3 with Udon, our in-house node-based scripting language for awesome interactivity!" 7 | } -------------------------------------------------------------------------------- /Packages/com.vrchat.vrcsdk3/package.json.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6d4603f5cd56d5f4289993be967b5ef2 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Packages/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.unity.cinemachine": "2.8.0", 4 | "com.unity.collab-proxy": "1.6.0", 5 | "com.unity.ide.rider": "1.2.1", 6 | "com.unity.ide.visualstudio": "2.0.9", 7 | "com.unity.ide.vscode": "1.2.3", 8 | "com.unity.package-manager-ui": "2.2.0", 9 | "com.unity.postprocessing": "3.1.1", 10 | "com.unity.recorder": "2.5.5", 11 | "com.unity.test-framework": "1.1.27", 12 | "com.unity.textmeshpro": "2.1.6", 13 | "com.unity.timeline": "1.2.18", 14 | "com.unity.ugui": "1.0.0", 15 | "com.unity.xr.oculus.standalone": "2.38.4", 16 | "com.unity.xr.openvr.standalone": "2.0.5", 17 | "com.unity.modules.ai": "1.0.0", 18 | "com.unity.modules.androidjni": "1.0.0", 19 | "com.unity.modules.animation": "1.0.0", 20 | "com.unity.modules.assetbundle": "1.0.0", 21 | "com.unity.modules.audio": "1.0.0", 22 | "com.unity.modules.cloth": "1.0.0", 23 | "com.unity.modules.director": "1.0.0", 24 | "com.unity.modules.imageconversion": "1.0.0", 25 | "com.unity.modules.imgui": "1.0.0", 26 | "com.unity.modules.jsonserialize": "1.0.0", 27 | "com.unity.modules.particlesystem": "1.0.0", 28 | "com.unity.modules.physics": "1.0.0", 29 | "com.unity.modules.physics2d": "1.0.0", 30 | "com.unity.modules.screencapture": "1.0.0", 31 | "com.unity.modules.terrain": "1.0.0", 32 | "com.unity.modules.terrainphysics": "1.0.0", 33 | "com.unity.modules.tilemap": "1.0.0", 34 | "com.unity.modules.ui": "1.0.0", 35 | "com.unity.modules.uielements": "1.0.0", 36 | "com.unity.modules.umbra": "1.0.0", 37 | "com.unity.modules.unityanalytics": "1.0.0", 38 | "com.unity.modules.unitywebrequest": "1.0.0", 39 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 40 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 41 | "com.unity.modules.unitywebrequesttexture": "1.0.0", 42 | "com.unity.modules.unitywebrequestwww": "1.0.0", 43 | "com.unity.modules.vehicles": "1.0.0", 44 | "com.unity.modules.video": "1.0.0", 45 | "com.unity.modules.vr": "1.0.0", 46 | "com.unity.modules.wind": "1.0.0", 47 | "com.unity.modules.xr": "1.0.0" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Packages/packages-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.unity.cinemachine": { 4 | "version": "2.8.0", 5 | "depth": 0, 6 | "source": "registry", 7 | "dependencies": {}, 8 | "url": "https://packages.unity.com" 9 | }, 10 | "com.unity.collab-proxy": { 11 | "version": "1.6.0", 12 | "depth": 0, 13 | "source": "registry", 14 | "dependencies": {}, 15 | "url": "https://packages.unity.com" 16 | }, 17 | "com.unity.ext.nunit": { 18 | "version": "1.0.6", 19 | "depth": 1, 20 | "source": "registry", 21 | "dependencies": {}, 22 | "url": "https://packages.unity.com" 23 | }, 24 | "com.unity.ide.rider": { 25 | "version": "1.2.1", 26 | "depth": 0, 27 | "source": "registry", 28 | "dependencies": { 29 | "com.unity.test-framework": "1.1.1" 30 | }, 31 | "url": "https://packages.unity.com" 32 | }, 33 | "com.unity.ide.visualstudio": { 34 | "version": "2.0.9", 35 | "depth": 0, 36 | "source": "registry", 37 | "dependencies": { 38 | "com.unity.test-framework": "1.1.9" 39 | }, 40 | "url": "https://packages.unity.com" 41 | }, 42 | "com.unity.ide.vscode": { 43 | "version": "1.2.3", 44 | "depth": 0, 45 | "source": "registry", 46 | "dependencies": {}, 47 | "url": "https://packages.unity.com" 48 | }, 49 | "com.unity.package-manager-ui": { 50 | "version": "2.2.0", 51 | "depth": 0, 52 | "source": "builtin", 53 | "dependencies": {} 54 | }, 55 | "com.unity.postprocessing": { 56 | "version": "3.1.1", 57 | "depth": 0, 58 | "source": "registry", 59 | "dependencies": { 60 | "com.unity.modules.physics": "1.0.0" 61 | }, 62 | "url": "https://packages.unity.com" 63 | }, 64 | "com.unity.recorder": { 65 | "version": "2.5.5", 66 | "depth": 0, 67 | "source": "registry", 68 | "dependencies": { 69 | "com.unity.timeline": "1.0.0" 70 | }, 71 | "url": "https://packages.unity.com" 72 | }, 73 | "com.unity.test-framework": { 74 | "version": "1.1.27", 75 | "depth": 0, 76 | "source": "registry", 77 | "dependencies": { 78 | "com.unity.ext.nunit": "1.0.6", 79 | "com.unity.modules.imgui": "1.0.0", 80 | "com.unity.modules.jsonserialize": "1.0.0" 81 | }, 82 | "url": "https://packages.unity.com" 83 | }, 84 | "com.unity.textmeshpro": { 85 | "version": "2.1.6", 86 | "depth": 0, 87 | "source": "registry", 88 | "dependencies": { 89 | "com.unity.ugui": "1.0.0" 90 | }, 91 | "url": "https://packages.unity.com" 92 | }, 93 | "com.unity.timeline": { 94 | "version": "1.2.18", 95 | "depth": 0, 96 | "source": "registry", 97 | "dependencies": { 98 | "com.unity.modules.director": "1.0.0", 99 | "com.unity.modules.animation": "1.0.0", 100 | "com.unity.modules.audio": "1.0.0", 101 | "com.unity.modules.particlesystem": "1.0.0" 102 | }, 103 | "url": "https://packages.unity.com" 104 | }, 105 | "com.unity.ugui": { 106 | "version": "1.0.0", 107 | "depth": 0, 108 | "source": "builtin", 109 | "dependencies": { 110 | "com.unity.modules.ui": "1.0.0", 111 | "com.unity.modules.imgui": "1.0.0" 112 | } 113 | }, 114 | "com.unity.xr.oculus.standalone": { 115 | "version": "2.38.4", 116 | "depth": 0, 117 | "source": "registry", 118 | "dependencies": {}, 119 | "url": "https://packages.unity.com" 120 | }, 121 | "com.unity.xr.openvr.standalone": { 122 | "version": "2.0.5", 123 | "depth": 0, 124 | "source": "registry", 125 | "dependencies": {}, 126 | "url": "https://packages.unity.com" 127 | }, 128 | "com.vrchat.vrcsdk3": { 129 | "version": "file:com.vrchat.vrcsdk3", 130 | "depth": 0, 131 | "source": "embedded", 132 | "dependencies": {} 133 | }, 134 | "com.unity.modules.ai": { 135 | "version": "1.0.0", 136 | "depth": 0, 137 | "source": "builtin", 138 | "dependencies": {} 139 | }, 140 | "com.unity.modules.androidjni": { 141 | "version": "1.0.0", 142 | "depth": 0, 143 | "source": "builtin", 144 | "dependencies": {} 145 | }, 146 | "com.unity.modules.animation": { 147 | "version": "1.0.0", 148 | "depth": 0, 149 | "source": "builtin", 150 | "dependencies": {} 151 | }, 152 | "com.unity.modules.assetbundle": { 153 | "version": "1.0.0", 154 | "depth": 0, 155 | "source": "builtin", 156 | "dependencies": {} 157 | }, 158 | "com.unity.modules.audio": { 159 | "version": "1.0.0", 160 | "depth": 0, 161 | "source": "builtin", 162 | "dependencies": {} 163 | }, 164 | "com.unity.modules.cloth": { 165 | "version": "1.0.0", 166 | "depth": 0, 167 | "source": "builtin", 168 | "dependencies": { 169 | "com.unity.modules.physics": "1.0.0" 170 | } 171 | }, 172 | "com.unity.modules.director": { 173 | "version": "1.0.0", 174 | "depth": 0, 175 | "source": "builtin", 176 | "dependencies": { 177 | "com.unity.modules.audio": "1.0.0", 178 | "com.unity.modules.animation": "1.0.0" 179 | } 180 | }, 181 | "com.unity.modules.imageconversion": { 182 | "version": "1.0.0", 183 | "depth": 0, 184 | "source": "builtin", 185 | "dependencies": {} 186 | }, 187 | "com.unity.modules.imgui": { 188 | "version": "1.0.0", 189 | "depth": 0, 190 | "source": "builtin", 191 | "dependencies": {} 192 | }, 193 | "com.unity.modules.jsonserialize": { 194 | "version": "1.0.0", 195 | "depth": 0, 196 | "source": "builtin", 197 | "dependencies": {} 198 | }, 199 | "com.unity.modules.particlesystem": { 200 | "version": "1.0.0", 201 | "depth": 0, 202 | "source": "builtin", 203 | "dependencies": {} 204 | }, 205 | "com.unity.modules.physics": { 206 | "version": "1.0.0", 207 | "depth": 0, 208 | "source": "builtin", 209 | "dependencies": {} 210 | }, 211 | "com.unity.modules.physics2d": { 212 | "version": "1.0.0", 213 | "depth": 0, 214 | "source": "builtin", 215 | "dependencies": {} 216 | }, 217 | "com.unity.modules.screencapture": { 218 | "version": "1.0.0", 219 | "depth": 0, 220 | "source": "builtin", 221 | "dependencies": { 222 | "com.unity.modules.imageconversion": "1.0.0" 223 | } 224 | }, 225 | "com.unity.modules.subsystems": { 226 | "version": "1.0.0", 227 | "depth": 1, 228 | "source": "builtin", 229 | "dependencies": { 230 | "com.unity.modules.jsonserialize": "1.0.0" 231 | } 232 | }, 233 | "com.unity.modules.terrain": { 234 | "version": "1.0.0", 235 | "depth": 0, 236 | "source": "builtin", 237 | "dependencies": {} 238 | }, 239 | "com.unity.modules.terrainphysics": { 240 | "version": "1.0.0", 241 | "depth": 0, 242 | "source": "builtin", 243 | "dependencies": { 244 | "com.unity.modules.physics": "1.0.0", 245 | "com.unity.modules.terrain": "1.0.0" 246 | } 247 | }, 248 | "com.unity.modules.tilemap": { 249 | "version": "1.0.0", 250 | "depth": 0, 251 | "source": "builtin", 252 | "dependencies": { 253 | "com.unity.modules.physics2d": "1.0.0" 254 | } 255 | }, 256 | "com.unity.modules.ui": { 257 | "version": "1.0.0", 258 | "depth": 0, 259 | "source": "builtin", 260 | "dependencies": {} 261 | }, 262 | "com.unity.modules.uielements": { 263 | "version": "1.0.0", 264 | "depth": 0, 265 | "source": "builtin", 266 | "dependencies": { 267 | "com.unity.modules.imgui": "1.0.0", 268 | "com.unity.modules.jsonserialize": "1.0.0" 269 | } 270 | }, 271 | "com.unity.modules.umbra": { 272 | "version": "1.0.0", 273 | "depth": 0, 274 | "source": "builtin", 275 | "dependencies": {} 276 | }, 277 | "com.unity.modules.unityanalytics": { 278 | "version": "1.0.0", 279 | "depth": 0, 280 | "source": "builtin", 281 | "dependencies": { 282 | "com.unity.modules.unitywebrequest": "1.0.0", 283 | "com.unity.modules.jsonserialize": "1.0.0" 284 | } 285 | }, 286 | "com.unity.modules.unitywebrequest": { 287 | "version": "1.0.0", 288 | "depth": 0, 289 | "source": "builtin", 290 | "dependencies": {} 291 | }, 292 | "com.unity.modules.unitywebrequestassetbundle": { 293 | "version": "1.0.0", 294 | "depth": 0, 295 | "source": "builtin", 296 | "dependencies": { 297 | "com.unity.modules.assetbundle": "1.0.0", 298 | "com.unity.modules.unitywebrequest": "1.0.0" 299 | } 300 | }, 301 | "com.unity.modules.unitywebrequestaudio": { 302 | "version": "1.0.0", 303 | "depth": 0, 304 | "source": "builtin", 305 | "dependencies": { 306 | "com.unity.modules.unitywebrequest": "1.0.0", 307 | "com.unity.modules.audio": "1.0.0" 308 | } 309 | }, 310 | "com.unity.modules.unitywebrequesttexture": { 311 | "version": "1.0.0", 312 | "depth": 0, 313 | "source": "builtin", 314 | "dependencies": { 315 | "com.unity.modules.unitywebrequest": "1.0.0", 316 | "com.unity.modules.imageconversion": "1.0.0" 317 | } 318 | }, 319 | "com.unity.modules.unitywebrequestwww": { 320 | "version": "1.0.0", 321 | "depth": 0, 322 | "source": "builtin", 323 | "dependencies": { 324 | "com.unity.modules.unitywebrequest": "1.0.0", 325 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 326 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 327 | "com.unity.modules.audio": "1.0.0", 328 | "com.unity.modules.assetbundle": "1.0.0", 329 | "com.unity.modules.imageconversion": "1.0.0" 330 | } 331 | }, 332 | "com.unity.modules.vehicles": { 333 | "version": "1.0.0", 334 | "depth": 0, 335 | "source": "builtin", 336 | "dependencies": { 337 | "com.unity.modules.physics": "1.0.0" 338 | } 339 | }, 340 | "com.unity.modules.video": { 341 | "version": "1.0.0", 342 | "depth": 0, 343 | "source": "builtin", 344 | "dependencies": { 345 | "com.unity.modules.audio": "1.0.0", 346 | "com.unity.modules.ui": "1.0.0", 347 | "com.unity.modules.unitywebrequest": "1.0.0" 348 | } 349 | }, 350 | "com.unity.modules.vr": { 351 | "version": "1.0.0", 352 | "depth": 0, 353 | "source": "builtin", 354 | "dependencies": { 355 | "com.unity.modules.jsonserialize": "1.0.0", 356 | "com.unity.modules.physics": "1.0.0", 357 | "com.unity.modules.xr": "1.0.0" 358 | } 359 | }, 360 | "com.unity.modules.wind": { 361 | "version": "1.0.0", 362 | "depth": 0, 363 | "source": "builtin", 364 | "dependencies": {} 365 | }, 366 | "com.unity.modules.xr": { 367 | "version": "1.0.0", 368 | "depth": 0, 369 | "source": "builtin", 370 | "dependencies": { 371 | "com.unity.modules.physics": "1.0.0", 372 | "com.unity.modules.jsonserialize": "1.0.0", 373 | "com.unity.modules.subsystems": "1.0.0" 374 | } 375 | } 376 | } 377 | } 378 | -------------------------------------------------------------------------------- /ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Volume: 1 8 | Rolloff Scale: 1 9 | Doppler Factor: 1 10 | Default Speaker Mode: 2 11 | m_SampleRate: 48000 12 | m_DSPBufferSize: 1024 13 | m_VirtualVoiceCount: 64 14 | m_RealVoiceCount: 32 15 | m_EnableOutputSuspension: 1 16 | m_SpatializerPlugin: OculusSpatializer 17 | m_AmbisonicDecoderPlugin: OculusSpatializer 18 | m_DisableAudio: 0 19 | m_VirtualizeEffects: 1 20 | m_RequestedDSPBufferSize: 0 21 | -------------------------------------------------------------------------------- /ProjectSettings/ClusterInputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!236 &1 4 | ClusterInputManager: 5 | m_ObjectHideFlags: 0 6 | m_Inputs: [] 7 | -------------------------------------------------------------------------------- /ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 13 7 | m_Gravity: {x: 0, y: -9.81, z: 0} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_BounceThreshold: 2 10 | m_SleepThreshold: 0.005 11 | m_DefaultContactOffset: 0.01 12 | m_DefaultSolverIterations: 6 13 | m_DefaultSolverVelocityIterations: 1 14 | m_QueriesHitBackfaces: 0 15 | m_QueriesHitTriggers: 1 16 | m_EnableAdaptiveForce: 0 17 | m_ClothInterCollisionDistance: 0 18 | m_ClothInterCollisionStiffness: 0 19 | m_ContactsGeneration: 1 20 | m_LayerCollisionMatrix: dfafffffdfafffffdfafffffffffffffdfafffffc800c0ffffffffffffffffffdfafffffdf09fcffdf09fcffdfafffffc800c0ffdfe9c3ffc820c0ffdfa9ffffdfa9ffffdfa9ffffdf8fffffdf8fffffdf8fffffdf8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 21 | m_AutoSimulation: 1 22 | m_AutoSyncTransforms: 0 23 | m_ReuseCollisionCallbacks: 1 24 | m_ClothInterCollisionSettingsToggle: 0 25 | m_ClothGravity: {x: 0, y: -9.81, z: 0} 26 | m_ContactPairsMode: 0 27 | m_BroadphaseType: 0 28 | m_WorldBounds: 29 | m_Center: {x: 0, y: 0, z: 0} 30 | m_Extent: {x: 250, y: 250, z: 250} 31 | m_WorldSubdivisions: 8 32 | m_FrictionType: 0 33 | m_EnableEnhancedDeterminism: 0 34 | m_EnableUnifiedHeightmaps: 1 35 | m_SolverType: 0 36 | m_DefaultMaxAngularSpeed: 7 37 | -------------------------------------------------------------------------------- /ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: [] 8 | m_configObjects: {} 9 | -------------------------------------------------------------------------------- /ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 9 7 | m_ExternalVersionControlSupport: Visible Meta Files 8 | m_SerializationMode: 2 9 | m_LineEndingsForNewScripts: 0 10 | m_DefaultBehaviorMode: 0 11 | m_PrefabRegularEnvironment: {fileID: 0} 12 | m_PrefabUIEnvironment: {fileID: 0} 13 | m_SpritePackerMode: 0 14 | m_SpritePackerPaddingPower: 1 15 | m_EtcTextureCompressorBehavior: 1 16 | m_EtcTextureFastCompressor: 1 17 | m_EtcTextureNormalCompressor: 2 18 | m_EtcTextureBestCompressor: 4 19 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref 20 | m_ProjectGenerationRootNamespace: 21 | m_CollabEditorSettings: 22 | inProgressEnabled: 1 23 | m_EnableTextureStreamingInEditMode: 1 24 | m_EnableTextureStreamingInPlayMode: 1 25 | m_AsyncShaderCompilation: 1 26 | m_EnterPlayModeOptionsEnabled: 0 27 | m_EnterPlayModeOptions: 3 28 | m_ShowLightmapResolutionOverlay: 1 29 | m_UseLegacyProbeSampleCount: 0 30 | m_AssetPipelineMode: 1 31 | m_CacheServerMode: 0 32 | m_CacheServerEndpoint: 33 | m_CacheServerNamespacePrefix: default 34 | m_CacheServerEnableDownload: 1 35 | m_CacheServerEnableUpload: 1 36 | -------------------------------------------------------------------------------- /ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!30 &1 4 | GraphicsSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 13 7 | m_Deferred: 8 | m_Mode: 1 9 | m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} 10 | m_DeferredReflections: 11 | m_Mode: 1 12 | m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} 13 | m_ScreenSpaceShadows: 14 | m_Mode: 1 15 | m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} 16 | m_LegacyDeferred: 17 | m_Mode: 1 18 | m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} 19 | m_DepthNormals: 20 | m_Mode: 1 21 | m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} 22 | m_MotionVectors: 23 | m_Mode: 1 24 | m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} 25 | m_LightHalo: 26 | m_Mode: 1 27 | m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} 28 | m_LensFlare: 29 | m_Mode: 1 30 | m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} 31 | m_AlwaysIncludedShaders: 32 | - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} 33 | - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} 34 | - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} 35 | - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} 36 | - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} 37 | - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} 38 | - {fileID: 16000, guid: 0000000000000000f000000000000000, type: 0} 39 | - {fileID: 16001, guid: 0000000000000000f000000000000000, type: 0} 40 | - {fileID: 17000, guid: 0000000000000000f000000000000000, type: 0} 41 | m_PreloadedShaders: [] 42 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, 43 | type: 0} 44 | m_CustomRenderPipeline: {fileID: 0} 45 | m_TransparencySortMode: 0 46 | m_TransparencySortAxis: {x: 0, y: 0, z: 1} 47 | m_DefaultRenderingPath: 1 48 | m_DefaultMobileRenderingPath: 1 49 | m_TierSettings: [] 50 | m_LightmapStripping: 0 51 | m_FogStripping: 0 52 | m_InstancingStripping: 0 53 | m_LightmapKeepPlain: 1 54 | m_LightmapKeepDirCombined: 1 55 | m_LightmapKeepDynamicPlain: 1 56 | m_LightmapKeepDynamicDirCombined: 1 57 | m_LightmapKeepShadowMask: 1 58 | m_LightmapKeepSubtractive: 1 59 | m_FogKeepLinear: 1 60 | m_FogKeepExp: 1 61 | m_FogKeepExp2: 1 62 | m_AlbedoSwatchInfos: [] 63 | m_LightsUseLinearIntensity: 1 64 | m_LightsUseColorTemperature: 1 65 | m_LogWhenShaderIsCompiled: 0 66 | m_AllowEnlightenSupportForUpgradedProject: 0 67 | -------------------------------------------------------------------------------- /ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshProjectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | areas: 8 | - name: Walkable 9 | cost: 1 10 | - name: Not Walkable 11 | cost: 1 12 | - name: Jump 13 | cost: 2 14 | - name: 15 | cost: 1 16 | - name: 17 | cost: 1 18 | - name: 19 | cost: 1 20 | - name: 21 | cost: 1 22 | - name: 23 | cost: 1 24 | - name: 25 | cost: 1 26 | - name: 27 | cost: 1 28 | - name: 29 | cost: 1 30 | - name: 31 | cost: 1 32 | - name: 33 | cost: 1 34 | - name: 35 | cost: 1 36 | - name: 37 | cost: 1 38 | - name: 39 | cost: 1 40 | - name: 41 | cost: 1 42 | - name: 43 | cost: 1 44 | - name: 45 | cost: 1 46 | - name: 47 | cost: 1 48 | - name: 49 | cost: 1 50 | - name: 51 | cost: 1 52 | - name: 53 | cost: 1 54 | - name: 55 | cost: 1 56 | - name: 57 | cost: 1 58 | - name: 59 | cost: 1 60 | - name: 61 | cost: 1 62 | - name: 63 | cost: 1 64 | - name: 65 | cost: 1 66 | - name: 67 | cost: 1 68 | - name: 69 | cost: 1 70 | - name: 71 | cost: 1 72 | m_LastAgentTypeID: -887442657 73 | m_Settings: 74 | - serializedVersion: 2 75 | agentTypeID: 0 76 | agentRadius: 0.5 77 | agentHeight: 2 78 | agentSlope: 45 79 | agentClimb: 0.75 80 | ledgeDropHeight: 0 81 | maxJumpAcrossDistance: 0 82 | minRegionArea: 2 83 | manualCellSize: 0 84 | cellSize: 0.16666667 85 | manualTileSize: 0 86 | tileSize: 256 87 | accuratePlacement: 0 88 | debug: 89 | m_Flags: 0 90 | m_SettingNames: 91 | - Humanoid 92 | -------------------------------------------------------------------------------- /ProjectSettings/PackageManagerSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &1 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 61 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} 13 | m_Name: 14 | m_EditorClassIdentifier: 15 | m_ScopedRegistriesSettingsExpanded: 1 16 | oneTimeWarningShown: 0 17 | m_Registries: 18 | - m_Id: main 19 | m_Name: 20 | m_Url: https://packages.unity.com 21 | m_Scopes: [] 22 | m_IsDefault: 1 23 | m_UserSelectedRegistryName: 24 | m_UserAddingNewScopedRegistry: 0 25 | m_RegistryInfoDraft: 26 | m_ErrorMessage: 27 | m_Original: 28 | m_Id: 29 | m_Name: 30 | m_Url: 31 | m_Scopes: [] 32 | m_IsDefault: 0 33 | m_Modified: 0 34 | m_Name: 35 | m_Url: 36 | m_Scopes: 37 | - 38 | m_SelectedScopeIndex: 0 39 | -------------------------------------------------------------------------------- /ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!19 &1 4 | Physics2DSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 4 7 | m_Gravity: {x: 0, y: -9.81} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_VelocityIterations: 8 10 | m_PositionIterations: 3 11 | m_VelocityThreshold: 1 12 | m_MaxLinearCorrection: 0.2 13 | m_MaxAngularCorrection: 8 14 | m_MaxTranslationSpeed: 100 15 | m_MaxRotationSpeed: 360 16 | m_BaumgarteScale: 0.2 17 | m_BaumgarteTimeOfImpactScale: 0.75 18 | m_TimeToSleep: 0.5 19 | m_LinearSleepTolerance: 0.01 20 | m_AngularSleepTolerance: 2 21 | m_DefaultContactOffset: 0.01 22 | m_JobOptions: 23 | serializedVersion: 2 24 | useMultithreading: 0 25 | useConsistencySorting: 0 26 | m_InterpolationPosesPerJob: 100 27 | m_NewContactsPerJob: 30 28 | m_CollideContactsPerJob: 100 29 | m_ClearFlagsPerJob: 200 30 | m_ClearBodyForcesPerJob: 200 31 | m_SyncDiscreteFixturesPerJob: 50 32 | m_SyncContinuousFixturesPerJob: 50 33 | m_FindNearestContactsPerJob: 100 34 | m_UpdateTriggerContactsPerJob: 100 35 | m_IslandSolverCostThreshold: 100 36 | m_IslandSolverBodyCostScale: 1 37 | m_IslandSolverContactCostScale: 10 38 | m_IslandSolverJointCostScale: 10 39 | m_IslandSolverBodiesPerJob: 50 40 | m_IslandSolverContactsPerJob: 50 41 | m_AutoSimulation: 1 42 | m_QueriesHitTriggers: 1 43 | m_QueriesStartInColliders: 1 44 | m_CallbacksOnDisable: 1 45 | m_ReuseCollisionCallbacks: 1 46 | m_AutoSyncTransforms: 0 47 | m_AlwaysShowColliders: 0 48 | m_ShowColliderSleep: 1 49 | m_ShowColliderContacts: 0 50 | m_ShowColliderAABB: 0 51 | m_ContactArrowScale: 0.2 52 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} 53 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} 54 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} 55 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} 56 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 57 | -------------------------------------------------------------------------------- /ProjectSettings/PresetManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1386491679 &1 4 | PresetManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_DefaultPresets: {} 8 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 20 7 | productGUID: e2316325436a0984eb7ce29ac65a15d7 8 | AndroidProfiler: 0 9 | AndroidFilterTouchesWhenObscured: 0 10 | AndroidEnableSustainedPerformanceMode: 0 11 | defaultScreenOrientation: 4 12 | targetDevice: 2 13 | useOnDemandResources: 0 14 | accelerometerFrequency: 60 15 | companyName: DefaultCompany 16 | productName: VRC_Instantiate 17 | defaultCursor: {fileID: 0} 18 | cursorHotspot: {x: 0, y: 0} 19 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} 20 | m_ShowUnitySplashScreen: 1 21 | m_ShowUnitySplashLogo: 1 22 | m_SplashScreenOverlayOpacity: 1 23 | m_SplashScreenAnimation: 1 24 | m_SplashScreenLogoStyle: 1 25 | m_SplashScreenDrawMode: 0 26 | m_SplashScreenBackgroundAnimationZoom: 1 27 | m_SplashScreenLogoAnimationZoom: 1 28 | m_SplashScreenBackgroundLandscapeAspect: 1 29 | m_SplashScreenBackgroundPortraitAspect: 1 30 | m_SplashScreenBackgroundLandscapeUvs: 31 | serializedVersion: 2 32 | x: 0 33 | y: 0 34 | width: 1 35 | height: 1 36 | m_SplashScreenBackgroundPortraitUvs: 37 | serializedVersion: 2 38 | x: 0 39 | y: 0 40 | width: 1 41 | height: 1 42 | m_SplashScreenLogos: [] 43 | m_VirtualRealitySplashScreen: {fileID: 0} 44 | m_HolographicTrackingLossScreen: {fileID: 0} 45 | defaultScreenWidth: 1024 46 | defaultScreenHeight: 768 47 | defaultScreenWidthWeb: 960 48 | defaultScreenHeightWeb: 600 49 | m_StereoRenderingPath: 1 50 | m_ActiveColorSpace: 1 51 | m_MTRendering: 1 52 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000 53 | iosShowActivityIndicatorOnLoading: -1 54 | androidShowActivityIndicatorOnLoading: -1 55 | iosUseCustomAppBackgroundBehavior: 0 56 | iosAllowHTTPDownload: 1 57 | allowedAutorotateToPortrait: 1 58 | allowedAutorotateToPortraitUpsideDown: 1 59 | allowedAutorotateToLandscapeRight: 1 60 | allowedAutorotateToLandscapeLeft: 1 61 | useOSAutorotation: 1 62 | use32BitDisplayBuffer: 1 63 | preserveFramebufferAlpha: 0 64 | disableDepthAndStencilBuffers: 0 65 | androidStartInFullscreen: 1 66 | androidRenderOutsideSafeArea: 1 67 | androidUseSwappy: 0 68 | androidBlitType: 0 69 | defaultIsNativeResolution: 1 70 | macRetinaSupport: 1 71 | runInBackground: 1 72 | captureSingleScreen: 0 73 | muteOtherAudioSources: 0 74 | Prepare IOS For Recording: 0 75 | Force IOS Speakers When Recording: 0 76 | deferSystemGesturesMode: 0 77 | hideHomeButton: 0 78 | submitAnalytics: 1 79 | usePlayerLog: 1 80 | bakeCollisionMeshes: 0 81 | forceSingleInstance: 0 82 | useFlipModelSwapchain: 1 83 | resizableWindow: 0 84 | useMacAppStoreValidation: 0 85 | macAppStoreCategory: public.app-category.games 86 | gpuSkinning: 1 87 | xboxPIXTextureCapture: 0 88 | xboxEnableAvatar: 0 89 | xboxEnableKinect: 0 90 | xboxEnableKinectAutoTracking: 0 91 | xboxEnableFitness: 0 92 | visibleInBackground: 1 93 | allowFullscreenSwitch: 1 94 | fullscreenMode: 1 95 | xboxSpeechDB: 0 96 | xboxEnableHeadOrientation: 0 97 | xboxEnableGuest: 0 98 | xboxEnablePIXSampling: 0 99 | metalFramebufferOnly: 0 100 | xboxOneResolution: 0 101 | xboxOneSResolution: 0 102 | xboxOneXResolution: 3 103 | xboxOneMonoLoggingLevel: 0 104 | xboxOneLoggingLevel: 1 105 | xboxOneDisableEsram: 0 106 | xboxOneEnableTypeOptimization: 0 107 | xboxOnePresentImmediateThreshold: 0 108 | switchQueueCommandMemory: 0 109 | switchQueueControlMemory: 16384 110 | switchQueueComputeMemory: 262144 111 | switchNVNShaderPoolsGranularity: 33554432 112 | switchNVNDefaultPoolsGranularity: 16777216 113 | switchNVNOtherPoolsGranularity: 16777216 114 | switchNVNMaxPublicTextureIDCount: 0 115 | switchNVNMaxPublicSamplerIDCount: 0 116 | stadiaPresentMode: 0 117 | stadiaTargetFramerate: 0 118 | vulkanNumSwapchainBuffers: 3 119 | vulkanEnableSetSRGBWrite: 0 120 | vulkanEnableLateAcquireNextImage: 0 121 | m_SupportedAspectRatios: 122 | 4:3: 1 123 | 5:4: 1 124 | 16:10: 1 125 | 16:9: 1 126 | Others: 1 127 | bundleVersion: 0.1 128 | preloadedAssets: [] 129 | metroInputSource: 0 130 | wsaTransparentSwapchain: 0 131 | m_HolographicPauseOnTrackingLoss: 1 132 | xboxOneDisableKinectGpuReservation: 1 133 | xboxOneEnable7thCore: 1 134 | vrSettings: 135 | cardboard: 136 | depthFormat: 0 137 | enableTransitionView: 0 138 | daydream: 139 | depthFormat: 0 140 | useSustainedPerformanceMode: 0 141 | enableVideoLayer: 0 142 | useProtectedVideoMemory: 0 143 | minimumSupportedHeadTracking: 0 144 | maximumSupportedHeadTracking: 1 145 | hololens: 146 | depthFormat: 1 147 | depthBufferSharingEnabled: 1 148 | lumin: 149 | depthFormat: 0 150 | frameTiming: 2 151 | enableGLCache: 0 152 | glCacheMaxBlobSize: 524288 153 | glCacheMaxFileSize: 8388608 154 | oculus: 155 | sharedDepthBuffer: 1 156 | dashSupport: 1 157 | lowOverheadMode: 0 158 | protectedContext: 0 159 | v2Signing: 1 160 | enable360StereoCapture: 0 161 | isWsaHolographicRemotingEnabled: 0 162 | enableFrameTimingStats: 0 163 | useHDRDisplay: 0 164 | D3DHDRBitDepth: 0 165 | m_ColorGamuts: 00000000 166 | targetPixelDensity: 30 167 | resolutionScalingMode: 0 168 | androidSupportedAspectRatio: 1 169 | androidMaxAspectRatio: 2.1 170 | applicationIdentifier: {} 171 | buildNumber: {} 172 | AndroidBundleVersionCode: 1 173 | AndroidMinSdkVersion: 19 174 | AndroidTargetSdkVersion: 0 175 | AndroidPreferredInstallLocation: 1 176 | aotOptions: 177 | stripEngineCode: 1 178 | iPhoneStrippingLevel: 0 179 | iPhoneScriptCallOptimization: 0 180 | ForceInternetPermission: 0 181 | ForceSDCardPermission: 0 182 | CreateWallpaper: 0 183 | APKExpansionFiles: 0 184 | keepLoadedShadersAlive: 0 185 | StripUnusedMeshComponents: 1 186 | VertexChannelCompressionMask: 4054 187 | iPhoneSdkVersion: 988 188 | iOSTargetOSVersionString: 10.0 189 | tvOSSdkVersion: 0 190 | tvOSRequireExtendedGameController: 0 191 | tvOSTargetOSVersionString: 10.0 192 | uIPrerenderedIcon: 0 193 | uIRequiresPersistentWiFi: 0 194 | uIRequiresFullScreen: 1 195 | uIStatusBarHidden: 1 196 | uIExitOnSuspend: 0 197 | uIStatusBarStyle: 0 198 | appleTVSplashScreen: {fileID: 0} 199 | appleTVSplashScreen2x: {fileID: 0} 200 | tvOSSmallIconLayers: [] 201 | tvOSSmallIconLayers2x: [] 202 | tvOSLargeIconLayers: [] 203 | tvOSLargeIconLayers2x: [] 204 | tvOSTopShelfImageLayers: [] 205 | tvOSTopShelfImageLayers2x: [] 206 | tvOSTopShelfImageWideLayers: [] 207 | tvOSTopShelfImageWideLayers2x: [] 208 | iOSLaunchScreenType: 0 209 | iOSLaunchScreenPortrait: {fileID: 0} 210 | iOSLaunchScreenLandscape: {fileID: 0} 211 | iOSLaunchScreenBackgroundColor: 212 | serializedVersion: 2 213 | rgba: 0 214 | iOSLaunchScreenFillPct: 100 215 | iOSLaunchScreenSize: 100 216 | iOSLaunchScreenCustomXibPath: 217 | iOSLaunchScreeniPadType: 0 218 | iOSLaunchScreeniPadImage: {fileID: 0} 219 | iOSLaunchScreeniPadBackgroundColor: 220 | serializedVersion: 2 221 | rgba: 0 222 | iOSLaunchScreeniPadFillPct: 100 223 | iOSLaunchScreeniPadSize: 100 224 | iOSLaunchScreeniPadCustomXibPath: 225 | iOSUseLaunchScreenStoryboard: 0 226 | iOSLaunchScreenCustomStoryboardPath: 227 | iOSDeviceRequirements: [] 228 | iOSURLSchemes: [] 229 | iOSBackgroundModes: 0 230 | iOSMetalForceHardShadows: 0 231 | metalEditorSupport: 1 232 | metalAPIValidation: 1 233 | iOSRenderExtraFrameOnPause: 0 234 | iosCopyPluginsCodeInsteadOfSymlink: 0 235 | appleDeveloperTeamID: 236 | iOSManualSigningProvisioningProfileID: 237 | tvOSManualSigningProvisioningProfileID: 238 | iOSManualSigningProvisioningProfileType: 0 239 | tvOSManualSigningProvisioningProfileType: 0 240 | appleEnableAutomaticSigning: 0 241 | iOSRequireARKit: 0 242 | iOSAutomaticallyDetectAndAddCapabilities: 1 243 | appleEnableProMotion: 0 244 | clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea 245 | templatePackageId: com.unity.template.3d@4.2.8 246 | templateDefaultScene: Assets/Scenes/SampleScene.unity 247 | AndroidTargetArchitectures: 1 248 | AndroidSplashScreenScale: 0 249 | androidSplashScreen: {fileID: 0} 250 | AndroidKeystoreName: 251 | AndroidKeyaliasName: 252 | AndroidBuildApkPerCpuArchitecture: 0 253 | AndroidTVCompatibility: 0 254 | AndroidIsGame: 1 255 | AndroidEnableTango: 0 256 | androidEnableBanner: 1 257 | androidUseLowAccuracyLocation: 0 258 | androidUseCustomKeystore: 0 259 | m_AndroidBanners: 260 | - width: 320 261 | height: 180 262 | banner: {fileID: 0} 263 | androidGamepadSupportLevel: 0 264 | AndroidValidateAppBundleSize: 1 265 | AndroidAppBundleSizeToValidate: 150 266 | m_BuildTargetIcons: [] 267 | m_BuildTargetPlatformIcons: [] 268 | m_BuildTargetBatching: 269 | - m_BuildTarget: Standalone 270 | m_StaticBatching: 1 271 | m_DynamicBatching: 1 272 | - m_BuildTarget: tvOS 273 | m_StaticBatching: 1 274 | m_DynamicBatching: 0 275 | - m_BuildTarget: Android 276 | m_StaticBatching: 1 277 | m_DynamicBatching: 0 278 | - m_BuildTarget: iPhone 279 | m_StaticBatching: 1 280 | m_DynamicBatching: 0 281 | - m_BuildTarget: WebGL 282 | m_StaticBatching: 0 283 | m_DynamicBatching: 0 284 | m_BuildTargetGraphicsJobs: 285 | - m_BuildTarget: MacStandaloneSupport 286 | m_GraphicsJobs: 0 287 | - m_BuildTarget: Switch 288 | m_GraphicsJobs: 1 289 | - m_BuildTarget: MetroSupport 290 | m_GraphicsJobs: 1 291 | - m_BuildTarget: AppleTVSupport 292 | m_GraphicsJobs: 0 293 | - m_BuildTarget: BJMSupport 294 | m_GraphicsJobs: 1 295 | - m_BuildTarget: LinuxStandaloneSupport 296 | m_GraphicsJobs: 1 297 | - m_BuildTarget: PS4Player 298 | m_GraphicsJobs: 1 299 | - m_BuildTarget: iOSSupport 300 | m_GraphicsJobs: 0 301 | - m_BuildTarget: WindowsStandaloneSupport 302 | m_GraphicsJobs: 1 303 | - m_BuildTarget: XboxOnePlayer 304 | m_GraphicsJobs: 1 305 | - m_BuildTarget: LuminSupport 306 | m_GraphicsJobs: 0 307 | - m_BuildTarget: AndroidPlayer 308 | m_GraphicsJobs: 0 309 | - m_BuildTarget: WebGLSupport 310 | m_GraphicsJobs: 0 311 | m_BuildTargetGraphicsJobMode: 312 | - m_BuildTarget: PS4Player 313 | m_GraphicsJobMode: 0 314 | - m_BuildTarget: XboxOnePlayer 315 | m_GraphicsJobMode: 0 316 | m_BuildTargetGraphicsAPIs: 317 | - m_BuildTarget: AndroidPlayer 318 | m_APIs: 0b000000 319 | m_Automatic: 0 320 | - m_BuildTarget: iOSSupport 321 | m_APIs: 10000000 322 | m_Automatic: 1 323 | - m_BuildTarget: AppleTVSupport 324 | m_APIs: 10000000 325 | m_Automatic: 0 326 | - m_BuildTarget: WebGLSupport 327 | m_APIs: 0b000000 328 | m_Automatic: 1 329 | - m_BuildTarget: WindowsStandaloneSupport 330 | m_APIs: 02000000 331 | m_Automatic: 0 332 | m_BuildTargetVRSettings: 333 | - m_BuildTarget: Standalone 334 | m_Enabled: 1 335 | m_Devices: 336 | - None 337 | - OpenVR 338 | - Oculus 339 | openGLRequireES31: 0 340 | openGLRequireES31AEP: 0 341 | openGLRequireES32: 0 342 | m_TemplateCustomTags: {} 343 | mobileMTRendering: 344 | Android: 1 345 | iPhone: 1 346 | tvOS: 1 347 | m_BuildTargetGroupLightmapEncodingQuality: [] 348 | m_BuildTargetGroupLightmapSettings: [] 349 | playModeTestRunnerEnabled: 0 350 | runPlayModeTestAsEditModeTest: 0 351 | actionOnDotNetUnhandledException: 1 352 | enableInternalProfiler: 0 353 | logObjCUncaughtExceptions: 1 354 | enableCrashReportAPI: 0 355 | cameraUsageDescription: 356 | locationUsageDescription: 357 | microphoneUsageDescription: 358 | switchNetLibKey: 359 | switchSocketMemoryPoolSize: 6144 360 | switchSocketAllocatorPoolSize: 128 361 | switchSocketConcurrencyLimit: 14 362 | switchScreenResolutionBehavior: 2 363 | switchUseCPUProfiler: 0 364 | switchApplicationID: 0x01004b9000490000 365 | switchNSODependencies: 366 | switchTitleNames_0: 367 | switchTitleNames_1: 368 | switchTitleNames_2: 369 | switchTitleNames_3: 370 | switchTitleNames_4: 371 | switchTitleNames_5: 372 | switchTitleNames_6: 373 | switchTitleNames_7: 374 | switchTitleNames_8: 375 | switchTitleNames_9: 376 | switchTitleNames_10: 377 | switchTitleNames_11: 378 | switchTitleNames_12: 379 | switchTitleNames_13: 380 | switchTitleNames_14: 381 | switchTitleNames_15: 382 | switchPublisherNames_0: 383 | switchPublisherNames_1: 384 | switchPublisherNames_2: 385 | switchPublisherNames_3: 386 | switchPublisherNames_4: 387 | switchPublisherNames_5: 388 | switchPublisherNames_6: 389 | switchPublisherNames_7: 390 | switchPublisherNames_8: 391 | switchPublisherNames_9: 392 | switchPublisherNames_10: 393 | switchPublisherNames_11: 394 | switchPublisherNames_12: 395 | switchPublisherNames_13: 396 | switchPublisherNames_14: 397 | switchPublisherNames_15: 398 | switchIcons_0: {fileID: 0} 399 | switchIcons_1: {fileID: 0} 400 | switchIcons_2: {fileID: 0} 401 | switchIcons_3: {fileID: 0} 402 | switchIcons_4: {fileID: 0} 403 | switchIcons_5: {fileID: 0} 404 | switchIcons_6: {fileID: 0} 405 | switchIcons_7: {fileID: 0} 406 | switchIcons_8: {fileID: 0} 407 | switchIcons_9: {fileID: 0} 408 | switchIcons_10: {fileID: 0} 409 | switchIcons_11: {fileID: 0} 410 | switchIcons_12: {fileID: 0} 411 | switchIcons_13: {fileID: 0} 412 | switchIcons_14: {fileID: 0} 413 | switchIcons_15: {fileID: 0} 414 | switchSmallIcons_0: {fileID: 0} 415 | switchSmallIcons_1: {fileID: 0} 416 | switchSmallIcons_2: {fileID: 0} 417 | switchSmallIcons_3: {fileID: 0} 418 | switchSmallIcons_4: {fileID: 0} 419 | switchSmallIcons_5: {fileID: 0} 420 | switchSmallIcons_6: {fileID: 0} 421 | switchSmallIcons_7: {fileID: 0} 422 | switchSmallIcons_8: {fileID: 0} 423 | switchSmallIcons_9: {fileID: 0} 424 | switchSmallIcons_10: {fileID: 0} 425 | switchSmallIcons_11: {fileID: 0} 426 | switchSmallIcons_12: {fileID: 0} 427 | switchSmallIcons_13: {fileID: 0} 428 | switchSmallIcons_14: {fileID: 0} 429 | switchSmallIcons_15: {fileID: 0} 430 | switchManualHTML: 431 | switchAccessibleURLs: 432 | switchLegalInformation: 433 | switchMainThreadStackSize: 1048576 434 | switchPresenceGroupId: 435 | switchLogoHandling: 0 436 | switchReleaseVersion: 0 437 | switchDisplayVersion: 1.0.0 438 | switchStartupUserAccount: 0 439 | switchTouchScreenUsage: 0 440 | switchSupportedLanguagesMask: 0 441 | switchLogoType: 0 442 | switchApplicationErrorCodeCategory: 443 | switchUserAccountSaveDataSize: 0 444 | switchUserAccountSaveDataJournalSize: 0 445 | switchApplicationAttribute: 0 446 | switchCardSpecSize: -1 447 | switchCardSpecClock: -1 448 | switchRatingsMask: 0 449 | switchRatingsInt_0: 0 450 | switchRatingsInt_1: 0 451 | switchRatingsInt_2: 0 452 | switchRatingsInt_3: 0 453 | switchRatingsInt_4: 0 454 | switchRatingsInt_5: 0 455 | switchRatingsInt_6: 0 456 | switchRatingsInt_7: 0 457 | switchRatingsInt_8: 0 458 | switchRatingsInt_9: 0 459 | switchRatingsInt_10: 0 460 | switchRatingsInt_11: 0 461 | switchRatingsInt_12: 0 462 | switchLocalCommunicationIds_0: 463 | switchLocalCommunicationIds_1: 464 | switchLocalCommunicationIds_2: 465 | switchLocalCommunicationIds_3: 466 | switchLocalCommunicationIds_4: 467 | switchLocalCommunicationIds_5: 468 | switchLocalCommunicationIds_6: 469 | switchLocalCommunicationIds_7: 470 | switchParentalControl: 0 471 | switchAllowsScreenshot: 1 472 | switchAllowsVideoCapturing: 1 473 | switchAllowsRuntimeAddOnContentInstall: 0 474 | switchDataLossConfirmation: 0 475 | switchUserAccountLockEnabled: 0 476 | switchSystemResourceMemory: 16777216 477 | switchSupportedNpadStyles: 22 478 | switchNativeFsCacheSize: 32 479 | switchIsHoldTypeHorizontal: 0 480 | switchSupportedNpadCount: 8 481 | switchSocketConfigEnabled: 0 482 | switchTcpInitialSendBufferSize: 32 483 | switchTcpInitialReceiveBufferSize: 64 484 | switchTcpAutoSendBufferSizeMax: 256 485 | switchTcpAutoReceiveBufferSizeMax: 256 486 | switchUdpSendBufferSize: 9 487 | switchUdpReceiveBufferSize: 42 488 | switchSocketBufferEfficiency: 4 489 | switchSocketInitializeEnabled: 1 490 | switchNetworkInterfaceManagerInitializeEnabled: 1 491 | switchPlayerConnectionEnabled: 1 492 | switchUseMicroSleepForYield: 1 493 | switchMicroSleepForYieldTime: 25 494 | ps4NPAgeRating: 12 495 | ps4NPTitleSecret: 496 | ps4NPTrophyPackPath: 497 | ps4ParentalLevel: 11 498 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 499 | ps4Category: 0 500 | ps4MasterVersion: 01.00 501 | ps4AppVersion: 01.00 502 | ps4AppType: 0 503 | ps4ParamSfxPath: 504 | ps4VideoOutPixelFormat: 0 505 | ps4VideoOutInitialWidth: 1920 506 | ps4VideoOutBaseModeInitialWidth: 1920 507 | ps4VideoOutReprojectionRate: 60 508 | ps4PronunciationXMLPath: 509 | ps4PronunciationSIGPath: 510 | ps4BackgroundImagePath: 511 | ps4StartupImagePath: 512 | ps4StartupImagesFolder: 513 | ps4IconImagesFolder: 514 | ps4SaveDataImagePath: 515 | ps4SdkOverride: 516 | ps4BGMPath: 517 | ps4ShareFilePath: 518 | ps4ShareOverlayImagePath: 519 | ps4PrivacyGuardImagePath: 520 | ps4ExtraSceSysFile: 521 | ps4NPtitleDatPath: 522 | ps4RemotePlayKeyAssignment: -1 523 | ps4RemotePlayKeyMappingDir: 524 | ps4PlayTogetherPlayerCount: 0 525 | ps4EnterButtonAssignment: 1 526 | ps4ApplicationParam1: 0 527 | ps4ApplicationParam2: 0 528 | ps4ApplicationParam3: 0 529 | ps4ApplicationParam4: 0 530 | ps4DownloadDataSize: 0 531 | ps4GarlicHeapSize: 2048 532 | ps4ProGarlicHeapSize: 2560 533 | playerPrefsMaxSize: 32768 534 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ 535 | ps4pnSessions: 1 536 | ps4pnPresence: 1 537 | ps4pnFriends: 1 538 | ps4pnGameCustomData: 1 539 | playerPrefsSupport: 0 540 | enableApplicationExit: 0 541 | resetTempFolder: 1 542 | restrictedAudioUsageRights: 0 543 | ps4UseResolutionFallback: 0 544 | ps4ReprojectionSupport: 0 545 | ps4UseAudio3dBackend: 0 546 | ps4UseLowGarlicFragmentationMode: 1 547 | ps4SocialScreenEnabled: 0 548 | ps4ScriptOptimizationLevel: 0 549 | ps4Audio3dVirtualSpeakerCount: 14 550 | ps4attribCpuUsage: 0 551 | ps4PatchPkgPath: 552 | ps4PatchLatestPkgPath: 553 | ps4PatchChangeinfoPath: 554 | ps4PatchDayOne: 0 555 | ps4attribUserManagement: 0 556 | ps4attribMoveSupport: 0 557 | ps4attrib3DSupport: 0 558 | ps4attribShareSupport: 0 559 | ps4attribExclusiveVR: 0 560 | ps4disableAutoHideSplash: 0 561 | ps4videoRecordingFeaturesUsed: 0 562 | ps4contentSearchFeaturesUsed: 0 563 | ps4CompatibilityPS5: 0 564 | ps4AllowPS5Detection: 0 565 | ps4GPU800MHz: 1 566 | ps4attribEyeToEyeDistanceSettingVR: 0 567 | ps4IncludedModules: [] 568 | ps4attribVROutputEnabled: 0 569 | ps5ParamFilePath: 570 | ps5VideoOutPixelFormat: 0 571 | ps5VideoOutInitialWidth: 1920 572 | ps5VideoOutOutputMode: 1 573 | ps5BackgroundImagePath: 574 | ps5StartupImagePath: 575 | ps5Pic2Path: 576 | ps5StartupImagesFolder: 577 | ps5IconImagesFolder: 578 | ps5SaveDataImagePath: 579 | ps5SdkOverride: 580 | ps5BGMPath: 581 | ps5ShareOverlayImagePath: 582 | ps5NPConfigZipPath: 583 | ps5Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ 584 | ps5UseResolutionFallback: 0 585 | ps5UseAudio3dBackend: 0 586 | ps5ScriptOptimizationLevel: 2 587 | ps5Audio3dVirtualSpeakerCount: 14 588 | ps5UpdateReferencePackage: 589 | ps5disableAutoHideSplash: 0 590 | ps5OperatingSystemCanDisableSplashScreen: 0 591 | ps5IncludedModules: [] 592 | ps5SharedBinaryContentLabels: [] 593 | ps5SharedBinarySystemFolders: [] 594 | monoEnv: 595 | splashScreenBackgroundSourceLandscape: {fileID: 0} 596 | splashScreenBackgroundSourcePortrait: {fileID: 0} 597 | blurSplashScreenBackground: 1 598 | spritePackerPolicy: 599 | webGLMemorySize: 16 600 | webGLExceptionSupport: 1 601 | webGLNameFilesAsHashes: 0 602 | webGLDataCaching: 1 603 | webGLDebugSymbols: 0 604 | webGLEmscriptenArgs: 605 | webGLModulesDirectory: 606 | webGLTemplate: APPLICATION:Default 607 | webGLAnalyzeBuildSize: 0 608 | webGLUseEmbeddedResources: 0 609 | webGLCompressionFormat: 1 610 | webGLLinkerTarget: 1 611 | webGLThreadsSupport: 0 612 | webGLWasmStreaming: 0 613 | scriptingDefineSymbols: 614 | 1: UDON;VRC_SDK_VRCSDK3;UNITY_POST_PROCESSING_STACK_V2 615 | 7: UNITY_POST_PROCESSING_STACK_V2 616 | 13: UNITY_POST_PROCESSING_STACK_V2 617 | 14: UNITY_POST_PROCESSING_STACK_V2 618 | 19: UNITY_POST_PROCESSING_STACK_V2 619 | 21: UNITY_POST_PROCESSING_STACK_V2 620 | 25: UNITY_POST_PROCESSING_STACK_V2 621 | 27: UNITY_POST_PROCESSING_STACK_V2 622 | 28: UNITY_POST_PROCESSING_STACK_V2 623 | 29: UNITY_POST_PROCESSING_STACK_V2 624 | 30: UNITY_POST_PROCESSING_STACK_V2 625 | 32: UNITY_POST_PROCESSING_STACK_V2 626 | 33: UNITY_POST_PROCESSING_STACK_V2 627 | platformArchitecture: {} 628 | scriptingBackend: {} 629 | il2cppCompilerConfiguration: {} 630 | managedStrippingLevel: {} 631 | incrementalIl2cppBuild: {} 632 | suppressCommonWarnings: 1 633 | allowUnsafeCode: 0 634 | additionalIl2CppArgs: 635 | scriptingRuntimeVersion: 1 636 | gcIncremental: 1 637 | assemblyVersionValidation: 1 638 | gcWBarrierValidation: 0 639 | apiCompatibilityLevelPerPlatform: 640 | Standalone: 3 641 | m_RenderingPath: 1 642 | m_MobileRenderingPath: 1 643 | metroPackageName: Template_3D 644 | metroPackageVersion: 645 | metroCertificatePath: 646 | metroCertificatePassword: 647 | metroCertificateSubject: 648 | metroCertificateIssuer: 649 | metroCertificateNotAfter: 0000000000000000 650 | metroApplicationDescription: Template_3D 651 | wsaImages: {} 652 | metroTileShortName: 653 | metroTileShowName: 0 654 | metroMediumTileShowName: 0 655 | metroLargeTileShowName: 0 656 | metroWideTileShowName: 0 657 | metroSupportStreamingInstall: 0 658 | metroLastRequiredScene: 0 659 | metroDefaultTileSize: 1 660 | metroTileForegroundText: 2 661 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 662 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, 663 | a: 1} 664 | metroSplashScreenUseBackgroundColor: 0 665 | platformCapabilities: {} 666 | metroTargetDeviceFamilies: {} 667 | metroFTAName: 668 | metroFTAFileTypes: [] 669 | metroProtocolName: 670 | XboxOneProductId: 671 | XboxOneUpdateKey: 672 | XboxOneSandboxId: 673 | XboxOneContentId: 674 | XboxOneTitleId: 675 | XboxOneSCId: 676 | XboxOneGameOsOverridePath: 677 | XboxOnePackagingOverridePath: 678 | XboxOneAppManifestOverridePath: 679 | XboxOneVersion: 1.0.0.0 680 | XboxOnePackageEncryption: 0 681 | XboxOnePackageUpdateGranularity: 2 682 | XboxOneDescription: 683 | XboxOneLanguage: 684 | - enus 685 | XboxOneCapability: [] 686 | XboxOneGameRating: {} 687 | XboxOneIsContentPackage: 0 688 | XboxOneEnhancedXboxCompatibilityMode: 0 689 | XboxOneEnableGPUVariability: 1 690 | XboxOneSockets: {} 691 | XboxOneSplashScreen: {fileID: 0} 692 | XboxOneAllowedProductIds: [] 693 | XboxOnePersistentLocalStorageSize: 0 694 | XboxOneXTitleMemory: 8 695 | XboxOneOverrideIdentityName: 696 | XboxOneOverrideIdentityPublisher: 697 | vrEditorSettings: 698 | daydream: 699 | daydreamIconForeground: {fileID: 0} 700 | daydreamIconBackground: {fileID: 0} 701 | cloudServicesEnabled: 702 | UNet: 1 703 | luminIcon: 704 | m_Name: 705 | m_ModelFolderPath: 706 | m_PortalFolderPath: 707 | luminCert: 708 | m_CertPath: 709 | m_SignPackage: 1 710 | luminIsChannelApp: 0 711 | luminVersion: 712 | m_VersionCode: 1 713 | m_VersionName: 714 | apiCompatibilityLevel: 6 715 | cloudProjectId: 716 | framebufferDepthMemorylessMode: 0 717 | projectName: 718 | organizationId: 719 | cloudEnabled: 0 720 | enableNativePlatformBackendsForNewInputSystem: 0 721 | disableOldInputManagerSupport: 0 722 | legacyClampBlendShapeWeights: 0 723 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2019.4.29f1 2 | m_EditorVersionWithRevision: 2019.4.29f1 (0eeae20b1d82) 3 | -------------------------------------------------------------------------------- /ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!47 &1 4 | QualitySettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 5 7 | m_CurrentQuality: 3 8 | m_QualitySettings: 9 | - serializedVersion: 2 10 | name: VRC Low 11 | pixelLightCount: 4 12 | shadows: 2 13 | shadowResolution: 2 14 | shadowProjection: 1 15 | shadowCascades: 2 16 | shadowDistance: 75 17 | shadowNearPlaneOffset: 2 18 | shadowCascade2Split: 0.33333334 19 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 20 | shadowmaskMode: 0 21 | skinWeights: 4 22 | textureQuality: 0 23 | anisotropicTextures: 2 24 | antiAliasing: 0 25 | softParticles: 1 26 | softVegetation: 1 27 | realtimeReflectionProbes: 1 28 | billboardsFaceCameraPosition: 1 29 | vSyncCount: 0 30 | lodBias: 1 31 | maximumLODLevel: 0 32 | streamingMipmapsActive: 0 33 | streamingMipmapsAddAllCameras: 1 34 | streamingMipmapsMemoryBudget: 512 35 | streamingMipmapsRenderersPerFrame: 512 36 | streamingMipmapsMaxLevelReduction: 2 37 | streamingMipmapsMaxFileIORequests: 1024 38 | particleRaycastBudget: 1024 39 | asyncUploadTimeSlice: 2 40 | asyncUploadBufferSize: 64 41 | asyncUploadPersistentBuffer: 1 42 | resolutionScalingFixedDPIFactor: 1 43 | customRenderPipeline: {fileID: 0} 44 | excludedTargetPlatforms: 45 | - Android 46 | - serializedVersion: 2 47 | name: VRC Medium 48 | pixelLightCount: 4 49 | shadows: 2 50 | shadowResolution: 2 51 | shadowProjection: 1 52 | shadowCascades: 2 53 | shadowDistance: 75 54 | shadowNearPlaneOffset: 2 55 | shadowCascade2Split: 0.33333334 56 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 57 | shadowmaskMode: 0 58 | skinWeights: 4 59 | textureQuality: 0 60 | anisotropicTextures: 2 61 | antiAliasing: 4 62 | softParticles: 1 63 | softVegetation: 1 64 | realtimeReflectionProbes: 1 65 | billboardsFaceCameraPosition: 1 66 | vSyncCount: 0 67 | lodBias: 1.5 68 | maximumLODLevel: 0 69 | streamingMipmapsActive: 0 70 | streamingMipmapsAddAllCameras: 1 71 | streamingMipmapsMemoryBudget: 512 72 | streamingMipmapsRenderersPerFrame: 512 73 | streamingMipmapsMaxLevelReduction: 2 74 | streamingMipmapsMaxFileIORequests: 1024 75 | particleRaycastBudget: 2048 76 | asyncUploadTimeSlice: 2 77 | asyncUploadBufferSize: 64 78 | asyncUploadPersistentBuffer: 1 79 | resolutionScalingFixedDPIFactor: 1 80 | customRenderPipeline: {fileID: 0} 81 | excludedTargetPlatforms: 82 | - Android 83 | - serializedVersion: 2 84 | name: VRC High 85 | pixelLightCount: 8 86 | shadows: 2 87 | shadowResolution: 3 88 | shadowProjection: 1 89 | shadowCascades: 2 90 | shadowDistance: 75 91 | shadowNearPlaneOffset: 2 92 | shadowCascade2Split: 0.33333334 93 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 94 | shadowmaskMode: 0 95 | skinWeights: 4 96 | textureQuality: 0 97 | anisotropicTextures: 2 98 | antiAliasing: 4 99 | softParticles: 1 100 | softVegetation: 1 101 | realtimeReflectionProbes: 1 102 | billboardsFaceCameraPosition: 1 103 | vSyncCount: 0 104 | lodBias: 2 105 | maximumLODLevel: 0 106 | streamingMipmapsActive: 0 107 | streamingMipmapsAddAllCameras: 1 108 | streamingMipmapsMemoryBudget: 512 109 | streamingMipmapsRenderersPerFrame: 512 110 | streamingMipmapsMaxLevelReduction: 2 111 | streamingMipmapsMaxFileIORequests: 1024 112 | particleRaycastBudget: 4096 113 | asyncUploadTimeSlice: 2 114 | asyncUploadBufferSize: 128 115 | asyncUploadPersistentBuffer: 1 116 | resolutionScalingFixedDPIFactor: 1 117 | customRenderPipeline: {fileID: 0} 118 | excludedTargetPlatforms: 119 | - Android 120 | - serializedVersion: 2 121 | name: VRC Ultra 122 | pixelLightCount: 8 123 | shadows: 2 124 | shadowResolution: 3 125 | shadowProjection: 1 126 | shadowCascades: 4 127 | shadowDistance: 150 128 | shadowNearPlaneOffset: 2 129 | shadowCascade2Split: 0.33333334 130 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 131 | shadowmaskMode: 0 132 | skinWeights: 4 133 | textureQuality: 0 134 | anisotropicTextures: 2 135 | antiAliasing: 4 136 | softParticles: 1 137 | softVegetation: 1 138 | realtimeReflectionProbes: 1 139 | billboardsFaceCameraPosition: 1 140 | vSyncCount: 0 141 | lodBias: 2 142 | maximumLODLevel: 0 143 | streamingMipmapsActive: 0 144 | streamingMipmapsAddAllCameras: 1 145 | streamingMipmapsMemoryBudget: 512 146 | streamingMipmapsRenderersPerFrame: 512 147 | streamingMipmapsMaxLevelReduction: 2 148 | streamingMipmapsMaxFileIORequests: 1024 149 | particleRaycastBudget: 4096 150 | asyncUploadTimeSlice: 2 151 | asyncUploadBufferSize: 128 152 | asyncUploadPersistentBuffer: 1 153 | resolutionScalingFixedDPIFactor: 1 154 | customRenderPipeline: {fileID: 0} 155 | excludedTargetPlatforms: 156 | - Android 157 | - serializedVersion: 2 158 | name: VRC Mobile 159 | pixelLightCount: 4 160 | shadows: 0 161 | shadowResolution: 1 162 | shadowProjection: 1 163 | shadowCascades: 1 164 | shadowDistance: 50 165 | shadowNearPlaneOffset: 2 166 | shadowCascade2Split: 0.33333334 167 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 168 | shadowmaskMode: 0 169 | skinWeights: 4 170 | textureQuality: 0 171 | anisotropicTextures: 2 172 | antiAliasing: 2 173 | softParticles: 0 174 | softVegetation: 0 175 | realtimeReflectionProbes: 0 176 | billboardsFaceCameraPosition: 1 177 | vSyncCount: 0 178 | lodBias: 2 179 | maximumLODLevel: 0 180 | streamingMipmapsActive: 0 181 | streamingMipmapsAddAllCameras: 1 182 | streamingMipmapsMemoryBudget: 512 183 | streamingMipmapsRenderersPerFrame: 512 184 | streamingMipmapsMaxLevelReduction: 2 185 | streamingMipmapsMaxFileIORequests: 1024 186 | particleRaycastBudget: 1024 187 | asyncUploadTimeSlice: 1 188 | asyncUploadBufferSize: 32 189 | asyncUploadPersistentBuffer: 1 190 | resolutionScalingFixedDPIFactor: 1 191 | customRenderPipeline: {fileID: 0} 192 | excludedTargetPlatforms: 193 | - Standalone 194 | m_PerPlatformDefaultQuality: {} 195 | -------------------------------------------------------------------------------- /ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | serializedVersion: 2 6 | tags: [] 7 | layers: 8 | - Default 9 | - TransparentFX 10 | - Ignore Raycast 11 | - 12 | - Water 13 | - UI 14 | - 15 | - 16 | - Interactive 17 | - Player 18 | - PlayerLocal 19 | - Environment 20 | - UiMenu 21 | - Pickup 22 | - PickupNoEnvironment 23 | - StereoLeft 24 | - StereoRight 25 | - Walkthrough 26 | - MirrorReflection 27 | - reserved2 28 | - reserved3 29 | - reserved4 30 | - 31 | - 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | - 39 | - 40 | m_SortingLayers: 41 | - name: Default 42 | uniqueID: 0 43 | locked: 0 44 | -------------------------------------------------------------------------------- /ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: 0.02 7 | Maximum Allowed Timestep: 0.33333334 8 | m_TimeScale: 1 9 | Maximum Particle Timestep: 0.03 10 | -------------------------------------------------------------------------------- /ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!310 &1 4 | UnityConnectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 1 7 | m_Enabled: 0 8 | m_TestMode: 0 9 | m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events 10 | m_EventUrl: https://cdp.cloud.unity3d.com/v1/events 11 | m_ConfigUrl: https://config.uca.cloud.unity3d.com 12 | m_TestInitMode: 0 13 | CrashReportingSettings: 14 | m_EventUrl: https://perf-events.cloud.unity3d.com 15 | m_Enabled: 0 16 | m_LogBufferSize: 10 17 | m_CaptureEditorExceptions: 1 18 | UnityPurchasingSettings: 19 | m_Enabled: 0 20 | m_TestMode: 0 21 | UnityAnalyticsSettings: 22 | m_Enabled: 0 23 | m_TestMode: 0 24 | m_InitializeOnStartup: 1 25 | UnityAdsSettings: 26 | m_Enabled: 0 27 | m_InitializeOnStartup: 1 28 | m_TestMode: 0 29 | m_IosGameId: 30 | m_AndroidGameId: 31 | m_GameIds: {} 32 | m_GameId: 33 | PerformanceReportingSettings: 34 | m_Enabled: 0 35 | -------------------------------------------------------------------------------- /ProjectSettings/VFXManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!937362698 &1 4 | VFXManager: 5 | m_ObjectHideFlags: 0 6 | m_IndirectShader: {fileID: 0} 7 | m_CopyBufferShader: {fileID: 0} 8 | m_SortShader: {fileID: 0} 9 | m_StripUpdateShader: {fileID: 0} 10 | m_RenderPipeSettingsPath: 11 | m_FixedTimeStep: 0.016666668 12 | m_MaxDeltaTime: 0.05 13 | -------------------------------------------------------------------------------- /ProjectSettings/XRSettings.asset: -------------------------------------------------------------------------------- 1 | { 2 | "m_SettingKeys": [ 3 | "VR Device Disabled", 4 | "VR Device User Alert" 5 | ], 6 | "m_SettingValues": [ 7 | "False", 8 | "False" 9 | ] 10 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # VRC Animation GPU Instancing (AGI) 2 | 3 | ## SkinnedMeshRendererをGPU instancing対応させる変換ツール 4 | 5 | SkinnedMeshRenderer + Animator -> MeshRenderer + Animation Texture + (専用Shader) に変換することで,使用したいキャラクターとアニメーションをそのままインスタンシング化できる. 6 | 7 | 8 | 9 | 10 | # DEMO 11 | 12 | ## [ロポリこんちゃん](https://booth.pm/ja/items/1415037)を1000体描画するケース 13 | 1. SkinnedMeshRendererのまま1000体描画 -> Draw Callsがおよそ1000程度 14 | 15 | 16 | 17 | 2. GPU Instancing対応させた後1000体描画 -> Draw Callsはおよそ10程度まで下がり,FPSも大幅に改善させる 18 | 19 | 20 | 21 | 22 | # Features 23 | - VRChat対応 (Udon Sharp) 24 | - Quest対応 25 | - Animation Clips 複数対応 26 | - 複数SkinnedMeshRendererを持つキャラクターに対応 27 | - Apply root motion対応(歩行モーションに合わせてアニメーションが移動する) 28 | - BOOTHでセットアップ済みのSAMPLEを用意(VRChat上でそのまま確認できる) 29 | 30 | # Theory 31 | - ArmatureとVertexとAnimation情報をAnimation Textureに書き込んで保持 32 | - Root移動の情報は別のRepeat Textureに保持(メモリ軽量化) 33 | - 2つのTextureをshader側で読み込み,vertex shaderでメッシュを動かすことで,アニメーションを再現する 34 | 35 | # Requirement 36 | 以下の環境で動作確認済み 37 | - Unity: 2019.4.29f1 38 | - VRCSDK3 World: 2021.08.04.15.07 39 | - Udon Sharp: 0.20.2 40 | 41 | # Usage 42 | (WIP) ReleaseからVRCU_AnimationGPUInstancingをインストール 43 | (WIP)(もしくはBoothからダウンロード) 44 | 45 | VRCU_AnimationGPUInstancing.unitypackageをUnity Projectにインストールする. 46 | 47 | 使い方は以下を参照 48 | 49 | 1. [基本操作](Documents/usage_basic.md) 50 | 2. [ランダムにスポーンさせる場合](Documents/usage_random_spawn.md) 51 | 3. [歩行モーションをスポーンさせる場合](Documents/usage_locomotion_spawn.md) 52 | 4. [特定位置にスポーンさせる場合](Documents/usage_points_spawn.md) 53 | 54 | 55 | # Tips 56 | - [その他・注意点](Documents/tips.md) 57 | 58 | # Reference 59 | This project is inspired by [UnityGpuInstancedAnimation](https://github.com/piti6/UnityGpuInstancedAnimation) 60 | 61 | # Author 62 | chootana (ちゅーたな) 63 | 64 | twitter: [@choo_zap](https://twitter.com/choo_zap) 65 | 66 | # License 67 | 68 | VRC Animation GPU Instancing is under [MIT license](https://en.wikipedia.org/wiki/MIT_License). --------------------------------------------------------------------------------